diff --git a/public/js/jsvalidation.js b/public/js/jsvalidation.js index 2460abec..2ec948d9 100644 --- a/public/js/jsvalidation.js +++ b/public/js/jsvalidation.js @@ -1656,82 +1656,109 @@ if ( $.ajaxPrefilter ) { return $; })); /*! - * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2016 - * @version 1.3.4 + * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2020 + * @version 1.3.6 * * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format. + * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery. The + * library also adds support for Universal Module Definition (UMD). + * * @see http://php.net/manual/en/function.date.php * * For more JQuery plugins visit http://plugins.krajee.com * For more Yii related demos visit http://demos.krajee.com */ -var DateFormatter; -(function () { - "use strict"; - - var _compare, _lpad, _extend, _indexOf, defaultSettings, DAY, HOUR; - DAY = 1000 * 60 * 60 * 24; - HOUR = 3600; - - _compare = function (str1, str2) { - return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase(); - }; - _lpad = function (value, length, char) { - var chr = char || '0', val = value.toString(); - return val.length < length ? _lpad(chr + val, length) : val; - }; - _extend = function (out) { - var i, obj; - out = out || {}; - for (i = 1; i < arguments.length; i++) { - obj = arguments[i]; - if (!obj) { - continue; - } - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - if (typeof obj[key] === 'object') { - _extend(out[key], obj[key]); - } else { - out[key] = obj[key]; +(function (root, factory) { + // noinspection JSUnresolvedVariable + if (typeof define === 'function' && define.amd) { // AMD + // noinspection JSUnresolvedFunction + define([], factory); + } else { + // noinspection JSUnresolvedVariable + if (typeof module === 'object' && module.exports) { // Node + // noinspection JSUnresolvedVariable + module.exports = factory(); + } else { // Browser globals + root.DateFormatter = factory(); + } + } +}(typeof self !== 'undefined' ? self : this, function () { + var DateFormatter, $h; + /** + * Global helper object + */ + $h = { + DAY: 1000 * 60 * 60 * 24, + HOUR: 3600, + defaults: { + dateSettings: { + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + months: [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', + 'August', 'September', 'October', 'November', 'December' + ], + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + meridiem: ['AM', 'PM'], + ordinal: function (number) { + var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'}; + return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n]; + } + }, + separators: /[ \-+\/.:@]/g, + validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g, + intParts: /[djwNzmnyYhHgGis]/g, + tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, + tzClip: /[^-+\dA-Z]/g + }, + getInt: function (str, radix) { + return parseInt(str, (radix ? radix : 10)); + }, + compare: function (str1, str2) { + return typeof (str1) === 'string' && typeof (str2) === 'string' && str1.toLowerCase() === str2.toLowerCase(); + }, + lpad: function (value, length, chr) { + var val = value.toString(); + chr = chr || '0'; + return val.length < length ? $h.lpad(chr + val, length) : val; + }, + merge: function (out) { + var i, obj; + out = out || {}; + for (i = 1; i < arguments.length; i++) { + obj = arguments[i]; + if (!obj) { + continue; + } + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + if (typeof obj[key] === 'object') { + $h.merge(out[key], obj[key]); + } else { + out[key] = obj[key]; + } } } } - } - return out; - }; - _indexOf = function (val, arr) { - for (var i = 0; i < arr.length; i++) { - if (arr[i].toLowerCase() === val.toLowerCase()) { - return i; + return out; + }, + getIndex: function (val, arr) { + for (var i = 0; i < arr.length; i++) { + if (arr[i].toLowerCase() === val.toLowerCase()) { + return i; + } } + return -1; } - return -1; - }; - defaultSettings = { - dateSettings: { - days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - months: [ - 'January', 'February', 'March', 'April', 'May', 'June', 'July', - 'August', 'September', 'October', 'November', 'December' - ], - monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - meridiem: ['AM', 'PM'], - ordinal: function (number) { - var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'}; - return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n]; - } - }, - separators: /[ \-+\/\.T:@]/g, - validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g, - intParts: /[djwNzmnyYhHgGis]/g, - tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, - tzClip: /[^-+\dA-Z]/g }; + /** + * Date Formatter Library Constructor + * @param options + * @constructor + */ DateFormatter = function (options) { - var self = this, config = _extend(defaultSettings, options); + var self = this, config = $h.merge($h.defaults, options); self.dateSettings = config.dateSettings; self.separators = config.separators; self.validParts = config.validParts; @@ -1740,13 +1767,16 @@ var DateFormatter; self.tzClip = config.tzClip; }; + /** + * DateFormatter Library Prototype + */ DateFormatter.prototype = { constructor: DateFormatter, getMonth: function (val) { var self = this, i; - i = _indexOf(val, self.dateSettings.monthsShort) + 1; + i = $h.getIndex(val, self.dateSettings.monthsShort) + 1; if (i === 0) { - i = _indexOf(val, self.dateSettings.months) + 1; + i = $h.getIndex(val, self.dateSettings.months) + 1; } return i; }, @@ -1761,7 +1791,7 @@ var DateFormatter; return vDate; } if (vFormat === 'U') { - i = parseInt(vDate); + i = $h.getInt(vDate); return i ? new Date(i * 1000) : vDate; } switch (typeof vDate) { @@ -1774,18 +1804,23 @@ var DateFormatter; } vFormatParts = vFormat.match(self.validParts); if (!vFormatParts || vFormatParts.length === 0) { - throw new Error("Invalid date format definition."); + throw new Error('Invalid date format definition.'); + } + for (i = vFormatParts.length - 1; i >= 0; i--) { + if (vFormatParts[i] === 'S') { + vFormatParts.splice(i, 1); + } } vDateParts = vDate.replace(self.separators, '\0').split('\0'); for (i = 0; i < vDateParts.length; i++) { vDatePart = vDateParts[i]; - iDatePart = parseInt(vDatePart); + iDatePart = $h.getInt(vDatePart); switch (vFormatParts[i]) { case 'y': case 'Y': if (iDatePart) { len = vDatePart.length; - out.year = len === 2 ? parseInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart; + out.year = len === 2 ? $h.getInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart; } else { return null; } @@ -1823,15 +1858,17 @@ var DateFormatter; case 'g': case 'h': vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') : - (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1; + ((vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1); mer = vDateParts[vMeriIndex]; - if (vMeriIndex > -1) { - vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 : - (_compare(mer, vSettings.meridiem[1]) ? 12 : -1); - if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) { - out.hour = iDatePart + vMeriOffset - 1; - } else if (iDatePart >= 0 && iDatePart <= 23) { - out.hour = iDatePart; + if (vMeriIndex !== -1) { + vMeriOffset = $h.compare(mer, vSettings.meridiem[0]) ? 0 : + ($h.compare(mer, vSettings.meridiem[1]) ? 12 : -1); + if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset !== -1) { + out.hour = iDatePart % 12 === 0 ? vMeriOffset : iDatePart + vMeriOffset; + } else { + if (iDatePart >= 0 && iDatePart <= 23) { + out.hour = iDatePart; + } } } else { if (iDatePart >= 0 && iDatePart <= 23) { @@ -1869,8 +1906,9 @@ var DateFormatter; break; } } - if (vDateFlag === true && out.year && out.month && out.day) { - out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0); + if (vDateFlag === true) { + var varY = out.year || 0, varM = out.month ? out.month - 1 : 0, varD = out.day || 1; + out.date = new Date(varY, varM, varD, out.hour, out.min, out.sec, 0); } else { if (vTimeFlag !== true) { return null; @@ -1893,7 +1931,7 @@ var DateFormatter; for (i = 0; i < vParts.length; i++) { vDigit = 2; iPart = vParts[i]; - iSec = parseInt(iPart.substr(0, 2)); + iSec = $h.getInt(iPart.substr(0, 2)); if (isNaN(iSec)) { return null; } @@ -1916,7 +1954,7 @@ var DateFormatter; vYear = vDate.getFullYear(); len = iPart.length; vDigit = len < 4 ? len : 4; - vYear = parseInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4)); + vYear = $h.getInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4)); if (!vYear) { return null; } @@ -1952,7 +1990,7 @@ var DateFormatter; * @return {string} */ d: function () { - return _lpad(fmt.j(), 2); + return $h.lpad(fmt.j(), 2); }, /** * Shorthand day name: `Mon...Sun` @@ -1970,7 +2008,7 @@ var DateFormatter; }, /** * Full day name: `Monday...Sunday` - * @return {number} + * @return {string} */ l: function () { return vSettings.days[fmt.w()]; @@ -1995,7 +2033,7 @@ var DateFormatter; */ z: function () { var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1); - return Math.round((a - b) / DAY); + return Math.round((a - b) / $h.DAY); }, ////////// @@ -2007,7 +2045,7 @@ var DateFormatter; */ W: function () { var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4); - return _lpad(1 + Math.round((a - b) / DAY / 7), 2); + return $h.lpad(1 + Math.round((a - b) / $h.DAY / 7), 2); }, /////////// @@ -2025,7 +2063,7 @@ var DateFormatter; * @return {string} */ m: function () { - return _lpad(fmt.n(), 2); + return $h.lpad(fmt.n(), 2); }, /** * Shorthand month name; `Jan...Dec` @@ -2106,8 +2144,8 @@ var DateFormatter; * @return {string} */ B: function () { - var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds(); - return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3); + var H = vDate.getUTCHours() * $h.HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds(); + return $h.lpad(Math.floor((H + i + s + $h.HOUR) / 86.4) % 1000, 3); }, /** * 12-Hours: `1..12` @@ -2128,35 +2166,35 @@ var DateFormatter; * @return {string} */ h: function () { - return _lpad(fmt.g(), 2); + return $h.lpad(fmt.g(), 2); }, /** * 24-Hours w/leading 0: `00..23` * @return {string} */ H: function () { - return _lpad(fmt.G(), 2); + return $h.lpad(fmt.G(), 2); }, /** * Minutes w/leading 0: `00..59` * @return {string} */ i: function () { - return _lpad(vDate.getMinutes(), 2); + return $h.lpad(vDate.getMinutes(), 2); }, /** * Seconds w/leading 0: `00..59` * @return {string} */ s: function () { - return _lpad(vDate.getSeconds(), 2); + return $h.lpad(vDate.getSeconds(), 2); }, /** * Microseconds: `000000-999000` * @return {string} */ u: function () { - return _lpad(vDate.getMilliseconds() * 1000, 6); + return $h.lpad(vDate.getMilliseconds() * 1000, 6); }, ////////////// @@ -2185,7 +2223,7 @@ var DateFormatter; */ O: function () { var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo); - return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4); + return (tzo > 0 ? '-' : '+') + $h.lpad(Math.floor(a / 60) * 100 + a % 60, 4); }, /** * Difference to GMT with colon: `e.g. +02:00` @@ -2200,7 +2238,7 @@ var DateFormatter; * @return {string} */ T: function () { - var str = (String(vDate).match(self.tzParts) || [""]).pop().replace(self.tzClip, ""); + var str = (String(vDate).match(self.tzParts) || ['']).pop().replace(self.tzClip, ''); return str || 'UTC'; }, /** @@ -2259,7 +2297,7 @@ var DateFormatter; } str = self.parseFormat(vChar, vDate); if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') { - n = parseInt(str) || 0; + n = $h.getInt(str) || 0; str += self.dateSettings.ordinal(n); } vDateStr += str; @@ -2269,7 +2307,8 @@ var DateFormatter; return ''; } }; -})(); + return DateFormatter; +})); /*! * Laravel Javascript Validation * @@ -2651,10 +2690,10 @@ $(function() { module.exports = function array_diff(arr1) { // eslint-disable-line camelcase - // discuss at: http://locutus.io/php/array_diff/ - // original by: Kevin van Zonneveld (http://kvz.io) + // discuss at: https://locutus.io/php/array_diff/ + // original by: Kevin van Zonneveld (https://kvz.io) // improved by: Sanjoy Roy - // revised by: Brett Zamir (http://brett-zamir.me) + // revised by: Brett Zamir (https://brett-zamir.me) // example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld']) // returns 1: {0:'Kevin'} @@ -2733,6 +2772,8 @@ var reTzCorrection = '((?:GMT)?([+-])' + reHour24 + ':?' + reMinute + '?)'; var reDayOfYear = '(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])'; var reWeekOfYear = '(0[1-9]|[1-4][0-9]|5[0-3])'; +var reDateNoYear = reMonthText + '[ .\\t-]*' + reDay + '[,.stndrh\\t ]*'; + function processMeridian(hour, meridian) { meridian = meridian && meridian.toLowerCase(); @@ -3172,10 +3213,22 @@ var formats = { }, gnuNoColon: { - regex: RegExp('^t' + reHour24lz + reMinutelz, 'i'), + regex: RegExp('^t?' + reHour24lz + reMinutelz, 'i'), name: 'gnunocolon', callback: function callback(match, hour, minute) { - return this.time(+hour, +minute, 0, this.f); + // this rule is a special case + // if time was already set once by any preceding rule, it sets the captured value as year + switch (this.times) { + case 0: + return this.time(+hour, +minute, 0, this.f); + case 1: + this.y = hour * 100 + +minute; + this.times++; + + return true; + default: + return false; + } } }, @@ -3230,7 +3283,7 @@ var formats = { }, dateNoYear: { - regex: RegExp('^' + reMonthText + '[ .\\t-]*' + reDay + '[,.stndrh\\t ]*', 'i'), + regex: RegExp('^' + reDateNoYear, 'i'), name: 'datenoyear', callback: function callback(match, month, day) { return this.ymd(this.y, lookupMonth(month), +day); @@ -3469,18 +3522,6 @@ var formats = { } }, - gnuNoColon2: { - // second instance of gnunocolon, without leading 't' - // it's down here, because it is very generic (4 digits in a row) - // thus conflicts with many rules above - // only year4 should come afterwards - regex: RegExp('^' + reHour24lz + reMinutelz, 'i'), - name: 'gnunocolon', - callback: function callback(match, hour, minute) { - return this.time(+hour, +minute, 0, this.f); - } - }, - year4: { regex: RegExp('^' + reYear4), name: 'year4', @@ -3496,11 +3537,35 @@ var formats = { // do nothing }, - any: { - regex: /^[\s\S]+/, - name: 'any', - callback: function callback() { - return false; + dateShortWithTimeLong: { + regex: RegExp('^' + reDateNoYear + 't?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond, 'i'), + name: 'dateshortwithtimelong', + callback: function callback(match, month, day, hour, minute, second) { + return this.ymd(this.y, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0); + } + }, + + dateShortWithTimeLong12: { + regex: RegExp('^' + reDateNoYear + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'), + name: 'dateshortwithtimelong12', + callback: function callback(match, month, day, hour, minute, second, meridian) { + return this.ymd(this.y, lookupMonth(month), +day) && this.time(processMeridian(+hour, meridian), +minute, +second, 0); + } + }, + + dateShortWithTimeShort: { + regex: RegExp('^' + reDateNoYear + 't?' + reHour24 + '[:.]' + reMinute, 'i'), + name: 'dateshortwithtimeshort', + callback: function callback(match, month, day, hour, minute) { + return this.ymd(this.y, lookupMonth(month), +day) && this.time(+hour, +minute, 0, 0); + } + }, + + dateShortWithTimeShort12: { + regex: RegExp('^' + reDateNoYear + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'), + name: 'dateshortwithtimeshort12', + callback: function callback(match, month, day, hour, minute, meridian) { + return this.ymd(this.y, lookupMonth(month), +day) && this.time(processMeridian(+hour, meridian), +minute, 0, 0); } } }; @@ -3712,18 +3777,18 @@ var resultProto = { }; module.exports = function strtotime(str, now) { - // discuss at: http://locutus.io/php/strtotime/ - // original by: Caio Ariede (http://caioariede.com) - // improved by: Kevin van Zonneveld (http://kvz.io) - // improved by: Caio Ariede (http://caioariede.com) - // improved by: A. Matías Quezada (http://amatiasq.com) + // discuss at: https://locutus.io/php/strtotime/ + // original by: Caio Ariede (https://caioariede.com) + // improved by: Kevin van Zonneveld (https://kvz.io) + // improved by: Caio Ariede (https://caioariede.com) + // improved by: A. Matías Quezada (https://amatiasq.com) // improved by: preuter - // improved by: Brett Zamir (http://brett-zamir.me) + // improved by: Brett Zamir (https://brett-zamir.me) // improved by: Mirko Faber // input by: David // bugfixed by: Wagner B. Soares // bugfixed by: Artur Tchernychev - // bugfixed by: Stephan Bösch-Plepelits (http://github.com/plepe) + // bugfixed by: Stephan Bösch-Plepelits (https://github.com/plepe) // reimplemented by: Rafał Kukawski // note 1: Examples all have a fixed timestamp to prevent // note 1: tests to fail because of variable time(zones) @@ -3737,41 +3802,44 @@ module.exports = function strtotime(str, now) { // returns 4: 1241425800 // example 5: strtotime('2009-05-04 08:30:00+02:00') // returns 5: 1241418600 + if (now == null) { now = Math.floor(Date.now() / 1000); } - // the rule order is very fragile - // as many formats are similar to others - // so small change can cause - // input misinterpretation + // the rule order is important + // if multiple rules match, the longest match wins + // if multiple rules match the same string, the first match wins var rules = [formats.yesterday, formats.now, formats.noon, formats.midnightOrToday, formats.tomorrow, formats.timestamp, formats.firstOrLastDay, formats.backOrFrontOf, // formats.weekdayOf, // not yet implemented - formats.mssqltime, formats.timeLong12, formats.timeShort12, formats.timeTiny12, formats.soap, formats.wddx, formats.exif, formats.xmlRpc, formats.xmlRpcNoColon, formats.clf, formats.iso8601long, formats.dateTextual, formats.pointedDate4, formats.pointedDate2, formats.timeLong24, formats.dateNoColon, formats.pgydotd, formats.timeShort24, formats.iso8601noColon, - // iso8601dateSlash needs to come before dateSlash - formats.iso8601dateSlash, formats.dateSlash, formats.american, formats.americanShort, formats.gnuDateShortOrIso8601date2, formats.iso8601date4, formats.gnuNoColon, formats.gnuDateShorter, formats.pgTextReverse, formats.dateFull, formats.dateNoDay, formats.dateNoDayRev, formats.pgTextShort, formats.dateNoYear, formats.dateNoYearRev, formats.isoWeekDay, formats.relativeText, formats.relative, formats.dayText, formats.relativeTextWeek, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.ago, formats.gnuNoColon2, formats.year4, - // note: the two rules below - // should always come last - formats.whitespace, formats.any]; + formats.timeTiny12, formats.timeShort12, formats.timeLong12, formats.mssqltime, formats.timeShort24, formats.timeLong24, formats.iso8601long, formats.gnuNoColon, formats.iso8601noColon, formats.americanShort, formats.american, formats.iso8601date4, formats.iso8601dateSlash, formats.dateSlash, formats.gnuDateShortOrIso8601date2, formats.gnuDateShorter, formats.dateFull, formats.pointedDate4, formats.pointedDate2, formats.dateNoDay, formats.dateNoDayRev, formats.dateTextual, formats.dateNoYear, formats.dateNoYearRev, formats.dateNoColon, formats.xmlRpc, formats.xmlRpcNoColon, formats.soap, formats.wddx, formats.exif, formats.pgydotd, formats.isoWeekDay, formats.pgTextShort, formats.pgTextReverse, formats.clf, formats.year4, formats.ago, formats.dayText, formats.relativeTextWeek, formats.relativeText, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.dateShortWithTimeShort12, formats.dateShortWithTimeLong12, formats.dateShortWithTimeShort, formats.dateShortWithTimeLong, formats.relative, formats.whitespace]; var result = Object.create(resultProto); while (str.length) { + var longestMatch = null; + var finalRule = null; + for (var i = 0, l = rules.length; i < l; i++) { var format = rules[i]; var match = str.match(format.regex); if (match) { - // care only about false results. Ignore other values - if (format.callback && format.callback.apply(result, match) === false) { - return false; + if (!longestMatch || match[0].length > longestMatch[0].length) { + longestMatch = match; + finalRule = format; } - - str = str.substr(match[0].length); - break; } } + + if (!finalRule || finalRule.callback && finalRule.callback.apply(result, longestMatch) === false) { + return false; + } + + str = str.substr(longestMatch[0].length); + finalRule = null; + longestMatch = null; } return Math.floor(result.toDate(new Date(now * 1000)) / 1000); @@ -3792,8 +3860,8 @@ module.exports = function strtotime(str, now) { module.exports = function ini_get(varname) { // eslint-disable-line camelcase - // discuss at: http://locutus.io/php/ini_get/ - // original by: Brett Zamir (http://brett-zamir.me) + // discuss at: https://locutus.io/php/ini_get/ + // original by: Brett Zamir (https://brett-zamir.me) // note 1: The ini values must be set by ini_set or manually within an ini file // example 1: ini_set('date.timezone', 'Asia/Hong_Kong') // example 1: ini_get('date.timezone') @@ -3830,13 +3898,13 @@ module.exports = function ini_get(varname) { module.exports = function strlen(string) { - // discuss at: http://locutus.io/php/strlen/ - // original by: Kevin van Zonneveld (http://kvz.io) + // discuss at: https://locutus.io/php/strlen/ + // original by: Kevin van Zonneveld (https://kvz.io) // improved by: Sakimori - // improved by: Kevin van Zonneveld (http://kvz.io) + // improved by: Kevin van Zonneveld (https://kvz.io) // input by: Kirk Strobeck // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman) - // revised by: Brett Zamir (http://brett-zamir.me) + // revised by: Brett Zamir (https://brett-zamir.me) // note 1: May look like overkill, but in order to be truly faithful to handling all Unicode // note 1: characters and to this function in PHP which does not count the number of bytes // note 1: but counts the number of characters, something like this is really necessary. @@ -3918,14 +3986,14 @@ module.exports = function strlen(string) { module.exports = function is_numeric(mixedVar) { // eslint-disable-line camelcase - // discuss at: http://locutus.io/php/is_numeric/ - // original by: Kevin van Zonneveld (http://kvz.io) + // discuss at: https://locutus.io/php/is_numeric/ + // original by: Kevin van Zonneveld (https://kvz.io) // improved by: David // improved by: taith // bugfixed by: Tim de Koning - // bugfixed by: WebDevHobo (http://webdevhobo.blogspot.com/) - // bugfixed by: Brett Zamir (http://brett-zamir.me) - // bugfixed by: Denis Chenu (http://shnoulle.net) + // bugfixed by: WebDevHobo (https://webdevhobo.blogspot.com/) + // bugfixed by: Brett Zamir (https://brett-zamir.me) + // bugfixed by: Denis Chenu (https://shnoulle.net) // example 1: is_numeric(186.31) // returns 1: true // example 2: is_numeric('Kevin van Zonneveld') @@ -4447,7 +4515,7 @@ $.extend(true, laravelValidation, { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2RhdGV0aW1lL3N0cnRvdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvaW5mby9pbmlfZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2N1dHVzL3BocC9zdHJpbmdzL3N0cmxlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiJCIsImV4dGVuZCIsImxhcmF2ZWxWYWxpZGF0aW9uIiwiaGVscGVycyIsIm51bWVyaWNSdWxlcyIsImZpbGVpbmZvIiwiZmllbGRPYmoiLCJpbmRleCIsIkZpbGVOYW1lIiwidmFsdWUiLCJmaWxlcyIsImZpbGUiLCJleHRlbnNpb24iLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInNpemUiLCJ0eXBlIiwic2VsZWN0b3IiLCJuYW1lcyIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iLCJoYXNOdW1lcmljUnVsZXMiLCJlbGVtZW50IiwiaGFzUnVsZXMiLCJydWxlcyIsImZvdW5kIiwidmFsaWRhdG9yIiwiZGF0YSIsImZvcm0iLCJsaXN0UnVsZXMiLCJjYWNoZSIsImFycmF5UnVsZXNDYWNoZSIsIm5hbWUiLCJlYWNoIiwiYXJyYXlSdWxlIiwic2V0dGluZ3MiLCJvYmpSdWxlcyIsIl9ydWxlcyIsImluQXJyYXkiLCJzdHJsZW4iLCJzdHJpbmciLCJnZXRTaXplIiwib2JqIiwiaXNfbnVtZXJpYyIsInBhcnNlRmxvYXQiLCJNYXRoIiwiZmxvb3IiLCJnZXRMYXJhdmVsVmFsaWRhdGlvbiIsInJ1bGUiLCJ1bmRlZmluZWQiLCJzdGF0aWNSdWxlcyIsImtleSIsInBhcnNlVGltZSIsImZvcm1hdCIsInRpbWVWYWx1ZSIsImZtdCIsIkRhdGVGb3JtYXR0ZXIiLCJkYXRlUnVsZSIsInN0cnRvdGltZSIsInBhcnNlRGF0ZSIsInJvdW5kIiwiZ2V0VGltZSIsImNvbXBhcmVEYXRlcyIsInBhcmFtcyIsIm9wZXJhdG9yIiwidGltZUNvbXBhcmUiLCJpc05hTiIsInRhcmdldCIsImRlcGVuZGVudEVsZW1lbnQiLCJlbGVtZW50VmFsdWUiLCJFcnJvciIsImd1ZXNzRGF0ZSIsInRleHQiLCJub3ciLCJtaXhlZF92YXIiLCJhcmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJhcnJheURpZmYiLCJhcnIxIiwiYXJyMiIsImFycmF5X2RpZmYiLCJhcnJheUVxdWFscyIsImlzRW1wdHlPYmplY3QiLCJlbCIsImZpbmRCeU5hbWUiLCJvbmZvY3Vzb3V0IiwiZXZlbnQiLCJ0YWdOYW1lIiwicnVsZU5hbWUiLCJvZmYiLCJvbiIsInZhbGlkIiwicGFyc2VFcnJvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJuZXdSZXNwb25zZSIsImVycm9yTXNnIiwicmVzcG9uc2VUZXh0IiwibWF0Y2giLCJlc2NhcGVSZWdFeHAiLCJzdHIiLCJyZXBsYWNlIiwicmVnZXhGcm9tV2lsZGNhcmQiLCJuYW1lUGFydHMiLCJzcGxpdCIsInJlZ2V4cFBhcnRzIiwibWFwIiwiY3VycmVudFZhbHVlIiwiUmVnRXhwIiwibWVyZ2VSdWxlcyIsIm5ld1J1bGVzIiwicnVsZXNMaXN0IiwibGFyYXZlbFZhbGlkYXRpb25SZW1vdGUiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNsQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixFQUFFO0FBQ3hCLHNCQUFzQixFQUFFO0FBQ3hCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3REFBd0QsSUFBSTtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixJQUFJO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVB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QUNILE9BUmlCLENBQWxCO0FBVUEsYUFBTyxJQUFJQyxNQUFKLENBQVcsTUFBSUgsV0FBVyxDQUFDdkYsSUFBWixDQUFpQixTQUFqQixDQUFKLEdBQWdDLEdBQTNDLENBQVA7QUFDSCxLQS9ZSTs7QUFpWkw7Ozs7Ozs7QUFPQTJGLGNBQVUsRUFBRSxVQUFVdkYsS0FBVixFQUFpQndGLFFBQWpCLEVBQTJCO0FBQ25DLFVBQUlDLFNBQVMsR0FBRztBQUNaLDZCQUFxQkQsUUFBUSxDQUFDakgsaUJBQVQsSUFBOEIsRUFEdkM7QUFFWixtQ0FBMkJpSCxRQUFRLENBQUNFLHVCQUFULElBQW9DO0FBRm5ELE9BQWhCOztBQUtBLFdBQUssSUFBSS9ELEdBQVQsSUFBZ0I4RCxTQUFoQixFQUEyQjtBQUN2QixZQUFJQSxTQUFTLENBQUM5RCxHQUFELENBQVQsQ0FBZWpDLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0I7QUFDSDs7QUFFRCxZQUFJLE9BQU9NLEtBQUssQ0FBQzJCLEdBQUQsQ0FBWixLQUFzQixXQUExQixFQUF1QztBQUNuQzNCLGVBQUssQ0FBQzJCLEdBQUQsQ0FBTCxHQUFhLEVBQWI7QUFDSDs7QUFFRDNCLGFBQUssQ0FBQzJCLEdBQUQsQ0FBTCxHQUFhM0IsS0FBSyxDQUFDMkIsR0FBRCxDQUFMLENBQVdnRSxNQUFYLENBQWtCRixTQUFTLENBQUM5RCxHQUFELENBQTNCLENBQWI7QUFDSDs7QUFFRCxhQUFPM0IsS0FBUDtBQUNIO0FBM2FJO0FBRnFCLENBQWxDLEUiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9oZWxwZXJzLmpzXCIpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFycmF5X2RpZmYoYXJyMSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2FycmF5X2RpZmYvXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogU2Fuam95IFJveVxuICAvLyAgcmV2aXNlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gICBleGFtcGxlIDE6IGFycmF5X2RpZmYoWydLZXZpbicsICd2YW4nLCAnWm9ubmV2ZWxkJ10sIFsndmFuJywgJ1pvbm5ldmVsZCddKVxuICAvLyAgIHJldHVybnMgMTogezA6J0tldmluJ31cblxuICB2YXIgcmV0QXJyID0ge307XG4gIHZhciBhcmdsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGsxID0gJyc7XG4gIHZhciBpID0gMTtcbiAgdmFyIGsgPSAnJztcbiAgdmFyIGFyciA9IHt9O1xuXG4gIGFycjFrZXlzOiBmb3IgKGsxIGluIGFycjEpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxhYmVsc1xuICAgIGZvciAoaSA9IDE7IGkgPCBhcmdsOyBpKyspIHtcbiAgICAgIGFyciA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAoayBpbiBhcnIpIHtcbiAgICAgICAgaWYgKGFycltrXSA9PT0gYXJyMVtrMV0pIHtcbiAgICAgICAgICAvLyBJZiBpdCByZWFjaGVzIGhlcmUsIGl0IHdhcyBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgYXJyYXksIHNvIHRyeSBuZXh0IHZhbHVlXG4gICAgICAgICAgY29udGludWUgYXJyMWtleXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbGFiZWxzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldEFycltrMV0gPSBhcnIxW2sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0QXJyO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5X2RpZmYuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVTcGFjZSA9ICdbIFxcXFx0XSsnO1xudmFyIHJlU3BhY2VPcHQgPSAnWyBcXFxcdF0qJztcbnZhciByZU1lcmlkaWFuID0gJyg/OihbYXBdKVxcXFwuP21cXFxcLj8oW1xcXFx0IF18JCkpJztcbnZhciByZUhvdXIyNCA9ICcoMlswLTRdfFswMV0/WzAtOV0pJztcbnZhciByZUhvdXIyNGx6ID0gJyhbMDFdWzAtOV18MlswLTRdKSc7XG52YXIgcmVIb3VyMTIgPSAnKDA/WzEtOV18MVswLTJdKSc7XG52YXIgcmVNaW51dGUgPSAnKFswLTVdP1swLTldKSc7XG52YXIgcmVNaW51dGVseiA9ICcoWzAtNV1bMC05XSknO1xudmFyIHJlU2Vjb25kID0gJyg2MHxbMC01XT9bMC05XSknO1xudmFyIHJlU2Vjb25kbHogPSAnKDYwfFswLTVdWzAtOV0pJztcbnZhciByZUZyYWMgPSAnKD86XFxcXC4oWzAtOV0rKSknO1xuXG52YXIgcmVEYXlmdWxsID0gJ3N1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5JztcbnZhciByZURheWFiYnIgPSAnc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0JztcbnZhciByZURheXRleHQgPSByZURheWZ1bGwgKyAnfCcgKyByZURheWFiYnIgKyAnfHdlZWtkYXlzPyc7XG5cbnZhciByZVJlbHRleHRudW1iZXIgPSAnZmlyc3R8c2Vjb25kfHRoaXJkfGZvdXJ0aHxmaWZ0aHxzaXh0aHxzZXZlbnRofGVpZ2h0aD98bmludGh8dGVudGh8ZWxldmVudGh8dHdlbGZ0aCc7XG52YXIgcmVSZWx0ZXh0dGV4dCA9ICduZXh0fGxhc3R8cHJldmlvdXN8dGhpcyc7XG52YXIgcmVSZWx0ZXh0dW5pdCA9ICcoPzpzZWNvbmR8c2VjfG1pbnV0ZXxtaW58aG91cnxkYXl8Zm9ydG5pZ2h0fGZvcnRobmlnaHR8bW9udGh8eWVhcilzP3x3ZWVrc3wnICsgcmVEYXl0ZXh0O1xuXG52YXIgcmVZZWFyID0gJyhbMC05XXsxLDR9KSc7XG52YXIgcmVZZWFyMiA9ICcoWzAtOV17Mn0pJztcbnZhciByZVllYXI0ID0gJyhbMC05XXs0fSknO1xudmFyIHJlWWVhcjR3aXRoU2lnbiA9ICcoWystXT9bMC05XXs0fSknO1xudmFyIHJlTW9udGggPSAnKDFbMC0yXXwwP1swLTldKSc7XG52YXIgcmVNb250aGx6ID0gJygwWzAtOV18MVswLTJdKSc7XG52YXIgcmVEYXkgPSAnKD86KDNbMDFdfFswLTJdP1swLTldKSg/OnN0fG5kfHJkfHRoKT8pJztcbnZhciByZURheWx6ID0gJygwWzAtOV18WzEtMl1bMC05XXwzWzAxXSknO1xuXG52YXIgcmVNb250aEZ1bGwgPSAnamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcic7XG52YXIgcmVNb250aEFiYnIgPSAnamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB0P3xvY3R8bm92fGRlYyc7XG52YXIgcmVNb250aHJvbWFuID0gJ2lbdnhdfHZpezAsM318eGl7MCwyfXxpezEsM30nO1xudmFyIHJlTW9udGhUZXh0ID0gJygnICsgcmVNb250aEZ1bGwgKyAnfCcgKyByZU1vbnRoQWJiciArICd8JyArIHJlTW9udGhyb21hbiArICcpJztcblxudmFyIHJlVHpDb3JyZWN0aW9uID0gJygoPzpHTVQpPyhbKy1dKScgKyByZUhvdXIyNCArICc6PycgKyByZU1pbnV0ZSArICc/KSc7XG52YXIgcmVEYXlPZlllYXIgPSAnKDAwWzEtOV18MFsxLTldWzAtOV18WzEyXVswLTldWzAtOV18M1swLTVdWzAtOV18MzZbMC02XSknO1xudmFyIHJlV2Vla09mWWVhciA9ICcoMFsxLTldfFsxLTRdWzAtOV18NVswLTNdKSc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NNZXJpZGlhbihob3VyLCBtZXJpZGlhbikge1xuICBtZXJpZGlhbiA9IG1lcmlkaWFuICYmIG1lcmlkaWFuLnRvTG93ZXJDYXNlKCk7XG5cbiAgc3dpdGNoIChtZXJpZGlhbikge1xuICAgIGNhc2UgJ2EnOlxuICAgICAgaG91ciArPSBob3VyID09PSAxMiA/IC0xMiA6IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwJzpcbiAgICAgIGhvdXIgKz0gaG91ciAhPT0gMTIgPyAxMiA6IDA7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBob3VyO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzWWVhcih5ZWFyU3RyKSB7XG4gIHZhciB5ZWFyID0gK3llYXJTdHI7XG5cbiAgaWYgKHllYXJTdHIubGVuZ3RoIDwgNCAmJiB5ZWFyIDwgMTAwKSB7XG4gICAgeWVhciArPSB5ZWFyIDwgNzAgPyAyMDAwIDogMTkwMDtcbiAgfVxuXG4gIHJldHVybiB5ZWFyO1xufVxuXG5mdW5jdGlvbiBsb29rdXBNb250aChtb250aFN0cikge1xuICByZXR1cm4ge1xuICAgIGphbjogMCxcbiAgICBqYW51YXJ5OiAwLFxuICAgIGk6IDAsXG4gICAgZmViOiAxLFxuICAgIGZlYnJ1YXJ5OiAxLFxuICAgIGlpOiAxLFxuICAgIG1hcjogMixcbiAgICBtYXJjaDogMixcbiAgICBpaWk6IDIsXG4gICAgYXByOiAzLFxuICAgIGFwcmlsOiAzLFxuICAgIGl2OiAzLFxuICAgIG1heTogNCxcbiAgICB2OiA0LFxuICAgIGp1bjogNSxcbiAgICBqdW5lOiA1LFxuICAgIHZpOiA1LFxuICAgIGp1bDogNixcbiAgICBqdWx5OiA2LFxuICAgIHZpaTogNixcbiAgICBhdWc6IDcsXG4gICAgYXVndXN0OiA3LFxuICAgIHZpaWk6IDcsXG4gICAgc2VwOiA4LFxuICAgIHNlcHQ6IDgsXG4gICAgc2VwdGVtYmVyOiA4LFxuICAgIGl4OiA4LFxuICAgIG9jdDogOSxcbiAgICBvY3RvYmVyOiA5LFxuICAgIHg6IDksXG4gICAgbm92OiAxMCxcbiAgICBub3ZlbWJlcjogMTAsXG4gICAgeGk6IDEwLFxuICAgIGRlYzogMTEsXG4gICAgZGVjZW1iZXI6IDExLFxuICAgIHhpaTogMTFcbiAgfVttb250aFN0ci50b0xvd2VyQ2FzZSgpXTtcbn1cblxuZnVuY3Rpb24gbG9va3VwV2Vla2RheShkYXlTdHIpIHtcbiAgdmFyIGRlc2lyZWRTdW5kYXlOdW1iZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG5cbiAgdmFyIGRheU51bWJlcnMgPSB7XG4gICAgbW9uOiAxLFxuICAgIG1vbmRheTogMSxcbiAgICB0dWU6IDIsXG4gICAgdHVlc2RheTogMixcbiAgICB3ZWQ6IDMsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHRodTogNCxcbiAgICB0aHVyc2RheTogNCxcbiAgICBmcmk6IDUsXG4gICAgZnJpZGF5OiA1LFxuICAgIHNhdDogNixcbiAgICBzYXR1cmRheTogNixcbiAgICBzdW46IDAsXG4gICAgc3VuZGF5OiAwXG4gIH07XG5cbiAgcmV0dXJuIGRheU51bWJlcnNbZGF5U3RyLnRvTG93ZXJDYXNlKCldIHx8IGRlc2lyZWRTdW5kYXlOdW1iZXI7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFJlbGF0aXZlKHJlbFRleHQpIHtcbiAgdmFyIHJlbGF0aXZlTnVtYmVycyA9IHtcbiAgICBsYXN0OiAtMSxcbiAgICBwcmV2aW91czogLTEsXG4gICAgdGhpczogMCxcbiAgICBmaXJzdDogMSxcbiAgICBuZXh0OiAxLFxuICAgIHNlY29uZDogMixcbiAgICB0aGlyZDogMyxcbiAgICBmb3VydGg6IDQsXG4gICAgZmlmdGg6IDUsXG4gICAgc2l4dGg6IDYsXG4gICAgc2V2ZW50aDogNyxcbiAgICBlaWdodDogOCxcbiAgICBlaWdodGg6IDgsXG4gICAgbmludGg6IDksXG4gICAgdGVudGg6IDEwLFxuICAgIGVsZXZlbnRoOiAxMSxcbiAgICB0d2VsZnRoOiAxMlxuICB9O1xuXG4gIHZhciByZWxhdGl2ZUJlaGF2aW9yID0ge1xuICAgIHRoaXM6IDFcbiAgfTtcblxuICB2YXIgcmVsVGV4dExvd2VyID0gcmVsVGV4dC50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiB7XG4gICAgYW1vdW50OiByZWxhdGl2ZU51bWJlcnNbcmVsVGV4dExvd2VyXSxcbiAgICBiZWhhdmlvcjogcmVsYXRpdmVCZWhhdmlvcltyZWxUZXh0TG93ZXJdIHx8IDBcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1R6Q29ycmVjdGlvbih0ek9mZnNldCwgb2xkVmFsdWUpIHtcbiAgdmFyIHJlVHpDb3JyZWN0aW9uTG9vc2UgPSAvKD86R01UKT8oWystXSkoXFxkKykoOj8pKFxcZHswLDJ9KS9pO1xuICB0ek9mZnNldCA9IHR6T2Zmc2V0ICYmIHR6T2Zmc2V0Lm1hdGNoKHJlVHpDb3JyZWN0aW9uTG9vc2UpO1xuXG4gIGlmICghdHpPZmZzZXQpIHtcbiAgICByZXR1cm4gb2xkVmFsdWU7XG4gIH1cblxuICB2YXIgc2lnbiA9IHR6T2Zmc2V0WzFdID09PSAnLScgPyAxIDogLTE7XG4gIHZhciBob3VycyA9ICt0ek9mZnNldFsyXTtcbiAgdmFyIG1pbnV0ZXMgPSArdHpPZmZzZXRbNF07XG5cbiAgaWYgKCF0ek9mZnNldFs0XSAmJiAhdHpPZmZzZXRbM10pIHtcbiAgICBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAlIDEwMCk7XG4gICAgaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzIC8gMTAwKTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogKGhvdXJzICogNjAgKyBtaW51dGVzKTtcbn1cblxudmFyIGZvcm1hdHMgPSB7XG4gIHllc3RlcmRheToge1xuICAgIHJlZ2V4OiAvXnllc3RlcmRheS9pLFxuICAgIG5hbWU6ICd5ZXN0ZXJkYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHRoaXMucmQgLT0gMTtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpO1xuICAgIH1cbiAgfSxcblxuICBub3c6IHtcbiAgICByZWdleDogL15ub3cvaSxcbiAgICBuYW1lOiAnbm93J1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfSxcblxuICBub29uOiB7XG4gICAgcmVnZXg6IC9ebm9vbi9pLFxuICAgIG5hbWU6ICdub29uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnRpbWUoMTIsIDAsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICBtaWRuaWdodE9yVG9kYXk6IHtcbiAgICByZWdleDogL14obWlkbmlnaHR8dG9kYXkpL2ksXG4gICAgbmFtZTogJ21pZG5pZ2h0IHwgdG9kYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpO1xuICAgIH1cbiAgfSxcblxuICB0b21vcnJvdzoge1xuICAgIHJlZ2V4OiAvXnRvbW9ycm93L2ksXG4gICAgbmFtZTogJ3RvbW9ycm93JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJkICs9IDE7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZXN0YW1wOiB7XG4gICAgcmVnZXg6IC9eQCgtP1xcZCspL2ksXG4gICAgbmFtZTogJ3RpbWVzdGFtcCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB0aW1lc3RhbXApIHtcbiAgICAgIHRoaXMucnMgKz0gK3RpbWVzdGFtcDtcbiAgICAgIHRoaXMueSA9IDE5NzA7XG4gICAgICB0aGlzLm0gPSAwO1xuICAgICAgdGhpcy5kID0gMTtcbiAgICAgIHRoaXMuZGF0ZXMgPSAwO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnpvbmUoMCk7XG4gICAgfVxuICB9LFxuXG4gIGZpcnN0T3JMYXN0RGF5OiB7XG4gICAgcmVnZXg6IC9eKGZpcnN0fGxhc3QpIGRheSBvZi9pLFxuICAgIG5hbWU6ICdmaXJzdGRheW9mIHwgbGFzdGRheW9mJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSkge1xuICAgICAgaWYgKGRheS50b0xvd2VyQ2FzZSgpID09PSAnZmlyc3QnKSB7XG4gICAgICAgIHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGJhY2tPckZyb250T2Y6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKGJhY2t8ZnJvbnQpIG9mICcgKyByZUhvdXIyNCArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuICsgJz8nLCAnaScpLFxuICAgIG5hbWU6ICdiYWNrb2YgfCBmcm9udG9mJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHNpZGUsIGhvdXJzLCBtZXJpZGlhbikge1xuICAgICAgdmFyIGJhY2sgPSBzaWRlLnRvTG93ZXJDYXNlKCkgPT09ICdiYWNrJztcbiAgICAgIHZhciBob3VyID0gK2hvdXJzO1xuICAgICAgdmFyIG1pbnV0ZSA9IDE1O1xuXG4gICAgICBpZiAoIWJhY2spIHtcbiAgICAgICAgaG91ciAtPSAxO1xuICAgICAgICBtaW51dGUgPSA0NTtcbiAgICAgIH1cblxuICAgICAgaG91ciA9IHByb2Nlc3NNZXJpZGlhbihob3VyLCBtZXJpZGlhbik7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpICYmIHRoaXMudGltZShob3VyLCBtaW51dGUsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICB3ZWVrZGF5T2Y6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHRudW1iZXIgKyAnfCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICcoJyArIHJlRGF5ZnVsbCArICd8JyArIHJlRGF5YWJiciArICcpJyArIHJlU3BhY2UgKyAnb2YnLCAnaScpLFxuICAgIG5hbWU6ICd3ZWVrZGF5b2YnXG4gICAgLy8gdG9kb1xuICB9LFxuXG4gIG1zc3FsdGltZToge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiArICdbOi5dKFswLTldKyknICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAnbXNzcWx0aW1lJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjLCBtZXJpZGlhbikge1xuICAgICAgcmV0dXJuIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgK21pbnV0ZSwgK3NlY29uZCwgK2ZyYWMuc3Vic3RyKDAsIDMpKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZUxvbmcxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZSArICdbOi5dJyArIHJlU2Vjb25kbHogKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAndGltZWxvbmcxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICB0aW1lU2hvcnQxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZWx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ3RpbWVzaG9ydDEyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICB0aW1lVGlueTEyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZUhvdXIxMiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICd0aW1ldGlueTEyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCAwLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgc29hcDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICctJyArIHJlTW9udGhseiArICctJyArIHJlRGF5bHogKyAnVCcgKyByZUhvdXIyNGx6ICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHogKyByZUZyYWMgKyByZVR6Q29ycmVjdGlvbiArICc/JywgJ2knKSxcbiAgICBuYW1lOiAnc29hcCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhYywgdHpDb3JyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCArZnJhYy5zdWJzdHIoMCwgMykpICYmIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICB3ZGR4OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0nICsgcmVNb250aCArICctJyArIHJlRGF5ICsgJ1QnICsgcmVIb3VyMjQgKyAnOicgKyByZU1pbnV0ZSArICc6JyArIHJlU2Vjb25kKSxcbiAgICBuYW1lOiAnd2RkeCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGV4aWY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnOicgKyByZU1vbnRobHogKyAnOicgKyByZURheWx6ICsgJyAnICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6LCAnaScpLFxuICAgIG5hbWU6ICdleGlmJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgeG1sUnBjOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiArICdUJyArIHJlSG91cjI0ICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHopLFxuICAgIG5hbWU6ICd4bWxycGMnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICB4bWxScGNOb0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiArICdbVHRdJyArIHJlSG91cjI0ICsgcmVNaW51dGVseiArIHJlU2Vjb25kbHopLFxuICAgIG5hbWU6ICd4bWxycGNub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgY2xmOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICcvKCcgKyByZU1vbnRoQWJiciArICcpLycgKyByZVllYXI0ICsgJzonICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6ICsgcmVTcGFjZSArIHJlVHpDb3JyZWN0aW9uLCAnaScpLFxuICAgIG5hbWU6ICdjbGYnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhciwgaG91ciwgbWludXRlLCBzZWNvbmQsIHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCkgJiYgdGhpcy56b25lKHByb2Nlc3NUekNvcnJlY3Rpb24odHpDb3JyZWN0aW9uKSk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFsb25nOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCArIHJlRnJhYywgJ2knKSxcbiAgICBuYW1lOiAnaXNvODYwMWxvbmcnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsICtmcmFjLnN1YnN0cigwLCAzKSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVUZXh0dWFsOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoVGV4dCArICdbIC5cXFxcdC1dKicgKyByZURheSArICdbLC5zdG5kcmhcXFxcdCBdKycgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ2RhdGV0ZXh0dWFsJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcG9pbnRlZERhdGU0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbLlxcXFx0LV0nICsgcmVNb250aCArICdbLi1dJyArIHJlWWVhcjQpLFxuICAgIG5hbWU6ICdwb2ludGVkZGF0ZTQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBwb2ludGVkRGF0ZTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1suXFxcXHRdJyArIHJlTW9udGggKyAnXFxcXC4nICsgcmVZZWFyMiksXG4gICAgbmFtZTogJ3BvaW50ZWRkYXRlMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXksIG1vbnRoLCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVMb25nMjQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjQgKyAnWzouXScgKyByZU1pbnV0ZSArICdbOi5dJyArIHJlU2Vjb25kKSxcbiAgICBuYW1lOiAndGltZWxvbmcyNCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiksXG4gICAgbmFtZTogJ2RhdGVub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcGd5ZG90ZDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICdcXFxcLj8nICsgcmVEYXlPZlllYXIpLFxuICAgIG5hbWU6ICdwZ3lkb3RkJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCAwLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVNob3J0MjQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjQgKyAnWzouXScgKyByZU1pbnV0ZSwgJ2knKSxcbiAgICBuYW1lOiAndGltZXNob3J0MjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKCtob3VyLCArbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgaXNvODYwMW5vQ29sb246IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjRseiArIHJlTWludXRlbHogKyByZVNlY29uZGx6LCAnaScpLFxuICAgIG5hbWU6ICdpc284NjAxbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFkYXRlU2xhc2g6IHtcbiAgICAvLyBldmVudGhvdWdoIHRoZSB0cmFpbGluZyBzbGFzaCBpcyBvcHRpb25hbCBpbiBQSFBcbiAgICAvLyBoZXJlIGl0J3MgbWFuZGF0b3J5IGFuZCBpbnB1dHMgd2l0aG91dCB0aGUgc2xhc2hcbiAgICAvLyBhcmUgaGFuZGxlZCBieSBkYXRlc2xhc2hcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLycgKyByZU1vbnRobHogKyAnLycgKyByZURheWx6ICsgJy8nKSxcbiAgICBuYW1lOiAnaXNvODYwMWRhdGVzbGFzaCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTbGFzaDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICcvJyArIHJlTW9udGggKyAnLycgKyByZURheSksXG4gICAgbmFtZTogJ2RhdGVzbGFzaCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGFtZXJpY2FuOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoICsgJy8nICsgcmVEYXkgKyAnLycgKyByZVllYXIpLFxuICAgIG5hbWU6ICdhbWVyaWNhbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGFtZXJpY2FuU2hvcnQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlTW9udGggKyAnLycgKyByZURheSksXG4gICAgbmFtZTogJ2FtZXJpY2Fuc2hvcnQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHRoaXMueSwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZ251RGF0ZVNob3J0T3JJc284NjAxZGF0ZTI6IHtcbiAgICAvLyBpc284NjAxZGF0ZTIgaXMgY29tcGxldGUgc3Vic2V0IG9mIGdudWRhdGVzaG9ydFxuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyICsgJy0nICsgcmVNb250aCArICctJyArIHJlRGF5KSxcbiAgICBuYW1lOiAnZ251ZGF0ZXNob3J0IHwgaXNvODYwMWRhdGUyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgaXNvODYwMWRhdGU0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0d2l0aFNpZ24gKyAnLScgKyByZU1vbnRobHogKyAnLScgKyByZURheWx6KSxcbiAgICBuYW1lOiAnaXNvODYwMWRhdGU0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZ251Tm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ150JyArIHJlSG91cjI0bHogKyByZU1pbnV0ZWx6LCAnaScpLFxuICAgIG5hbWU6ICdnbnVub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgdGhpcy5mKTtcbiAgICB9XG4gIH0sXG5cbiAgZ251RGF0ZVNob3J0ZXI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLScgKyByZU1vbnRoKSxcbiAgICBuYW1lOiAnZ251ZGF0ZXNob3J0ZXInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgcGdUZXh0UmV2ZXJzZToge1xuICAgIC8vIG5vdGU6IGFsbG93ZWQgeWVhcnMgYXJlIGZyb20gMzItOTk5OVxuICAgIC8vIHllYXJzIGJlbG93IDMyIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRheXMgaW4gZGF0ZWZ1bGxcbiAgICByZWdleDogUmVnRXhwKCdeJyArICcoXFxcXGR7Myw0fXxbNC05XVxcXFxkfDNbMi05XSktKCcgKyByZU1vbnRoQWJiciArICcpLScgKyByZURheWx6LCAnaScpLFxuICAgIG5hbWU6ICdwZ3RleHRyZXZlcnNlJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZUZ1bGw6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1sgXFxcXHQuLV0qJyArIHJlTW9udGhUZXh0ICsgJ1sgXFxcXHQuLV0qJyArIHJlWWVhciwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZWZ1bGwnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9EYXk6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlTW9udGhUZXh0ICsgJ1sgLlxcXFx0LV0qJyArIHJlWWVhcjQsICdpJyksXG4gICAgbmFtZTogJ2RhdGVub2RheScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksIDEpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9EYXlSZXY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnWyAuXFxcXHQtXSonICsgcmVNb250aFRleHQsICdpJyksXG4gICAgbmFtZTogJ2RhdGVub2RheXJldicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksIDEpO1xuICAgIH1cbiAgfSxcblxuICBwZ1RleHRTaG9ydDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14oJyArIHJlTW9udGhBYmJyICsgJyktJyArIHJlRGF5bHogKyAnLScgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ3BndGV4dHNob3J0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vWWVhcjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSonLCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm95ZWFyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb1llYXJSZXY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1sgLlxcXFx0LV0qJyArIHJlTW9udGhUZXh0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm95ZWFycmV2JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGlzb1dlZWtEYXk6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLT9XJyArIHJlV2Vla09mWWVhciArICcoPzotPyhbMC03XSkpPycpLFxuICAgIG5hbWU6ICdpc293ZWVrZGF5IHwgaXNvd2VlaycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgICAgIGRheSA9IGRheSA/ICtkYXkgOiAxO1xuXG4gICAgICBpZiAoIXRoaXMueW1kKCt5ZWFyLCAwLCAxKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkYXkgb2Ygd2VlayBmb3IgSmFuIDFzdFxuICAgICAgdmFyIGRheU9mV2VlayA9IG5ldyBEYXRlKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpLmdldERheSgpO1xuXG4gICAgICAvLyBhbmQgdXNlIHRoZSBkYXkgdG8gZmlndXJlIG91dCB0aGUgb2Zmc2V0IGZvciBkYXkgMSBvZiB3ZWVrIDFcbiAgICAgIGRheU9mV2VlayA9IDAgLSAoZGF5T2ZXZWVrID4gNCA/IGRheU9mV2VlayAtIDcgOiBkYXlPZldlZWspO1xuXG4gICAgICB0aGlzLnJkICs9IGRheU9mV2VlayArICh3ZWVrIC0gMSkgKiA3ICsgZGF5O1xuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZVRleHQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHRudW1iZXIgKyAnfCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICcoJyArIHJlUmVsdGV4dHVuaXQgKyAnKScsICdpJyksXG4gICAgbmFtZTogJ3JlbGF0aXZldGV4dCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCByZWxWYWx1ZSwgcmVsVW5pdCkge1xuICAgICAgLy8gdG9kbzogaW1wbGVtZW50IGhhbmRsaW5nIG9mICd0aGlzIHRpbWUtdW5pdCdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgdmFyIF9sb29rdXBSZWxhdGl2ZSA9IGxvb2t1cFJlbGF0aXZlKHJlbFZhbHVlKSxcbiAgICAgICAgICBhbW91bnQgPSBfbG9va3VwUmVsYXRpdmUuYW1vdW50LFxuICAgICAgICAgIGJlaGF2aW9yID0gX2xvb2t1cFJlbGF0aXZlLmJlaGF2aW9yO1xuXG4gICAgICBzd2l0Y2ggKHJlbFVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgdGhpcy5ycyArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLnJpICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICB0aGlzLnJoICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodHMnOlxuICAgICAgICBjYXNlICdmb3J0aG5pZ2h0JzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodHMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogMTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQgKiA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgICAgdGhpcy5ybSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgdGhpcy5yeSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbic6Y2FzZSAnbW9uZGF5JzpcbiAgICAgICAgY2FzZSAndHVlJzpjYXNlICd0dWVzZGF5JzpcbiAgICAgICAgY2FzZSAnd2VkJzpjYXNlICd3ZWRuZXNkYXknOlxuICAgICAgICBjYXNlICd0aHUnOmNhc2UgJ3RodXJzZGF5JzpcbiAgICAgICAgY2FzZSAnZnJpJzpjYXNlICdmcmlkYXknOlxuICAgICAgICBjYXNlICdzYXQnOmNhc2UgJ3NhdHVyZGF5JzpcbiAgICAgICAgY2FzZSAnc3VuJzpjYXNlICdzdW5kYXknOlxuICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gbG9va3VwV2Vla2RheShyZWxVbml0LCA3KTtcbiAgICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICAgICAgdGhpcy5yZCArPSAoYW1vdW50ID4gMCA/IGFtb3VudCAtIDEgOiBhbW91bnQpICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vla2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZWtkYXlzJzpcbiAgICAgICAgICAvLyB0b2RvXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHJlbGF0aXZlOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXihbKy1dKilbIFxcXFx0XSooXFxcXGQrKScgKyByZVNwYWNlT3B0ICsgJygnICsgcmVSZWx0ZXh0dW5pdCArICd8d2VlayknLCAnaScpLFxuICAgIG5hbWU6ICdyZWxhdGl2ZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBzaWducywgcmVsVmFsdWUsIHJlbFVuaXQpIHtcbiAgICAgIHZhciBtaW51c2VzID0gc2lnbnMucmVwbGFjZSgvW14tXS9nLCAnJykubGVuZ3RoO1xuXG4gICAgICB2YXIgYW1vdW50ID0gK3JlbFZhbHVlICogTWF0aC5wb3coLTEsIG1pbnVzZXMpO1xuXG4gICAgICBzd2l0Y2ggKHJlbFVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgdGhpcy5ycyArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLnJpICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICB0aGlzLnJoICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodHMnOlxuICAgICAgICBjYXNlICdmb3J0aG5pZ2h0JzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodHMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogMTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQgKiA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgICAgdGhpcy5ybSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgdGhpcy5yeSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbic6Y2FzZSAnbW9uZGF5JzpcbiAgICAgICAgY2FzZSAndHVlJzpjYXNlICd0dWVzZGF5JzpcbiAgICAgICAgY2FzZSAnd2VkJzpjYXNlICd3ZWRuZXNkYXknOlxuICAgICAgICBjYXNlICd0aHUnOmNhc2UgJ3RodXJzZGF5JzpcbiAgICAgICAgY2FzZSAnZnJpJzpjYXNlICdmcmlkYXknOlxuICAgICAgICBjYXNlICdzYXQnOmNhc2UgJ3NhdHVyZGF5JzpcbiAgICAgICAgY2FzZSAnc3VuJzpjYXNlICdzdW5kYXknOlxuICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gbG9va3VwV2Vla2RheShyZWxVbml0LCA3KTtcbiAgICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICAgICAgdGhpcy5yZCArPSAoYW1vdW50ID4gMCA/IGFtb3VudCAtIDEgOiBhbW91bnQpICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vla2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZWtkYXlzJzpcbiAgICAgICAgICAvLyB0b2RvXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRheVRleHQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZURheXRleHQgKyAnKScsICdpJyksXG4gICAgbmFtZTogJ2RheXRleHQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5VGV4dCkge1xuICAgICAgdGhpcy5yZXNldFRpbWUoKTtcbiAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkoZGF5VGV4dCwgMCk7XG5cbiAgICAgIGlmICh0aGlzLndlZWtkYXlCZWhhdmlvciAhPT0gMikge1xuICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHJlbGF0aXZlVGV4dFdlZWs6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICd3ZWVrJywgJ2knKSxcbiAgICBuYW1lOiAncmVsYXRpdmV0ZXh0d2VlaycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCByZWxUZXh0KSB7XG4gICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDI7XG5cbiAgICAgIHN3aXRjaCAocmVsVGV4dC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ3RoaXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgdGhpcy5yZCArPSA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgY2FzZSAncHJldmlvdXMnOlxuICAgICAgICAgIHRoaXMucmQgLT0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFOKHRoaXMud2Vla2RheSkpIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5ID0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW9udGhGdWxsT3JNb250aEFiYnI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZU1vbnRoRnVsbCArICd8JyArIHJlTW9udGhBYmJyICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdtb250aGZ1bGwgfCBtb250aGFiYnInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgdGhpcy5kKTtcbiAgICB9XG4gIH0sXG5cbiAgdHpDb3JyZWN0aW9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVR6Q29ycmVjdGlvbiwgJ2knKSxcbiAgICBuYW1lOiAndHpjb3JyZWN0aW9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sodHpDb3JyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lKHByb2Nlc3NUekNvcnJlY3Rpb24odHpDb3JyZWN0aW9uKSk7XG4gICAgfVxuICB9LFxuXG4gIGFnbzoge1xuICAgIHJlZ2V4OiAvXmFnby9pLFxuICAgIG5hbWU6ICdhZ28nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHRoaXMucnkgPSAtdGhpcy5yeTtcbiAgICAgIHRoaXMucm0gPSAtdGhpcy5ybTtcbiAgICAgIHRoaXMucmQgPSAtdGhpcy5yZDtcbiAgICAgIHRoaXMucmggPSAtdGhpcy5yaDtcbiAgICAgIHRoaXMucmkgPSAtdGhpcy5yaTtcbiAgICAgIHRoaXMucnMgPSAtdGhpcy5ycztcbiAgICAgIHRoaXMucmYgPSAtdGhpcy5yZjtcbiAgICB9XG4gIH0sXG5cbiAgZ251Tm9Db2xvbjI6IHtcbiAgICAvLyBzZWNvbmQgaW5zdGFuY2Ugb2YgZ251bm9jb2xvbiwgd2l0aG91dCBsZWFkaW5nICd0J1xuICAgIC8vIGl0J3MgZG93biBoZXJlLCBiZWNhdXNlIGl0IGlzIHZlcnkgZ2VuZXJpYyAoNCBkaWdpdHMgaW4gYSByb3cpXG4gICAgLy8gdGh1cyBjb25mbGljdHMgd2l0aCBtYW55IHJ1bGVzIGFib3ZlXG4gICAgLy8gb25seSB5ZWFyNCBzaG91bGQgY29tZSBhZnRlcndhcmRzXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZUhvdXIyNGx6ICsgcmVNaW51dGVseiwgJ2knKSxcbiAgICBuYW1lOiAnZ251bm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsIDAsIHRoaXMuZik7XG4gICAgfVxuICB9LFxuXG4gIHllYXI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0KSxcbiAgICBuYW1lOiAneWVhcjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhcikge1xuICAgICAgdGhpcy55ID0gK3llYXI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2hpdGVzcGFjZToge1xuICAgIHJlZ2V4OiAvXlsgLixcXHRdKy8sXG4gICAgbmFtZTogJ3doaXRlc3BhY2UnXG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxuXG4gIGFueToge1xuICAgIHJlZ2V4OiAvXltcXHNcXFNdKy8sXG4gICAgbmFtZTogJ2FueScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHJlc3VsdFByb3RvID0ge1xuICAvLyBkYXRlXG4gIHk6IE5hTixcbiAgbTogTmFOLFxuICBkOiBOYU4sXG4gIC8vIHRpbWVcbiAgaDogTmFOLFxuICBpOiBOYU4sXG4gIHM6IE5hTixcbiAgZjogTmFOLFxuXG4gIC8vIHJlbGF0aXZlIHNoaWZ0c1xuICByeTogMCxcbiAgcm06IDAsXG4gIHJkOiAwLFxuICByaDogMCxcbiAgcmk6IDAsXG4gIHJzOiAwLFxuICByZjogMCxcblxuICAvLyB3ZWVrZGF5IHJlbGF0ZWQgc2hpZnRzXG4gIHdlZWtkYXk6IE5hTixcbiAgd2Vla2RheUJlaGF2aW9yOiAwLFxuXG4gIC8vIGZpcnN0IG9yIGxhc3QgZGF5IG9mIG1vbnRoXG4gIC8vIDAgbm9uZSwgMSBmaXJzdCwgLTEgbGFzdFxuICBmaXJzdE9yTGFzdERheU9mTW9udGg6IDAsXG5cbiAgLy8gdGltZXpvbmUgY29ycmVjdGlvbiBpbiBtaW51dGVzXG4gIHo6IE5hTixcblxuICAvLyBjb3VudGVyc1xuICBkYXRlczogMCxcbiAgdGltZXM6IDAsXG4gIHpvbmVzOiAwLFxuXG4gIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgeW1kOiBmdW5jdGlvbiB5bWQoeSwgbSwgZCkge1xuICAgIGlmICh0aGlzLmRhdGVzID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZXMrKztcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMubSA9IG07XG4gICAgdGhpcy5kID0gZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgdGltZTogZnVuY3Rpb24gdGltZShoLCBpLCBzLCBmKSB7XG4gICAgaWYgKHRoaXMudGltZXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lcysrO1xuICAgIHRoaXMuaCA9IGg7XG4gICAgdGhpcy5pID0gaTtcbiAgICB0aGlzLnMgPSBzO1xuICAgIHRoaXMuZiA9IGY7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgcmVzZXRUaW1lOiBmdW5jdGlvbiByZXNldFRpbWUoKSB7XG4gICAgdGhpcy5oID0gMDtcbiAgICB0aGlzLmkgPSAwO1xuICAgIHRoaXMucyA9IDA7XG4gICAgdGhpcy5mID0gMDtcbiAgICB0aGlzLnRpbWVzID0gMDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICB6b25lOiBmdW5jdGlvbiB6b25lKG1pbnV0ZXMpIHtcbiAgICBpZiAodGhpcy56b25lcyA8PSAxKSB7XG4gICAgICB0aGlzLnpvbmVzKys7XG4gICAgICB0aGlzLnogPSBtaW51dGVzO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICB0b0RhdGU6IGZ1bmN0aW9uIHRvRGF0ZShyZWxhdGl2ZVRvKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXMgJiYgIXRoaXMudGltZXMpIHtcbiAgICAgIHRoaXMuaCA9IHRoaXMuaSA9IHRoaXMucyA9IHRoaXMuZiA9IDA7XG4gICAgfVxuXG4gICAgLy8gZmlsbCBob2xlc1xuICAgIGlmIChpc05hTih0aGlzLnkpKSB7XG4gICAgICB0aGlzLnkgPSByZWxhdGl2ZVRvLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMubSkpIHtcbiAgICAgIHRoaXMubSA9IHJlbGF0aXZlVG8uZ2V0TW9udGgoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5kKSkge1xuICAgICAgdGhpcy5kID0gcmVsYXRpdmVUby5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMuaCkpIHtcbiAgICAgIHRoaXMuaCA9IHJlbGF0aXZlVG8uZ2V0SG91cnMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5pKSkge1xuICAgICAgdGhpcy5pID0gcmVsYXRpdmVUby5nZXRNaW51dGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMucykpIHtcbiAgICAgIHRoaXMucyA9IHJlbGF0aXZlVG8uZ2V0U2Vjb25kcygpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmYpKSB7XG4gICAgICB0aGlzLmYgPSByZWxhdGl2ZVRvLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIH1cblxuICAgIC8vIGFkanVzdCBzcGVjaWFsIGVhcmx5XG4gICAgc3dpdGNoICh0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLmQgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHRoaXMuZCA9IDA7XG4gICAgICAgIHRoaXMubSArPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKHRoaXMud2Vla2RheSkpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUocmVsYXRpdmVUby5nZXRUaW1lKCkpO1xuICAgICAgZGF0ZS5zZXRGdWxsWWVhcih0aGlzLnksIHRoaXMubSwgdGhpcy5kKTtcbiAgICAgIGRhdGUuc2V0SG91cnModGhpcy5oLCB0aGlzLmksIHRoaXMucywgdGhpcy5mKTtcblxuICAgICAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG5cbiAgICAgIGlmICh0aGlzLndlZWtkYXlCZWhhdmlvciA9PT0gMikge1xuICAgICAgICAvLyBUbyBtYWtlIFwidGhpcyB3ZWVrXCIgd29yaywgd2hlcmUgdGhlIGN1cnJlbnQgZGF5IG9mIHdlZWsgaXMgYSBcInN1bmRheVwiXG4gICAgICAgIGlmIChkb3cgPT09IDAgJiYgdGhpcy53ZWVrZGF5ICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gLTY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUbyBtYWtlIFwic3VuZGF5IHRoaXMgd2Vla1wiIHdvcmssIHdoZXJlIHRoZSBjdXJyZW50IGRheSBvZiB3ZWVrIGlzIG5vdCBhIFwic3VuZGF5XCJcbiAgICAgICAgaWYgKHRoaXMud2Vla2RheSA9PT0gMCAmJiBkb3cgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndlZWtkYXkgPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kIC09IGRvdztcbiAgICAgICAgdGhpcy5kICs9IHRoaXMud2Vla2RheTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkaWZmID0gdGhpcy53ZWVrZGF5IC0gZG93O1xuXG4gICAgICAgIC8vIHNvbWUgUEhQIG1hZ2ljXG4gICAgICAgIGlmICh0aGlzLnJkIDwgMCAmJiBkaWZmIDwgMCB8fCB0aGlzLnJkID49IDAgJiYgZGlmZiA8PSAtdGhpcy53ZWVrZGF5QmVoYXZpb3IpIHtcbiAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53ZWVrZGF5ID49IDApIHtcbiAgICAgICAgICB0aGlzLmQgKz0gZGlmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmQgLT0gNyAtIChNYXRoLmFicyh0aGlzLndlZWtkYXkpIC0gZG93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2Vla2RheSA9IE5hTjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGp1c3QgcmVsYXRpdmVcbiAgICB0aGlzLnkgKz0gdGhpcy5yeTtcbiAgICB0aGlzLm0gKz0gdGhpcy5ybTtcbiAgICB0aGlzLmQgKz0gdGhpcy5yZDtcblxuICAgIHRoaXMuaCArPSB0aGlzLnJoO1xuICAgIHRoaXMuaSArPSB0aGlzLnJpO1xuICAgIHRoaXMucyArPSB0aGlzLnJzO1xuICAgIHRoaXMuZiArPSB0aGlzLnJmO1xuXG4gICAgdGhpcy5yeSA9IHRoaXMucm0gPSB0aGlzLnJkID0gMDtcbiAgICB0aGlzLnJoID0gdGhpcy5yaSA9IHRoaXMucnMgPSB0aGlzLnJmID0gMDtcblxuICAgIHZhciByZXN1bHQgPSBuZXcgRGF0ZShyZWxhdGl2ZVRvLmdldFRpbWUoKSk7XG4gICAgLy8gc2luY2UgRGF0ZSBjb25zdHJ1Y3RvciB0cmVhdHMgeWVhcnMgPD0gOTkgYXMgMTkwMCtcbiAgICAvLyBpdCBjYW4ndCBiZSB1c2VkLCB0aHVzIHRoaXMgd2VpcmQgd2F5XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpO1xuICAgIHJlc3VsdC5zZXRIb3Vycyh0aGlzLmgsIHRoaXMuaSwgdGhpcy5zLCB0aGlzLmYpO1xuXG4gICAgLy8gbm90ZTogdGhpcyBpcyBkb25lIHR3aWNlIGluIFBIUFxuICAgIC8vIGVhcmx5IHdoZW4gcHJvY2Vzc2luZyBzcGVjaWFsIHJlbGF0aXZlc1xuICAgIC8vIGFuZCBsYXRlXG4gICAgLy8gdG9kbzogY2hlY2sgaWYgdGhlIGxvZ2ljIGNhbiBiZSByZWR1Y2VkXG4gICAgLy8gdG8ganVzdCBvbmUgdGltZSBhY3Rpb25cbiAgICBzd2l0Y2ggKHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJlc3VsdC5zZXREYXRlKDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHJlc3VsdC5zZXRNb250aChyZXN1bHQuZ2V0TW9udGgoKSArIDEsIDApO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBhZGp1c3QgdGltZXpvbmVcbiAgICBpZiAoIWlzTmFOKHRoaXMueikgJiYgcmVzdWx0LmdldFRpbWV6b25lT2Zmc2V0KCkgIT09IHRoaXMueikge1xuICAgICAgcmVzdWx0LnNldFVUQ0Z1bGxZZWFyKHJlc3VsdC5nZXRGdWxsWWVhcigpLCByZXN1bHQuZ2V0TW9udGgoKSwgcmVzdWx0LmdldERhdGUoKSk7XG5cbiAgICAgIHJlc3VsdC5zZXRVVENIb3VycyhyZXN1bHQuZ2V0SG91cnMoKSwgcmVzdWx0LmdldE1pbnV0ZXMoKSArIHRoaXMueiwgcmVzdWx0LmdldFNlY29uZHMoKSwgcmVzdWx0LmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cnRvdGltZShzdHIsIG5vdykge1xuICAvLyAgICAgICBkaXNjdXNzIGF0OiBodHRwOi8vbG9jdXR1cy5pby9waHAvc3RydG90aW1lL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cDovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cDovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBBLiBNYXTDrWFzIFF1ZXphZGEgKGh0dHA6Ly9hbWF0aWFzcS5jb20pXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IHByZXV0ZXJcbiAgLy8gICAgICBpbXByb3ZlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gICAgICBpbXByb3ZlZCBieTogTWlya28gRmFiZXJcbiAgLy8gICAgICAgICBpbnB1dCBieTogRGF2aWRcbiAgLy8gICAgICBidWdmaXhlZCBieTogV2FnbmVyIEIuIFNvYXJlc1xuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBBcnR1ciBUY2hlcm55Y2hldlxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBTdGVwaGFuIELDtnNjaC1QbGVwZWxpdHMgKGh0dHA6Ly9naXRodWIuY29tL3BsZXBlKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBSYWZhxYIgS3VrYXdza2lcbiAgLy8gICAgICAgICAgIG5vdGUgMTogRXhhbXBsZXMgYWxsIGhhdmUgYSBmaXhlZCB0aW1lc3RhbXAgdG8gcHJldmVudFxuICAvLyAgICAgICAgICAgbm90ZSAxOiB0ZXN0cyB0byBmYWlsIGJlY2F1c2Ugb2YgdmFyaWFibGUgdGltZSh6b25lcylcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogc3RydG90aW1lKCcrMSBkYXknLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAxOiAxMTI5NzE5NjAwXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHN0cnRvdGltZSgnKzEgd2VlayAyIGRheXMgNCBob3VycyAyIHNlY29uZHMnLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAyOiAxMTMwNDI1MjAyXG4gIC8vICAgICAgICBleGFtcGxlIDM6IHN0cnRvdGltZSgnbGFzdCBtb250aCcsIDExMjk2MzMyMDApXG4gIC8vICAgICAgICByZXR1cm5zIDM6IDExMjcwNDEyMDBcbiAgLy8gICAgICAgIGV4YW1wbGUgNDogc3RydG90aW1lKCcyMDA5LTA1LTA0IDA4OjMwOjAwKzAwJylcbiAgLy8gICAgICAgIHJldHVybnMgNDogMTI0MTQyNTgwMFxuICAvLyAgICAgICAgZXhhbXBsZSA1OiBzdHJ0b3RpbWUoJzIwMDktMDUtMDQgMDg6MzA6MDArMDI6MDAnKVxuICAvLyAgICAgICAgcmV0dXJucyA1OiAxMjQxNDE4NjAwXG4gIGlmIChub3cgPT0gbnVsbCkge1xuICAgIG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICB9XG5cbiAgLy8gdGhlIHJ1bGUgb3JkZXIgaXMgdmVyeSBmcmFnaWxlXG4gIC8vIGFzIG1hbnkgZm9ybWF0cyBhcmUgc2ltaWxhciB0byBvdGhlcnNcbiAgLy8gc28gc21hbGwgY2hhbmdlIGNhbiBjYXVzZVxuICAvLyBpbnB1dCBtaXNpbnRlcnByZXRhdGlvblxuICB2YXIgcnVsZXMgPSBbZm9ybWF0cy55ZXN0ZXJkYXksIGZvcm1hdHMubm93LCBmb3JtYXRzLm5vb24sIGZvcm1hdHMubWlkbmlnaHRPclRvZGF5LCBmb3JtYXRzLnRvbW9ycm93LCBmb3JtYXRzLnRpbWVzdGFtcCwgZm9ybWF0cy5maXJzdE9yTGFzdERheSwgZm9ybWF0cy5iYWNrT3JGcm9udE9mLFxuICAvLyBmb3JtYXRzLndlZWtkYXlPZiwgLy8gbm90IHlldCBpbXBsZW1lbnRlZFxuICBmb3JtYXRzLm1zc3FsdGltZSwgZm9ybWF0cy50aW1lTG9uZzEyLCBmb3JtYXRzLnRpbWVTaG9ydDEyLCBmb3JtYXRzLnRpbWVUaW55MTIsIGZvcm1hdHMuc29hcCwgZm9ybWF0cy53ZGR4LCBmb3JtYXRzLmV4aWYsIGZvcm1hdHMueG1sUnBjLCBmb3JtYXRzLnhtbFJwY05vQ29sb24sIGZvcm1hdHMuY2xmLCBmb3JtYXRzLmlzbzg2MDFsb25nLCBmb3JtYXRzLmRhdGVUZXh0dWFsLCBmb3JtYXRzLnBvaW50ZWREYXRlNCwgZm9ybWF0cy5wb2ludGVkRGF0ZTIsIGZvcm1hdHMudGltZUxvbmcyNCwgZm9ybWF0cy5kYXRlTm9Db2xvbiwgZm9ybWF0cy5wZ3lkb3RkLCBmb3JtYXRzLnRpbWVTaG9ydDI0LCBmb3JtYXRzLmlzbzg2MDFub0NvbG9uLFxuICAvLyBpc284NjAxZGF0ZVNsYXNoIG5lZWRzIHRvIGNvbWUgYmVmb3JlIGRhdGVTbGFzaFxuICBmb3JtYXRzLmlzbzg2MDFkYXRlU2xhc2gsIGZvcm1hdHMuZGF0ZVNsYXNoLCBmb3JtYXRzLmFtZXJpY2FuLCBmb3JtYXRzLmFtZXJpY2FuU2hvcnQsIGZvcm1hdHMuZ251RGF0ZVNob3J0T3JJc284NjAxZGF0ZTIsIGZvcm1hdHMuaXNvODYwMWRhdGU0LCBmb3JtYXRzLmdudU5vQ29sb24sIGZvcm1hdHMuZ251RGF0ZVNob3J0ZXIsIGZvcm1hdHMucGdUZXh0UmV2ZXJzZSwgZm9ybWF0cy5kYXRlRnVsbCwgZm9ybWF0cy5kYXRlTm9EYXksIGZvcm1hdHMuZGF0ZU5vRGF5UmV2LCBmb3JtYXRzLnBnVGV4dFNob3J0LCBmb3JtYXRzLmRhdGVOb1llYXIsIGZvcm1hdHMuZGF0ZU5vWWVhclJldiwgZm9ybWF0cy5pc29XZWVrRGF5LCBmb3JtYXRzLnJlbGF0aXZlVGV4dCwgZm9ybWF0cy5yZWxhdGl2ZSwgZm9ybWF0cy5kYXlUZXh0LCBmb3JtYXRzLnJlbGF0aXZlVGV4dFdlZWssIGZvcm1hdHMubW9udGhGdWxsT3JNb250aEFiYnIsIGZvcm1hdHMudHpDb3JyZWN0aW9uLCBmb3JtYXRzLmFnbywgZm9ybWF0cy5nbnVOb0NvbG9uMiwgZm9ybWF0cy55ZWFyNCxcbiAgLy8gbm90ZTogdGhlIHR3byBydWxlcyBiZWxvd1xuICAvLyBzaG91bGQgYWx3YXlzIGNvbWUgbGFzdFxuICBmb3JtYXRzLndoaXRlc3BhY2UsIGZvcm1hdHMuYW55XTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShyZXN1bHRQcm90byk7XG5cbiAgd2hpbGUgKHN0ci5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJ1bGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGZvcm1hdCA9IHJ1bGVzW2ldO1xuXG4gICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goZm9ybWF0LnJlZ2V4KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIGNhcmUgb25seSBhYm91dCBmYWxzZSByZXN1bHRzLiBJZ25vcmUgb3RoZXIgdmFsdWVzXG4gICAgICAgIGlmIChmb3JtYXQuY2FsbGJhY2sgJiYgZm9ybWF0LmNhbGxiYWNrLmFwcGx5KHJlc3VsdCwgbWF0Y2gpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGguZmxvb3IocmVzdWx0LnRvRGF0ZShuZXcgRGF0ZShub3cgKiAxMDAwKSkgLyAxMDAwKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJ0b3RpbWUuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaV9nZXQodmFybmFtZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2luaV9nZXQvXG4gIC8vIG9yaWdpbmFsIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogVGhlIGluaSB2YWx1ZXMgbXVzdCBiZSBzZXQgYnkgaW5pX3NldCBvciBtYW51YWxseSB3aXRoaW4gYW4gaW5pIGZpbGVcbiAgLy8gICBleGFtcGxlIDE6IGluaV9zZXQoJ2RhdGUudGltZXpvbmUnLCAnQXNpYS9Ib25nX0tvbmcnKVxuICAvLyAgIGV4YW1wbGUgMTogaW5pX2dldCgnZGF0ZS50aW1lem9uZScpXG4gIC8vICAgcmV0dXJucyAxOiAnQXNpYS9Ib25nX0tvbmcnXG5cbiAgdmFyICRnbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgJGdsb2JhbC4kbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXMgfHwge307XG4gIHZhciAkbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXM7XG4gICRsb2N1dHVzLnBocCA9ICRsb2N1dHVzLnBocCB8fCB7fTtcbiAgJGxvY3V0dXMucGhwLmluaSA9ICRsb2N1dHVzLnBocC5pbmkgfHwge307XG5cbiAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0gJiYgJGxvY3V0dXMucGhwLmluaVt2YXJuYW1lXS5sb2NhbF92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuICRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pX2dldC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL3N0cmxlbi9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHA6Ly9rdnouaW8pXG4gIC8vIGltcHJvdmVkIGJ5OiBTYWtpbW9yaVxuICAvLyBpbXByb3ZlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cDovL2t2ei5pbylcbiAgLy8gICAgaW5wdXQgYnk6IEtpcmsgU3Ryb2JlY2tcbiAgLy8gYnVnZml4ZWQgYnk6IE9ubm8gTWFyc21hbiAoaHR0cHM6Ly90d2l0dGVyLmNvbS9vbm5vbWFyc21hbilcbiAgLy8gIHJldmlzZWQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgbm90ZSAxOiBNYXkgbG9vayBsaWtlIG92ZXJraWxsLCBidXQgaW4gb3JkZXIgdG8gYmUgdHJ1bHkgZmFpdGhmdWwgdG8gaGFuZGxpbmcgYWxsIFVuaWNvZGVcbiAgLy8gICAgICBub3RlIDE6IGNoYXJhY3RlcnMgYW5kIHRvIHRoaXMgZnVuY3Rpb24gaW4gUEhQIHdoaWNoIGRvZXMgbm90IGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXNcbiAgLy8gICAgICBub3RlIDE6IGJ1dCBjb3VudHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBzb21ldGhpbmcgbGlrZSB0aGlzIGlzIHJlYWxseSBuZWNlc3NhcnkuXG4gIC8vICAgZXhhbXBsZSAxOiBzdHJsZW4oJ0tldmluIHZhbiBab25uZXZlbGQnKVxuICAvLyAgIHJldHVybnMgMTogMTlcbiAgLy8gICBleGFtcGxlIDI6IGluaV9zZXQoJ3VuaWNvZGUuc2VtYW50aWNzJywgJ29uJylcbiAgLy8gICBleGFtcGxlIDI6IHN0cmxlbignQVxcdWQ4N2VcXHVkYzA0WicpXG4gIC8vICAgcmV0dXJucyAyOiAzXG5cbiAgdmFyIHN0ciA9IHN0cmluZyArICcnO1xuXG4gIHZhciBpbmlWYWwgPSAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnID8gcmVxdWlyZSgnLi4vaW5mby9pbmlfZ2V0JykoJ3VuaWNvZGUuc2VtYW50aWNzJykgOiB1bmRlZmluZWQpIHx8ICdvZmYnO1xuICBpZiAoaW5pVmFsID09PSAnb2ZmJykge1xuICAgIHJldHVybiBzdHIubGVuZ3RoO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIgbGd0aCA9IDA7XG5cbiAgdmFyIGdldFdob2xlQ2hhciA9IGZ1bmN0aW9uIGdldFdob2xlQ2hhcihzdHIsIGkpIHtcbiAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIHZhciBuZXh0ID0gJyc7XG4gICAgdmFyIHByZXYgPSAnJztcbiAgICBpZiAoY29kZSA+PSAweEQ4MDAgJiYgY29kZSA8PSAweERCRkYpIHtcbiAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlIChjb3VsZCBjaGFuZ2UgbGFzdCBoZXggdG8gMHhEQjdGIHRvXG4gICAgICAvLyB0cmVhdCBoaWdoIHByaXZhdGUgc3Vycm9nYXRlcyBhcyBzaW5nbGUgY2hhcmFjdGVycylcbiAgICAgIGlmIChzdHIubGVuZ3RoIDw9IGkgKyAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGlnaCBzdXJyb2dhdGUgd2l0aG91dCBmb2xsb3dpbmcgbG93IHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgbmV4dCA9IHN0ci5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgIGlmIChuZXh0IDwgMHhEQzAwIHx8IG5leHQgPiAweERGRkYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaWdoIHN1cnJvZ2F0ZSB3aXRob3V0IGZvbGxvd2luZyBsb3cgc3Vycm9nYXRlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyLmNoYXJBdChpKSArIHN0ci5jaGFyQXQoaSArIDEpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA+PSAweERDMDAgJiYgY29kZSA8PSAweERGRkYpIHtcbiAgICAgIC8vIExvdyBzdXJyb2dhdGVcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTG93IHN1cnJvZ2F0ZSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgcHJldiA9IHN0ci5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICAgIGlmIChwcmV2IDwgMHhEODAwIHx8IHByZXYgPiAweERCRkYpIHtcbiAgICAgICAgLy8gKGNvdWxkIGNoYW5nZSBsYXN0IGhleCB0byAweERCN0YgdG8gdHJlYXQgaGlnaCBwcml2YXRlIHN1cnJvZ2F0ZXNcbiAgICAgICAgLy8gYXMgc2luZ2xlIGNoYXJhY3RlcnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTG93IHN1cnJvZ2F0ZSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgLy8gV2UgY2FuIHBhc3Mgb3ZlciBsb3cgc3Vycm9nYXRlcyBub3cgYXMgdGhlIHNlY29uZFxuICAgICAgLy8gY29tcG9uZW50IGluIGEgcGFpciB3aGljaCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdHIuY2hhckF0KGkpO1xuICB9O1xuXG4gIGZvciAoaSA9IDAsIGxndGggPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGdldFdob2xlQ2hhcihzdHIsIGkpID09PSBmYWxzZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIEFkYXB0IHRoaXMgbGluZSBhdCB0aGUgdG9wIG9mIGFueSBsb29wLCBwYXNzaW5nIGluIHRoZSB3aG9sZSBzdHJpbmcgYW5kXG4gICAgLy8gdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGFuZCByZXR1cm5pbmcgYSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgY2hhcmFjdGVyO1xuICAgIC8vIHB1cnBvc2UgaXMgdG8gdHJlYXQgdGhlIGZpcnN0IHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciBhcyB0aGUgd2hvbGUgY2hhcmFjdGVyIGFuZCB0aGVuXG4gICAgLy8gaWdub3JlIHRoZSBzZWNvbmQgcGFydFxuICAgIGxndGgrKztcbiAgfVxuXG4gIHJldHVybiBsZ3RoO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmxlbi5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNfbnVtZXJpYyhtaXhlZFZhcikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2lzX251bWVyaWMvXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogRGF2aWRcbiAgLy8gaW1wcm92ZWQgYnk6IHRhaXRoXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBUaW0gZGUgS29uaW5nXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBXZWJEZXZIb2JvIChodHRwOi8vd2ViZGV2aG9iby5ibG9nc3BvdC5jb20vKVxuICAvLyBidWdmaXhlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gYnVnZml4ZWQgYnk6IERlbmlzIENoZW51IChodHRwOi8vc2hub3VsbGUubmV0KVxuICAvLyAgIGV4YW1wbGUgMTogaXNfbnVtZXJpYygxODYuMzEpXG4gIC8vICAgcmV0dXJucyAxOiB0cnVlXG4gIC8vICAgZXhhbXBsZSAyOiBpc19udW1lcmljKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDI6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSAzOiBpc19udW1lcmljKCcgKzE4Ni4zMWUyJylcbiAgLy8gICByZXR1cm5zIDM6IHRydWVcbiAgLy8gICBleGFtcGxlIDQ6IGlzX251bWVyaWMoJycpXG4gIC8vICAgcmV0dXJucyA0OiBmYWxzZVxuICAvLyAgIGV4YW1wbGUgNTogaXNfbnVtZXJpYyhbXSlcbiAgLy8gICByZXR1cm5zIDU6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSA2OiBpc19udW1lcmljKCcxICcpXG4gIC8vICAgcmV0dXJucyA2OiBmYWxzZVxuXG4gIHZhciB3aGl0ZXNwYWNlID0gWycgJywgJ1xcbicsICdcXHInLCAnXFx0JywgJ1xcZicsICdcXHgwYicsICdcXHhhMCcsICdcXHUyMDAwJywgJ1xcdTIwMDEnLCAnXFx1MjAwMicsICdcXHUyMDAzJywgJ1xcdTIwMDQnLCAnXFx1MjAwNScsICdcXHUyMDA2JywgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAwQicsICdcXHUyMDI4JywgJ1xcdTIwMjknLCAnXFx1MzAwMCddLmpvaW4oJycpO1xuXG4gIC8vIEB0b2RvOiBCcmVhayB0aGlzIHVwIHVzaW5nIG1hbnkgc2luZ2xlIGNvbmRpdGlvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIHJldHVybiAodHlwZW9mIG1peGVkVmFyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWl4ZWRWYXIgPT09ICdzdHJpbmcnICYmIHdoaXRlc3BhY2UuaW5kZXhPZihtaXhlZFZhci5zbGljZSgtMSkpID09PSAtMSkgJiYgbWl4ZWRWYXIgIT09ICcnICYmICFpc05hTihtaXhlZFZhcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNfbnVtZXJpYy5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIExhcmF2ZWwgSmF2YXNjcmlwdCBWYWxpZGF0aW9uXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Byb2VuZ3NvZnQvbGFyYXZlbC1qc3ZhbGlkYXRpb25cbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdmFsaWRhdG9yc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNyBQcm9lbmdzb2Z0XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgc3RybGVuIGZyb20gJ2xvY3V0dXMvcGhwL3N0cmluZ3Mvc3RybGVuJztcbmltcG9ydCBhcnJheV9kaWZmIGZyb20gJ2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYnO1xuaW1wb3J0IHN0cnRvdGltZSBmcm9tICdsb2N1dHVzL3BocC9kYXRldGltZS9zdHJ0b3RpbWUnO1xuaW1wb3J0IGlzX251bWVyaWMgZnJvbSAnbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMnO1xuXG4kLmV4dGVuZCh0cnVlLCBsYXJhdmVsVmFsaWRhdGlvbiwge1xuXG4gICAgaGVscGVyczoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1lcmljIHJ1bGVzXG4gICAgICAgICAqL1xuICAgICAgICBudW1lcmljUnVsZXM6IFsnSW50ZWdlcicsICdOdW1lcmljJ10sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGZpbGUgaW5mb3JtYXRpb24gZnJvbSBmaWxlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZmllbGRPYmpcbiAgICAgICAgICogQHBhcmFtIGluZGV4XG4gICAgICAgICAqIEByZXR1cm5zIHt7ZmlsZTogKiwgZXh0ZW5zaW9uOiBzdHJpbmcsIHNpemU6IG51bWJlcn19XG4gICAgICAgICAqL1xuICAgICAgICBmaWxlaW5mbzogZnVuY3Rpb24gKGZpZWxkT2JqLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIEZpbGVOYW1lID0gZmllbGRPYmoudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoIGZpZWxkT2JqLmZpbGVzICE9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRPYmouZmlsZXNbaW5kZXhdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb246IEZpbGVOYW1lLnN1YnN0cihGaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWVsZE9iai5maWxlc1tpbmRleF0uc2l6ZSAvIDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWVsZE9iai5maWxlc1tpbmRleF0udHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3RvcnMgZm9yIHRoIHNwZWNpZmllZCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVzXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShuYW1lcykpICB7XG4gICAgICAgICAgICAgICAgbmFtZXMgPSBbbmFtZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goXCJbbmFtZT0nXCIgKyBuYW1lc1tpXSArIFwiJ11cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3Iuam9pbigpO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIG51bWVyaWMgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTnVtZXJpY1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUnVsZXMoZWxlbWVudCwgdGhpcy5udW1lcmljUnVsZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyBwYXNzZWQgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBydWxlc1xuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCwgcnVsZXMpIHtcblxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9ICQuZGF0YShlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdmFyIGxpc3RSdWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdmFsaWRhdG9yLmFycmF5UnVsZXNDYWNoZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGVbZWxlbWVudC5uYW1lXSwgZnVuY3Rpb24gKGluZGV4LCBhcnJheVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2goYXJyYXlSdWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gdmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2godmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJC5lYWNoKGxpc3RSdWxlcywgZnVuY3Rpb24oaW5kZXgsb2JqUnVsZXMpe1xuICAgICAgICAgICAgICAgIGlmICgnbGFyYXZlbFZhbGlkYXRpb24nIGluIG9ialJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcnVsZXM9b2JqUnVsZXMubGFyYXZlbFZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3J1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KF9ydWxlc1tpXVswXSxydWxlcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiB0aGUgc3RyaW5nIGxlbmd0aCB1c2luZyBQSFAgZnVuY3Rpb24uXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJsZW4ucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cmxlbi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgc3RybGVuOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RybGVuKHN0cmluZyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGRlcGVuZGluZyBvZiBoaXMgdHlwZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9ialxuICAgICAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHJldHVybnMgaW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiBnZXRTaXplKG9iaiwgZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTnVtZXJpY1J1bGVzKGVsZW1lbnQpICYmIHRoaXMuaXNfbnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGguZmxvb3IodGhpcy5maWxlaW5mbyhlbGVtZW50KS5zaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuc3RybGVuKHZhbHVlKSk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHNwZWNpZmllZCBydWxlIGZyb20gZWxlbWVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJ1bGVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXRMYXJhdmVsVmFsaWRhdGlvbjogZnVuY3Rpb24ocnVsZSwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAkLmVhY2goJC52YWxpZGF0b3Iuc3RhdGljUnVsZXMoZWxlbWVudCksIGZ1bmN0aW9uKGtleSwgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5PT09XCJsYXJhdmVsVmFsaWRhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChydWxlcywgZnVuY3Rpb24gKGksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF09PT1ydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBoZSB0aW1lc3RhbXAgb2YgdmFsdWUgcGFzc2VkIHVzaW5nIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdCBpbiBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxpbnR9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZVRpbWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBmbXQgPSBuZXcgRGF0ZUZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZVJ1bGUgPSB0aGlzLmdldExhcmF2ZWxWYWxpZGF0aW9uKCdEYXRlRm9ybWF0JywgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlUnVsZVsxXVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGltZVZhbHVlID0gdGhpcy5zdHJ0b3RpbWUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lVmFsdWUgPSBmbXQucGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVZhbHVlID0gTWF0aC5yb3VuZCgodGltZVZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgYSBnaXZlbiBkYXRlIGFnYWluc3QgYW5vdGhlciB1c2luZyBhbiBvcGVyYXRvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbGlkYXRvclxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gb3BlcmF0b3JcbiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNvbXBhcmVEYXRlczogZnVuY3Rpb24gKHZhbGlkYXRvciwgdmFsdWUsIGVsZW1lbnQsIHBhcmFtcywgb3BlcmF0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHRpbWVDb21wYXJlID0gcGFyc2VGbG9hdChwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4odGltZUNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZGVwZW5kZW50RWxlbWVudCh2YWxpZGF0b3IsIGVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUNvbXBhcmUgPSB0aGlzLnBhcnNlVGltZSh2YWxpZGF0b3IuZWxlbWVudFZhbHVlKHRhcmdldCksIHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSB0aGlzLnBhcnNlVGltZSh2YWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGltZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlIDwgdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWUgPD0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA9PT0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA+IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlID49IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvcGVyYXRvci4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBpbnRlbGxpZ2VudGx5IGd1ZXNzIHRoZSBkYXRlIGJ5IGNsb3NlbHkgbWF0Y2hpbmcgdGhlIHNwZWNpZmljIGZvcm1hdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlXG4gICAgICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBndWVzc0RhdGU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZm10ID0gbmV3IERhdGVGb3JtYXR0ZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBmbXQuZ3Vlc3NEYXRlKHZhbHVlLCBmb3JtYXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgVW5peCB0aW1lc3RhbXAgYmFzZWQgb24gUEhQIGZ1bmN0aW9uIHN0cm90b3RpbWUuXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lcy9mdW5jdGlvbi5zdHJ0b3RpbWUucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cnRvdGltZS9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHRleHRcbiAgICAgICAgICogQHBhcmFtIG5vd1xuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgICAgICovXG4gICAgICAgIHN0cnRvdGltZTogZnVuY3Rpb24gKHRleHQsIG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cnRvdGltZSh0ZXh0LCBub3cpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgaWYgdmFsdWUgaXMgbnVtZXJpYy5cbiAgICAgICAgICogaHR0cDovL3BocC5uZXQvbWFudWFsL2VzL3Zhci5pc19udW1lcmljLnBocFxuICAgICAgICAgKiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9pc19udW1lcmljL1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbWl4ZWRfdmFyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAgICAgKi9cbiAgICAgICAgaXNfbnVtZXJpYzogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzX251bWVyaWMobWl4ZWRfdmFyKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBvZiB0eXBlIEFycmF5LlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5I1BvbHlmaWxsXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBhcmdcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBpc0FycmF5OiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBBcnJheSBkaWZmIGJhc2VkIG9uIFBIUCBmdW5jdGlvbiBhcnJheV9kaWZmLlxuICAgICAgICAgKiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZXMvZnVuY3Rpb24uYXJyYXlfZGlmZi5waHBcbiAgICAgICAgICogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvYXJyYXlfZGlmZi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheURpZmY6IGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlfZGlmZihhcnIxLCBhcnIyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgd2hldGhlciB0d28gYXJyYXlzIGFyZSBlcXVhbCB0byBvbmUgYW5vdGhlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheUVxdWFsczogZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShhcnIxKSB8fCAhIHRoaXMuaXNBcnJheShhcnIyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICQuaXNFbXB0eU9iamVjdCh0aGlzLmFycmF5RGlmZihhcnIxLCBhcnIyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2VzIGVsZW1lbnQgZGVwZW5kYW50IGZyb20gb3RoZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWxpZGF0b3JcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50OiBmdW5jdGlvbih2YWxpZGF0b3IsIGVsZW1lbnQsIG5hbWUpIHtcblxuICAgICAgICAgICAgdmFyIGVsPXZhbGlkYXRvci5maW5kQnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIGVsWzBdIT09dW5kZWZpbmVkICAmJiB2YWxpZGF0b3Iuc2V0dGluZ3Mub25mb2N1c291dCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSAnYmx1cic7XG4gICAgICAgICAgICAgICAgaWYgKGVsWzBdLnRhZ05hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxbMF0udHlwZSA9PT0gJ3JhZGlvJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdjbGljayc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lID0gJy52YWxpZGF0ZS1sYXJhdmVsVmFsaWRhdGlvbic7XG4gICAgICAgICAgICAgICAgZWwub2ZmKCBydWxlTmFtZSApXG4gICAgICAgICAgICAgICAgICAgIC5vZmYoZXZlbnQgKyBydWxlTmFtZSArICctJyArIGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCBldmVudCArIHJ1bGVOYW1lICsgJy0nICsgZWxlbWVudC5uYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoIGVsZW1lbnQgKS52YWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsWzBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgZXJyb3IgQWpheCByZXNwb25zZSBhbmQgZ2V0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmVzcG9uc2UgPSBbJ1dob29wcywgbG9va3MgbGlrZSBzb21ldGhpbmcgd2VudCB3cm9uZy4nXTtcbiAgICAgICAgICAgIGlmICgncmVzcG9uc2VUZXh0JyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dC5tYXRjaCgvPGgxXFxzKj4oLiopPFxcL2gxXFxzKj4vaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheShlcnJvck1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmVzcG9uc2UgPSBbZXJyb3JNc2dbMV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRXNjYXBlIHN0cmluZyB0byB1c2UgYXMgUmVndWxhciBFeHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gc3RyXG4gICAgICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhdGUgUmVnRXhwIGZyb20gd2lsZGNhcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICAgICAgICovXG4gICAgICAgIHJlZ2V4RnJvbVdpbGRjYXJkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdChcIlsqXVwiKTtcbiAgICAgICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlZ2V4cFBhcnRzID0gbmFtZVBhcnRzLm1hcChmdW5jdGlvbihjdXJyZW50VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAnWyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gJ10nICtjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhcmF2ZWxWYWxpZGF0aW9uLmhlbHBlcnMuZXNjYXBlUmVnRXhwKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nK3JlZ2V4cFBhcnRzLmpvaW4oJ1teXFxcXF1dKicpKyckJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lcmdlIGFkZGl0aW9uYWwgbGFyYXZlbCB2YWxpZGF0aW9uIHJ1bGVzIGludG8gdGhlIGN1cnJlbnQgcnVsZSBzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxlc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UnVsZXNcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG1lcmdlUnVsZXM6IGZ1bmN0aW9uIChydWxlcywgbmV3UnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBydWxlc0xpc3QgPSB7XG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb24gfHwgW10sXG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uUmVtb3RlJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb25SZW1vdGUgfHwgW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNMaXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBydWxlc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcnVsZXNba2V5XSA9IHJ1bGVzW2tleV0uY29uY2F0KHJ1bGVzTGlzdFtrZXldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2RhdGV0aW1lL3N0cnRvdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvaW5mby9pbmlfZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2N1dHVzL3BocC9zdHJpbmdzL3N0cmxlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiJCIsImV4dGVuZCIsImxhcmF2ZWxWYWxpZGF0aW9uIiwiaGVscGVycyIsIm51bWVyaWNSdWxlcyIsImZpbGVpbmZvIiwiZmllbGRPYmoiLCJpbmRleCIsIkZpbGVOYW1lIiwidmFsdWUiLCJmaWxlcyIsImZpbGUiLCJleHRlbnNpb24iLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInNpemUiLCJ0eXBlIiwic2VsZWN0b3IiLCJuYW1lcyIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iLCJoYXNOdW1lcmljUnVsZXMiLCJlbGVtZW50IiwiaGFzUnVsZXMiLCJydWxlcyIsImZvdW5kIiwidmFsaWRhdG9yIiwiZGF0YSIsImZvcm0iLCJsaXN0UnVsZXMiLCJjYWNoZSIsImFycmF5UnVsZXNDYWNoZSIsIm5hbWUiLCJlYWNoIiwiYXJyYXlSdWxlIiwic2V0dGluZ3MiLCJvYmpSdWxlcyIsIl9ydWxlcyIsImluQXJyYXkiLCJzdHJsZW4iLCJzdHJpbmciLCJnZXRTaXplIiwib2JqIiwiaXNfbnVtZXJpYyIsInBhcnNlRmxvYXQiLCJNYXRoIiwiZmxvb3IiLCJnZXRMYXJhdmVsVmFsaWRhdGlvbiIsInJ1bGUiLCJ1bmRlZmluZWQiLCJzdGF0aWNSdWxlcyIsImtleSIsInBhcnNlVGltZSIsImZvcm1hdCIsInRpbWVWYWx1ZSIsImZtdCIsIkRhdGVGb3JtYXR0ZXIiLCJkYXRlUnVsZSIsInN0cnRvdGltZSIsInBhcnNlRGF0ZSIsInJvdW5kIiwiZ2V0VGltZSIsImNvbXBhcmVEYXRlcyIsInBhcmFtcyIsIm9wZXJhdG9yIiwidGltZUNvbXBhcmUiLCJpc05hTiIsInRhcmdldCIsImRlcGVuZGVudEVsZW1lbnQiLCJlbGVtZW50VmFsdWUiLCJFcnJvciIsImd1ZXNzRGF0ZSIsInRleHQiLCJub3ciLCJtaXhlZF92YXIiLCJhcmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJhcnJheURpZmYiLCJhcnIxIiwiYXJyMiIsImFycmF5X2RpZmYiLCJhcnJheUVxdWFscyIsImlzRW1wdHlPYmplY3QiLCJlbCIsImZpbmRCeU5hbWUiLCJvbmZvY3Vzb3V0IiwiZXZlbnQiLCJ0YWdOYW1lIiwicnVsZU5hbWUiLCJvZmYiLCJvbiIsInZhbGlkIiwicGFyc2VFcnJvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJuZXdSZXNwb25zZSIsImVycm9yTXNnIiwicmVzcG9uc2VUZXh0IiwibWF0Y2giLCJlc2NhcGVSZWdFeHAiLCJzdHIiLCJyZXBsYWNlIiwicmVnZXhGcm9tV2lsZGNhcmQiLCJuYW1lUGFydHMiLCJzcGxpdCIsInJlZ2V4cFBhcnRzIiwibWFwIiwiY3VycmVudFZhbHVlIiwiUmVnRXhwIiwibWVyZ2VSdWxlcyIsIm5ld1J1bGVzIiwicnVsZXNMaXN0IiwibGFyYXZlbFZhbGlkYXRpb25SZW1vdGUiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNsQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixFQUFFO0FBQ3hCLHNCQUFzQixFQUFFO0FBQ3hCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3REFBd0QsSUFBSTtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLElBQUk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUM7Ozs7Ozs7Ozs7OztBQ3hsQ0EsOENBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7QUMxQmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JB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WSxHQUFHLEdBQTlCO0FBQ0gsU0FGRCxNQUVPO0FBQ0hBLHNCQUFZLEdBQUcsTUFBS0EsWUFBcEI7QUFDSDs7QUFFRCxlQUFPOUcsaUJBQWlCLENBQUNDLE9BQWxCLENBQTBCcUcsWUFBMUIsQ0FBdUNRLFlBQXZDLENBQVA7QUFDSCxPQVJpQixDQUFsQjtBQVVBLGFBQU8sSUFBSUMsTUFBSixDQUFXLE1BQUlILFdBQVcsQ0FBQ3ZGLElBQVosQ0FBaUIsU0FBakIsQ0FBSixHQUFnQyxHQUEzQyxDQUFQO0FBQ0gsS0EvWUk7O0FBaVpMOzs7Ozs7O0FBT0EyRixjQUFVLEVBQUUsVUFBVXZGLEtBQVYsRUFBaUJ3RixRQUFqQixFQUEyQjtBQUNuQyxVQUFJQyxTQUFTLEdBQUc7QUFDWiw2QkFBcUJELFFBQVEsQ0FBQ2pILGlCQUFULElBQThCLEVBRHZDO0FBRVosbUNBQTJCaUgsUUFBUSxDQUFDRSx1QkFBVCxJQUFvQztBQUZuRCxPQUFoQjs7QUFLQSxXQUFLLElBQUkvRCxHQUFULElBQWdCOEQsU0FBaEIsRUFBMkI7QUFDdkIsWUFBSUEsU0FBUyxDQUFDOUQsR0FBRCxDQUFULENBQWVqQyxNQUFmLEtBQTBCLENBQTlCLEVBQWlDO0FBQzdCO0FBQ0g7O0FBRUQsWUFBSSxPQUFPTSxLQUFLLENBQUMyQixHQUFELENBQVosS0FBc0IsV0FBMUIsRUFBdUM7QUFDbkMzQixlQUFLLENBQUMyQixHQUFELENBQUwsR0FBYSxFQUFiO0FBQ0g7O0FBRUQzQixhQUFLLENBQUMyQixHQUFELENBQUwsR0FBYTNCLEtBQUssQ0FBQzJCLEdBQUQsQ0FBTCxDQUFXZ0UsTUFBWCxDQUFrQkYsU0FBUyxDQUFDOUQsR0FBRCxDQUEzQixDQUFiO0FBQ0g7O0FBRUQsYUFBTzNCLEtBQVA7QUFDSDtBQTNhSTtBQUZxQixDQUFsQyxFIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3Jlc291cmNlcy9hc3NldHMvanMvaGVscGVycy5qc1wiKTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhcnJheV9kaWZmKGFycjEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvYXJyYXlfZGlmZi9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHBzOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogU2Fuam95IFJveVxuICAvLyAgcmV2aXNlZCBieTogQnJldHQgWmFtaXIgKGh0dHBzOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgZXhhbXBsZSAxOiBhcnJheV9kaWZmKFsnS2V2aW4nLCAndmFuJywgJ1pvbm5ldmVsZCddLCBbJ3ZhbicsICdab25uZXZlbGQnXSlcbiAgLy8gICByZXR1cm5zIDE6IHswOidLZXZpbid9XG5cbiAgdmFyIHJldEFyciA9IHt9O1xuICB2YXIgYXJnbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBrMSA9ICcnO1xuICB2YXIgaSA9IDE7XG4gIHZhciBrID0gJyc7XG4gIHZhciBhcnIgPSB7fTtcblxuICBhcnIxa2V5czogZm9yIChrMSBpbiBhcnIxKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sYWJlbHNcbiAgICBmb3IgKGkgPSAxOyBpIDwgYXJnbDsgaSsrKSB7XG4gICAgICBhcnIgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKGsgaW4gYXJyKSB7XG4gICAgICAgIGlmIChhcnJba10gPT09IGFycjFbazFdKSB7XG4gICAgICAgICAgLy8gSWYgaXQgcmVhY2hlcyBoZXJlLCBpdCB3YXMgZm91bmQgaW4gYXQgbGVhc3Qgb25lIGFycmF5LCBzbyB0cnkgbmV4dCB2YWx1ZVxuICAgICAgICAgIGNvbnRpbnVlIGFycjFrZXlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxhYmVsc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXRBcnJbazFdID0gYXJyMVtrMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldEFycjtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJheV9kaWZmLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlU3BhY2UgPSAnWyBcXFxcdF0rJztcbnZhciByZVNwYWNlT3B0ID0gJ1sgXFxcXHRdKic7XG52YXIgcmVNZXJpZGlhbiA9ICcoPzooW2FwXSlcXFxcLj9tXFxcXC4/KFtcXFxcdCBdfCQpKSc7XG52YXIgcmVIb3VyMjQgPSAnKDJbMC00XXxbMDFdP1swLTldKSc7XG52YXIgcmVIb3VyMjRseiA9ICcoWzAxXVswLTldfDJbMC00XSknO1xudmFyIHJlSG91cjEyID0gJygwP1sxLTldfDFbMC0yXSknO1xudmFyIHJlTWludXRlID0gJyhbMC01XT9bMC05XSknO1xudmFyIHJlTWludXRlbHogPSAnKFswLTVdWzAtOV0pJztcbnZhciByZVNlY29uZCA9ICcoNjB8WzAtNV0/WzAtOV0pJztcbnZhciByZVNlY29uZGx6ID0gJyg2MHxbMC01XVswLTldKSc7XG52YXIgcmVGcmFjID0gJyg/OlxcXFwuKFswLTldKykpJztcblxudmFyIHJlRGF5ZnVsbCA9ICdzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSc7XG52YXIgcmVEYXlhYmJyID0gJ3N1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCc7XG52YXIgcmVEYXl0ZXh0ID0gcmVEYXlmdWxsICsgJ3wnICsgcmVEYXlhYmJyICsgJ3x3ZWVrZGF5cz8nO1xuXG52YXIgcmVSZWx0ZXh0bnVtYmVyID0gJ2ZpcnN0fHNlY29uZHx0aGlyZHxmb3VydGh8ZmlmdGh8c2l4dGh8c2V2ZW50aHxlaWdodGg/fG5pbnRofHRlbnRofGVsZXZlbnRofHR3ZWxmdGgnO1xudmFyIHJlUmVsdGV4dHRleHQgPSAnbmV4dHxsYXN0fHByZXZpb3VzfHRoaXMnO1xudmFyIHJlUmVsdGV4dHVuaXQgPSAnKD86c2Vjb25kfHNlY3xtaW51dGV8bWlufGhvdXJ8ZGF5fGZvcnRuaWdodHxmb3J0aG5pZ2h0fG1vbnRofHllYXIpcz98d2Vla3N8JyArIHJlRGF5dGV4dDtcblxudmFyIHJlWWVhciA9ICcoWzAtOV17MSw0fSknO1xudmFyIHJlWWVhcjIgPSAnKFswLTldezJ9KSc7XG52YXIgcmVZZWFyNCA9ICcoWzAtOV17NH0pJztcbnZhciByZVllYXI0d2l0aFNpZ24gPSAnKFsrLV0/WzAtOV17NH0pJztcbnZhciByZU1vbnRoID0gJygxWzAtMl18MD9bMC05XSknO1xudmFyIHJlTW9udGhseiA9ICcoMFswLTldfDFbMC0yXSknO1xudmFyIHJlRGF5ID0gJyg/OigzWzAxXXxbMC0yXT9bMC05XSkoPzpzdHxuZHxyZHx0aCk/KSc7XG52YXIgcmVEYXlseiA9ICcoMFswLTldfFsxLTJdWzAtOV18M1swMV0pJztcblxudmFyIHJlTW9udGhGdWxsID0gJ2phbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXInO1xudmFyIHJlTW9udGhBYmJyID0gJ2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwdD98b2N0fG5vdnxkZWMnO1xudmFyIHJlTW9udGhyb21hbiA9ICdpW3Z4XXx2aXswLDN9fHhpezAsMn18aXsxLDN9JztcbnZhciByZU1vbnRoVGV4dCA9ICcoJyArIHJlTW9udGhGdWxsICsgJ3wnICsgcmVNb250aEFiYnIgKyAnfCcgKyByZU1vbnRocm9tYW4gKyAnKSc7XG5cbnZhciByZVR6Q29ycmVjdGlvbiA9ICcoKD86R01UKT8oWystXSknICsgcmVIb3VyMjQgKyAnOj8nICsgcmVNaW51dGUgKyAnPyknO1xudmFyIHJlRGF5T2ZZZWFyID0gJygwMFsxLTldfDBbMS05XVswLTldfFsxMl1bMC05XVswLTldfDNbMC01XVswLTldfDM2WzAtNl0pJztcbnZhciByZVdlZWtPZlllYXIgPSAnKDBbMS05XXxbMS00XVswLTldfDVbMC0zXSknO1xuXG52YXIgcmVEYXRlTm9ZZWFyID0gcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSonO1xuXG5mdW5jdGlvbiBwcm9jZXNzTWVyaWRpYW4oaG91ciwgbWVyaWRpYW4pIHtcbiAgbWVyaWRpYW4gPSBtZXJpZGlhbiAmJiBtZXJpZGlhbi50b0xvd2VyQ2FzZSgpO1xuXG4gIHN3aXRjaCAobWVyaWRpYW4pIHtcbiAgICBjYXNlICdhJzpcbiAgICAgIGhvdXIgKz0gaG91ciA9PT0gMTIgPyAtMTIgOiAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncCc6XG4gICAgICBob3VyICs9IGhvdXIgIT09IDEyID8gMTIgOiAwO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gaG91cjtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1llYXIoeWVhclN0cikge1xuICB2YXIgeWVhciA9ICt5ZWFyU3RyO1xuXG4gIGlmICh5ZWFyU3RyLmxlbmd0aCA8IDQgJiYgeWVhciA8IDEwMCkge1xuICAgIHllYXIgKz0geWVhciA8IDcwID8gMjAwMCA6IDE5MDA7XG4gIH1cblxuICByZXR1cm4geWVhcjtcbn1cblxuZnVuY3Rpb24gbG9va3VwTW9udGgobW9udGhTdHIpIHtcbiAgcmV0dXJuIHtcbiAgICBqYW46IDAsXG4gICAgamFudWFyeTogMCxcbiAgICBpOiAwLFxuICAgIGZlYjogMSxcbiAgICBmZWJydWFyeTogMSxcbiAgICBpaTogMSxcbiAgICBtYXI6IDIsXG4gICAgbWFyY2g6IDIsXG4gICAgaWlpOiAyLFxuICAgIGFwcjogMyxcbiAgICBhcHJpbDogMyxcbiAgICBpdjogMyxcbiAgICBtYXk6IDQsXG4gICAgdjogNCxcbiAgICBqdW46IDUsXG4gICAganVuZTogNSxcbiAgICB2aTogNSxcbiAgICBqdWw6IDYsXG4gICAganVseTogNixcbiAgICB2aWk6IDYsXG4gICAgYXVnOiA3LFxuICAgIGF1Z3VzdDogNyxcbiAgICB2aWlpOiA3LFxuICAgIHNlcDogOCxcbiAgICBzZXB0OiA4LFxuICAgIHNlcHRlbWJlcjogOCxcbiAgICBpeDogOCxcbiAgICBvY3Q6IDksXG4gICAgb2N0b2JlcjogOSxcbiAgICB4OiA5LFxuICAgIG5vdjogMTAsXG4gICAgbm92ZW1iZXI6IDEwLFxuICAgIHhpOiAxMCxcbiAgICBkZWM6IDExLFxuICAgIGRlY2VtYmVyOiAxMSxcbiAgICB4aWk6IDExXG4gIH1bbW9udGhTdHIudG9Mb3dlckNhc2UoKV07XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFdlZWtkYXkoZGF5U3RyKSB7XG4gIHZhciBkZXNpcmVkU3VuZGF5TnVtYmVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuXG4gIHZhciBkYXlOdW1iZXJzID0ge1xuICAgIG1vbjogMSxcbiAgICBtb25kYXk6IDEsXG4gICAgdHVlOiAyLFxuICAgIHR1ZXNkYXk6IDIsXG4gICAgd2VkOiAzLFxuICAgIHdlZG5lc2RheTogMyxcbiAgICB0aHU6IDQsXG4gICAgdGh1cnNkYXk6IDQsXG4gICAgZnJpOiA1LFxuICAgIGZyaWRheTogNSxcbiAgICBzYXQ6IDYsXG4gICAgc2F0dXJkYXk6IDYsXG4gICAgc3VuOiAwLFxuICAgIHN1bmRheTogMFxuICB9O1xuXG4gIHJldHVybiBkYXlOdW1iZXJzW2RheVN0ci50b0xvd2VyQ2FzZSgpXSB8fCBkZXNpcmVkU3VuZGF5TnVtYmVyO1xufVxuXG5mdW5jdGlvbiBsb29rdXBSZWxhdGl2ZShyZWxUZXh0KSB7XG4gIHZhciByZWxhdGl2ZU51bWJlcnMgPSB7XG4gICAgbGFzdDogLTEsXG4gICAgcHJldmlvdXM6IC0xLFxuICAgIHRoaXM6IDAsXG4gICAgZmlyc3Q6IDEsXG4gICAgbmV4dDogMSxcbiAgICBzZWNvbmQ6IDIsXG4gICAgdGhpcmQ6IDMsXG4gICAgZm91cnRoOiA0LFxuICAgIGZpZnRoOiA1LFxuICAgIHNpeHRoOiA2LFxuICAgIHNldmVudGg6IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgZWlnaHRoOiA4LFxuICAgIG5pbnRoOiA5LFxuICAgIHRlbnRoOiAxMCxcbiAgICBlbGV2ZW50aDogMTEsXG4gICAgdHdlbGZ0aDogMTJcbiAgfTtcblxuICB2YXIgcmVsYXRpdmVCZWhhdmlvciA9IHtcbiAgICB0aGlzOiAxXG4gIH07XG5cbiAgdmFyIHJlbFRleHRMb3dlciA9IHJlbFRleHQudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4ge1xuICAgIGFtb3VudDogcmVsYXRpdmVOdW1iZXJzW3JlbFRleHRMb3dlcl0sXG4gICAgYmVoYXZpb3I6IHJlbGF0aXZlQmVoYXZpb3JbcmVsVGV4dExvd2VyXSB8fCAwXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUekNvcnJlY3Rpb24odHpPZmZzZXQsIG9sZFZhbHVlKSB7XG4gIHZhciByZVR6Q29ycmVjdGlvbkxvb3NlID0gLyg/OkdNVCk/KFsrLV0pKFxcZCspKDo/KShcXGR7MCwyfSkvaTtcbiAgdHpPZmZzZXQgPSB0ek9mZnNldCAmJiB0ek9mZnNldC5tYXRjaChyZVR6Q29ycmVjdGlvbkxvb3NlKTtcblxuICBpZiAoIXR6T2Zmc2V0KSB7XG4gICAgcmV0dXJuIG9sZFZhbHVlO1xuICB9XG5cbiAgdmFyIHNpZ24gPSB0ek9mZnNldFsxXSA9PT0gJy0nID8gMSA6IC0xO1xuICB2YXIgaG91cnMgPSArdHpPZmZzZXRbMl07XG4gIHZhciBtaW51dGVzID0gK3R6T2Zmc2V0WzRdO1xuXG4gIGlmICghdHpPZmZzZXRbNF0gJiYgIXR6T2Zmc2V0WzNdKSB7XG4gICAgbWludXRlcyA9IE1hdGguZmxvb3IoaG91cnMgJSAxMDApO1xuICAgIGhvdXJzID0gTWF0aC5mbG9vcihob3VycyAvIDEwMCk7XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIDYwICsgbWludXRlcyk7XG59XG5cbnZhciBmb3JtYXRzID0ge1xuICB5ZXN0ZXJkYXk6IHtcbiAgICByZWdleDogL155ZXN0ZXJkYXkvaSxcbiAgICBuYW1lOiAneWVzdGVyZGF5JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJkIC09IDE7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgbm93OiB7XG4gICAgcmVnZXg6IC9ebm93L2ksXG4gICAgbmFtZTogJ25vdydcbiAgICAvLyBkbyBub3RoaW5nXG4gIH0sXG5cbiAgbm9vbjoge1xuICAgIHJlZ2V4OiAvXm5vb24vaSxcbiAgICBuYW1lOiAnbm9vbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCkgJiYgdGhpcy50aW1lKDEyLCAwLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgbWlkbmlnaHRPclRvZGF5OiB7XG4gICAgcmVnZXg6IC9eKG1pZG5pZ2h0fHRvZGF5KS9pLFxuICAgIG5hbWU6ICdtaWRuaWdodCB8IHRvZGF5JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgdG9tb3Jyb3c6IHtcbiAgICByZWdleDogL150b21vcnJvdy9pLFxuICAgIG5hbWU6ICd0b21vcnJvdycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgdGhpcy5yZCArPSAxO1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVzdGFtcDoge1xuICAgIHJlZ2V4OiAvXkAoLT9cXGQrKS9pLFxuICAgIG5hbWU6ICd0aW1lc3RhbXAnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgdGltZXN0YW1wKSB7XG4gICAgICB0aGlzLnJzICs9ICt0aW1lc3RhbXA7XG4gICAgICB0aGlzLnkgPSAxOTcwO1xuICAgICAgdGhpcy5tID0gMDtcbiAgICAgIHRoaXMuZCA9IDE7XG4gICAgICB0aGlzLmRhdGVzID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCkgJiYgdGhpcy56b25lKDApO1xuICAgIH1cbiAgfSxcblxuICBmaXJzdE9yTGFzdERheToge1xuICAgIHJlZ2V4OiAvXihmaXJzdHxsYXN0KSBkYXkgb2YvaSxcbiAgICBuYW1lOiAnZmlyc3RkYXlvZiB8IGxhc3RkYXlvZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXkpIHtcbiAgICAgIGlmIChkYXkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICB0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBiYWNrT3JGcm9udE9mOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXihiYWNrfGZyb250KSBvZiAnICsgcmVIb3VyMjQgKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiArICc/JywgJ2knKSxcbiAgICBuYW1lOiAnYmFja29mIHwgZnJvbnRvZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBzaWRlLCBob3VycywgbWVyaWRpYW4pIHtcbiAgICAgIHZhciBiYWNrID0gc2lkZS50b0xvd2VyQ2FzZSgpID09PSAnYmFjayc7XG4gICAgICB2YXIgaG91ciA9ICtob3VycztcbiAgICAgIHZhciBtaW51dGUgPSAxNTtcblxuICAgICAgaWYgKCFiYWNrKSB7XG4gICAgICAgIGhvdXIgLT0gMTtcbiAgICAgICAgbWludXRlID0gNDU7XG4gICAgICB9XG5cbiAgICAgIGhvdXIgPSBwcm9jZXNzTWVyaWRpYW4oaG91ciwgbWVyaWRpYW4pO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnRpbWUoaG91ciwgbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgd2Vla2RheU9mOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0bnVtYmVyICsgJ3wnICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnKCcgKyByZURheWZ1bGwgKyAnfCcgKyByZURheWFiYnIgKyAnKScgKyByZVNwYWNlICsgJ29mJywgJ2knKSxcbiAgICBuYW1lOiAnd2Vla2RheW9mJ1xuICAgIC8vIHRvZG9cbiAgfSxcblxuICBtc3NxbHRpbWU6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHogKyAnWzouXShbMC05XSspJyArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ21zc3FsdGltZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhYywgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsICtzZWNvbmQsICtmcmFjLnN1YnN0cigwLCAzKSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVMb25nMTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZGx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ3RpbWVsb25nMTInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVNob3J0MTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJ1s6Ll0nICsgcmVNaW51dGVseiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICd0aW1lc2hvcnQxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVRpbnkxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAndGltZXRpbnkxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtZXJpZGlhbikge1xuICAgICAgcmV0dXJuIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgMCwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIHNvYXA6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLScgKyByZU1vbnRobHogKyAnLScgKyByZURheWx6ICsgJ1QnICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6ICsgcmVGcmFjICsgcmVUekNvcnJlY3Rpb24gKyAnPycsICdpJyksXG4gICAgbmFtZTogJ3NvYXAnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWMsIHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgK2ZyYWMuc3Vic3RyKDAsIDMpKSAmJiB0aGlzLnpvbmUocHJvY2Vzc1R6Q29ycmVjdGlvbih0ekNvcnJlY3Rpb24pKTtcbiAgICB9XG4gIH0sXG5cbiAgd2RkeDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICctJyArIHJlTW9udGggKyAnLScgKyByZURheSArICdUJyArIHJlSG91cjI0ICsgJzonICsgcmVNaW51dGUgKyAnOicgKyByZVNlY29uZCksXG4gICAgbmFtZTogJ3dkZHgnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBleGlmOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJzonICsgcmVNb250aGx6ICsgJzonICsgcmVEYXlseiArICcgJyArIHJlSG91cjI0bHogKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiwgJ2knKSxcbiAgICBuYW1lOiAnZXhpZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIHhtbFJwYzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHogKyAnVCcgKyByZUhvdXIyNCArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6KSxcbiAgICBuYW1lOiAneG1scnBjJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgeG1sUnBjTm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHogKyAnW1R0XScgKyByZUhvdXIyNCArIHJlTWludXRlbHogKyByZVNlY29uZGx6KSxcbiAgICBuYW1lOiAneG1scnBjbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGNsZjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXkgKyAnLygnICsgcmVNb250aEFiYnIgKyAnKS8nICsgcmVZZWFyNCArICc6JyArIHJlSG91cjI0bHogKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiArIHJlU3BhY2UgKyByZVR6Q29ycmVjdGlvbiwgJ2knKSxcbiAgICBuYW1lOiAnY2xmJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCB0ekNvcnJlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApICYmIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICBpc284NjAxbG9uZzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ150PycgKyByZUhvdXIyNCArICdbOi5dJyArIHJlTWludXRlICsgJ1s6Ll0nICsgcmVTZWNvbmQgKyByZUZyYWMsICdpJyksXG4gICAgbmFtZTogJ2lzbzg2MDFsb25nJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCArZnJhYy5zdWJzdHIoMCwgMykpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlVGV4dHVhbDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSsnICsgcmVZZWFyLCAnaScpLFxuICAgIG5hbWU6ICdkYXRldGV4dHVhbCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHBvaW50ZWREYXRlNDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXkgKyAnWy5cXFxcdC1dJyArIHJlTW9udGggKyAnWy4tXScgKyByZVllYXI0KSxcbiAgICBuYW1lOiAncG9pbnRlZGRhdGU0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcG9pbnRlZERhdGUyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbLlxcXFx0XScgKyByZU1vbnRoICsgJ1xcXFwuJyArIHJlWWVhcjIpLFxuICAgIG5hbWU6ICdwb2ludGVkZGF0ZTInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICB0aW1lTG9uZzI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCksXG4gICAgbmFtZTogJ3RpbWVsb25nMjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHopLFxuICAgIG5hbWU6ICdkYXRlbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHBneWRvdGQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnXFxcXC4/JyArIHJlRGF5T2ZZZWFyKSxcbiAgICBuYW1lOiAncGd5ZG90ZCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgMCwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVTaG9ydDI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUsICdpJyksXG4gICAgbmFtZTogJ3RpbWVzaG9ydDI0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFub0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0bHogKyByZU1pbnV0ZWx6ICsgcmVTZWNvbmRseiwgJ2knKSxcbiAgICBuYW1lOiAnaXNvODYwMW5vY29sb24nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBpc284NjAxZGF0ZVNsYXNoOiB7XG4gICAgLy8gZXZlbnRob3VnaCB0aGUgdHJhaWxpbmcgc2xhc2ggaXMgb3B0aW9uYWwgaW4gUEhQXG4gICAgLy8gaGVyZSBpdCdzIG1hbmRhdG9yeSBhbmQgaW5wdXRzIHdpdGhvdXQgdGhlIHNsYXNoXG4gICAgLy8gYXJlIGhhbmRsZWQgYnkgZGF0ZXNsYXNoXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy8nICsgcmVNb250aGx6ICsgJy8nICsgcmVEYXlseiArICcvJyksXG4gICAgbmFtZTogJ2lzbzg2MDFkYXRlc2xhc2gnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlU2xhc2g6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLycgKyByZU1vbnRoICsgJy8nICsgcmVEYXkpLFxuICAgIG5hbWU6ICdkYXRlc2xhc2gnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBhbWVyaWNhbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aCArICcvJyArIHJlRGF5ICsgJy8nICsgcmVZZWFyKSxcbiAgICBuYW1lOiAnYW1lcmljYW4nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBhbWVyaWNhblNob3J0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoICsgJy8nICsgcmVEYXkpLFxuICAgIG5hbWU6ICdhbWVyaWNhbnNob3J0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGdudURhdGVTaG9ydE9ySXNvODYwMWRhdGUyOiB7XG4gICAgLy8gaXNvODYwMWRhdGUyIGlzIGNvbXBsZXRlIHN1YnNldCBvZiBnbnVkYXRlc2hvcnRcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhciArICctJyArIHJlTW9udGggKyAnLScgKyByZURheSksXG4gICAgbmFtZTogJ2dudWRhdGVzaG9ydCB8IGlzbzg2MDFkYXRlMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFkYXRlNDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNHdpdGhTaWduICsgJy0nICsgcmVNb250aGx6ICsgJy0nICsgcmVEYXlseiksXG4gICAgbmFtZTogJ2lzbzg2MDFkYXRlNCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGdudU5vQ29sb246IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjRseiArIHJlTWludXRlbHosICdpJyksXG4gICAgbmFtZTogJ2dudW5vY29sb24nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlKSB7XG4gICAgICAvLyB0aGlzIHJ1bGUgaXMgYSBzcGVjaWFsIGNhc2VcbiAgICAgIC8vIGlmIHRpbWUgd2FzIGFscmVhZHkgc2V0IG9uY2UgYnkgYW55IHByZWNlZGluZyBydWxlLCBpdCBzZXRzIHRoZSBjYXB0dXJlZCB2YWx1ZSBhcyB5ZWFyXG4gICAgICBzd2l0Y2ggKHRoaXMudGltZXMpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsIDAsIHRoaXMuZik7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLnkgPSBob3VyICogMTAwICsgK21pbnV0ZTtcbiAgICAgICAgICB0aGlzLnRpbWVzKys7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdudURhdGVTaG9ydGVyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0nICsgcmVNb250aCksXG4gICAgbmFtZTogJ2dudWRhdGVzaG9ydGVyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgMSk7XG4gICAgfVxuICB9LFxuXG4gIHBnVGV4dFJldmVyc2U6IHtcbiAgICAvLyBub3RlOiBhbGxvd2VkIHllYXJzIGFyZSBmcm9tIDMyLTk5OTlcbiAgICAvLyB5ZWFycyBiZWxvdyAzMiBzaG91bGQgYmUgdHJlYXRlZCBhcyBkYXlzIGluIGRhdGVmdWxsXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyAnKFxcXFxkezMsNH18WzQtOV1cXFxcZHwzWzItOV0pLSgnICsgcmVNb250aEFiYnIgKyAnKS0nICsgcmVEYXlseiwgJ2knKSxcbiAgICBuYW1lOiAncGd0ZXh0cmV2ZXJzZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVGdWxsOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbIFxcXFx0Li1dKicgKyByZU1vbnRoVGV4dCArICdbIFxcXFx0Li1dKicgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ2RhdGVmdWxsJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vRGF5OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoVGV4dCArICdbIC5cXFxcdC1dKicgKyByZVllYXI0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm9kYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vRGF5UmV2OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJ1sgLlxcXFx0LV0qJyArIHJlTW9udGhUZXh0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm9kYXlyZXYnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgcGdUZXh0U2hvcnQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZU1vbnRoQWJiciArICcpLScgKyByZURheWx6ICsgJy0nICsgcmVZZWFyLCAnaScpLFxuICAgIG5hbWU6ICdwZ3RleHRzaG9ydCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb1llYXI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF0ZU5vWWVhciwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZW5veWVhcicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9ZZWFyUmV2OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbIC5cXFxcdC1dKicgKyByZU1vbnRoVGV4dCwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZW5veWVhcnJldicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXksIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBpc29XZWVrRGF5OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0/VycgKyByZVdlZWtPZlllYXIgKyAnKD86LT8oWzAtN10pKT8nKSxcbiAgICBuYW1lOiAnaXNvd2Vla2RheSB8IGlzb3dlZWsnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgd2VlaywgZGF5KSB7XG4gICAgICBkYXkgPSBkYXkgPyArZGF5IDogMTtcblxuICAgICAgaWYgKCF0aGlzLnltZCgreWVhciwgMCwgMSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGF5IG9mIHdlZWsgZm9yIEphbiAxc3RcbiAgICAgIHZhciBkYXlPZldlZWsgPSBuZXcgRGF0ZSh0aGlzLnksIHRoaXMubSwgdGhpcy5kKS5nZXREYXkoKTtcblxuICAgICAgLy8gYW5kIHVzZSB0aGUgZGF5IHRvIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBmb3IgZGF5IDEgb2Ygd2VlayAxXG4gICAgICBkYXlPZldlZWsgPSAwIC0gKGRheU9mV2VlayA+IDQgPyBkYXlPZldlZWsgLSA3IDogZGF5T2ZXZWVrKTtcblxuICAgICAgdGhpcy5yZCArPSBkYXlPZldlZWsgKyAod2VlayAtIDEpICogNyArIGRheTtcbiAgICB9XG4gIH0sXG5cbiAgcmVsYXRpdmVUZXh0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0bnVtYmVyICsgJ3wnICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnKCcgKyByZVJlbHRleHR1bml0ICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdyZWxhdGl2ZXRleHQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgcmVsVmFsdWUsIHJlbFVuaXQpIHtcbiAgICAgIC8vIHRvZG86IGltcGxlbWVudCBoYW5kbGluZyBvZiAndGhpcyB0aW1lLXVuaXQnXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHZhciBfbG9va3VwUmVsYXRpdmUgPSBsb29rdXBSZWxhdGl2ZShyZWxWYWx1ZSksXG4gICAgICAgICAgYW1vdW50ID0gX2xvb2t1cFJlbGF0aXZlLmFtb3VudCxcbiAgICAgICAgICBiZWhhdmlvciA9IF9sb29rdXBSZWxhdGl2ZS5iZWhhdmlvcjtcblxuICAgICAgc3dpdGNoIChyZWxVbml0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHRoaXMucnMgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgdGhpcy5yaSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy5yaCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3J0bmlnaHQnOlxuICAgICAgICBjYXNlICdmb3J0bmlnaHRzJzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRobmlnaHRzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IGFtb3VudCAqIDE0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICAgIHRoaXMucm0gKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHRoaXMucnkgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb24nOmNhc2UgJ21vbmRheSc6XG4gICAgICAgIGNhc2UgJ3R1ZSc6Y2FzZSAndHVlc2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZCc6Y2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgY2FzZSAndGh1JzpjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIGNhc2UgJ2ZyaSc6Y2FzZSAnZnJpZGF5JzpcbiAgICAgICAgY2FzZSAnc2F0JzpjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIGNhc2UgJ3N1bic6Y2FzZSAnc3VuZGF5JzpcbiAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkocmVsVW5pdCwgNyk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgICAgIHRoaXMucmQgKz0gKGFtb3VudCA+IDAgPyBhbW91bnQgLSAxIDogYW1vdW50KSAqIDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICBjYXNlICd3ZWVrZGF5cyc6XG4gICAgICAgICAgLy8gdG9kb1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZToge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14oWystXSopWyBcXFxcdF0qKFxcXFxkKyknICsgcmVTcGFjZU9wdCArICcoJyArIHJlUmVsdGV4dHVuaXQgKyAnfHdlZWspJywgJ2knKSxcbiAgICBuYW1lOiAncmVsYXRpdmUnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgc2lnbnMsIHJlbFZhbHVlLCByZWxVbml0KSB7XG4gICAgICB2YXIgbWludXNlcyA9IHNpZ25zLnJlcGxhY2UoL1teLV0vZywgJycpLmxlbmd0aDtcblxuICAgICAgdmFyIGFtb3VudCA9ICtyZWxWYWx1ZSAqIE1hdGgucG93KC0xLCBtaW51c2VzKTtcblxuICAgICAgc3dpdGNoIChyZWxVbml0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHRoaXMucnMgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgdGhpcy5yaSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy5yaCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3J0bmlnaHQnOlxuICAgICAgICBjYXNlICdmb3J0bmlnaHRzJzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRobmlnaHRzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IGFtb3VudCAqIDE0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICAgIHRoaXMucm0gKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHRoaXMucnkgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb24nOmNhc2UgJ21vbmRheSc6XG4gICAgICAgIGNhc2UgJ3R1ZSc6Y2FzZSAndHVlc2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZCc6Y2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgY2FzZSAndGh1JzpjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIGNhc2UgJ2ZyaSc6Y2FzZSAnZnJpZGF5JzpcbiAgICAgICAgY2FzZSAnc2F0JzpjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIGNhc2UgJ3N1bic6Y2FzZSAnc3VuZGF5JzpcbiAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkocmVsVW5pdCwgNyk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgICAgIHRoaXMucmQgKz0gKGFtb3VudCA+IDAgPyBhbW91bnQgLSAxIDogYW1vdW50KSAqIDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICBjYXNlICd3ZWVrZGF5cyc6XG4gICAgICAgICAgLy8gdG9kb1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXlUZXh0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVEYXl0ZXh0ICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdkYXl0ZXh0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheVRleHQpIHtcbiAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICB0aGlzLndlZWtkYXkgPSBsb29rdXBXZWVrZGF5KGRheVRleHQsIDApO1xuXG4gICAgICBpZiAodGhpcy53ZWVrZGF5QmVoYXZpb3IgIT09IDIpIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZVRleHRXZWVrOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnd2VlaycsICdpJyksXG4gICAgbmFtZTogJ3JlbGF0aXZldGV4dHdlZWsnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgcmVsVGV4dCkge1xuICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAyO1xuXG4gICAgICBzd2l0Y2ggKHJlbFRleHQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICd0aGlzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIHRoaXMucmQgKz0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICB0aGlzLnJkIC09IDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05hTih0aGlzLndlZWtkYXkpKSB7XG4gICAgICAgIHRoaXMud2Vla2RheSA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vbnRoRnVsbE9yTW9udGhBYmJyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVNb250aEZ1bGwgKyAnfCcgKyByZU1vbnRoQWJiciArICcpJywgJ2knKSxcbiAgICBuYW1lOiAnbW9udGhmdWxsIHwgbW9udGhhYmJyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksIHRoaXMuZCk7XG4gICAgfVxuICB9LFxuXG4gIHR6Q29ycmVjdGlvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVUekNvcnJlY3Rpb24sICdpJyksXG4gICAgbmFtZTogJ3R6Y29ycmVjdGlvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICBhZ286IHtcbiAgICByZWdleDogL15hZ28vaSxcbiAgICBuYW1lOiAnYWdvJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJ5ID0gLXRoaXMucnk7XG4gICAgICB0aGlzLnJtID0gLXRoaXMucm07XG4gICAgICB0aGlzLnJkID0gLXRoaXMucmQ7XG4gICAgICB0aGlzLnJoID0gLXRoaXMucmg7XG4gICAgICB0aGlzLnJpID0gLXRoaXMucmk7XG4gICAgICB0aGlzLnJzID0gLXRoaXMucnM7XG4gICAgICB0aGlzLnJmID0gLXRoaXMucmY7XG4gICAgfVxuICB9LFxuXG4gIHllYXI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0KSxcbiAgICBuYW1lOiAneWVhcjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhcikge1xuICAgICAgdGhpcy55ID0gK3llYXI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2hpdGVzcGFjZToge1xuICAgIHJlZ2V4OiAvXlsgLixcXHRdKy8sXG4gICAgbmFtZTogJ3doaXRlc3BhY2UnXG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lTG9uZzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgJ3Q/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZXNob3J0d2l0aHRpbWVsb25nJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lTG9uZzEyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURhdGVOb1llYXIgKyByZUhvdXIxMiArICdbOi5dJyArIHJlTWludXRlICsgJ1s6Ll0nICsgcmVTZWNvbmRseiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICdkYXRlc2hvcnR3aXRodGltZWxvbmcxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSkgJiYgdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZVNob3J0V2l0aFRpbWVTaG9ydDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgJ3Q/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUsICdpJyksXG4gICAgbmFtZTogJ2RhdGVzaG9ydHdpdGh0aW1lc2hvcnQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSwgaG91ciwgbWludXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lU2hvcnQxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZWx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ2RhdGVzaG9ydHdpdGh0aW1lc2hvcnQxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcmVzdWx0UHJvdG8gPSB7XG4gIC8vIGRhdGVcbiAgeTogTmFOLFxuICBtOiBOYU4sXG4gIGQ6IE5hTixcbiAgLy8gdGltZVxuICBoOiBOYU4sXG4gIGk6IE5hTixcbiAgczogTmFOLFxuICBmOiBOYU4sXG5cbiAgLy8gcmVsYXRpdmUgc2hpZnRzXG4gIHJ5OiAwLFxuICBybTogMCxcbiAgcmQ6IDAsXG4gIHJoOiAwLFxuICByaTogMCxcbiAgcnM6IDAsXG4gIHJmOiAwLFxuXG4gIC8vIHdlZWtkYXkgcmVsYXRlZCBzaGlmdHNcbiAgd2Vla2RheTogTmFOLFxuICB3ZWVrZGF5QmVoYXZpb3I6IDAsXG5cbiAgLy8gZmlyc3Qgb3IgbGFzdCBkYXkgb2YgbW9udGhcbiAgLy8gMCBub25lLCAxIGZpcnN0LCAtMSBsYXN0XG4gIGZpcnN0T3JMYXN0RGF5T2ZNb250aDogMCxcblxuICAvLyB0aW1lem9uZSBjb3JyZWN0aW9uIGluIG1pbnV0ZXNcbiAgejogTmFOLFxuXG4gIC8vIGNvdW50ZXJzXG4gIGRhdGVzOiAwLFxuICB0aW1lczogMCxcbiAgem9uZXM6IDAsXG5cbiAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICB5bWQ6IGZ1bmN0aW9uIHltZCh5LCBtLCBkKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlcysrO1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy5tID0gbTtcbiAgICB0aGlzLmQgPSBkO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICB0aW1lOiBmdW5jdGlvbiB0aW1lKGgsIGksIHMsIGYpIHtcbiAgICBpZiAodGhpcy50aW1lcyA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzKys7XG4gICAgdGhpcy5oID0gaDtcbiAgICB0aGlzLmkgPSBpO1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5mID0gZjtcblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICByZXNldFRpbWU6IGZ1bmN0aW9uIHJlc2V0VGltZSgpIHtcbiAgICB0aGlzLmggPSAwO1xuICAgIHRoaXMuaSA9IDA7XG4gICAgdGhpcy5zID0gMDtcbiAgICB0aGlzLmYgPSAwO1xuICAgIHRoaXMudGltZXMgPSAwO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIHpvbmU6IGZ1bmN0aW9uIHpvbmUobWludXRlcykge1xuICAgIGlmICh0aGlzLnpvbmVzIDw9IDEpIHtcbiAgICAgIHRoaXMuem9uZXMrKztcbiAgICAgIHRoaXMueiA9IG1pbnV0ZXM7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHRvRGF0ZTogZnVuY3Rpb24gdG9EYXRlKHJlbGF0aXZlVG8pIHtcbiAgICBpZiAodGhpcy5kYXRlcyAmJiAhdGhpcy50aW1lcykge1xuICAgICAgdGhpcy5oID0gdGhpcy5pID0gdGhpcy5zID0gdGhpcy5mID0gMDtcbiAgICB9XG5cbiAgICAvLyBmaWxsIGhvbGVzXG4gICAgaWYgKGlzTmFOKHRoaXMueSkpIHtcbiAgICAgIHRoaXMueSA9IHJlbGF0aXZlVG8uZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5tKSkge1xuICAgICAgdGhpcy5tID0gcmVsYXRpdmVUby5nZXRNb250aCgpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmQpKSB7XG4gICAgICB0aGlzLmQgPSByZWxhdGl2ZVRvLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5oKSkge1xuICAgICAgdGhpcy5oID0gcmVsYXRpdmVUby5nZXRIb3VycygpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmkpKSB7XG4gICAgICB0aGlzLmkgPSByZWxhdGl2ZVRvLmdldE1pbnV0ZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5zKSkge1xuICAgICAgdGhpcy5zID0gcmVsYXRpdmVUby5nZXRTZWNvbmRzKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMuZikpIHtcbiAgICAgIHRoaXMuZiA9IHJlbGF0aXZlVG8uZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IHNwZWNpYWwgZWFybHlcbiAgICBzd2l0Y2ggKHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgdGhpcy5kID0gMDtcbiAgICAgICAgdGhpcy5tICs9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICghaXNOYU4odGhpcy53ZWVrZGF5KSkge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShyZWxhdGl2ZVRvLmdldFRpbWUoKSk7XG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpO1xuICAgICAgZGF0ZS5zZXRIb3Vycyh0aGlzLmgsIHRoaXMuaSwgdGhpcy5zLCB0aGlzLmYpO1xuXG4gICAgICB2YXIgZG93ID0gZGF0ZS5nZXREYXkoKTtcblxuICAgICAgaWYgKHRoaXMud2Vla2RheUJlaGF2aW9yID09PSAyKSB7XG4gICAgICAgIC8vIFRvIG1ha2UgXCJ0aGlzIHdlZWtcIiB3b3JrLCB3aGVyZSB0aGUgY3VycmVudCBkYXkgb2Ygd2VlayBpcyBhIFwic3VuZGF5XCJcbiAgICAgICAgaWYgKGRvdyA9PT0gMCAmJiB0aGlzLndlZWtkYXkgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndlZWtkYXkgPSAtNjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRvIG1ha2UgXCJzdW5kYXkgdGhpcyB3ZWVrXCIgd29yaywgd2hlcmUgdGhlIGN1cnJlbnQgZGF5IG9mIHdlZWsgaXMgbm90IGEgXCJzdW5kYXlcIlxuICAgICAgICBpZiAodGhpcy53ZWVrZGF5ID09PSAwICYmIGRvdyAhPT0gMCkge1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IDc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmQgLT0gZG93O1xuICAgICAgICB0aGlzLmQgKz0gdGhpcy53ZWVrZGF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLndlZWtkYXkgLSBkb3c7XG5cbiAgICAgICAgLy8gc29tZSBQSFAgbWFnaWNcbiAgICAgICAgaWYgKHRoaXMucmQgPCAwICYmIGRpZmYgPCAwIHx8IHRoaXMucmQgPj0gMCAmJiBkaWZmIDw9IC10aGlzLndlZWtkYXlCZWhhdmlvcikge1xuICAgICAgICAgIGRpZmYgKz0gNztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndlZWtkYXkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuZCArPSBkaWZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZCAtPSA3IC0gKE1hdGguYWJzKHRoaXMud2Vla2RheSkgLSBkb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53ZWVrZGF5ID0gTmFOO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkanVzdCByZWxhdGl2ZVxuICAgIHRoaXMueSArPSB0aGlzLnJ5O1xuICAgIHRoaXMubSArPSB0aGlzLnJtO1xuICAgIHRoaXMuZCArPSB0aGlzLnJkO1xuXG4gICAgdGhpcy5oICs9IHRoaXMucmg7XG4gICAgdGhpcy5pICs9IHRoaXMucmk7XG4gICAgdGhpcy5zICs9IHRoaXMucnM7XG4gICAgdGhpcy5mICs9IHRoaXMucmY7XG5cbiAgICB0aGlzLnJ5ID0gdGhpcy5ybSA9IHRoaXMucmQgPSAwO1xuICAgIHRoaXMucmggPSB0aGlzLnJpID0gdGhpcy5ycyA9IHRoaXMucmYgPSAwO1xuXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBEYXRlKHJlbGF0aXZlVG8uZ2V0VGltZSgpKTtcbiAgICAvLyBzaW5jZSBEYXRlIGNvbnN0cnVjdG9yIHRyZWF0cyB5ZWFycyA8PSA5OSBhcyAxOTAwK1xuICAgIC8vIGl0IGNhbid0IGJlIHVzZWQsIHRodXMgdGhpcyB3ZWlyZCB3YXlcbiAgICByZXN1bHQuc2V0RnVsbFllYXIodGhpcy55LCB0aGlzLm0sIHRoaXMuZCk7XG4gICAgcmVzdWx0LnNldEhvdXJzKHRoaXMuaCwgdGhpcy5pLCB0aGlzLnMsIHRoaXMuZik7XG5cbiAgICAvLyBub3RlOiB0aGlzIGlzIGRvbmUgdHdpY2UgaW4gUEhQXG4gICAgLy8gZWFybHkgd2hlbiBwcm9jZXNzaW5nIHNwZWNpYWwgcmVsYXRpdmVzXG4gICAgLy8gYW5kIGxhdGVcbiAgICAvLyB0b2RvOiBjaGVjayBpZiB0aGUgbG9naWMgY2FuIGJlIHJlZHVjZWRcbiAgICAvLyB0byBqdXN0IG9uZSB0aW1lIGFjdGlvblxuICAgIHN3aXRjaCAodGhpcy5maXJzdE9yTGFzdERheU9mTW9udGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmVzdWx0LnNldERhdGUoMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgcmVzdWx0LnNldE1vbnRoKHJlc3VsdC5nZXRNb250aCgpICsgMSwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGFkanVzdCB0aW1lem9uZVxuICAgIGlmICghaXNOYU4odGhpcy56KSAmJiByZXN1bHQuZ2V0VGltZXpvbmVPZmZzZXQoKSAhPT0gdGhpcy56KSB7XG4gICAgICByZXN1bHQuc2V0VVRDRnVsbFllYXIocmVzdWx0LmdldEZ1bGxZZWFyKCksIHJlc3VsdC5nZXRNb250aCgpLCByZXN1bHQuZ2V0RGF0ZSgpKTtcblxuICAgICAgcmVzdWx0LnNldFVUQ0hvdXJzKHJlc3VsdC5nZXRIb3VycygpLCByZXN1bHQuZ2V0TWludXRlcygpICsgdGhpcy56LCByZXN1bHQuZ2V0U2Vjb25kcygpLCByZXN1bHQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RydG90aW1lKHN0ciwgbm93KSB7XG4gIC8vICAgICAgIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvc3RydG90aW1lL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cHM6Ly9jYWlvYXJpZWRlLmNvbSlcbiAgLy8gICAgICBpbXByb3ZlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cHM6Ly9rdnouaW8pXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IENhaW8gQXJpZWRlIChodHRwczovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBBLiBNYXTDrWFzIFF1ZXphZGEgKGh0dHBzOi8vYW1hdGlhc3EuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBwcmV1dGVyXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBNaXJrbyBGYWJlclxuICAvLyAgICAgICAgIGlucHV0IGJ5OiBEYXZpZFxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBXYWduZXIgQi4gU29hcmVzXG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IEFydHVyIFRjaGVybnljaGV2XG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IFN0ZXBoYW4gQsO2c2NoLVBsZXBlbGl0cyAoaHR0cHM6Ly9naXRodWIuY29tL3BsZXBlKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBSYWZhxYIgS3VrYXdza2lcbiAgLy8gICAgICAgICAgIG5vdGUgMTogRXhhbXBsZXMgYWxsIGhhdmUgYSBmaXhlZCB0aW1lc3RhbXAgdG8gcHJldmVudFxuICAvLyAgICAgICAgICAgbm90ZSAxOiB0ZXN0cyB0byBmYWlsIGJlY2F1c2Ugb2YgdmFyaWFibGUgdGltZSh6b25lcylcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogc3RydG90aW1lKCcrMSBkYXknLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAxOiAxMTI5NzE5NjAwXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHN0cnRvdGltZSgnKzEgd2VlayAyIGRheXMgNCBob3VycyAyIHNlY29uZHMnLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAyOiAxMTMwNDI1MjAyXG4gIC8vICAgICAgICBleGFtcGxlIDM6IHN0cnRvdGltZSgnbGFzdCBtb250aCcsIDExMjk2MzMyMDApXG4gIC8vICAgICAgICByZXR1cm5zIDM6IDExMjcwNDEyMDBcbiAgLy8gICAgICAgIGV4YW1wbGUgNDogc3RydG90aW1lKCcyMDA5LTA1LTA0IDA4OjMwOjAwKzAwJylcbiAgLy8gICAgICAgIHJldHVybnMgNDogMTI0MTQyNTgwMFxuICAvLyAgICAgICAgZXhhbXBsZSA1OiBzdHJ0b3RpbWUoJzIwMDktMDUtMDQgMDg6MzA6MDArMDI6MDAnKVxuICAvLyAgICAgICAgcmV0dXJucyA1OiAxMjQxNDE4NjAwXG5cbiAgaWYgKG5vdyA9PSBudWxsKSB7XG4gICAgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIH1cblxuICAvLyB0aGUgcnVsZSBvcmRlciBpcyBpbXBvcnRhbnRcbiAgLy8gaWYgbXVsdGlwbGUgcnVsZXMgbWF0Y2gsIHRoZSBsb25nZXN0IG1hdGNoIHdpbnNcbiAgLy8gaWYgbXVsdGlwbGUgcnVsZXMgbWF0Y2ggdGhlIHNhbWUgc3RyaW5nLCB0aGUgZmlyc3QgbWF0Y2ggd2luc1xuICB2YXIgcnVsZXMgPSBbZm9ybWF0cy55ZXN0ZXJkYXksIGZvcm1hdHMubm93LCBmb3JtYXRzLm5vb24sIGZvcm1hdHMubWlkbmlnaHRPclRvZGF5LCBmb3JtYXRzLnRvbW9ycm93LCBmb3JtYXRzLnRpbWVzdGFtcCwgZm9ybWF0cy5maXJzdE9yTGFzdERheSwgZm9ybWF0cy5iYWNrT3JGcm9udE9mLFxuICAvLyBmb3JtYXRzLndlZWtkYXlPZiwgLy8gbm90IHlldCBpbXBsZW1lbnRlZFxuICBmb3JtYXRzLnRpbWVUaW55MTIsIGZvcm1hdHMudGltZVNob3J0MTIsIGZvcm1hdHMudGltZUxvbmcxMiwgZm9ybWF0cy5tc3NxbHRpbWUsIGZvcm1hdHMudGltZVNob3J0MjQsIGZvcm1hdHMudGltZUxvbmcyNCwgZm9ybWF0cy5pc284NjAxbG9uZywgZm9ybWF0cy5nbnVOb0NvbG9uLCBmb3JtYXRzLmlzbzg2MDFub0NvbG9uLCBmb3JtYXRzLmFtZXJpY2FuU2hvcnQsIGZvcm1hdHMuYW1lcmljYW4sIGZvcm1hdHMuaXNvODYwMWRhdGU0LCBmb3JtYXRzLmlzbzg2MDFkYXRlU2xhc2gsIGZvcm1hdHMuZGF0ZVNsYXNoLCBmb3JtYXRzLmdudURhdGVTaG9ydE9ySXNvODYwMWRhdGUyLCBmb3JtYXRzLmdudURhdGVTaG9ydGVyLCBmb3JtYXRzLmRhdGVGdWxsLCBmb3JtYXRzLnBvaW50ZWREYXRlNCwgZm9ybWF0cy5wb2ludGVkRGF0ZTIsIGZvcm1hdHMuZGF0ZU5vRGF5LCBmb3JtYXRzLmRhdGVOb0RheVJldiwgZm9ybWF0cy5kYXRlVGV4dHVhbCwgZm9ybWF0cy5kYXRlTm9ZZWFyLCBmb3JtYXRzLmRhdGVOb1llYXJSZXYsIGZvcm1hdHMuZGF0ZU5vQ29sb24sIGZvcm1hdHMueG1sUnBjLCBmb3JtYXRzLnhtbFJwY05vQ29sb24sIGZvcm1hdHMuc29hcCwgZm9ybWF0cy53ZGR4LCBmb3JtYXRzLmV4aWYsIGZvcm1hdHMucGd5ZG90ZCwgZm9ybWF0cy5pc29XZWVrRGF5LCBmb3JtYXRzLnBnVGV4dFNob3J0LCBmb3JtYXRzLnBnVGV4dFJldmVyc2UsIGZvcm1hdHMuY2xmLCBmb3JtYXRzLnllYXI0LCBmb3JtYXRzLmFnbywgZm9ybWF0cy5kYXlUZXh0LCBmb3JtYXRzLnJlbGF0aXZlVGV4dFdlZWssIGZvcm1hdHMucmVsYXRpdmVUZXh0LCBmb3JtYXRzLm1vbnRoRnVsbE9yTW9udGhBYmJyLCBmb3JtYXRzLnR6Q29ycmVjdGlvbiwgZm9ybWF0cy5kYXRlU2hvcnRXaXRoVGltZVNob3J0MTIsIGZvcm1hdHMuZGF0ZVNob3J0V2l0aFRpbWVMb25nMTIsIGZvcm1hdHMuZGF0ZVNob3J0V2l0aFRpbWVTaG9ydCwgZm9ybWF0cy5kYXRlU2hvcnRXaXRoVGltZUxvbmcsIGZvcm1hdHMucmVsYXRpdmUsIGZvcm1hdHMud2hpdGVzcGFjZV07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUocmVzdWx0UHJvdG8pO1xuXG4gIHdoaWxlIChzdHIubGVuZ3RoKSB7XG4gICAgdmFyIGxvbmdlc3RNYXRjaCA9IG51bGw7XG4gICAgdmFyIGZpbmFsUnVsZSA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJ1bGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGZvcm1hdCA9IHJ1bGVzW2ldO1xuXG4gICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goZm9ybWF0LnJlZ2V4KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmICghbG9uZ2VzdE1hdGNoIHx8IG1hdGNoWzBdLmxlbmd0aCA+IGxvbmdlc3RNYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgICBsb25nZXN0TWF0Y2ggPSBtYXRjaDtcbiAgICAgICAgICBmaW5hbFJ1bGUgPSBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZpbmFsUnVsZSB8fCBmaW5hbFJ1bGUuY2FsbGJhY2sgJiYgZmluYWxSdWxlLmNhbGxiYWNrLmFwcGx5KHJlc3VsdCwgbG9uZ2VzdE1hdGNoKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdHIgPSBzdHIuc3Vic3RyKGxvbmdlc3RNYXRjaFswXS5sZW5ndGgpO1xuICAgIGZpbmFsUnVsZSA9IG51bGw7XG4gICAgbG9uZ2VzdE1hdGNoID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKHJlc3VsdC50b0RhdGUobmV3IERhdGUobm93ICogMTAwMCkpIC8gMTAwMCk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RydG90aW1lLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmlfZ2V0KHZhcm5hbWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvaW5pX2dldC9cbiAgLy8gb3JpZ2luYWwgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogVGhlIGluaSB2YWx1ZXMgbXVzdCBiZSBzZXQgYnkgaW5pX3NldCBvciBtYW51YWxseSB3aXRoaW4gYW4gaW5pIGZpbGVcbiAgLy8gICBleGFtcGxlIDE6IGluaV9zZXQoJ2RhdGUudGltZXpvbmUnLCAnQXNpYS9Ib25nX0tvbmcnKVxuICAvLyAgIGV4YW1wbGUgMTogaW5pX2dldCgnZGF0ZS50aW1lem9uZScpXG4gIC8vICAgcmV0dXJucyAxOiAnQXNpYS9Ib25nX0tvbmcnXG5cbiAgdmFyICRnbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgJGdsb2JhbC4kbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXMgfHwge307XG4gIHZhciAkbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXM7XG4gICRsb2N1dHVzLnBocCA9ICRsb2N1dHVzLnBocCB8fCB7fTtcbiAgJGxvY3V0dXMucGhwLmluaSA9ICRsb2N1dHVzLnBocC5pbmkgfHwge307XG5cbiAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0gJiYgJGxvY3V0dXMucGhwLmluaVt2YXJuYW1lXS5sb2NhbF92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuICRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pX2dldC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICAvLyAgZGlzY3VzcyBhdDogaHR0cHM6Ly9sb2N1dHVzLmlvL3BocC9zdHJsZW4vXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwczovL2t2ei5pbylcbiAgLy8gaW1wcm92ZWQgYnk6IFNha2ltb3JpXG4gIC8vIGltcHJvdmVkIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwczovL2t2ei5pbylcbiAgLy8gICAgaW5wdXQgYnk6IEtpcmsgU3Ryb2JlY2tcbiAgLy8gYnVnZml4ZWQgYnk6IE9ubm8gTWFyc21hbiAoaHR0cHM6Ly90d2l0dGVyLmNvbS9vbm5vbWFyc21hbilcbiAgLy8gIHJldmlzZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogTWF5IGxvb2sgbGlrZSBvdmVya2lsbCwgYnV0IGluIG9yZGVyIHRvIGJlIHRydWx5IGZhaXRoZnVsIHRvIGhhbmRsaW5nIGFsbCBVbmljb2RlXG4gIC8vICAgICAgbm90ZSAxOiBjaGFyYWN0ZXJzIGFuZCB0byB0aGlzIGZ1bmN0aW9uIGluIFBIUCB3aGljaCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzXG4gIC8vICAgICAgbm90ZSAxOiBidXQgY291bnRzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycywgc29tZXRoaW5nIGxpa2UgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LlxuICAvLyAgIGV4YW1wbGUgMTogc3RybGVuKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDE6IDE5XG4gIC8vICAgZXhhbXBsZSAyOiBpbmlfc2V0KCd1bmljb2RlLnNlbWFudGljcycsICdvbicpXG4gIC8vICAgZXhhbXBsZSAyOiBzdHJsZW4oJ0FcXHVkODdlXFx1ZGMwNFonKVxuICAvLyAgIHJldHVybnMgMjogM1xuXG4gIHZhciBzdHIgPSBzdHJpbmcgKyAnJztcblxuICB2YXIgaW5pVmFsID0gKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUoJy4uL2luZm8vaW5pX2dldCcpKCd1bmljb2RlLnNlbWFudGljcycpIDogdW5kZWZpbmVkKSB8fCAnb2ZmJztcbiAgaWYgKGluaVZhbCA9PT0gJ29mZicpIHtcbiAgICByZXR1cm4gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGxndGggPSAwO1xuXG4gIHZhciBnZXRXaG9sZUNoYXIgPSBmdW5jdGlvbiBnZXRXaG9sZUNoYXIoc3RyLCBpKSB7XG4gICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB2YXIgbmV4dCA9ICcnO1xuICAgIHZhciBwcmV2ID0gJyc7XG4gICAgaWYgKGNvZGUgPj0gMHhEODAwICYmIGNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSAoY291bGQgY2hhbmdlIGxhc3QgaGV4IHRvIDB4REI3RiB0b1xuICAgICAgLy8gdHJlYXQgaGlnaCBwcml2YXRlIHN1cnJvZ2F0ZXMgYXMgc2luZ2xlIGNoYXJhY3RlcnMpXG4gICAgICBpZiAoc3RyLmxlbmd0aCA8PSBpICsgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hpZ2ggc3Vycm9nYXRlIHdpdGhvdXQgZm9sbG93aW5nIGxvdyBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIG5leHQgPSBzdHIuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dCA8IDB4REMwMCB8fCBuZXh0ID4gMHhERkZGKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGlnaCBzdXJyb2dhdGUgd2l0aG91dCBmb2xsb3dpbmcgbG93IHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoaSkgKyBzdHIuY2hhckF0KGkgKyAxKTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPj0gMHhEQzAwICYmIGNvZGUgPD0gMHhERkZGKSB7XG4gICAgICAvLyBMb3cgc3Vycm9nYXRlXG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvdyBzdXJyb2dhdGUgd2l0aG91dCBwcmVjZWRpbmcgaGlnaCBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIHByZXYgPSBzdHIuY2hhckNvZGVBdChpIC0gMSk7XG4gICAgICBpZiAocHJldiA8IDB4RDgwMCB8fCBwcmV2ID4gMHhEQkZGKSB7XG4gICAgICAgIC8vIChjb3VsZCBjaGFuZ2UgbGFzdCBoZXggdG8gMHhEQjdGIHRvIHRyZWF0IGhpZ2ggcHJpdmF0ZSBzdXJyb2dhdGVzXG4gICAgICAgIC8vIGFzIHNpbmdsZSBjaGFyYWN0ZXJzKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvdyBzdXJyb2dhdGUgd2l0aG91dCBwcmVjZWRpbmcgaGlnaCBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGNhbiBwYXNzIG92ZXIgbG93IHN1cnJvZ2F0ZXMgbm93IGFzIHRoZSBzZWNvbmRcbiAgICAgIC8vIGNvbXBvbmVudCBpbiBhIHBhaXIgd2hpY2ggd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLmNoYXJBdChpKTtcbiAgfTtcblxuICBmb3IgKGkgPSAwLCBsZ3RoID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChnZXRXaG9sZUNoYXIoc3RyLCBpKSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBBZGFwdCB0aGlzIGxpbmUgYXQgdGhlIHRvcCBvZiBhbnkgbG9vcCwgcGFzc2luZyBpbiB0aGUgd2hvbGUgc3RyaW5nIGFuZFxuICAgIC8vIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBhbmQgcmV0dXJuaW5nIGEgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBpbmRpdmlkdWFsIGNoYXJhY3RlcjtcbiAgICAvLyBwdXJwb3NlIGlzIHRvIHRyZWF0IHRoZSBmaXJzdCBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgYXMgdGhlIHdob2xlIGNoYXJhY3RlciBhbmQgdGhlblxuICAgIC8vIGlnbm9yZSB0aGUgc2Vjb25kIHBhcnRcbiAgICBsZ3RoKys7XG4gIH1cblxuICByZXR1cm4gbGd0aDtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJsZW4uanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzX251bWVyaWMobWl4ZWRWYXIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvaXNfbnVtZXJpYy9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHBzOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogRGF2aWRcbiAgLy8gaW1wcm92ZWQgYnk6IHRhaXRoXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBUaW0gZGUgS29uaW5nXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBXZWJEZXZIb2JvIChodHRwczovL3dlYmRldmhvYm8uYmxvZ3Nwb3QuY29tLylcbiAgLy8gYnVnZml4ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyBidWdmaXhlZCBieTogRGVuaXMgQ2hlbnUgKGh0dHBzOi8vc2hub3VsbGUubmV0KVxuICAvLyAgIGV4YW1wbGUgMTogaXNfbnVtZXJpYygxODYuMzEpXG4gIC8vICAgcmV0dXJucyAxOiB0cnVlXG4gIC8vICAgZXhhbXBsZSAyOiBpc19udW1lcmljKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDI6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSAzOiBpc19udW1lcmljKCcgKzE4Ni4zMWUyJylcbiAgLy8gICByZXR1cm5zIDM6IHRydWVcbiAgLy8gICBleGFtcGxlIDQ6IGlzX251bWVyaWMoJycpXG4gIC8vICAgcmV0dXJucyA0OiBmYWxzZVxuICAvLyAgIGV4YW1wbGUgNTogaXNfbnVtZXJpYyhbXSlcbiAgLy8gICByZXR1cm5zIDU6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSA2OiBpc19udW1lcmljKCcxICcpXG4gIC8vICAgcmV0dXJucyA2OiBmYWxzZVxuXG4gIHZhciB3aGl0ZXNwYWNlID0gWycgJywgJ1xcbicsICdcXHInLCAnXFx0JywgJ1xcZicsICdcXHgwYicsICdcXHhhMCcsICdcXHUyMDAwJywgJ1xcdTIwMDEnLCAnXFx1MjAwMicsICdcXHUyMDAzJywgJ1xcdTIwMDQnLCAnXFx1MjAwNScsICdcXHUyMDA2JywgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAwQicsICdcXHUyMDI4JywgJ1xcdTIwMjknLCAnXFx1MzAwMCddLmpvaW4oJycpO1xuXG4gIC8vIEB0b2RvOiBCcmVhayB0aGlzIHVwIHVzaW5nIG1hbnkgc2luZ2xlIGNvbmRpdGlvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIHJldHVybiAodHlwZW9mIG1peGVkVmFyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWl4ZWRWYXIgPT09ICdzdHJpbmcnICYmIHdoaXRlc3BhY2UuaW5kZXhPZihtaXhlZFZhci5zbGljZSgtMSkpID09PSAtMSkgJiYgbWl4ZWRWYXIgIT09ICcnICYmICFpc05hTihtaXhlZFZhcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNfbnVtZXJpYy5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIExhcmF2ZWwgSmF2YXNjcmlwdCBWYWxpZGF0aW9uXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Byb2VuZ3NvZnQvbGFyYXZlbC1qc3ZhbGlkYXRpb25cbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdmFsaWRhdG9yc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNyBQcm9lbmdzb2Z0XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgc3RybGVuIGZyb20gJ2xvY3V0dXMvcGhwL3N0cmluZ3Mvc3RybGVuJztcbmltcG9ydCBhcnJheV9kaWZmIGZyb20gJ2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYnO1xuaW1wb3J0IHN0cnRvdGltZSBmcm9tICdsb2N1dHVzL3BocC9kYXRldGltZS9zdHJ0b3RpbWUnO1xuaW1wb3J0IGlzX251bWVyaWMgZnJvbSAnbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMnO1xuXG4kLmV4dGVuZCh0cnVlLCBsYXJhdmVsVmFsaWRhdGlvbiwge1xuXG4gICAgaGVscGVyczoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1lcmljIHJ1bGVzXG4gICAgICAgICAqL1xuICAgICAgICBudW1lcmljUnVsZXM6IFsnSW50ZWdlcicsICdOdW1lcmljJ10sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGZpbGUgaW5mb3JtYXRpb24gZnJvbSBmaWxlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZmllbGRPYmpcbiAgICAgICAgICogQHBhcmFtIGluZGV4XG4gICAgICAgICAqIEByZXR1cm5zIHt7ZmlsZTogKiwgZXh0ZW5zaW9uOiBzdHJpbmcsIHNpemU6IG51bWJlcn19XG4gICAgICAgICAqL1xuICAgICAgICBmaWxlaW5mbzogZnVuY3Rpb24gKGZpZWxkT2JqLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIEZpbGVOYW1lID0gZmllbGRPYmoudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoIGZpZWxkT2JqLmZpbGVzICE9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRPYmouZmlsZXNbaW5kZXhdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb246IEZpbGVOYW1lLnN1YnN0cihGaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWVsZE9iai5maWxlc1tpbmRleF0uc2l6ZSAvIDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWVsZE9iai5maWxlc1tpbmRleF0udHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3RvcnMgZm9yIHRoIHNwZWNpZmllZCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVzXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShuYW1lcykpICB7XG4gICAgICAgICAgICAgICAgbmFtZXMgPSBbbmFtZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goXCJbbmFtZT0nXCIgKyBuYW1lc1tpXSArIFwiJ11cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3Iuam9pbigpO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIG51bWVyaWMgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTnVtZXJpY1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUnVsZXMoZWxlbWVudCwgdGhpcy5udW1lcmljUnVsZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyBwYXNzZWQgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBydWxlc1xuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCwgcnVsZXMpIHtcblxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9ICQuZGF0YShlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdmFyIGxpc3RSdWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdmFsaWRhdG9yLmFycmF5UnVsZXNDYWNoZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGVbZWxlbWVudC5uYW1lXSwgZnVuY3Rpb24gKGluZGV4LCBhcnJheVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2goYXJyYXlSdWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gdmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2godmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJC5lYWNoKGxpc3RSdWxlcywgZnVuY3Rpb24oaW5kZXgsb2JqUnVsZXMpe1xuICAgICAgICAgICAgICAgIGlmICgnbGFyYXZlbFZhbGlkYXRpb24nIGluIG9ialJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcnVsZXM9b2JqUnVsZXMubGFyYXZlbFZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3J1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KF9ydWxlc1tpXVswXSxydWxlcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiB0aGUgc3RyaW5nIGxlbmd0aCB1c2luZyBQSFAgZnVuY3Rpb24uXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJsZW4ucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cmxlbi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgc3RybGVuOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RybGVuKHN0cmluZyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGRlcGVuZGluZyBvZiBoaXMgdHlwZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9ialxuICAgICAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHJldHVybnMgaW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiBnZXRTaXplKG9iaiwgZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTnVtZXJpY1J1bGVzKGVsZW1lbnQpICYmIHRoaXMuaXNfbnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGguZmxvb3IodGhpcy5maWxlaW5mbyhlbGVtZW50KS5zaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuc3RybGVuKHZhbHVlKSk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHNwZWNpZmllZCBydWxlIGZyb20gZWxlbWVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJ1bGVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXRMYXJhdmVsVmFsaWRhdGlvbjogZnVuY3Rpb24ocnVsZSwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAkLmVhY2goJC52YWxpZGF0b3Iuc3RhdGljUnVsZXMoZWxlbWVudCksIGZ1bmN0aW9uKGtleSwgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5PT09XCJsYXJhdmVsVmFsaWRhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChydWxlcywgZnVuY3Rpb24gKGksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF09PT1ydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBoZSB0aW1lc3RhbXAgb2YgdmFsdWUgcGFzc2VkIHVzaW5nIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdCBpbiBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxpbnR9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZVRpbWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBmbXQgPSBuZXcgRGF0ZUZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZVJ1bGUgPSB0aGlzLmdldExhcmF2ZWxWYWxpZGF0aW9uKCdEYXRlRm9ybWF0JywgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlUnVsZVsxXVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGltZVZhbHVlID0gdGhpcy5zdHJ0b3RpbWUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lVmFsdWUgPSBmbXQucGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVZhbHVlID0gTWF0aC5yb3VuZCgodGltZVZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgYSBnaXZlbiBkYXRlIGFnYWluc3QgYW5vdGhlciB1c2luZyBhbiBvcGVyYXRvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbGlkYXRvclxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gb3BlcmF0b3JcbiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNvbXBhcmVEYXRlczogZnVuY3Rpb24gKHZhbGlkYXRvciwgdmFsdWUsIGVsZW1lbnQsIHBhcmFtcywgb3BlcmF0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHRpbWVDb21wYXJlID0gcGFyc2VGbG9hdChwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4odGltZUNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZGVwZW5kZW50RWxlbWVudCh2YWxpZGF0b3IsIGVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUNvbXBhcmUgPSB0aGlzLnBhcnNlVGltZSh2YWxpZGF0b3IuZWxlbWVudFZhbHVlKHRhcmdldCksIHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSB0aGlzLnBhcnNlVGltZSh2YWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGltZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlIDwgdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWUgPD0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA9PT0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA+IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlID49IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvcGVyYXRvci4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBpbnRlbGxpZ2VudGx5IGd1ZXNzIHRoZSBkYXRlIGJ5IGNsb3NlbHkgbWF0Y2hpbmcgdGhlIHNwZWNpZmljIGZvcm1hdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlXG4gICAgICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBndWVzc0RhdGU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZm10ID0gbmV3IERhdGVGb3JtYXR0ZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBmbXQuZ3Vlc3NEYXRlKHZhbHVlLCBmb3JtYXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgVW5peCB0aW1lc3RhbXAgYmFzZWQgb24gUEhQIGZ1bmN0aW9uIHN0cm90b3RpbWUuXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lcy9mdW5jdGlvbi5zdHJ0b3RpbWUucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cnRvdGltZS9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHRleHRcbiAgICAgICAgICogQHBhcmFtIG5vd1xuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgICAgICovXG4gICAgICAgIHN0cnRvdGltZTogZnVuY3Rpb24gKHRleHQsIG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cnRvdGltZSh0ZXh0LCBub3cpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgaWYgdmFsdWUgaXMgbnVtZXJpYy5cbiAgICAgICAgICogaHR0cDovL3BocC5uZXQvbWFudWFsL2VzL3Zhci5pc19udW1lcmljLnBocFxuICAgICAgICAgKiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9pc19udW1lcmljL1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbWl4ZWRfdmFyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAgICAgKi9cbiAgICAgICAgaXNfbnVtZXJpYzogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzX251bWVyaWMobWl4ZWRfdmFyKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBvZiB0eXBlIEFycmF5LlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5I1BvbHlmaWxsXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBhcmdcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBpc0FycmF5OiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBBcnJheSBkaWZmIGJhc2VkIG9uIFBIUCBmdW5jdGlvbiBhcnJheV9kaWZmLlxuICAgICAgICAgKiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZXMvZnVuY3Rpb24uYXJyYXlfZGlmZi5waHBcbiAgICAgICAgICogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvYXJyYXlfZGlmZi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheURpZmY6IGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlfZGlmZihhcnIxLCBhcnIyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgd2hldGhlciB0d28gYXJyYXlzIGFyZSBlcXVhbCB0byBvbmUgYW5vdGhlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheUVxdWFsczogZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShhcnIxKSB8fCAhIHRoaXMuaXNBcnJheShhcnIyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICQuaXNFbXB0eU9iamVjdCh0aGlzLmFycmF5RGlmZihhcnIxLCBhcnIyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2VzIGVsZW1lbnQgZGVwZW5kYW50IGZyb20gb3RoZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWxpZGF0b3JcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50OiBmdW5jdGlvbih2YWxpZGF0b3IsIGVsZW1lbnQsIG5hbWUpIHtcblxuICAgICAgICAgICAgdmFyIGVsPXZhbGlkYXRvci5maW5kQnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIGVsWzBdIT09dW5kZWZpbmVkICAmJiB2YWxpZGF0b3Iuc2V0dGluZ3Mub25mb2N1c291dCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSAnYmx1cic7XG4gICAgICAgICAgICAgICAgaWYgKGVsWzBdLnRhZ05hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxbMF0udHlwZSA9PT0gJ3JhZGlvJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdjbGljayc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lID0gJy52YWxpZGF0ZS1sYXJhdmVsVmFsaWRhdGlvbic7XG4gICAgICAgICAgICAgICAgZWwub2ZmKCBydWxlTmFtZSApXG4gICAgICAgICAgICAgICAgICAgIC5vZmYoZXZlbnQgKyBydWxlTmFtZSArICctJyArIGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCBldmVudCArIHJ1bGVOYW1lICsgJy0nICsgZWxlbWVudC5uYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoIGVsZW1lbnQgKS52YWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsWzBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgZXJyb3IgQWpheCByZXNwb25zZSBhbmQgZ2V0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmVzcG9uc2UgPSBbJ1dob29wcywgbG9va3MgbGlrZSBzb21ldGhpbmcgd2VudCB3cm9uZy4nXTtcbiAgICAgICAgICAgIGlmICgncmVzcG9uc2VUZXh0JyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dC5tYXRjaCgvPGgxXFxzKj4oLiopPFxcL2gxXFxzKj4vaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheShlcnJvck1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmVzcG9uc2UgPSBbZXJyb3JNc2dbMV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRXNjYXBlIHN0cmluZyB0byB1c2UgYXMgUmVndWxhciBFeHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gc3RyXG4gICAgICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhdGUgUmVnRXhwIGZyb20gd2lsZGNhcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICAgICAgICovXG4gICAgICAgIHJlZ2V4RnJvbVdpbGRjYXJkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdChcIlsqXVwiKTtcbiAgICAgICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlZ2V4cFBhcnRzID0gbmFtZVBhcnRzLm1hcChmdW5jdGlvbihjdXJyZW50VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAnWyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gJ10nICtjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhcmF2ZWxWYWxpZGF0aW9uLmhlbHBlcnMuZXNjYXBlUmVnRXhwKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nK3JlZ2V4cFBhcnRzLmpvaW4oJ1teXFxcXF1dKicpKyckJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lcmdlIGFkZGl0aW9uYWwgbGFyYXZlbCB2YWxpZGF0aW9uIHJ1bGVzIGludG8gdGhlIGN1cnJlbnQgcnVsZSBzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxlc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UnVsZXNcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG1lcmdlUnVsZXM6IGZ1bmN0aW9uIChydWxlcywgbmV3UnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBydWxlc0xpc3QgPSB7XG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb24gfHwgW10sXG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uUmVtb3RlJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb25SZW1vdGUgfHwgW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNMaXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBydWxlc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcnVsZXNba2V5XSA9IHJ1bGVzW2tleV0uY29uY2F0KHJ1bGVzTGlzdFtrZXldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9 /*! * Laravel Javascript Validation * diff --git a/public/js/jsvalidation.js.map b/public/js/jsvalidation.js.map index 099b6369..41ddd737 100644 --- a/public/js/jsvalidation.js.map +++ b/public/js/jsvalidation.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/jquery-validation/dist/jquery.validate.js","node_modules/php-date-formatter/js/php-date-formatter.js","resources/assets/js/jsvalidation.js","es-build/helpers.js","resources/assets/js/timezones.js","resources/assets/js/validations.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACx2DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"jsvalidation.js","sourcesContent":["/*!\r\n * jQuery Validation Plugin v1.19.2\r\n *\r\n * https://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2020 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\r\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\r\n}));","/*!\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2016\n * @version 1.3.4\n *\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\n * @see http://php.net/manual/en/function.date.php\n *\n * For more JQuery plugins visit http://plugins.krajee.com\n * For more Yii related demos visit http://demos.krajee.com\n */\nvar DateFormatter;\n(function () {\n \"use strict\";\n\n var _compare, _lpad, _extend, _indexOf, defaultSettings, DAY, HOUR;\n DAY = 1000 * 60 * 60 * 24;\n HOUR = 3600;\n\n _compare = function (str1, str2) {\n return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();\n };\n _lpad = function (value, length, char) {\n var chr = char || '0', val = value.toString();\n return val.length < length ? _lpad(chr + val, length) : val;\n };\n _extend = function (out) {\n var i, obj;\n out = out || {};\n for (i = 1; i < arguments.length; i++) {\n obj = arguments[i];\n if (!obj) {\n continue;\n }\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (typeof obj[key] === 'object') {\n _extend(out[key], obj[key]);\n } else {\n out[key] = obj[key];\n }\n }\n }\n }\n return out;\n };\n _indexOf = function (val, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i].toLowerCase() === val.toLowerCase()) {\n return i;\n }\n }\n return -1;\n };\n defaultSettings = {\n dateSettings: {\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\n 'August', 'September', 'October', 'November', 'December'\n ],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n meridiem: ['AM', 'PM'],\n ordinal: function (number) {\n var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};\n return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];\n }\n },\n separators: /[ \\-+\\/\\.T:@]/g,\n validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,\n intParts: /[djwNzmnyYhHgGis]/g,\n tzParts: /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n tzClip: /[^-+\\dA-Z]/g\n };\n\n DateFormatter = function (options) {\n var self = this, config = _extend(defaultSettings, options);\n self.dateSettings = config.dateSettings;\n self.separators = config.separators;\n self.validParts = config.validParts;\n self.intParts = config.intParts;\n self.tzParts = config.tzParts;\n self.tzClip = config.tzClip;\n };\n\n DateFormatter.prototype = {\n constructor: DateFormatter,\n getMonth: function (val) {\n var self = this, i;\n i = _indexOf(val, self.dateSettings.monthsShort) + 1;\n if (i === 0) {\n i = _indexOf(val, self.dateSettings.months) + 1;\n }\n return i;\n },\n parseDate: function (vDate, vFormat) {\n var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,\n vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,\n out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};\n if (!vDate) {\n return null;\n }\n if (vDate instanceof Date) {\n return vDate;\n }\n if (vFormat === 'U') {\n i = parseInt(vDate);\n return i ? new Date(i * 1000) : vDate;\n }\n switch (typeof vDate) {\n case 'number':\n return new Date(vDate);\n case 'string':\n break;\n default:\n return null;\n }\n vFormatParts = vFormat.match(self.validParts);\n if (!vFormatParts || vFormatParts.length === 0) {\n throw new Error(\"Invalid date format definition.\");\n }\n vDateParts = vDate.replace(self.separators, '\\0').split('\\0');\n for (i = 0; i < vDateParts.length; i++) {\n vDatePart = vDateParts[i];\n iDatePart = parseInt(vDatePart);\n switch (vFormatParts[i]) {\n case 'y':\n case 'Y':\n if (iDatePart) {\n len = vDatePart.length;\n out.year = len === 2 ? parseInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart;\n } else {\n return null;\n }\n vDateFlag = true;\n break;\n case 'm':\n case 'n':\n case 'M':\n case 'F':\n if (isNaN(iDatePart)) {\n vMonth = self.getMonth(vDatePart);\n if (vMonth > 0) {\n out.month = vMonth;\n } else {\n return null;\n }\n } else {\n if (iDatePart >= 1 && iDatePart <= 12) {\n out.month = iDatePart;\n } else {\n return null;\n }\n }\n vDateFlag = true;\n break;\n case 'd':\n case 'j':\n if (iDatePart >= 1 && iDatePart <= 31) {\n out.day = iDatePart;\n } else {\n return null;\n }\n vDateFlag = true;\n break;\n case 'g':\n case 'h':\n vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :\n (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;\n mer = vDateParts[vMeriIndex];\n if (vMeriIndex > -1) {\n vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :\n (_compare(mer, vSettings.meridiem[1]) ? 12 : -1);\n if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) {\n out.hour = iDatePart + vMeriOffset - 1;\n } else if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n }\n } else {\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n } else {\n return null;\n }\n }\n vTimeFlag = true;\n break;\n case 'G':\n case 'H':\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n case 'i':\n if (iDatePart >= 0 && iDatePart <= 59) {\n out.min = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n case 's':\n if (iDatePart >= 0 && iDatePart <= 59) {\n out.sec = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n }\n }\n if (vDateFlag === true && out.year && out.month && out.day) {\n out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);\n } else {\n if (vTimeFlag !== true) {\n return null;\n }\n out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);\n }\n return out.date;\n },\n guessDate: function (vDateStr, vFormat) {\n if (typeof vDateStr !== 'string') {\n return vDateStr;\n }\n var self = this, vParts = vDateStr.replace(self.separators, '\\0').split('\\0'), vPattern = /^[djmn]/g, len,\n vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, n, iPart, iSec;\n\n if (!vPattern.test(vFormatParts[0])) {\n return vDateStr;\n }\n\n for (i = 0; i < vParts.length; i++) {\n vDigit = 2;\n iPart = vParts[i];\n iSec = parseInt(iPart.substr(0, 2));\n if (isNaN(iSec)) {\n return null;\n }\n switch (i) {\n case 0:\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n vDate.setMonth(iSec - 1);\n } else {\n vDate.setDate(iSec);\n }\n break;\n case 1:\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n vDate.setDate(iSec);\n } else {\n vDate.setMonth(iSec - 1);\n }\n break;\n case 2:\n vYear = vDate.getFullYear();\n len = iPart.length;\n vDigit = len < 4 ? len : 4;\n vYear = parseInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4));\n if (!vYear) {\n return null;\n }\n vDate.setFullYear(vYear);\n break;\n case 3:\n vDate.setHours(iSec);\n break;\n case 4:\n vDate.setMinutes(iSec);\n break;\n case 5:\n vDate.setSeconds(iSec);\n break;\n }\n n = iPart.substr(vDigit);\n if (n.length > 0) {\n vParts.splice(i + 1, 0, n);\n }\n }\n return vDate;\n },\n parseFormat: function (vChar, vDate) {\n var self = this, vSettings = self.dateSettings, fmt, backslash = /\\\\?(.?)/gi, doFormat = function (t, s) {\n return fmt[t] ? fmt[t]() : s;\n };\n fmt = {\n /////////\n // DAY //\n /////////\n /**\n * Day of month with leading 0: `01..31`\n * @return {string}\n */\n d: function () {\n return _lpad(fmt.j(), 2);\n },\n /**\n * Shorthand day name: `Mon...Sun`\n * @return {string}\n */\n D: function () {\n return vSettings.daysShort[fmt.w()];\n },\n /**\n * Day of month: `1..31`\n * @return {number}\n */\n j: function () {\n return vDate.getDate();\n },\n /**\n * Full day name: `Monday...Sunday`\n * @return {number}\n */\n l: function () {\n return vSettings.days[fmt.w()];\n },\n /**\n * ISO-8601 day of week: `1[Mon]..7[Sun]`\n * @return {number}\n */\n N: function () {\n return fmt.w() || 7;\n },\n /**\n * Day of week: `0[Sun]..6[Sat]`\n * @return {number}\n */\n w: function () {\n return vDate.getDay();\n },\n /**\n * Day of year: `0..365`\n * @return {number}\n */\n z: function () {\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);\n return Math.round((a - b) / DAY);\n },\n\n //////////\n // WEEK //\n //////////\n /**\n * ISO-8601 week number\n * @return {number}\n */\n W: function () {\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);\n return _lpad(1 + Math.round((a - b) / DAY / 7), 2);\n },\n\n ///////////\n // MONTH //\n ///////////\n /**\n * Full month name: `January...December`\n * @return {string}\n */\n F: function () {\n return vSettings.months[vDate.getMonth()];\n },\n /**\n * Month w/leading 0: `01..12`\n * @return {string}\n */\n m: function () {\n return _lpad(fmt.n(), 2);\n },\n /**\n * Shorthand month name; `Jan...Dec`\n * @return {string}\n */\n M: function () {\n return vSettings.monthsShort[vDate.getMonth()];\n },\n /**\n * Month: `1...12`\n * @return {number}\n */\n n: function () {\n return vDate.getMonth() + 1;\n },\n /**\n * Days in month: `28...31`\n * @return {number}\n */\n t: function () {\n return (new Date(fmt.Y(), fmt.n(), 0)).getDate();\n },\n\n //////////\n // YEAR //\n //////////\n /**\n * Is leap year? `0 or 1`\n * @return {number}\n */\n L: function () {\n var Y = fmt.Y();\n return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;\n },\n /**\n * ISO-8601 year\n * @return {number}\n */\n o: function () {\n var n = fmt.n(), W = fmt.W(), Y = fmt.Y();\n return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);\n },\n /**\n * Full year: `e.g. 1980...2010`\n * @return {number}\n */\n Y: function () {\n return vDate.getFullYear();\n },\n /**\n * Last two digits of year: `00...99`\n * @return {string}\n */\n y: function () {\n return fmt.Y().toString().slice(-2);\n },\n\n //////////\n // TIME //\n //////////\n /**\n * Meridian lower: `am or pm`\n * @return {string}\n */\n a: function () {\n return fmt.A().toLowerCase();\n },\n /**\n * Meridian upper: `AM or PM`\n * @return {string}\n */\n A: function () {\n var n = fmt.G() < 12 ? 0 : 1;\n return vSettings.meridiem[n];\n },\n /**\n * Swatch Internet time: `000..999`\n * @return {string}\n */\n B: function () {\n var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();\n return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);\n },\n /**\n * 12-Hours: `1..12`\n * @return {number}\n */\n g: function () {\n return fmt.G() % 12 || 12;\n },\n /**\n * 24-Hours: `0..23`\n * @return {number}\n */\n G: function () {\n return vDate.getHours();\n },\n /**\n * 12-Hours with leading 0: `01..12`\n * @return {string}\n */\n h: function () {\n return _lpad(fmt.g(), 2);\n },\n /**\n * 24-Hours w/leading 0: `00..23`\n * @return {string}\n */\n H: function () {\n return _lpad(fmt.G(), 2);\n },\n /**\n * Minutes w/leading 0: `00..59`\n * @return {string}\n */\n i: function () {\n return _lpad(vDate.getMinutes(), 2);\n },\n /**\n * Seconds w/leading 0: `00..59`\n * @return {string}\n */\n s: function () {\n return _lpad(vDate.getSeconds(), 2);\n },\n /**\n * Microseconds: `000000-999000`\n * @return {string}\n */\n u: function () {\n return _lpad(vDate.getMilliseconds() * 1000, 6);\n },\n\n //////////////\n // TIMEZONE //\n //////////////\n /**\n * Timezone identifier: `e.g. Atlantic/Azores, ...`\n * @return {string}\n */\n e: function () {\n var str = /\\((.*)\\)/.exec(String(vDate))[1];\n return str || 'Coordinated Universal Time';\n },\n /**\n * DST observed? `0 or 1`\n * @return {number}\n */\n I: function () {\n var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),\n b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);\n return ((a - c) !== (b - d)) ? 1 : 0;\n },\n /**\n * Difference to GMT in hour format: `e.g. +0200`\n * @return {string}\n */\n O: function () {\n var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);\n return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);\n },\n /**\n * Difference to GMT with colon: `e.g. +02:00`\n * @return {string}\n */\n P: function () {\n var O = fmt.O();\n return (O.substr(0, 3) + ':' + O.substr(3, 2));\n },\n /**\n * Timezone abbreviation: `e.g. EST, MDT, ...`\n * @return {string}\n */\n T: function () {\n var str = (String(vDate).match(self.tzParts) || [\"\"]).pop().replace(self.tzClip, \"\");\n return str || 'UTC';\n },\n /**\n * Timezone offset in seconds: `-43200...50400`\n * @return {number}\n */\n Z: function () {\n return -vDate.getTimezoneOffset() * 60;\n },\n\n ////////////////////\n // FULL DATE TIME //\n ////////////////////\n /**\n * ISO-8601 date\n * @return {string}\n */\n c: function () {\n return 'Y-m-d\\\\TH:i:sP'.replace(backslash, doFormat);\n },\n /**\n * RFC 2822 date\n * @return {string}\n */\n r: function () {\n return 'D, d M Y H:i:s O'.replace(backslash, doFormat);\n },\n /**\n * Seconds since UNIX epoch\n * @return {number}\n */\n U: function () {\n return vDate.getTime() / 1000 || 0;\n }\n };\n return doFormat(vChar, vChar);\n },\n formatDate: function (vDate, vFormat) {\n var self = this, i, n, len, str, vChar, vDateStr = '', BACKSLASH = '\\\\';\n if (typeof vDate === 'string') {\n vDate = self.parseDate(vDate, vFormat);\n if (!vDate) {\n return null;\n }\n }\n if (vDate instanceof Date) {\n len = vFormat.length;\n for (i = 0; i < len; i++) {\n vChar = vFormat.charAt(i);\n if (vChar === 'S' || vChar === BACKSLASH) {\n continue;\n }\n if (i > 0 && vFormat.charAt(i - 1) === BACKSLASH) {\n vDateStr += vChar;\n continue;\n }\n str = self.parseFormat(vChar, vDate);\n if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {\n n = parseInt(str) || 0;\n str += self.dateSettings.ordinal(n);\n }\n vDateStr += str;\n }\n return vDateStr;\n }\n return '';\n }\n };\n})();","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\nvar laravelValidation;\nlaravelValidation = {\n\n implicitRules: ['Required','Confirmed'],\n\n /**\n * Initialize laravel validations.\n */\n init: function () {\n\n // Disable class rules and attribute rules\n $.validator.classRuleSettings = {};\n $.validator.attributeRules = function () {\n this.rules = {}\n };\n\n $.validator.dataRules = this.arrayRules;\n $.validator.prototype.arrayRulesCache = {};\n\n // Register validations methods\n this.setupValidations();\n },\n\n arrayRules: function(element) {\n\n var rules = {},\n validator = $.data( element.form, \"validator\"),\n cache = validator.arrayRulesCache;\n\n // Is not an Array\n if (element.name.indexOf('[') === -1) {\n return rules;\n }\n\n if (! (element.name in cache)) {\n cache[element.name] = {};\n }\n\n $.each(validator.settings.rules, function(name, tmpRules) {\n if (name in cache[element.name]) {\n rules = laravelValidation.helpers.mergeRules(rules, cache[element.name][name]);\n } else {\n cache[element.name][name] = {};\n\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(name);\n if (element.name.match(nameRegExp)) {\n var newRules = $.validator.normalizeRule(tmpRules) || {};\n cache[element.name][name] = newRules;\n\n rules = laravelValidation.helpers.mergeRules(rules, newRules);\n }\n }\n });\n\n return rules;\n },\n\n setupValidations: function () {\n\n /**\n * Validate a set of local JS based rules against an element.\n *\n * @param validator\n * @param values\n * @param element\n * @param rules\n * @returns {boolean}\n */\n var validateLocalRules = function (validator, values, element, rules) {\n var validated = true,\n previous = validator.previousValue(element);\n\n $.each(rules, function (i, param) {\n var implicit = param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1;\n var rule = param[0];\n var message = param[2];\n\n if (! implicit && validator.optional(element)) {\n validated = \"dependency-mismatch\";\n return false;\n }\n\n if (laravelValidation.methods[rule] !== undefined) {\n $.each(values, function(index, value) {\n validated = laravelValidation.methods[rule].call(validator, value, element, param[1], function(valid) {\n validator.settings.messages[element.name].laravelValidationRemote = previous.originalMessage;\n if (valid) {\n var submitted = validator.formSubmitted;\n validator.prepareElement(element);\n validator.formSubmitted = submitted;\n validator.successList.push(element);\n delete validator.invalid[element.name];\n validator.showErrors();\n } else {\n var errors = {};\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message;\n validator.invalid[element.name] = true;\n validator.showErrors(errors);\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n });\n\n // Break loop.\n if (validated === false) {\n return false;\n }\n });\n } else {\n validated = false;\n }\n\n if (validated !== true) {\n if (!validator.settings.messages[element.name] ) {\n validator.settings.messages[element.name] = {};\n }\n\n validator.settings.messages[element.name].laravelValidation= message;\n\n return false;\n }\n\n });\n\n return validated;\n };\n\n /**\n * Create JQueryValidation check to validate Laravel rules.\n */\n\n $.validator.addMethod(\"laravelValidation\", function (value, element, params) {\n var rules = [],\n arrayRules = [];\n $.each(params, function (i, param) {\n // put Implicit rules in front\n var isArrayRule = param[4].indexOf('[') !== -1;\n if (param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1) {\n isArrayRule ? arrayRules.unshift(param) : rules.unshift(param);\n } else {\n isArrayRule ? arrayRules.push(param) : rules.push(param);\n }\n });\n\n // Validate normal rules.\n var localRulesResult = validateLocalRules(this, [value], element, rules);\n\n // Validate items of the array using array rules.\n var arrayValue = ! Array.isArray(value) ? [value] : value;\n var arrayRulesResult = validateLocalRules(this, arrayValue, element, arrayRules);\n\n return localRulesResult && arrayRulesResult;\n }, '');\n\n\n /**\n * Create JQueryValidation check to validate Remote Laravel rules.\n */\n $.validator.addMethod(\"laravelValidationRemote\", function (value, element, params) {\n\n var implicit = false,\n check = params[0][1],\n attribute = element.name,\n token = check[1],\n validateAll = check[2];\n\n $.each(params, function (i, parameters) {\n implicit = implicit || parameters[3];\n });\n\n\n if ( !implicit && this.optional( element ) ) {\n return \"dependency-mismatch\";\n }\n\n var previous = this.previousValue( element ),\n validator, data;\n\n if (!this.settings.messages[ element.name ] ) {\n this.settings.messages[ element.name ] = {};\n }\n previous.originalMessage = this.settings.messages[ element.name ].laravelValidationRemote;\n this.settings.messages[ element.name ].laravelValidationRemote = previous.message;\n\n var param = typeof param === \"string\" && { url: param } || param;\n\n if (laravelValidation.helpers.arrayEquals(previous.old, value) || previous.old === value) {\n return previous.valid;\n }\n\n previous.old = value;\n validator = this;\n this.startRequest( element );\n\n data = $(validator.currentForm).serializeArray();\n\n data.push({\n 'name': '_jsvalidation',\n 'value': attribute\n });\n\n data.push({\n 'name': '_jsvalidation_validate_all',\n 'value': validateAll\n });\n\n var formMethod = $(validator.currentForm).attr('method');\n if($(validator.currentForm).find('input[name=\"_method\"]').length) {\n formMethod = $(validator.currentForm).find('input[name=\"_method\"]').val();\n }\n\n $.ajax( $.extend( true, {\n mode: \"abort\",\n port: \"validate\" + element.name,\n dataType: \"json\",\n data: data,\n context: validator.currentForm,\n url: $(validator.currentForm).attr('action'),\n type: formMethod,\n\n beforeSend: function (xhr) {\n if ($(validator.currentForm).attr('method').toLowerCase() !== 'get' && token) {\n return xhr.setRequestHeader('X-XSRF-TOKEN', token);\n }\n }\n }, param )\n ).always(function( response, textStatus ) {\n var errors, message, submitted, valid;\n\n if (textStatus === 'error') {\n valid = false;\n response = laravelValidation.helpers.parseErrorResponse(response);\n } else if (textStatus === 'success') {\n valid = response === true || response === \"true\";\n } else {\n return;\n }\n\n validator.settings.messages[ element.name ].laravelValidationRemote = previous.originalMessage;\n\n if ( valid ) {\n submitted = validator.formSubmitted;\n validator.prepareElement( element );\n validator.formSubmitted = submitted;\n validator.successList.push( element );\n delete validator.invalid[ element.name ];\n validator.showErrors();\n } else {\n errors = {};\n message = response || validator.defaultMessage( element, \"remote\" );\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message[0];\n validator.invalid[ element.name ] = true;\n validator.showErrors( errors );\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n validator.stopRequest( element, valid );\n }\n );\n return \"pending\";\n }, '');\n }\n};\n\n$(function() {\n laravelValidation.init();\n});\n","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./resources/assets/js/helpers.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/locutus/php/array/array_diff.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/locutus/php/array/array_diff.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function array_diff(arr1) {\n // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/array_diff/\n // original by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Sanjoy Roy\n // revised by: Brett Zamir (http://brett-zamir.me)\n // example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld'])\n // returns 1: {0:'Kevin'}\n\n var retArr = {};\n var argl = arguments.length;\n var k1 = '';\n var i = 1;\n var k = '';\n var arr = {};\n\n arr1keys: for (k1 in arr1) {\n // eslint-disable-line no-labels\n for (i = 1; i < argl; i++) {\n arr = arguments[i];\n for (k in arr) {\n if (arr[k] === arr1[k1]) {\n // If it reaches here, it was found in at least one array, so try next value\n continue arr1keys; // eslint-disable-line no-labels\n }\n }\n retArr[k1] = arr1[k1];\n }\n }\n\n return retArr;\n};\n//# sourceMappingURL=array_diff.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/datetime/strtotime.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/locutus/php/datetime/strtotime.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar reSpace = '[ \\\\t]+';\nvar reSpaceOpt = '[ \\\\t]*';\nvar reMeridian = '(?:([ap])\\\\.?m\\\\.?([\\\\t ]|$))';\nvar reHour24 = '(2[0-4]|[01]?[0-9])';\nvar reHour24lz = '([01][0-9]|2[0-4])';\nvar reHour12 = '(0?[1-9]|1[0-2])';\nvar reMinute = '([0-5]?[0-9])';\nvar reMinutelz = '([0-5][0-9])';\nvar reSecond = '(60|[0-5]?[0-9])';\nvar reSecondlz = '(60|[0-5][0-9])';\nvar reFrac = '(?:\\\\.([0-9]+))';\n\nvar reDayfull = 'sunday|monday|tuesday|wednesday|thursday|friday|saturday';\nvar reDayabbr = 'sun|mon|tue|wed|thu|fri|sat';\nvar reDaytext = reDayfull + '|' + reDayabbr + '|weekdays?';\n\nvar reReltextnumber = 'first|second|third|fourth|fifth|sixth|seventh|eighth?|ninth|tenth|eleventh|twelfth';\nvar reReltexttext = 'next|last|previous|this';\nvar reReltextunit = '(?:second|sec|minute|min|hour|day|fortnight|forthnight|month|year)s?|weeks|' + reDaytext;\n\nvar reYear = '([0-9]{1,4})';\nvar reYear2 = '([0-9]{2})';\nvar reYear4 = '([0-9]{4})';\nvar reYear4withSign = '([+-]?[0-9]{4})';\nvar reMonth = '(1[0-2]|0?[0-9])';\nvar reMonthlz = '(0[0-9]|1[0-2])';\nvar reDay = '(?:(3[01]|[0-2]?[0-9])(?:st|nd|rd|th)?)';\nvar reDaylz = '(0[0-9]|[1-2][0-9]|3[01])';\n\nvar reMonthFull = 'january|february|march|april|may|june|july|august|september|october|november|december';\nvar reMonthAbbr = 'jan|feb|mar|apr|may|jun|jul|aug|sept?|oct|nov|dec';\nvar reMonthroman = 'i[vx]|vi{0,3}|xi{0,2}|i{1,3}';\nvar reMonthText = '(' + reMonthFull + '|' + reMonthAbbr + '|' + reMonthroman + ')';\n\nvar reTzCorrection = '((?:GMT)?([+-])' + reHour24 + ':?' + reMinute + '?)';\nvar reDayOfYear = '(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])';\nvar reWeekOfYear = '(0[1-9]|[1-4][0-9]|5[0-3])';\n\nfunction processMeridian(hour, meridian) {\n meridian = meridian && meridian.toLowerCase();\n\n switch (meridian) {\n case 'a':\n hour += hour === 12 ? -12 : 0;\n break;\n case 'p':\n hour += hour !== 12 ? 12 : 0;\n break;\n }\n\n return hour;\n}\n\nfunction processYear(yearStr) {\n var year = +yearStr;\n\n if (yearStr.length < 4 && year < 100) {\n year += year < 70 ? 2000 : 1900;\n }\n\n return year;\n}\n\nfunction lookupMonth(monthStr) {\n return {\n jan: 0,\n january: 0,\n i: 0,\n feb: 1,\n february: 1,\n ii: 1,\n mar: 2,\n march: 2,\n iii: 2,\n apr: 3,\n april: 3,\n iv: 3,\n may: 4,\n v: 4,\n jun: 5,\n june: 5,\n vi: 5,\n jul: 6,\n july: 6,\n vii: 6,\n aug: 7,\n august: 7,\n viii: 7,\n sep: 8,\n sept: 8,\n september: 8,\n ix: 8,\n oct: 9,\n october: 9,\n x: 9,\n nov: 10,\n november: 10,\n xi: 10,\n dec: 11,\n december: 11,\n xii: 11\n }[monthStr.toLowerCase()];\n}\n\nfunction lookupWeekday(dayStr) {\n var desiredSundayNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var dayNumbers = {\n mon: 1,\n monday: 1,\n tue: 2,\n tuesday: 2,\n wed: 3,\n wednesday: 3,\n thu: 4,\n thursday: 4,\n fri: 5,\n friday: 5,\n sat: 6,\n saturday: 6,\n sun: 0,\n sunday: 0\n };\n\n return dayNumbers[dayStr.toLowerCase()] || desiredSundayNumber;\n}\n\nfunction lookupRelative(relText) {\n var relativeNumbers = {\n last: -1,\n previous: -1,\n this: 0,\n first: 1,\n next: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eight: 8,\n eighth: 8,\n ninth: 9,\n tenth: 10,\n eleventh: 11,\n twelfth: 12\n };\n\n var relativeBehavior = {\n this: 1\n };\n\n var relTextLower = relText.toLowerCase();\n\n return {\n amount: relativeNumbers[relTextLower],\n behavior: relativeBehavior[relTextLower] || 0\n };\n}\n\nfunction processTzCorrection(tzOffset, oldValue) {\n var reTzCorrectionLoose = /(?:GMT)?([+-])(\\d+)(:?)(\\d{0,2})/i;\n tzOffset = tzOffset && tzOffset.match(reTzCorrectionLoose);\n\n if (!tzOffset) {\n return oldValue;\n }\n\n var sign = tzOffset[1] === '-' ? 1 : -1;\n var hours = +tzOffset[2];\n var minutes = +tzOffset[4];\n\n if (!tzOffset[4] && !tzOffset[3]) {\n minutes = Math.floor(hours % 100);\n hours = Math.floor(hours / 100);\n }\n\n return sign * (hours * 60 + minutes);\n}\n\nvar formats = {\n yesterday: {\n regex: /^yesterday/i,\n name: 'yesterday',\n callback: function callback() {\n this.rd -= 1;\n return this.resetTime();\n }\n },\n\n now: {\n regex: /^now/i,\n name: 'now'\n // do nothing\n },\n\n noon: {\n regex: /^noon/i,\n name: 'noon',\n callback: function callback() {\n return this.resetTime() && this.time(12, 0, 0, 0);\n }\n },\n\n midnightOrToday: {\n regex: /^(midnight|today)/i,\n name: 'midnight | today',\n callback: function callback() {\n return this.resetTime();\n }\n },\n\n tomorrow: {\n regex: /^tomorrow/i,\n name: 'tomorrow',\n callback: function callback() {\n this.rd += 1;\n return this.resetTime();\n }\n },\n\n timestamp: {\n regex: /^@(-?\\d+)/i,\n name: 'timestamp',\n callback: function callback(match, timestamp) {\n this.rs += +timestamp;\n this.y = 1970;\n this.m = 0;\n this.d = 1;\n this.dates = 0;\n\n return this.resetTime() && this.zone(0);\n }\n },\n\n firstOrLastDay: {\n regex: /^(first|last) day of/i,\n name: 'firstdayof | lastdayof',\n callback: function callback(match, day) {\n if (day.toLowerCase() === 'first') {\n this.firstOrLastDayOfMonth = 1;\n } else {\n this.firstOrLastDayOfMonth = -1;\n }\n }\n },\n\n backOrFrontOf: {\n regex: RegExp('^(back|front) of ' + reHour24 + reSpaceOpt + reMeridian + '?', 'i'),\n name: 'backof | frontof',\n callback: function callback(match, side, hours, meridian) {\n var back = side.toLowerCase() === 'back';\n var hour = +hours;\n var minute = 15;\n\n if (!back) {\n hour -= 1;\n minute = 45;\n }\n\n hour = processMeridian(hour, meridian);\n\n return this.resetTime() && this.time(hour, minute, 0, 0);\n }\n },\n\n weekdayOf: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reDayfull + '|' + reDayabbr + ')' + reSpace + 'of', 'i'),\n name: 'weekdayof'\n // todo\n },\n\n mssqltime: {\n regex: RegExp('^' + reHour12 + ':' + reMinutelz + ':' + reSecondlz + '[:.]([0-9]+)' + reMeridian, 'i'),\n name: 'mssqltime',\n callback: function callback(match, hour, minute, second, frac, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, +frac.substr(0, 3));\n }\n },\n\n timeLong12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),\n name: 'timelong12',\n callback: function callback(match, hour, minute, second, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, 0);\n }\n },\n\n timeShort12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'),\n name: 'timeshort12',\n callback: function callback(match, hour, minute, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, 0, 0);\n }\n },\n\n timeTiny12: {\n regex: RegExp('^' + reHour12 + reSpaceOpt + reMeridian, 'i'),\n name: 'timetiny12',\n callback: function callback(match, hour, meridian) {\n return this.time(processMeridian(+hour, meridian), 0, 0, 0);\n }\n },\n\n soap: {\n regex: RegExp('^' + reYear4 + '-' + reMonthlz + '-' + reDaylz + 'T' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reFrac + reTzCorrection + '?', 'i'),\n name: 'soap',\n callback: function callback(match, year, month, day, hour, minute, second, frac, tzCorrection) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, +frac.substr(0, 3)) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n wddx: {\n regex: RegExp('^' + reYear4 + '-' + reMonth + '-' + reDay + 'T' + reHour24 + ':' + reMinute + ':' + reSecond),\n name: 'wddx',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n exif: {\n regex: RegExp('^' + reYear4 + ':' + reMonthlz + ':' + reDaylz + ' ' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz, 'i'),\n name: 'exif',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpc: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + 'T' + reHour24 + ':' + reMinutelz + ':' + reSecondlz),\n name: 'xmlrpc',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpcNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + '[Tt]' + reHour24 + reMinutelz + reSecondlz),\n name: 'xmlrpcnocolon',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n clf: {\n regex: RegExp('^' + reDay + '/(' + reMonthAbbr + ')/' + reYear4 + ':' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reSpace + reTzCorrection, 'i'),\n name: 'clf',\n callback: function callback(match, day, month, year, hour, minute, second, tzCorrection) {\n return this.ymd(+year, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n iso8601long: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond + reFrac, 'i'),\n name: 'iso8601long',\n callback: function callback(match, hour, minute, second, frac) {\n return this.time(+hour, +minute, +second, +frac.substr(0, 3));\n }\n },\n\n dateTextual: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]+' + reYear, 'i'),\n name: 'datetextual',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n pointedDate4: {\n regex: RegExp('^' + reDay + '[.\\\\t-]' + reMonth + '[.-]' + reYear4),\n name: 'pointeddate4',\n callback: function callback(match, day, month, year) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pointedDate2: {\n regex: RegExp('^' + reDay + '[.\\\\t]' + reMonth + '\\\\.' + reYear2),\n name: 'pointeddate2',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n timeLong24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond),\n name: 'timelong24',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n dateNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz),\n name: 'datenocolon',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pgydotd: {\n regex: RegExp('^' + reYear4 + '\\\\.?' + reDayOfYear),\n name: 'pgydotd',\n callback: function callback(match, year, day) {\n return this.ymd(+year, 0, +day);\n }\n },\n\n timeShort24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute, 'i'),\n name: 'timeshort24',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, 0);\n }\n },\n\n iso8601noColon: {\n regex: RegExp('^t?' + reHour24lz + reMinutelz + reSecondlz, 'i'),\n name: 'iso8601nocolon',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n iso8601dateSlash: {\n // eventhough the trailing slash is optional in PHP\n // here it's mandatory and inputs without the slash\n // are handled by dateslash\n regex: RegExp('^' + reYear4 + '/' + reMonthlz + '/' + reDaylz + '/'),\n name: 'iso8601dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n dateSlash: {\n regex: RegExp('^' + reYear4 + '/' + reMonth + '/' + reDay),\n name: 'dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n american: {\n regex: RegExp('^' + reMonth + '/' + reDay + '/' + reYear),\n name: 'american',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n americanShort: {\n regex: RegExp('^' + reMonth + '/' + reDay),\n name: 'americanshort',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, month - 1, +day);\n }\n },\n\n gnuDateShortOrIso8601date2: {\n // iso8601date2 is complete subset of gnudateshort\n regex: RegExp('^' + reYear + '-' + reMonth + '-' + reDay),\n name: 'gnudateshort | iso8601date2',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n iso8601date4: {\n regex: RegExp('^' + reYear4withSign + '-' + reMonthlz + '-' + reDaylz),\n name: 'iso8601date4',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n gnuNoColon: {\n regex: RegExp('^t' + reHour24lz + reMinutelz, 'i'),\n name: 'gnunocolon',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, this.f);\n }\n },\n\n gnuDateShorter: {\n regex: RegExp('^' + reYear4 + '-' + reMonth),\n name: 'gnudateshorter',\n callback: function callback(match, year, month) {\n return this.ymd(+year, month - 1, 1);\n }\n },\n\n pgTextReverse: {\n // note: allowed years are from 32-9999\n // years below 32 should be treated as days in datefull\n regex: RegExp('^' + '(\\\\d{3,4}|[4-9]\\\\d|3[2-9])-(' + reMonthAbbr + ')-' + reDaylz, 'i'),\n name: 'pgtextreverse',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateFull: {\n regex: RegExp('^' + reDay + '[ \\\\t.-]*' + reMonthText + '[ \\\\t.-]*' + reYear, 'i'),\n name: 'datefull',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoDay: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reYear4, 'i'),\n name: 'datenoday',\n callback: function callback(match, month, year) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n dateNoDayRev: {\n regex: RegExp('^' + reYear4 + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenodayrev',\n callback: function callback(match, year, month) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n pgTextShort: {\n regex: RegExp('^(' + reMonthAbbr + ')-' + reDaylz + '-' + reYear, 'i'),\n name: 'pgtextshort',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoYear: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]*', 'i'),\n name: 'datenoyear',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n dateNoYearRev: {\n regex: RegExp('^' + reDay + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenoyearrev',\n callback: function callback(match, day, month) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n isoWeekDay: {\n regex: RegExp('^' + reYear4 + '-?W' + reWeekOfYear + '(?:-?([0-7]))?'),\n name: 'isoweekday | isoweek',\n callback: function callback(match, year, week, day) {\n day = day ? +day : 1;\n\n if (!this.ymd(+year, 0, 1)) {\n return false;\n }\n\n // get day of week for Jan 1st\n var dayOfWeek = new Date(this.y, this.m, this.d).getDay();\n\n // and use the day to figure out the offset for day 1 of week 1\n dayOfWeek = 0 - (dayOfWeek > 4 ? dayOfWeek - 7 : dayOfWeek);\n\n this.rd += dayOfWeek + (week - 1) * 7 + day;\n }\n },\n\n relativeText: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reReltextunit + ')', 'i'),\n name: 'relativetext',\n callback: function callback(match, relValue, relUnit) {\n // todo: implement handling of 'this time-unit'\n // eslint-disable-next-line no-unused-vars\n var _lookupRelative = lookupRelative(relValue),\n amount = _lookupRelative.amount,\n behavior = _lookupRelative.behavior;\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n relative: {\n regex: RegExp('^([+-]*)[ \\\\t]*(\\\\d+)' + reSpaceOpt + '(' + reReltextunit + '|week)', 'i'),\n name: 'relative',\n callback: function callback(match, signs, relValue, relUnit) {\n var minuses = signs.replace(/[^-]/g, '').length;\n\n var amount = +relValue * Math.pow(-1, minuses);\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n dayText: {\n regex: RegExp('^(' + reDaytext + ')', 'i'),\n name: 'daytext',\n callback: function callback(match, dayText) {\n this.resetTime();\n this.weekday = lookupWeekday(dayText, 0);\n\n if (this.weekdayBehavior !== 2) {\n this.weekdayBehavior = 1;\n }\n }\n },\n\n relativeTextWeek: {\n regex: RegExp('^(' + reReltexttext + ')' + reSpace + 'week', 'i'),\n name: 'relativetextweek',\n callback: function callback(match, relText) {\n this.weekdayBehavior = 2;\n\n switch (relText.toLowerCase()) {\n case 'this':\n this.rd += 0;\n break;\n case 'next':\n this.rd += 7;\n break;\n case 'last':\n case 'previous':\n this.rd -= 7;\n break;\n }\n\n if (isNaN(this.weekday)) {\n this.weekday = 1;\n }\n }\n },\n\n monthFullOrMonthAbbr: {\n regex: RegExp('^(' + reMonthFull + '|' + reMonthAbbr + ')', 'i'),\n name: 'monthfull | monthabbr',\n callback: function callback(match, month) {\n return this.ymd(this.y, lookupMonth(month), this.d);\n }\n },\n\n tzCorrection: {\n regex: RegExp('^' + reTzCorrection, 'i'),\n name: 'tzcorrection',\n callback: function callback(tzCorrection) {\n return this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n ago: {\n regex: /^ago/i,\n name: 'ago',\n callback: function callback() {\n this.ry = -this.ry;\n this.rm = -this.rm;\n this.rd = -this.rd;\n this.rh = -this.rh;\n this.ri = -this.ri;\n this.rs = -this.rs;\n this.rf = -this.rf;\n }\n },\n\n gnuNoColon2: {\n // second instance of gnunocolon, without leading 't'\n // it's down here, because it is very generic (4 digits in a row)\n // thus conflicts with many rules above\n // only year4 should come afterwards\n regex: RegExp('^' + reHour24lz + reMinutelz, 'i'),\n name: 'gnunocolon',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, this.f);\n }\n },\n\n year4: {\n regex: RegExp('^' + reYear4),\n name: 'year4',\n callback: function callback(match, year) {\n this.y = +year;\n return true;\n }\n },\n\n whitespace: {\n regex: /^[ .,\\t]+/,\n name: 'whitespace'\n // do nothing\n },\n\n any: {\n regex: /^[\\s\\S]+/,\n name: 'any',\n callback: function callback() {\n return false;\n }\n }\n};\n\nvar resultProto = {\n // date\n y: NaN,\n m: NaN,\n d: NaN,\n // time\n h: NaN,\n i: NaN,\n s: NaN,\n f: NaN,\n\n // relative shifts\n ry: 0,\n rm: 0,\n rd: 0,\n rh: 0,\n ri: 0,\n rs: 0,\n rf: 0,\n\n // weekday related shifts\n weekday: NaN,\n weekdayBehavior: 0,\n\n // first or last day of month\n // 0 none, 1 first, -1 last\n firstOrLastDayOfMonth: 0,\n\n // timezone correction in minutes\n z: NaN,\n\n // counters\n dates: 0,\n times: 0,\n zones: 0,\n\n // helper functions\n ymd: function ymd(y, m, d) {\n if (this.dates > 0) {\n return false;\n }\n\n this.dates++;\n this.y = y;\n this.m = m;\n this.d = d;\n return true;\n },\n time: function time(h, i, s, f) {\n if (this.times > 0) {\n return false;\n }\n\n this.times++;\n this.h = h;\n this.i = i;\n this.s = s;\n this.f = f;\n\n return true;\n },\n resetTime: function resetTime() {\n this.h = 0;\n this.i = 0;\n this.s = 0;\n this.f = 0;\n this.times = 0;\n\n return true;\n },\n zone: function zone(minutes) {\n if (this.zones <= 1) {\n this.zones++;\n this.z = minutes;\n return true;\n }\n\n return false;\n },\n toDate: function toDate(relativeTo) {\n if (this.dates && !this.times) {\n this.h = this.i = this.s = this.f = 0;\n }\n\n // fill holes\n if (isNaN(this.y)) {\n this.y = relativeTo.getFullYear();\n }\n\n if (isNaN(this.m)) {\n this.m = relativeTo.getMonth();\n }\n\n if (isNaN(this.d)) {\n this.d = relativeTo.getDate();\n }\n\n if (isNaN(this.h)) {\n this.h = relativeTo.getHours();\n }\n\n if (isNaN(this.i)) {\n this.i = relativeTo.getMinutes();\n }\n\n if (isNaN(this.s)) {\n this.s = relativeTo.getSeconds();\n }\n\n if (isNaN(this.f)) {\n this.f = relativeTo.getMilliseconds();\n }\n\n // adjust special early\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n this.d = 1;\n break;\n case -1:\n this.d = 0;\n this.m += 1;\n break;\n }\n\n if (!isNaN(this.weekday)) {\n var date = new Date(relativeTo.getTime());\n date.setFullYear(this.y, this.m, this.d);\n date.setHours(this.h, this.i, this.s, this.f);\n\n var dow = date.getDay();\n\n if (this.weekdayBehavior === 2) {\n // To make \"this week\" work, where the current day of week is a \"sunday\"\n if (dow === 0 && this.weekday !== 0) {\n this.weekday = -6;\n }\n\n // To make \"sunday this week\" work, where the current day of week is not a \"sunday\"\n if (this.weekday === 0 && dow !== 0) {\n this.weekday = 7;\n }\n\n this.d -= dow;\n this.d += this.weekday;\n } else {\n var diff = this.weekday - dow;\n\n // some PHP magic\n if (this.rd < 0 && diff < 0 || this.rd >= 0 && diff <= -this.weekdayBehavior) {\n diff += 7;\n }\n\n if (this.weekday >= 0) {\n this.d += diff;\n } else {\n this.d -= 7 - (Math.abs(this.weekday) - dow);\n }\n\n this.weekday = NaN;\n }\n }\n\n // adjust relative\n this.y += this.ry;\n this.m += this.rm;\n this.d += this.rd;\n\n this.h += this.rh;\n this.i += this.ri;\n this.s += this.rs;\n this.f += this.rf;\n\n this.ry = this.rm = this.rd = 0;\n this.rh = this.ri = this.rs = this.rf = 0;\n\n var result = new Date(relativeTo.getTime());\n // since Date constructor treats years <= 99 as 1900+\n // it can't be used, thus this weird way\n result.setFullYear(this.y, this.m, this.d);\n result.setHours(this.h, this.i, this.s, this.f);\n\n // note: this is done twice in PHP\n // early when processing special relatives\n // and late\n // todo: check if the logic can be reduced\n // to just one time action\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n result.setDate(1);\n break;\n case -1:\n result.setMonth(result.getMonth() + 1, 0);\n break;\n }\n\n // adjust timezone\n if (!isNaN(this.z) && result.getTimezoneOffset() !== this.z) {\n result.setUTCFullYear(result.getFullYear(), result.getMonth(), result.getDate());\n\n result.setUTCHours(result.getHours(), result.getMinutes() + this.z, result.getSeconds(), result.getMilliseconds());\n }\n\n return result;\n }\n};\n\nmodule.exports = function strtotime(str, now) {\n // discuss at: http://locutus.io/php/strtotime/\n // original by: Caio Ariede (http://caioariede.com)\n // improved by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Caio Ariede (http://caioariede.com)\n // improved by: A. Matías Quezada (http://amatiasq.com)\n // improved by: preuter\n // improved by: Brett Zamir (http://brett-zamir.me)\n // improved by: Mirko Faber\n // input by: David\n // bugfixed by: Wagner B. Soares\n // bugfixed by: Artur Tchernychev\n // bugfixed by: Stephan Bösch-Plepelits (http://github.com/plepe)\n // reimplemented by: Rafał Kukawski\n // note 1: Examples all have a fixed timestamp to prevent\n // note 1: tests to fail because of variable time(zones)\n // example 1: strtotime('+1 day', 1129633200)\n // returns 1: 1129719600\n // example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200)\n // returns 2: 1130425202\n // example 3: strtotime('last month', 1129633200)\n // returns 3: 1127041200\n // example 4: strtotime('2009-05-04 08:30:00+00')\n // returns 4: 1241425800\n // example 5: strtotime('2009-05-04 08:30:00+02:00')\n // returns 5: 1241418600\n if (now == null) {\n now = Math.floor(Date.now() / 1000);\n }\n\n // the rule order is very fragile\n // as many formats are similar to others\n // so small change can cause\n // input misinterpretation\n var rules = [formats.yesterday, formats.now, formats.noon, formats.midnightOrToday, formats.tomorrow, formats.timestamp, formats.firstOrLastDay, formats.backOrFrontOf,\n // formats.weekdayOf, // not yet implemented\n formats.mssqltime, formats.timeLong12, formats.timeShort12, formats.timeTiny12, formats.soap, formats.wddx, formats.exif, formats.xmlRpc, formats.xmlRpcNoColon, formats.clf, formats.iso8601long, formats.dateTextual, formats.pointedDate4, formats.pointedDate2, formats.timeLong24, formats.dateNoColon, formats.pgydotd, formats.timeShort24, formats.iso8601noColon,\n // iso8601dateSlash needs to come before dateSlash\n formats.iso8601dateSlash, formats.dateSlash, formats.american, formats.americanShort, formats.gnuDateShortOrIso8601date2, formats.iso8601date4, formats.gnuNoColon, formats.gnuDateShorter, formats.pgTextReverse, formats.dateFull, formats.dateNoDay, formats.dateNoDayRev, formats.pgTextShort, formats.dateNoYear, formats.dateNoYearRev, formats.isoWeekDay, formats.relativeText, formats.relative, formats.dayText, formats.relativeTextWeek, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.ago, formats.gnuNoColon2, formats.year4,\n // note: the two rules below\n // should always come last\n formats.whitespace, formats.any];\n\n var result = Object.create(resultProto);\n\n while (str.length) {\n for (var i = 0, l = rules.length; i < l; i++) {\n var format = rules[i];\n\n var match = str.match(format.regex);\n\n if (match) {\n // care only about false results. Ignore other values\n if (format.callback && format.callback.apply(result, match) === false) {\n return false;\n }\n\n str = str.substr(match[0].length);\n break;\n }\n }\n }\n\n return Math.floor(result.toDate(new Date(now * 1000)) / 1000);\n};\n//# sourceMappingURL=strtotime.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/info/ini_get.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/locutus/php/info/ini_get.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nmodule.exports = function ini_get(varname) {\n // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/ini_get/\n // original by: Brett Zamir (http://brett-zamir.me)\n // note 1: The ini values must be set by ini_set or manually within an ini file\n // example 1: ini_set('date.timezone', 'Asia/Hong_Kong')\n // example 1: ini_get('date.timezone')\n // returns 1: 'Asia/Hong_Kong'\n\n var $global = typeof window !== 'undefined' ? window : global;\n $global.$locutus = $global.$locutus || {};\n var $locutus = $global.$locutus;\n $locutus.php = $locutus.php || {};\n $locutus.php.ini = $locutus.php.ini || {};\n\n if ($locutus.php.ini[varname] && $locutus.php.ini[varname].local_value !== undefined) {\n if ($locutus.php.ini[varname].local_value === null) {\n return '';\n }\n return $locutus.php.ini[varname].local_value;\n }\n\n return '';\n};\n//# sourceMappingURL=ini_get.js.map\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/strings/strlen.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/strings/strlen.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function strlen(string) {\n // discuss at: http://locutus.io/php/strlen/\n // original by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Sakimori\n // improved by: Kevin van Zonneveld (http://kvz.io)\n // input by: Kirk Strobeck\n // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)\n // revised by: Brett Zamir (http://brett-zamir.me)\n // note 1: May look like overkill, but in order to be truly faithful to handling all Unicode\n // note 1: characters and to this function in PHP which does not count the number of bytes\n // note 1: but counts the number of characters, something like this is really necessary.\n // example 1: strlen('Kevin van Zonneveld')\n // returns 1: 19\n // example 2: ini_set('unicode.semantics', 'on')\n // example 2: strlen('A\\ud87e\\udc04Z')\n // returns 2: 3\n\n var str = string + '';\n\n var iniVal = ( true ? __webpack_require__(/*! ../info/ini_get */ \"./node_modules/locutus/php/info/ini_get.js\")('unicode.semantics') : undefined) || 'off';\n if (iniVal === 'off') {\n return str.length;\n }\n\n var i = 0;\n var lgth = 0;\n\n var getWholeChar = function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n var next = '';\n var prev = '';\n if (code >= 0xD800 && code <= 0xDBFF) {\n // High surrogate (could change last hex to 0xDB7F to\n // treat high private surrogates as single characters)\n if (str.length <= i + 1) {\n throw new Error('High surrogate without following low surrogate');\n }\n next = str.charCodeAt(i + 1);\n if (next < 0xDC00 || next > 0xDFFF) {\n throw new Error('High surrogate without following low surrogate');\n }\n return str.charAt(i) + str.charAt(i + 1);\n } else if (code >= 0xDC00 && code <= 0xDFFF) {\n // Low surrogate\n if (i === 0) {\n throw new Error('Low surrogate without preceding high surrogate');\n }\n prev = str.charCodeAt(i - 1);\n if (prev < 0xD800 || prev > 0xDBFF) {\n // (could change last hex to 0xDB7F to treat high private surrogates\n // as single characters)\n throw new Error('Low surrogate without preceding high surrogate');\n }\n // We can pass over low surrogates now as the second\n // component in a pair which we have already processed\n return false;\n }\n return str.charAt(i);\n };\n\n for (i = 0, lgth = 0; i < str.length; i++) {\n if (getWholeChar(str, i) === false) {\n continue;\n }\n // Adapt this line at the top of any loop, passing in the whole string and\n // the current iteration and returning a variable to represent the individual character;\n // purpose is to treat the first part of a surrogate pair as the whole character and then\n // ignore the second part\n lgth++;\n }\n\n return lgth;\n};\n//# sourceMappingURL=strlen.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/var/is_numeric.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/var/is_numeric.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function is_numeric(mixedVar) {\n // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/is_numeric/\n // original by: Kevin van Zonneveld (http://kvz.io)\n // improved by: David\n // improved by: taith\n // bugfixed by: Tim de Koning\n // bugfixed by: WebDevHobo (http://webdevhobo.blogspot.com/)\n // bugfixed by: Brett Zamir (http://brett-zamir.me)\n // bugfixed by: Denis Chenu (http://shnoulle.net)\n // example 1: is_numeric(186.31)\n // returns 1: true\n // example 2: is_numeric('Kevin van Zonneveld')\n // returns 2: false\n // example 3: is_numeric(' +186.31e2')\n // returns 3: true\n // example 4: is_numeric('')\n // returns 4: false\n // example 5: is_numeric([])\n // returns 5: false\n // example 6: is_numeric('1 ')\n // returns 6: false\n\n var whitespace = [' ', '\\n', '\\r', '\\t', '\\f', '\\x0b', '\\xa0', '\\u2000', '\\u2001', '\\u2002', '\\u2003', '\\u2004', '\\u2005', '\\u2006', '\\u2007', '\\u2008', '\\u2009', '\\u200A', '\\u200B', '\\u2028', '\\u2029', '\\u3000'].join('');\n\n // @todo: Break this up using many single conditions with early returns\n return (typeof mixedVar === 'number' || typeof mixedVar === 'string' && whitespace.indexOf(mixedVar.slice(-1)) === -1) && mixedVar !== '' && !isNaN(mixedVar);\n};\n//# sourceMappingURL=is_numeric.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"./resources/assets/js/helpers.js\":\n/*!****************************************!*\\\n !*** ./resources/assets/js/helpers.js ***!\n \\****************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! locutus/php/strings/strlen */ \"./node_modules/locutus/php/strings/strlen.js\");\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! locutus/php/array/array_diff */ \"./node_modules/locutus/php/array/array_diff.js\");\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! locutus/php/datetime/strtotime */ \"./node_modules/locutus/php/datetime/strtotime.js\");\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! locutus/php/var/is_numeric */ \"./node_modules/locutus/php/var/is_numeric.js\");\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__);\n/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n\n\n\n$.extend(true, laravelValidation, {\n helpers: {\n /**\n * Numeric rules\n */\n numericRules: ['Integer', 'Numeric'],\n\n /**\n * Gets the file information from file input.\n *\n * @param fieldObj\n * @param index\n * @returns {{file: *, extension: string, size: number}}\n */\n fileinfo: function (fieldObj, index) {\n var FileName = fieldObj.value;\n index = typeof index !== 'undefined' ? index : 0;\n\n if (fieldObj.files !== null) {\n if (typeof fieldObj.files[index] !== 'undefined') {\n return {\n file: FileName,\n extension: FileName.substr(FileName.lastIndexOf('.') + 1),\n size: fieldObj.files[index].size / 1024,\n type: fieldObj.files[index].type\n };\n }\n }\n\n return false;\n },\n\n /**\n * Gets the selectors for th specified field names.\n *\n * @param names\n * @returns {string}\n */\n selector: function (names) {\n var selector = [];\n\n if (!this.isArray(names)) {\n names = [names];\n }\n\n for (var i = 0; i < names.length; i++) {\n selector.push(\"[name='\" + names[i] + \"']\");\n }\n\n return selector.join();\n },\n\n /**\n * Check if element has numeric rules.\n *\n * @param element\n * @returns {boolean}\n */\n hasNumericRules: function (element) {\n return this.hasRules(element, this.numericRules);\n },\n\n /**\n * Check if element has passed rules.\n *\n * @param element\n * @param rules\n * @returns {boolean}\n */\n hasRules: function (element, rules) {\n var found = false;\n\n if (typeof rules === 'string') {\n rules = [rules];\n }\n\n var validator = $.data(element.form, \"validator\");\n var listRules = [];\n var cache = validator.arrayRulesCache;\n\n if (element.name in cache) {\n $.each(cache[element.name], function (index, arrayRule) {\n listRules.push(arrayRule);\n });\n }\n\n if (element.name in validator.settings.rules) {\n listRules.push(validator.settings.rules[element.name]);\n }\n\n $.each(listRules, function (index, objRules) {\n if ('laravelValidation' in objRules) {\n var _rules = objRules.laravelValidation;\n\n for (var i = 0; i < _rules.length; i++) {\n if ($.inArray(_rules[i][0], rules) !== -1) {\n found = true;\n return false;\n }\n }\n }\n });\n return found;\n },\n\n /**\n * Return the string length using PHP function.\n * http://php.net/manual/en/function.strlen.php\n * http://phpjs.org/functions/strlen/\n *\n * @param string\n */\n strlen: function (string) {\n return locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default()(string);\n },\n\n /**\n * Get the size of the object depending of his type.\n *\n * @param obj\n * @param element\n * @param value\n * @returns int\n */\n getSize: function getSize(obj, element, value) {\n if (this.hasNumericRules(element) && this.is_numeric(value)) {\n return parseFloat(value);\n } else if (this.isArray(value)) {\n return parseFloat(value.length);\n } else if (element.type === 'file') {\n return parseFloat(Math.floor(this.fileinfo(element).size));\n }\n\n return parseFloat(this.strlen(value));\n },\n\n /**\n * Return specified rule from element.\n *\n * @param rule\n * @param element\n * @returns object\n */\n getLaravelValidation: function (rule, element) {\n var found = undefined;\n $.each($.validator.staticRules(element), function (key, rules) {\n if (key === \"laravelValidation\") {\n $.each(rules, function (i, value) {\n if (value[0] === rule) {\n found = value;\n }\n });\n }\n });\n return found;\n },\n\n /**\n * Return he timestamp of value passed using format or default format in element.\n *\n * @param value\n * @param format\n * @returns {boolean|int}\n */\n parseTime: function (value, format) {\n var timeValue = false;\n var fmt = new DateFormatter();\n\n if (typeof format === 'object') {\n var dateRule = this.getLaravelValidation('DateFormat', format);\n\n if (dateRule !== undefined) {\n format = dateRule[1][0];\n } else {\n format = null;\n }\n }\n\n if (format == null) {\n timeValue = this.strtotime(value);\n } else {\n timeValue = fmt.parseDate(value, format);\n\n if (timeValue) {\n timeValue = Math.round(timeValue.getTime() / 1000);\n }\n }\n\n return timeValue;\n },\n\n /**\n * Compare a given date against another using an operator.\n *\n * @param validator\n * @param value\n * @param element\n * @param params\n * @param operator\n * @return {boolean}\n */\n compareDates: function (validator, value, element, params, operator) {\n var timeCompare = parseFloat(params);\n\n if (isNaN(timeCompare)) {\n var target = this.dependentElement(validator, element, params);\n\n if (target === undefined) {\n return false;\n }\n\n timeCompare = this.parseTime(validator.elementValue(target), target);\n }\n\n var timeValue = this.parseTime(value, element);\n\n if (timeValue === false) {\n return false;\n }\n\n switch (operator) {\n case '<':\n return timeValue < timeCompare;\n\n case '<=':\n return timeValue <= timeCompare;\n\n case '==':\n case '===':\n return timeValue === timeCompare;\n\n case '>':\n return timeValue > timeCompare;\n\n case '>=':\n return timeValue >= timeCompare;\n\n default:\n throw new Error('Unsupported operator.');\n }\n },\n\n /**\n * This method allows you to intelligently guess the date by closely matching the specific format.\n *\n * @param value\n * @param format\n * @returns {Date}\n */\n guessDate: function (value, format) {\n var fmt = new DateFormatter();\n return fmt.guessDate(value, format);\n },\n\n /**\n * Returns Unix timestamp based on PHP function strototime.\n * http://php.net/manual/es/function.strtotime.php\n * http://phpjs.org/functions/strtotime/\n *\n * @param text\n * @param now\n * @returns {*}\n */\n strtotime: function (text, now) {\n return locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default()(text, now);\n },\n\n /**\n * Returns if value is numeric.\n * http://php.net/manual/es/var.is_numeric.php\n * http://phpjs.org/functions/is_numeric/\n *\n * @param mixed_var\n * @returns {*}\n */\n is_numeric: function (mixed_var) {\n return locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default()(mixed_var);\n },\n\n /**\n * Check whether the argument is of type Array.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray#Polyfill\n *\n * @param arg\n * @returns {boolean}\n */\n isArray: function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n },\n\n /**\n * Returns Array diff based on PHP function array_diff.\n * http://php.net/manual/es/function.array_diff.php\n * http://phpjs.org/functions/array_diff/\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayDiff: function (arr1, arr2) {\n return locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default()(arr1, arr2);\n },\n\n /**\n * Check whether two arrays are equal to one another.\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayEquals: function (arr1, arr2) {\n if (!this.isArray(arr1) || !this.isArray(arr2)) {\n return false;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n return $.isEmptyObject(this.arrayDiff(arr1, arr2));\n },\n\n /**\n * Makes element dependant from other.\n *\n * @param validator\n * @param element\n * @param name\n * @returns {*}\n */\n dependentElement: function (validator, element, name) {\n var el = validator.findByName(name);\n\n if (el[0] !== undefined && validator.settings.onfocusout) {\n var event = 'blur';\n\n if (el[0].tagName === 'SELECT' || el[0].tagName === 'OPTION' || el[0].type === 'checkbox' || el[0].type === 'radio') {\n event = 'click';\n }\n\n var ruleName = '.validate-laravelValidation';\n el.off(ruleName).off(event + ruleName + '-' + element.name).on(event + ruleName + '-' + element.name, function () {\n $(element).valid();\n });\n }\n\n return el[0];\n },\n\n /**\n * Parses error Ajax response and gets the message.\n *\n * @param response\n * @returns {string[]}\n */\n parseErrorResponse: function (response) {\n var newResponse = ['Whoops, looks like something went wrong.'];\n\n if ('responseText' in response) {\n var errorMsg = response.responseText.match(/(.*)<\\/h1\\s*>/i);\n\n if (this.isArray(errorMsg)) {\n newResponse = [errorMsg[1]];\n }\n }\n\n return newResponse;\n },\n\n /**\n * Escape string to use as Regular Expression.\n *\n * @param str\n * @returns string\n */\n escapeRegExp: function (str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n\n /**\n * Generate RegExp from wildcard attributes.\n *\n * @param name\n * @returns {RegExp}\n */\n regexFromWildcard: function (name) {\n var nameParts = name.split(\"[*]\");\n\n if (nameParts.length === 1) {\n nameParts.push('');\n }\n\n var regexpParts = nameParts.map(function (currentValue, index) {\n if (index % 2 === 0) {\n currentValue = currentValue + '[';\n } else {\n currentValue = ']' + currentValue;\n }\n\n return laravelValidation.helpers.escapeRegExp(currentValue);\n });\n return new RegExp('^' + regexpParts.join('[^\\\\]]*') + '$');\n },\n\n /**\n * Merge additional laravel validation rules into the current rule set.\n *\n * @param {object} rules\n * @param {object} newRules\n * @returns {object}\n */\n mergeRules: function (rules, newRules) {\n var rulesList = {\n 'laravelValidation': newRules.laravelValidation || [],\n 'laravelValidationRemote': newRules.laravelValidationRemote || []\n };\n\n for (var key in rulesList) {\n if (rulesList[key].length === 0) {\n continue;\n }\n\n if (typeof rules[key] === \"undefined\") {\n rules[key] = [];\n }\n\n rules[key] = rules[key].concat(rulesList[key]);\n }\n\n return rules;\n }\n }\n});\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2RhdGV0aW1lL3N0cnRvdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvaW5mby9pbmlfZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2N1dHVzL3BocC9zdHJpbmdzL3N0cmxlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiJCIsImV4dGVuZCIsImxhcmF2ZWxWYWxpZGF0aW9uIiwiaGVscGVycyIsIm51bWVyaWNSdWxlcyIsImZpbGVpbmZvIiwiZmllbGRPYmoiLCJpbmRleCIsIkZpbGVOYW1lIiwidmFsdWUiLCJmaWxlcyIsImZpbGUiLCJleHRlbnNpb24iLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInNpemUiLCJ0eXBlIiwic2VsZWN0b3IiLCJuYW1lcyIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iLCJoYXNOdW1lcmljUnVsZXMiLCJlbGVtZW50IiwiaGFzUnVsZXMiLCJydWxlcyIsImZvdW5kIiwidmFsaWRhdG9yIiwiZGF0YSIsImZvcm0iLCJsaXN0UnVsZXMiLCJjYWNoZSIsImFycmF5UnVsZXNDYWNoZSIsIm5hbWUiLCJlYWNoIiwiYXJyYXlSdWxlIiwic2V0dGluZ3MiLCJvYmpSdWxlcyIsIl9ydWxlcyIsImluQXJyYXkiLCJzdHJsZW4iLCJzdHJpbmciLCJnZXRTaXplIiwib2JqIiwiaXNfbnVtZXJpYyIsInBhcnNlRmxvYXQiLCJNYXRoIiwiZmxvb3IiLCJnZXRMYXJhdmVsVmFsaWRhdGlvbiIsInJ1bGUiLCJ1bmRlZmluZWQiLCJzdGF0aWNSdWxlcyIsImtleSIsInBhcnNlVGltZSIsImZvcm1hdCIsInRpbWVWYWx1ZSIsImZtdCIsIkRhdGVGb3JtYXR0ZXIiLCJkYXRlUnVsZSIsInN0cnRvdGltZSIsInBhcnNlRGF0ZSIsInJvdW5kIiwiZ2V0VGltZSIsImNvbXBhcmVEYXRlcyIsInBhcmFtcyIsIm9wZXJhdG9yIiwidGltZUNvbXBhcmUiLCJpc05hTiIsInRhcmdldCIsImRlcGVuZGVudEVsZW1lbnQiLCJlbGVtZW50VmFsdWUiLCJFcnJvciIsImd1ZXNzRGF0ZSIsInRleHQiLCJub3ciLCJtaXhlZF92YXIiLCJhcmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJhcnJheURpZmYiLCJhcnIxIiwiYXJyMiIsImFycmF5X2RpZmYiLCJhcnJheUVxdWFscyIsImlzRW1wdHlPYmplY3QiLCJlbCIsImZpbmRCeU5hbWUiLCJvbmZvY3Vzb3V0IiwiZXZlbnQiLCJ0YWdOYW1lIiwicnVsZU5hbWUiLCJvZmYiLCJvbiIsInZhbGlkIiwicGFyc2VFcnJvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJuZXdSZXNwb25zZSIsImVycm9yTXNnIiwicmVzcG9uc2VUZXh0IiwibWF0Y2giLCJlc2NhcGVSZWdFeHAiLCJzdHIiLCJyZXBsYWNlIiwicmVnZXhGcm9tV2lsZGNhcmQiLCJuYW1lUGFydHMiLCJzcGxpdCIsInJlZ2V4cFBhcnRzIiwibWFwIiwiY3VycmVudFZhbHVlIiwiUmVnRXhwIiwibWVyZ2VSdWxlcyIsIm5ld1J1bGVzIiwicnVsZXNMaXN0IiwibGFyYXZlbFZhbGlkYXRpb25SZW1vdGUiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNsQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixFQUFFO0FBQ3hCLHNCQUFzQixFQUFFO0FBQ3hCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3REFBd0QsSUFBSTtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixJQUFJO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQzs7Ozs7Ozs7Ozs7O0FDM2pDQSw4Q0FBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQzFCYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsS0FBOEIsR0FBRyxtQkFBTyxDQUFDLG1FQUFpQix5QkFBeUIsU0FBUztBQUM1RztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDOzs7Ozs7Ozs7Ozs7QUMzRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0M7Ozs7Ozs7Ozs7O0FDOUJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7OztBQ25CQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBRUFBLENBQUMsQ0FBQ0MsTUFBRixDQUFTLElBQVQsRUFBZUMsaUJBQWYsRUFBa0M7QUFFOUJDLFNBQU8sRUFBRTtBQUVMOzs7QUFHQUMsZ0JBQVksRUFBRSxDQUFDLFNBQUQsRUFBWSxTQUFaLENBTFQ7O0FBT0w7Ozs7Ozs7QUFPQUMsWUFBUSxFQUFFLFVBQVVDLFFBQVYsRUFBb0JDLEtBQXBCLEVBQTJCO0FBQ2pDLFVBQUlDLFFBQVEsR0FBR0YsUUFBUSxDQUFDRyxLQUF4QjtBQUNBRixXQUFLLEdBQUcsT0FBT0EsS0FBUCxLQUFpQixXQUFqQixHQUErQkEsS0FBL0IsR0FBdUMsQ0FBL0M7O0FBQ0EsVUFBS0QsUUFBUSxDQUFDSSxLQUFULEtBQW1CLElBQXhCLEVBQStCO0FBQzNCLFlBQUksT0FBT0osUUFBUSxDQUFDSSxLQUFULENBQWVILEtBQWYsQ0FBUCxLQUFpQyxXQUFyQyxFQUFrRDtBQUM5QyxpQkFBTztBQUNISSxnQkFBSSxFQUFFSCxRQURIO0FBRUhJLHFCQUFTLEVBQUVKLFFBQVEsQ0FBQ0ssTUFBVCxDQUFnQkwsUUFBUSxDQUFDTSxXQUFULENBQXFCLEdBQXJCLElBQTRCLENBQTVDLENBRlI7QUFHSEMsZ0JBQUksRUFBRVQsUUFBUSxDQUFDSSxLQUFULENBQWVILEtBQWYsRUFBc0JRLElBQXRCLEdBQTZCLElBSGhDO0FBSUhDLGdCQUFJLEVBQUVWLFFBQVEsQ0FBQ0ksS0FBVCxDQUFlSCxLQUFmLEVBQXNCUztBQUp6QixXQUFQO0FBTUg7QUFDSjs7QUFDRCxhQUFPLEtBQVA7QUFDSCxLQTVCSTs7QUErQkw7Ozs7OztBQU1BQyxZQUFRLEVBQUUsVUFBVUMsS0FBVixFQUFpQjtBQUN2QixVQUFJRCxRQUFRLEdBQUcsRUFBZjs7QUFDQSxVQUFJLENBQUUsS0FBS0UsT0FBTCxDQUFhRCxLQUFiLENBQU4sRUFBNEI7QUFDeEJBLGFBQUssR0FBRyxDQUFDQSxLQUFELENBQVI7QUFDSDs7QUFDRCxXQUFLLElBQUlFLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLEtBQUssQ0FBQ0csTUFBMUIsRUFBa0NELENBQUMsRUFBbkMsRUFBdUM7QUFDbkNILGdCQUFRLENBQUNLLElBQVQsQ0FBYyxZQUFZSixLQUFLLENBQUNFLENBQUQsQ0FBakIsR0FBdUIsSUFBckM7QUFDSDs7QUFDRCxhQUFPSCxRQUFRLENBQUNNLElBQVQsRUFBUDtBQUNILEtBOUNJOztBQWlETDs7Ozs7O0FBTUFDLG1CQUFlLEVBQUUsVUFBVUMsT0FBVixFQUFtQjtBQUNoQyxhQUFPLEtBQUtDLFFBQUwsQ0FBY0QsT0FBZCxFQUF1QixLQUFLckIsWUFBNUIsQ0FBUDtBQUNILEtBekRJOztBQTJETDs7Ozs7OztBQU9Bc0IsWUFBUSxFQUFFLFVBQVVELE9BQVYsRUFBbUJFLEtBQW5CLEVBQTBCO0FBRWhDLFVBQUlDLEtBQUssR0FBRyxLQUFaOztBQUNBLFVBQUksT0FBT0QsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUMzQkEsYUFBSyxHQUFHLENBQUNBLEtBQUQsQ0FBUjtBQUNIOztBQUVELFVBQUlFLFNBQVMsR0FBRzdCLENBQUMsQ0FBQzhCLElBQUYsQ0FBT0wsT0FBTyxDQUFDTSxJQUFmLEVBQXFCLFdBQXJCLENBQWhCO0FBQ0EsVUFBSUMsU0FBUyxHQUFHLEVBQWhCO0FBQ0EsVUFBSUMsS0FBSyxHQUFHSixTQUFTLENBQUNLLGVBQXRCOztBQUNBLFVBQUlULE9BQU8sQ0FBQ1UsSUFBUixJQUFnQkYsS0FBcEIsRUFBMkI7QUFDdkJqQyxTQUFDLENBQUNvQyxJQUFGLENBQU9ILEtBQUssQ0FBQ1IsT0FBTyxDQUFDVSxJQUFULENBQVosRUFBNEIsVUFBVTVCLEtBQVYsRUFBaUI4QixTQUFqQixFQUE0QjtBQUNwREwsbUJBQVMsQ0FBQ1YsSUFBVixDQUFlZSxTQUFmO0FBQ0gsU0FGRDtBQUdIOztBQUNELFVBQUlaLE9BQU8sQ0FBQ1UsSUFBUixJQUFnQk4sU0FBUyxDQUFDUyxRQUFWLENBQW1CWCxLQUF2QyxFQUE4QztBQUMxQ0ssaUJBQVMsQ0FBQ1YsSUFBVixDQUFlTyxTQUFTLENBQUNTLFFBQVYsQ0FBbUJYLEtBQW5CLENBQXlCRixPQUFPLENBQUNVLElBQWpDLENBQWY7QUFDSDs7QUFDRG5DLE9BQUMsQ0FBQ29DLElBQUYsQ0FBT0osU0FBUCxFQUFrQixVQUFTekIsS0FBVCxFQUFlZ0MsUUFBZixFQUF3QjtBQUN0QyxZQUFJLHVCQUF1QkEsUUFBM0IsRUFBcUM7QUFDakMsY0FBSUMsTUFBTSxHQUFDRCxRQUFRLENBQUNyQyxpQkFBcEI7O0FBQ0EsZUFBSyxJQUFJa0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29CLE1BQU0sQ0FBQ25CLE1BQTNCLEVBQW1DRCxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLGdCQUFJcEIsQ0FBQyxDQUFDeUMsT0FBRixDQUFVRCxNQUFNLENBQUNwQixDQUFELENBQU4sQ0FBVSxDQUFWLENBQVYsRUFBdUJPLEtBQXZCLE1BQWtDLENBQUMsQ0FBdkMsRUFBMEM7QUFDdENDLG1CQUFLLEdBQUcsSUFBUjtBQUNBLHFCQUFPLEtBQVA7QUFDSDtBQUNKO0FBQ0o7QUFDSixPQVZEO0FBWUEsYUFBT0EsS0FBUDtBQUNILEtBakdJOztBQW1HTDs7Ozs7OztBQU9BYyxVQUFNLEVBQUUsVUFBVUMsTUFBVixFQUFrQjtBQUN0QixhQUFPRCxpRUFBTSxDQUFDQyxNQUFELENBQWI7QUFDSCxLQTVHSTs7QUE4R0w7Ozs7Ozs7O0FBUUFDLFdBQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCQyxHQUFqQixFQUFzQnBCLE9BQXRCLEVBQStCaEIsS0FBL0IsRUFBc0M7QUFFM0MsVUFBSSxLQUFLZSxlQUFMLENBQXFCQyxPQUFyQixLQUFpQyxLQUFLcUIsVUFBTCxDQUFnQnJDLEtBQWhCLENBQXJDLEVBQTZEO0FBQ3pELGVBQU9zQyxVQUFVLENBQUN0QyxLQUFELENBQWpCO0FBQ0gsT0FGRCxNQUVPLElBQUksS0FBS1UsT0FBTCxDQUFhVixLQUFiLENBQUosRUFBeUI7QUFDNUIsZUFBT3NDLFVBQVUsQ0FBQ3RDLEtBQUssQ0FBQ1ksTUFBUCxDQUFqQjtBQUNILE9BRk0sTUFFQSxJQUFJSSxPQUFPLENBQUNULElBQVIsS0FBaUIsTUFBckIsRUFBNkI7QUFDaEMsZUFBTytCLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBSzVDLFFBQUwsQ0FBY29CLE9BQWQsRUFBdUJWLElBQWxDLENBQUQsQ0FBakI7QUFDSDs7QUFFRCxhQUFPZ0MsVUFBVSxDQUFDLEtBQUtMLE1BQUwsQ0FBWWpDLEtBQVosQ0FBRCxDQUFqQjtBQUNILEtBaklJOztBQW9JTDs7Ozs7OztBQU9BeUMsd0JBQW9CLEVBQUUsVUFBU0MsSUFBVCxFQUFlMUIsT0FBZixFQUF3QjtBQUUxQyxVQUFJRyxLQUFLLEdBQUd3QixTQUFaO0FBQ0FwRCxPQUFDLENBQUNvQyxJQUFGLENBQU9wQyxDQUFDLENBQUM2QixTQUFGLENBQVl3QixXQUFaLENBQXdCNUIsT0FBeEIsQ0FBUCxFQUF5QyxVQUFTNkIsR0FBVCxFQUFjM0IsS0FBZCxFQUFxQjtBQUMxRCxZQUFJMkIsR0FBRyxLQUFHLG1CQUFWLEVBQStCO0FBQzNCdEQsV0FBQyxDQUFDb0MsSUFBRixDQUFPVCxLQUFQLEVBQWMsVUFBVVAsQ0FBVixFQUFhWCxLQUFiLEVBQW9CO0FBQzlCLGdCQUFJQSxLQUFLLENBQUMsQ0FBRCxDQUFMLEtBQVcwQyxJQUFmLEVBQXFCO0FBQ2pCdkIsbUJBQUssR0FBQ25CLEtBQU47QUFDSDtBQUNKLFdBSkQ7QUFLSDtBQUNKLE9BUkQ7QUFVQSxhQUFPbUIsS0FBUDtBQUNILEtBekpJOztBQTJKTDs7Ozs7OztBQU9BMkIsYUFBUyxFQUFFLFVBQVU5QyxLQUFWLEVBQWlCK0MsTUFBakIsRUFBeUI7QUFFaEMsVUFBSUMsU0FBUyxHQUFHLEtBQWhCO0FBQ0EsVUFBSUMsR0FBRyxHQUFHLElBQUlDLGFBQUosRUFBVjs7QUFFQSxVQUFJLE9BQU9ILE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDNUIsWUFBSUksUUFBUSxHQUFHLEtBQUtWLG9CQUFMLENBQTBCLFlBQTFCLEVBQXdDTSxNQUF4QyxDQUFmOztBQUNBLFlBQUlJLFFBQVEsS0FBS1IsU0FBakIsRUFBNEI7QUFDeEJJLGdCQUFNLEdBQUdJLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWSxDQUFaLENBQVQ7QUFDSCxTQUZELE1BRU87QUFDSEosZ0JBQU0sR0FBRyxJQUFUO0FBQ0g7QUFDSjs7QUFFRCxVQUFJQSxNQUFNLElBQUksSUFBZCxFQUFvQjtBQUNoQkMsaUJBQVMsR0FBRyxLQUFLSSxTQUFMLENBQWVwRCxLQUFmLENBQVo7QUFDSCxPQUZELE1BRU87QUFDSGdELGlCQUFTLEdBQUdDLEdBQUcsQ0FBQ0ksU0FBSixDQUFjckQsS0FBZCxFQUFxQitDLE1BQXJCLENBQVo7O0FBQ0EsWUFBSUMsU0FBSixFQUFlO0FBQ1hBLG1CQUFTLEdBQUdULElBQUksQ0FBQ2UsS0FBTCxDQUFZTixTQUFTLENBQUNPLE9BQVYsS0FBc0IsSUFBbEMsQ0FBWjtBQUNIO0FBQ0o7O0FBRUQsYUFBT1AsU0FBUDtBQUNILEtBMUxJOztBQTRMTDs7Ozs7Ozs7OztBQVVBUSxnQkFBWSxFQUFFLFVBQVVwQyxTQUFWLEVBQXFCcEIsS0FBckIsRUFBNEJnQixPQUE1QixFQUFxQ3lDLE1BQXJDLEVBQTZDQyxRQUE3QyxFQUF1RDtBQUVqRSxVQUFJQyxXQUFXLEdBQUdyQixVQUFVLENBQUNtQixNQUFELENBQTVCOztBQUVBLFVBQUlHLEtBQUssQ0FBQ0QsV0FBRCxDQUFULEVBQXdCO0FBQ3BCLFlBQUlFLE1BQU0sR0FBRyxLQUFLQyxnQkFBTCxDQUFzQjFDLFNBQXRCLEVBQWlDSixPQUFqQyxFQUEwQ3lDLE1BQTFDLENBQWI7O0FBQ0EsWUFBSUksTUFBTSxLQUFLbEIsU0FBZixFQUEwQjtBQUN0QixpQkFBTyxLQUFQO0FBQ0g7O0FBQ0RnQixtQkFBVyxHQUFHLEtBQUtiLFNBQUwsQ0FBZTFCLFNBQVMsQ0FBQzJDLFlBQVYsQ0FBdUJGLE1BQXZCLENBQWYsRUFBK0NBLE1BQS9DLENBQWQ7QUFDSDs7QUFFRCxVQUFJYixTQUFTLEdBQUcsS0FBS0YsU0FBTCxDQUFlOUMsS0FBZixFQUFzQmdCLE9BQXRCLENBQWhCOztBQUNBLFVBQUlnQyxTQUFTLEtBQUssS0FBbEIsRUFBeUI7QUFDckIsZUFBTyxLQUFQO0FBQ0g7O0FBRUQsY0FBUVUsUUFBUjtBQUNJLGFBQUssR0FBTDtBQUNJLGlCQUFPVixTQUFTLEdBQUdXLFdBQW5COztBQUVKLGFBQUssSUFBTDtBQUNJLGlCQUFPWCxTQUFTLElBQUlXLFdBQXBCOztBQUVKLGFBQUssSUFBTDtBQUNBLGFBQUssS0FBTDtBQUNJLGlCQUFPWCxTQUFTLEtBQUtXLFdBQXJCOztBQUVKLGFBQUssR0FBTDtBQUNJLGlCQUFPWCxTQUFTLEdBQUdXLFdBQW5COztBQUVKLGFBQUssSUFBTDtBQUNJLGlCQUFPWCxTQUFTLElBQUlXLFdBQXBCOztBQUVKO0FBQ0ksZ0JBQU0sSUFBSUssS0FBSixDQUFVLHVCQUFWLENBQU47QUFsQlI7QUFvQkgsS0EzT0k7O0FBNk9MOzs7Ozs7O0FBT0FDLGFBQVMsRUFBRSxVQUFVakUsS0FBVixFQUFpQitDLE1BQWpCLEVBQXlCO0FBQ2hDLFVBQUlFLEdBQUcsR0FBRyxJQUFJQyxhQUFKLEVBQVY7QUFDQSxhQUFPRCxHQUFHLENBQUNnQixTQUFKLENBQWNqRSxLQUFkLEVBQXFCK0MsTUFBckIsQ0FBUDtBQUNILEtBdlBJOztBQXlQTDs7Ozs7Ozs7O0FBU0FLLGFBQVMsRUFBRSxVQUFVYyxJQUFWLEVBQWdCQyxHQUFoQixFQUFxQjtBQUM1QixhQUFPZixxRUFBUyxDQUFDYyxJQUFELEVBQU9DLEdBQVAsQ0FBaEI7QUFDSCxLQXBRSTs7QUFzUUw7Ozs7Ozs7O0FBUUE5QixjQUFVLEVBQUUsVUFBVStCLFNBQVYsRUFBcUI7QUFDN0IsYUFBTy9CLGlFQUFVLENBQUMrQixTQUFELENBQWpCO0FBQ0gsS0FoUkk7O0FBa1JMOzs7Ozs7O0FBT0ExRCxXQUFPLEVBQUUsVUFBUzJELEdBQVQsRUFBYztBQUNuQixhQUFPQyxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLFFBQWpCLENBQTBCQyxJQUExQixDQUErQkosR0FBL0IsTUFBd0MsZ0JBQS9DO0FBQ0gsS0EzUkk7O0FBNlJMOzs7Ozs7Ozs7QUFTQUssYUFBUyxFQUFFLFVBQVVDLElBQVYsRUFBZ0JDLElBQWhCLEVBQXNCO0FBQzdCLGFBQU9DLG1FQUFVLENBQUNGLElBQUQsRUFBT0MsSUFBUCxDQUFqQjtBQUNILEtBeFNJOztBQTBTTDs7Ozs7OztBQU9BRSxlQUFXLEVBQUUsVUFBVUgsSUFBVixFQUFnQkMsSUFBaEIsRUFBc0I7QUFDL0IsVUFBSSxDQUFFLEtBQUtsRSxPQUFMLENBQWFpRSxJQUFiLENBQUYsSUFBd0IsQ0FBRSxLQUFLakUsT0FBTCxDQUFha0UsSUFBYixDQUE5QixFQUFrRDtBQUM5QyxlQUFPLEtBQVA7QUFDSDs7QUFFRCxVQUFJRCxJQUFJLENBQUMvRCxNQUFMLEtBQWdCZ0UsSUFBSSxDQUFDaEUsTUFBekIsRUFBaUM7QUFDN0IsZUFBTyxLQUFQO0FBQ0g7O0FBRUQsYUFBT3JCLENBQUMsQ0FBQ3dGLGFBQUYsQ0FBZ0IsS0FBS0wsU0FBTCxDQUFlQyxJQUFmLEVBQXFCQyxJQUFyQixDQUFoQixDQUFQO0FBQ0gsS0EzVEk7O0FBNlRMOzs7Ozs7OztBQVFBZCxvQkFBZ0IsRUFBRSxVQUFTMUMsU0FBVCxFQUFvQkosT0FBcEIsRUFBNkJVLElBQTdCLEVBQW1DO0FBRWpELFVBQUlzRCxFQUFFLEdBQUM1RCxTQUFTLENBQUM2RCxVQUFWLENBQXFCdkQsSUFBckIsQ0FBUDs7QUFFQSxVQUFLc0QsRUFBRSxDQUFDLENBQUQsQ0FBRixLQUFRckMsU0FBUixJQUFzQnZCLFNBQVMsQ0FBQ1MsUUFBVixDQUFtQnFELFVBQTlDLEVBQTJEO0FBQ3ZELFlBQUlDLEtBQUssR0FBRyxNQUFaOztBQUNBLFlBQUlILEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTUksT0FBTixLQUFrQixRQUFsQixJQUNBSixFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU1JLE9BQU4sS0FBa0IsUUFEbEIsSUFFQUosRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNekUsSUFBTixLQUFlLFVBRmYsSUFHQXlFLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTXpFLElBQU4sS0FBZSxPQUhuQixFQUlFO0FBQ0U0RSxlQUFLLEdBQUcsT0FBUjtBQUNIOztBQUVELFlBQUlFLFFBQVEsR0FBRyw2QkFBZjtBQUNBTCxVQUFFLENBQUNNLEdBQUgsQ0FBUUQsUUFBUixFQUNLQyxHQURMLENBQ1NILEtBQUssR0FBR0UsUUFBUixHQUFtQixHQUFuQixHQUF5QnJFLE9BQU8sQ0FBQ1UsSUFEMUMsRUFFSzZELEVBRkwsQ0FFU0osS0FBSyxHQUFHRSxRQUFSLEdBQW1CLEdBQW5CLEdBQXlCckUsT0FBTyxDQUFDVSxJQUYxQyxFQUVnRCxZQUFXO0FBQ25EbkMsV0FBQyxDQUFFeUIsT0FBRixDQUFELENBQWF3RSxLQUFiO0FBQ0gsU0FKTDtBQUtIOztBQUVELGFBQU9SLEVBQUUsQ0FBQyxDQUFELENBQVQ7QUFDSCxLQTVWSTs7QUE4Vkw7Ozs7OztBQU1BUyxzQkFBa0IsRUFBRSxVQUFVQyxRQUFWLEVBQW9CO0FBQ3BDLFVBQUlDLFdBQVcsR0FBRyxDQUFDLDBDQUFELENBQWxCOztBQUNBLFVBQUksa0JBQWtCRCxRQUF0QixFQUFnQztBQUM1QixZQUFJRSxRQUFRLEdBQUdGLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQkMsS0FBdEIsQ0FBNEIsdUJBQTVCLENBQWY7O0FBQ0EsWUFBSSxLQUFLcEYsT0FBTCxDQUFha0YsUUFBYixDQUFKLEVBQTRCO0FBQ3hCRCxxQkFBVyxHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFELENBQVQsQ0FBZDtBQUNIO0FBQ0o7O0FBQ0QsYUFBT0QsV0FBUDtBQUNILEtBN1dJOztBQStXTDs7Ozs7O0FBTUFJLGdCQUFZLEVBQUUsVUFBVUMsR0FBVixFQUFlO0FBQ3pCLGFBQU9BLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLHFDQUFaLEVBQW1ELE1BQW5ELENBQVA7QUFDSCxLQXZYSTs7QUF5WEw7Ozs7OztBQU1BQyxxQkFBaUIsRUFBRSxVQUFTeEUsSUFBVCxFQUFlO0FBQzlCLFVBQUl5RSxTQUFTLEdBQUd6RSxJQUFJLENBQUMwRSxLQUFMLENBQVcsS0FBWCxDQUFoQjs7QUFDQSxVQUFJRCxTQUFTLENBQUN2RixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBQ3hCdUYsaUJBQVMsQ0FBQ3RGLElBQVYsQ0FBZSxFQUFmO0FBQ0g7O0FBQ0QsVUFBSXdGLFdBQVcsR0FBR0YsU0FBUyxDQUFDRyxHQUFWLENBQWMsVUFBU0MsWUFBVCxFQUF1QnpHLEtBQXZCLEVBQThCO0FBQzFELFlBQUlBLEtBQUssR0FBRyxDQUFSLEtBQWMsQ0FBbEIsRUFBcUI7QUFDakJ5RyxzQkFBWSxHQUFHQSxZQUFZLEdBQUcsR0FBOUI7QUFDSCxTQUZELE1BRU87QUFDSEEsc0JBQVksR0FBRyxNQUFLQSxZQUFwQjtBQUNIOztBQUVELGVBQU85RyxpQkFBaUIsQ0FBQ0MsT0FBbEIsQ0FBMEJxRyxZQUExQixDQUF1Q1EsWUFBdkMsQ0FBUDtBQUNILE9BUmlCLENBQWxCO0FBVUEsYUFBTyxJQUFJQyxNQUFKLENBQVcsTUFBSUgsV0FBVyxDQUFDdkYsSUFBWixDQUFpQixTQUFqQixDQUFKLEdBQWdDLEdBQTNDLENBQVA7QUFDSCxLQS9ZSTs7QUFpWkw7Ozs7Ozs7QUFPQTJGLGNBQVUsRUFBRSxVQUFVdkYsS0FBVixFQUFpQndGLFFBQWpCLEVBQTJCO0FBQ25DLFVBQUlDLFNBQVMsR0FBRztBQUNaLDZCQUFxQkQsUUFBUSxDQUFDakgsaUJBQVQsSUFBOEIsRUFEdkM7QUFFWixtQ0FBMkJpSCxRQUFRLENBQUNFLHVCQUFULElBQW9DO0FBRm5ELE9BQWhCOztBQUtBLFdBQUssSUFBSS9ELEdBQVQsSUFBZ0I4RCxTQUFoQixFQUEyQjtBQUN2QixZQUFJQSxTQUFTLENBQUM5RCxHQUFELENBQVQsQ0FBZWpDLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0I7QUFDSDs7QUFFRCxZQUFJLE9BQU9NLEtBQUssQ0FBQzJCLEdBQUQsQ0FBWixLQUFzQixXQUExQixFQUF1QztBQUNuQzNCLGVBQUssQ0FBQzJCLEdBQUQsQ0FBTCxHQUFhLEVBQWI7QUFDSDs7QUFFRDNCLGFBQUssQ0FBQzJCLEdBQUQsQ0FBTCxHQUFhM0IsS0FBSyxDQUFDMkIsR0FBRCxDQUFMLENBQVdnRSxNQUFYLENBQWtCRixTQUFTLENBQUM5RCxHQUFELENBQTNCLENBQWI7QUFDSDs7QUFFRCxhQUFPM0IsS0FBUDtBQUNIO0FBM2FJO0FBRnFCLENBQWxDLEUiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9oZWxwZXJzLmpzXCIpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFycmF5X2RpZmYoYXJyMSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2FycmF5X2RpZmYvXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogU2Fuam95IFJveVxuICAvLyAgcmV2aXNlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gICBleGFtcGxlIDE6IGFycmF5X2RpZmYoWydLZXZpbicsICd2YW4nLCAnWm9ubmV2ZWxkJ10sIFsndmFuJywgJ1pvbm5ldmVsZCddKVxuICAvLyAgIHJldHVybnMgMTogezA6J0tldmluJ31cblxuICB2YXIgcmV0QXJyID0ge307XG4gIHZhciBhcmdsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGsxID0gJyc7XG4gIHZhciBpID0gMTtcbiAgdmFyIGsgPSAnJztcbiAgdmFyIGFyciA9IHt9O1xuXG4gIGFycjFrZXlzOiBmb3IgKGsxIGluIGFycjEpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxhYmVsc1xuICAgIGZvciAoaSA9IDE7IGkgPCBhcmdsOyBpKyspIHtcbiAgICAgIGFyciA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAoayBpbiBhcnIpIHtcbiAgICAgICAgaWYgKGFycltrXSA9PT0gYXJyMVtrMV0pIHtcbiAgICAgICAgICAvLyBJZiBpdCByZWFjaGVzIGhlcmUsIGl0IHdhcyBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgYXJyYXksIHNvIHRyeSBuZXh0IHZhbHVlXG4gICAgICAgICAgY29udGludWUgYXJyMWtleXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbGFiZWxzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldEFycltrMV0gPSBhcnIxW2sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0QXJyO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5X2RpZmYuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVTcGFjZSA9ICdbIFxcXFx0XSsnO1xudmFyIHJlU3BhY2VPcHQgPSAnWyBcXFxcdF0qJztcbnZhciByZU1lcmlkaWFuID0gJyg/OihbYXBdKVxcXFwuP21cXFxcLj8oW1xcXFx0IF18JCkpJztcbnZhciByZUhvdXIyNCA9ICcoMlswLTRdfFswMV0/WzAtOV0pJztcbnZhciByZUhvdXIyNGx6ID0gJyhbMDFdWzAtOV18MlswLTRdKSc7XG52YXIgcmVIb3VyMTIgPSAnKDA/WzEtOV18MVswLTJdKSc7XG52YXIgcmVNaW51dGUgPSAnKFswLTVdP1swLTldKSc7XG52YXIgcmVNaW51dGVseiA9ICcoWzAtNV1bMC05XSknO1xudmFyIHJlU2Vjb25kID0gJyg2MHxbMC01XT9bMC05XSknO1xudmFyIHJlU2Vjb25kbHogPSAnKDYwfFswLTVdWzAtOV0pJztcbnZhciByZUZyYWMgPSAnKD86XFxcXC4oWzAtOV0rKSknO1xuXG52YXIgcmVEYXlmdWxsID0gJ3N1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5JztcbnZhciByZURheWFiYnIgPSAnc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0JztcbnZhciByZURheXRleHQgPSByZURheWZ1bGwgKyAnfCcgKyByZURheWFiYnIgKyAnfHdlZWtkYXlzPyc7XG5cbnZhciByZVJlbHRleHRudW1iZXIgPSAnZmlyc3R8c2Vjb25kfHRoaXJkfGZvdXJ0aHxmaWZ0aHxzaXh0aHxzZXZlbnRofGVpZ2h0aD98bmludGh8dGVudGh8ZWxldmVudGh8dHdlbGZ0aCc7XG52YXIgcmVSZWx0ZXh0dGV4dCA9ICduZXh0fGxhc3R8cHJldmlvdXN8dGhpcyc7XG52YXIgcmVSZWx0ZXh0dW5pdCA9ICcoPzpzZWNvbmR8c2VjfG1pbnV0ZXxtaW58aG91cnxkYXl8Zm9ydG5pZ2h0fGZvcnRobmlnaHR8bW9udGh8eWVhcilzP3x3ZWVrc3wnICsgcmVEYXl0ZXh0O1xuXG52YXIgcmVZZWFyID0gJyhbMC05XXsxLDR9KSc7XG52YXIgcmVZZWFyMiA9ICcoWzAtOV17Mn0pJztcbnZhciByZVllYXI0ID0gJyhbMC05XXs0fSknO1xudmFyIHJlWWVhcjR3aXRoU2lnbiA9ICcoWystXT9bMC05XXs0fSknO1xudmFyIHJlTW9udGggPSAnKDFbMC0yXXwwP1swLTldKSc7XG52YXIgcmVNb250aGx6ID0gJygwWzAtOV18MVswLTJdKSc7XG52YXIgcmVEYXkgPSAnKD86KDNbMDFdfFswLTJdP1swLTldKSg/OnN0fG5kfHJkfHRoKT8pJztcbnZhciByZURheWx6ID0gJygwWzAtOV18WzEtMl1bMC05XXwzWzAxXSknO1xuXG52YXIgcmVNb250aEZ1bGwgPSAnamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcic7XG52YXIgcmVNb250aEFiYnIgPSAnamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB0P3xvY3R8bm92fGRlYyc7XG52YXIgcmVNb250aHJvbWFuID0gJ2lbdnhdfHZpezAsM318eGl7MCwyfXxpezEsM30nO1xudmFyIHJlTW9udGhUZXh0ID0gJygnICsgcmVNb250aEZ1bGwgKyAnfCcgKyByZU1vbnRoQWJiciArICd8JyArIHJlTW9udGhyb21hbiArICcpJztcblxudmFyIHJlVHpDb3JyZWN0aW9uID0gJygoPzpHTVQpPyhbKy1dKScgKyByZUhvdXIyNCArICc6PycgKyByZU1pbnV0ZSArICc/KSc7XG52YXIgcmVEYXlPZlllYXIgPSAnKDAwWzEtOV18MFsxLTldWzAtOV18WzEyXVswLTldWzAtOV18M1swLTVdWzAtOV18MzZbMC02XSknO1xudmFyIHJlV2Vla09mWWVhciA9ICcoMFsxLTldfFsxLTRdWzAtOV18NVswLTNdKSc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NNZXJpZGlhbihob3VyLCBtZXJpZGlhbikge1xuICBtZXJpZGlhbiA9IG1lcmlkaWFuICYmIG1lcmlkaWFuLnRvTG93ZXJDYXNlKCk7XG5cbiAgc3dpdGNoIChtZXJpZGlhbikge1xuICAgIGNhc2UgJ2EnOlxuICAgICAgaG91ciArPSBob3VyID09PSAxMiA/IC0xMiA6IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwJzpcbiAgICAgIGhvdXIgKz0gaG91ciAhPT0gMTIgPyAxMiA6IDA7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBob3VyO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzWWVhcih5ZWFyU3RyKSB7XG4gIHZhciB5ZWFyID0gK3llYXJTdHI7XG5cbiAgaWYgKHllYXJTdHIubGVuZ3RoIDwgNCAmJiB5ZWFyIDwgMTAwKSB7XG4gICAgeWVhciArPSB5ZWFyIDwgNzAgPyAyMDAwIDogMTkwMDtcbiAgfVxuXG4gIHJldHVybiB5ZWFyO1xufVxuXG5mdW5jdGlvbiBsb29rdXBNb250aChtb250aFN0cikge1xuICByZXR1cm4ge1xuICAgIGphbjogMCxcbiAgICBqYW51YXJ5OiAwLFxuICAgIGk6IDAsXG4gICAgZmViOiAxLFxuICAgIGZlYnJ1YXJ5OiAxLFxuICAgIGlpOiAxLFxuICAgIG1hcjogMixcbiAgICBtYXJjaDogMixcbiAgICBpaWk6IDIsXG4gICAgYXByOiAzLFxuICAgIGFwcmlsOiAzLFxuICAgIGl2OiAzLFxuICAgIG1heTogNCxcbiAgICB2OiA0LFxuICAgIGp1bjogNSxcbiAgICBqdW5lOiA1LFxuICAgIHZpOiA1LFxuICAgIGp1bDogNixcbiAgICBqdWx5OiA2LFxuICAgIHZpaTogNixcbiAgICBhdWc6IDcsXG4gICAgYXVndXN0OiA3LFxuICAgIHZpaWk6IDcsXG4gICAgc2VwOiA4LFxuICAgIHNlcHQ6IDgsXG4gICAgc2VwdGVtYmVyOiA4LFxuICAgIGl4OiA4LFxuICAgIG9jdDogOSxcbiAgICBvY3RvYmVyOiA5LFxuICAgIHg6IDksXG4gICAgbm92OiAxMCxcbiAgICBub3ZlbWJlcjogMTAsXG4gICAgeGk6IDEwLFxuICAgIGRlYzogMTEsXG4gICAgZGVjZW1iZXI6IDExLFxuICAgIHhpaTogMTFcbiAgfVttb250aFN0ci50b0xvd2VyQ2FzZSgpXTtcbn1cblxuZnVuY3Rpb24gbG9va3VwV2Vla2RheShkYXlTdHIpIHtcbiAgdmFyIGRlc2lyZWRTdW5kYXlOdW1iZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG5cbiAgdmFyIGRheU51bWJlcnMgPSB7XG4gICAgbW9uOiAxLFxuICAgIG1vbmRheTogMSxcbiAgICB0dWU6IDIsXG4gICAgdHVlc2RheTogMixcbiAgICB3ZWQ6IDMsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHRodTogNCxcbiAgICB0aHVyc2RheTogNCxcbiAgICBmcmk6IDUsXG4gICAgZnJpZGF5OiA1LFxuICAgIHNhdDogNixcbiAgICBzYXR1cmRheTogNixcbiAgICBzdW46IDAsXG4gICAgc3VuZGF5OiAwXG4gIH07XG5cbiAgcmV0dXJuIGRheU51bWJlcnNbZGF5U3RyLnRvTG93ZXJDYXNlKCldIHx8IGRlc2lyZWRTdW5kYXlOdW1iZXI7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFJlbGF0aXZlKHJlbFRleHQpIHtcbiAgdmFyIHJlbGF0aXZlTnVtYmVycyA9IHtcbiAgICBsYXN0OiAtMSxcbiAgICBwcmV2aW91czogLTEsXG4gICAgdGhpczogMCxcbiAgICBmaXJzdDogMSxcbiAgICBuZXh0OiAxLFxuICAgIHNlY29uZDogMixcbiAgICB0aGlyZDogMyxcbiAgICBmb3VydGg6IDQsXG4gICAgZmlmdGg6IDUsXG4gICAgc2l4dGg6IDYsXG4gICAgc2V2ZW50aDogNyxcbiAgICBlaWdodDogOCxcbiAgICBlaWdodGg6IDgsXG4gICAgbmludGg6IDksXG4gICAgdGVudGg6IDEwLFxuICAgIGVsZXZlbnRoOiAxMSxcbiAgICB0d2VsZnRoOiAxMlxuICB9O1xuXG4gIHZhciByZWxhdGl2ZUJlaGF2aW9yID0ge1xuICAgIHRoaXM6IDFcbiAgfTtcblxuICB2YXIgcmVsVGV4dExvd2VyID0gcmVsVGV4dC50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiB7XG4gICAgYW1vdW50OiByZWxhdGl2ZU51bWJlcnNbcmVsVGV4dExvd2VyXSxcbiAgICBiZWhhdmlvcjogcmVsYXRpdmVCZWhhdmlvcltyZWxUZXh0TG93ZXJdIHx8IDBcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1R6Q29ycmVjdGlvbih0ek9mZnNldCwgb2xkVmFsdWUpIHtcbiAgdmFyIHJlVHpDb3JyZWN0aW9uTG9vc2UgPSAvKD86R01UKT8oWystXSkoXFxkKykoOj8pKFxcZHswLDJ9KS9pO1xuICB0ek9mZnNldCA9IHR6T2Zmc2V0ICYmIHR6T2Zmc2V0Lm1hdGNoKHJlVHpDb3JyZWN0aW9uTG9vc2UpO1xuXG4gIGlmICghdHpPZmZzZXQpIHtcbiAgICByZXR1cm4gb2xkVmFsdWU7XG4gIH1cblxuICB2YXIgc2lnbiA9IHR6T2Zmc2V0WzFdID09PSAnLScgPyAxIDogLTE7XG4gIHZhciBob3VycyA9ICt0ek9mZnNldFsyXTtcbiAgdmFyIG1pbnV0ZXMgPSArdHpPZmZzZXRbNF07XG5cbiAgaWYgKCF0ek9mZnNldFs0XSAmJiAhdHpPZmZzZXRbM10pIHtcbiAgICBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAlIDEwMCk7XG4gICAgaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzIC8gMTAwKTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogKGhvdXJzICogNjAgKyBtaW51dGVzKTtcbn1cblxudmFyIGZvcm1hdHMgPSB7XG4gIHllc3RlcmRheToge1xuICAgIHJlZ2V4OiAvXnllc3RlcmRheS9pLFxuICAgIG5hbWU6ICd5ZXN0ZXJkYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHRoaXMucmQgLT0gMTtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpO1xuICAgIH1cbiAgfSxcblxuICBub3c6IHtcbiAgICByZWdleDogL15ub3cvaSxcbiAgICBuYW1lOiAnbm93J1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfSxcblxuICBub29uOiB7XG4gICAgcmVnZXg6IC9ebm9vbi9pLFxuICAgIG5hbWU6ICdub29uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnRpbWUoMTIsIDAsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICBtaWRuaWdodE9yVG9kYXk6IHtcbiAgICByZWdleDogL14obWlkbmlnaHR8dG9kYXkpL2ksXG4gICAgbmFtZTogJ21pZG5pZ2h0IHwgdG9kYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpO1xuICAgIH1cbiAgfSxcblxuICB0b21vcnJvdzoge1xuICAgIHJlZ2V4OiAvXnRvbW9ycm93L2ksXG4gICAgbmFtZTogJ3RvbW9ycm93JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJkICs9IDE7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZXN0YW1wOiB7XG4gICAgcmVnZXg6IC9eQCgtP1xcZCspL2ksXG4gICAgbmFtZTogJ3RpbWVzdGFtcCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB0aW1lc3RhbXApIHtcbiAgICAgIHRoaXMucnMgKz0gK3RpbWVzdGFtcDtcbiAgICAgIHRoaXMueSA9IDE5NzA7XG4gICAgICB0aGlzLm0gPSAwO1xuICAgICAgdGhpcy5kID0gMTtcbiAgICAgIHRoaXMuZGF0ZXMgPSAwO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnpvbmUoMCk7XG4gICAgfVxuICB9LFxuXG4gIGZpcnN0T3JMYXN0RGF5OiB7XG4gICAgcmVnZXg6IC9eKGZpcnN0fGxhc3QpIGRheSBvZi9pLFxuICAgIG5hbWU6ICdmaXJzdGRheW9mIHwgbGFzdGRheW9mJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSkge1xuICAgICAgaWYgKGRheS50b0xvd2VyQ2FzZSgpID09PSAnZmlyc3QnKSB7XG4gICAgICAgIHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGJhY2tPckZyb250T2Y6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKGJhY2t8ZnJvbnQpIG9mICcgKyByZUhvdXIyNCArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuICsgJz8nLCAnaScpLFxuICAgIG5hbWU6ICdiYWNrb2YgfCBmcm9udG9mJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHNpZGUsIGhvdXJzLCBtZXJpZGlhbikge1xuICAgICAgdmFyIGJhY2sgPSBzaWRlLnRvTG93ZXJDYXNlKCkgPT09ICdiYWNrJztcbiAgICAgIHZhciBob3VyID0gK2hvdXJzO1xuICAgICAgdmFyIG1pbnV0ZSA9IDE1O1xuXG4gICAgICBpZiAoIWJhY2spIHtcbiAgICAgICAgaG91ciAtPSAxO1xuICAgICAgICBtaW51dGUgPSA0NTtcbiAgICAgIH1cblxuICAgICAgaG91ciA9IHByb2Nlc3NNZXJpZGlhbihob3VyLCBtZXJpZGlhbik7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpICYmIHRoaXMudGltZShob3VyLCBtaW51dGUsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICB3ZWVrZGF5T2Y6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHRudW1iZXIgKyAnfCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICcoJyArIHJlRGF5ZnVsbCArICd8JyArIHJlRGF5YWJiciArICcpJyArIHJlU3BhY2UgKyAnb2YnLCAnaScpLFxuICAgIG5hbWU6ICd3ZWVrZGF5b2YnXG4gICAgLy8gdG9kb1xuICB9LFxuXG4gIG1zc3FsdGltZToge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiArICdbOi5dKFswLTldKyknICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAnbXNzcWx0aW1lJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjLCBtZXJpZGlhbikge1xuICAgICAgcmV0dXJuIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgK21pbnV0ZSwgK3NlY29uZCwgK2ZyYWMuc3Vic3RyKDAsIDMpKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZUxvbmcxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZSArICdbOi5dJyArIHJlU2Vjb25kbHogKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAndGltZWxvbmcxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICB0aW1lU2hvcnQxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZWx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ3RpbWVzaG9ydDEyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICB0aW1lVGlueTEyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZUhvdXIxMiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICd0aW1ldGlueTEyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCAwLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgc29hcDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICctJyArIHJlTW9udGhseiArICctJyArIHJlRGF5bHogKyAnVCcgKyByZUhvdXIyNGx6ICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHogKyByZUZyYWMgKyByZVR6Q29ycmVjdGlvbiArICc/JywgJ2knKSxcbiAgICBuYW1lOiAnc29hcCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhYywgdHpDb3JyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCArZnJhYy5zdWJzdHIoMCwgMykpICYmIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICB3ZGR4OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0nICsgcmVNb250aCArICctJyArIHJlRGF5ICsgJ1QnICsgcmVIb3VyMjQgKyAnOicgKyByZU1pbnV0ZSArICc6JyArIHJlU2Vjb25kKSxcbiAgICBuYW1lOiAnd2RkeCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGV4aWY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnOicgKyByZU1vbnRobHogKyAnOicgKyByZURheWx6ICsgJyAnICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6LCAnaScpLFxuICAgIG5hbWU6ICdleGlmJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgeG1sUnBjOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiArICdUJyArIHJlSG91cjI0ICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHopLFxuICAgIG5hbWU6ICd4bWxycGMnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICB4bWxScGNOb0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiArICdbVHRdJyArIHJlSG91cjI0ICsgcmVNaW51dGVseiArIHJlU2Vjb25kbHopLFxuICAgIG5hbWU6ICd4bWxycGNub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgY2xmOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICcvKCcgKyByZU1vbnRoQWJiciArICcpLycgKyByZVllYXI0ICsgJzonICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6ICsgcmVTcGFjZSArIHJlVHpDb3JyZWN0aW9uLCAnaScpLFxuICAgIG5hbWU6ICdjbGYnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhciwgaG91ciwgbWludXRlLCBzZWNvbmQsIHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCkgJiYgdGhpcy56b25lKHByb2Nlc3NUekNvcnJlY3Rpb24odHpDb3JyZWN0aW9uKSk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFsb25nOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCArIHJlRnJhYywgJ2knKSxcbiAgICBuYW1lOiAnaXNvODYwMWxvbmcnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsICtmcmFjLnN1YnN0cigwLCAzKSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVUZXh0dWFsOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoVGV4dCArICdbIC5cXFxcdC1dKicgKyByZURheSArICdbLC5zdG5kcmhcXFxcdCBdKycgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ2RhdGV0ZXh0dWFsJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcG9pbnRlZERhdGU0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbLlxcXFx0LV0nICsgcmVNb250aCArICdbLi1dJyArIHJlWWVhcjQpLFxuICAgIG5hbWU6ICdwb2ludGVkZGF0ZTQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBwb2ludGVkRGF0ZTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1suXFxcXHRdJyArIHJlTW9udGggKyAnXFxcXC4nICsgcmVZZWFyMiksXG4gICAgbmFtZTogJ3BvaW50ZWRkYXRlMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXksIG1vbnRoLCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVMb25nMjQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjQgKyAnWzouXScgKyByZU1pbnV0ZSArICdbOi5dJyArIHJlU2Vjb25kKSxcbiAgICBuYW1lOiAndGltZWxvbmcyNCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiksXG4gICAgbmFtZTogJ2RhdGVub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcGd5ZG90ZDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICdcXFxcLj8nICsgcmVEYXlPZlllYXIpLFxuICAgIG5hbWU6ICdwZ3lkb3RkJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCAwLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVNob3J0MjQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjQgKyAnWzouXScgKyByZU1pbnV0ZSwgJ2knKSxcbiAgICBuYW1lOiAndGltZXNob3J0MjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKCtob3VyLCArbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgaXNvODYwMW5vQ29sb246IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjRseiArIHJlTWludXRlbHogKyByZVNlY29uZGx6LCAnaScpLFxuICAgIG5hbWU6ICdpc284NjAxbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFkYXRlU2xhc2g6IHtcbiAgICAvLyBldmVudGhvdWdoIHRoZSB0cmFpbGluZyBzbGFzaCBpcyBvcHRpb25hbCBpbiBQSFBcbiAgICAvLyBoZXJlIGl0J3MgbWFuZGF0b3J5IGFuZCBpbnB1dHMgd2l0aG91dCB0aGUgc2xhc2hcbiAgICAvLyBhcmUgaGFuZGxlZCBieSBkYXRlc2xhc2hcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLycgKyByZU1vbnRobHogKyAnLycgKyByZURheWx6ICsgJy8nKSxcbiAgICBuYW1lOiAnaXNvODYwMWRhdGVzbGFzaCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTbGFzaDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICcvJyArIHJlTW9udGggKyAnLycgKyByZURheSksXG4gICAgbmFtZTogJ2RhdGVzbGFzaCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGFtZXJpY2FuOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoICsgJy8nICsgcmVEYXkgKyAnLycgKyByZVllYXIpLFxuICAgIG5hbWU6ICdhbWVyaWNhbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGFtZXJpY2FuU2hvcnQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlTW9udGggKyAnLycgKyByZURheSksXG4gICAgbmFtZTogJ2FtZXJpY2Fuc2hvcnQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHRoaXMueSwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZ251RGF0ZVNob3J0T3JJc284NjAxZGF0ZTI6IHtcbiAgICAvLyBpc284NjAxZGF0ZTIgaXMgY29tcGxldGUgc3Vic2V0IG9mIGdudWRhdGVzaG9ydFxuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyICsgJy0nICsgcmVNb250aCArICctJyArIHJlRGF5KSxcbiAgICBuYW1lOiAnZ251ZGF0ZXNob3J0IHwgaXNvODYwMWRhdGUyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgaXNvODYwMWRhdGU0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0d2l0aFNpZ24gKyAnLScgKyByZU1vbnRobHogKyAnLScgKyByZURheWx6KSxcbiAgICBuYW1lOiAnaXNvODYwMWRhdGU0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZ251Tm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ150JyArIHJlSG91cjI0bHogKyByZU1pbnV0ZWx6LCAnaScpLFxuICAgIG5hbWU6ICdnbnVub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgdGhpcy5mKTtcbiAgICB9XG4gIH0sXG5cbiAgZ251RGF0ZVNob3J0ZXI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLScgKyByZU1vbnRoKSxcbiAgICBuYW1lOiAnZ251ZGF0ZXNob3J0ZXInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgcGdUZXh0UmV2ZXJzZToge1xuICAgIC8vIG5vdGU6IGFsbG93ZWQgeWVhcnMgYXJlIGZyb20gMzItOTk5OVxuICAgIC8vIHllYXJzIGJlbG93IDMyIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRheXMgaW4gZGF0ZWZ1bGxcbiAgICByZWdleDogUmVnRXhwKCdeJyArICcoXFxcXGR7Myw0fXxbNC05XVxcXFxkfDNbMi05XSktKCcgKyByZU1vbnRoQWJiciArICcpLScgKyByZURheWx6LCAnaScpLFxuICAgIG5hbWU6ICdwZ3RleHRyZXZlcnNlJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZUZ1bGw6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1sgXFxcXHQuLV0qJyArIHJlTW9udGhUZXh0ICsgJ1sgXFxcXHQuLV0qJyArIHJlWWVhciwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZWZ1bGwnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9EYXk6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlTW9udGhUZXh0ICsgJ1sgLlxcXFx0LV0qJyArIHJlWWVhcjQsICdpJyksXG4gICAgbmFtZTogJ2RhdGVub2RheScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksIDEpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9EYXlSZXY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnWyAuXFxcXHQtXSonICsgcmVNb250aFRleHQsICdpJyksXG4gICAgbmFtZTogJ2RhdGVub2RheXJldicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksIDEpO1xuICAgIH1cbiAgfSxcblxuICBwZ1RleHRTaG9ydDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14oJyArIHJlTW9udGhBYmJyICsgJyktJyArIHJlRGF5bHogKyAnLScgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ3BndGV4dHNob3J0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vWWVhcjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSonLCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm95ZWFyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb1llYXJSZXY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1sgLlxcXFx0LV0qJyArIHJlTW9udGhUZXh0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm95ZWFycmV2JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGlzb1dlZWtEYXk6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLT9XJyArIHJlV2Vla09mWWVhciArICcoPzotPyhbMC03XSkpPycpLFxuICAgIG5hbWU6ICdpc293ZWVrZGF5IHwgaXNvd2VlaycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgICAgIGRheSA9IGRheSA/ICtkYXkgOiAxO1xuXG4gICAgICBpZiAoIXRoaXMueW1kKCt5ZWFyLCAwLCAxKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkYXkgb2Ygd2VlayBmb3IgSmFuIDFzdFxuICAgICAgdmFyIGRheU9mV2VlayA9IG5ldyBEYXRlKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpLmdldERheSgpO1xuXG4gICAgICAvLyBhbmQgdXNlIHRoZSBkYXkgdG8gZmlndXJlIG91dCB0aGUgb2Zmc2V0IGZvciBkYXkgMSBvZiB3ZWVrIDFcbiAgICAgIGRheU9mV2VlayA9IDAgLSAoZGF5T2ZXZWVrID4gNCA/IGRheU9mV2VlayAtIDcgOiBkYXlPZldlZWspO1xuXG4gICAgICB0aGlzLnJkICs9IGRheU9mV2VlayArICh3ZWVrIC0gMSkgKiA3ICsgZGF5O1xuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZVRleHQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHRudW1iZXIgKyAnfCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICcoJyArIHJlUmVsdGV4dHVuaXQgKyAnKScsICdpJyksXG4gICAgbmFtZTogJ3JlbGF0aXZldGV4dCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCByZWxWYWx1ZSwgcmVsVW5pdCkge1xuICAgICAgLy8gdG9kbzogaW1wbGVtZW50IGhhbmRsaW5nIG9mICd0aGlzIHRpbWUtdW5pdCdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgdmFyIF9sb29rdXBSZWxhdGl2ZSA9IGxvb2t1cFJlbGF0aXZlKHJlbFZhbHVlKSxcbiAgICAgICAgICBhbW91bnQgPSBfbG9va3VwUmVsYXRpdmUuYW1vdW50LFxuICAgICAgICAgIGJlaGF2aW9yID0gX2xvb2t1cFJlbGF0aXZlLmJlaGF2aW9yO1xuXG4gICAgICBzd2l0Y2ggKHJlbFVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgdGhpcy5ycyArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLnJpICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICB0aGlzLnJoICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodHMnOlxuICAgICAgICBjYXNlICdmb3J0aG5pZ2h0JzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodHMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogMTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQgKiA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgICAgdGhpcy5ybSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgdGhpcy5yeSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbic6Y2FzZSAnbW9uZGF5JzpcbiAgICAgICAgY2FzZSAndHVlJzpjYXNlICd0dWVzZGF5JzpcbiAgICAgICAgY2FzZSAnd2VkJzpjYXNlICd3ZWRuZXNkYXknOlxuICAgICAgICBjYXNlICd0aHUnOmNhc2UgJ3RodXJzZGF5JzpcbiAgICAgICAgY2FzZSAnZnJpJzpjYXNlICdmcmlkYXknOlxuICAgICAgICBjYXNlICdzYXQnOmNhc2UgJ3NhdHVyZGF5JzpcbiAgICAgICAgY2FzZSAnc3VuJzpjYXNlICdzdW5kYXknOlxuICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gbG9va3VwV2Vla2RheShyZWxVbml0LCA3KTtcbiAgICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICAgICAgdGhpcy5yZCArPSAoYW1vdW50ID4gMCA/IGFtb3VudCAtIDEgOiBhbW91bnQpICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vla2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZWtkYXlzJzpcbiAgICAgICAgICAvLyB0b2RvXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHJlbGF0aXZlOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXihbKy1dKilbIFxcXFx0XSooXFxcXGQrKScgKyByZVNwYWNlT3B0ICsgJygnICsgcmVSZWx0ZXh0dW5pdCArICd8d2VlayknLCAnaScpLFxuICAgIG5hbWU6ICdyZWxhdGl2ZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBzaWducywgcmVsVmFsdWUsIHJlbFVuaXQpIHtcbiAgICAgIHZhciBtaW51c2VzID0gc2lnbnMucmVwbGFjZSgvW14tXS9nLCAnJykubGVuZ3RoO1xuXG4gICAgICB2YXIgYW1vdW50ID0gK3JlbFZhbHVlICogTWF0aC5wb3coLTEsIG1pbnVzZXMpO1xuXG4gICAgICBzd2l0Y2ggKHJlbFVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgdGhpcy5ycyArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLnJpICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICB0aGlzLnJoICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodHMnOlxuICAgICAgICBjYXNlICdmb3J0aG5pZ2h0JzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodHMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogMTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQgKiA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgICAgdGhpcy5ybSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgdGhpcy5yeSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbic6Y2FzZSAnbW9uZGF5JzpcbiAgICAgICAgY2FzZSAndHVlJzpjYXNlICd0dWVzZGF5JzpcbiAgICAgICAgY2FzZSAnd2VkJzpjYXNlICd3ZWRuZXNkYXknOlxuICAgICAgICBjYXNlICd0aHUnOmNhc2UgJ3RodXJzZGF5JzpcbiAgICAgICAgY2FzZSAnZnJpJzpjYXNlICdmcmlkYXknOlxuICAgICAgICBjYXNlICdzYXQnOmNhc2UgJ3NhdHVyZGF5JzpcbiAgICAgICAgY2FzZSAnc3VuJzpjYXNlICdzdW5kYXknOlxuICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gbG9va3VwV2Vla2RheShyZWxVbml0LCA3KTtcbiAgICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICAgICAgdGhpcy5yZCArPSAoYW1vdW50ID4gMCA/IGFtb3VudCAtIDEgOiBhbW91bnQpICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vla2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZWtkYXlzJzpcbiAgICAgICAgICAvLyB0b2RvXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRheVRleHQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZURheXRleHQgKyAnKScsICdpJyksXG4gICAgbmFtZTogJ2RheXRleHQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5VGV4dCkge1xuICAgICAgdGhpcy5yZXNldFRpbWUoKTtcbiAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkoZGF5VGV4dCwgMCk7XG5cbiAgICAgIGlmICh0aGlzLndlZWtkYXlCZWhhdmlvciAhPT0gMikge1xuICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHJlbGF0aXZlVGV4dFdlZWs6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICd3ZWVrJywgJ2knKSxcbiAgICBuYW1lOiAncmVsYXRpdmV0ZXh0d2VlaycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCByZWxUZXh0KSB7XG4gICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDI7XG5cbiAgICAgIHN3aXRjaCAocmVsVGV4dC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ3RoaXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgdGhpcy5yZCArPSA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgY2FzZSAncHJldmlvdXMnOlxuICAgICAgICAgIHRoaXMucmQgLT0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFOKHRoaXMud2Vla2RheSkpIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5ID0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW9udGhGdWxsT3JNb250aEFiYnI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZU1vbnRoRnVsbCArICd8JyArIHJlTW9udGhBYmJyICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdtb250aGZ1bGwgfCBtb250aGFiYnInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgdGhpcy5kKTtcbiAgICB9XG4gIH0sXG5cbiAgdHpDb3JyZWN0aW9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVR6Q29ycmVjdGlvbiwgJ2knKSxcbiAgICBuYW1lOiAndHpjb3JyZWN0aW9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sodHpDb3JyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lKHByb2Nlc3NUekNvcnJlY3Rpb24odHpDb3JyZWN0aW9uKSk7XG4gICAgfVxuICB9LFxuXG4gIGFnbzoge1xuICAgIHJlZ2V4OiAvXmFnby9pLFxuICAgIG5hbWU6ICdhZ28nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHRoaXMucnkgPSAtdGhpcy5yeTtcbiAgICAgIHRoaXMucm0gPSAtdGhpcy5ybTtcbiAgICAgIHRoaXMucmQgPSAtdGhpcy5yZDtcbiAgICAgIHRoaXMucmggPSAtdGhpcy5yaDtcbiAgICAgIHRoaXMucmkgPSAtdGhpcy5yaTtcbiAgICAgIHRoaXMucnMgPSAtdGhpcy5ycztcbiAgICAgIHRoaXMucmYgPSAtdGhpcy5yZjtcbiAgICB9XG4gIH0sXG5cbiAgZ251Tm9Db2xvbjI6IHtcbiAgICAvLyBzZWNvbmQgaW5zdGFuY2Ugb2YgZ251bm9jb2xvbiwgd2l0aG91dCBsZWFkaW5nICd0J1xuICAgIC8vIGl0J3MgZG93biBoZXJlLCBiZWNhdXNlIGl0IGlzIHZlcnkgZ2VuZXJpYyAoNCBkaWdpdHMgaW4gYSByb3cpXG4gICAgLy8gdGh1cyBjb25mbGljdHMgd2l0aCBtYW55IHJ1bGVzIGFib3ZlXG4gICAgLy8gb25seSB5ZWFyNCBzaG91bGQgY29tZSBhZnRlcndhcmRzXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZUhvdXIyNGx6ICsgcmVNaW51dGVseiwgJ2knKSxcbiAgICBuYW1lOiAnZ251bm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsIDAsIHRoaXMuZik7XG4gICAgfVxuICB9LFxuXG4gIHllYXI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0KSxcbiAgICBuYW1lOiAneWVhcjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhcikge1xuICAgICAgdGhpcy55ID0gK3llYXI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2hpdGVzcGFjZToge1xuICAgIHJlZ2V4OiAvXlsgLixcXHRdKy8sXG4gICAgbmFtZTogJ3doaXRlc3BhY2UnXG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxuXG4gIGFueToge1xuICAgIHJlZ2V4OiAvXltcXHNcXFNdKy8sXG4gICAgbmFtZTogJ2FueScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHJlc3VsdFByb3RvID0ge1xuICAvLyBkYXRlXG4gIHk6IE5hTixcbiAgbTogTmFOLFxuICBkOiBOYU4sXG4gIC8vIHRpbWVcbiAgaDogTmFOLFxuICBpOiBOYU4sXG4gIHM6IE5hTixcbiAgZjogTmFOLFxuXG4gIC8vIHJlbGF0aXZlIHNoaWZ0c1xuICByeTogMCxcbiAgcm06IDAsXG4gIHJkOiAwLFxuICByaDogMCxcbiAgcmk6IDAsXG4gIHJzOiAwLFxuICByZjogMCxcblxuICAvLyB3ZWVrZGF5IHJlbGF0ZWQgc2hpZnRzXG4gIHdlZWtkYXk6IE5hTixcbiAgd2Vla2RheUJlaGF2aW9yOiAwLFxuXG4gIC8vIGZpcnN0IG9yIGxhc3QgZGF5IG9mIG1vbnRoXG4gIC8vIDAgbm9uZSwgMSBmaXJzdCwgLTEgbGFzdFxuICBmaXJzdE9yTGFzdERheU9mTW9udGg6IDAsXG5cbiAgLy8gdGltZXpvbmUgY29ycmVjdGlvbiBpbiBtaW51dGVzXG4gIHo6IE5hTixcblxuICAvLyBjb3VudGVyc1xuICBkYXRlczogMCxcbiAgdGltZXM6IDAsXG4gIHpvbmVzOiAwLFxuXG4gIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgeW1kOiBmdW5jdGlvbiB5bWQoeSwgbSwgZCkge1xuICAgIGlmICh0aGlzLmRhdGVzID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZXMrKztcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMubSA9IG07XG4gICAgdGhpcy5kID0gZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgdGltZTogZnVuY3Rpb24gdGltZShoLCBpLCBzLCBmKSB7XG4gICAgaWYgKHRoaXMudGltZXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lcysrO1xuICAgIHRoaXMuaCA9IGg7XG4gICAgdGhpcy5pID0gaTtcbiAgICB0aGlzLnMgPSBzO1xuICAgIHRoaXMuZiA9IGY7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgcmVzZXRUaW1lOiBmdW5jdGlvbiByZXNldFRpbWUoKSB7XG4gICAgdGhpcy5oID0gMDtcbiAgICB0aGlzLmkgPSAwO1xuICAgIHRoaXMucyA9IDA7XG4gICAgdGhpcy5mID0gMDtcbiAgICB0aGlzLnRpbWVzID0gMDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICB6b25lOiBmdW5jdGlvbiB6b25lKG1pbnV0ZXMpIHtcbiAgICBpZiAodGhpcy56b25lcyA8PSAxKSB7XG4gICAgICB0aGlzLnpvbmVzKys7XG4gICAgICB0aGlzLnogPSBtaW51dGVzO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICB0b0RhdGU6IGZ1bmN0aW9uIHRvRGF0ZShyZWxhdGl2ZVRvKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXMgJiYgIXRoaXMudGltZXMpIHtcbiAgICAgIHRoaXMuaCA9IHRoaXMuaSA9IHRoaXMucyA9IHRoaXMuZiA9IDA7XG4gICAgfVxuXG4gICAgLy8gZmlsbCBob2xlc1xuICAgIGlmIChpc05hTih0aGlzLnkpKSB7XG4gICAgICB0aGlzLnkgPSByZWxhdGl2ZVRvLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMubSkpIHtcbiAgICAgIHRoaXMubSA9IHJlbGF0aXZlVG8uZ2V0TW9udGgoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5kKSkge1xuICAgICAgdGhpcy5kID0gcmVsYXRpdmVUby5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMuaCkpIHtcbiAgICAgIHRoaXMuaCA9IHJlbGF0aXZlVG8uZ2V0SG91cnMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5pKSkge1xuICAgICAgdGhpcy5pID0gcmVsYXRpdmVUby5nZXRNaW51dGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMucykpIHtcbiAgICAgIHRoaXMucyA9IHJlbGF0aXZlVG8uZ2V0U2Vjb25kcygpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmYpKSB7XG4gICAgICB0aGlzLmYgPSByZWxhdGl2ZVRvLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIH1cblxuICAgIC8vIGFkanVzdCBzcGVjaWFsIGVhcmx5XG4gICAgc3dpdGNoICh0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLmQgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHRoaXMuZCA9IDA7XG4gICAgICAgIHRoaXMubSArPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKHRoaXMud2Vla2RheSkpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUocmVsYXRpdmVUby5nZXRUaW1lKCkpO1xuICAgICAgZGF0ZS5zZXRGdWxsWWVhcih0aGlzLnksIHRoaXMubSwgdGhpcy5kKTtcbiAgICAgIGRhdGUuc2V0SG91cnModGhpcy5oLCB0aGlzLmksIHRoaXMucywgdGhpcy5mKTtcblxuICAgICAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG5cbiAgICAgIGlmICh0aGlzLndlZWtkYXlCZWhhdmlvciA9PT0gMikge1xuICAgICAgICAvLyBUbyBtYWtlIFwidGhpcyB3ZWVrXCIgd29yaywgd2hlcmUgdGhlIGN1cnJlbnQgZGF5IG9mIHdlZWsgaXMgYSBcInN1bmRheVwiXG4gICAgICAgIGlmIChkb3cgPT09IDAgJiYgdGhpcy53ZWVrZGF5ICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gLTY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUbyBtYWtlIFwic3VuZGF5IHRoaXMgd2Vla1wiIHdvcmssIHdoZXJlIHRoZSBjdXJyZW50IGRheSBvZiB3ZWVrIGlzIG5vdCBhIFwic3VuZGF5XCJcbiAgICAgICAgaWYgKHRoaXMud2Vla2RheSA9PT0gMCAmJiBkb3cgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndlZWtkYXkgPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kIC09IGRvdztcbiAgICAgICAgdGhpcy5kICs9IHRoaXMud2Vla2RheTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkaWZmID0gdGhpcy53ZWVrZGF5IC0gZG93O1xuXG4gICAgICAgIC8vIHNvbWUgUEhQIG1hZ2ljXG4gICAgICAgIGlmICh0aGlzLnJkIDwgMCAmJiBkaWZmIDwgMCB8fCB0aGlzLnJkID49IDAgJiYgZGlmZiA8PSAtdGhpcy53ZWVrZGF5QmVoYXZpb3IpIHtcbiAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53ZWVrZGF5ID49IDApIHtcbiAgICAgICAgICB0aGlzLmQgKz0gZGlmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmQgLT0gNyAtIChNYXRoLmFicyh0aGlzLndlZWtkYXkpIC0gZG93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2Vla2RheSA9IE5hTjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGp1c3QgcmVsYXRpdmVcbiAgICB0aGlzLnkgKz0gdGhpcy5yeTtcbiAgICB0aGlzLm0gKz0gdGhpcy5ybTtcbiAgICB0aGlzLmQgKz0gdGhpcy5yZDtcblxuICAgIHRoaXMuaCArPSB0aGlzLnJoO1xuICAgIHRoaXMuaSArPSB0aGlzLnJpO1xuICAgIHRoaXMucyArPSB0aGlzLnJzO1xuICAgIHRoaXMuZiArPSB0aGlzLnJmO1xuXG4gICAgdGhpcy5yeSA9IHRoaXMucm0gPSB0aGlzLnJkID0gMDtcbiAgICB0aGlzLnJoID0gdGhpcy5yaSA9IHRoaXMucnMgPSB0aGlzLnJmID0gMDtcblxuICAgIHZhciByZXN1bHQgPSBuZXcgRGF0ZShyZWxhdGl2ZVRvLmdldFRpbWUoKSk7XG4gICAgLy8gc2luY2UgRGF0ZSBjb25zdHJ1Y3RvciB0cmVhdHMgeWVhcnMgPD0gOTkgYXMgMTkwMCtcbiAgICAvLyBpdCBjYW4ndCBiZSB1c2VkLCB0aHVzIHRoaXMgd2VpcmQgd2F5XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpO1xuICAgIHJlc3VsdC5zZXRIb3Vycyh0aGlzLmgsIHRoaXMuaSwgdGhpcy5zLCB0aGlzLmYpO1xuXG4gICAgLy8gbm90ZTogdGhpcyBpcyBkb25lIHR3aWNlIGluIFBIUFxuICAgIC8vIGVhcmx5IHdoZW4gcHJvY2Vzc2luZyBzcGVjaWFsIHJlbGF0aXZlc1xuICAgIC8vIGFuZCBsYXRlXG4gICAgLy8gdG9kbzogY2hlY2sgaWYgdGhlIGxvZ2ljIGNhbiBiZSByZWR1Y2VkXG4gICAgLy8gdG8ganVzdCBvbmUgdGltZSBhY3Rpb25cbiAgICBzd2l0Y2ggKHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJlc3VsdC5zZXREYXRlKDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHJlc3VsdC5zZXRNb250aChyZXN1bHQuZ2V0TW9udGgoKSArIDEsIDApO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBhZGp1c3QgdGltZXpvbmVcbiAgICBpZiAoIWlzTmFOKHRoaXMueikgJiYgcmVzdWx0LmdldFRpbWV6b25lT2Zmc2V0KCkgIT09IHRoaXMueikge1xuICAgICAgcmVzdWx0LnNldFVUQ0Z1bGxZZWFyKHJlc3VsdC5nZXRGdWxsWWVhcigpLCByZXN1bHQuZ2V0TW9udGgoKSwgcmVzdWx0LmdldERhdGUoKSk7XG5cbiAgICAgIHJlc3VsdC5zZXRVVENIb3VycyhyZXN1bHQuZ2V0SG91cnMoKSwgcmVzdWx0LmdldE1pbnV0ZXMoKSArIHRoaXMueiwgcmVzdWx0LmdldFNlY29uZHMoKSwgcmVzdWx0LmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cnRvdGltZShzdHIsIG5vdykge1xuICAvLyAgICAgICBkaXNjdXNzIGF0OiBodHRwOi8vbG9jdXR1cy5pby9waHAvc3RydG90aW1lL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cDovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cDovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBBLiBNYXTDrWFzIFF1ZXphZGEgKGh0dHA6Ly9hbWF0aWFzcS5jb20pXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IHByZXV0ZXJcbiAgLy8gICAgICBpbXByb3ZlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gICAgICBpbXByb3ZlZCBieTogTWlya28gRmFiZXJcbiAgLy8gICAgICAgICBpbnB1dCBieTogRGF2aWRcbiAgLy8gICAgICBidWdmaXhlZCBieTogV2FnbmVyIEIuIFNvYXJlc1xuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBBcnR1ciBUY2hlcm55Y2hldlxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBTdGVwaGFuIELDtnNjaC1QbGVwZWxpdHMgKGh0dHA6Ly9naXRodWIuY29tL3BsZXBlKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBSYWZhxYIgS3VrYXdza2lcbiAgLy8gICAgICAgICAgIG5vdGUgMTogRXhhbXBsZXMgYWxsIGhhdmUgYSBmaXhlZCB0aW1lc3RhbXAgdG8gcHJldmVudFxuICAvLyAgICAgICAgICAgbm90ZSAxOiB0ZXN0cyB0byBmYWlsIGJlY2F1c2Ugb2YgdmFyaWFibGUgdGltZSh6b25lcylcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogc3RydG90aW1lKCcrMSBkYXknLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAxOiAxMTI5NzE5NjAwXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHN0cnRvdGltZSgnKzEgd2VlayAyIGRheXMgNCBob3VycyAyIHNlY29uZHMnLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAyOiAxMTMwNDI1MjAyXG4gIC8vICAgICAgICBleGFtcGxlIDM6IHN0cnRvdGltZSgnbGFzdCBtb250aCcsIDExMjk2MzMyMDApXG4gIC8vICAgICAgICByZXR1cm5zIDM6IDExMjcwNDEyMDBcbiAgLy8gICAgICAgIGV4YW1wbGUgNDogc3RydG90aW1lKCcyMDA5LTA1LTA0IDA4OjMwOjAwKzAwJylcbiAgLy8gICAgICAgIHJldHVybnMgNDogMTI0MTQyNTgwMFxuICAvLyAgICAgICAgZXhhbXBsZSA1OiBzdHJ0b3RpbWUoJzIwMDktMDUtMDQgMDg6MzA6MDArMDI6MDAnKVxuICAvLyAgICAgICAgcmV0dXJucyA1OiAxMjQxNDE4NjAwXG4gIGlmIChub3cgPT0gbnVsbCkge1xuICAgIG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICB9XG5cbiAgLy8gdGhlIHJ1bGUgb3JkZXIgaXMgdmVyeSBmcmFnaWxlXG4gIC8vIGFzIG1hbnkgZm9ybWF0cyBhcmUgc2ltaWxhciB0byBvdGhlcnNcbiAgLy8gc28gc21hbGwgY2hhbmdlIGNhbiBjYXVzZVxuICAvLyBpbnB1dCBtaXNpbnRlcnByZXRhdGlvblxuICB2YXIgcnVsZXMgPSBbZm9ybWF0cy55ZXN0ZXJkYXksIGZvcm1hdHMubm93LCBmb3JtYXRzLm5vb24sIGZvcm1hdHMubWlkbmlnaHRPclRvZGF5LCBmb3JtYXRzLnRvbW9ycm93LCBmb3JtYXRzLnRpbWVzdGFtcCwgZm9ybWF0cy5maXJzdE9yTGFzdERheSwgZm9ybWF0cy5iYWNrT3JGcm9udE9mLFxuICAvLyBmb3JtYXRzLndlZWtkYXlPZiwgLy8gbm90IHlldCBpbXBsZW1lbnRlZFxuICBmb3JtYXRzLm1zc3FsdGltZSwgZm9ybWF0cy50aW1lTG9uZzEyLCBmb3JtYXRzLnRpbWVTaG9ydDEyLCBmb3JtYXRzLnRpbWVUaW55MTIsIGZvcm1hdHMuc29hcCwgZm9ybWF0cy53ZGR4LCBmb3JtYXRzLmV4aWYsIGZvcm1hdHMueG1sUnBjLCBmb3JtYXRzLnhtbFJwY05vQ29sb24sIGZvcm1hdHMuY2xmLCBmb3JtYXRzLmlzbzg2MDFsb25nLCBmb3JtYXRzLmRhdGVUZXh0dWFsLCBmb3JtYXRzLnBvaW50ZWREYXRlNCwgZm9ybWF0cy5wb2ludGVkRGF0ZTIsIGZvcm1hdHMudGltZUxvbmcyNCwgZm9ybWF0cy5kYXRlTm9Db2xvbiwgZm9ybWF0cy5wZ3lkb3RkLCBmb3JtYXRzLnRpbWVTaG9ydDI0LCBmb3JtYXRzLmlzbzg2MDFub0NvbG9uLFxuICAvLyBpc284NjAxZGF0ZVNsYXNoIG5lZWRzIHRvIGNvbWUgYmVmb3JlIGRhdGVTbGFzaFxuICBmb3JtYXRzLmlzbzg2MDFkYXRlU2xhc2gsIGZvcm1hdHMuZGF0ZVNsYXNoLCBmb3JtYXRzLmFtZXJpY2FuLCBmb3JtYXRzLmFtZXJpY2FuU2hvcnQsIGZvcm1hdHMuZ251RGF0ZVNob3J0T3JJc284NjAxZGF0ZTIsIGZvcm1hdHMuaXNvODYwMWRhdGU0LCBmb3JtYXRzLmdudU5vQ29sb24sIGZvcm1hdHMuZ251RGF0ZVNob3J0ZXIsIGZvcm1hdHMucGdUZXh0UmV2ZXJzZSwgZm9ybWF0cy5kYXRlRnVsbCwgZm9ybWF0cy5kYXRlTm9EYXksIGZvcm1hdHMuZGF0ZU5vRGF5UmV2LCBmb3JtYXRzLnBnVGV4dFNob3J0LCBmb3JtYXRzLmRhdGVOb1llYXIsIGZvcm1hdHMuZGF0ZU5vWWVhclJldiwgZm9ybWF0cy5pc29XZWVrRGF5LCBmb3JtYXRzLnJlbGF0aXZlVGV4dCwgZm9ybWF0cy5yZWxhdGl2ZSwgZm9ybWF0cy5kYXlUZXh0LCBmb3JtYXRzLnJlbGF0aXZlVGV4dFdlZWssIGZvcm1hdHMubW9udGhGdWxsT3JNb250aEFiYnIsIGZvcm1hdHMudHpDb3JyZWN0aW9uLCBmb3JtYXRzLmFnbywgZm9ybWF0cy5nbnVOb0NvbG9uMiwgZm9ybWF0cy55ZWFyNCxcbiAgLy8gbm90ZTogdGhlIHR3byBydWxlcyBiZWxvd1xuICAvLyBzaG91bGQgYWx3YXlzIGNvbWUgbGFzdFxuICBmb3JtYXRzLndoaXRlc3BhY2UsIGZvcm1hdHMuYW55XTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShyZXN1bHRQcm90byk7XG5cbiAgd2hpbGUgKHN0ci5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJ1bGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGZvcm1hdCA9IHJ1bGVzW2ldO1xuXG4gICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goZm9ybWF0LnJlZ2V4KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIGNhcmUgb25seSBhYm91dCBmYWxzZSByZXN1bHRzLiBJZ25vcmUgb3RoZXIgdmFsdWVzXG4gICAgICAgIGlmIChmb3JtYXQuY2FsbGJhY2sgJiYgZm9ybWF0LmNhbGxiYWNrLmFwcGx5KHJlc3VsdCwgbWF0Y2gpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGguZmxvb3IocmVzdWx0LnRvRGF0ZShuZXcgRGF0ZShub3cgKiAxMDAwKSkgLyAxMDAwKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJ0b3RpbWUuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaV9nZXQodmFybmFtZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2luaV9nZXQvXG4gIC8vIG9yaWdpbmFsIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogVGhlIGluaSB2YWx1ZXMgbXVzdCBiZSBzZXQgYnkgaW5pX3NldCBvciBtYW51YWxseSB3aXRoaW4gYW4gaW5pIGZpbGVcbiAgLy8gICBleGFtcGxlIDE6IGluaV9zZXQoJ2RhdGUudGltZXpvbmUnLCAnQXNpYS9Ib25nX0tvbmcnKVxuICAvLyAgIGV4YW1wbGUgMTogaW5pX2dldCgnZGF0ZS50aW1lem9uZScpXG4gIC8vICAgcmV0dXJucyAxOiAnQXNpYS9Ib25nX0tvbmcnXG5cbiAgdmFyICRnbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgJGdsb2JhbC4kbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXMgfHwge307XG4gIHZhciAkbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXM7XG4gICRsb2N1dHVzLnBocCA9ICRsb2N1dHVzLnBocCB8fCB7fTtcbiAgJGxvY3V0dXMucGhwLmluaSA9ICRsb2N1dHVzLnBocC5pbmkgfHwge307XG5cbiAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0gJiYgJGxvY3V0dXMucGhwLmluaVt2YXJuYW1lXS5sb2NhbF92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuICRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pX2dldC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL3N0cmxlbi9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHA6Ly9rdnouaW8pXG4gIC8vIGltcHJvdmVkIGJ5OiBTYWtpbW9yaVxuICAvLyBpbXByb3ZlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cDovL2t2ei5pbylcbiAgLy8gICAgaW5wdXQgYnk6IEtpcmsgU3Ryb2JlY2tcbiAgLy8gYnVnZml4ZWQgYnk6IE9ubm8gTWFyc21hbiAoaHR0cHM6Ly90d2l0dGVyLmNvbS9vbm5vbWFyc21hbilcbiAgLy8gIHJldmlzZWQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgbm90ZSAxOiBNYXkgbG9vayBsaWtlIG92ZXJraWxsLCBidXQgaW4gb3JkZXIgdG8gYmUgdHJ1bHkgZmFpdGhmdWwgdG8gaGFuZGxpbmcgYWxsIFVuaWNvZGVcbiAgLy8gICAgICBub3RlIDE6IGNoYXJhY3RlcnMgYW5kIHRvIHRoaXMgZnVuY3Rpb24gaW4gUEhQIHdoaWNoIGRvZXMgbm90IGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXNcbiAgLy8gICAgICBub3RlIDE6IGJ1dCBjb3VudHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBzb21ldGhpbmcgbGlrZSB0aGlzIGlzIHJlYWxseSBuZWNlc3NhcnkuXG4gIC8vICAgZXhhbXBsZSAxOiBzdHJsZW4oJ0tldmluIHZhbiBab25uZXZlbGQnKVxuICAvLyAgIHJldHVybnMgMTogMTlcbiAgLy8gICBleGFtcGxlIDI6IGluaV9zZXQoJ3VuaWNvZGUuc2VtYW50aWNzJywgJ29uJylcbiAgLy8gICBleGFtcGxlIDI6IHN0cmxlbignQVxcdWQ4N2VcXHVkYzA0WicpXG4gIC8vICAgcmV0dXJucyAyOiAzXG5cbiAgdmFyIHN0ciA9IHN0cmluZyArICcnO1xuXG4gIHZhciBpbmlWYWwgPSAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnID8gcmVxdWlyZSgnLi4vaW5mby9pbmlfZ2V0JykoJ3VuaWNvZGUuc2VtYW50aWNzJykgOiB1bmRlZmluZWQpIHx8ICdvZmYnO1xuICBpZiAoaW5pVmFsID09PSAnb2ZmJykge1xuICAgIHJldHVybiBzdHIubGVuZ3RoO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIgbGd0aCA9IDA7XG5cbiAgdmFyIGdldFdob2xlQ2hhciA9IGZ1bmN0aW9uIGdldFdob2xlQ2hhcihzdHIsIGkpIHtcbiAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIHZhciBuZXh0ID0gJyc7XG4gICAgdmFyIHByZXYgPSAnJztcbiAgICBpZiAoY29kZSA+PSAweEQ4MDAgJiYgY29kZSA8PSAweERCRkYpIHtcbiAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlIChjb3VsZCBjaGFuZ2UgbGFzdCBoZXggdG8gMHhEQjdGIHRvXG4gICAgICAvLyB0cmVhdCBoaWdoIHByaXZhdGUgc3Vycm9nYXRlcyBhcyBzaW5nbGUgY2hhcmFjdGVycylcbiAgICAgIGlmIChzdHIubGVuZ3RoIDw9IGkgKyAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGlnaCBzdXJyb2dhdGUgd2l0aG91dCBmb2xsb3dpbmcgbG93IHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgbmV4dCA9IHN0ci5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgIGlmIChuZXh0IDwgMHhEQzAwIHx8IG5leHQgPiAweERGRkYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaWdoIHN1cnJvZ2F0ZSB3aXRob3V0IGZvbGxvd2luZyBsb3cgc3Vycm9nYXRlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyLmNoYXJBdChpKSArIHN0ci5jaGFyQXQoaSArIDEpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA+PSAweERDMDAgJiYgY29kZSA8PSAweERGRkYpIHtcbiAgICAgIC8vIExvdyBzdXJyb2dhdGVcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTG93IHN1cnJvZ2F0ZSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgcHJldiA9IHN0ci5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICAgIGlmIChwcmV2IDwgMHhEODAwIHx8IHByZXYgPiAweERCRkYpIHtcbiAgICAgICAgLy8gKGNvdWxkIGNoYW5nZSBsYXN0IGhleCB0byAweERCN0YgdG8gdHJlYXQgaGlnaCBwcml2YXRlIHN1cnJvZ2F0ZXNcbiAgICAgICAgLy8gYXMgc2luZ2xlIGNoYXJhY3RlcnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTG93IHN1cnJvZ2F0ZSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgLy8gV2UgY2FuIHBhc3Mgb3ZlciBsb3cgc3Vycm9nYXRlcyBub3cgYXMgdGhlIHNlY29uZFxuICAgICAgLy8gY29tcG9uZW50IGluIGEgcGFpciB3aGljaCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdHIuY2hhckF0KGkpO1xuICB9O1xuXG4gIGZvciAoaSA9IDAsIGxndGggPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGdldFdob2xlQ2hhcihzdHIsIGkpID09PSBmYWxzZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIEFkYXB0IHRoaXMgbGluZSBhdCB0aGUgdG9wIG9mIGFueSBsb29wLCBwYXNzaW5nIGluIHRoZSB3aG9sZSBzdHJpbmcgYW5kXG4gICAgLy8gdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGFuZCByZXR1cm5pbmcgYSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgY2hhcmFjdGVyO1xuICAgIC8vIHB1cnBvc2UgaXMgdG8gdHJlYXQgdGhlIGZpcnN0IHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciBhcyB0aGUgd2hvbGUgY2hhcmFjdGVyIGFuZCB0aGVuXG4gICAgLy8gaWdub3JlIHRoZSBzZWNvbmQgcGFydFxuICAgIGxndGgrKztcbiAgfVxuXG4gIHJldHVybiBsZ3RoO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmxlbi5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNfbnVtZXJpYyhtaXhlZFZhcikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2lzX251bWVyaWMvXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogRGF2aWRcbiAgLy8gaW1wcm92ZWQgYnk6IHRhaXRoXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBUaW0gZGUgS29uaW5nXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBXZWJEZXZIb2JvIChodHRwOi8vd2ViZGV2aG9iby5ibG9nc3BvdC5jb20vKVxuICAvLyBidWdmaXhlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gYnVnZml4ZWQgYnk6IERlbmlzIENoZW51IChodHRwOi8vc2hub3VsbGUubmV0KVxuICAvLyAgIGV4YW1wbGUgMTogaXNfbnVtZXJpYygxODYuMzEpXG4gIC8vICAgcmV0dXJucyAxOiB0cnVlXG4gIC8vICAgZXhhbXBsZSAyOiBpc19udW1lcmljKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDI6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSAzOiBpc19udW1lcmljKCcgKzE4Ni4zMWUyJylcbiAgLy8gICByZXR1cm5zIDM6IHRydWVcbiAgLy8gICBleGFtcGxlIDQ6IGlzX251bWVyaWMoJycpXG4gIC8vICAgcmV0dXJucyA0OiBmYWxzZVxuICAvLyAgIGV4YW1wbGUgNTogaXNfbnVtZXJpYyhbXSlcbiAgLy8gICByZXR1cm5zIDU6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSA2OiBpc19udW1lcmljKCcxICcpXG4gIC8vICAgcmV0dXJucyA2OiBmYWxzZVxuXG4gIHZhciB3aGl0ZXNwYWNlID0gWycgJywgJ1xcbicsICdcXHInLCAnXFx0JywgJ1xcZicsICdcXHgwYicsICdcXHhhMCcsICdcXHUyMDAwJywgJ1xcdTIwMDEnLCAnXFx1MjAwMicsICdcXHUyMDAzJywgJ1xcdTIwMDQnLCAnXFx1MjAwNScsICdcXHUyMDA2JywgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAwQicsICdcXHUyMDI4JywgJ1xcdTIwMjknLCAnXFx1MzAwMCddLmpvaW4oJycpO1xuXG4gIC8vIEB0b2RvOiBCcmVhayB0aGlzIHVwIHVzaW5nIG1hbnkgc2luZ2xlIGNvbmRpdGlvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIHJldHVybiAodHlwZW9mIG1peGVkVmFyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWl4ZWRWYXIgPT09ICdzdHJpbmcnICYmIHdoaXRlc3BhY2UuaW5kZXhPZihtaXhlZFZhci5zbGljZSgtMSkpID09PSAtMSkgJiYgbWl4ZWRWYXIgIT09ICcnICYmICFpc05hTihtaXhlZFZhcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNfbnVtZXJpYy5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIExhcmF2ZWwgSmF2YXNjcmlwdCBWYWxpZGF0aW9uXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Byb2VuZ3NvZnQvbGFyYXZlbC1qc3ZhbGlkYXRpb25cbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdmFsaWRhdG9yc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNyBQcm9lbmdzb2Z0XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgc3RybGVuIGZyb20gJ2xvY3V0dXMvcGhwL3N0cmluZ3Mvc3RybGVuJztcbmltcG9ydCBhcnJheV9kaWZmIGZyb20gJ2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYnO1xuaW1wb3J0IHN0cnRvdGltZSBmcm9tICdsb2N1dHVzL3BocC9kYXRldGltZS9zdHJ0b3RpbWUnO1xuaW1wb3J0IGlzX251bWVyaWMgZnJvbSAnbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMnO1xuXG4kLmV4dGVuZCh0cnVlLCBsYXJhdmVsVmFsaWRhdGlvbiwge1xuXG4gICAgaGVscGVyczoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1lcmljIHJ1bGVzXG4gICAgICAgICAqL1xuICAgICAgICBudW1lcmljUnVsZXM6IFsnSW50ZWdlcicsICdOdW1lcmljJ10sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGZpbGUgaW5mb3JtYXRpb24gZnJvbSBmaWxlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZmllbGRPYmpcbiAgICAgICAgICogQHBhcmFtIGluZGV4XG4gICAgICAgICAqIEByZXR1cm5zIHt7ZmlsZTogKiwgZXh0ZW5zaW9uOiBzdHJpbmcsIHNpemU6IG51bWJlcn19XG4gICAgICAgICAqL1xuICAgICAgICBmaWxlaW5mbzogZnVuY3Rpb24gKGZpZWxkT2JqLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIEZpbGVOYW1lID0gZmllbGRPYmoudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoIGZpZWxkT2JqLmZpbGVzICE9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRPYmouZmlsZXNbaW5kZXhdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb246IEZpbGVOYW1lLnN1YnN0cihGaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWVsZE9iai5maWxlc1tpbmRleF0uc2l6ZSAvIDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWVsZE9iai5maWxlc1tpbmRleF0udHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3RvcnMgZm9yIHRoIHNwZWNpZmllZCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVzXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShuYW1lcykpICB7XG4gICAgICAgICAgICAgICAgbmFtZXMgPSBbbmFtZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goXCJbbmFtZT0nXCIgKyBuYW1lc1tpXSArIFwiJ11cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3Iuam9pbigpO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIG51bWVyaWMgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTnVtZXJpY1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUnVsZXMoZWxlbWVudCwgdGhpcy5udW1lcmljUnVsZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyBwYXNzZWQgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBydWxlc1xuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCwgcnVsZXMpIHtcblxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9ICQuZGF0YShlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdmFyIGxpc3RSdWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdmFsaWRhdG9yLmFycmF5UnVsZXNDYWNoZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGVbZWxlbWVudC5uYW1lXSwgZnVuY3Rpb24gKGluZGV4LCBhcnJheVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2goYXJyYXlSdWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gdmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2godmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJC5lYWNoKGxpc3RSdWxlcywgZnVuY3Rpb24oaW5kZXgsb2JqUnVsZXMpe1xuICAgICAgICAgICAgICAgIGlmICgnbGFyYXZlbFZhbGlkYXRpb24nIGluIG9ialJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcnVsZXM9b2JqUnVsZXMubGFyYXZlbFZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3J1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KF9ydWxlc1tpXVswXSxydWxlcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiB0aGUgc3RyaW5nIGxlbmd0aCB1c2luZyBQSFAgZnVuY3Rpb24uXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJsZW4ucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cmxlbi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgc3RybGVuOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RybGVuKHN0cmluZyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGRlcGVuZGluZyBvZiBoaXMgdHlwZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9ialxuICAgICAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHJldHVybnMgaW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiBnZXRTaXplKG9iaiwgZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTnVtZXJpY1J1bGVzKGVsZW1lbnQpICYmIHRoaXMuaXNfbnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGguZmxvb3IodGhpcy5maWxlaW5mbyhlbGVtZW50KS5zaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuc3RybGVuKHZhbHVlKSk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHNwZWNpZmllZCBydWxlIGZyb20gZWxlbWVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJ1bGVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXRMYXJhdmVsVmFsaWRhdGlvbjogZnVuY3Rpb24ocnVsZSwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAkLmVhY2goJC52YWxpZGF0b3Iuc3RhdGljUnVsZXMoZWxlbWVudCksIGZ1bmN0aW9uKGtleSwgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5PT09XCJsYXJhdmVsVmFsaWRhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChydWxlcywgZnVuY3Rpb24gKGksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF09PT1ydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBoZSB0aW1lc3RhbXAgb2YgdmFsdWUgcGFzc2VkIHVzaW5nIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdCBpbiBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxpbnR9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZVRpbWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBmbXQgPSBuZXcgRGF0ZUZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZVJ1bGUgPSB0aGlzLmdldExhcmF2ZWxWYWxpZGF0aW9uKCdEYXRlRm9ybWF0JywgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlUnVsZVsxXVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGltZVZhbHVlID0gdGhpcy5zdHJ0b3RpbWUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lVmFsdWUgPSBmbXQucGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVZhbHVlID0gTWF0aC5yb3VuZCgodGltZVZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgYSBnaXZlbiBkYXRlIGFnYWluc3QgYW5vdGhlciB1c2luZyBhbiBvcGVyYXRvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbGlkYXRvclxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gb3BlcmF0b3JcbiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNvbXBhcmVEYXRlczogZnVuY3Rpb24gKHZhbGlkYXRvciwgdmFsdWUsIGVsZW1lbnQsIHBhcmFtcywgb3BlcmF0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHRpbWVDb21wYXJlID0gcGFyc2VGbG9hdChwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4odGltZUNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZGVwZW5kZW50RWxlbWVudCh2YWxpZGF0b3IsIGVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUNvbXBhcmUgPSB0aGlzLnBhcnNlVGltZSh2YWxpZGF0b3IuZWxlbWVudFZhbHVlKHRhcmdldCksIHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSB0aGlzLnBhcnNlVGltZSh2YWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGltZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlIDwgdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWUgPD0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA9PT0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA+IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlID49IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvcGVyYXRvci4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBpbnRlbGxpZ2VudGx5IGd1ZXNzIHRoZSBkYXRlIGJ5IGNsb3NlbHkgbWF0Y2hpbmcgdGhlIHNwZWNpZmljIGZvcm1hdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlXG4gICAgICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBndWVzc0RhdGU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZm10ID0gbmV3IERhdGVGb3JtYXR0ZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBmbXQuZ3Vlc3NEYXRlKHZhbHVlLCBmb3JtYXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgVW5peCB0aW1lc3RhbXAgYmFzZWQgb24gUEhQIGZ1bmN0aW9uIHN0cm90b3RpbWUuXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lcy9mdW5jdGlvbi5zdHJ0b3RpbWUucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cnRvdGltZS9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHRleHRcbiAgICAgICAgICogQHBhcmFtIG5vd1xuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgICAgICovXG4gICAgICAgIHN0cnRvdGltZTogZnVuY3Rpb24gKHRleHQsIG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cnRvdGltZSh0ZXh0LCBub3cpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgaWYgdmFsdWUgaXMgbnVtZXJpYy5cbiAgICAgICAgICogaHR0cDovL3BocC5uZXQvbWFudWFsL2VzL3Zhci5pc19udW1lcmljLnBocFxuICAgICAgICAgKiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9pc19udW1lcmljL1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbWl4ZWRfdmFyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAgICAgKi9cbiAgICAgICAgaXNfbnVtZXJpYzogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzX251bWVyaWMobWl4ZWRfdmFyKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBvZiB0eXBlIEFycmF5LlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5I1BvbHlmaWxsXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBhcmdcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBpc0FycmF5OiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBBcnJheSBkaWZmIGJhc2VkIG9uIFBIUCBmdW5jdGlvbiBhcnJheV9kaWZmLlxuICAgICAgICAgKiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZXMvZnVuY3Rpb24uYXJyYXlfZGlmZi5waHBcbiAgICAgICAgICogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvYXJyYXlfZGlmZi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheURpZmY6IGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlfZGlmZihhcnIxLCBhcnIyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgd2hldGhlciB0d28gYXJyYXlzIGFyZSBlcXVhbCB0byBvbmUgYW5vdGhlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheUVxdWFsczogZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShhcnIxKSB8fCAhIHRoaXMuaXNBcnJheShhcnIyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICQuaXNFbXB0eU9iamVjdCh0aGlzLmFycmF5RGlmZihhcnIxLCBhcnIyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2VzIGVsZW1lbnQgZGVwZW5kYW50IGZyb20gb3RoZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWxpZGF0b3JcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50OiBmdW5jdGlvbih2YWxpZGF0b3IsIGVsZW1lbnQsIG5hbWUpIHtcblxuICAgICAgICAgICAgdmFyIGVsPXZhbGlkYXRvci5maW5kQnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIGVsWzBdIT09dW5kZWZpbmVkICAmJiB2YWxpZGF0b3Iuc2V0dGluZ3Mub25mb2N1c291dCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSAnYmx1cic7XG4gICAgICAgICAgICAgICAgaWYgKGVsWzBdLnRhZ05hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxbMF0udHlwZSA9PT0gJ3JhZGlvJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdjbGljayc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lID0gJy52YWxpZGF0ZS1sYXJhdmVsVmFsaWRhdGlvbic7XG4gICAgICAgICAgICAgICAgZWwub2ZmKCBydWxlTmFtZSApXG4gICAgICAgICAgICAgICAgICAgIC5vZmYoZXZlbnQgKyBydWxlTmFtZSArICctJyArIGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCBldmVudCArIHJ1bGVOYW1lICsgJy0nICsgZWxlbWVudC5uYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoIGVsZW1lbnQgKS52YWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsWzBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgZXJyb3IgQWpheCByZXNwb25zZSBhbmQgZ2V0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmVzcG9uc2UgPSBbJ1dob29wcywgbG9va3MgbGlrZSBzb21ldGhpbmcgd2VudCB3cm9uZy4nXTtcbiAgICAgICAgICAgIGlmICgncmVzcG9uc2VUZXh0JyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dC5tYXRjaCgvPGgxXFxzKj4oLiopPFxcL2gxXFxzKj4vaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheShlcnJvck1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmVzcG9uc2UgPSBbZXJyb3JNc2dbMV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRXNjYXBlIHN0cmluZyB0byB1c2UgYXMgUmVndWxhciBFeHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gc3RyXG4gICAgICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhdGUgUmVnRXhwIGZyb20gd2lsZGNhcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICAgICAgICovXG4gICAgICAgIHJlZ2V4RnJvbVdpbGRjYXJkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdChcIlsqXVwiKTtcbiAgICAgICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlZ2V4cFBhcnRzID0gbmFtZVBhcnRzLm1hcChmdW5jdGlvbihjdXJyZW50VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAnWyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gJ10nICtjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhcmF2ZWxWYWxpZGF0aW9uLmhlbHBlcnMuZXNjYXBlUmVnRXhwKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nK3JlZ2V4cFBhcnRzLmpvaW4oJ1teXFxcXF1dKicpKyckJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lcmdlIGFkZGl0aW9uYWwgbGFyYXZlbCB2YWxpZGF0aW9uIHJ1bGVzIGludG8gdGhlIGN1cnJlbnQgcnVsZSBzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxlc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UnVsZXNcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG1lcmdlUnVsZXM6IGZ1bmN0aW9uIChydWxlcywgbmV3UnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBydWxlc0xpc3QgPSB7XG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb24gfHwgW10sXG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uUmVtb3RlJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb25SZW1vdGUgfHwgW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNMaXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBydWxlc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcnVsZXNba2V5XSA9IHJ1bGVzW2tleV0uY29uY2F0KHJ1bGVzTGlzdFtrZXldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Timezone Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n helpers: {\n\n /**\n * Check if the specified timezone is valid.\n *\n * @param value\n * @returns {boolean}\n */\n isTimezone: function (value) {\n\n var timezones={\n \"africa\": [\n \"abidjan\",\n \"accra\",\n \"addis_ababa\",\n \"algiers\",\n \"asmara\",\n \"bamako\",\n \"bangui\",\n \"banjul\",\n \"bissau\",\n \"blantyre\",\n \"brazzaville\",\n \"bujumbura\",\n \"cairo\",\n \"casablanca\",\n \"ceuta\",\n \"conakry\",\n \"dakar\",\n \"dar_es_salaam\",\n \"djibouti\",\n \"douala\",\n \"el_aaiun\",\n \"freetown\",\n \"gaborone\",\n \"harare\",\n \"johannesburg\",\n \"juba\",\n \"kampala\",\n \"khartoum\",\n \"kigali\",\n \"kinshasa\",\n \"lagos\",\n \"libreville\",\n \"lome\",\n \"luanda\",\n \"lubumbashi\",\n \"lusaka\",\n \"malabo\",\n \"maputo\",\n \"maseru\",\n \"mbabane\",\n \"mogadishu\",\n \"monrovia\",\n \"nairobi\",\n \"ndjamena\",\n \"niamey\",\n \"nouakchott\",\n \"ouagadougou\",\n \"porto-novo\",\n \"sao_tome\",\n \"tripoli\",\n \"tunis\",\n \"windhoek\"\n ],\n \"america\": [\n \"adak\",\n \"anchorage\",\n \"anguilla\",\n \"antigua\",\n \"araguaina\",\n \"argentina\\/buenos_aires\",\n \"argentina\\/catamarca\",\n \"argentina\\/cordoba\",\n \"argentina\\/jujuy\",\n \"argentina\\/la_rioja\",\n \"argentina\\/mendoza\",\n \"argentina\\/rio_gallegos\",\n \"argentina\\/salta\",\n \"argentina\\/san_juan\",\n \"argentina\\/san_luis\",\n \"argentina\\/tucuman\",\n \"argentina\\/ushuaia\",\n \"aruba\",\n \"asuncion\",\n \"atikokan\",\n \"bahia\",\n \"bahia_banderas\",\n \"barbados\",\n \"belem\",\n \"belize\",\n \"blanc-sablon\",\n \"boa_vista\",\n \"bogota\",\n \"boise\",\n \"cambridge_bay\",\n \"campo_grande\",\n \"cancun\",\n \"caracas\",\n \"cayenne\",\n \"cayman\",\n \"chicago\",\n \"chihuahua\",\n \"costa_rica\",\n \"creston\",\n \"cuiaba\",\n \"curacao\",\n \"danmarkshavn\",\n \"dawson\",\n \"dawson_creek\",\n \"denver\",\n \"detroit\",\n \"dominica\",\n \"edmonton\",\n \"eirunepe\",\n \"el_salvador\",\n \"fortaleza\",\n \"glace_bay\",\n \"godthab\",\n \"goose_bay\",\n \"grand_turk\",\n \"grenada\",\n \"guadeloupe\",\n \"guatemala\",\n \"guayaquil\",\n \"guyana\",\n \"halifax\",\n \"havana\",\n \"hermosillo\",\n \"indiana\\/indianapolis\",\n \"indiana\\/knox\",\n \"indiana\\/marengo\",\n \"indiana\\/petersburg\",\n \"indiana\\/tell_city\",\n \"indiana\\/vevay\",\n \"indiana\\/vincennes\",\n \"indiana\\/winamac\",\n \"inuvik\",\n \"iqaluit\",\n \"jamaica\",\n \"juneau\",\n \"kentucky\\/louisville\",\n \"kentucky\\/monticello\",\n \"kralendijk\",\n \"la_paz\",\n \"lima\",\n \"los_angeles\",\n \"lower_princes\",\n \"maceio\",\n \"managua\",\n \"manaus\",\n \"marigot\",\n \"martinique\",\n \"matamoros\",\n \"mazatlan\",\n \"menominee\",\n \"merida\",\n \"metlakatla\",\n \"mexico_city\",\n \"miquelon\",\n \"moncton\",\n \"monterrey\",\n \"montevideo\",\n \"montreal\",\n \"montserrat\",\n \"nassau\",\n \"new_york\",\n \"nipigon\",\n \"nome\",\n \"noronha\",\n \"north_dakota\\/beulah\",\n \"north_dakota\\/center\",\n \"north_dakota\\/new_salem\",\n \"ojinaga\",\n \"panama\",\n \"pangnirtung\",\n \"paramaribo\",\n \"phoenix\",\n \"port-au-prince\",\n \"port_of_spain\",\n \"porto_velho\",\n \"puerto_rico\",\n \"rainy_river\",\n \"rankin_inlet\",\n \"recife\",\n \"regina\",\n \"resolute\",\n \"rio_branco\",\n \"santa_isabel\",\n \"santarem\",\n \"santiago\",\n \"santo_domingo\",\n \"sao_paulo\",\n \"scoresbysund\",\n \"shiprock\",\n \"sitka\",\n \"st_barthelemy\",\n \"st_johns\",\n \"st_kitts\",\n \"st_lucia\",\n \"st_thomas\",\n \"st_vincent\",\n \"swift_current\",\n \"tegucigalpa\",\n \"thule\",\n \"thunder_bay\",\n \"tijuana\",\n \"toronto\",\n \"tortola\",\n \"vancouver\",\n \"whitehorse\",\n \"winnipeg\",\n \"yakutat\",\n \"yellowknife\"\n ],\n \"antarctica\": [\n \"casey\",\n \"davis\",\n \"dumontdurville\",\n \"macquarie\",\n \"mawson\",\n \"mcmurdo\",\n \"palmer\",\n \"rothera\",\n \"south_pole\",\n \"syowa\",\n \"vostok\"\n ],\n \"arctic\": [\n \"longyearbyen\"\n ],\n \"asia\": [\n \"aden\",\n \"almaty\",\n \"amman\",\n \"anadyr\",\n \"aqtau\",\n \"aqtobe\",\n \"ashgabat\",\n \"baghdad\",\n \"bahrain\",\n \"baku\",\n \"bangkok\",\n \"beirut\",\n \"bishkek\",\n \"brunei\",\n \"choibalsan\",\n \"chongqing\",\n \"colombo\",\n \"damascus\",\n \"dhaka\",\n \"dili\",\n \"dubai\",\n \"dushanbe\",\n \"gaza\",\n \"harbin\",\n \"hebron\",\n \"ho_chi_minh\",\n \"hong_kong\",\n \"hovd\",\n \"irkutsk\",\n \"jakarta\",\n \"jayapura\",\n \"jerusalem\",\n \"kabul\",\n \"kamchatka\",\n \"karachi\",\n \"kashgar\",\n \"kathmandu\",\n \"khandyga\",\n \"kolkata\",\n \"krasnoyarsk\",\n \"kuala_lumpur\",\n \"kuching\",\n \"kuwait\",\n \"macau\",\n \"magadan\",\n \"makassar\",\n \"manila\",\n \"muscat\",\n \"nicosia\",\n \"novokuznetsk\",\n \"novosibirsk\",\n \"omsk\",\n \"oral\",\n \"phnom_penh\",\n \"pontianak\",\n \"pyongyang\",\n \"qatar\",\n \"qyzylorda\",\n \"rangoon\",\n \"riyadh\",\n \"sakhalin\",\n \"samarkand\",\n \"seoul\",\n \"shanghai\",\n \"singapore\",\n \"taipei\",\n \"tashkent\",\n \"tbilisi\",\n \"tehran\",\n \"thimphu\",\n \"tokyo\",\n \"ulaanbaatar\",\n \"urumqi\",\n \"ust-nera\",\n \"vientiane\",\n \"vladivostok\",\n \"yakutsk\",\n \"yekaterinburg\",\n \"yerevan\"\n ],\n \"atlantic\": [\n \"azores\",\n \"bermuda\",\n \"canary\",\n \"cape_verde\",\n \"faroe\",\n \"madeira\",\n \"reykjavik\",\n \"south_georgia\",\n \"st_helena\",\n \"stanley\"\n ],\n \"australia\": [\n \"adelaide\",\n \"brisbane\",\n \"broken_hill\",\n \"currie\",\n \"darwin\",\n \"eucla\",\n \"hobart\",\n \"lindeman\",\n \"lord_howe\",\n \"melbourne\",\n \"perth\",\n \"sydney\"\n ],\n \"europe\": [\n \"amsterdam\",\n \"andorra\",\n \"athens\",\n \"belgrade\",\n \"berlin\",\n \"bratislava\",\n \"brussels\",\n \"bucharest\",\n \"budapest\",\n \"busingen\",\n \"chisinau\",\n \"copenhagen\",\n \"dublin\",\n \"gibraltar\",\n \"guernsey\",\n \"helsinki\",\n \"isle_of_man\",\n \"istanbul\",\n \"jersey\",\n \"kaliningrad\",\n \"kiev\",\n \"lisbon\",\n \"ljubljana\",\n \"london\",\n \"luxembourg\",\n \"madrid\",\n \"malta\",\n \"mariehamn\",\n \"minsk\",\n \"monaco\",\n \"moscow\",\n \"oslo\",\n \"paris\",\n \"podgorica\",\n \"prague\",\n \"riga\",\n \"rome\",\n \"samara\",\n \"san_marino\",\n \"sarajevo\",\n \"simferopol\",\n \"skopje\",\n \"sofia\",\n \"stockholm\",\n \"tallinn\",\n \"tirane\",\n \"uzhgorod\",\n \"vaduz\",\n \"vatican\",\n \"vienna\",\n \"vilnius\",\n \"volgograd\",\n \"warsaw\",\n \"zagreb\",\n \"zaporozhye\",\n \"zurich\"\n ],\n \"indian\": [\n \"antananarivo\",\n \"chagos\",\n \"christmas\",\n \"cocos\",\n \"comoro\",\n \"kerguelen\",\n \"mahe\",\n \"maldives\",\n \"mauritius\",\n \"mayotte\",\n \"reunion\"\n ],\n \"pacific\": [\n \"apia\",\n \"auckland\",\n \"chatham\",\n \"chuuk\",\n \"easter\",\n \"efate\",\n \"enderbury\",\n \"fakaofo\",\n \"fiji\",\n \"funafuti\",\n \"galapagos\",\n \"gambier\",\n \"guadalcanal\",\n \"guam\",\n \"honolulu\",\n \"johnston\",\n \"kiritimati\",\n \"kosrae\",\n \"kwajalein\",\n \"majuro\",\n \"marquesas\",\n \"midway\",\n \"nauru\",\n \"niue\",\n \"norfolk\",\n \"noumea\",\n \"pago_pago\",\n \"palau\",\n \"pitcairn\",\n \"pohnpei\",\n \"port_moresby\",\n \"rarotonga\",\n \"saipan\",\n \"tahiti\",\n \"tarawa\",\n \"tongatapu\",\n \"wake\",\n \"wallis\"\n ],\n \"utc\": [\n \"\"\n ]\n };\n\n var tzparts= value.split('/',2);\n var continent=tzparts[0].toLowerCase();\n var city='';\n if (tzparts[1]) {\n city=tzparts[1].toLowerCase();\n }\n\n return (continent in timezones && ( timezones[continent].length===0 || timezones[continent].indexOf(city)!==-1))\n }\n }\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Methods that implement Laravel Validations\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n methods:{\n\n helpers: laravelValidation.helpers,\n\n jsRemoteTimer:0,\n\n /**\n * \"Validate\" optional attributes.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Sometimes: function() {\n return true;\n },\n\n /**\n * Bail This is the default behaivour os JSValidation.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Bail: function() {\n return true;\n },\n\n /**\n * \"Indicate\" validation should pass if value is null.\n * Always returns true, just lets us put \"nullable\" in rules.\n *\n * @return {boolean}\n */\n Nullable: function() {\n return true;\n },\n\n /**\n * Validate the given attribute is filled if it is present.\n */\n Filled: function(value, element) {\n return $.validator.methods.required.call(this, value, element, true);\n },\n\n\n /**\n * Validate that a required attribute exists.\n */\n Required: function(value, element) {\n return $.validator.methods.required.call(this, value, element);\n },\n\n /**\n * Validate that an attribute exists when any other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWith: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required=required || (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWithAll: function(value, element, params) {\n var validator=this,\n required=true;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when any other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithout: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required ||\n target===undefined||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n );\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithoutAll: function(value, element, params) {\n var validator=this,\n required=true,\n currentObject=this;\n\n $.each(params,function(i, param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target===undefined ||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when another attribute has a given value.\n *\n * @return {boolean}\n */\n RequiredIf: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return $.validator.methods.required.call(\n this, value, element, true\n );\n }\n }\n }\n\n return true;\n },\n\n /**\n * Validate that an attribute exists when another\n * attribute does not have a given value.\n *\n * @return {boolean}\n */\n RequiredUnless: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return true;\n }\n }\n }\n\n return $.validator.methods.required.call(\n this, value, element, true\n );\n\n },\n\n /**\n * Validate that an attribute has a matching confirmation.\n *\n * @return {boolean}\n */\n Confirmed: function(value, element, params) {\n return laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that two attributes match.\n *\n * @return {boolean}\n */\n Same: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n return String(value) === String(this.elementValue(target));\n }\n return false;\n },\n\n /**\n * Validate that the values of an attribute is in another attribute.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n * @constructor\n */\n InArray: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return found;\n },\n\n /**\n * Validate an attribute is unique among other values.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n */\n Distinct: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName !== element.name && targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return !found;\n },\n\n\n /**\n * Validate that an attribute is different from another attribute.\n *\n * @return {boolean}\n */\n Different: function(value, element, params) {\n return ! laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that an attribute was \"accepted\".\n * This validation rule implies the attribute is \"required\".\n *\n * @return {boolean}\n */\n Accepted: function(value) {\n var regex = new RegExp(\"^(?:(yes|on|1|true))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an array.\n *\n * @param value\n * @param element\n */\n Array: function(value, element) {\n if (element.name.indexOf('[') !== -1 && element.name.indexOf(']') !== -1) {\n return true;\n }\n\n return laravelValidation.helpers.isArray(value);\n },\n\n /**\n * Validate that an attribute is a boolean.\n *\n * @return {boolean}\n */\n Boolean: function(value) {\n var regex= new RegExp(\"^(?:(true|false|1|0))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an integer.\n *\n * @return {boolean}\n */\n Integer: function(value) {\n var regex= new RegExp(\"^(?:-?\\\\d+)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is numeric.\n */\n Numeric: function(value, element) {\n return $.validator.methods.number.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a string.\n *\n * @return {boolean}\n */\n String: function(value) {\n return typeof value === 'string';\n },\n\n /**\n * The field under validation must be numeric and must have an exact length of value.\n */\n Digits: function(value, element, params) {\n return (\n $.validator.methods.number.call(this, value, element, true) &&\n value.length === parseInt(params, 10)\n );\n },\n\n /**\n * The field under validation must have a length between the given min and max.\n */\n DigitsBetween: function(value, element, params) {\n return ($.validator.methods.number.call(this, value, element, true)\n && value.length>=parseFloat(params[0]) && value.length<=parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute.\n *\n * @return {boolean}\n */\n Size: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) === parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is between a set of values.\n *\n * @return {boolean}\n */\n Between: function(value, element, params) {\n return ( laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]) &&\n laravelValidation.helpers.getSize(this,element,value) <= parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute is greater than a minimum value.\n *\n * @return {boolean}\n */\n Min: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is less than a maximum value.\n *\n * @return {boolean}\n */\n Max: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) <= parseFloat(params[0]);\n },\n\n /**\n * Validate an attribute is contained within a list of values.\n *\n * @return {boolean}\n */\n In: function(value, element, params) {\n if (laravelValidation.helpers.isArray(value)\n && laravelValidation.helpers.hasRules(element, \"Array\")\n ) {\n var diff = laravelValidation.helpers.arrayDiff(value, params);\n\n return Object.keys(diff).length === 0;\n }\n\n return params.indexOf(value.toString()) !== -1;\n },\n\n /**\n * Validate an attribute is not contained within a list of values.\n *\n * @return {boolean}\n */\n NotIn: function(value, element, params) {\n return params.indexOf(value.toString()) === -1;\n },\n\n /**\n * Validate that an attribute is a valid IP.\n *\n * @return {boolean}\n */\n Ip: function(value) {\n return /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(value) ||\n /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);\n },\n\n /**\n * Validate that an attribute is a valid e-mail address.\n */\n Email: function(value, element) {\n return $.validator.methods.email.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a valid URL.\n */\n Url: function(value, element) {\n return $.validator.methods.url.call(this, value, element, true);\n },\n\n /**\n * The field under validation must be a successfully uploaded file.\n *\n * @return {boolean}\n */\n File: function(value, element) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if ('files' in element ) {\n return (element.files.length > 0);\n }\n return false;\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n *\n * @return {boolean}\n */\n Mimes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n return (fileinfo !== false && lowerParams.indexOf(fileinfo.extension.toLowerCase())!==-1);\n },\n\n /**\n * The file under validation must match one of the given MIME types.\n *\n * @return {boolean}\n */\n Mimetypes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n\n if (fileinfo === false) {\n return false;\n }\n return (lowerParams.indexOf(fileinfo.type.toLowerCase())!==-1);\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n */\n Image: function(value, element) {\n return laravelValidation.methods.Mimes.call(this, value, element, [\n 'jpg', 'png', 'gif', 'bmp', 'svg', 'jpeg'\n ]);\n },\n\n /**\n * Validate dimensions of Image.\n *\n * @return {boolean|string}\n */\n Dimensions: function(value, element, params, callback) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if (element.files === null || typeof element.files[0] === 'undefined') {\n return false;\n }\n\n var fr = new FileReader;\n fr.onload = function () {\n var img = new Image();\n img.onload = function () {\n var height = parseFloat(img.naturalHeight);\n var width = parseFloat(img.naturalWidth);\n var ratio = width / height;\n var notValid = ((params['width']) && parseFloat(params['width'] !== width)) ||\n ((params['min_width']) && parseFloat(params['min_width']) > width) ||\n ((params['max_width']) && parseFloat(params['max_width']) < width) ||\n ((params['height']) && parseFloat(params['height']) !== height) ||\n ((params['min_height']) && parseFloat(params['min_height']) > height) ||\n ((params['max_height']) && parseFloat(params['max_height']) < height) ||\n ((params['ratio']) && ratio !== parseFloat(eval(params['ratio']))\n );\n callback(! notValid);\n };\n img.onerror = function() {\n callback(false);\n };\n img.src = fr.result;\n };\n fr.readAsDataURL(element.files[0]);\n\n return 'pending';\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n Alpha: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n\n var regex = new RegExp(\"^(?:^[a-z\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n\n },\n\n /**\n * Validate that an attribute contains only alpha-numeric characters.\n *\n * @return {boolean}\n */\n AlphaNum: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n AlphaDash: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC_-]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute passes a regular expression check.\n *\n * @return {boolean}\n */\n Regex: function(value, element, params) {\n var invalidModifiers=['x','s','u','X','U','A'];\n // Converting php regular expression\n var phpReg= new RegExp('^(?:\\/)(.*\\\\\\/?[^\\/]*|[^\\/]*)(?:\\/)([gmixXsuUAJ]*)?$');\n var matches=params[0].match(phpReg);\n if (matches === null) {\n return false;\n }\n // checking modifiers\n var php_modifiers=[];\n if (matches[2]!==undefined) {\n php_modifiers=matches[2].split('');\n for (var i=0; i');\n },\n\n /**\n * Validate the date is equal or after a given date.\n *\n * @return {boolean}\n */\n AfterOrEqual: function(value, element, params) {\n return laravelValidation.helpers.compareDates(this, value, element, params, '>=');\n },\n\n\n /**\n * Validate that an attribute is a valid date.\n */\n Timezone: function(value) {\n return laravelValidation.helpers.isTimezone(value);\n },\n\n\n /**\n * Validate the attribute is a valid JSON string.\n *\n * @param value\n * @return bool\n */\n Json: function(value) {\n var result = true;\n try {\n JSON.parse(value);\n } catch (e) {\n result = false;\n }\n return result;\n }\n }\n});\n"]} \ No newline at end of file +{"version":3,"sources":["node_modules/jquery-validation/dist/jquery.validate.js","node_modules/php-date-formatter/js/php-date-formatter.js","resources/assets/js/jsvalidation.js","es-build/helpers.js","resources/assets/js/timezones.js","resources/assets/js/validations.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7oBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACr4DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"jsvalidation.js","sourcesContent":["/*!\r\n * jQuery Validation Plugin v1.19.2\r\n *\r\n * https://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2020 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\r\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\r\n}));","/*!\r\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2020\r\n * @version 1.3.6\r\n *\r\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\r\n * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery. The\r\n * library also adds support for Universal Module Definition (UMD).\r\n * \r\n * @see http://php.net/manual/en/function.date.php\r\n *\r\n * For more JQuery plugins visit http://plugins.krajee.com\r\n * For more Yii related demos visit http://demos.krajee.com\r\n */\r\n(function (root, factory) {\r\n // noinspection JSUnresolvedVariable\r\n if (typeof define === 'function' && define.amd) { // AMD\r\n // noinspection JSUnresolvedFunction\r\n define([], factory);\r\n } else {\r\n // noinspection JSUnresolvedVariable\r\n if (typeof module === 'object' && module.exports) { // Node\r\n // noinspection JSUnresolvedVariable\r\n module.exports = factory();\r\n } else { // Browser globals\r\n root.DateFormatter = factory();\r\n }\r\n }\r\n}(typeof self !== 'undefined' ? self : this, function () {\r\n var DateFormatter, $h;\r\n /**\r\n * Global helper object\r\n */\r\n $h = {\r\n DAY: 1000 * 60 * 60 * 24,\r\n HOUR: 3600,\r\n defaults: {\r\n dateSettings: {\r\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n months: [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\r\n 'August', 'September', 'October', 'November', 'December'\r\n ],\r\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n meridiem: ['AM', 'PM'],\r\n ordinal: function (number) {\r\n var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};\r\n return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];\r\n }\r\n },\r\n separators: /[ \\-+\\/.:@]/g,\r\n validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,\r\n intParts: /[djwNzmnyYhHgGis]/g,\r\n tzParts: /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\r\n tzClip: /[^-+\\dA-Z]/g\r\n },\r\n getInt: function (str, radix) {\r\n return parseInt(str, (radix ? radix : 10));\r\n },\r\n compare: function (str1, str2) {\r\n return typeof (str1) === 'string' && typeof (str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();\r\n },\r\n lpad: function (value, length, chr) {\r\n var val = value.toString();\r\n chr = chr || '0';\r\n return val.length < length ? $h.lpad(chr + val, length) : val;\r\n },\r\n merge: function (out) {\r\n var i, obj;\r\n out = out || {};\r\n for (i = 1; i < arguments.length; i++) {\r\n obj = arguments[i];\r\n if (!obj) {\r\n continue;\r\n }\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (typeof obj[key] === 'object') {\r\n $h.merge(out[key], obj[key]);\r\n } else {\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n }\r\n return out;\r\n },\r\n getIndex: function (val, arr) {\r\n for (var i = 0; i < arr.length; i++) {\r\n if (arr[i].toLowerCase() === val.toLowerCase()) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n };\r\n\r\n /**\r\n * Date Formatter Library Constructor\r\n * @param options\r\n * @constructor\r\n */\r\n DateFormatter = function (options) {\r\n var self = this, config = $h.merge($h.defaults, options);\r\n self.dateSettings = config.dateSettings;\r\n self.separators = config.separators;\r\n self.validParts = config.validParts;\r\n self.intParts = config.intParts;\r\n self.tzParts = config.tzParts;\r\n self.tzClip = config.tzClip;\r\n };\r\n\r\n /**\r\n * DateFormatter Library Prototype\r\n */\r\n DateFormatter.prototype = {\r\n constructor: DateFormatter,\r\n getMonth: function (val) {\r\n var self = this, i;\r\n i = $h.getIndex(val, self.dateSettings.monthsShort) + 1;\r\n if (i === 0) {\r\n i = $h.getIndex(val, self.dateSettings.months) + 1;\r\n }\r\n return i;\r\n },\r\n parseDate: function (vDate, vFormat) {\r\n var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,\r\n vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,\r\n out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};\r\n if (!vDate) {\r\n return null;\r\n }\r\n if (vDate instanceof Date) {\r\n return vDate;\r\n }\r\n if (vFormat === 'U') {\r\n i = $h.getInt(vDate);\r\n return i ? new Date(i * 1000) : vDate;\r\n }\r\n switch (typeof vDate) {\r\n case 'number':\r\n return new Date(vDate);\r\n case 'string':\r\n break;\r\n default:\r\n return null;\r\n }\r\n vFormatParts = vFormat.match(self.validParts);\r\n if (!vFormatParts || vFormatParts.length === 0) {\r\n throw new Error('Invalid date format definition.');\r\n }\r\n for (i = vFormatParts.length - 1; i >= 0; i--) {\r\n if (vFormatParts[i] === 'S') {\r\n vFormatParts.splice(i, 1);\r\n }\r\n }\r\n vDateParts = vDate.replace(self.separators, '\\0').split('\\0');\r\n for (i = 0; i < vDateParts.length; i++) {\r\n vDatePart = vDateParts[i];\r\n iDatePart = $h.getInt(vDatePart);\r\n switch (vFormatParts[i]) {\r\n case 'y':\r\n case 'Y':\r\n if (iDatePart) {\r\n len = vDatePart.length;\r\n out.year = len === 2 ? $h.getInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vDateFlag = true;\r\n break;\r\n case 'm':\r\n case 'n':\r\n case 'M':\r\n case 'F':\r\n if (isNaN(iDatePart)) {\r\n vMonth = self.getMonth(vDatePart);\r\n if (vMonth > 0) {\r\n out.month = vMonth;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n if (iDatePart >= 1 && iDatePart <= 12) {\r\n out.month = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n }\r\n vDateFlag = true;\r\n break;\r\n case 'd':\r\n case 'j':\r\n if (iDatePart >= 1 && iDatePart <= 31) {\r\n out.day = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vDateFlag = true;\r\n break;\r\n case 'g':\r\n case 'h':\r\n vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :\r\n ((vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1);\r\n mer = vDateParts[vMeriIndex];\r\n if (vMeriIndex !== -1) {\r\n vMeriOffset = $h.compare(mer, vSettings.meridiem[0]) ? 0 :\r\n ($h.compare(mer, vSettings.meridiem[1]) ? 12 : -1);\r\n if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset !== -1) {\r\n out.hour = iDatePart % 12 === 0 ? vMeriOffset : iDatePart + vMeriOffset;\r\n } else {\r\n if (iDatePart >= 0 && iDatePart <= 23) {\r\n out.hour = iDatePart;\r\n }\r\n }\r\n } else {\r\n if (iDatePart >= 0 && iDatePart <= 23) {\r\n out.hour = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n }\r\n vTimeFlag = true;\r\n break;\r\n case 'G':\r\n case 'H':\r\n if (iDatePart >= 0 && iDatePart <= 23) {\r\n out.hour = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vTimeFlag = true;\r\n break;\r\n case 'i':\r\n if (iDatePart >= 0 && iDatePart <= 59) {\r\n out.min = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vTimeFlag = true;\r\n break;\r\n case 's':\r\n if (iDatePart >= 0 && iDatePart <= 59) {\r\n out.sec = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vTimeFlag = true;\r\n break;\r\n }\r\n }\r\n if (vDateFlag === true) {\r\n var varY = out.year || 0, varM = out.month ? out.month - 1 : 0, varD = out.day || 1;\r\n out.date = new Date(varY, varM, varD, out.hour, out.min, out.sec, 0);\r\n } else {\r\n if (vTimeFlag !== true) {\r\n return null;\r\n }\r\n out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);\r\n }\r\n return out.date;\r\n },\r\n guessDate: function (vDateStr, vFormat) {\r\n if (typeof vDateStr !== 'string') {\r\n return vDateStr;\r\n }\r\n var self = this, vParts = vDateStr.replace(self.separators, '\\0').split('\\0'), vPattern = /^[djmn]/g, len,\r\n vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, n, iPart, iSec;\r\n\r\n if (!vPattern.test(vFormatParts[0])) {\r\n return vDateStr;\r\n }\r\n\r\n for (i = 0; i < vParts.length; i++) {\r\n vDigit = 2;\r\n iPart = vParts[i];\r\n iSec = $h.getInt(iPart.substr(0, 2));\r\n if (isNaN(iSec)) {\r\n return null;\r\n }\r\n switch (i) {\r\n case 0:\r\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\r\n vDate.setMonth(iSec - 1);\r\n } else {\r\n vDate.setDate(iSec);\r\n }\r\n break;\r\n case 1:\r\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\r\n vDate.setDate(iSec);\r\n } else {\r\n vDate.setMonth(iSec - 1);\r\n }\r\n break;\r\n case 2:\r\n vYear = vDate.getFullYear();\r\n len = iPart.length;\r\n vDigit = len < 4 ? len : 4;\r\n vYear = $h.getInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4));\r\n if (!vYear) {\r\n return null;\r\n }\r\n vDate.setFullYear(vYear);\r\n break;\r\n case 3:\r\n vDate.setHours(iSec);\r\n break;\r\n case 4:\r\n vDate.setMinutes(iSec);\r\n break;\r\n case 5:\r\n vDate.setSeconds(iSec);\r\n break;\r\n }\r\n n = iPart.substr(vDigit);\r\n if (n.length > 0) {\r\n vParts.splice(i + 1, 0, n);\r\n }\r\n }\r\n return vDate;\r\n },\r\n parseFormat: function (vChar, vDate) {\r\n var self = this, vSettings = self.dateSettings, fmt, backslash = /\\\\?(.?)/gi, doFormat = function (t, s) {\r\n return fmt[t] ? fmt[t]() : s;\r\n };\r\n fmt = {\r\n /////////\r\n // DAY //\r\n /////////\r\n /**\r\n * Day of month with leading 0: `01..31`\r\n * @return {string}\r\n */\r\n d: function () {\r\n return $h.lpad(fmt.j(), 2);\r\n },\r\n /**\r\n * Shorthand day name: `Mon...Sun`\r\n * @return {string}\r\n */\r\n D: function () {\r\n return vSettings.daysShort[fmt.w()];\r\n },\r\n /**\r\n * Day of month: `1..31`\r\n * @return {number}\r\n */\r\n j: function () {\r\n return vDate.getDate();\r\n },\r\n /**\r\n * Full day name: `Monday...Sunday`\r\n * @return {string}\r\n */\r\n l: function () {\r\n return vSettings.days[fmt.w()];\r\n },\r\n /**\r\n * ISO-8601 day of week: `1[Mon]..7[Sun]`\r\n * @return {number}\r\n */\r\n N: function () {\r\n return fmt.w() || 7;\r\n },\r\n /**\r\n * Day of week: `0[Sun]..6[Sat]`\r\n * @return {number}\r\n */\r\n w: function () {\r\n return vDate.getDay();\r\n },\r\n /**\r\n * Day of year: `0..365`\r\n * @return {number}\r\n */\r\n z: function () {\r\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);\r\n return Math.round((a - b) / $h.DAY);\r\n },\r\n\r\n //////////\r\n // WEEK //\r\n //////////\r\n /**\r\n * ISO-8601 week number\r\n * @return {number}\r\n */\r\n W: function () {\r\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);\r\n return $h.lpad(1 + Math.round((a - b) / $h.DAY / 7), 2);\r\n },\r\n\r\n ///////////\r\n // MONTH //\r\n ///////////\r\n /**\r\n * Full month name: `January...December`\r\n * @return {string}\r\n */\r\n F: function () {\r\n return vSettings.months[vDate.getMonth()];\r\n },\r\n /**\r\n * Month w/leading 0: `01..12`\r\n * @return {string}\r\n */\r\n m: function () {\r\n return $h.lpad(fmt.n(), 2);\r\n },\r\n /**\r\n * Shorthand month name; `Jan...Dec`\r\n * @return {string}\r\n */\r\n M: function () {\r\n return vSettings.monthsShort[vDate.getMonth()];\r\n },\r\n /**\r\n * Month: `1...12`\r\n * @return {number}\r\n */\r\n n: function () {\r\n return vDate.getMonth() + 1;\r\n },\r\n /**\r\n * Days in month: `28...31`\r\n * @return {number}\r\n */\r\n t: function () {\r\n return (new Date(fmt.Y(), fmt.n(), 0)).getDate();\r\n },\r\n\r\n //////////\r\n // YEAR //\r\n //////////\r\n /**\r\n * Is leap year? `0 or 1`\r\n * @return {number}\r\n */\r\n L: function () {\r\n var Y = fmt.Y();\r\n return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;\r\n },\r\n /**\r\n * ISO-8601 year\r\n * @return {number}\r\n */\r\n o: function () {\r\n var n = fmt.n(), W = fmt.W(), Y = fmt.Y();\r\n return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);\r\n },\r\n /**\r\n * Full year: `e.g. 1980...2010`\r\n * @return {number}\r\n */\r\n Y: function () {\r\n return vDate.getFullYear();\r\n },\r\n /**\r\n * Last two digits of year: `00...99`\r\n * @return {string}\r\n */\r\n y: function () {\r\n return fmt.Y().toString().slice(-2);\r\n },\r\n\r\n //////////\r\n // TIME //\r\n //////////\r\n /**\r\n * Meridian lower: `am or pm`\r\n * @return {string}\r\n */\r\n a: function () {\r\n return fmt.A().toLowerCase();\r\n },\r\n /**\r\n * Meridian upper: `AM or PM`\r\n * @return {string}\r\n */\r\n A: function () {\r\n var n = fmt.G() < 12 ? 0 : 1;\r\n return vSettings.meridiem[n];\r\n },\r\n /**\r\n * Swatch Internet time: `000..999`\r\n * @return {string}\r\n */\r\n B: function () {\r\n var H = vDate.getUTCHours() * $h.HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();\r\n return $h.lpad(Math.floor((H + i + s + $h.HOUR) / 86.4) % 1000, 3);\r\n },\r\n /**\r\n * 12-Hours: `1..12`\r\n * @return {number}\r\n */\r\n g: function () {\r\n return fmt.G() % 12 || 12;\r\n },\r\n /**\r\n * 24-Hours: `0..23`\r\n * @return {number}\r\n */\r\n G: function () {\r\n return vDate.getHours();\r\n },\r\n /**\r\n * 12-Hours with leading 0: `01..12`\r\n * @return {string}\r\n */\r\n h: function () {\r\n return $h.lpad(fmt.g(), 2);\r\n },\r\n /**\r\n * 24-Hours w/leading 0: `00..23`\r\n * @return {string}\r\n */\r\n H: function () {\r\n return $h.lpad(fmt.G(), 2);\r\n },\r\n /**\r\n * Minutes w/leading 0: `00..59`\r\n * @return {string}\r\n */\r\n i: function () {\r\n return $h.lpad(vDate.getMinutes(), 2);\r\n },\r\n /**\r\n * Seconds w/leading 0: `00..59`\r\n * @return {string}\r\n */\r\n s: function () {\r\n return $h.lpad(vDate.getSeconds(), 2);\r\n },\r\n /**\r\n * Microseconds: `000000-999000`\r\n * @return {string}\r\n */\r\n u: function () {\r\n return $h.lpad(vDate.getMilliseconds() * 1000, 6);\r\n },\r\n\r\n //////////////\r\n // TIMEZONE //\r\n //////////////\r\n /**\r\n * Timezone identifier: `e.g. Atlantic/Azores, ...`\r\n * @return {string}\r\n */\r\n e: function () {\r\n var str = /\\((.*)\\)/.exec(String(vDate))[1];\r\n return str || 'Coordinated Universal Time';\r\n },\r\n /**\r\n * DST observed? `0 or 1`\r\n * @return {number}\r\n */\r\n I: function () {\r\n var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),\r\n b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);\r\n return ((a - c) !== (b - d)) ? 1 : 0;\r\n },\r\n /**\r\n * Difference to GMT in hour format: `e.g. +0200`\r\n * @return {string}\r\n */\r\n O: function () {\r\n var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);\r\n return (tzo > 0 ? '-' : '+') + $h.lpad(Math.floor(a / 60) * 100 + a % 60, 4);\r\n },\r\n /**\r\n * Difference to GMT with colon: `e.g. +02:00`\r\n * @return {string}\r\n */\r\n P: function () {\r\n var O = fmt.O();\r\n return (O.substr(0, 3) + ':' + O.substr(3, 2));\r\n },\r\n /**\r\n * Timezone abbreviation: `e.g. EST, MDT, ...`\r\n * @return {string}\r\n */\r\n T: function () {\r\n var str = (String(vDate).match(self.tzParts) || ['']).pop().replace(self.tzClip, '');\r\n return str || 'UTC';\r\n },\r\n /**\r\n * Timezone offset in seconds: `-43200...50400`\r\n * @return {number}\r\n */\r\n Z: function () {\r\n return -vDate.getTimezoneOffset() * 60;\r\n },\r\n\r\n ////////////////////\r\n // FULL DATE TIME //\r\n ////////////////////\r\n /**\r\n * ISO-8601 date\r\n * @return {string}\r\n */\r\n c: function () {\r\n return 'Y-m-d\\\\TH:i:sP'.replace(backslash, doFormat);\r\n },\r\n /**\r\n * RFC 2822 date\r\n * @return {string}\r\n */\r\n r: function () {\r\n return 'D, d M Y H:i:s O'.replace(backslash, doFormat);\r\n },\r\n /**\r\n * Seconds since UNIX epoch\r\n * @return {number}\r\n */\r\n U: function () {\r\n return vDate.getTime() / 1000 || 0;\r\n }\r\n };\r\n return doFormat(vChar, vChar);\r\n },\r\n formatDate: function (vDate, vFormat) {\r\n var self = this, i, n, len, str, vChar, vDateStr = '', BACKSLASH = '\\\\';\r\n if (typeof vDate === 'string') {\r\n vDate = self.parseDate(vDate, vFormat);\r\n if (!vDate) {\r\n return null;\r\n }\r\n }\r\n if (vDate instanceof Date) {\r\n len = vFormat.length;\r\n for (i = 0; i < len; i++) {\r\n vChar = vFormat.charAt(i);\r\n if (vChar === 'S' || vChar === BACKSLASH) {\r\n continue;\r\n }\r\n if (i > 0 && vFormat.charAt(i - 1) === BACKSLASH) {\r\n vDateStr += vChar;\r\n continue;\r\n }\r\n str = self.parseFormat(vChar, vDate);\r\n if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {\r\n n = $h.getInt(str) || 0;\r\n str += self.dateSettings.ordinal(n);\r\n }\r\n vDateStr += str;\r\n }\r\n return vDateStr;\r\n }\r\n return '';\r\n }\r\n };\r\n return DateFormatter;\r\n}));","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\nvar laravelValidation;\nlaravelValidation = {\n\n implicitRules: ['Required','Confirmed'],\n\n /**\n * Initialize laravel validations.\n */\n init: function () {\n\n // Disable class rules and attribute rules\n $.validator.classRuleSettings = {};\n $.validator.attributeRules = function () {\n this.rules = {}\n };\n\n $.validator.dataRules = this.arrayRules;\n $.validator.prototype.arrayRulesCache = {};\n\n // Register validations methods\n this.setupValidations();\n },\n\n arrayRules: function(element) {\n\n var rules = {},\n validator = $.data( element.form, \"validator\"),\n cache = validator.arrayRulesCache;\n\n // Is not an Array\n if (element.name.indexOf('[') === -1) {\n return rules;\n }\n\n if (! (element.name in cache)) {\n cache[element.name] = {};\n }\n\n $.each(validator.settings.rules, function(name, tmpRules) {\n if (name in cache[element.name]) {\n rules = laravelValidation.helpers.mergeRules(rules, cache[element.name][name]);\n } else {\n cache[element.name][name] = {};\n\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(name);\n if (element.name.match(nameRegExp)) {\n var newRules = $.validator.normalizeRule(tmpRules) || {};\n cache[element.name][name] = newRules;\n\n rules = laravelValidation.helpers.mergeRules(rules, newRules);\n }\n }\n });\n\n return rules;\n },\n\n setupValidations: function () {\n\n /**\n * Validate a set of local JS based rules against an element.\n *\n * @param validator\n * @param values\n * @param element\n * @param rules\n * @returns {boolean}\n */\n var validateLocalRules = function (validator, values, element, rules) {\n var validated = true,\n previous = validator.previousValue(element);\n\n $.each(rules, function (i, param) {\n var implicit = param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1;\n var rule = param[0];\n var message = param[2];\n\n if (! implicit && validator.optional(element)) {\n validated = \"dependency-mismatch\";\n return false;\n }\n\n if (laravelValidation.methods[rule] !== undefined) {\n $.each(values, function(index, value) {\n validated = laravelValidation.methods[rule].call(validator, value, element, param[1], function(valid) {\n validator.settings.messages[element.name].laravelValidationRemote = previous.originalMessage;\n if (valid) {\n var submitted = validator.formSubmitted;\n validator.prepareElement(element);\n validator.formSubmitted = submitted;\n validator.successList.push(element);\n delete validator.invalid[element.name];\n validator.showErrors();\n } else {\n var errors = {};\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message;\n validator.invalid[element.name] = true;\n validator.showErrors(errors);\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n });\n\n // Break loop.\n if (validated === false) {\n return false;\n }\n });\n } else {\n validated = false;\n }\n\n if (validated !== true) {\n if (!validator.settings.messages[element.name] ) {\n validator.settings.messages[element.name] = {};\n }\n\n validator.settings.messages[element.name].laravelValidation= message;\n\n return false;\n }\n\n });\n\n return validated;\n };\n\n /**\n * Create JQueryValidation check to validate Laravel rules.\n */\n\n $.validator.addMethod(\"laravelValidation\", function (value, element, params) {\n var rules = [],\n arrayRules = [];\n $.each(params, function (i, param) {\n // put Implicit rules in front\n var isArrayRule = param[4].indexOf('[') !== -1;\n if (param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1) {\n isArrayRule ? arrayRules.unshift(param) : rules.unshift(param);\n } else {\n isArrayRule ? arrayRules.push(param) : rules.push(param);\n }\n });\n\n // Validate normal rules.\n var localRulesResult = validateLocalRules(this, [value], element, rules);\n\n // Validate items of the array using array rules.\n var arrayValue = ! Array.isArray(value) ? [value] : value;\n var arrayRulesResult = validateLocalRules(this, arrayValue, element, arrayRules);\n\n return localRulesResult && arrayRulesResult;\n }, '');\n\n\n /**\n * Create JQueryValidation check to validate Remote Laravel rules.\n */\n $.validator.addMethod(\"laravelValidationRemote\", function (value, element, params) {\n\n var implicit = false,\n check = params[0][1],\n attribute = element.name,\n token = check[1],\n validateAll = check[2];\n\n $.each(params, function (i, parameters) {\n implicit = implicit || parameters[3];\n });\n\n\n if ( !implicit && this.optional( element ) ) {\n return \"dependency-mismatch\";\n }\n\n var previous = this.previousValue( element ),\n validator, data;\n\n if (!this.settings.messages[ element.name ] ) {\n this.settings.messages[ element.name ] = {};\n }\n previous.originalMessage = this.settings.messages[ element.name ].laravelValidationRemote;\n this.settings.messages[ element.name ].laravelValidationRemote = previous.message;\n\n var param = typeof param === \"string\" && { url: param } || param;\n\n if (laravelValidation.helpers.arrayEquals(previous.old, value) || previous.old === value) {\n return previous.valid;\n }\n\n previous.old = value;\n validator = this;\n this.startRequest( element );\n\n data = $(validator.currentForm).serializeArray();\n\n data.push({\n 'name': '_jsvalidation',\n 'value': attribute\n });\n\n data.push({\n 'name': '_jsvalidation_validate_all',\n 'value': validateAll\n });\n\n var formMethod = $(validator.currentForm).attr('method');\n if($(validator.currentForm).find('input[name=\"_method\"]').length) {\n formMethod = $(validator.currentForm).find('input[name=\"_method\"]').val();\n }\n\n $.ajax( $.extend( true, {\n mode: \"abort\",\n port: \"validate\" + element.name,\n dataType: \"json\",\n data: data,\n context: validator.currentForm,\n url: $(validator.currentForm).attr('action'),\n type: formMethod,\n\n beforeSend: function (xhr) {\n if ($(validator.currentForm).attr('method').toLowerCase() !== 'get' && token) {\n return xhr.setRequestHeader('X-XSRF-TOKEN', token);\n }\n }\n }, param )\n ).always(function( response, textStatus ) {\n var errors, message, submitted, valid;\n\n if (textStatus === 'error') {\n valid = false;\n response = laravelValidation.helpers.parseErrorResponse(response);\n } else if (textStatus === 'success') {\n valid = response === true || response === \"true\";\n } else {\n return;\n }\n\n validator.settings.messages[ element.name ].laravelValidationRemote = previous.originalMessage;\n\n if ( valid ) {\n submitted = validator.formSubmitted;\n validator.prepareElement( element );\n validator.formSubmitted = submitted;\n validator.successList.push( element );\n delete validator.invalid[ element.name ];\n validator.showErrors();\n } else {\n errors = {};\n message = response || validator.defaultMessage( element, \"remote\" );\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message[0];\n validator.invalid[ element.name ] = true;\n validator.showErrors( errors );\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n validator.stopRequest( element, valid );\n }\n );\n return \"pending\";\n }, '');\n }\n};\n\n$(function() {\n laravelValidation.init();\n});\n","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./resources/assets/js/helpers.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/locutus/php/array/array_diff.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/locutus/php/array/array_diff.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function array_diff(arr1) {\n // eslint-disable-line camelcase\n // discuss at: https://locutus.io/php/array_diff/\n // original by: Kevin van Zonneveld (https://kvz.io)\n // improved by: Sanjoy Roy\n // revised by: Brett Zamir (https://brett-zamir.me)\n // example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld'])\n // returns 1: {0:'Kevin'}\n\n var retArr = {};\n var argl = arguments.length;\n var k1 = '';\n var i = 1;\n var k = '';\n var arr = {};\n\n arr1keys: for (k1 in arr1) {\n // eslint-disable-line no-labels\n for (i = 1; i < argl; i++) {\n arr = arguments[i];\n for (k in arr) {\n if (arr[k] === arr1[k1]) {\n // If it reaches here, it was found in at least one array, so try next value\n continue arr1keys; // eslint-disable-line no-labels\n }\n }\n retArr[k1] = arr1[k1];\n }\n }\n\n return retArr;\n};\n//# sourceMappingURL=array_diff.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/datetime/strtotime.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/locutus/php/datetime/strtotime.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar reSpace = '[ \\\\t]+';\nvar reSpaceOpt = '[ \\\\t]*';\nvar reMeridian = '(?:([ap])\\\\.?m\\\\.?([\\\\t ]|$))';\nvar reHour24 = '(2[0-4]|[01]?[0-9])';\nvar reHour24lz = '([01][0-9]|2[0-4])';\nvar reHour12 = '(0?[1-9]|1[0-2])';\nvar reMinute = '([0-5]?[0-9])';\nvar reMinutelz = '([0-5][0-9])';\nvar reSecond = '(60|[0-5]?[0-9])';\nvar reSecondlz = '(60|[0-5][0-9])';\nvar reFrac = '(?:\\\\.([0-9]+))';\n\nvar reDayfull = 'sunday|monday|tuesday|wednesday|thursday|friday|saturday';\nvar reDayabbr = 'sun|mon|tue|wed|thu|fri|sat';\nvar reDaytext = reDayfull + '|' + reDayabbr + '|weekdays?';\n\nvar reReltextnumber = 'first|second|third|fourth|fifth|sixth|seventh|eighth?|ninth|tenth|eleventh|twelfth';\nvar reReltexttext = 'next|last|previous|this';\nvar reReltextunit = '(?:second|sec|minute|min|hour|day|fortnight|forthnight|month|year)s?|weeks|' + reDaytext;\n\nvar reYear = '([0-9]{1,4})';\nvar reYear2 = '([0-9]{2})';\nvar reYear4 = '([0-9]{4})';\nvar reYear4withSign = '([+-]?[0-9]{4})';\nvar reMonth = '(1[0-2]|0?[0-9])';\nvar reMonthlz = '(0[0-9]|1[0-2])';\nvar reDay = '(?:(3[01]|[0-2]?[0-9])(?:st|nd|rd|th)?)';\nvar reDaylz = '(0[0-9]|[1-2][0-9]|3[01])';\n\nvar reMonthFull = 'january|february|march|april|may|june|july|august|september|october|november|december';\nvar reMonthAbbr = 'jan|feb|mar|apr|may|jun|jul|aug|sept?|oct|nov|dec';\nvar reMonthroman = 'i[vx]|vi{0,3}|xi{0,2}|i{1,3}';\nvar reMonthText = '(' + reMonthFull + '|' + reMonthAbbr + '|' + reMonthroman + ')';\n\nvar reTzCorrection = '((?:GMT)?([+-])' + reHour24 + ':?' + reMinute + '?)';\nvar reDayOfYear = '(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])';\nvar reWeekOfYear = '(0[1-9]|[1-4][0-9]|5[0-3])';\n\nvar reDateNoYear = reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]*';\n\nfunction processMeridian(hour, meridian) {\n meridian = meridian && meridian.toLowerCase();\n\n switch (meridian) {\n case 'a':\n hour += hour === 12 ? -12 : 0;\n break;\n case 'p':\n hour += hour !== 12 ? 12 : 0;\n break;\n }\n\n return hour;\n}\n\nfunction processYear(yearStr) {\n var year = +yearStr;\n\n if (yearStr.length < 4 && year < 100) {\n year += year < 70 ? 2000 : 1900;\n }\n\n return year;\n}\n\nfunction lookupMonth(monthStr) {\n return {\n jan: 0,\n january: 0,\n i: 0,\n feb: 1,\n february: 1,\n ii: 1,\n mar: 2,\n march: 2,\n iii: 2,\n apr: 3,\n april: 3,\n iv: 3,\n may: 4,\n v: 4,\n jun: 5,\n june: 5,\n vi: 5,\n jul: 6,\n july: 6,\n vii: 6,\n aug: 7,\n august: 7,\n viii: 7,\n sep: 8,\n sept: 8,\n september: 8,\n ix: 8,\n oct: 9,\n october: 9,\n x: 9,\n nov: 10,\n november: 10,\n xi: 10,\n dec: 11,\n december: 11,\n xii: 11\n }[monthStr.toLowerCase()];\n}\n\nfunction lookupWeekday(dayStr) {\n var desiredSundayNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var dayNumbers = {\n mon: 1,\n monday: 1,\n tue: 2,\n tuesday: 2,\n wed: 3,\n wednesday: 3,\n thu: 4,\n thursday: 4,\n fri: 5,\n friday: 5,\n sat: 6,\n saturday: 6,\n sun: 0,\n sunday: 0\n };\n\n return dayNumbers[dayStr.toLowerCase()] || desiredSundayNumber;\n}\n\nfunction lookupRelative(relText) {\n var relativeNumbers = {\n last: -1,\n previous: -1,\n this: 0,\n first: 1,\n next: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eight: 8,\n eighth: 8,\n ninth: 9,\n tenth: 10,\n eleventh: 11,\n twelfth: 12\n };\n\n var relativeBehavior = {\n this: 1\n };\n\n var relTextLower = relText.toLowerCase();\n\n return {\n amount: relativeNumbers[relTextLower],\n behavior: relativeBehavior[relTextLower] || 0\n };\n}\n\nfunction processTzCorrection(tzOffset, oldValue) {\n var reTzCorrectionLoose = /(?:GMT)?([+-])(\\d+)(:?)(\\d{0,2})/i;\n tzOffset = tzOffset && tzOffset.match(reTzCorrectionLoose);\n\n if (!tzOffset) {\n return oldValue;\n }\n\n var sign = tzOffset[1] === '-' ? 1 : -1;\n var hours = +tzOffset[2];\n var minutes = +tzOffset[4];\n\n if (!tzOffset[4] && !tzOffset[3]) {\n minutes = Math.floor(hours % 100);\n hours = Math.floor(hours / 100);\n }\n\n return sign * (hours * 60 + minutes);\n}\n\nvar formats = {\n yesterday: {\n regex: /^yesterday/i,\n name: 'yesterday',\n callback: function callback() {\n this.rd -= 1;\n return this.resetTime();\n }\n },\n\n now: {\n regex: /^now/i,\n name: 'now'\n // do nothing\n },\n\n noon: {\n regex: /^noon/i,\n name: 'noon',\n callback: function callback() {\n return this.resetTime() && this.time(12, 0, 0, 0);\n }\n },\n\n midnightOrToday: {\n regex: /^(midnight|today)/i,\n name: 'midnight | today',\n callback: function callback() {\n return this.resetTime();\n }\n },\n\n tomorrow: {\n regex: /^tomorrow/i,\n name: 'tomorrow',\n callback: function callback() {\n this.rd += 1;\n return this.resetTime();\n }\n },\n\n timestamp: {\n regex: /^@(-?\\d+)/i,\n name: 'timestamp',\n callback: function callback(match, timestamp) {\n this.rs += +timestamp;\n this.y = 1970;\n this.m = 0;\n this.d = 1;\n this.dates = 0;\n\n return this.resetTime() && this.zone(0);\n }\n },\n\n firstOrLastDay: {\n regex: /^(first|last) day of/i,\n name: 'firstdayof | lastdayof',\n callback: function callback(match, day) {\n if (day.toLowerCase() === 'first') {\n this.firstOrLastDayOfMonth = 1;\n } else {\n this.firstOrLastDayOfMonth = -1;\n }\n }\n },\n\n backOrFrontOf: {\n regex: RegExp('^(back|front) of ' + reHour24 + reSpaceOpt + reMeridian + '?', 'i'),\n name: 'backof | frontof',\n callback: function callback(match, side, hours, meridian) {\n var back = side.toLowerCase() === 'back';\n var hour = +hours;\n var minute = 15;\n\n if (!back) {\n hour -= 1;\n minute = 45;\n }\n\n hour = processMeridian(hour, meridian);\n\n return this.resetTime() && this.time(hour, minute, 0, 0);\n }\n },\n\n weekdayOf: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reDayfull + '|' + reDayabbr + ')' + reSpace + 'of', 'i'),\n name: 'weekdayof'\n // todo\n },\n\n mssqltime: {\n regex: RegExp('^' + reHour12 + ':' + reMinutelz + ':' + reSecondlz + '[:.]([0-9]+)' + reMeridian, 'i'),\n name: 'mssqltime',\n callback: function callback(match, hour, minute, second, frac, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, +frac.substr(0, 3));\n }\n },\n\n timeLong12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),\n name: 'timelong12',\n callback: function callback(match, hour, minute, second, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, 0);\n }\n },\n\n timeShort12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'),\n name: 'timeshort12',\n callback: function callback(match, hour, minute, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, 0, 0);\n }\n },\n\n timeTiny12: {\n regex: RegExp('^' + reHour12 + reSpaceOpt + reMeridian, 'i'),\n name: 'timetiny12',\n callback: function callback(match, hour, meridian) {\n return this.time(processMeridian(+hour, meridian), 0, 0, 0);\n }\n },\n\n soap: {\n regex: RegExp('^' + reYear4 + '-' + reMonthlz + '-' + reDaylz + 'T' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reFrac + reTzCorrection + '?', 'i'),\n name: 'soap',\n callback: function callback(match, year, month, day, hour, minute, second, frac, tzCorrection) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, +frac.substr(0, 3)) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n wddx: {\n regex: RegExp('^' + reYear4 + '-' + reMonth + '-' + reDay + 'T' + reHour24 + ':' + reMinute + ':' + reSecond),\n name: 'wddx',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n exif: {\n regex: RegExp('^' + reYear4 + ':' + reMonthlz + ':' + reDaylz + ' ' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz, 'i'),\n name: 'exif',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpc: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + 'T' + reHour24 + ':' + reMinutelz + ':' + reSecondlz),\n name: 'xmlrpc',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpcNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + '[Tt]' + reHour24 + reMinutelz + reSecondlz),\n name: 'xmlrpcnocolon',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n clf: {\n regex: RegExp('^' + reDay + '/(' + reMonthAbbr + ')/' + reYear4 + ':' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reSpace + reTzCorrection, 'i'),\n name: 'clf',\n callback: function callback(match, day, month, year, hour, minute, second, tzCorrection) {\n return this.ymd(+year, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n iso8601long: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond + reFrac, 'i'),\n name: 'iso8601long',\n callback: function callback(match, hour, minute, second, frac) {\n return this.time(+hour, +minute, +second, +frac.substr(0, 3));\n }\n },\n\n dateTextual: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]+' + reYear, 'i'),\n name: 'datetextual',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n pointedDate4: {\n regex: RegExp('^' + reDay + '[.\\\\t-]' + reMonth + '[.-]' + reYear4),\n name: 'pointeddate4',\n callback: function callback(match, day, month, year) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pointedDate2: {\n regex: RegExp('^' + reDay + '[.\\\\t]' + reMonth + '\\\\.' + reYear2),\n name: 'pointeddate2',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n timeLong24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond),\n name: 'timelong24',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n dateNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz),\n name: 'datenocolon',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pgydotd: {\n regex: RegExp('^' + reYear4 + '\\\\.?' + reDayOfYear),\n name: 'pgydotd',\n callback: function callback(match, year, day) {\n return this.ymd(+year, 0, +day);\n }\n },\n\n timeShort24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute, 'i'),\n name: 'timeshort24',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, 0);\n }\n },\n\n iso8601noColon: {\n regex: RegExp('^t?' + reHour24lz + reMinutelz + reSecondlz, 'i'),\n name: 'iso8601nocolon',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n iso8601dateSlash: {\n // eventhough the trailing slash is optional in PHP\n // here it's mandatory and inputs without the slash\n // are handled by dateslash\n regex: RegExp('^' + reYear4 + '/' + reMonthlz + '/' + reDaylz + '/'),\n name: 'iso8601dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n dateSlash: {\n regex: RegExp('^' + reYear4 + '/' + reMonth + '/' + reDay),\n name: 'dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n american: {\n regex: RegExp('^' + reMonth + '/' + reDay + '/' + reYear),\n name: 'american',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n americanShort: {\n regex: RegExp('^' + reMonth + '/' + reDay),\n name: 'americanshort',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, month - 1, +day);\n }\n },\n\n gnuDateShortOrIso8601date2: {\n // iso8601date2 is complete subset of gnudateshort\n regex: RegExp('^' + reYear + '-' + reMonth + '-' + reDay),\n name: 'gnudateshort | iso8601date2',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n iso8601date4: {\n regex: RegExp('^' + reYear4withSign + '-' + reMonthlz + '-' + reDaylz),\n name: 'iso8601date4',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n gnuNoColon: {\n regex: RegExp('^t?' + reHour24lz + reMinutelz, 'i'),\n name: 'gnunocolon',\n callback: function callback(match, hour, minute) {\n // this rule is a special case\n // if time was already set once by any preceding rule, it sets the captured value as year\n switch (this.times) {\n case 0:\n return this.time(+hour, +minute, 0, this.f);\n case 1:\n this.y = hour * 100 + +minute;\n this.times++;\n\n return true;\n default:\n return false;\n }\n }\n },\n\n gnuDateShorter: {\n regex: RegExp('^' + reYear4 + '-' + reMonth),\n name: 'gnudateshorter',\n callback: function callback(match, year, month) {\n return this.ymd(+year, month - 1, 1);\n }\n },\n\n pgTextReverse: {\n // note: allowed years are from 32-9999\n // years below 32 should be treated as days in datefull\n regex: RegExp('^' + '(\\\\d{3,4}|[4-9]\\\\d|3[2-9])-(' + reMonthAbbr + ')-' + reDaylz, 'i'),\n name: 'pgtextreverse',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateFull: {\n regex: RegExp('^' + reDay + '[ \\\\t.-]*' + reMonthText + '[ \\\\t.-]*' + reYear, 'i'),\n name: 'datefull',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoDay: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reYear4, 'i'),\n name: 'datenoday',\n callback: function callback(match, month, year) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n dateNoDayRev: {\n regex: RegExp('^' + reYear4 + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenodayrev',\n callback: function callback(match, year, month) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n pgTextShort: {\n regex: RegExp('^(' + reMonthAbbr + ')-' + reDaylz + '-' + reYear, 'i'),\n name: 'pgtextshort',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoYear: {\n regex: RegExp('^' + reDateNoYear, 'i'),\n name: 'datenoyear',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n dateNoYearRev: {\n regex: RegExp('^' + reDay + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenoyearrev',\n callback: function callback(match, day, month) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n isoWeekDay: {\n regex: RegExp('^' + reYear4 + '-?W' + reWeekOfYear + '(?:-?([0-7]))?'),\n name: 'isoweekday | isoweek',\n callback: function callback(match, year, week, day) {\n day = day ? +day : 1;\n\n if (!this.ymd(+year, 0, 1)) {\n return false;\n }\n\n // get day of week for Jan 1st\n var dayOfWeek = new Date(this.y, this.m, this.d).getDay();\n\n // and use the day to figure out the offset for day 1 of week 1\n dayOfWeek = 0 - (dayOfWeek > 4 ? dayOfWeek - 7 : dayOfWeek);\n\n this.rd += dayOfWeek + (week - 1) * 7 + day;\n }\n },\n\n relativeText: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reReltextunit + ')', 'i'),\n name: 'relativetext',\n callback: function callback(match, relValue, relUnit) {\n // todo: implement handling of 'this time-unit'\n // eslint-disable-next-line no-unused-vars\n var _lookupRelative = lookupRelative(relValue),\n amount = _lookupRelative.amount,\n behavior = _lookupRelative.behavior;\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n relative: {\n regex: RegExp('^([+-]*)[ \\\\t]*(\\\\d+)' + reSpaceOpt + '(' + reReltextunit + '|week)', 'i'),\n name: 'relative',\n callback: function callback(match, signs, relValue, relUnit) {\n var minuses = signs.replace(/[^-]/g, '').length;\n\n var amount = +relValue * Math.pow(-1, minuses);\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n dayText: {\n regex: RegExp('^(' + reDaytext + ')', 'i'),\n name: 'daytext',\n callback: function callback(match, dayText) {\n this.resetTime();\n this.weekday = lookupWeekday(dayText, 0);\n\n if (this.weekdayBehavior !== 2) {\n this.weekdayBehavior = 1;\n }\n }\n },\n\n relativeTextWeek: {\n regex: RegExp('^(' + reReltexttext + ')' + reSpace + 'week', 'i'),\n name: 'relativetextweek',\n callback: function callback(match, relText) {\n this.weekdayBehavior = 2;\n\n switch (relText.toLowerCase()) {\n case 'this':\n this.rd += 0;\n break;\n case 'next':\n this.rd += 7;\n break;\n case 'last':\n case 'previous':\n this.rd -= 7;\n break;\n }\n\n if (isNaN(this.weekday)) {\n this.weekday = 1;\n }\n }\n },\n\n monthFullOrMonthAbbr: {\n regex: RegExp('^(' + reMonthFull + '|' + reMonthAbbr + ')', 'i'),\n name: 'monthfull | monthabbr',\n callback: function callback(match, month) {\n return this.ymd(this.y, lookupMonth(month), this.d);\n }\n },\n\n tzCorrection: {\n regex: RegExp('^' + reTzCorrection, 'i'),\n name: 'tzcorrection',\n callback: function callback(tzCorrection) {\n return this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n ago: {\n regex: /^ago/i,\n name: 'ago',\n callback: function callback() {\n this.ry = -this.ry;\n this.rm = -this.rm;\n this.rd = -this.rd;\n this.rh = -this.rh;\n this.ri = -this.ri;\n this.rs = -this.rs;\n this.rf = -this.rf;\n }\n },\n\n year4: {\n regex: RegExp('^' + reYear4),\n name: 'year4',\n callback: function callback(match, year) {\n this.y = +year;\n return true;\n }\n },\n\n whitespace: {\n regex: /^[ .,\\t]+/,\n name: 'whitespace'\n // do nothing\n },\n\n dateShortWithTimeLong: {\n regex: RegExp('^' + reDateNoYear + 't?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond, 'i'),\n name: 'dateshortwithtimelong',\n callback: function callback(match, month, day, hour, minute, second) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n dateShortWithTimeLong12: {\n regex: RegExp('^' + reDateNoYear + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),\n name: 'dateshortwithtimelong12',\n callback: function callback(match, month, day, hour, minute, second, meridian) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(processMeridian(+hour, meridian), +minute, +second, 0);\n }\n },\n\n dateShortWithTimeShort: {\n regex: RegExp('^' + reDateNoYear + 't?' + reHour24 + '[:.]' + reMinute, 'i'),\n name: 'dateshortwithtimeshort',\n callback: function callback(match, month, day, hour, minute) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(+hour, +minute, 0, 0);\n }\n },\n\n dateShortWithTimeShort12: {\n regex: RegExp('^' + reDateNoYear + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'),\n name: 'dateshortwithtimeshort12',\n callback: function callback(match, month, day, hour, minute, meridian) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(processMeridian(+hour, meridian), +minute, 0, 0);\n }\n }\n};\n\nvar resultProto = {\n // date\n y: NaN,\n m: NaN,\n d: NaN,\n // time\n h: NaN,\n i: NaN,\n s: NaN,\n f: NaN,\n\n // relative shifts\n ry: 0,\n rm: 0,\n rd: 0,\n rh: 0,\n ri: 0,\n rs: 0,\n rf: 0,\n\n // weekday related shifts\n weekday: NaN,\n weekdayBehavior: 0,\n\n // first or last day of month\n // 0 none, 1 first, -1 last\n firstOrLastDayOfMonth: 0,\n\n // timezone correction in minutes\n z: NaN,\n\n // counters\n dates: 0,\n times: 0,\n zones: 0,\n\n // helper functions\n ymd: function ymd(y, m, d) {\n if (this.dates > 0) {\n return false;\n }\n\n this.dates++;\n this.y = y;\n this.m = m;\n this.d = d;\n return true;\n },\n time: function time(h, i, s, f) {\n if (this.times > 0) {\n return false;\n }\n\n this.times++;\n this.h = h;\n this.i = i;\n this.s = s;\n this.f = f;\n\n return true;\n },\n resetTime: function resetTime() {\n this.h = 0;\n this.i = 0;\n this.s = 0;\n this.f = 0;\n this.times = 0;\n\n return true;\n },\n zone: function zone(minutes) {\n if (this.zones <= 1) {\n this.zones++;\n this.z = minutes;\n return true;\n }\n\n return false;\n },\n toDate: function toDate(relativeTo) {\n if (this.dates && !this.times) {\n this.h = this.i = this.s = this.f = 0;\n }\n\n // fill holes\n if (isNaN(this.y)) {\n this.y = relativeTo.getFullYear();\n }\n\n if (isNaN(this.m)) {\n this.m = relativeTo.getMonth();\n }\n\n if (isNaN(this.d)) {\n this.d = relativeTo.getDate();\n }\n\n if (isNaN(this.h)) {\n this.h = relativeTo.getHours();\n }\n\n if (isNaN(this.i)) {\n this.i = relativeTo.getMinutes();\n }\n\n if (isNaN(this.s)) {\n this.s = relativeTo.getSeconds();\n }\n\n if (isNaN(this.f)) {\n this.f = relativeTo.getMilliseconds();\n }\n\n // adjust special early\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n this.d = 1;\n break;\n case -1:\n this.d = 0;\n this.m += 1;\n break;\n }\n\n if (!isNaN(this.weekday)) {\n var date = new Date(relativeTo.getTime());\n date.setFullYear(this.y, this.m, this.d);\n date.setHours(this.h, this.i, this.s, this.f);\n\n var dow = date.getDay();\n\n if (this.weekdayBehavior === 2) {\n // To make \"this week\" work, where the current day of week is a \"sunday\"\n if (dow === 0 && this.weekday !== 0) {\n this.weekday = -6;\n }\n\n // To make \"sunday this week\" work, where the current day of week is not a \"sunday\"\n if (this.weekday === 0 && dow !== 0) {\n this.weekday = 7;\n }\n\n this.d -= dow;\n this.d += this.weekday;\n } else {\n var diff = this.weekday - dow;\n\n // some PHP magic\n if (this.rd < 0 && diff < 0 || this.rd >= 0 && diff <= -this.weekdayBehavior) {\n diff += 7;\n }\n\n if (this.weekday >= 0) {\n this.d += diff;\n } else {\n this.d -= 7 - (Math.abs(this.weekday) - dow);\n }\n\n this.weekday = NaN;\n }\n }\n\n // adjust relative\n this.y += this.ry;\n this.m += this.rm;\n this.d += this.rd;\n\n this.h += this.rh;\n this.i += this.ri;\n this.s += this.rs;\n this.f += this.rf;\n\n this.ry = this.rm = this.rd = 0;\n this.rh = this.ri = this.rs = this.rf = 0;\n\n var result = new Date(relativeTo.getTime());\n // since Date constructor treats years <= 99 as 1900+\n // it can't be used, thus this weird way\n result.setFullYear(this.y, this.m, this.d);\n result.setHours(this.h, this.i, this.s, this.f);\n\n // note: this is done twice in PHP\n // early when processing special relatives\n // and late\n // todo: check if the logic can be reduced\n // to just one time action\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n result.setDate(1);\n break;\n case -1:\n result.setMonth(result.getMonth() + 1, 0);\n break;\n }\n\n // adjust timezone\n if (!isNaN(this.z) && result.getTimezoneOffset() !== this.z) {\n result.setUTCFullYear(result.getFullYear(), result.getMonth(), result.getDate());\n\n result.setUTCHours(result.getHours(), result.getMinutes() + this.z, result.getSeconds(), result.getMilliseconds());\n }\n\n return result;\n }\n};\n\nmodule.exports = function strtotime(str, now) {\n // discuss at: https://locutus.io/php/strtotime/\n // original by: Caio Ariede (https://caioariede.com)\n // improved by: Kevin van Zonneveld (https://kvz.io)\n // improved by: Caio Ariede (https://caioariede.com)\n // improved by: A. Matías Quezada (https://amatiasq.com)\n // improved by: preuter\n // improved by: Brett Zamir (https://brett-zamir.me)\n // improved by: Mirko Faber\n // input by: David\n // bugfixed by: Wagner B. Soares\n // bugfixed by: Artur Tchernychev\n // bugfixed by: Stephan Bösch-Plepelits (https://github.com/plepe)\n // reimplemented by: Rafał Kukawski\n // note 1: Examples all have a fixed timestamp to prevent\n // note 1: tests to fail because of variable time(zones)\n // example 1: strtotime('+1 day', 1129633200)\n // returns 1: 1129719600\n // example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200)\n // returns 2: 1130425202\n // example 3: strtotime('last month', 1129633200)\n // returns 3: 1127041200\n // example 4: strtotime('2009-05-04 08:30:00+00')\n // returns 4: 1241425800\n // example 5: strtotime('2009-05-04 08:30:00+02:00')\n // returns 5: 1241418600\n\n if (now == null) {\n now = Math.floor(Date.now() / 1000);\n }\n\n // the rule order is important\n // if multiple rules match, the longest match wins\n // if multiple rules match the same string, the first match wins\n var rules = [formats.yesterday, formats.now, formats.noon, formats.midnightOrToday, formats.tomorrow, formats.timestamp, formats.firstOrLastDay, formats.backOrFrontOf,\n // formats.weekdayOf, // not yet implemented\n formats.timeTiny12, formats.timeShort12, formats.timeLong12, formats.mssqltime, formats.timeShort24, formats.timeLong24, formats.iso8601long, formats.gnuNoColon, formats.iso8601noColon, formats.americanShort, formats.american, formats.iso8601date4, formats.iso8601dateSlash, formats.dateSlash, formats.gnuDateShortOrIso8601date2, formats.gnuDateShorter, formats.dateFull, formats.pointedDate4, formats.pointedDate2, formats.dateNoDay, formats.dateNoDayRev, formats.dateTextual, formats.dateNoYear, formats.dateNoYearRev, formats.dateNoColon, formats.xmlRpc, formats.xmlRpcNoColon, formats.soap, formats.wddx, formats.exif, formats.pgydotd, formats.isoWeekDay, formats.pgTextShort, formats.pgTextReverse, formats.clf, formats.year4, formats.ago, formats.dayText, formats.relativeTextWeek, formats.relativeText, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.dateShortWithTimeShort12, formats.dateShortWithTimeLong12, formats.dateShortWithTimeShort, formats.dateShortWithTimeLong, formats.relative, formats.whitespace];\n\n var result = Object.create(resultProto);\n\n while (str.length) {\n var longestMatch = null;\n var finalRule = null;\n\n for (var i = 0, l = rules.length; i < l; i++) {\n var format = rules[i];\n\n var match = str.match(format.regex);\n\n if (match) {\n if (!longestMatch || match[0].length > longestMatch[0].length) {\n longestMatch = match;\n finalRule = format;\n }\n }\n }\n\n if (!finalRule || finalRule.callback && finalRule.callback.apply(result, longestMatch) === false) {\n return false;\n }\n\n str = str.substr(longestMatch[0].length);\n finalRule = null;\n longestMatch = null;\n }\n\n return Math.floor(result.toDate(new Date(now * 1000)) / 1000);\n};\n//# sourceMappingURL=strtotime.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/info/ini_get.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/locutus/php/info/ini_get.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nmodule.exports = function ini_get(varname) {\n // eslint-disable-line camelcase\n // discuss at: https://locutus.io/php/ini_get/\n // original by: Brett Zamir (https://brett-zamir.me)\n // note 1: The ini values must be set by ini_set or manually within an ini file\n // example 1: ini_set('date.timezone', 'Asia/Hong_Kong')\n // example 1: ini_get('date.timezone')\n // returns 1: 'Asia/Hong_Kong'\n\n var $global = typeof window !== 'undefined' ? window : global;\n $global.$locutus = $global.$locutus || {};\n var $locutus = $global.$locutus;\n $locutus.php = $locutus.php || {};\n $locutus.php.ini = $locutus.php.ini || {};\n\n if ($locutus.php.ini[varname] && $locutus.php.ini[varname].local_value !== undefined) {\n if ($locutus.php.ini[varname].local_value === null) {\n return '';\n }\n return $locutus.php.ini[varname].local_value;\n }\n\n return '';\n};\n//# sourceMappingURL=ini_get.js.map\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/strings/strlen.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/strings/strlen.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function strlen(string) {\n // discuss at: https://locutus.io/php/strlen/\n // original by: Kevin van Zonneveld (https://kvz.io)\n // improved by: Sakimori\n // improved by: Kevin van Zonneveld (https://kvz.io)\n // input by: Kirk Strobeck\n // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)\n // revised by: Brett Zamir (https://brett-zamir.me)\n // note 1: May look like overkill, but in order to be truly faithful to handling all Unicode\n // note 1: characters and to this function in PHP which does not count the number of bytes\n // note 1: but counts the number of characters, something like this is really necessary.\n // example 1: strlen('Kevin van Zonneveld')\n // returns 1: 19\n // example 2: ini_set('unicode.semantics', 'on')\n // example 2: strlen('A\\ud87e\\udc04Z')\n // returns 2: 3\n\n var str = string + '';\n\n var iniVal = ( true ? __webpack_require__(/*! ../info/ini_get */ \"./node_modules/locutus/php/info/ini_get.js\")('unicode.semantics') : undefined) || 'off';\n if (iniVal === 'off') {\n return str.length;\n }\n\n var i = 0;\n var lgth = 0;\n\n var getWholeChar = function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n var next = '';\n var prev = '';\n if (code >= 0xD800 && code <= 0xDBFF) {\n // High surrogate (could change last hex to 0xDB7F to\n // treat high private surrogates as single characters)\n if (str.length <= i + 1) {\n throw new Error('High surrogate without following low surrogate');\n }\n next = str.charCodeAt(i + 1);\n if (next < 0xDC00 || next > 0xDFFF) {\n throw new Error('High surrogate without following low surrogate');\n }\n return str.charAt(i) + str.charAt(i + 1);\n } else if (code >= 0xDC00 && code <= 0xDFFF) {\n // Low surrogate\n if (i === 0) {\n throw new Error('Low surrogate without preceding high surrogate');\n }\n prev = str.charCodeAt(i - 1);\n if (prev < 0xD800 || prev > 0xDBFF) {\n // (could change last hex to 0xDB7F to treat high private surrogates\n // as single characters)\n throw new Error('Low surrogate without preceding high surrogate');\n }\n // We can pass over low surrogates now as the second\n // component in a pair which we have already processed\n return false;\n }\n return str.charAt(i);\n };\n\n for (i = 0, lgth = 0; i < str.length; i++) {\n if (getWholeChar(str, i) === false) {\n continue;\n }\n // Adapt this line at the top of any loop, passing in the whole string and\n // the current iteration and returning a variable to represent the individual character;\n // purpose is to treat the first part of a surrogate pair as the whole character and then\n // ignore the second part\n lgth++;\n }\n\n return lgth;\n};\n//# sourceMappingURL=strlen.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/var/is_numeric.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/var/is_numeric.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function is_numeric(mixedVar) {\n // eslint-disable-line camelcase\n // discuss at: https://locutus.io/php/is_numeric/\n // original by: Kevin van Zonneveld (https://kvz.io)\n // improved by: David\n // improved by: taith\n // bugfixed by: Tim de Koning\n // bugfixed by: WebDevHobo (https://webdevhobo.blogspot.com/)\n // bugfixed by: Brett Zamir (https://brett-zamir.me)\n // bugfixed by: Denis Chenu (https://shnoulle.net)\n // example 1: is_numeric(186.31)\n // returns 1: true\n // example 2: is_numeric('Kevin van Zonneveld')\n // returns 2: false\n // example 3: is_numeric(' +186.31e2')\n // returns 3: true\n // example 4: is_numeric('')\n // returns 4: false\n // example 5: is_numeric([])\n // returns 5: false\n // example 6: is_numeric('1 ')\n // returns 6: false\n\n var whitespace = [' ', '\\n', '\\r', '\\t', '\\f', '\\x0b', '\\xa0', '\\u2000', '\\u2001', '\\u2002', '\\u2003', '\\u2004', '\\u2005', '\\u2006', '\\u2007', '\\u2008', '\\u2009', '\\u200A', '\\u200B', '\\u2028', '\\u2029', '\\u3000'].join('');\n\n // @todo: Break this up using many single conditions with early returns\n return (typeof mixedVar === 'number' || typeof mixedVar === 'string' && whitespace.indexOf(mixedVar.slice(-1)) === -1) && mixedVar !== '' && !isNaN(mixedVar);\n};\n//# sourceMappingURL=is_numeric.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"./resources/assets/js/helpers.js\":\n/*!****************************************!*\\\n !*** ./resources/assets/js/helpers.js ***!\n \\****************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! locutus/php/strings/strlen */ \"./node_modules/locutus/php/strings/strlen.js\");\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! locutus/php/array/array_diff */ \"./node_modules/locutus/php/array/array_diff.js\");\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! locutus/php/datetime/strtotime */ \"./node_modules/locutus/php/datetime/strtotime.js\");\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! locutus/php/var/is_numeric */ \"./node_modules/locutus/php/var/is_numeric.js\");\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__);\n/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n\n\n\n$.extend(true, laravelValidation, {\n helpers: {\n /**\n * Numeric rules\n */\n numericRules: ['Integer', 'Numeric'],\n\n /**\n * Gets the file information from file input.\n *\n * @param fieldObj\n * @param index\n * @returns {{file: *, extension: string, size: number}}\n */\n fileinfo: function (fieldObj, index) {\n var FileName = fieldObj.value;\n index = typeof index !== 'undefined' ? index : 0;\n\n if (fieldObj.files !== null) {\n if (typeof fieldObj.files[index] !== 'undefined') {\n return {\n file: FileName,\n extension: FileName.substr(FileName.lastIndexOf('.') + 1),\n size: fieldObj.files[index].size / 1024,\n type: fieldObj.files[index].type\n };\n }\n }\n\n return false;\n },\n\n /**\n * Gets the selectors for th specified field names.\n *\n * @param names\n * @returns {string}\n */\n selector: function (names) {\n var selector = [];\n\n if (!this.isArray(names)) {\n names = [names];\n }\n\n for (var i = 0; i < names.length; i++) {\n selector.push(\"[name='\" + names[i] + \"']\");\n }\n\n return selector.join();\n },\n\n /**\n * Check if element has numeric rules.\n *\n * @param element\n * @returns {boolean}\n */\n hasNumericRules: function (element) {\n return this.hasRules(element, this.numericRules);\n },\n\n /**\n * Check if element has passed rules.\n *\n * @param element\n * @param rules\n * @returns {boolean}\n */\n hasRules: function (element, rules) {\n var found = false;\n\n if (typeof rules === 'string') {\n rules = [rules];\n }\n\n var validator = $.data(element.form, \"validator\");\n var listRules = [];\n var cache = validator.arrayRulesCache;\n\n if (element.name in cache) {\n $.each(cache[element.name], function (index, arrayRule) {\n listRules.push(arrayRule);\n });\n }\n\n if (element.name in validator.settings.rules) {\n listRules.push(validator.settings.rules[element.name]);\n }\n\n $.each(listRules, function (index, objRules) {\n if ('laravelValidation' in objRules) {\n var _rules = objRules.laravelValidation;\n\n for (var i = 0; i < _rules.length; i++) {\n if ($.inArray(_rules[i][0], rules) !== -1) {\n found = true;\n return false;\n }\n }\n }\n });\n return found;\n },\n\n /**\n * Return the string length using PHP function.\n * http://php.net/manual/en/function.strlen.php\n * http://phpjs.org/functions/strlen/\n *\n * @param string\n */\n strlen: function (string) {\n return locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default()(string);\n },\n\n /**\n * Get the size of the object depending of his type.\n *\n * @param obj\n * @param element\n * @param value\n * @returns int\n */\n getSize: function getSize(obj, element, value) {\n if (this.hasNumericRules(element) && this.is_numeric(value)) {\n return parseFloat(value);\n } else if (this.isArray(value)) {\n return parseFloat(value.length);\n } else if (element.type === 'file') {\n return parseFloat(Math.floor(this.fileinfo(element).size));\n }\n\n return parseFloat(this.strlen(value));\n },\n\n /**\n * Return specified rule from element.\n *\n * @param rule\n * @param element\n * @returns object\n */\n getLaravelValidation: function (rule, element) {\n var found = undefined;\n $.each($.validator.staticRules(element), function (key, rules) {\n if (key === \"laravelValidation\") {\n $.each(rules, function (i, value) {\n if (value[0] === rule) {\n found = value;\n }\n });\n }\n });\n return found;\n },\n\n /**\n * Return he timestamp of value passed using format or default format in element.\n *\n * @param value\n * @param format\n * @returns {boolean|int}\n */\n parseTime: function (value, format) {\n var timeValue = false;\n var fmt = new DateFormatter();\n\n if (typeof format === 'object') {\n var dateRule = this.getLaravelValidation('DateFormat', format);\n\n if (dateRule !== undefined) {\n format = dateRule[1][0];\n } else {\n format = null;\n }\n }\n\n if (format == null) {\n timeValue = this.strtotime(value);\n } else {\n timeValue = fmt.parseDate(value, format);\n\n if (timeValue) {\n timeValue = Math.round(timeValue.getTime() / 1000);\n }\n }\n\n return timeValue;\n },\n\n /**\n * Compare a given date against another using an operator.\n *\n * @param validator\n * @param value\n * @param element\n * @param params\n * @param operator\n * @return {boolean}\n */\n compareDates: function (validator, value, element, params, operator) {\n var timeCompare = parseFloat(params);\n\n if (isNaN(timeCompare)) {\n var target = this.dependentElement(validator, element, params);\n\n if (target === undefined) {\n return false;\n }\n\n timeCompare = this.parseTime(validator.elementValue(target), target);\n }\n\n var timeValue = this.parseTime(value, element);\n\n if (timeValue === false) {\n return false;\n }\n\n switch (operator) {\n case '<':\n return timeValue < timeCompare;\n\n case '<=':\n return timeValue <= timeCompare;\n\n case '==':\n case '===':\n return timeValue === timeCompare;\n\n case '>':\n return timeValue > timeCompare;\n\n case '>=':\n return timeValue >= timeCompare;\n\n default:\n throw new Error('Unsupported operator.');\n }\n },\n\n /**\n * This method allows you to intelligently guess the date by closely matching the specific format.\n *\n * @param value\n * @param format\n * @returns {Date}\n */\n guessDate: function (value, format) {\n var fmt = new DateFormatter();\n return fmt.guessDate(value, format);\n },\n\n /**\n * Returns Unix timestamp based on PHP function strototime.\n * http://php.net/manual/es/function.strtotime.php\n * http://phpjs.org/functions/strtotime/\n *\n * @param text\n * @param now\n * @returns {*}\n */\n strtotime: function (text, now) {\n return locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default()(text, now);\n },\n\n /**\n * Returns if value is numeric.\n * http://php.net/manual/es/var.is_numeric.php\n * http://phpjs.org/functions/is_numeric/\n *\n * @param mixed_var\n * @returns {*}\n */\n is_numeric: function (mixed_var) {\n return locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default()(mixed_var);\n },\n\n /**\n * Check whether the argument is of type Array.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray#Polyfill\n *\n * @param arg\n * @returns {boolean}\n */\n isArray: function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n },\n\n /**\n * Returns Array diff based on PHP function array_diff.\n * http://php.net/manual/es/function.array_diff.php\n * http://phpjs.org/functions/array_diff/\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayDiff: function (arr1, arr2) {\n return locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default()(arr1, arr2);\n },\n\n /**\n * Check whether two arrays are equal to one another.\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayEquals: function (arr1, arr2) {\n if (!this.isArray(arr1) || !this.isArray(arr2)) {\n return false;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n return $.isEmptyObject(this.arrayDiff(arr1, arr2));\n },\n\n /**\n * Makes element dependant from other.\n *\n * @param validator\n * @param element\n * @param name\n * @returns {*}\n */\n dependentElement: function (validator, element, name) {\n var el = validator.findByName(name);\n\n if (el[0] !== undefined && validator.settings.onfocusout) {\n var event = 'blur';\n\n if (el[0].tagName === 'SELECT' || el[0].tagName === 'OPTION' || el[0].type === 'checkbox' || el[0].type === 'radio') {\n event = 'click';\n }\n\n var ruleName = '.validate-laravelValidation';\n el.off(ruleName).off(event + ruleName + '-' + element.name).on(event + ruleName + '-' + element.name, function () {\n $(element).valid();\n });\n }\n\n return el[0];\n },\n\n /**\n * Parses error Ajax response and gets the message.\n *\n * @param response\n * @returns {string[]}\n */\n parseErrorResponse: function (response) {\n var newResponse = ['Whoops, looks like something went wrong.'];\n\n if ('responseText' in response) {\n var errorMsg = response.responseText.match(/(.*)<\\/h1\\s*>/i);\n\n if (this.isArray(errorMsg)) {\n newResponse = [errorMsg[1]];\n }\n }\n\n return newResponse;\n },\n\n /**\n * Escape string to use as Regular Expression.\n *\n * @param str\n * @returns string\n */\n escapeRegExp: function (str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n\n /**\n * Generate RegExp from wildcard attributes.\n *\n * @param name\n * @returns {RegExp}\n */\n regexFromWildcard: function (name) {\n var nameParts = name.split(\"[*]\");\n\n if (nameParts.length === 1) {\n nameParts.push('');\n }\n\n var regexpParts = nameParts.map(function (currentValue, index) {\n if (index % 2 === 0) {\n currentValue = currentValue + '[';\n } else {\n currentValue = ']' + currentValue;\n }\n\n return laravelValidation.helpers.escapeRegExp(currentValue);\n });\n return new RegExp('^' + regexpParts.join('[^\\\\]]*') + '$');\n },\n\n /**\n * Merge additional laravel validation rules into the current rule set.\n *\n * @param {object} rules\n * @param {object} newRules\n * @returns {object}\n */\n mergeRules: function (rules, newRules) {\n var rulesList = {\n 'laravelValidation': newRules.laravelValidation || [],\n 'laravelValidationRemote': newRules.laravelValidationRemote || []\n };\n\n for (var key in rulesList) {\n if (rulesList[key].length === 0) {\n continue;\n }\n\n if (typeof rules[key] === \"undefined\") {\n rules[key] = [];\n }\n\n rules[key] = rules[key].concat(rulesList[key]);\n }\n\n return rules;\n }\n }\n});\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2RhdGV0aW1lL3N0cnRvdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvaW5mby9pbmlfZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2N1dHVzL3BocC9zdHJpbmdzL3N0cmxlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiJCIsImV4dGVuZCIsImxhcmF2ZWxWYWxpZGF0aW9uIiwiaGVscGVycyIsIm51bWVyaWNSdWxlcyIsImZpbGVpbmZvIiwiZmllbGRPYmoiLCJpbmRleCIsIkZpbGVOYW1lIiwidmFsdWUiLCJmaWxlcyIsImZpbGUiLCJleHRlbnNpb24iLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInNpemUiLCJ0eXBlIiwic2VsZWN0b3IiLCJuYW1lcyIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iLCJoYXNOdW1lcmljUnVsZXMiLCJlbGVtZW50IiwiaGFzUnVsZXMiLCJydWxlcyIsImZvdW5kIiwidmFsaWRhdG9yIiwiZGF0YSIsImZvcm0iLCJsaXN0UnVsZXMiLCJjYWNoZSIsImFycmF5UnVsZXNDYWNoZSIsIm5hbWUiLCJlYWNoIiwiYXJyYXlSdWxlIiwic2V0dGluZ3MiLCJvYmpSdWxlcyIsIl9ydWxlcyIsImluQXJyYXkiLCJzdHJsZW4iLCJzdHJpbmciLCJnZXRTaXplIiwib2JqIiwiaXNfbnVtZXJpYyIsInBhcnNlRmxvYXQiLCJNYXRoIiwiZmxvb3IiLCJnZXRMYXJhdmVsVmFsaWRhdGlvbiIsInJ1bGUiLCJ1bmRlZmluZWQiLCJzdGF0aWNSdWxlcyIsImtleSIsInBhcnNlVGltZSIsImZvcm1hdCIsInRpbWVWYWx1ZSIsImZtdCIsIkRhdGVGb3JtYXR0ZXIiLCJkYXRlUnVsZSIsInN0cnRvdGltZSIsInBhcnNlRGF0ZSIsInJvdW5kIiwiZ2V0VGltZSIsImNvbXBhcmVEYXRlcyIsInBhcmFtcyIsIm9wZXJhdG9yIiwidGltZUNvbXBhcmUiLCJpc05hTiIsInRhcmdldCIsImRlcGVuZGVudEVsZW1lbnQiLCJlbGVtZW50VmFsdWUiLCJFcnJvciIsImd1ZXNzRGF0ZSIsInRleHQiLCJub3ciLCJtaXhlZF92YXIiLCJhcmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJhcnJheURpZmYiLCJhcnIxIiwiYXJyMiIsImFycmF5X2RpZmYiLCJhcnJheUVxdWFscyIsImlzRW1wdHlPYmplY3QiLCJlbCIsImZpbmRCeU5hbWUiLCJvbmZvY3Vzb3V0IiwiZXZlbnQiLCJ0YWdOYW1lIiwicnVsZU5hbWUiLCJvZmYiLCJvbiIsInZhbGlkIiwicGFyc2VFcnJvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJuZXdSZXNwb25zZSIsImVycm9yTXNnIiwicmVzcG9uc2VUZXh0IiwibWF0Y2giLCJlc2NhcGVSZWdFeHAiLCJzdHIiLCJyZXBsYWNlIiwicmVnZXhGcm9tV2lsZGNhcmQiLCJuYW1lUGFydHMiLCJzcGxpdCIsInJlZ2V4cFBhcnRzIiwibWFwIiwiY3VycmVudFZhbHVlIiwiUmVnRXhwIiwibWVyZ2VSdWxlcyIsIm5ld1J1bGVzIiwicnVsZXNMaXN0IiwibGFyYXZlbFZhbGlkYXRpb25SZW1vdGUiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNsQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixFQUFFO0FBQ3hCLHNCQUFzQixFQUFFO0FBQ3hCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3REFBd0QsSUFBSTtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLElBQUk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUM7Ozs7Ozs7Ozs7OztBQ3hsQ0EsOENBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7QUMxQmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JBQWdCLEtBQThCLEdBQUcsbUJBQU8sQ0FBQyxtRUFBaUIseUJBQXlCLFNBQVM7QUFDNUc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQzs7Ozs7Ozs7Ozs7O0FDM0VhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7OztBQzlCQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUVBQSxDQUFDLENBQUNDLE1BQUYsQ0FBUyxJQUFULEVBQWVDLGlCQUFmLEVBQWtDO0FBRTlCQyxTQUFPLEVBQUU7QUFFTDs7O0FBR0FDLGdCQUFZLEVBQUUsQ0FBQyxTQUFELEVBQVksU0FBWixDQUxUOztBQU9MOzs7Ozs7O0FBT0FDLFlBQVEsRUFBRSxVQUFVQyxRQUFWLEVBQW9CQyxLQUFwQixFQUEyQjtBQUNqQyxVQUFJQyxRQUFRLEdBQUdGLFFBQVEsQ0FBQ0csS0FBeEI7QUFDQUYsV0FBSyxHQUFHLE9BQU9BLEtBQVAsS0FBaUIsV0FBakIsR0FBK0JBLEtBQS9CLEdBQXVDLENBQS9DOztBQUNBLFVBQUtELFFBQVEsQ0FBQ0ksS0FBVCxLQUFtQixJQUF4QixFQUErQjtBQUMzQixZQUFJLE9BQU9KLFFBQVEsQ0FBQ0ksS0FBVCxDQUFlSCxLQUFmLENBQVAsS0FBaUMsV0FBckMsRUFBa0Q7QUFDOUMsaUJBQU87QUFDSEksZ0JBQUksRUFBRUgsUUFESDtBQUVISSxxQkFBUyxFQUFFSixRQUFRLENBQUNLLE1BQVQsQ0FBZ0JMLFFBQVEsQ0FBQ00sV0FBVCxDQUFxQixHQUFyQixJQUE0QixDQUE1QyxDQUZSO0FBR0hDLGdCQUFJLEVBQUVULFFBQVEsQ0FBQ0ksS0FBVCxDQUFlSCxLQUFmLEVBQXNCUSxJQUF0QixHQUE2QixJQUhoQztBQUlIQyxnQkFBSSxFQUFFVixRQUFRLENBQUNJLEtBQVQsQ0FBZUgsS0FBZixFQUFzQlM7QUFKekIsV0FBUDtBQU1IO0FBQ0o7O0FBQ0QsYUFBTyxLQUFQO0FBQ0gsS0E1Qkk7O0FBK0JMOzs7Ozs7QUFNQUMsWUFBUSxFQUFFLFVBQVVDLEtBQVYsRUFBaUI7QUFDdkIsVUFBSUQsUUFBUSxHQUFHLEVBQWY7O0FBQ0EsVUFBSSxDQUFFLEtBQUtFLE9BQUwsQ0FBYUQsS0FBYixDQUFOLEVBQTRCO0FBQ3hCQSxhQUFLLEdBQUcsQ0FBQ0EsS0FBRCxDQUFSO0FBQ0g7O0FBQ0QsV0FBSyxJQUFJRSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixLQUFLLENBQUNHLE1BQTFCLEVBQWtDRCxDQUFDLEVBQW5DLEVBQXVDO0FBQ25DSCxnQkFBUSxDQUFDSyxJQUFULENBQWMsWUFBWUosS0FBSyxDQUFDRSxDQUFELENBQWpCLEdBQXVCLElBQXJDO0FBQ0g7O0FBQ0QsYUFBT0gsUUFBUSxDQUFDTSxJQUFULEVBQVA7QUFDSCxLQTlDSTs7QUFpREw7Ozs7OztBQU1BQyxtQkFBZSxFQUFFLFVBQVVDLE9BQVYsRUFBbUI7QUFDaEMsYUFBTyxLQUFLQyxRQUFMLENBQWNELE9BQWQsRUFBdUIsS0FBS3JCLFlBQTVCLENBQVA7QUFDSCxLQXpESTs7QUEyREw7Ozs7Ozs7QUFPQXNCLFlBQVEsRUFBRSxVQUFVRCxPQUFWLEVBQW1CRSxLQUFuQixFQUEwQjtBQUVoQyxVQUFJQyxLQUFLLEdBQUcsS0FBWjs7QUFDQSxVQUFJLE9BQU9ELEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDM0JBLGFBQUssR0FBRyxDQUFDQSxLQUFELENBQVI7QUFDSDs7QUFFRCxVQUFJRSxTQUFTLEdBQUc3QixDQUFDLENBQUM4QixJQUFGLENBQU9MLE9BQU8sQ0FBQ00sSUFBZixFQUFxQixXQUFyQixDQUFoQjtBQUNBLFVBQUlDLFNBQVMsR0FBRyxFQUFoQjtBQUNBLFVBQUlDLEtBQUssR0FBR0osU0FBUyxDQUFDSyxlQUF0Qjs7QUFDQSxVQUFJVCxPQUFPLENBQUNVLElBQVIsSUFBZ0JGLEtBQXBCLEVBQTJCO0FBQ3ZCakMsU0FBQyxDQUFDb0MsSUFBRixDQUFPSCxLQUFLLENBQUNSLE9BQU8sQ0FBQ1UsSUFBVCxDQUFaLEVBQTRCLFVBQVU1QixLQUFWLEVBQWlCOEIsU0FBakIsRUFBNEI7QUFDcERMLG1CQUFTLENBQUNWLElBQVYsQ0FBZWUsU0FBZjtBQUNILFNBRkQ7QUFHSDs7QUFDRCxVQUFJWixPQUFPLENBQUNVLElBQVIsSUFBZ0JOLFNBQVMsQ0FBQ1MsUUFBVixDQUFtQlgsS0FBdkMsRUFBOEM7QUFDMUNLLGlCQUFTLENBQUNWLElBQVYsQ0FBZU8sU0FBUyxDQUFDUyxRQUFWLENBQW1CWCxLQUFuQixDQUF5QkYsT0FBTyxDQUFDVSxJQUFqQyxDQUFmO0FBQ0g7O0FBQ0RuQyxPQUFDLENBQUNvQyxJQUFGLENBQU9KLFNBQVAsRUFBa0IsVUFBU3pCLEtBQVQsRUFBZWdDLFFBQWYsRUFBd0I7QUFDdEMsWUFBSSx1QkFBdUJBLFFBQTNCLEVBQXFDO0FBQ2pDLGNBQUlDLE1BQU0sR0FBQ0QsUUFBUSxDQUFDckMsaUJBQXBCOztBQUNBLGVBQUssSUFBSWtCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdvQixNQUFNLENBQUNuQixNQUEzQixFQUFtQ0QsQ0FBQyxFQUFwQyxFQUF3QztBQUNwQyxnQkFBSXBCLENBQUMsQ0FBQ3lDLE9BQUYsQ0FBVUQsTUFBTSxDQUFDcEIsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFWLEVBQXVCTyxLQUF2QixNQUFrQyxDQUFDLENBQXZDLEVBQTBDO0FBQ3RDQyxtQkFBSyxHQUFHLElBQVI7QUFDQSxxQkFBTyxLQUFQO0FBQ0g7QUFDSjtBQUNKO0FBQ0osT0FWRDtBQVlBLGFBQU9BLEtBQVA7QUFDSCxLQWpHSTs7QUFtR0w7Ozs7Ozs7QUFPQWMsVUFBTSxFQUFFLFVBQVVDLE1BQVYsRUFBa0I7QUFDdEIsYUFBT0QsaUVBQU0sQ0FBQ0MsTUFBRCxDQUFiO0FBQ0gsS0E1R0k7O0FBOEdMOzs7Ozs7OztBQVFBQyxXQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQkMsR0FBakIsRUFBc0JwQixPQUF0QixFQUErQmhCLEtBQS9CLEVBQXNDO0FBRTNDLFVBQUksS0FBS2UsZUFBTCxDQUFxQkMsT0FBckIsS0FBaUMsS0FBS3FCLFVBQUwsQ0FBZ0JyQyxLQUFoQixDQUFyQyxFQUE2RDtBQUN6RCxlQUFPc0MsVUFBVSxDQUFDdEMsS0FBRCxDQUFqQjtBQUNILE9BRkQsTUFFTyxJQUFJLEtBQUtVLE9BQUwsQ0FBYVYsS0FBYixDQUFKLEVBQXlCO0FBQzVCLGVBQU9zQyxVQUFVLENBQUN0QyxLQUFLLENBQUNZLE1BQVAsQ0FBakI7QUFDSCxPQUZNLE1BRUEsSUFBSUksT0FBTyxDQUFDVCxJQUFSLEtBQWlCLE1BQXJCLEVBQTZCO0FBQ2hDLGVBQU8rQixVQUFVLENBQUNDLElBQUksQ0FBQ0MsS0FBTCxDQUFXLEtBQUs1QyxRQUFMLENBQWNvQixPQUFkLEVBQXVCVixJQUFsQyxDQUFELENBQWpCO0FBQ0g7O0FBRUQsYUFBT2dDLFVBQVUsQ0FBQyxLQUFLTCxNQUFMLENBQVlqQyxLQUFaLENBQUQsQ0FBakI7QUFDSCxLQWpJSTs7QUFvSUw7Ozs7Ozs7QUFPQXlDLHdCQUFvQixFQUFFLFVBQVNDLElBQVQsRUFBZTFCLE9BQWYsRUFBd0I7QUFFMUMsVUFBSUcsS0FBSyxHQUFHd0IsU0FBWjtBQUNBcEQsT0FBQyxDQUFDb0MsSUFBRixDQUFPcEMsQ0FBQyxDQUFDNkIsU0FBRixDQUFZd0IsV0FBWixDQUF3QjVCLE9BQXhCLENBQVAsRUFBeUMsVUFBUzZCLEdBQVQsRUFBYzNCLEtBQWQsRUFBcUI7QUFDMUQsWUFBSTJCLEdBQUcsS0FBRyxtQkFBVixFQUErQjtBQUMzQnRELFdBQUMsQ0FBQ29DLElBQUYsQ0FBT1QsS0FBUCxFQUFjLFVBQVVQLENBQVYsRUFBYVgsS0FBYixFQUFvQjtBQUM5QixnQkFBSUEsS0FBSyxDQUFDLENBQUQsQ0FBTCxLQUFXMEMsSUFBZixFQUFxQjtBQUNqQnZCLG1CQUFLLEdBQUNuQixLQUFOO0FBQ0g7QUFDSixXQUpEO0FBS0g7QUFDSixPQVJEO0FBVUEsYUFBT21CLEtBQVA7QUFDSCxLQXpKSTs7QUEySkw7Ozs7Ozs7QUFPQTJCLGFBQVMsRUFBRSxVQUFVOUMsS0FBVixFQUFpQitDLE1BQWpCLEVBQXlCO0FBRWhDLFVBQUlDLFNBQVMsR0FBRyxLQUFoQjtBQUNBLFVBQUlDLEdBQUcsR0FBRyxJQUFJQyxhQUFKLEVBQVY7O0FBRUEsVUFBSSxPQUFPSCxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQzVCLFlBQUlJLFFBQVEsR0FBRyxLQUFLVixvQkFBTCxDQUEwQixZQUExQixFQUF3Q00sTUFBeEMsQ0FBZjs7QUFDQSxZQUFJSSxRQUFRLEtBQUtSLFNBQWpCLEVBQTRCO0FBQ3hCSSxnQkFBTSxHQUFHSSxRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVksQ0FBWixDQUFUO0FBQ0gsU0FGRCxNQUVPO0FBQ0hKLGdCQUFNLEdBQUcsSUFBVDtBQUNIO0FBQ0o7O0FBRUQsVUFBSUEsTUFBTSxJQUFJLElBQWQsRUFBb0I7QUFDaEJDLGlCQUFTLEdBQUcsS0FBS0ksU0FBTCxDQUFlcEQsS0FBZixDQUFaO0FBQ0gsT0FGRCxNQUVPO0FBQ0hnRCxpQkFBUyxHQUFHQyxHQUFHLENBQUNJLFNBQUosQ0FBY3JELEtBQWQsRUFBcUIrQyxNQUFyQixDQUFaOztBQUNBLFlBQUlDLFNBQUosRUFBZTtBQUNYQSxtQkFBUyxHQUFHVCxJQUFJLENBQUNlLEtBQUwsQ0FBWU4sU0FBUyxDQUFDTyxPQUFWLEtBQXNCLElBQWxDLENBQVo7QUFDSDtBQUNKOztBQUVELGFBQU9QLFNBQVA7QUFDSCxLQTFMSTs7QUE0TEw7Ozs7Ozs7Ozs7QUFVQVEsZ0JBQVksRUFBRSxVQUFVcEMsU0FBVixFQUFxQnBCLEtBQXJCLEVBQTRCZ0IsT0FBNUIsRUFBcUN5QyxNQUFyQyxFQUE2Q0MsUUFBN0MsRUFBdUQ7QUFFakUsVUFBSUMsV0FBVyxHQUFHckIsVUFBVSxDQUFDbUIsTUFBRCxDQUE1Qjs7QUFFQSxVQUFJRyxLQUFLLENBQUNELFdBQUQsQ0FBVCxFQUF3QjtBQUNwQixZQUFJRSxNQUFNLEdBQUcsS0FBS0MsZ0JBQUwsQ0FBc0IxQyxTQUF0QixFQUFpQ0osT0FBakMsRUFBMEN5QyxNQUExQyxDQUFiOztBQUNBLFlBQUlJLE1BQU0sS0FBS2xCLFNBQWYsRUFBMEI7QUFDdEIsaUJBQU8sS0FBUDtBQUNIOztBQUNEZ0IsbUJBQVcsR0FBRyxLQUFLYixTQUFMLENBQWUxQixTQUFTLENBQUMyQyxZQUFWLENBQXVCRixNQUF2QixDQUFmLEVBQStDQSxNQUEvQyxDQUFkO0FBQ0g7O0FBRUQsVUFBSWIsU0FBUyxHQUFHLEtBQUtGLFNBQUwsQ0FBZTlDLEtBQWYsRUFBc0JnQixPQUF0QixDQUFoQjs7QUFDQSxVQUFJZ0MsU0FBUyxLQUFLLEtBQWxCLEVBQXlCO0FBQ3JCLGVBQU8sS0FBUDtBQUNIOztBQUVELGNBQVFVLFFBQVI7QUFDSSxhQUFLLEdBQUw7QUFDSSxpQkFBT1YsU0FBUyxHQUFHVyxXQUFuQjs7QUFFSixhQUFLLElBQUw7QUFDSSxpQkFBT1gsU0FBUyxJQUFJVyxXQUFwQjs7QUFFSixhQUFLLElBQUw7QUFDQSxhQUFLLEtBQUw7QUFDSSxpQkFBT1gsU0FBUyxLQUFLVyxXQUFyQjs7QUFFSixhQUFLLEdBQUw7QUFDSSxpQkFBT1gsU0FBUyxHQUFHVyxXQUFuQjs7QUFFSixhQUFLLElBQUw7QUFDSSxpQkFBT1gsU0FBUyxJQUFJVyxXQUFwQjs7QUFFSjtBQUNJLGdCQUFNLElBQUlLLEtBQUosQ0FBVSx1QkFBVixDQUFOO0FBbEJSO0FBb0JILEtBM09JOztBQTZPTDs7Ozs7OztBQU9BQyxhQUFTLEVBQUUsVUFBVWpFLEtBQVYsRUFBaUIrQyxNQUFqQixFQUF5QjtBQUNoQyxVQUFJRSxHQUFHLEdBQUcsSUFBSUMsYUFBSixFQUFWO0FBQ0EsYUFBT0QsR0FBRyxDQUFDZ0IsU0FBSixDQUFjakUsS0FBZCxFQUFxQitDLE1BQXJCLENBQVA7QUFDSCxLQXZQSTs7QUF5UEw7Ozs7Ozs7OztBQVNBSyxhQUFTLEVBQUUsVUFBVWMsSUFBVixFQUFnQkMsR0FBaEIsRUFBcUI7QUFDNUIsYUFBT2YscUVBQVMsQ0FBQ2MsSUFBRCxFQUFPQyxHQUFQLENBQWhCO0FBQ0gsS0FwUUk7O0FBc1FMOzs7Ozs7OztBQVFBOUIsY0FBVSxFQUFFLFVBQVUrQixTQUFWLEVBQXFCO0FBQzdCLGFBQU8vQixpRUFBVSxDQUFDK0IsU0FBRCxDQUFqQjtBQUNILEtBaFJJOztBQWtSTDs7Ozs7OztBQU9BMUQsV0FBTyxFQUFFLFVBQVMyRCxHQUFULEVBQWM7QUFDbkIsYUFBT0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqQixDQUEwQkMsSUFBMUIsQ0FBK0JKLEdBQS9CLE1BQXdDLGdCQUEvQztBQUNILEtBM1JJOztBQTZSTDs7Ozs7Ozs7O0FBU0FLLGFBQVMsRUFBRSxVQUFVQyxJQUFWLEVBQWdCQyxJQUFoQixFQUFzQjtBQUM3QixhQUFPQyxtRUFBVSxDQUFDRixJQUFELEVBQU9DLElBQVAsQ0FBakI7QUFDSCxLQXhTSTs7QUEwU0w7Ozs7Ozs7QUFPQUUsZUFBVyxFQUFFLFVBQVVILElBQVYsRUFBZ0JDLElBQWhCLEVBQXNCO0FBQy9CLFVBQUksQ0FBRSxLQUFLbEUsT0FBTCxDQUFhaUUsSUFBYixDQUFGLElBQXdCLENBQUUsS0FBS2pFLE9BQUwsQ0FBYWtFLElBQWIsQ0FBOUIsRUFBa0Q7QUFDOUMsZUFBTyxLQUFQO0FBQ0g7O0FBRUQsVUFBSUQsSUFBSSxDQUFDL0QsTUFBTCxLQUFnQmdFLElBQUksQ0FBQ2hFLE1BQXpCLEVBQWlDO0FBQzdCLGVBQU8sS0FBUDtBQUNIOztBQUVELGFBQU9yQixDQUFDLENBQUN3RixhQUFGLENBQWdCLEtBQUtMLFNBQUwsQ0FBZUMsSUFBZixFQUFxQkMsSUFBckIsQ0FBaEIsQ0FBUDtBQUNILEtBM1RJOztBQTZUTDs7Ozs7Ozs7QUFRQWQsb0JBQWdCLEVBQUUsVUFBUzFDLFNBQVQsRUFBb0JKLE9BQXBCLEVBQTZCVSxJQUE3QixFQUFtQztBQUVqRCxVQUFJc0QsRUFBRSxHQUFDNUQsU0FBUyxDQUFDNkQsVUFBVixDQUFxQnZELElBQXJCLENBQVA7O0FBRUEsVUFBS3NELEVBQUUsQ0FBQyxDQUFELENBQUYsS0FBUXJDLFNBQVIsSUFBc0J2QixTQUFTLENBQUNTLFFBQVYsQ0FBbUJxRCxVQUE5QyxFQUEyRDtBQUN2RCxZQUFJQyxLQUFLLEdBQUcsTUFBWjs7QUFDQSxZQUFJSCxFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU1JLE9BQU4sS0FBa0IsUUFBbEIsSUFDQUosRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNSSxPQUFOLEtBQWtCLFFBRGxCLElBRUFKLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTXpFLElBQU4sS0FBZSxVQUZmLElBR0F5RSxFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU16RSxJQUFOLEtBQWUsT0FIbkIsRUFJRTtBQUNFNEUsZUFBSyxHQUFHLE9BQVI7QUFDSDs7QUFFRCxZQUFJRSxRQUFRLEdBQUcsNkJBQWY7QUFDQUwsVUFBRSxDQUFDTSxHQUFILENBQVFELFFBQVIsRUFDS0MsR0FETCxDQUNTSCxLQUFLLEdBQUdFLFFBQVIsR0FBbUIsR0FBbkIsR0FBeUJyRSxPQUFPLENBQUNVLElBRDFDLEVBRUs2RCxFQUZMLENBRVNKLEtBQUssR0FBR0UsUUFBUixHQUFtQixHQUFuQixHQUF5QnJFLE9BQU8sQ0FBQ1UsSUFGMUMsRUFFZ0QsWUFBVztBQUNuRG5DLFdBQUMsQ0FBRXlCLE9BQUYsQ0FBRCxDQUFhd0UsS0FBYjtBQUNILFNBSkw7QUFLSDs7QUFFRCxhQUFPUixFQUFFLENBQUMsQ0FBRCxDQUFUO0FBQ0gsS0E1Vkk7O0FBOFZMOzs7Ozs7QUFNQVMsc0JBQWtCLEVBQUUsVUFBVUMsUUFBVixFQUFvQjtBQUNwQyxVQUFJQyxXQUFXLEdBQUcsQ0FBQywwQ0FBRCxDQUFsQjs7QUFDQSxVQUFJLGtCQUFrQkQsUUFBdEIsRUFBZ0M7QUFDNUIsWUFBSUUsUUFBUSxHQUFHRixRQUFRLENBQUNHLFlBQVQsQ0FBc0JDLEtBQXRCLENBQTRCLHVCQUE1QixDQUFmOztBQUNBLFlBQUksS0FBS3BGLE9BQUwsQ0FBYWtGLFFBQWIsQ0FBSixFQUE0QjtBQUN4QkQscUJBQVcsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBRCxDQUFULENBQWQ7QUFDSDtBQUNKOztBQUNELGFBQU9ELFdBQVA7QUFDSCxLQTdXSTs7QUErV0w7Ozs7OztBQU1BSSxnQkFBWSxFQUFFLFVBQVVDLEdBQVYsRUFBZTtBQUN6QixhQUFPQSxHQUFHLENBQUNDLE9BQUosQ0FBWSxxQ0FBWixFQUFtRCxNQUFuRCxDQUFQO0FBQ0gsS0F2WEk7O0FBeVhMOzs7Ozs7QUFNQUMscUJBQWlCLEVBQUUsVUFBU3hFLElBQVQsRUFBZTtBQUM5QixVQUFJeUUsU0FBUyxHQUFHekUsSUFBSSxDQUFDMEUsS0FBTCxDQUFXLEtBQVgsQ0FBaEI7O0FBQ0EsVUFBSUQsU0FBUyxDQUFDdkYsTUFBVixLQUFxQixDQUF6QixFQUE0QjtBQUN4QnVGLGlCQUFTLENBQUN0RixJQUFWLENBQWUsRUFBZjtBQUNIOztBQUNELFVBQUl3RixXQUFXLEdBQUdGLFNBQVMsQ0FBQ0csR0FBVixDQUFjLFVBQVNDLFlBQVQsRUFBdUJ6RyxLQUF2QixFQUE4QjtBQUMxRCxZQUFJQSxLQUFLLEdBQUcsQ0FBUixLQUFjLENBQWxCLEVBQXFCO0FBQ2pCeUcsc0JBQVksR0FBR0EsWUFBWSxHQUFHLEdBQTlCO0FBQ0gsU0FGRCxNQUVPO0FBQ0hBLHNCQUFZLEdBQUcsTUFBS0EsWUFBcEI7QUFDSDs7QUFFRCxlQUFPOUcsaUJBQWlCLENBQUNDLE9BQWxCLENBQTBCcUcsWUFBMUIsQ0FBdUNRLFlBQXZDLENBQVA7QUFDSCxPQVJpQixDQUFsQjtBQVVBLGFBQU8sSUFBSUMsTUFBSixDQUFXLE1BQUlILFdBQVcsQ0FBQ3ZGLElBQVosQ0FBaUIsU0FBakIsQ0FBSixHQUFnQyxHQUEzQyxDQUFQO0FBQ0gsS0EvWUk7O0FBaVpMOzs7Ozs7O0FBT0EyRixjQUFVLEVBQUUsVUFBVXZGLEtBQVYsRUFBaUJ3RixRQUFqQixFQUEyQjtBQUNuQyxVQUFJQyxTQUFTLEdBQUc7QUFDWiw2QkFBcUJELFFBQVEsQ0FBQ2pILGlCQUFULElBQThCLEVBRHZDO0FBRVosbUNBQTJCaUgsUUFBUSxDQUFDRSx1QkFBVCxJQUFvQztBQUZuRCxPQUFoQjs7QUFLQSxXQUFLLElBQUkvRCxHQUFULElBQWdCOEQsU0FBaEIsRUFBMkI7QUFDdkIsWUFBSUEsU0FBUyxDQUFDOUQsR0FBRCxDQUFULENBQWVqQyxNQUFmLEtBQTBCLENBQTlCLEVBQWlDO0FBQzdCO0FBQ0g7O0FBRUQsWUFBSSxPQUFPTSxLQUFLLENBQUMyQixHQUFELENBQVosS0FBc0IsV0FBMUIsRUFBdUM7QUFDbkMzQixlQUFLLENBQUMyQixHQUFELENBQUwsR0FBYSxFQUFiO0FBQ0g7O0FBRUQzQixhQUFLLENBQUMyQixHQUFELENBQUwsR0FBYTNCLEtBQUssQ0FBQzJCLEdBQUQsQ0FBTCxDQUFXZ0UsTUFBWCxDQUFrQkYsU0FBUyxDQUFDOUQsR0FBRCxDQUEzQixDQUFiO0FBQ0g7O0FBRUQsYUFBTzNCLEtBQVA7QUFDSDtBQTNhSTtBQUZxQixDQUFsQyxFIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3Jlc291cmNlcy9hc3NldHMvanMvaGVscGVycy5qc1wiKTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhcnJheV9kaWZmKGFycjEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvYXJyYXlfZGlmZi9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHBzOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogU2Fuam95IFJveVxuICAvLyAgcmV2aXNlZCBieTogQnJldHQgWmFtaXIgKGh0dHBzOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgZXhhbXBsZSAxOiBhcnJheV9kaWZmKFsnS2V2aW4nLCAndmFuJywgJ1pvbm5ldmVsZCddLCBbJ3ZhbicsICdab25uZXZlbGQnXSlcbiAgLy8gICByZXR1cm5zIDE6IHswOidLZXZpbid9XG5cbiAgdmFyIHJldEFyciA9IHt9O1xuICB2YXIgYXJnbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBrMSA9ICcnO1xuICB2YXIgaSA9IDE7XG4gIHZhciBrID0gJyc7XG4gIHZhciBhcnIgPSB7fTtcblxuICBhcnIxa2V5czogZm9yIChrMSBpbiBhcnIxKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sYWJlbHNcbiAgICBmb3IgKGkgPSAxOyBpIDwgYXJnbDsgaSsrKSB7XG4gICAgICBhcnIgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKGsgaW4gYXJyKSB7XG4gICAgICAgIGlmIChhcnJba10gPT09IGFycjFbazFdKSB7XG4gICAgICAgICAgLy8gSWYgaXQgcmVhY2hlcyBoZXJlLCBpdCB3YXMgZm91bmQgaW4gYXQgbGVhc3Qgb25lIGFycmF5LCBzbyB0cnkgbmV4dCB2YWx1ZVxuICAgICAgICAgIGNvbnRpbnVlIGFycjFrZXlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxhYmVsc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXRBcnJbazFdID0gYXJyMVtrMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldEFycjtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJheV9kaWZmLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlU3BhY2UgPSAnWyBcXFxcdF0rJztcbnZhciByZVNwYWNlT3B0ID0gJ1sgXFxcXHRdKic7XG52YXIgcmVNZXJpZGlhbiA9ICcoPzooW2FwXSlcXFxcLj9tXFxcXC4/KFtcXFxcdCBdfCQpKSc7XG52YXIgcmVIb3VyMjQgPSAnKDJbMC00XXxbMDFdP1swLTldKSc7XG52YXIgcmVIb3VyMjRseiA9ICcoWzAxXVswLTldfDJbMC00XSknO1xudmFyIHJlSG91cjEyID0gJygwP1sxLTldfDFbMC0yXSknO1xudmFyIHJlTWludXRlID0gJyhbMC01XT9bMC05XSknO1xudmFyIHJlTWludXRlbHogPSAnKFswLTVdWzAtOV0pJztcbnZhciByZVNlY29uZCA9ICcoNjB8WzAtNV0/WzAtOV0pJztcbnZhciByZVNlY29uZGx6ID0gJyg2MHxbMC01XVswLTldKSc7XG52YXIgcmVGcmFjID0gJyg/OlxcXFwuKFswLTldKykpJztcblxudmFyIHJlRGF5ZnVsbCA9ICdzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSc7XG52YXIgcmVEYXlhYmJyID0gJ3N1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCc7XG52YXIgcmVEYXl0ZXh0ID0gcmVEYXlmdWxsICsgJ3wnICsgcmVEYXlhYmJyICsgJ3x3ZWVrZGF5cz8nO1xuXG52YXIgcmVSZWx0ZXh0bnVtYmVyID0gJ2ZpcnN0fHNlY29uZHx0aGlyZHxmb3VydGh8ZmlmdGh8c2l4dGh8c2V2ZW50aHxlaWdodGg/fG5pbnRofHRlbnRofGVsZXZlbnRofHR3ZWxmdGgnO1xudmFyIHJlUmVsdGV4dHRleHQgPSAnbmV4dHxsYXN0fHByZXZpb3VzfHRoaXMnO1xudmFyIHJlUmVsdGV4dHVuaXQgPSAnKD86c2Vjb25kfHNlY3xtaW51dGV8bWlufGhvdXJ8ZGF5fGZvcnRuaWdodHxmb3J0aG5pZ2h0fG1vbnRofHllYXIpcz98d2Vla3N8JyArIHJlRGF5dGV4dDtcblxudmFyIHJlWWVhciA9ICcoWzAtOV17MSw0fSknO1xudmFyIHJlWWVhcjIgPSAnKFswLTldezJ9KSc7XG52YXIgcmVZZWFyNCA9ICcoWzAtOV17NH0pJztcbnZhciByZVllYXI0d2l0aFNpZ24gPSAnKFsrLV0/WzAtOV17NH0pJztcbnZhciByZU1vbnRoID0gJygxWzAtMl18MD9bMC05XSknO1xudmFyIHJlTW9udGhseiA9ICcoMFswLTldfDFbMC0yXSknO1xudmFyIHJlRGF5ID0gJyg/OigzWzAxXXxbMC0yXT9bMC05XSkoPzpzdHxuZHxyZHx0aCk/KSc7XG52YXIgcmVEYXlseiA9ICcoMFswLTldfFsxLTJdWzAtOV18M1swMV0pJztcblxudmFyIHJlTW9udGhGdWxsID0gJ2phbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXInO1xudmFyIHJlTW9udGhBYmJyID0gJ2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwdD98b2N0fG5vdnxkZWMnO1xudmFyIHJlTW9udGhyb21hbiA9ICdpW3Z4XXx2aXswLDN9fHhpezAsMn18aXsxLDN9JztcbnZhciByZU1vbnRoVGV4dCA9ICcoJyArIHJlTW9udGhGdWxsICsgJ3wnICsgcmVNb250aEFiYnIgKyAnfCcgKyByZU1vbnRocm9tYW4gKyAnKSc7XG5cbnZhciByZVR6Q29ycmVjdGlvbiA9ICcoKD86R01UKT8oWystXSknICsgcmVIb3VyMjQgKyAnOj8nICsgcmVNaW51dGUgKyAnPyknO1xudmFyIHJlRGF5T2ZZZWFyID0gJygwMFsxLTldfDBbMS05XVswLTldfFsxMl1bMC05XVswLTldfDNbMC01XVswLTldfDM2WzAtNl0pJztcbnZhciByZVdlZWtPZlllYXIgPSAnKDBbMS05XXxbMS00XVswLTldfDVbMC0zXSknO1xuXG52YXIgcmVEYXRlTm9ZZWFyID0gcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSonO1xuXG5mdW5jdGlvbiBwcm9jZXNzTWVyaWRpYW4oaG91ciwgbWVyaWRpYW4pIHtcbiAgbWVyaWRpYW4gPSBtZXJpZGlhbiAmJiBtZXJpZGlhbi50b0xvd2VyQ2FzZSgpO1xuXG4gIHN3aXRjaCAobWVyaWRpYW4pIHtcbiAgICBjYXNlICdhJzpcbiAgICAgIGhvdXIgKz0gaG91ciA9PT0gMTIgPyAtMTIgOiAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncCc6XG4gICAgICBob3VyICs9IGhvdXIgIT09IDEyID8gMTIgOiAwO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gaG91cjtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1llYXIoeWVhclN0cikge1xuICB2YXIgeWVhciA9ICt5ZWFyU3RyO1xuXG4gIGlmICh5ZWFyU3RyLmxlbmd0aCA8IDQgJiYgeWVhciA8IDEwMCkge1xuICAgIHllYXIgKz0geWVhciA8IDcwID8gMjAwMCA6IDE5MDA7XG4gIH1cblxuICByZXR1cm4geWVhcjtcbn1cblxuZnVuY3Rpb24gbG9va3VwTW9udGgobW9udGhTdHIpIHtcbiAgcmV0dXJuIHtcbiAgICBqYW46IDAsXG4gICAgamFudWFyeTogMCxcbiAgICBpOiAwLFxuICAgIGZlYjogMSxcbiAgICBmZWJydWFyeTogMSxcbiAgICBpaTogMSxcbiAgICBtYXI6IDIsXG4gICAgbWFyY2g6IDIsXG4gICAgaWlpOiAyLFxuICAgIGFwcjogMyxcbiAgICBhcHJpbDogMyxcbiAgICBpdjogMyxcbiAgICBtYXk6IDQsXG4gICAgdjogNCxcbiAgICBqdW46IDUsXG4gICAganVuZTogNSxcbiAgICB2aTogNSxcbiAgICBqdWw6IDYsXG4gICAganVseTogNixcbiAgICB2aWk6IDYsXG4gICAgYXVnOiA3LFxuICAgIGF1Z3VzdDogNyxcbiAgICB2aWlpOiA3LFxuICAgIHNlcDogOCxcbiAgICBzZXB0OiA4LFxuICAgIHNlcHRlbWJlcjogOCxcbiAgICBpeDogOCxcbiAgICBvY3Q6IDksXG4gICAgb2N0b2JlcjogOSxcbiAgICB4OiA5LFxuICAgIG5vdjogMTAsXG4gICAgbm92ZW1iZXI6IDEwLFxuICAgIHhpOiAxMCxcbiAgICBkZWM6IDExLFxuICAgIGRlY2VtYmVyOiAxMSxcbiAgICB4aWk6IDExXG4gIH1bbW9udGhTdHIudG9Mb3dlckNhc2UoKV07XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFdlZWtkYXkoZGF5U3RyKSB7XG4gIHZhciBkZXNpcmVkU3VuZGF5TnVtYmVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuXG4gIHZhciBkYXlOdW1iZXJzID0ge1xuICAgIG1vbjogMSxcbiAgICBtb25kYXk6IDEsXG4gICAgdHVlOiAyLFxuICAgIHR1ZXNkYXk6IDIsXG4gICAgd2VkOiAzLFxuICAgIHdlZG5lc2RheTogMyxcbiAgICB0aHU6IDQsXG4gICAgdGh1cnNkYXk6IDQsXG4gICAgZnJpOiA1LFxuICAgIGZyaWRheTogNSxcbiAgICBzYXQ6IDYsXG4gICAgc2F0dXJkYXk6IDYsXG4gICAgc3VuOiAwLFxuICAgIHN1bmRheTogMFxuICB9O1xuXG4gIHJldHVybiBkYXlOdW1iZXJzW2RheVN0ci50b0xvd2VyQ2FzZSgpXSB8fCBkZXNpcmVkU3VuZGF5TnVtYmVyO1xufVxuXG5mdW5jdGlvbiBsb29rdXBSZWxhdGl2ZShyZWxUZXh0KSB7XG4gIHZhciByZWxhdGl2ZU51bWJlcnMgPSB7XG4gICAgbGFzdDogLTEsXG4gICAgcHJldmlvdXM6IC0xLFxuICAgIHRoaXM6IDAsXG4gICAgZmlyc3Q6IDEsXG4gICAgbmV4dDogMSxcbiAgICBzZWNvbmQ6IDIsXG4gICAgdGhpcmQ6IDMsXG4gICAgZm91cnRoOiA0LFxuICAgIGZpZnRoOiA1LFxuICAgIHNpeHRoOiA2LFxuICAgIHNldmVudGg6IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgZWlnaHRoOiA4LFxuICAgIG5pbnRoOiA5LFxuICAgIHRlbnRoOiAxMCxcbiAgICBlbGV2ZW50aDogMTEsXG4gICAgdHdlbGZ0aDogMTJcbiAgfTtcblxuICB2YXIgcmVsYXRpdmVCZWhhdmlvciA9IHtcbiAgICB0aGlzOiAxXG4gIH07XG5cbiAgdmFyIHJlbFRleHRMb3dlciA9IHJlbFRleHQudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4ge1xuICAgIGFtb3VudDogcmVsYXRpdmVOdW1iZXJzW3JlbFRleHRMb3dlcl0sXG4gICAgYmVoYXZpb3I6IHJlbGF0aXZlQmVoYXZpb3JbcmVsVGV4dExvd2VyXSB8fCAwXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUekNvcnJlY3Rpb24odHpPZmZzZXQsIG9sZFZhbHVlKSB7XG4gIHZhciByZVR6Q29ycmVjdGlvbkxvb3NlID0gLyg/OkdNVCk/KFsrLV0pKFxcZCspKDo/KShcXGR7MCwyfSkvaTtcbiAgdHpPZmZzZXQgPSB0ek9mZnNldCAmJiB0ek9mZnNldC5tYXRjaChyZVR6Q29ycmVjdGlvbkxvb3NlKTtcblxuICBpZiAoIXR6T2Zmc2V0KSB7XG4gICAgcmV0dXJuIG9sZFZhbHVlO1xuICB9XG5cbiAgdmFyIHNpZ24gPSB0ek9mZnNldFsxXSA9PT0gJy0nID8gMSA6IC0xO1xuICB2YXIgaG91cnMgPSArdHpPZmZzZXRbMl07XG4gIHZhciBtaW51dGVzID0gK3R6T2Zmc2V0WzRdO1xuXG4gIGlmICghdHpPZmZzZXRbNF0gJiYgIXR6T2Zmc2V0WzNdKSB7XG4gICAgbWludXRlcyA9IE1hdGguZmxvb3IoaG91cnMgJSAxMDApO1xuICAgIGhvdXJzID0gTWF0aC5mbG9vcihob3VycyAvIDEwMCk7XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIDYwICsgbWludXRlcyk7XG59XG5cbnZhciBmb3JtYXRzID0ge1xuICB5ZXN0ZXJkYXk6IHtcbiAgICByZWdleDogL155ZXN0ZXJkYXkvaSxcbiAgICBuYW1lOiAneWVzdGVyZGF5JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJkIC09IDE7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgbm93OiB7XG4gICAgcmVnZXg6IC9ebm93L2ksXG4gICAgbmFtZTogJ25vdydcbiAgICAvLyBkbyBub3RoaW5nXG4gIH0sXG5cbiAgbm9vbjoge1xuICAgIHJlZ2V4OiAvXm5vb24vaSxcbiAgICBuYW1lOiAnbm9vbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCkgJiYgdGhpcy50aW1lKDEyLCAwLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgbWlkbmlnaHRPclRvZGF5OiB7XG4gICAgcmVnZXg6IC9eKG1pZG5pZ2h0fHRvZGF5KS9pLFxuICAgIG5hbWU6ICdtaWRuaWdodCB8IHRvZGF5JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgdG9tb3Jyb3c6IHtcbiAgICByZWdleDogL150b21vcnJvdy9pLFxuICAgIG5hbWU6ICd0b21vcnJvdycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgdGhpcy5yZCArPSAxO1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVzdGFtcDoge1xuICAgIHJlZ2V4OiAvXkAoLT9cXGQrKS9pLFxuICAgIG5hbWU6ICd0aW1lc3RhbXAnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgdGltZXN0YW1wKSB7XG4gICAgICB0aGlzLnJzICs9ICt0aW1lc3RhbXA7XG4gICAgICB0aGlzLnkgPSAxOTcwO1xuICAgICAgdGhpcy5tID0gMDtcbiAgICAgIHRoaXMuZCA9IDE7XG4gICAgICB0aGlzLmRhdGVzID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCkgJiYgdGhpcy56b25lKDApO1xuICAgIH1cbiAgfSxcblxuICBmaXJzdE9yTGFzdERheToge1xuICAgIHJlZ2V4OiAvXihmaXJzdHxsYXN0KSBkYXkgb2YvaSxcbiAgICBuYW1lOiAnZmlyc3RkYXlvZiB8IGxhc3RkYXlvZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXkpIHtcbiAgICAgIGlmIChkYXkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICB0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBiYWNrT3JGcm9udE9mOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXihiYWNrfGZyb250KSBvZiAnICsgcmVIb3VyMjQgKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiArICc/JywgJ2knKSxcbiAgICBuYW1lOiAnYmFja29mIHwgZnJvbnRvZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBzaWRlLCBob3VycywgbWVyaWRpYW4pIHtcbiAgICAgIHZhciBiYWNrID0gc2lkZS50b0xvd2VyQ2FzZSgpID09PSAnYmFjayc7XG4gICAgICB2YXIgaG91ciA9ICtob3VycztcbiAgICAgIHZhciBtaW51dGUgPSAxNTtcblxuICAgICAgaWYgKCFiYWNrKSB7XG4gICAgICAgIGhvdXIgLT0gMTtcbiAgICAgICAgbWludXRlID0gNDU7XG4gICAgICB9XG5cbiAgICAgIGhvdXIgPSBwcm9jZXNzTWVyaWRpYW4oaG91ciwgbWVyaWRpYW4pO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnRpbWUoaG91ciwgbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgd2Vla2RheU9mOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0bnVtYmVyICsgJ3wnICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnKCcgKyByZURheWZ1bGwgKyAnfCcgKyByZURheWFiYnIgKyAnKScgKyByZVNwYWNlICsgJ29mJywgJ2knKSxcbiAgICBuYW1lOiAnd2Vla2RheW9mJ1xuICAgIC8vIHRvZG9cbiAgfSxcblxuICBtc3NxbHRpbWU6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHogKyAnWzouXShbMC05XSspJyArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ21zc3FsdGltZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhYywgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsICtzZWNvbmQsICtmcmFjLnN1YnN0cigwLCAzKSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVMb25nMTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZGx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ3RpbWVsb25nMTInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVNob3J0MTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJ1s6Ll0nICsgcmVNaW51dGVseiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICd0aW1lc2hvcnQxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVRpbnkxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAndGltZXRpbnkxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtZXJpZGlhbikge1xuICAgICAgcmV0dXJuIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgMCwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIHNvYXA6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLScgKyByZU1vbnRobHogKyAnLScgKyByZURheWx6ICsgJ1QnICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6ICsgcmVGcmFjICsgcmVUekNvcnJlY3Rpb24gKyAnPycsICdpJyksXG4gICAgbmFtZTogJ3NvYXAnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWMsIHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgK2ZyYWMuc3Vic3RyKDAsIDMpKSAmJiB0aGlzLnpvbmUocHJvY2Vzc1R6Q29ycmVjdGlvbih0ekNvcnJlY3Rpb24pKTtcbiAgICB9XG4gIH0sXG5cbiAgd2RkeDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICctJyArIHJlTW9udGggKyAnLScgKyByZURheSArICdUJyArIHJlSG91cjI0ICsgJzonICsgcmVNaW51dGUgKyAnOicgKyByZVNlY29uZCksXG4gICAgbmFtZTogJ3dkZHgnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBleGlmOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJzonICsgcmVNb250aGx6ICsgJzonICsgcmVEYXlseiArICcgJyArIHJlSG91cjI0bHogKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiwgJ2knKSxcbiAgICBuYW1lOiAnZXhpZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIHhtbFJwYzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHogKyAnVCcgKyByZUhvdXIyNCArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6KSxcbiAgICBuYW1lOiAneG1scnBjJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgeG1sUnBjTm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHogKyAnW1R0XScgKyByZUhvdXIyNCArIHJlTWludXRlbHogKyByZVNlY29uZGx6KSxcbiAgICBuYW1lOiAneG1scnBjbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGNsZjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXkgKyAnLygnICsgcmVNb250aEFiYnIgKyAnKS8nICsgcmVZZWFyNCArICc6JyArIHJlSG91cjI0bHogKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiArIHJlU3BhY2UgKyByZVR6Q29ycmVjdGlvbiwgJ2knKSxcbiAgICBuYW1lOiAnY2xmJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCB0ekNvcnJlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApICYmIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICBpc284NjAxbG9uZzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ150PycgKyByZUhvdXIyNCArICdbOi5dJyArIHJlTWludXRlICsgJ1s6Ll0nICsgcmVTZWNvbmQgKyByZUZyYWMsICdpJyksXG4gICAgbmFtZTogJ2lzbzg2MDFsb25nJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCArZnJhYy5zdWJzdHIoMCwgMykpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlVGV4dHVhbDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSsnICsgcmVZZWFyLCAnaScpLFxuICAgIG5hbWU6ICdkYXRldGV4dHVhbCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHBvaW50ZWREYXRlNDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXkgKyAnWy5cXFxcdC1dJyArIHJlTW9udGggKyAnWy4tXScgKyByZVllYXI0KSxcbiAgICBuYW1lOiAncG9pbnRlZGRhdGU0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcG9pbnRlZERhdGUyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbLlxcXFx0XScgKyByZU1vbnRoICsgJ1xcXFwuJyArIHJlWWVhcjIpLFxuICAgIG5hbWU6ICdwb2ludGVkZGF0ZTInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICB0aW1lTG9uZzI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCksXG4gICAgbmFtZTogJ3RpbWVsb25nMjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHopLFxuICAgIG5hbWU6ICdkYXRlbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHBneWRvdGQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnXFxcXC4/JyArIHJlRGF5T2ZZZWFyKSxcbiAgICBuYW1lOiAncGd5ZG90ZCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgMCwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVTaG9ydDI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUsICdpJyksXG4gICAgbmFtZTogJ3RpbWVzaG9ydDI0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFub0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0bHogKyByZU1pbnV0ZWx6ICsgcmVTZWNvbmRseiwgJ2knKSxcbiAgICBuYW1lOiAnaXNvODYwMW5vY29sb24nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBpc284NjAxZGF0ZVNsYXNoOiB7XG4gICAgLy8gZXZlbnRob3VnaCB0aGUgdHJhaWxpbmcgc2xhc2ggaXMgb3B0aW9uYWwgaW4gUEhQXG4gICAgLy8gaGVyZSBpdCdzIG1hbmRhdG9yeSBhbmQgaW5wdXRzIHdpdGhvdXQgdGhlIHNsYXNoXG4gICAgLy8gYXJlIGhhbmRsZWQgYnkgZGF0ZXNsYXNoXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy8nICsgcmVNb250aGx6ICsgJy8nICsgcmVEYXlseiArICcvJyksXG4gICAgbmFtZTogJ2lzbzg2MDFkYXRlc2xhc2gnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlU2xhc2g6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLycgKyByZU1vbnRoICsgJy8nICsgcmVEYXkpLFxuICAgIG5hbWU6ICdkYXRlc2xhc2gnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBhbWVyaWNhbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aCArICcvJyArIHJlRGF5ICsgJy8nICsgcmVZZWFyKSxcbiAgICBuYW1lOiAnYW1lcmljYW4nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBhbWVyaWNhblNob3J0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoICsgJy8nICsgcmVEYXkpLFxuICAgIG5hbWU6ICdhbWVyaWNhbnNob3J0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGdudURhdGVTaG9ydE9ySXNvODYwMWRhdGUyOiB7XG4gICAgLy8gaXNvODYwMWRhdGUyIGlzIGNvbXBsZXRlIHN1YnNldCBvZiBnbnVkYXRlc2hvcnRcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhciArICctJyArIHJlTW9udGggKyAnLScgKyByZURheSksXG4gICAgbmFtZTogJ2dudWRhdGVzaG9ydCB8IGlzbzg2MDFkYXRlMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFkYXRlNDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNHdpdGhTaWduICsgJy0nICsgcmVNb250aGx6ICsgJy0nICsgcmVEYXlseiksXG4gICAgbmFtZTogJ2lzbzg2MDFkYXRlNCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGdudU5vQ29sb246IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjRseiArIHJlTWludXRlbHosICdpJyksXG4gICAgbmFtZTogJ2dudW5vY29sb24nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlKSB7XG4gICAgICAvLyB0aGlzIHJ1bGUgaXMgYSBzcGVjaWFsIGNhc2VcbiAgICAgIC8vIGlmIHRpbWUgd2FzIGFscmVhZHkgc2V0IG9uY2UgYnkgYW55IHByZWNlZGluZyBydWxlLCBpdCBzZXRzIHRoZSBjYXB0dXJlZCB2YWx1ZSBhcyB5ZWFyXG4gICAgICBzd2l0Y2ggKHRoaXMudGltZXMpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsIDAsIHRoaXMuZik7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLnkgPSBob3VyICogMTAwICsgK21pbnV0ZTtcbiAgICAgICAgICB0aGlzLnRpbWVzKys7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdudURhdGVTaG9ydGVyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0nICsgcmVNb250aCksXG4gICAgbmFtZTogJ2dudWRhdGVzaG9ydGVyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgMSk7XG4gICAgfVxuICB9LFxuXG4gIHBnVGV4dFJldmVyc2U6IHtcbiAgICAvLyBub3RlOiBhbGxvd2VkIHllYXJzIGFyZSBmcm9tIDMyLTk5OTlcbiAgICAvLyB5ZWFycyBiZWxvdyAzMiBzaG91bGQgYmUgdHJlYXRlZCBhcyBkYXlzIGluIGRhdGVmdWxsXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyAnKFxcXFxkezMsNH18WzQtOV1cXFxcZHwzWzItOV0pLSgnICsgcmVNb250aEFiYnIgKyAnKS0nICsgcmVEYXlseiwgJ2knKSxcbiAgICBuYW1lOiAncGd0ZXh0cmV2ZXJzZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVGdWxsOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbIFxcXFx0Li1dKicgKyByZU1vbnRoVGV4dCArICdbIFxcXFx0Li1dKicgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ2RhdGVmdWxsJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vRGF5OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoVGV4dCArICdbIC5cXFxcdC1dKicgKyByZVllYXI0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm9kYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vRGF5UmV2OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJ1sgLlxcXFx0LV0qJyArIHJlTW9udGhUZXh0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm9kYXlyZXYnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgcGdUZXh0U2hvcnQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZU1vbnRoQWJiciArICcpLScgKyByZURheWx6ICsgJy0nICsgcmVZZWFyLCAnaScpLFxuICAgIG5hbWU6ICdwZ3RleHRzaG9ydCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb1llYXI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF0ZU5vWWVhciwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZW5veWVhcicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9ZZWFyUmV2OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbIC5cXFxcdC1dKicgKyByZU1vbnRoVGV4dCwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZW5veWVhcnJldicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXksIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBpc29XZWVrRGF5OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0/VycgKyByZVdlZWtPZlllYXIgKyAnKD86LT8oWzAtN10pKT8nKSxcbiAgICBuYW1lOiAnaXNvd2Vla2RheSB8IGlzb3dlZWsnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgd2VlaywgZGF5KSB7XG4gICAgICBkYXkgPSBkYXkgPyArZGF5IDogMTtcblxuICAgICAgaWYgKCF0aGlzLnltZCgreWVhciwgMCwgMSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGF5IG9mIHdlZWsgZm9yIEphbiAxc3RcbiAgICAgIHZhciBkYXlPZldlZWsgPSBuZXcgRGF0ZSh0aGlzLnksIHRoaXMubSwgdGhpcy5kKS5nZXREYXkoKTtcblxuICAgICAgLy8gYW5kIHVzZSB0aGUgZGF5IHRvIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBmb3IgZGF5IDEgb2Ygd2VlayAxXG4gICAgICBkYXlPZldlZWsgPSAwIC0gKGRheU9mV2VlayA+IDQgPyBkYXlPZldlZWsgLSA3IDogZGF5T2ZXZWVrKTtcblxuICAgICAgdGhpcy5yZCArPSBkYXlPZldlZWsgKyAod2VlayAtIDEpICogNyArIGRheTtcbiAgICB9XG4gIH0sXG5cbiAgcmVsYXRpdmVUZXh0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0bnVtYmVyICsgJ3wnICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnKCcgKyByZVJlbHRleHR1bml0ICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdyZWxhdGl2ZXRleHQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgcmVsVmFsdWUsIHJlbFVuaXQpIHtcbiAgICAgIC8vIHRvZG86IGltcGxlbWVudCBoYW5kbGluZyBvZiAndGhpcyB0aW1lLXVuaXQnXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHZhciBfbG9va3VwUmVsYXRpdmUgPSBsb29rdXBSZWxhdGl2ZShyZWxWYWx1ZSksXG4gICAgICAgICAgYW1vdW50ID0gX2xvb2t1cFJlbGF0aXZlLmFtb3VudCxcbiAgICAgICAgICBiZWhhdmlvciA9IF9sb29rdXBSZWxhdGl2ZS5iZWhhdmlvcjtcblxuICAgICAgc3dpdGNoIChyZWxVbml0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHRoaXMucnMgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgdGhpcy5yaSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy5yaCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3J0bmlnaHQnOlxuICAgICAgICBjYXNlICdmb3J0bmlnaHRzJzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRobmlnaHRzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IGFtb3VudCAqIDE0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICAgIHRoaXMucm0gKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHRoaXMucnkgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb24nOmNhc2UgJ21vbmRheSc6XG4gICAgICAgIGNhc2UgJ3R1ZSc6Y2FzZSAndHVlc2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZCc6Y2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgY2FzZSAndGh1JzpjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIGNhc2UgJ2ZyaSc6Y2FzZSAnZnJpZGF5JzpcbiAgICAgICAgY2FzZSAnc2F0JzpjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIGNhc2UgJ3N1bic6Y2FzZSAnc3VuZGF5JzpcbiAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkocmVsVW5pdCwgNyk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgICAgIHRoaXMucmQgKz0gKGFtb3VudCA+IDAgPyBhbW91bnQgLSAxIDogYW1vdW50KSAqIDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICBjYXNlICd3ZWVrZGF5cyc6XG4gICAgICAgICAgLy8gdG9kb1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZToge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14oWystXSopWyBcXFxcdF0qKFxcXFxkKyknICsgcmVTcGFjZU9wdCArICcoJyArIHJlUmVsdGV4dHVuaXQgKyAnfHdlZWspJywgJ2knKSxcbiAgICBuYW1lOiAncmVsYXRpdmUnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgc2lnbnMsIHJlbFZhbHVlLCByZWxVbml0KSB7XG4gICAgICB2YXIgbWludXNlcyA9IHNpZ25zLnJlcGxhY2UoL1teLV0vZywgJycpLmxlbmd0aDtcblxuICAgICAgdmFyIGFtb3VudCA9ICtyZWxWYWx1ZSAqIE1hdGgucG93KC0xLCBtaW51c2VzKTtcblxuICAgICAgc3dpdGNoIChyZWxVbml0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHRoaXMucnMgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgdGhpcy5yaSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy5yaCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3J0bmlnaHQnOlxuICAgICAgICBjYXNlICdmb3J0bmlnaHRzJzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRobmlnaHRzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IGFtb3VudCAqIDE0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICAgIHRoaXMucm0gKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHRoaXMucnkgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb24nOmNhc2UgJ21vbmRheSc6XG4gICAgICAgIGNhc2UgJ3R1ZSc6Y2FzZSAndHVlc2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZCc6Y2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgY2FzZSAndGh1JzpjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIGNhc2UgJ2ZyaSc6Y2FzZSAnZnJpZGF5JzpcbiAgICAgICAgY2FzZSAnc2F0JzpjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIGNhc2UgJ3N1bic6Y2FzZSAnc3VuZGF5JzpcbiAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkocmVsVW5pdCwgNyk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgICAgIHRoaXMucmQgKz0gKGFtb3VudCA+IDAgPyBhbW91bnQgLSAxIDogYW1vdW50KSAqIDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICBjYXNlICd3ZWVrZGF5cyc6XG4gICAgICAgICAgLy8gdG9kb1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXlUZXh0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVEYXl0ZXh0ICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdkYXl0ZXh0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheVRleHQpIHtcbiAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICB0aGlzLndlZWtkYXkgPSBsb29rdXBXZWVrZGF5KGRheVRleHQsIDApO1xuXG4gICAgICBpZiAodGhpcy53ZWVrZGF5QmVoYXZpb3IgIT09IDIpIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZVRleHRXZWVrOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnd2VlaycsICdpJyksXG4gICAgbmFtZTogJ3JlbGF0aXZldGV4dHdlZWsnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgcmVsVGV4dCkge1xuICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAyO1xuXG4gICAgICBzd2l0Y2ggKHJlbFRleHQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICd0aGlzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIHRoaXMucmQgKz0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICB0aGlzLnJkIC09IDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05hTih0aGlzLndlZWtkYXkpKSB7XG4gICAgICAgIHRoaXMud2Vla2RheSA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vbnRoRnVsbE9yTW9udGhBYmJyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVNb250aEZ1bGwgKyAnfCcgKyByZU1vbnRoQWJiciArICcpJywgJ2knKSxcbiAgICBuYW1lOiAnbW9udGhmdWxsIHwgbW9udGhhYmJyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksIHRoaXMuZCk7XG4gICAgfVxuICB9LFxuXG4gIHR6Q29ycmVjdGlvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVUekNvcnJlY3Rpb24sICdpJyksXG4gICAgbmFtZTogJ3R6Y29ycmVjdGlvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICBhZ286IHtcbiAgICByZWdleDogL15hZ28vaSxcbiAgICBuYW1lOiAnYWdvJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJ5ID0gLXRoaXMucnk7XG4gICAgICB0aGlzLnJtID0gLXRoaXMucm07XG4gICAgICB0aGlzLnJkID0gLXRoaXMucmQ7XG4gICAgICB0aGlzLnJoID0gLXRoaXMucmg7XG4gICAgICB0aGlzLnJpID0gLXRoaXMucmk7XG4gICAgICB0aGlzLnJzID0gLXRoaXMucnM7XG4gICAgICB0aGlzLnJmID0gLXRoaXMucmY7XG4gICAgfVxuICB9LFxuXG4gIHllYXI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0KSxcbiAgICBuYW1lOiAneWVhcjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhcikge1xuICAgICAgdGhpcy55ID0gK3llYXI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2hpdGVzcGFjZToge1xuICAgIHJlZ2V4OiAvXlsgLixcXHRdKy8sXG4gICAgbmFtZTogJ3doaXRlc3BhY2UnXG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lTG9uZzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgJ3Q/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZXNob3J0d2l0aHRpbWVsb25nJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lTG9uZzEyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURhdGVOb1llYXIgKyByZUhvdXIxMiArICdbOi5dJyArIHJlTWludXRlICsgJ1s6Ll0nICsgcmVTZWNvbmRseiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICdkYXRlc2hvcnR3aXRodGltZWxvbmcxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSkgJiYgdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZVNob3J0V2l0aFRpbWVTaG9ydDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgJ3Q/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUsICdpJyksXG4gICAgbmFtZTogJ2RhdGVzaG9ydHdpdGh0aW1lc2hvcnQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSwgaG91ciwgbWludXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lU2hvcnQxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZWx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ2RhdGVzaG9ydHdpdGh0aW1lc2hvcnQxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcmVzdWx0UHJvdG8gPSB7XG4gIC8vIGRhdGVcbiAgeTogTmFOLFxuICBtOiBOYU4sXG4gIGQ6IE5hTixcbiAgLy8gdGltZVxuICBoOiBOYU4sXG4gIGk6IE5hTixcbiAgczogTmFOLFxuICBmOiBOYU4sXG5cbiAgLy8gcmVsYXRpdmUgc2hpZnRzXG4gIHJ5OiAwLFxuICBybTogMCxcbiAgcmQ6IDAsXG4gIHJoOiAwLFxuICByaTogMCxcbiAgcnM6IDAsXG4gIHJmOiAwLFxuXG4gIC8vIHdlZWtkYXkgcmVsYXRlZCBzaGlmdHNcbiAgd2Vla2RheTogTmFOLFxuICB3ZWVrZGF5QmVoYXZpb3I6IDAsXG5cbiAgLy8gZmlyc3Qgb3IgbGFzdCBkYXkgb2YgbW9udGhcbiAgLy8gMCBub25lLCAxIGZpcnN0LCAtMSBsYXN0XG4gIGZpcnN0T3JMYXN0RGF5T2ZNb250aDogMCxcblxuICAvLyB0aW1lem9uZSBjb3JyZWN0aW9uIGluIG1pbnV0ZXNcbiAgejogTmFOLFxuXG4gIC8vIGNvdW50ZXJzXG4gIGRhdGVzOiAwLFxuICB0aW1lczogMCxcbiAgem9uZXM6IDAsXG5cbiAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICB5bWQ6IGZ1bmN0aW9uIHltZCh5LCBtLCBkKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlcysrO1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy5tID0gbTtcbiAgICB0aGlzLmQgPSBkO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICB0aW1lOiBmdW5jdGlvbiB0aW1lKGgsIGksIHMsIGYpIHtcbiAgICBpZiAodGhpcy50aW1lcyA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzKys7XG4gICAgdGhpcy5oID0gaDtcbiAgICB0aGlzLmkgPSBpO1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5mID0gZjtcblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICByZXNldFRpbWU6IGZ1bmN0aW9uIHJlc2V0VGltZSgpIHtcbiAgICB0aGlzLmggPSAwO1xuICAgIHRoaXMuaSA9IDA7XG4gICAgdGhpcy5zID0gMDtcbiAgICB0aGlzLmYgPSAwO1xuICAgIHRoaXMudGltZXMgPSAwO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIHpvbmU6IGZ1bmN0aW9uIHpvbmUobWludXRlcykge1xuICAgIGlmICh0aGlzLnpvbmVzIDw9IDEpIHtcbiAgICAgIHRoaXMuem9uZXMrKztcbiAgICAgIHRoaXMueiA9IG1pbnV0ZXM7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHRvRGF0ZTogZnVuY3Rpb24gdG9EYXRlKHJlbGF0aXZlVG8pIHtcbiAgICBpZiAodGhpcy5kYXRlcyAmJiAhdGhpcy50aW1lcykge1xuICAgICAgdGhpcy5oID0gdGhpcy5pID0gdGhpcy5zID0gdGhpcy5mID0gMDtcbiAgICB9XG5cbiAgICAvLyBmaWxsIGhvbGVzXG4gICAgaWYgKGlzTmFOKHRoaXMueSkpIHtcbiAgICAgIHRoaXMueSA9IHJlbGF0aXZlVG8uZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5tKSkge1xuICAgICAgdGhpcy5tID0gcmVsYXRpdmVUby5nZXRNb250aCgpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmQpKSB7XG4gICAgICB0aGlzLmQgPSByZWxhdGl2ZVRvLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5oKSkge1xuICAgICAgdGhpcy5oID0gcmVsYXRpdmVUby5nZXRIb3VycygpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmkpKSB7XG4gICAgICB0aGlzLmkgPSByZWxhdGl2ZVRvLmdldE1pbnV0ZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5zKSkge1xuICAgICAgdGhpcy5zID0gcmVsYXRpdmVUby5nZXRTZWNvbmRzKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMuZikpIHtcbiAgICAgIHRoaXMuZiA9IHJlbGF0aXZlVG8uZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IHNwZWNpYWwgZWFybHlcbiAgICBzd2l0Y2ggKHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgdGhpcy5kID0gMDtcbiAgICAgICAgdGhpcy5tICs9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICghaXNOYU4odGhpcy53ZWVrZGF5KSkge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShyZWxhdGl2ZVRvLmdldFRpbWUoKSk7XG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpO1xuICAgICAgZGF0ZS5zZXRIb3Vycyh0aGlzLmgsIHRoaXMuaSwgdGhpcy5zLCB0aGlzLmYpO1xuXG4gICAgICB2YXIgZG93ID0gZGF0ZS5nZXREYXkoKTtcblxuICAgICAgaWYgKHRoaXMud2Vla2RheUJlaGF2aW9yID09PSAyKSB7XG4gICAgICAgIC8vIFRvIG1ha2UgXCJ0aGlzIHdlZWtcIiB3b3JrLCB3aGVyZSB0aGUgY3VycmVudCBkYXkgb2Ygd2VlayBpcyBhIFwic3VuZGF5XCJcbiAgICAgICAgaWYgKGRvdyA9PT0gMCAmJiB0aGlzLndlZWtkYXkgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndlZWtkYXkgPSAtNjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRvIG1ha2UgXCJzdW5kYXkgdGhpcyB3ZWVrXCIgd29yaywgd2hlcmUgdGhlIGN1cnJlbnQgZGF5IG9mIHdlZWsgaXMgbm90IGEgXCJzdW5kYXlcIlxuICAgICAgICBpZiAodGhpcy53ZWVrZGF5ID09PSAwICYmIGRvdyAhPT0gMCkge1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IDc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmQgLT0gZG93O1xuICAgICAgICB0aGlzLmQgKz0gdGhpcy53ZWVrZGF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLndlZWtkYXkgLSBkb3c7XG5cbiAgICAgICAgLy8gc29tZSBQSFAgbWFnaWNcbiAgICAgICAgaWYgKHRoaXMucmQgPCAwICYmIGRpZmYgPCAwIHx8IHRoaXMucmQgPj0gMCAmJiBkaWZmIDw9IC10aGlzLndlZWtkYXlCZWhhdmlvcikge1xuICAgICAgICAgIGRpZmYgKz0gNztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndlZWtkYXkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuZCArPSBkaWZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZCAtPSA3IC0gKE1hdGguYWJzKHRoaXMud2Vla2RheSkgLSBkb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53ZWVrZGF5ID0gTmFOO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkanVzdCByZWxhdGl2ZVxuICAgIHRoaXMueSArPSB0aGlzLnJ5O1xuICAgIHRoaXMubSArPSB0aGlzLnJtO1xuICAgIHRoaXMuZCArPSB0aGlzLnJkO1xuXG4gICAgdGhpcy5oICs9IHRoaXMucmg7XG4gICAgdGhpcy5pICs9IHRoaXMucmk7XG4gICAgdGhpcy5zICs9IHRoaXMucnM7XG4gICAgdGhpcy5mICs9IHRoaXMucmY7XG5cbiAgICB0aGlzLnJ5ID0gdGhpcy5ybSA9IHRoaXMucmQgPSAwO1xuICAgIHRoaXMucmggPSB0aGlzLnJpID0gdGhpcy5ycyA9IHRoaXMucmYgPSAwO1xuXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBEYXRlKHJlbGF0aXZlVG8uZ2V0VGltZSgpKTtcbiAgICAvLyBzaW5jZSBEYXRlIGNvbnN0cnVjdG9yIHRyZWF0cyB5ZWFycyA8PSA5OSBhcyAxOTAwK1xuICAgIC8vIGl0IGNhbid0IGJlIHVzZWQsIHRodXMgdGhpcyB3ZWlyZCB3YXlcbiAgICByZXN1bHQuc2V0RnVsbFllYXIodGhpcy55LCB0aGlzLm0sIHRoaXMuZCk7XG4gICAgcmVzdWx0LnNldEhvdXJzKHRoaXMuaCwgdGhpcy5pLCB0aGlzLnMsIHRoaXMuZik7XG5cbiAgICAvLyBub3RlOiB0aGlzIGlzIGRvbmUgdHdpY2UgaW4gUEhQXG4gICAgLy8gZWFybHkgd2hlbiBwcm9jZXNzaW5nIHNwZWNpYWwgcmVsYXRpdmVzXG4gICAgLy8gYW5kIGxhdGVcbiAgICAvLyB0b2RvOiBjaGVjayBpZiB0aGUgbG9naWMgY2FuIGJlIHJlZHVjZWRcbiAgICAvLyB0byBqdXN0IG9uZSB0aW1lIGFjdGlvblxuICAgIHN3aXRjaCAodGhpcy5maXJzdE9yTGFzdERheU9mTW9udGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmVzdWx0LnNldERhdGUoMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgcmVzdWx0LnNldE1vbnRoKHJlc3VsdC5nZXRNb250aCgpICsgMSwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGFkanVzdCB0aW1lem9uZVxuICAgIGlmICghaXNOYU4odGhpcy56KSAmJiByZXN1bHQuZ2V0VGltZXpvbmVPZmZzZXQoKSAhPT0gdGhpcy56KSB7XG4gICAgICByZXN1bHQuc2V0VVRDRnVsbFllYXIocmVzdWx0LmdldEZ1bGxZZWFyKCksIHJlc3VsdC5nZXRNb250aCgpLCByZXN1bHQuZ2V0RGF0ZSgpKTtcblxuICAgICAgcmVzdWx0LnNldFVUQ0hvdXJzKHJlc3VsdC5nZXRIb3VycygpLCByZXN1bHQuZ2V0TWludXRlcygpICsgdGhpcy56LCByZXN1bHQuZ2V0U2Vjb25kcygpLCByZXN1bHQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RydG90aW1lKHN0ciwgbm93KSB7XG4gIC8vICAgICAgIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvc3RydG90aW1lL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cHM6Ly9jYWlvYXJpZWRlLmNvbSlcbiAgLy8gICAgICBpbXByb3ZlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cHM6Ly9rdnouaW8pXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IENhaW8gQXJpZWRlIChodHRwczovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBBLiBNYXTDrWFzIFF1ZXphZGEgKGh0dHBzOi8vYW1hdGlhc3EuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBwcmV1dGVyXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBNaXJrbyBGYWJlclxuICAvLyAgICAgICAgIGlucHV0IGJ5OiBEYXZpZFxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBXYWduZXIgQi4gU29hcmVzXG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IEFydHVyIFRjaGVybnljaGV2XG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IFN0ZXBoYW4gQsO2c2NoLVBsZXBlbGl0cyAoaHR0cHM6Ly9naXRodWIuY29tL3BsZXBlKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBSYWZhxYIgS3VrYXdza2lcbiAgLy8gICAgICAgICAgIG5vdGUgMTogRXhhbXBsZXMgYWxsIGhhdmUgYSBmaXhlZCB0aW1lc3RhbXAgdG8gcHJldmVudFxuICAvLyAgICAgICAgICAgbm90ZSAxOiB0ZXN0cyB0byBmYWlsIGJlY2F1c2Ugb2YgdmFyaWFibGUgdGltZSh6b25lcylcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogc3RydG90aW1lKCcrMSBkYXknLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAxOiAxMTI5NzE5NjAwXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHN0cnRvdGltZSgnKzEgd2VlayAyIGRheXMgNCBob3VycyAyIHNlY29uZHMnLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAyOiAxMTMwNDI1MjAyXG4gIC8vICAgICAgICBleGFtcGxlIDM6IHN0cnRvdGltZSgnbGFzdCBtb250aCcsIDExMjk2MzMyMDApXG4gIC8vICAgICAgICByZXR1cm5zIDM6IDExMjcwNDEyMDBcbiAgLy8gICAgICAgIGV4YW1wbGUgNDogc3RydG90aW1lKCcyMDA5LTA1LTA0IDA4OjMwOjAwKzAwJylcbiAgLy8gICAgICAgIHJldHVybnMgNDogMTI0MTQyNTgwMFxuICAvLyAgICAgICAgZXhhbXBsZSA1OiBzdHJ0b3RpbWUoJzIwMDktMDUtMDQgMDg6MzA6MDArMDI6MDAnKVxuICAvLyAgICAgICAgcmV0dXJucyA1OiAxMjQxNDE4NjAwXG5cbiAgaWYgKG5vdyA9PSBudWxsKSB7XG4gICAgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIH1cblxuICAvLyB0aGUgcnVsZSBvcmRlciBpcyBpbXBvcnRhbnRcbiAgLy8gaWYgbXVsdGlwbGUgcnVsZXMgbWF0Y2gsIHRoZSBsb25nZXN0IG1hdGNoIHdpbnNcbiAgLy8gaWYgbXVsdGlwbGUgcnVsZXMgbWF0Y2ggdGhlIHNhbWUgc3RyaW5nLCB0aGUgZmlyc3QgbWF0Y2ggd2luc1xuICB2YXIgcnVsZXMgPSBbZm9ybWF0cy55ZXN0ZXJkYXksIGZvcm1hdHMubm93LCBmb3JtYXRzLm5vb24sIGZvcm1hdHMubWlkbmlnaHRPclRvZGF5LCBmb3JtYXRzLnRvbW9ycm93LCBmb3JtYXRzLnRpbWVzdGFtcCwgZm9ybWF0cy5maXJzdE9yTGFzdERheSwgZm9ybWF0cy5iYWNrT3JGcm9udE9mLFxuICAvLyBmb3JtYXRzLndlZWtkYXlPZiwgLy8gbm90IHlldCBpbXBsZW1lbnRlZFxuICBmb3JtYXRzLnRpbWVUaW55MTIsIGZvcm1hdHMudGltZVNob3J0MTIsIGZvcm1hdHMudGltZUxvbmcxMiwgZm9ybWF0cy5tc3NxbHRpbWUsIGZvcm1hdHMudGltZVNob3J0MjQsIGZvcm1hdHMudGltZUxvbmcyNCwgZm9ybWF0cy5pc284NjAxbG9uZywgZm9ybWF0cy5nbnVOb0NvbG9uLCBmb3JtYXRzLmlzbzg2MDFub0NvbG9uLCBmb3JtYXRzLmFtZXJpY2FuU2hvcnQsIGZvcm1hdHMuYW1lcmljYW4sIGZvcm1hdHMuaXNvODYwMWRhdGU0LCBmb3JtYXRzLmlzbzg2MDFkYXRlU2xhc2gsIGZvcm1hdHMuZGF0ZVNsYXNoLCBmb3JtYXRzLmdudURhdGVTaG9ydE9ySXNvODYwMWRhdGUyLCBmb3JtYXRzLmdudURhdGVTaG9ydGVyLCBmb3JtYXRzLmRhdGVGdWxsLCBmb3JtYXRzLnBvaW50ZWREYXRlNCwgZm9ybWF0cy5wb2ludGVkRGF0ZTIsIGZvcm1hdHMuZGF0ZU5vRGF5LCBmb3JtYXRzLmRhdGVOb0RheVJldiwgZm9ybWF0cy5kYXRlVGV4dHVhbCwgZm9ybWF0cy5kYXRlTm9ZZWFyLCBmb3JtYXRzLmRhdGVOb1llYXJSZXYsIGZvcm1hdHMuZGF0ZU5vQ29sb24sIGZvcm1hdHMueG1sUnBjLCBmb3JtYXRzLnhtbFJwY05vQ29sb24sIGZvcm1hdHMuc29hcCwgZm9ybWF0cy53ZGR4LCBmb3JtYXRzLmV4aWYsIGZvcm1hdHMucGd5ZG90ZCwgZm9ybWF0cy5pc29XZWVrRGF5LCBmb3JtYXRzLnBnVGV4dFNob3J0LCBmb3JtYXRzLnBnVGV4dFJldmVyc2UsIGZvcm1hdHMuY2xmLCBmb3JtYXRzLnllYXI0LCBmb3JtYXRzLmFnbywgZm9ybWF0cy5kYXlUZXh0LCBmb3JtYXRzLnJlbGF0aXZlVGV4dFdlZWssIGZvcm1hdHMucmVsYXRpdmVUZXh0LCBmb3JtYXRzLm1vbnRoRnVsbE9yTW9udGhBYmJyLCBmb3JtYXRzLnR6Q29ycmVjdGlvbiwgZm9ybWF0cy5kYXRlU2hvcnRXaXRoVGltZVNob3J0MTIsIGZvcm1hdHMuZGF0ZVNob3J0V2l0aFRpbWVMb25nMTIsIGZvcm1hdHMuZGF0ZVNob3J0V2l0aFRpbWVTaG9ydCwgZm9ybWF0cy5kYXRlU2hvcnRXaXRoVGltZUxvbmcsIGZvcm1hdHMucmVsYXRpdmUsIGZvcm1hdHMud2hpdGVzcGFjZV07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUocmVzdWx0UHJvdG8pO1xuXG4gIHdoaWxlIChzdHIubGVuZ3RoKSB7XG4gICAgdmFyIGxvbmdlc3RNYXRjaCA9IG51bGw7XG4gICAgdmFyIGZpbmFsUnVsZSA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJ1bGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGZvcm1hdCA9IHJ1bGVzW2ldO1xuXG4gICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goZm9ybWF0LnJlZ2V4KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmICghbG9uZ2VzdE1hdGNoIHx8IG1hdGNoWzBdLmxlbmd0aCA+IGxvbmdlc3RNYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgICBsb25nZXN0TWF0Y2ggPSBtYXRjaDtcbiAgICAgICAgICBmaW5hbFJ1bGUgPSBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZpbmFsUnVsZSB8fCBmaW5hbFJ1bGUuY2FsbGJhY2sgJiYgZmluYWxSdWxlLmNhbGxiYWNrLmFwcGx5KHJlc3VsdCwgbG9uZ2VzdE1hdGNoKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdHIgPSBzdHIuc3Vic3RyKGxvbmdlc3RNYXRjaFswXS5sZW5ndGgpO1xuICAgIGZpbmFsUnVsZSA9IG51bGw7XG4gICAgbG9uZ2VzdE1hdGNoID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKHJlc3VsdC50b0RhdGUobmV3IERhdGUobm93ICogMTAwMCkpIC8gMTAwMCk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RydG90aW1lLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmlfZ2V0KHZhcm5hbWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvaW5pX2dldC9cbiAgLy8gb3JpZ2luYWwgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogVGhlIGluaSB2YWx1ZXMgbXVzdCBiZSBzZXQgYnkgaW5pX3NldCBvciBtYW51YWxseSB3aXRoaW4gYW4gaW5pIGZpbGVcbiAgLy8gICBleGFtcGxlIDE6IGluaV9zZXQoJ2RhdGUudGltZXpvbmUnLCAnQXNpYS9Ib25nX0tvbmcnKVxuICAvLyAgIGV4YW1wbGUgMTogaW5pX2dldCgnZGF0ZS50aW1lem9uZScpXG4gIC8vICAgcmV0dXJucyAxOiAnQXNpYS9Ib25nX0tvbmcnXG5cbiAgdmFyICRnbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgJGdsb2JhbC4kbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXMgfHwge307XG4gIHZhciAkbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXM7XG4gICRsb2N1dHVzLnBocCA9ICRsb2N1dHVzLnBocCB8fCB7fTtcbiAgJGxvY3V0dXMucGhwLmluaSA9ICRsb2N1dHVzLnBocC5pbmkgfHwge307XG5cbiAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0gJiYgJGxvY3V0dXMucGhwLmluaVt2YXJuYW1lXS5sb2NhbF92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuICRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pX2dldC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICAvLyAgZGlzY3VzcyBhdDogaHR0cHM6Ly9sb2N1dHVzLmlvL3BocC9zdHJsZW4vXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwczovL2t2ei5pbylcbiAgLy8gaW1wcm92ZWQgYnk6IFNha2ltb3JpXG4gIC8vIGltcHJvdmVkIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwczovL2t2ei5pbylcbiAgLy8gICAgaW5wdXQgYnk6IEtpcmsgU3Ryb2JlY2tcbiAgLy8gYnVnZml4ZWQgYnk6IE9ubm8gTWFyc21hbiAoaHR0cHM6Ly90d2l0dGVyLmNvbS9vbm5vbWFyc21hbilcbiAgLy8gIHJldmlzZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogTWF5IGxvb2sgbGlrZSBvdmVya2lsbCwgYnV0IGluIG9yZGVyIHRvIGJlIHRydWx5IGZhaXRoZnVsIHRvIGhhbmRsaW5nIGFsbCBVbmljb2RlXG4gIC8vICAgICAgbm90ZSAxOiBjaGFyYWN0ZXJzIGFuZCB0byB0aGlzIGZ1bmN0aW9uIGluIFBIUCB3aGljaCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzXG4gIC8vICAgICAgbm90ZSAxOiBidXQgY291bnRzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycywgc29tZXRoaW5nIGxpa2UgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LlxuICAvLyAgIGV4YW1wbGUgMTogc3RybGVuKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDE6IDE5XG4gIC8vICAgZXhhbXBsZSAyOiBpbmlfc2V0KCd1bmljb2RlLnNlbWFudGljcycsICdvbicpXG4gIC8vICAgZXhhbXBsZSAyOiBzdHJsZW4oJ0FcXHVkODdlXFx1ZGMwNFonKVxuICAvLyAgIHJldHVybnMgMjogM1xuXG4gIHZhciBzdHIgPSBzdHJpbmcgKyAnJztcblxuICB2YXIgaW5pVmFsID0gKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUoJy4uL2luZm8vaW5pX2dldCcpKCd1bmljb2RlLnNlbWFudGljcycpIDogdW5kZWZpbmVkKSB8fCAnb2ZmJztcbiAgaWYgKGluaVZhbCA9PT0gJ29mZicpIHtcbiAgICByZXR1cm4gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGxndGggPSAwO1xuXG4gIHZhciBnZXRXaG9sZUNoYXIgPSBmdW5jdGlvbiBnZXRXaG9sZUNoYXIoc3RyLCBpKSB7XG4gICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB2YXIgbmV4dCA9ICcnO1xuICAgIHZhciBwcmV2ID0gJyc7XG4gICAgaWYgKGNvZGUgPj0gMHhEODAwICYmIGNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSAoY291bGQgY2hhbmdlIGxhc3QgaGV4IHRvIDB4REI3RiB0b1xuICAgICAgLy8gdHJlYXQgaGlnaCBwcml2YXRlIHN1cnJvZ2F0ZXMgYXMgc2luZ2xlIGNoYXJhY3RlcnMpXG4gICAgICBpZiAoc3RyLmxlbmd0aCA8PSBpICsgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hpZ2ggc3Vycm9nYXRlIHdpdGhvdXQgZm9sbG93aW5nIGxvdyBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIG5leHQgPSBzdHIuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dCA8IDB4REMwMCB8fCBuZXh0ID4gMHhERkZGKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGlnaCBzdXJyb2dhdGUgd2l0aG91dCBmb2xsb3dpbmcgbG93IHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoaSkgKyBzdHIuY2hhckF0KGkgKyAxKTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPj0gMHhEQzAwICYmIGNvZGUgPD0gMHhERkZGKSB7XG4gICAgICAvLyBMb3cgc3Vycm9nYXRlXG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvdyBzdXJyb2dhdGUgd2l0aG91dCBwcmVjZWRpbmcgaGlnaCBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIHByZXYgPSBzdHIuY2hhckNvZGVBdChpIC0gMSk7XG4gICAgICBpZiAocHJldiA8IDB4RDgwMCB8fCBwcmV2ID4gMHhEQkZGKSB7XG4gICAgICAgIC8vIChjb3VsZCBjaGFuZ2UgbGFzdCBoZXggdG8gMHhEQjdGIHRvIHRyZWF0IGhpZ2ggcHJpdmF0ZSBzdXJyb2dhdGVzXG4gICAgICAgIC8vIGFzIHNpbmdsZSBjaGFyYWN0ZXJzKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvdyBzdXJyb2dhdGUgd2l0aG91dCBwcmVjZWRpbmcgaGlnaCBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGNhbiBwYXNzIG92ZXIgbG93IHN1cnJvZ2F0ZXMgbm93IGFzIHRoZSBzZWNvbmRcbiAgICAgIC8vIGNvbXBvbmVudCBpbiBhIHBhaXIgd2hpY2ggd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLmNoYXJBdChpKTtcbiAgfTtcblxuICBmb3IgKGkgPSAwLCBsZ3RoID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChnZXRXaG9sZUNoYXIoc3RyLCBpKSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBBZGFwdCB0aGlzIGxpbmUgYXQgdGhlIHRvcCBvZiBhbnkgbG9vcCwgcGFzc2luZyBpbiB0aGUgd2hvbGUgc3RyaW5nIGFuZFxuICAgIC8vIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBhbmQgcmV0dXJuaW5nIGEgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBpbmRpdmlkdWFsIGNoYXJhY3RlcjtcbiAgICAvLyBwdXJwb3NlIGlzIHRvIHRyZWF0IHRoZSBmaXJzdCBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgYXMgdGhlIHdob2xlIGNoYXJhY3RlciBhbmQgdGhlblxuICAgIC8vIGlnbm9yZSB0aGUgc2Vjb25kIHBhcnRcbiAgICBsZ3RoKys7XG4gIH1cblxuICByZXR1cm4gbGd0aDtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJsZW4uanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzX251bWVyaWMobWl4ZWRWYXIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvaXNfbnVtZXJpYy9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHBzOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogRGF2aWRcbiAgLy8gaW1wcm92ZWQgYnk6IHRhaXRoXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBUaW0gZGUgS29uaW5nXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBXZWJEZXZIb2JvIChodHRwczovL3dlYmRldmhvYm8uYmxvZ3Nwb3QuY29tLylcbiAgLy8gYnVnZml4ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyBidWdmaXhlZCBieTogRGVuaXMgQ2hlbnUgKGh0dHBzOi8vc2hub3VsbGUubmV0KVxuICAvLyAgIGV4YW1wbGUgMTogaXNfbnVtZXJpYygxODYuMzEpXG4gIC8vICAgcmV0dXJucyAxOiB0cnVlXG4gIC8vICAgZXhhbXBsZSAyOiBpc19udW1lcmljKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDI6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSAzOiBpc19udW1lcmljKCcgKzE4Ni4zMWUyJylcbiAgLy8gICByZXR1cm5zIDM6IHRydWVcbiAgLy8gICBleGFtcGxlIDQ6IGlzX251bWVyaWMoJycpXG4gIC8vICAgcmV0dXJucyA0OiBmYWxzZVxuICAvLyAgIGV4YW1wbGUgNTogaXNfbnVtZXJpYyhbXSlcbiAgLy8gICByZXR1cm5zIDU6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSA2OiBpc19udW1lcmljKCcxICcpXG4gIC8vICAgcmV0dXJucyA2OiBmYWxzZVxuXG4gIHZhciB3aGl0ZXNwYWNlID0gWycgJywgJ1xcbicsICdcXHInLCAnXFx0JywgJ1xcZicsICdcXHgwYicsICdcXHhhMCcsICdcXHUyMDAwJywgJ1xcdTIwMDEnLCAnXFx1MjAwMicsICdcXHUyMDAzJywgJ1xcdTIwMDQnLCAnXFx1MjAwNScsICdcXHUyMDA2JywgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAwQicsICdcXHUyMDI4JywgJ1xcdTIwMjknLCAnXFx1MzAwMCddLmpvaW4oJycpO1xuXG4gIC8vIEB0b2RvOiBCcmVhayB0aGlzIHVwIHVzaW5nIG1hbnkgc2luZ2xlIGNvbmRpdGlvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIHJldHVybiAodHlwZW9mIG1peGVkVmFyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWl4ZWRWYXIgPT09ICdzdHJpbmcnICYmIHdoaXRlc3BhY2UuaW5kZXhPZihtaXhlZFZhci5zbGljZSgtMSkpID09PSAtMSkgJiYgbWl4ZWRWYXIgIT09ICcnICYmICFpc05hTihtaXhlZFZhcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNfbnVtZXJpYy5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIExhcmF2ZWwgSmF2YXNjcmlwdCBWYWxpZGF0aW9uXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Byb2VuZ3NvZnQvbGFyYXZlbC1qc3ZhbGlkYXRpb25cbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdmFsaWRhdG9yc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNyBQcm9lbmdzb2Z0XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgc3RybGVuIGZyb20gJ2xvY3V0dXMvcGhwL3N0cmluZ3Mvc3RybGVuJztcbmltcG9ydCBhcnJheV9kaWZmIGZyb20gJ2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYnO1xuaW1wb3J0IHN0cnRvdGltZSBmcm9tICdsb2N1dHVzL3BocC9kYXRldGltZS9zdHJ0b3RpbWUnO1xuaW1wb3J0IGlzX251bWVyaWMgZnJvbSAnbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMnO1xuXG4kLmV4dGVuZCh0cnVlLCBsYXJhdmVsVmFsaWRhdGlvbiwge1xuXG4gICAgaGVscGVyczoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1lcmljIHJ1bGVzXG4gICAgICAgICAqL1xuICAgICAgICBudW1lcmljUnVsZXM6IFsnSW50ZWdlcicsICdOdW1lcmljJ10sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGZpbGUgaW5mb3JtYXRpb24gZnJvbSBmaWxlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZmllbGRPYmpcbiAgICAgICAgICogQHBhcmFtIGluZGV4XG4gICAgICAgICAqIEByZXR1cm5zIHt7ZmlsZTogKiwgZXh0ZW5zaW9uOiBzdHJpbmcsIHNpemU6IG51bWJlcn19XG4gICAgICAgICAqL1xuICAgICAgICBmaWxlaW5mbzogZnVuY3Rpb24gKGZpZWxkT2JqLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIEZpbGVOYW1lID0gZmllbGRPYmoudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoIGZpZWxkT2JqLmZpbGVzICE9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRPYmouZmlsZXNbaW5kZXhdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb246IEZpbGVOYW1lLnN1YnN0cihGaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWVsZE9iai5maWxlc1tpbmRleF0uc2l6ZSAvIDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWVsZE9iai5maWxlc1tpbmRleF0udHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3RvcnMgZm9yIHRoIHNwZWNpZmllZCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVzXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShuYW1lcykpICB7XG4gICAgICAgICAgICAgICAgbmFtZXMgPSBbbmFtZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goXCJbbmFtZT0nXCIgKyBuYW1lc1tpXSArIFwiJ11cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3Iuam9pbigpO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIG51bWVyaWMgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTnVtZXJpY1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUnVsZXMoZWxlbWVudCwgdGhpcy5udW1lcmljUnVsZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyBwYXNzZWQgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBydWxlc1xuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCwgcnVsZXMpIHtcblxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9ICQuZGF0YShlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdmFyIGxpc3RSdWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdmFsaWRhdG9yLmFycmF5UnVsZXNDYWNoZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGVbZWxlbWVudC5uYW1lXSwgZnVuY3Rpb24gKGluZGV4LCBhcnJheVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2goYXJyYXlSdWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gdmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2godmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJC5lYWNoKGxpc3RSdWxlcywgZnVuY3Rpb24oaW5kZXgsb2JqUnVsZXMpe1xuICAgICAgICAgICAgICAgIGlmICgnbGFyYXZlbFZhbGlkYXRpb24nIGluIG9ialJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcnVsZXM9b2JqUnVsZXMubGFyYXZlbFZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3J1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KF9ydWxlc1tpXVswXSxydWxlcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiB0aGUgc3RyaW5nIGxlbmd0aCB1c2luZyBQSFAgZnVuY3Rpb24uXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJsZW4ucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cmxlbi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgc3RybGVuOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RybGVuKHN0cmluZyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGRlcGVuZGluZyBvZiBoaXMgdHlwZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9ialxuICAgICAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHJldHVybnMgaW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiBnZXRTaXplKG9iaiwgZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTnVtZXJpY1J1bGVzKGVsZW1lbnQpICYmIHRoaXMuaXNfbnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGguZmxvb3IodGhpcy5maWxlaW5mbyhlbGVtZW50KS5zaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuc3RybGVuKHZhbHVlKSk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHNwZWNpZmllZCBydWxlIGZyb20gZWxlbWVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJ1bGVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXRMYXJhdmVsVmFsaWRhdGlvbjogZnVuY3Rpb24ocnVsZSwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAkLmVhY2goJC52YWxpZGF0b3Iuc3RhdGljUnVsZXMoZWxlbWVudCksIGZ1bmN0aW9uKGtleSwgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5PT09XCJsYXJhdmVsVmFsaWRhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChydWxlcywgZnVuY3Rpb24gKGksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF09PT1ydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBoZSB0aW1lc3RhbXAgb2YgdmFsdWUgcGFzc2VkIHVzaW5nIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdCBpbiBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxpbnR9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZVRpbWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBmbXQgPSBuZXcgRGF0ZUZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZVJ1bGUgPSB0aGlzLmdldExhcmF2ZWxWYWxpZGF0aW9uKCdEYXRlRm9ybWF0JywgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlUnVsZVsxXVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGltZVZhbHVlID0gdGhpcy5zdHJ0b3RpbWUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lVmFsdWUgPSBmbXQucGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVZhbHVlID0gTWF0aC5yb3VuZCgodGltZVZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgYSBnaXZlbiBkYXRlIGFnYWluc3QgYW5vdGhlciB1c2luZyBhbiBvcGVyYXRvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbGlkYXRvclxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gb3BlcmF0b3JcbiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNvbXBhcmVEYXRlczogZnVuY3Rpb24gKHZhbGlkYXRvciwgdmFsdWUsIGVsZW1lbnQsIHBhcmFtcywgb3BlcmF0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHRpbWVDb21wYXJlID0gcGFyc2VGbG9hdChwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4odGltZUNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZGVwZW5kZW50RWxlbWVudCh2YWxpZGF0b3IsIGVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUNvbXBhcmUgPSB0aGlzLnBhcnNlVGltZSh2YWxpZGF0b3IuZWxlbWVudFZhbHVlKHRhcmdldCksIHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSB0aGlzLnBhcnNlVGltZSh2YWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGltZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlIDwgdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWUgPD0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA9PT0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA+IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlID49IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvcGVyYXRvci4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBpbnRlbGxpZ2VudGx5IGd1ZXNzIHRoZSBkYXRlIGJ5IGNsb3NlbHkgbWF0Y2hpbmcgdGhlIHNwZWNpZmljIGZvcm1hdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlXG4gICAgICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBndWVzc0RhdGU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZm10ID0gbmV3IERhdGVGb3JtYXR0ZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBmbXQuZ3Vlc3NEYXRlKHZhbHVlLCBmb3JtYXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgVW5peCB0aW1lc3RhbXAgYmFzZWQgb24gUEhQIGZ1bmN0aW9uIHN0cm90b3RpbWUuXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lcy9mdW5jdGlvbi5zdHJ0b3RpbWUucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cnRvdGltZS9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHRleHRcbiAgICAgICAgICogQHBhcmFtIG5vd1xuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgICAgICovXG4gICAgICAgIHN0cnRvdGltZTogZnVuY3Rpb24gKHRleHQsIG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cnRvdGltZSh0ZXh0LCBub3cpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgaWYgdmFsdWUgaXMgbnVtZXJpYy5cbiAgICAgICAgICogaHR0cDovL3BocC5uZXQvbWFudWFsL2VzL3Zhci5pc19udW1lcmljLnBocFxuICAgICAgICAgKiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9pc19udW1lcmljL1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbWl4ZWRfdmFyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAgICAgKi9cbiAgICAgICAgaXNfbnVtZXJpYzogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzX251bWVyaWMobWl4ZWRfdmFyKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBvZiB0eXBlIEFycmF5LlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5I1BvbHlmaWxsXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBhcmdcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBpc0FycmF5OiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBBcnJheSBkaWZmIGJhc2VkIG9uIFBIUCBmdW5jdGlvbiBhcnJheV9kaWZmLlxuICAgICAgICAgKiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZXMvZnVuY3Rpb24uYXJyYXlfZGlmZi5waHBcbiAgICAgICAgICogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvYXJyYXlfZGlmZi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheURpZmY6IGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlfZGlmZihhcnIxLCBhcnIyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgd2hldGhlciB0d28gYXJyYXlzIGFyZSBlcXVhbCB0byBvbmUgYW5vdGhlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheUVxdWFsczogZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShhcnIxKSB8fCAhIHRoaXMuaXNBcnJheShhcnIyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICQuaXNFbXB0eU9iamVjdCh0aGlzLmFycmF5RGlmZihhcnIxLCBhcnIyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2VzIGVsZW1lbnQgZGVwZW5kYW50IGZyb20gb3RoZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWxpZGF0b3JcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50OiBmdW5jdGlvbih2YWxpZGF0b3IsIGVsZW1lbnQsIG5hbWUpIHtcblxuICAgICAgICAgICAgdmFyIGVsPXZhbGlkYXRvci5maW5kQnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIGVsWzBdIT09dW5kZWZpbmVkICAmJiB2YWxpZGF0b3Iuc2V0dGluZ3Mub25mb2N1c291dCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSAnYmx1cic7XG4gICAgICAgICAgICAgICAgaWYgKGVsWzBdLnRhZ05hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxbMF0udHlwZSA9PT0gJ3JhZGlvJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdjbGljayc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lID0gJy52YWxpZGF0ZS1sYXJhdmVsVmFsaWRhdGlvbic7XG4gICAgICAgICAgICAgICAgZWwub2ZmKCBydWxlTmFtZSApXG4gICAgICAgICAgICAgICAgICAgIC5vZmYoZXZlbnQgKyBydWxlTmFtZSArICctJyArIGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCBldmVudCArIHJ1bGVOYW1lICsgJy0nICsgZWxlbWVudC5uYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoIGVsZW1lbnQgKS52YWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsWzBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgZXJyb3IgQWpheCByZXNwb25zZSBhbmQgZ2V0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmVzcG9uc2UgPSBbJ1dob29wcywgbG9va3MgbGlrZSBzb21ldGhpbmcgd2VudCB3cm9uZy4nXTtcbiAgICAgICAgICAgIGlmICgncmVzcG9uc2VUZXh0JyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dC5tYXRjaCgvPGgxXFxzKj4oLiopPFxcL2gxXFxzKj4vaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheShlcnJvck1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmVzcG9uc2UgPSBbZXJyb3JNc2dbMV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRXNjYXBlIHN0cmluZyB0byB1c2UgYXMgUmVndWxhciBFeHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gc3RyXG4gICAgICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhdGUgUmVnRXhwIGZyb20gd2lsZGNhcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICAgICAgICovXG4gICAgICAgIHJlZ2V4RnJvbVdpbGRjYXJkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdChcIlsqXVwiKTtcbiAgICAgICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlZ2V4cFBhcnRzID0gbmFtZVBhcnRzLm1hcChmdW5jdGlvbihjdXJyZW50VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAnWyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gJ10nICtjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhcmF2ZWxWYWxpZGF0aW9uLmhlbHBlcnMuZXNjYXBlUmVnRXhwKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nK3JlZ2V4cFBhcnRzLmpvaW4oJ1teXFxcXF1dKicpKyckJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lcmdlIGFkZGl0aW9uYWwgbGFyYXZlbCB2YWxpZGF0aW9uIHJ1bGVzIGludG8gdGhlIGN1cnJlbnQgcnVsZSBzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxlc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UnVsZXNcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG1lcmdlUnVsZXM6IGZ1bmN0aW9uIChydWxlcywgbmV3UnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBydWxlc0xpc3QgPSB7XG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb24gfHwgW10sXG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uUmVtb3RlJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb25SZW1vdGUgfHwgW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNMaXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBydWxlc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcnVsZXNba2V5XSA9IHJ1bGVzW2tleV0uY29uY2F0KHJ1bGVzTGlzdFtrZXldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Timezone Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n helpers: {\n\n /**\n * Check if the specified timezone is valid.\n *\n * @param value\n * @returns {boolean}\n */\n isTimezone: function (value) {\n\n var timezones={\n \"africa\": [\n \"abidjan\",\n \"accra\",\n \"addis_ababa\",\n \"algiers\",\n \"asmara\",\n \"bamako\",\n \"bangui\",\n \"banjul\",\n \"bissau\",\n \"blantyre\",\n \"brazzaville\",\n \"bujumbura\",\n \"cairo\",\n \"casablanca\",\n \"ceuta\",\n \"conakry\",\n \"dakar\",\n \"dar_es_salaam\",\n \"djibouti\",\n \"douala\",\n \"el_aaiun\",\n \"freetown\",\n \"gaborone\",\n \"harare\",\n \"johannesburg\",\n \"juba\",\n \"kampala\",\n \"khartoum\",\n \"kigali\",\n \"kinshasa\",\n \"lagos\",\n \"libreville\",\n \"lome\",\n \"luanda\",\n \"lubumbashi\",\n \"lusaka\",\n \"malabo\",\n \"maputo\",\n \"maseru\",\n \"mbabane\",\n \"mogadishu\",\n \"monrovia\",\n \"nairobi\",\n \"ndjamena\",\n \"niamey\",\n \"nouakchott\",\n \"ouagadougou\",\n \"porto-novo\",\n \"sao_tome\",\n \"tripoli\",\n \"tunis\",\n \"windhoek\"\n ],\n \"america\": [\n \"adak\",\n \"anchorage\",\n \"anguilla\",\n \"antigua\",\n \"araguaina\",\n \"argentina\\/buenos_aires\",\n \"argentina\\/catamarca\",\n \"argentina\\/cordoba\",\n \"argentina\\/jujuy\",\n \"argentina\\/la_rioja\",\n \"argentina\\/mendoza\",\n \"argentina\\/rio_gallegos\",\n \"argentina\\/salta\",\n \"argentina\\/san_juan\",\n \"argentina\\/san_luis\",\n \"argentina\\/tucuman\",\n \"argentina\\/ushuaia\",\n \"aruba\",\n \"asuncion\",\n \"atikokan\",\n \"bahia\",\n \"bahia_banderas\",\n \"barbados\",\n \"belem\",\n \"belize\",\n \"blanc-sablon\",\n \"boa_vista\",\n \"bogota\",\n \"boise\",\n \"cambridge_bay\",\n \"campo_grande\",\n \"cancun\",\n \"caracas\",\n \"cayenne\",\n \"cayman\",\n \"chicago\",\n \"chihuahua\",\n \"costa_rica\",\n \"creston\",\n \"cuiaba\",\n \"curacao\",\n \"danmarkshavn\",\n \"dawson\",\n \"dawson_creek\",\n \"denver\",\n \"detroit\",\n \"dominica\",\n \"edmonton\",\n \"eirunepe\",\n \"el_salvador\",\n \"fortaleza\",\n \"glace_bay\",\n \"godthab\",\n \"goose_bay\",\n \"grand_turk\",\n \"grenada\",\n \"guadeloupe\",\n \"guatemala\",\n \"guayaquil\",\n \"guyana\",\n \"halifax\",\n \"havana\",\n \"hermosillo\",\n \"indiana\\/indianapolis\",\n \"indiana\\/knox\",\n \"indiana\\/marengo\",\n \"indiana\\/petersburg\",\n \"indiana\\/tell_city\",\n \"indiana\\/vevay\",\n \"indiana\\/vincennes\",\n \"indiana\\/winamac\",\n \"inuvik\",\n \"iqaluit\",\n \"jamaica\",\n \"juneau\",\n \"kentucky\\/louisville\",\n \"kentucky\\/monticello\",\n \"kralendijk\",\n \"la_paz\",\n \"lima\",\n \"los_angeles\",\n \"lower_princes\",\n \"maceio\",\n \"managua\",\n \"manaus\",\n \"marigot\",\n \"martinique\",\n \"matamoros\",\n \"mazatlan\",\n \"menominee\",\n \"merida\",\n \"metlakatla\",\n \"mexico_city\",\n \"miquelon\",\n \"moncton\",\n \"monterrey\",\n \"montevideo\",\n \"montreal\",\n \"montserrat\",\n \"nassau\",\n \"new_york\",\n \"nipigon\",\n \"nome\",\n \"noronha\",\n \"north_dakota\\/beulah\",\n \"north_dakota\\/center\",\n \"north_dakota\\/new_salem\",\n \"ojinaga\",\n \"panama\",\n \"pangnirtung\",\n \"paramaribo\",\n \"phoenix\",\n \"port-au-prince\",\n \"port_of_spain\",\n \"porto_velho\",\n \"puerto_rico\",\n \"rainy_river\",\n \"rankin_inlet\",\n \"recife\",\n \"regina\",\n \"resolute\",\n \"rio_branco\",\n \"santa_isabel\",\n \"santarem\",\n \"santiago\",\n \"santo_domingo\",\n \"sao_paulo\",\n \"scoresbysund\",\n \"shiprock\",\n \"sitka\",\n \"st_barthelemy\",\n \"st_johns\",\n \"st_kitts\",\n \"st_lucia\",\n \"st_thomas\",\n \"st_vincent\",\n \"swift_current\",\n \"tegucigalpa\",\n \"thule\",\n \"thunder_bay\",\n \"tijuana\",\n \"toronto\",\n \"tortola\",\n \"vancouver\",\n \"whitehorse\",\n \"winnipeg\",\n \"yakutat\",\n \"yellowknife\"\n ],\n \"antarctica\": [\n \"casey\",\n \"davis\",\n \"dumontdurville\",\n \"macquarie\",\n \"mawson\",\n \"mcmurdo\",\n \"palmer\",\n \"rothera\",\n \"south_pole\",\n \"syowa\",\n \"vostok\"\n ],\n \"arctic\": [\n \"longyearbyen\"\n ],\n \"asia\": [\n \"aden\",\n \"almaty\",\n \"amman\",\n \"anadyr\",\n \"aqtau\",\n \"aqtobe\",\n \"ashgabat\",\n \"baghdad\",\n \"bahrain\",\n \"baku\",\n \"bangkok\",\n \"beirut\",\n \"bishkek\",\n \"brunei\",\n \"choibalsan\",\n \"chongqing\",\n \"colombo\",\n \"damascus\",\n \"dhaka\",\n \"dili\",\n \"dubai\",\n \"dushanbe\",\n \"gaza\",\n \"harbin\",\n \"hebron\",\n \"ho_chi_minh\",\n \"hong_kong\",\n \"hovd\",\n \"irkutsk\",\n \"jakarta\",\n \"jayapura\",\n \"jerusalem\",\n \"kabul\",\n \"kamchatka\",\n \"karachi\",\n \"kashgar\",\n \"kathmandu\",\n \"khandyga\",\n \"kolkata\",\n \"krasnoyarsk\",\n \"kuala_lumpur\",\n \"kuching\",\n \"kuwait\",\n \"macau\",\n \"magadan\",\n \"makassar\",\n \"manila\",\n \"muscat\",\n \"nicosia\",\n \"novokuznetsk\",\n \"novosibirsk\",\n \"omsk\",\n \"oral\",\n \"phnom_penh\",\n \"pontianak\",\n \"pyongyang\",\n \"qatar\",\n \"qyzylorda\",\n \"rangoon\",\n \"riyadh\",\n \"sakhalin\",\n \"samarkand\",\n \"seoul\",\n \"shanghai\",\n \"singapore\",\n \"taipei\",\n \"tashkent\",\n \"tbilisi\",\n \"tehran\",\n \"thimphu\",\n \"tokyo\",\n \"ulaanbaatar\",\n \"urumqi\",\n \"ust-nera\",\n \"vientiane\",\n \"vladivostok\",\n \"yakutsk\",\n \"yekaterinburg\",\n \"yerevan\"\n ],\n \"atlantic\": [\n \"azores\",\n \"bermuda\",\n \"canary\",\n \"cape_verde\",\n \"faroe\",\n \"madeira\",\n \"reykjavik\",\n \"south_georgia\",\n \"st_helena\",\n \"stanley\"\n ],\n \"australia\": [\n \"adelaide\",\n \"brisbane\",\n \"broken_hill\",\n \"currie\",\n \"darwin\",\n \"eucla\",\n \"hobart\",\n \"lindeman\",\n \"lord_howe\",\n \"melbourne\",\n \"perth\",\n \"sydney\"\n ],\n \"europe\": [\n \"amsterdam\",\n \"andorra\",\n \"athens\",\n \"belgrade\",\n \"berlin\",\n \"bratislava\",\n \"brussels\",\n \"bucharest\",\n \"budapest\",\n \"busingen\",\n \"chisinau\",\n \"copenhagen\",\n \"dublin\",\n \"gibraltar\",\n \"guernsey\",\n \"helsinki\",\n \"isle_of_man\",\n \"istanbul\",\n \"jersey\",\n \"kaliningrad\",\n \"kiev\",\n \"lisbon\",\n \"ljubljana\",\n \"london\",\n \"luxembourg\",\n \"madrid\",\n \"malta\",\n \"mariehamn\",\n \"minsk\",\n \"monaco\",\n \"moscow\",\n \"oslo\",\n \"paris\",\n \"podgorica\",\n \"prague\",\n \"riga\",\n \"rome\",\n \"samara\",\n \"san_marino\",\n \"sarajevo\",\n \"simferopol\",\n \"skopje\",\n \"sofia\",\n \"stockholm\",\n \"tallinn\",\n \"tirane\",\n \"uzhgorod\",\n \"vaduz\",\n \"vatican\",\n \"vienna\",\n \"vilnius\",\n \"volgograd\",\n \"warsaw\",\n \"zagreb\",\n \"zaporozhye\",\n \"zurich\"\n ],\n \"indian\": [\n \"antananarivo\",\n \"chagos\",\n \"christmas\",\n \"cocos\",\n \"comoro\",\n \"kerguelen\",\n \"mahe\",\n \"maldives\",\n \"mauritius\",\n \"mayotte\",\n \"reunion\"\n ],\n \"pacific\": [\n \"apia\",\n \"auckland\",\n \"chatham\",\n \"chuuk\",\n \"easter\",\n \"efate\",\n \"enderbury\",\n \"fakaofo\",\n \"fiji\",\n \"funafuti\",\n \"galapagos\",\n \"gambier\",\n \"guadalcanal\",\n \"guam\",\n \"honolulu\",\n \"johnston\",\n \"kiritimati\",\n \"kosrae\",\n \"kwajalein\",\n \"majuro\",\n \"marquesas\",\n \"midway\",\n \"nauru\",\n \"niue\",\n \"norfolk\",\n \"noumea\",\n \"pago_pago\",\n \"palau\",\n \"pitcairn\",\n \"pohnpei\",\n \"port_moresby\",\n \"rarotonga\",\n \"saipan\",\n \"tahiti\",\n \"tarawa\",\n \"tongatapu\",\n \"wake\",\n \"wallis\"\n ],\n \"utc\": [\n \"\"\n ]\n };\n\n var tzparts= value.split('/',2);\n var continent=tzparts[0].toLowerCase();\n var city='';\n if (tzparts[1]) {\n city=tzparts[1].toLowerCase();\n }\n\n return (continent in timezones && ( timezones[continent].length===0 || timezones[continent].indexOf(city)!==-1))\n }\n }\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Methods that implement Laravel Validations\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n methods:{\n\n helpers: laravelValidation.helpers,\n\n jsRemoteTimer:0,\n\n /**\n * \"Validate\" optional attributes.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Sometimes: function() {\n return true;\n },\n\n /**\n * Bail This is the default behaivour os JSValidation.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Bail: function() {\n return true;\n },\n\n /**\n * \"Indicate\" validation should pass if value is null.\n * Always returns true, just lets us put \"nullable\" in rules.\n *\n * @return {boolean}\n */\n Nullable: function() {\n return true;\n },\n\n /**\n * Validate the given attribute is filled if it is present.\n */\n Filled: function(value, element) {\n return $.validator.methods.required.call(this, value, element, true);\n },\n\n\n /**\n * Validate that a required attribute exists.\n */\n Required: function(value, element) {\n return $.validator.methods.required.call(this, value, element);\n },\n\n /**\n * Validate that an attribute exists when any other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWith: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required=required || (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWithAll: function(value, element, params) {\n var validator=this,\n required=true;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when any other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithout: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required ||\n target===undefined||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n );\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithoutAll: function(value, element, params) {\n var validator=this,\n required=true,\n currentObject=this;\n\n $.each(params,function(i, param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target===undefined ||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when another attribute has a given value.\n *\n * @return {boolean}\n */\n RequiredIf: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return $.validator.methods.required.call(\n this, value, element, true\n );\n }\n }\n }\n\n return true;\n },\n\n /**\n * Validate that an attribute exists when another\n * attribute does not have a given value.\n *\n * @return {boolean}\n */\n RequiredUnless: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return true;\n }\n }\n }\n\n return $.validator.methods.required.call(\n this, value, element, true\n );\n\n },\n\n /**\n * Validate that an attribute has a matching confirmation.\n *\n * @return {boolean}\n */\n Confirmed: function(value, element, params) {\n return laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that two attributes match.\n *\n * @return {boolean}\n */\n Same: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n return String(value) === String(this.elementValue(target));\n }\n return false;\n },\n\n /**\n * Validate that the values of an attribute is in another attribute.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n * @constructor\n */\n InArray: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return found;\n },\n\n /**\n * Validate an attribute is unique among other values.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n */\n Distinct: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName !== element.name && targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return !found;\n },\n\n\n /**\n * Validate that an attribute is different from another attribute.\n *\n * @return {boolean}\n */\n Different: function(value, element, params) {\n return ! laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that an attribute was \"accepted\".\n * This validation rule implies the attribute is \"required\".\n *\n * @return {boolean}\n */\n Accepted: function(value) {\n var regex = new RegExp(\"^(?:(yes|on|1|true))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an array.\n *\n * @param value\n * @param element\n */\n Array: function(value, element) {\n if (element.name.indexOf('[') !== -1 && element.name.indexOf(']') !== -1) {\n return true;\n }\n\n return laravelValidation.helpers.isArray(value);\n },\n\n /**\n * Validate that an attribute is a boolean.\n *\n * @return {boolean}\n */\n Boolean: function(value) {\n var regex= new RegExp(\"^(?:(true|false|1|0))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an integer.\n *\n * @return {boolean}\n */\n Integer: function(value) {\n var regex= new RegExp(\"^(?:-?\\\\d+)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is numeric.\n */\n Numeric: function(value, element) {\n return $.validator.methods.number.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a string.\n *\n * @return {boolean}\n */\n String: function(value) {\n return typeof value === 'string';\n },\n\n /**\n * The field under validation must be numeric and must have an exact length of value.\n */\n Digits: function(value, element, params) {\n return (\n $.validator.methods.number.call(this, value, element, true) &&\n value.length === parseInt(params, 10)\n );\n },\n\n /**\n * The field under validation must have a length between the given min and max.\n */\n DigitsBetween: function(value, element, params) {\n return ($.validator.methods.number.call(this, value, element, true)\n && value.length>=parseFloat(params[0]) && value.length<=parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute.\n *\n * @return {boolean}\n */\n Size: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) === parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is between a set of values.\n *\n * @return {boolean}\n */\n Between: function(value, element, params) {\n return ( laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]) &&\n laravelValidation.helpers.getSize(this,element,value) <= parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute is greater than a minimum value.\n *\n * @return {boolean}\n */\n Min: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is less than a maximum value.\n *\n * @return {boolean}\n */\n Max: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) <= parseFloat(params[0]);\n },\n\n /**\n * Validate an attribute is contained within a list of values.\n *\n * @return {boolean}\n */\n In: function(value, element, params) {\n if (laravelValidation.helpers.isArray(value)\n && laravelValidation.helpers.hasRules(element, \"Array\")\n ) {\n var diff = laravelValidation.helpers.arrayDiff(value, params);\n\n return Object.keys(diff).length === 0;\n }\n\n return params.indexOf(value.toString()) !== -1;\n },\n\n /**\n * Validate an attribute is not contained within a list of values.\n *\n * @return {boolean}\n */\n NotIn: function(value, element, params) {\n return params.indexOf(value.toString()) === -1;\n },\n\n /**\n * Validate that an attribute is a valid IP.\n *\n * @return {boolean}\n */\n Ip: function(value) {\n return /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(value) ||\n /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);\n },\n\n /**\n * Validate that an attribute is a valid e-mail address.\n */\n Email: function(value, element) {\n return $.validator.methods.email.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a valid URL.\n */\n Url: function(value, element) {\n return $.validator.methods.url.call(this, value, element, true);\n },\n\n /**\n * The field under validation must be a successfully uploaded file.\n *\n * @return {boolean}\n */\n File: function(value, element) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if ('files' in element ) {\n return (element.files.length > 0);\n }\n return false;\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n *\n * @return {boolean}\n */\n Mimes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n return (fileinfo !== false && lowerParams.indexOf(fileinfo.extension.toLowerCase())!==-1);\n },\n\n /**\n * The file under validation must match one of the given MIME types.\n *\n * @return {boolean}\n */\n Mimetypes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n\n if (fileinfo === false) {\n return false;\n }\n return (lowerParams.indexOf(fileinfo.type.toLowerCase())!==-1);\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n */\n Image: function(value, element) {\n return laravelValidation.methods.Mimes.call(this, value, element, [\n 'jpg', 'png', 'gif', 'bmp', 'svg', 'jpeg'\n ]);\n },\n\n /**\n * Validate dimensions of Image.\n *\n * @return {boolean|string}\n */\n Dimensions: function(value, element, params, callback) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if (element.files === null || typeof element.files[0] === 'undefined') {\n return false;\n }\n\n var fr = new FileReader;\n fr.onload = function () {\n var img = new Image();\n img.onload = function () {\n var height = parseFloat(img.naturalHeight);\n var width = parseFloat(img.naturalWidth);\n var ratio = width / height;\n var notValid = ((params['width']) && parseFloat(params['width'] !== width)) ||\n ((params['min_width']) && parseFloat(params['min_width']) > width) ||\n ((params['max_width']) && parseFloat(params['max_width']) < width) ||\n ((params['height']) && parseFloat(params['height']) !== height) ||\n ((params['min_height']) && parseFloat(params['min_height']) > height) ||\n ((params['max_height']) && parseFloat(params['max_height']) < height) ||\n ((params['ratio']) && ratio !== parseFloat(eval(params['ratio']))\n );\n callback(! notValid);\n };\n img.onerror = function() {\n callback(false);\n };\n img.src = fr.result;\n };\n fr.readAsDataURL(element.files[0]);\n\n return 'pending';\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n Alpha: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n\n var regex = new RegExp(\"^(?:^[a-z\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n\n },\n\n /**\n * Validate that an attribute contains only alpha-numeric characters.\n *\n * @return {boolean}\n */\n AlphaNum: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n AlphaDash: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC_-]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute passes a regular expression check.\n *\n * @return {boolean}\n */\n Regex: function(value, element, params) {\n var invalidModifiers=['x','s','u','X','U','A'];\n // Converting php regular expression\n var phpReg= new RegExp('^(?:\\/)(.*\\\\\\/?[^\\/]*|[^\\/]*)(?:\\/)([gmixXsuUAJ]*)?$');\n var matches=params[0].match(phpReg);\n if (matches === null) {\n return false;\n }\n // checking modifiers\n var php_modifiers=[];\n if (matches[2]!==undefined) {\n php_modifiers=matches[2].split('');\n for (var i=0; i');\n },\n\n /**\n * Validate the date is equal or after a given date.\n *\n * @return {boolean}\n */\n AfterOrEqual: function(value, element, params) {\n return laravelValidation.helpers.compareDates(this, value, element, params, '>=');\n },\n\n\n /**\n * Validate that an attribute is a valid date.\n */\n Timezone: function(value) {\n return laravelValidation.helpers.isTimezone(value);\n },\n\n\n /**\n * Validate the attribute is a valid JSON string.\n *\n * @param value\n * @return bool\n */\n Json: function(value) {\n var result = true;\n try {\n JSON.parse(value);\n } catch (e) {\n result = false;\n }\n return result;\n }\n }\n});\n"]} \ No newline at end of file diff --git a/public/js/jsvalidation.min.js b/public/js/jsvalidation.min.js index 2a4a6fa2..bb7568de 100644 --- a/public/js/jsvalidation.min.js +++ b/public/js/jsvalidation.min.js @@ -1,2 +1,2 @@ -var DateFormatter,laravelValidation;!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(h){h.extend(h.fn,{validate:function(e){if(this.length){var i=h.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new h.validator(e,this[0]),h.data(this[0],"validator",i),i.settings.onsubmit&&(this.on("click.validate",":submit",function(e){i.submitButton=e.currentTarget,h(this).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==h(this).attr("formnovalidate")&&(i.cancelSubmit=!0)}),this.on("submit.validate",function(a){function e(){var e,t;return i.submitButton&&(i.settings.submitHandler||i.formSubmitted)&&(e=h("").attr("name",i.submitButton.name).val(h(i.submitButton).val()).appendTo(i.currentForm)),!(i.settings.submitHandler&&!i.settings.debug)||(t=i.settings.submitHandler.call(i,i.currentForm,a),e&&e.remove(),void 0!==t&&t)}return i.settings.debug&&a.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,e()):i.form()?i.pendingRequest?!(i.formSubmitted=!0):e():(i.focusInvalid(),!1)})),i)}e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var e,t,a;return h(this[0]).is("form")?e=this.validate().form():(a=[],e=!0,t=h(this[0].form).validate(),this.each(function(){(e=t.element(this)&&e)||(a=a.concat(t.errorList))}),t.errorList=a),e},rules:function(e,t){var a,i,r,n,s,o,l=this[0],u=void 0!==this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=l&&(!l.form&&u&&(l.form=this.closest("form")[0],l.name=this.attr("name")),null!=l.form)){if(e)switch(i=(a=h.data(l.form,"validator").settings).rules,r=h.validator.staticRules(l),e){case"add":h.extend(r,h.validator.normalizeRule(t)),delete r.messages,i[l.name]=r,t.messages&&(a.messages[l.name]=h.extend(a.messages[l.name],t.messages));break;case"remove":return t?(o={},h.each(t.split(/\s/),function(e,t){o[t]=r[t],delete r[t]}),o):(delete i[l.name],r)}return(n=h.validator.normalizeRules(h.extend({},h.validator.classRules(l),h.validator.attributeRules(l),h.validator.dataRules(l),h.validator.staticRules(l)),l)).required&&(s=n.required,delete n.required,n=h.extend({required:s},n)),n.remote&&(s=n.remote,delete n.remote,n=h.extend(n,{remote:s})),n}}});function a(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}var i;h.extend(h.expr.pseudos||h.expr[":"],{blank:function(e){return!a(""+h(e).val())},filled:function(e){var t=h(e).val();return null!==t&&!!a(""+t)},unchecked:function(e){return!h(e).prop("checked")}}),h.validator=function(e,t){this.settings=h.extend(!0,{},h.validator.defaults,e),this.currentForm=t,this.init()},h.validator.format=function(a,e){return 1===arguments.length?function(){var e=h.makeArray(arguments);return e.unshift(a),h.validator.format.apply(this,e)}:(void 0===e||(2Warning: No message defined for "+e.name+""),i=/\$?\{(\d+)\}/g;return"function"==typeof a?a=a.call(this,t.parameters,e):i.test(a)&&(a=h.validator.format(a.replace(i,"{$1}"),t.parameters)),a},formatAndAdd:function(e,t){var a=this.defaultMessage(e,t);this.errorList.push({message:a,element:e,method:t.method}),this.errorMap[e.name]=a,this.submitted[e.name]=a},addWrapper:function(e){return this.settings.wrapper&&(e=e.add(e.parent(this.settings.wrapper))),e},defaultShowErrors:function(){for(var e,t,a=0;this.errorList[a];a++)t=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,t.element,this.settings.errorClass,this.settings.validClass),this.showLabel(t.element,t.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,e=this.validElements();e[a];a++)this.settings.unhighlight.call(this,e[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return h(this.errorList).map(function(){return this.element})},showLabel:function(e,t){var a,i,r,n,s=this.errorsFor(e),o=this.idOrName(e),l=h(e).attr("aria-describedby");s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(t)):(a=s=h("<"+this.settings.errorElement+">").attr("id",o+"-error").addClass(this.settings.errorClass).html(t||""),this.settings.wrapper&&(a=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(a):this.settings.errorPlacement?this.settings.errorPlacement.call(this,a,h(e)):a.insertAfter(e),s.is("label")?s.attr("for",o):0===s.parents("label[for='"+this.escapeCssMeta(o)+"']").length&&(r=s.attr("id"),l?l.match(new RegExp("\\b"+this.escapeCssMeta(r)+"\\b"))||(l+=" "+r):l=r,h(e).attr("aria-describedby",l),(i=this.groups[e.name])&&(n=this,h.each(n.groups,function(e,t){t===i&&h("[name='"+n.escapeCssMeta(e)+"']",n.currentForm).attr("aria-describedby",s.attr("id"))})))),!t&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,e)),this.toShow=this.toShow.add(s)},errorsFor:function(e){var t=this.escapeCssMeta(this.idOrName(e)),a=h(e).attr("aria-describedby"),i="label[for='"+t+"'], label[for='"+t+"'] *";return a&&(i=i+", #"+this.escapeCssMeta(a).replace(/\s+/g,", #")),this.errors().filter(i)},escapeCssMeta:function(e){return e.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(e){return this.groups[e.name]||!this.checkable(e)&&e.id||e.name},validationTargetFor:function(e){return this.checkable(e)&&(e=this.findByName(e.name)),h(e).not(this.settings.ignore)[0]},checkable:function(e){return/radio|checkbox/i.test(e.type)},findByName:function(e){return h(this.currentForm).find("[name='"+this.escapeCssMeta(e)+"']")},getLength:function(e,t){switch(t.nodeName.toLowerCase()){case"select":return h("option:selected",t).length;case"input":if(this.checkable(t))return this.findByName(t.name).filter(":checked").length}return e.length},depend:function(e,t){return!this.dependTypes[typeof e]||this.dependTypes[typeof e](e,t)},dependTypes:{boolean:function(e){return e},string:function(e,t){return!!h(e,t.form).length},function:function(e,t){return e(t)}},optional:function(e){var t=this.elementValue(e);return!h.validator.methods.required.call(this,t,e)&&"dependency-mismatch"},startRequest:function(e){this.pending[e.name]||(this.pendingRequest++,h(e).addClass(this.settings.pendingClass),this.pending[e.name]=!0)},stopRequest:function(e,t){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],h(e).removeClass(this.settings.pendingClass),t&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(h(this.currentForm).submit(),this.submitButton&&h("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!t&&0===this.pendingRequest&&this.formSubmitted&&(h(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e,t){return t="string"==typeof t&&t||"remote",h.data(e,"previousValue")||h.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,{method:t})})},destroy:function(){this.resetForm(),h(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,t){e.constructor===String?this.classRuleSettings[e]=t:h.extend(this.classRuleSettings,e)},classRules:function(e){var t={},a=h(e).attr("class");return a&&h.each(a.split(" "),function(){this in h.validator.classRuleSettings&&h.extend(t,h.validator.classRuleSettings[this])}),t},normalizeAttributeRule:function(e,t,a,i){/min|max|step/.test(a)&&(null===t||/number|range|text/.test(t))&&(i=Number(i),isNaN(i)&&(i=void 0)),i||0===i?e[a]=i:t===a&&"range"!==t&&(e[a]=!0)},attributeRules:function(e){var t,a,i={},r=h(e),n=e.getAttribute("type");for(t in h.validator.methods)a="required"===t?(""===(a=e.getAttribute(t))&&(a=!0),!!a):r.attr(t),this.normalizeAttributeRule(i,n,t,a);return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var t,a,i={},r=h(e),n=e.getAttribute("type");for(t in h.validator.methods)""===(a=r.data("rule"+t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()))&&(a=!0),this.normalizeAttributeRule(i,n,t,a);return i},staticRules:function(e){var t={},a=h.data(e.form,"validator");return a.settings.rules&&(t=h.validator.normalizeRule(a.settings.rules[e.name])||{}),t},normalizeRules:function(i,r){return h.each(i,function(e,t){if(!1!==t){if(t.param||t.depends){var a=!0;switch(typeof t.depends){case"string":a=!!h(t.depends,r.form).length;break;case"function":a=t.depends.call(r,r)}a?i[e]=void 0===t.param||t.param:(h.data(r.form,"validator").resetElements(h(r)),delete i[e])}}else delete i[e]}),h.each(i,function(e,t){i[e]=h.isFunction(t)&&"normalizer"!==e?t(r):t}),h.each(["minlength","maxlength"],function(){i[this]&&(i[this]=Number(i[this]))}),h.each(["rangelength","range"],function(){var e;i[this]&&(h.isArray(i[this])?i[this]=[Number(i[this][0]),Number(i[this][1])]:"string"==typeof i[this]&&(e=i[this].replace(/[\[\]]/g,"").split(/[\s,]+/),i[this]=[Number(e[0]),Number(e[1])]))}),h.validator.autoCreateRanges&&(null!=i.min&&null!=i.max&&(i.range=[i.min,i.max],delete i.min,delete i.max),null!=i.minlength&&null!=i.maxlength&&(i.rangelength=[i.minlength,i.maxlength],delete i.minlength,delete i.maxlength)),i},normalizeRule:function(e){var t;return"string"==typeof e&&(t={},h.each(e.split(/\s/),function(){t[this]=!0}),e=t),e},addMethod:function(e,t,a){h.validator.methods[e]=t,h.validator.messages[e]=void 0!==a?a:h.validator.messages[e],t.length<3&&h.validator.addClassRules(e,h.validator.normalizeRule(e))},methods:{required:function(e,t,a){if(!this.depend(a,t))return"dependency-mismatch";if("select"!==t.nodeName.toLowerCase())return this.checkable(t)?0=a[0]&&i<=a[1]},min:function(e,t,a){return this.optional(t)||a<=e},max:function(e,t,a){return this.optional(t)||e<=a},range:function(e,t,a){return this.optional(t)||e>=a[0]&&e<=a[1]},step:function(e,t,a){function i(e){var t=(""+e).match(/(?:\.(\d+))?$/);return t&&t[1]?t[1].length:0}function r(e){return Math.round(e*Math.pow(10,n))}var n,s=h(t).attr("type"),o="Step attribute on input type "+s+" is not supported.",l=new RegExp("\\b"+s+"\\b"),u=!0;if(s&&!l.test(["text","number","range"].join()))throw new Error(o);return n=i(a),(i(e)>n||r(e)%r(a)!=0)&&(u=!1),this.optional(t)||u},equalTo:function(e,t,a){var i=h(a);return this.settings.onfocusout&&i.not(".validate-equalTo-blur").length&&i.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){h(t).valid()}),e===i.val()},remote:function(n,s,e,o){if(this.optional(s))return"dependency-mismatch";o="string"==typeof o&&o||"remote";var l,t,a,u=this.previousValue(s,o);return this.settings.messages[s.name]||(this.settings.messages[s.name]={}),u.originalMessage=u.originalMessage||this.settings.messages[s.name][o],this.settings.messages[s.name][o]=u.message,e="string"==typeof e?{url:e}:e,a=h.param(h.extend({data:n},e.data)),u.old===a?u.valid:(u.old=a,(l=this).startRequest(s),(t={})[s.name]=n,h.ajax(h.extend(!0,{mode:"abort",port:"validate"+s.name,dataType:"json",data:t,context:l.currentForm,success:function(e){var t,a,i,r=!0===e||"true"===e;l.settings.messages[s.name][o]=u.originalMessage,r?(i=l.formSubmitted,l.resetInternals(),l.toHide=l.errorsFor(s),l.formSubmitted=i,l.successList.push(s),l.invalid[s.name]=!1,l.showErrors()):(t={},a=e||l.defaultMessage(s,{method:o,parameters:n}),t[s.name]=u.message=a,l.invalid[s.name]=!0,l.showErrors(t)),u.valid=r,l.stopRequest(s,r)}},e)),"pending")}}});var r,n={};return h.ajaxPrefilter?h.ajaxPrefilter(function(e,t,a){var i=e.port;"abort"===e.mode&&(n[i]&&n[i].abort(),n[i]=a)}):(r=h.ajax,h.ajax=function(e){var t=("mode"in e?e:h.ajaxSettings).mode,a=("port"in e?e:h.ajaxSettings).port;return"abort"===t?(n[a]&&n[a].abort(),n[a]=r.apply(this,arguments),n[a]):r.apply(this,arguments)}),h}),function(){"use strict";var p=function(e,t){return"string"==typeof e&&"string"==typeof t&&e.toLowerCase()===t.toLowerCase()},o=function(e,t,a){var i=a||"0",r=e.toString();return r.length":return n=":return n<=o;default:throw new Error("Unsupported operator.")}},guessDate:function(e,t){return(new DateFormatter).guessDate(e,t)},strtotime:function(e,t){return l()(e,t)},is_numeric:function(e){return h()(e)},isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},arrayDiff:function(e,t){return s()(e,t)},arrayEquals:function(e,t){return!(!this.isArray(e)||!this.isArray(t))&&(e.length===t.length&&$.isEmptyObject(this.arrayDiff(e,t)))},dependentElement:function(e,t,a){var i,r,n=e.findByName(a);return void 0!==n[0]&&e.settings.onfocusout&&(i="blur","SELECT"!==n[0].tagName&&"OPTION"!==n[0].tagName&&"checkbox"!==n[0].type&&"radio"!==n[0].type||(i="click"),r=".validate-laravelValidation",n.off(r).off(i+r+"-"+t.name).on(i+r+"-"+t.name,function(){$(t).valid()})),n[0]},parseErrorResponse:function(e){var t,a=["Whoops, looks like something went wrong."];return"responseText"in e&&(t=e.responseText.match(/(.*)<\/h1\s*>/i),this.isArray(t)&&(a=[t[1]])),a},escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},regexFromWildcard:function(e){var t=e.split("[*]");1===t.length&&t.push("");var a=t.map(function(e,t){return t%2==0?e+="[":e="]"+e,laravelValidation.helpers.escapeRegExp(e)});return new RegExp("^"+a.join("[^\\]]*")+"$")},mergeRules:function(e,t){var a={laravelValidation:t.laravelValidation||[],laravelValidationRemote:t.laravelValidationRemote||[]};for(var i in a)0!==a[i].length&&(void 0===e[i]&&(e[i]=[]),e[i]=e[i].concat(a[i]));return e}}})}}),$.extend(!0,laravelValidation,{helpers:{isTimezone:function(e){var t={africa:["abidjan","accra","addis_ababa","algiers","asmara","bamako","bangui","banjul","bissau","blantyre","brazzaville","bujumbura","cairo","casablanca","ceuta","conakry","dakar","dar_es_salaam","djibouti","douala","el_aaiun","freetown","gaborone","harare","johannesburg","juba","kampala","khartoum","kigali","kinshasa","lagos","libreville","lome","luanda","lubumbashi","lusaka","malabo","maputo","maseru","mbabane","mogadishu","monrovia","nairobi","ndjamena","niamey","nouakchott","ouagadougou","porto-novo","sao_tome","tripoli","tunis","windhoek"],america:["adak","anchorage","anguilla","antigua","araguaina","argentina/buenos_aires","argentina/catamarca","argentina/cordoba","argentina/jujuy","argentina/la_rioja","argentina/mendoza","argentina/rio_gallegos","argentina/salta","argentina/san_juan","argentina/san_luis","argentina/tucuman","argentina/ushuaia","aruba","asuncion","atikokan","bahia","bahia_banderas","barbados","belem","belize","blanc-sablon","boa_vista","bogota","boise","cambridge_bay","campo_grande","cancun","caracas","cayenne","cayman","chicago","chihuahua","costa_rica","creston","cuiaba","curacao","danmarkshavn","dawson","dawson_creek","denver","detroit","dominica","edmonton","eirunepe","el_salvador","fortaleza","glace_bay","godthab","goose_bay","grand_turk","grenada","guadeloupe","guatemala","guayaquil","guyana","halifax","havana","hermosillo","indiana/indianapolis","indiana/knox","indiana/marengo","indiana/petersburg","indiana/tell_city","indiana/vevay","indiana/vincennes","indiana/winamac","inuvik","iqaluit","jamaica","juneau","kentucky/louisville","kentucky/monticello","kralendijk","la_paz","lima","los_angeles","lower_princes","maceio","managua","manaus","marigot","martinique","matamoros","mazatlan","menominee","merida","metlakatla","mexico_city","miquelon","moncton","monterrey","montevideo","montreal","montserrat","nassau","new_york","nipigon","nome","noronha","north_dakota/beulah","north_dakota/center","north_dakota/new_salem","ojinaga","panama","pangnirtung","paramaribo","phoenix","port-au-prince","port_of_spain","porto_velho","puerto_rico","rainy_river","rankin_inlet","recife","regina","resolute","rio_branco","santa_isabel","santarem","santiago","santo_domingo","sao_paulo","scoresbysund","shiprock","sitka","st_barthelemy","st_johns","st_kitts","st_lucia","st_thomas","st_vincent","swift_current","tegucigalpa","thule","thunder_bay","tijuana","toronto","tortola","vancouver","whitehorse","winnipeg","yakutat","yellowknife"],antarctica:["casey","davis","dumontdurville","macquarie","mawson","mcmurdo","palmer","rothera","south_pole","syowa","vostok"],arctic:["longyearbyen"],asia:["aden","almaty","amman","anadyr","aqtau","aqtobe","ashgabat","baghdad","bahrain","baku","bangkok","beirut","bishkek","brunei","choibalsan","chongqing","colombo","damascus","dhaka","dili","dubai","dushanbe","gaza","harbin","hebron","ho_chi_minh","hong_kong","hovd","irkutsk","jakarta","jayapura","jerusalem","kabul","kamchatka","karachi","kashgar","kathmandu","khandyga","kolkata","krasnoyarsk","kuala_lumpur","kuching","kuwait","macau","magadan","makassar","manila","muscat","nicosia","novokuznetsk","novosibirsk","omsk","oral","phnom_penh","pontianak","pyongyang","qatar","qyzylorda","rangoon","riyadh","sakhalin","samarkand","seoul","shanghai","singapore","taipei","tashkent","tbilisi","tehran","thimphu","tokyo","ulaanbaatar","urumqi","ust-nera","vientiane","vladivostok","yakutsk","yekaterinburg","yerevan"],atlantic:["azores","bermuda","canary","cape_verde","faroe","madeira","reykjavik","south_georgia","st_helena","stanley"],australia:["adelaide","brisbane","broken_hill","currie","darwin","eucla","hobart","lindeman","lord_howe","melbourne","perth","sydney"],europe:["amsterdam","andorra","athens","belgrade","berlin","bratislava","brussels","bucharest","budapest","busingen","chisinau","copenhagen","dublin","gibraltar","guernsey","helsinki","isle_of_man","istanbul","jersey","kaliningrad","kiev","lisbon","ljubljana","london","luxembourg","madrid","malta","mariehamn","minsk","monaco","moscow","oslo","paris","podgorica","prague","riga","rome","samara","san_marino","sarajevo","simferopol","skopje","sofia","stockholm","tallinn","tirane","uzhgorod","vaduz","vatican","vienna","vilnius","volgograd","warsaw","zagreb","zaporozhye","zurich"],indian:["antananarivo","chagos","christmas","cocos","comoro","kerguelen","mahe","maldives","mauritius","mayotte","reunion"],pacific:["apia","auckland","chatham","chuuk","easter","efate","enderbury","fakaofo","fiji","funafuti","galapagos","gambier","guadalcanal","guam","honolulu","johnston","kiritimati","kosrae","kwajalein","majuro","marquesas","midway","nauru","niue","norfolk","noumea","pago_pago","palau","pitcairn","pohnpei","port_moresby","rarotonga","saipan","tahiti","tarawa","tongatapu","wake","wallis"],utc:[""]},a=e.split("/",2),i=a[0].toLowerCase(),r="";return a[1]&&(r=a[1].toLowerCase()),i in t&&(0===t[i].length||-1!==t[i].indexOf(r))}}}),$.extend(!0,laravelValidation,{methods:{helpers:laravelValidation.helpers,jsRemoteTimer:0,Sometimes:function(){return!0},Bail:function(){return!0},Nullable:function(){return!0},Filled:function(e,t){return $.validator.methods.required.call(this,e,t,!0)},Required:function(e,t){return $.validator.methods.required.call(this,e,t)},RequiredWith:function(e,i,t){var r=this,n=!1,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n||void 0!==a&&$.validator.methods.required.call(r,s.elementValue(a),a,!0)}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredWithAll:function(e,i,t){var r=this,n=!0,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n&&void 0!==a&&$.validator.methods.required.call(r,s.elementValue(a),a,!0)}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredWithout:function(e,i,t){var r=this,n=!1,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n||void 0===a||!$.validator.methods.required.call(r,s.elementValue(a),a,!0)}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredWithoutAll:function(e,i,t){var r=this,n=!0,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n&&(void 0===a||!$.validator.methods.required.call(r,s.elementValue(a),a,!0))}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredIf:function(e,t,a){var i=laravelValidation.helpers.dependentElement(this,t,a[0]);if(void 0!==i){var r=String(this.elementValue(i));if(void 0!==r){var n=a.slice(1);if(-1!==$.inArray(r,n))return $.validator.methods.required.call(this,e,t,!0)}}return!0},RequiredUnless:function(e,t,a){var i=laravelValidation.helpers.dependentElement(this,t,a[0]);if(void 0!==i){var r=String(this.elementValue(i));if(void 0!==r){var n=a.slice(1);if(-1!==$.inArray(r,n))return!0}}return $.validator.methods.required.call(this,e,t,!0)},Confirmed:function(e,t,a){return laravelValidation.methods.Same.call(this,e,t,a)},Same:function(e,t,a){var i=laravelValidation.helpers.dependentElement(this,t,a[0]);return void 0!==i&&String(e)===String(this.elementValue(i))},InArray:function(e,t,a){if(void 0===a[0])return!1;for(var i=this.elements(),r=!1,n=laravelValidation.helpers.regexFromWildcard(a[0]),s=0;s=parseFloat(a[0])&&e.length<=parseFloat(a[1])},Size:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)===parseFloat(a[0])},Between:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)>=parseFloat(a[0])&&laravelValidation.helpers.getSize(this,t,e)<=parseFloat(a[1])},Min:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)>=parseFloat(a[0])},Max:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)<=parseFloat(a[0])},In:function(e,t,a){if(laravelValidation.helpers.isArray(e)&&laravelValidation.helpers.hasRules(t,"Array")){var i=laravelValidation.helpers.arrayDiff(e,a);return 0===Object.keys(i).length}return-1!==a.indexOf(e.toString())},NotIn:function(e,t,a){return-1===a.indexOf(e.toString())},Ip:function(e){return/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(e)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(e)},Email:function(e,t){return $.validator.methods.email.call(this,e,t,!0)},Url:function(e,t){return $.validator.methods.url.call(this,e,t,!0)},File:function(e,t){return!(window.File&&window.FileReader&&window.FileList&&window.Blob)||"files"in t&&0width||params.max_width&&parseFloat(params.max_width)height||params.max_height&&parseFloat(params.max_height)")},AfterOrEqual:function(e,t,a){return laravelValidation.helpers.compareDates(this,e,t,a,">=")},Timezone:function(e){return laravelValidation.helpers.isTimezone(e)},Json:function(e){var t=!0;try{JSON.parse(e)}catch(e){t=!1}return t}}}); +var laravelValidation;!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(h){h.extend(h.fn,{validate:function(e){if(this.length){var i=h.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new h.validator(e,this[0]),h.data(this[0],"validator",i),i.settings.onsubmit&&(this.on("click.validate",":submit",function(e){i.submitButton=e.currentTarget,h(this).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==h(this).attr("formnovalidate")&&(i.cancelSubmit=!0)}),this.on("submit.validate",function(a){function e(){var e,t;return i.submitButton&&(i.settings.submitHandler||i.formSubmitted)&&(e=h("").attr("name",i.submitButton.name).val(h(i.submitButton).val()).appendTo(i.currentForm)),!(i.settings.submitHandler&&!i.settings.debug)||(t=i.settings.submitHandler.call(i,i.currentForm,a),e&&e.remove(),void 0!==t&&t)}return i.settings.debug&&a.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,e()):i.form()?i.pendingRequest?!(i.formSubmitted=!0):e():(i.focusInvalid(),!1)})),i)}e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var e,t,a;return h(this[0]).is("form")?e=this.validate().form():(a=[],e=!0,t=h(this[0].form).validate(),this.each(function(){(e=t.element(this)&&e)||(a=a.concat(t.errorList))}),t.errorList=a),e},rules:function(e,t){var a,i,r,n,s,o,l=this[0],u=void 0!==this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=l&&(!l.form&&u&&(l.form=this.closest("form")[0],l.name=this.attr("name")),null!=l.form)){if(e)switch(i=(a=h.data(l.form,"validator").settings).rules,r=h.validator.staticRules(l),e){case"add":h.extend(r,h.validator.normalizeRule(t)),delete r.messages,i[l.name]=r,t.messages&&(a.messages[l.name]=h.extend(a.messages[l.name],t.messages));break;case"remove":return t?(o={},h.each(t.split(/\s/),function(e,t){o[t]=r[t],delete r[t]}),o):(delete i[l.name],r)}return(n=h.validator.normalizeRules(h.extend({},h.validator.classRules(l),h.validator.attributeRules(l),h.validator.dataRules(l),h.validator.staticRules(l)),l)).required&&(s=n.required,delete n.required,n=h.extend({required:s},n)),n.remote&&(s=n.remote,delete n.remote,n=h.extend(n,{remote:s})),n}}});function a(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}var i;h.extend(h.expr.pseudos||h.expr[":"],{blank:function(e){return!a(""+h(e).val())},filled:function(e){var t=h(e).val();return null!==t&&!!a(""+t)},unchecked:function(e){return!h(e).prop("checked")}}),h.validator=function(e,t){this.settings=h.extend(!0,{},h.validator.defaults,e),this.currentForm=t,this.init()},h.validator.format=function(a,e){return 1===arguments.length?function(){var e=h.makeArray(arguments);return e.unshift(a),h.validator.format.apply(this,e)}:(void 0===e||(2Warning: No message defined for "+e.name+""),i=/\$?\{(\d+)\}/g;return"function"==typeof a?a=a.call(this,t.parameters,e):i.test(a)&&(a=h.validator.format(a.replace(i,"{$1}"),t.parameters)),a},formatAndAdd:function(e,t){var a=this.defaultMessage(e,t);this.errorList.push({message:a,element:e,method:t.method}),this.errorMap[e.name]=a,this.submitted[e.name]=a},addWrapper:function(e){return this.settings.wrapper&&(e=e.add(e.parent(this.settings.wrapper))),e},defaultShowErrors:function(){for(var e,t,a=0;this.errorList[a];a++)t=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,t.element,this.settings.errorClass,this.settings.validClass),this.showLabel(t.element,t.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,e=this.validElements();e[a];a++)this.settings.unhighlight.call(this,e[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return h(this.errorList).map(function(){return this.element})},showLabel:function(e,t){var a,i,r,n,s=this.errorsFor(e),o=this.idOrName(e),l=h(e).attr("aria-describedby");s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(t)):(a=s=h("<"+this.settings.errorElement+">").attr("id",o+"-error").addClass(this.settings.errorClass).html(t||""),this.settings.wrapper&&(a=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(a):this.settings.errorPlacement?this.settings.errorPlacement.call(this,a,h(e)):a.insertAfter(e),s.is("label")?s.attr("for",o):0===s.parents("label[for='"+this.escapeCssMeta(o)+"']").length&&(r=s.attr("id"),l?l.match(new RegExp("\\b"+this.escapeCssMeta(r)+"\\b"))||(l+=" "+r):l=r,h(e).attr("aria-describedby",l),(i=this.groups[e.name])&&(n=this,h.each(n.groups,function(e,t){t===i&&h("[name='"+n.escapeCssMeta(e)+"']",n.currentForm).attr("aria-describedby",s.attr("id"))})))),!t&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,e)),this.toShow=this.toShow.add(s)},errorsFor:function(e){var t=this.escapeCssMeta(this.idOrName(e)),a=h(e).attr("aria-describedby"),i="label[for='"+t+"'], label[for='"+t+"'] *";return a&&(i=i+", #"+this.escapeCssMeta(a).replace(/\s+/g,", #")),this.errors().filter(i)},escapeCssMeta:function(e){return e.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(e){return this.groups[e.name]||!this.checkable(e)&&e.id||e.name},validationTargetFor:function(e){return this.checkable(e)&&(e=this.findByName(e.name)),h(e).not(this.settings.ignore)[0]},checkable:function(e){return/radio|checkbox/i.test(e.type)},findByName:function(e){return h(this.currentForm).find("[name='"+this.escapeCssMeta(e)+"']")},getLength:function(e,t){switch(t.nodeName.toLowerCase()){case"select":return h("option:selected",t).length;case"input":if(this.checkable(t))return this.findByName(t.name).filter(":checked").length}return e.length},depend:function(e,t){return!this.dependTypes[typeof e]||this.dependTypes[typeof e](e,t)},dependTypes:{boolean:function(e){return e},string:function(e,t){return!!h(e,t.form).length},function:function(e,t){return e(t)}},optional:function(e){var t=this.elementValue(e);return!h.validator.methods.required.call(this,t,e)&&"dependency-mismatch"},startRequest:function(e){this.pending[e.name]||(this.pendingRequest++,h(e).addClass(this.settings.pendingClass),this.pending[e.name]=!0)},stopRequest:function(e,t){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],h(e).removeClass(this.settings.pendingClass),t&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(h(this.currentForm).submit(),this.submitButton&&h("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!t&&0===this.pendingRequest&&this.formSubmitted&&(h(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e,t){return t="string"==typeof t&&t||"remote",h.data(e,"previousValue")||h.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,{method:t})})},destroy:function(){this.resetForm(),h(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,t){e.constructor===String?this.classRuleSettings[e]=t:h.extend(this.classRuleSettings,e)},classRules:function(e){var t={},a=h(e).attr("class");return a&&h.each(a.split(" "),function(){this in h.validator.classRuleSettings&&h.extend(t,h.validator.classRuleSettings[this])}),t},normalizeAttributeRule:function(e,t,a,i){/min|max|step/.test(a)&&(null===t||/number|range|text/.test(t))&&(i=Number(i),isNaN(i)&&(i=void 0)),i||0===i?e[a]=i:t===a&&"range"!==t&&(e[a]=!0)},attributeRules:function(e){var t,a,i={},r=h(e),n=e.getAttribute("type");for(t in h.validator.methods)a="required"===t?(""===(a=e.getAttribute(t))&&(a=!0),!!a):r.attr(t),this.normalizeAttributeRule(i,n,t,a);return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var t,a,i={},r=h(e),n=e.getAttribute("type");for(t in h.validator.methods)""===(a=r.data("rule"+t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()))&&(a=!0),this.normalizeAttributeRule(i,n,t,a);return i},staticRules:function(e){var t={},a=h.data(e.form,"validator");return a.settings.rules&&(t=h.validator.normalizeRule(a.settings.rules[e.name])||{}),t},normalizeRules:function(i,r){return h.each(i,function(e,t){if(!1!==t){if(t.param||t.depends){var a=!0;switch(typeof t.depends){case"string":a=!!h(t.depends,r.form).length;break;case"function":a=t.depends.call(r,r)}a?i[e]=void 0===t.param||t.param:(h.data(r.form,"validator").resetElements(h(r)),delete i[e])}}else delete i[e]}),h.each(i,function(e,t){i[e]=h.isFunction(t)&&"normalizer"!==e?t(r):t}),h.each(["minlength","maxlength"],function(){i[this]&&(i[this]=Number(i[this]))}),h.each(["rangelength","range"],function(){var e;i[this]&&(h.isArray(i[this])?i[this]=[Number(i[this][0]),Number(i[this][1])]:"string"==typeof i[this]&&(e=i[this].replace(/[\[\]]/g,"").split(/[\s,]+/),i[this]=[Number(e[0]),Number(e[1])]))}),h.validator.autoCreateRanges&&(null!=i.min&&null!=i.max&&(i.range=[i.min,i.max],delete i.min,delete i.max),null!=i.minlength&&null!=i.maxlength&&(i.rangelength=[i.minlength,i.maxlength],delete i.minlength,delete i.maxlength)),i},normalizeRule:function(e){var t;return"string"==typeof e&&(t={},h.each(e.split(/\s/),function(){t[this]=!0}),e=t),e},addMethod:function(e,t,a){h.validator.methods[e]=t,h.validator.messages[e]=void 0!==a?a:h.validator.messages[e],t.length<3&&h.validator.addClassRules(e,h.validator.normalizeRule(e))},methods:{required:function(e,t,a){if(!this.depend(a,t))return"dependency-mismatch";if("select"!==t.nodeName.toLowerCase())return this.checkable(t)?0=a[0]&&i<=a[1]},min:function(e,t,a){return this.optional(t)||a<=e},max:function(e,t,a){return this.optional(t)||e<=a},range:function(e,t,a){return this.optional(t)||e>=a[0]&&e<=a[1]},step:function(e,t,a){function i(e){var t=(""+e).match(/(?:\.(\d+))?$/);return t&&t[1]?t[1].length:0}function r(e){return Math.round(e*Math.pow(10,n))}var n,s=h(t).attr("type"),o="Step attribute on input type "+s+" is not supported.",l=new RegExp("\\b"+s+"\\b"),u=!0;if(s&&!l.test(["text","number","range"].join()))throw new Error(o);return n=i(a),(i(e)>n||r(e)%r(a)!=0)&&(u=!1),this.optional(t)||u},equalTo:function(e,t,a){var i=h(a);return this.settings.onfocusout&&i.not(".validate-equalTo-blur").length&&i.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){h(t).valid()}),e===i.val()},remote:function(n,s,e,o){if(this.optional(s))return"dependency-mismatch";o="string"==typeof o&&o||"remote";var l,t,a,u=this.previousValue(s,o);return this.settings.messages[s.name]||(this.settings.messages[s.name]={}),u.originalMessage=u.originalMessage||this.settings.messages[s.name][o],this.settings.messages[s.name][o]=u.message,e="string"==typeof e?{url:e}:e,a=h.param(h.extend({data:n},e.data)),u.old===a?u.valid:(u.old=a,(l=this).startRequest(s),(t={})[s.name]=n,h.ajax(h.extend(!0,{mode:"abort",port:"validate"+s.name,dataType:"json",data:t,context:l.currentForm,success:function(e){var t,a,i,r=!0===e||"true"===e;l.settings.messages[s.name][o]=u.originalMessage,r?(i=l.formSubmitted,l.resetInternals(),l.toHide=l.errorsFor(s),l.formSubmitted=i,l.successList.push(s),l.invalid[s.name]=!1,l.showErrors()):(t={},a=e||l.defaultMessage(s,{method:o,parameters:n}),t[s.name]=u.message=a,l.invalid[s.name]=!0,l.showErrors(t)),u.valid=r,l.stopRequest(s,r)}},e)),"pending")}}});var r,n={};return h.ajaxPrefilter?h.ajaxPrefilter(function(e,t,a){var i=e.port;"abort"===e.mode&&(n[i]&&n[i].abort(),n[i]=a)}):(r=h.ajax,h.ajax=function(e){var t=("mode"in e?e:h.ajaxSettings).mode,a=("port"in e?e:h.ajaxSettings).port;return"abort"===t?(n[a]&&n[a].abort(),n[a]=r.apply(this,arguments),n[a]):r.apply(this,arguments)}),h}),function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&module.exports?module.exports=t():e.DateFormatter=t()}("undefined"!=typeof self?self:this,function(){var y={DAY:864e5,HOUR:3600,defaults:{dateSettings:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["AM","PM"],ordinal:function(e){var t=e%10,a={1:"st",2:"nd",3:"rd"};return 1!==Math.floor(e%100/10)&&a[t]?a[t]:"th"}},separators:/[ \-+\/.:@]/g,validParts:/[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,intParts:/[djwNzmnyYhHgGis]/g,tzParts:/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,tzClip:/[^-+\dA-Z]/g},getInt:function(e,t){return parseInt(e,t||10)},compare:function(e,t){return"string"==typeof e&&"string"==typeof t&&e.toLowerCase()===t.toLowerCase()},lpad:function(e,t,a){var i=e.toString();return a=a||"0",i.lengthr[0].length)&&(r=u,n=l)}if(!n||n.callback&&!1===n.callback.apply(i,r))return!1;e=e.substr(r[0].length),r=n=null}return Math.floor(i.toDate(new Date(1e3*t))/1e3)}},"./node_modules/locutus/php/info/ini_get.js":function(e,t,a){"use strict";(function(i){e.exports=function(e){var t="undefined"!=typeof window?window:i;t.$locutus=t.$locutus||{};var a=t.$locutus;return a.php=a.php||{},a.php.ini=a.php.ini||{},!a.php.ini[e]||void 0===a.php.ini[e].local_value||null===a.php.ini[e].local_value?"":a.php.ini[e].local_value}}).call(this,a("./node_modules/webpack/buildin/global.js"))},"./node_modules/locutus/php/strings/strlen.js":function(e,t,r){"use strict";e.exports=function(e){var t=e+"";if("off"===(r("./node_modules/locutus/php/info/ini_get.js")("unicode.semantics")||"off"))return t.length;for(var a=0,i=0,a=0,i=0;a":return n=":return n<=o;default:throw new Error("Unsupported operator.")}},guessDate:function(e,t){return(new DateFormatter).guessDate(e,t)},strtotime:function(e,t){return l()(e,t)},is_numeric:function(e){return h()(e)},isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},arrayDiff:function(e,t){return s()(e,t)},arrayEquals:function(e,t){return!(!this.isArray(e)||!this.isArray(t))&&(e.length===t.length&&$.isEmptyObject(this.arrayDiff(e,t)))},dependentElement:function(e,t,a){var i,r,n=e.findByName(a);return void 0!==n[0]&&e.settings.onfocusout&&(i="blur","SELECT"!==n[0].tagName&&"OPTION"!==n[0].tagName&&"checkbox"!==n[0].type&&"radio"!==n[0].type||(i="click"),r=".validate-laravelValidation",n.off(r).off(i+r+"-"+t.name).on(i+r+"-"+t.name,function(){$(t).valid()})),n[0]},parseErrorResponse:function(e){var t,a=["Whoops, looks like something went wrong."];return"responseText"in e&&(t=e.responseText.match(/(.*)<\/h1\s*>/i),this.isArray(t)&&(a=[t[1]])),a},escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},regexFromWildcard:function(e){var t=e.split("[*]");1===t.length&&t.push("");var a=t.map(function(e,t){return t%2==0?e+="[":e="]"+e,laravelValidation.helpers.escapeRegExp(e)});return new RegExp("^"+a.join("[^\\]]*")+"$")},mergeRules:function(e,t){var a={laravelValidation:t.laravelValidation||[],laravelValidationRemote:t.laravelValidationRemote||[]};for(var i in a)0!==a[i].length&&(void 0===e[i]&&(e[i]=[]),e[i]=e[i].concat(a[i]));return e}}})}}),$.extend(!0,laravelValidation,{helpers:{isTimezone:function(e){var t={africa:["abidjan","accra","addis_ababa","algiers","asmara","bamako","bangui","banjul","bissau","blantyre","brazzaville","bujumbura","cairo","casablanca","ceuta","conakry","dakar","dar_es_salaam","djibouti","douala","el_aaiun","freetown","gaborone","harare","johannesburg","juba","kampala","khartoum","kigali","kinshasa","lagos","libreville","lome","luanda","lubumbashi","lusaka","malabo","maputo","maseru","mbabane","mogadishu","monrovia","nairobi","ndjamena","niamey","nouakchott","ouagadougou","porto-novo","sao_tome","tripoli","tunis","windhoek"],america:["adak","anchorage","anguilla","antigua","araguaina","argentina/buenos_aires","argentina/catamarca","argentina/cordoba","argentina/jujuy","argentina/la_rioja","argentina/mendoza","argentina/rio_gallegos","argentina/salta","argentina/san_juan","argentina/san_luis","argentina/tucuman","argentina/ushuaia","aruba","asuncion","atikokan","bahia","bahia_banderas","barbados","belem","belize","blanc-sablon","boa_vista","bogota","boise","cambridge_bay","campo_grande","cancun","caracas","cayenne","cayman","chicago","chihuahua","costa_rica","creston","cuiaba","curacao","danmarkshavn","dawson","dawson_creek","denver","detroit","dominica","edmonton","eirunepe","el_salvador","fortaleza","glace_bay","godthab","goose_bay","grand_turk","grenada","guadeloupe","guatemala","guayaquil","guyana","halifax","havana","hermosillo","indiana/indianapolis","indiana/knox","indiana/marengo","indiana/petersburg","indiana/tell_city","indiana/vevay","indiana/vincennes","indiana/winamac","inuvik","iqaluit","jamaica","juneau","kentucky/louisville","kentucky/monticello","kralendijk","la_paz","lima","los_angeles","lower_princes","maceio","managua","manaus","marigot","martinique","matamoros","mazatlan","menominee","merida","metlakatla","mexico_city","miquelon","moncton","monterrey","montevideo","montreal","montserrat","nassau","new_york","nipigon","nome","noronha","north_dakota/beulah","north_dakota/center","north_dakota/new_salem","ojinaga","panama","pangnirtung","paramaribo","phoenix","port-au-prince","port_of_spain","porto_velho","puerto_rico","rainy_river","rankin_inlet","recife","regina","resolute","rio_branco","santa_isabel","santarem","santiago","santo_domingo","sao_paulo","scoresbysund","shiprock","sitka","st_barthelemy","st_johns","st_kitts","st_lucia","st_thomas","st_vincent","swift_current","tegucigalpa","thule","thunder_bay","tijuana","toronto","tortola","vancouver","whitehorse","winnipeg","yakutat","yellowknife"],antarctica:["casey","davis","dumontdurville","macquarie","mawson","mcmurdo","palmer","rothera","south_pole","syowa","vostok"],arctic:["longyearbyen"],asia:["aden","almaty","amman","anadyr","aqtau","aqtobe","ashgabat","baghdad","bahrain","baku","bangkok","beirut","bishkek","brunei","choibalsan","chongqing","colombo","damascus","dhaka","dili","dubai","dushanbe","gaza","harbin","hebron","ho_chi_minh","hong_kong","hovd","irkutsk","jakarta","jayapura","jerusalem","kabul","kamchatka","karachi","kashgar","kathmandu","khandyga","kolkata","krasnoyarsk","kuala_lumpur","kuching","kuwait","macau","magadan","makassar","manila","muscat","nicosia","novokuznetsk","novosibirsk","omsk","oral","phnom_penh","pontianak","pyongyang","qatar","qyzylorda","rangoon","riyadh","sakhalin","samarkand","seoul","shanghai","singapore","taipei","tashkent","tbilisi","tehran","thimphu","tokyo","ulaanbaatar","urumqi","ust-nera","vientiane","vladivostok","yakutsk","yekaterinburg","yerevan"],atlantic:["azores","bermuda","canary","cape_verde","faroe","madeira","reykjavik","south_georgia","st_helena","stanley"],australia:["adelaide","brisbane","broken_hill","currie","darwin","eucla","hobart","lindeman","lord_howe","melbourne","perth","sydney"],europe:["amsterdam","andorra","athens","belgrade","berlin","bratislava","brussels","bucharest","budapest","busingen","chisinau","copenhagen","dublin","gibraltar","guernsey","helsinki","isle_of_man","istanbul","jersey","kaliningrad","kiev","lisbon","ljubljana","london","luxembourg","madrid","malta","mariehamn","minsk","monaco","moscow","oslo","paris","podgorica","prague","riga","rome","samara","san_marino","sarajevo","simferopol","skopje","sofia","stockholm","tallinn","tirane","uzhgorod","vaduz","vatican","vienna","vilnius","volgograd","warsaw","zagreb","zaporozhye","zurich"],indian:["antananarivo","chagos","christmas","cocos","comoro","kerguelen","mahe","maldives","mauritius","mayotte","reunion"],pacific:["apia","auckland","chatham","chuuk","easter","efate","enderbury","fakaofo","fiji","funafuti","galapagos","gambier","guadalcanal","guam","honolulu","johnston","kiritimati","kosrae","kwajalein","majuro","marquesas","midway","nauru","niue","norfolk","noumea","pago_pago","palau","pitcairn","pohnpei","port_moresby","rarotonga","saipan","tahiti","tarawa","tongatapu","wake","wallis"],utc:[""]},a=e.split("/",2),i=a[0].toLowerCase(),r="";return a[1]&&(r=a[1].toLowerCase()),i in t&&(0===t[i].length||-1!==t[i].indexOf(r))}}}),$.extend(!0,laravelValidation,{methods:{helpers:laravelValidation.helpers,jsRemoteTimer:0,Sometimes:function(){return!0},Bail:function(){return!0},Nullable:function(){return!0},Filled:function(e,t){return $.validator.methods.required.call(this,e,t,!0)},Required:function(e,t){return $.validator.methods.required.call(this,e,t)},RequiredWith:function(e,i,t){var r=this,n=!1,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n||void 0!==a&&$.validator.methods.required.call(r,s.elementValue(a),a,!0)}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredWithAll:function(e,i,t){var r=this,n=!0,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n&&void 0!==a&&$.validator.methods.required.call(r,s.elementValue(a),a,!0)}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredWithout:function(e,i,t){var r=this,n=!1,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n||void 0===a||!$.validator.methods.required.call(r,s.elementValue(a),a,!0)}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredWithoutAll:function(e,i,t){var r=this,n=!0,s=this;return $.each(t,function(e,t){var a=laravelValidation.helpers.dependentElement(s,i,t);n=n&&(void 0===a||!$.validator.methods.required.call(r,s.elementValue(a),a,!0))}),!n||$.validator.methods.required.call(this,e,i,!0)},RequiredIf:function(e,t,a){var i=laravelValidation.helpers.dependentElement(this,t,a[0]);if(void 0!==i){var r=String(this.elementValue(i));if(void 0!==r){var n=a.slice(1);if(-1!==$.inArray(r,n))return $.validator.methods.required.call(this,e,t,!0)}}return!0},RequiredUnless:function(e,t,a){var i=laravelValidation.helpers.dependentElement(this,t,a[0]);if(void 0!==i){var r=String(this.elementValue(i));if(void 0!==r){var n=a.slice(1);if(-1!==$.inArray(r,n))return!0}}return $.validator.methods.required.call(this,e,t,!0)},Confirmed:function(e,t,a){return laravelValidation.methods.Same.call(this,e,t,a)},Same:function(e,t,a){var i=laravelValidation.helpers.dependentElement(this,t,a[0]);return void 0!==i&&String(e)===String(this.elementValue(i))},InArray:function(e,t,a){if(void 0===a[0])return!1;for(var i=this.elements(),r=!1,n=laravelValidation.helpers.regexFromWildcard(a[0]),s=0;s=parseFloat(a[0])&&e.length<=parseFloat(a[1])},Size:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)===parseFloat(a[0])},Between:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)>=parseFloat(a[0])&&laravelValidation.helpers.getSize(this,t,e)<=parseFloat(a[1])},Min:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)>=parseFloat(a[0])},Max:function(e,t,a){return laravelValidation.helpers.getSize(this,t,e)<=parseFloat(a[0])},In:function(e,t,a){if(laravelValidation.helpers.isArray(e)&&laravelValidation.helpers.hasRules(t,"Array")){var i=laravelValidation.helpers.arrayDiff(e,a);return 0===Object.keys(i).length}return-1!==a.indexOf(e.toString())},NotIn:function(e,t,a){return-1===a.indexOf(e.toString())},Ip:function(e){return/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(e)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(e)},Email:function(e,t){return $.validator.methods.email.call(this,e,t,!0)},Url:function(e,t){return $.validator.methods.url.call(this,e,t,!0)},File:function(e,t){return!(window.File&&window.FileReader&&window.FileList&&window.Blob)||"files"in t&&0width||params.max_width&&parseFloat(params.max_width)height||params.max_height&&parseFloat(params.max_height)")},AfterOrEqual:function(e,t,a){return laravelValidation.helpers.compareDates(this,e,t,a,">=")},Timezone:function(e){return laravelValidation.helpers.isTimezone(e)},Json:function(e){var t=!0;try{JSON.parse(e)}catch(e){t=!1}return t}}}); //# sourceMappingURL=jsvalidation.min.js.map diff --git a/public/js/jsvalidation.min.js.map b/public/js/jsvalidation.min.js.map index e817e640..d1e57f06 100644 --- a/public/js/jsvalidation.min.js.map +++ b/public/js/jsvalidation.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/php-date-formatter/js/php-date-formatter.js","resources/assets/js/jsvalidation.js","node_modules/jquery-validation/dist/jquery.validate.js","es-build/helpers.js","resources/assets/js/timezones.js","resources/assets/js/validations.js"],"names":["DateFormatter","laravelValidation","factory","define","amd","module","exports","require","jQuery","$","extend","fn","validate","options","this","length","validator","data","attr","settings","onsubmit","on","event","submitButton","currentTarget","hasClass","cancelSubmit","undefined","handle","hidden","result","submitHandler","formSubmitted","name","val","appendTo","currentForm","debug","call","remove","preventDefault","form","pendingRequest","focusInvalid","window","console","warn","valid","errorList","is","each","element","concat","rules","command","argument","staticRules","existingRules","param","filtered","isContentEditable","closest","normalizeRule","messages","split","index","method","normalizeRules","classRules","attributeRules","dataRules","required","remote","trim","str","replace","called","expr","pseudos","blank","a","filled","unchecked","prop","defaults","init","format","source","params","arguments","args","makeArray","unshift","apply","constructor","Array","slice","i","n","RegExp","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","which","elementValue","inArray","keyCode","invalid","onclick","parentNode","highlight","type","findByName","addClass","removeClass","setDefaults","email","url","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","max","min","step","autoCreateRanges","prototype","labelContainer","errorContext","containers","add","valueCache","pending","reset","delegate","eventType","key","value","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","check","rs","group","cleanElement","clean","checkElement","validationTargetFor","v","prepareElement","testgroup","push","numberOfInvalids","toHide","errors","map","message","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","removeAttr","resetElements","objectLength","obj","count","not","text","addWrapper","hide","size","findLastActive","filter","trigger","e","rulesCache","find","error","selector","join","resetInternals","toShow","idx","$element","validity","badInput","substr","lastIndexOf","rule","normalizer","rulesCount","dependencyMismatch","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","toUpperCase","substring","toLowerCase","customMessage","m","String","findDefined","defaultMessage","title","theregex","test","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","html","wrap","append","errorPlacement","insertAfter","parents","escapeCssMeta","match","describer","string","getLength","nodeName","depend","dependTypes","boolean","function","startRequest","stopRequest","submit","previousValue","old","destroy","off","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","isFunction","parts","isArray","transformed","addMethod","Date","toString","decimalPlaces","num","toInt","Math","round","pow","decimals","errorMessage","re","Error","target","optionDataString","previous","originalMessage","ajax","mode","port","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","abort","ajaxSettings","_compare","str1","str2","_lpad","char","chr","_extend","out","hasOwnProperty","_indexOf","arr","defaultSettings","dateSettings","days","daysShort","months","monthsShort","meridiem","ordinal","suffixes","1","2","3","floor","separators","validParts","intParts","tzParts","tzClip","self","config","getMonth","parseDate","vDate","vFormat","vFormatParts","vDateParts","vDatePart","iDatePart","vMonth","vMeriIndex","vMeriOffset","len","mer","vDateFlag","vTimeFlag","vSettings","year","month","day","hour","sec","parseInt","indexOf","guessDate","vDateStr","vYear","iPart","iSec","vParts","vDigit","setMonth","setDate","getFullYear","setFullYear","setHours","setMinutes","setSeconds","splice","parseFormat","vChar","doFormat","t","s","fmt","backslash","d","j","D","w","getDate","l","N","getDay","z","Y","b","W","F","M","L","o","y","A","G","B","H","getUTCHours","getUTCMinutes","getUTCSeconds","g","getHours","h","getMinutes","getSeconds","u","getMilliseconds","exec","I","UTC","O","tzo","getTimezoneOffset","abs","P","T","pop","Z","c","r","U","getTime","formatDate","implicitRules","arrayRules","arrayRulesCache","setupValidations","cache","tmpRules","nameRegExp","newRules","helpers","mergeRules","regexFromWildcard","validateLocalRules","values","validated","implicit","laravelValidationRemote","isArrayRule","localRulesResult","arrayValue","arrayRulesResult","attribute","token","validateAll","arrayEquals","serializeArray","formMethod","beforeSend","setRequestHeader","always","textStatus","parseErrorResponse","modules","installedModules","__webpack_require__","moduleId","getter","Object","defineProperty","enumerable","get","Symbol","toStringTag","__esModule","ns","create","bind","object","property","p","./node_modules/locutus/php/array/array_diff.js","arr1","retArr","argl","k1","k","arr1keys","./node_modules/locutus/php/datetime/strtotime.js","reSpace","reSpaceOpt","reMeridian","reHour24","reHour24lz","reHour12","reMinute","reMinutelz","reSecond","reSecondlz","reFrac","reDayfull","reDayabbr","reDaytext","reReltextnumber","reReltexttext","reReltextunit","reYear","reYear4","reMonth","reMonthlz","reDay","reDaylz","reMonthFull","reMonthAbbr","reMonthText","reTzCorrection","processMeridian","meridian","processYear","yearStr","lookupMonth","monthStr","jan","january","feb","february","ii","mar","march","iii","apr","april","iv","may","jun","june","vi","jul","july","vii","aug","august","viii","sep","sept","september","ix","oct","october","x","nov","november","xi","dec","december","xii","lookupWeekday","dayStr","desiredSundayNumber","mon","monday","tue","tuesday","wed","wednesday","thu","thursday","fri","friday","sat","saturday","sun","sunday","processTzCorrection","tzOffset","oldValue","sign","hours","minutes","formats","yesterday","regex","callback","rd","resetTime","now","noon","time","midnightOrToday","tomorrow","timestamp","dates","zone","firstOrLastDay","firstOrLastDayOfMonth","backOrFrontOf","side","minute","weekdayOf","mssqltime","second","frac","timeLong12","timeShort12","timeTiny12","soap","tzCorrection","ymd","wddx","exif","xmlRpc","xmlRpcNoColon","clf","iso8601long","dateTextual","pointedDate4","pointedDate2","timeLong24","dateNoColon","pgydotd","timeShort24","iso8601noColon","iso8601dateSlash","dateSlash","american","americanShort","gnuDateShortOrIso8601date2","iso8601date4","gnuNoColon","f","gnuDateShorter","pgTextReverse","dateFull","dateNoDay","dateNoDayRev","pgTextShort","dateNoYear","dateNoYearRev","isoWeekDay","week","dayOfWeek","relativeText","relValue","relUnit","relTextLower","_lookupRelative","amount","last","first","next","third","fourth","fifth","sixth","seventh","eight","eighth","ninth","tenth","eleventh","twelfth","behavior","ri","rh","rm","ry","weekday","weekdayBehavior","relative","signs","minuses","dayText","relativeTextWeek","relText","monthFullOrMonthAbbr","ago","rf","gnuNoColon2","year4","whitespace","any","resultProto","NaN","times","zones","toDate","relativeTo","dow","diff","setUTCFullYear","setUTCHours","./node_modules/locutus/php/info/ini_get.js","global","varname","$global","$locutus","php","ini","local_value","./node_modules/locutus/php/strings/strlen.js","lgth","prev","code","charCodeAt","getWholeChar","./node_modules/locutus/php/var/is_numeric.js","mixedVar","./node_modules/webpack/buildin/global.js","Function","./resources/assets/js/helpers.js","__webpack_exports__","locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__","locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default","locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__","locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default","locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__","locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default","locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__","locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default","numericRules","fileinfo","fieldObj","FileName","files","file","extension","names","hasNumericRules","hasRules","found","listRules","arrayRule","objRules","_rules","strlen","getSize","is_numeric","parseFloat","getLaravelValidation","parseTime","dateRule","timeValue","strtotime","compareDates","operator","timeCompare","dependentElement","mixed_var","arg","arrayDiff","arr2","isEmptyObject","ruleName","el","tagName","errorMsg","newResponse","responseText","escapeRegExp","nameParts","regexpParts","currentValue","rulesList","isTimezone","timezones","africa","america","antarctica","arctic","asia","atlantic","australia","europe","indian","pacific","utc","tzparts","continent","city","jsRemoteTimer","Sometimes","Bail","Nullable","Filled","Required","RequiredWith","currentObject","RequiredWithAll","RequiredWithout","RequiredWithoutAll","RequiredIf","RequiredUnless","Confirmed","Same","InArray","equals","targetName","Distinct","Different","Accepted","Boolean","Integer","Numeric","Digits","DigitsBetween","Size","Between","Min","Max","In","keys","NotIn","Ip","Email","Url","File","FileReader","FileList","Blob","Mimes","lowerParams","item","Mimetypes","Image","Dimensions","fr","onload","img","height","naturalHeight","width","naturalWidth","ratio","notValid","eval","onerror","src","readAsDataURL","Alpha","AlphaNum","AlphaDash","Regex","invalidModifiers","phpReg","matches","php_modifiers","DateFormat","Before","BeforeOrEqual","After","AfterOrEqual","Timezone","Json","JSON","parse"],"mappings":"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CArwB,kBAAAkc,EAAAlc,mBAAA,GACA0c,wBAAAR,EAAAQ,yBAAA,IAGA,IAAA,IAAA7S,KAAAwmB,EACA,IAAAA,EAAAxmB,GAAA/I,cAIA,IAAAsC,EAAAyG,KACAzG,EAAAyG,GAAA,IAGAzG,EAAAyG,GAAAzG,EAAAyG,GAAA1G,OAAAktB,EAAAxmB,KAGA,OAAAzG,SCr1DA5C,EAAAC,QAAA,EAAAT,kBAAA,CAEAmc,QAAA,CAQAmU,WAAA,SAAAxmB,GAEA,IAAAymB,EAAA,CACAC,OAAA,CACA,UACA,QACA,cACA,UACA,SACA,SACA,SACA,SACA,SACA,WACA,cACA,YACA,QACA,aACA,QACA,UACA,QACA,gBACA,WACA,SACA,WACA,WACA,WACA,SACA,eACA,OACA,UACA,WACA,SACA,WACA,QACA,aACA,OACA,SACA,aACA,SACA,SACA,SACA,SACA,UACA,YACA,WACA,UACA,WACA,SACA,aACA,cACA,aACA,WACA,UACA,QACA,YAEAC,QAAA,CACA,OACA,YACA,WACA,UACA,YACA,yBACA,sBACA,oBACA,kBACA,qBACA,oBACA,yBACA,kBACA,qBACA,qBACA,oBACA,oBACA,QACA,WACA,WACA,QACA,iBACA,WACA,QACA,SACA,eACA,YACA,SACA,QACA,gBACA,eACA,SACA,UACA,UACA,SACA,UACA,YACA,aACA,UACA,SACA,UACA,eACA,SACA,eACA,SACA,UACA,WACA,WACA,WACA,cACA,YACA,YACA,UACA,YACA,aACA,UACA,aACA,YACA,YACA,SACA,UACA,SACA,aACA,uBACA,eACA,kBACA,qBACA,oBACA,gBACA,oBACA,kBACA,SACA,UACA,UACA,SACA,sBACA,sBACA,aACA,SACA,OACA,cACA,gBACA,SACA,UACA,SACA,UACA,aACA,YACA,WACA,YACA,SACA,aACA,cACA,WACA,UACA,YACA,aACA,WACA,aACA,SACA,WACA,UACA,OACA,UACA,sBACA,sBACA,yBACA,UACA,SACA,cACA,aACA,UACA,iBACA,gBACA,cACA,cACA,cACA,eACA,SACA,SACA,WACA,aACA,eACA,WACA,WACA,gBACA,YACA,eACA,WACA,QACA,gBACA,WACA,WACA,WACA,YACA,aACA,gBACA,cACA,QACA,cACA,UACA,UACA,UACA,YACA,aACA,WACA,UACA,eAEAC,WAAA,CACA,QACA,QACA,iBACA,YACA,SACA,UACA,SACA,UACA,aACA,QACA,UAEAC,OAAA,CACA,gBAEAC,KAAA,CACA,OACA,SACA,QACA,SACA,QACA,SACA,WACA,UACA,UACA,OACA,UACA,SACA,UACA,SACA,aACA,YACA,UACA,WACA,QACA,OACA,QACA,WACA,OACA,SACA,SACA,cACA,YACA,OACA,UACA,UACA,WACA,YACA,QACA,YACA,UACA,UACA,YACA,WACA,UACA,cACA,eACA,UACA,SACA,QACA,UACA,WACA,SACA,SACA,UACA,eACA,cACA,OACA,OACA,aACA,YACA,YACA,QACA,YACA,UACA,SACA,WACA,YACA,QACA,WACA,YACA,SACA,WACA,UACA,SACA,UACA,QACA,cACA,SACA,WACA,YACA,cACA,UACA,gBACA,WAEAC,SAAA,CACA,SACA,UACA,SACA,aACA,QACA,UACA,YACA,gBACA,YACA,WAEAC,UAAA,CACA,WACA,WACA,cACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,QACA,UAEAC,OAAA,CACA,YACA,UACA,SACA,WACA,SACA,aACA,WACA,YACA,WACA,WACA,WACA,aACA,SACA,YACA,WACA,WACA,cACA,WACA,SACA,cACA,OACA,SACA,YACA,SACA,aACA,SACA,QACA,YACA,QACA,SACA,SACA,OACA,QACA,YACA,SACA,OACA,OACA,SACA,aACA,WACA,aACA,SACA,QACA,YACA,UACA,SACA,WACA,QACA,UACA,SACA,UACA,YACA,SACA,SACA,aACA,UAEAC,OAAA,CACA,eACA,SACA,YACA,QACA,SACA,YACA,OACA,WACA,YACA,UACA,WAEAC,QAAA,CACA,OACA,WACA,UACA,QACA,SACA,QACA,YACA,UACA,OACA,WACA,YACA,UACA,c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","file":"jsvalidation.min.js","sourcesContent":["/*!\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2016\n * @version 1.3.4\n *\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\n * @see http://php.net/manual/en/function.date.php\n *\n * For more JQuery plugins visit http://plugins.krajee.com\n * For more Yii related demos visit http://demos.krajee.com\n */\nvar DateFormatter;\n(function () {\n \"use strict\";\n\n var _compare, _lpad, _extend, _indexOf, defaultSettings, DAY, HOUR;\n DAY = 1000 * 60 * 60 * 24;\n HOUR = 3600;\n\n _compare = function (str1, str2) {\n return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();\n };\n _lpad = function (value, length, char) {\n var chr = char || '0', val = value.toString();\n return val.length < length ? _lpad(chr + val, length) : val;\n };\n _extend = function (out) {\n var i, obj;\n out = out || {};\n for (i = 1; i < arguments.length; i++) {\n obj = arguments[i];\n if (!obj) {\n continue;\n }\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (typeof obj[key] === 'object') {\n _extend(out[key], obj[key]);\n } else {\n out[key] = obj[key];\n }\n }\n }\n }\n return out;\n };\n _indexOf = function (val, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i].toLowerCase() === val.toLowerCase()) {\n return i;\n }\n }\n return -1;\n };\n defaultSettings = {\n dateSettings: {\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\n 'August', 'September', 'October', 'November', 'December'\n ],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n meridiem: ['AM', 'PM'],\n ordinal: function (number) {\n var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};\n return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];\n }\n },\n separators: /[ \\-+\\/\\.T:@]/g,\n validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,\n intParts: /[djwNzmnyYhHgGis]/g,\n tzParts: /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n tzClip: /[^-+\\dA-Z]/g\n };\n\n DateFormatter = function (options) {\n var self = this, config = _extend(defaultSettings, options);\n self.dateSettings = config.dateSettings;\n self.separators = config.separators;\n self.validParts = config.validParts;\n self.intParts = config.intParts;\n self.tzParts = config.tzParts;\n self.tzClip = config.tzClip;\n };\n\n DateFormatter.prototype = {\n constructor: DateFormatter,\n getMonth: function (val) {\n var self = this, i;\n i = _indexOf(val, self.dateSettings.monthsShort) + 1;\n if (i === 0) {\n i = _indexOf(val, self.dateSettings.months) + 1;\n }\n return i;\n },\n parseDate: function (vDate, vFormat) {\n var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,\n vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,\n out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};\n if (!vDate) {\n return null;\n }\n if (vDate instanceof Date) {\n return vDate;\n }\n if (vFormat === 'U') {\n i = parseInt(vDate);\n return i ? new Date(i * 1000) : vDate;\n }\n switch (typeof vDate) {\n case 'number':\n return new Date(vDate);\n case 'string':\n break;\n default:\n return null;\n }\n vFormatParts = vFormat.match(self.validParts);\n if (!vFormatParts || vFormatParts.length === 0) {\n throw new Error(\"Invalid date format definition.\");\n }\n vDateParts = vDate.replace(self.separators, '\\0').split('\\0');\n for (i = 0; i < vDateParts.length; i++) {\n vDatePart = vDateParts[i];\n iDatePart = parseInt(vDatePart);\n switch (vFormatParts[i]) {\n case 'y':\n case 'Y':\n if (iDatePart) {\n len = vDatePart.length;\n out.year = len === 2 ? parseInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart;\n } else {\n return null;\n }\n vDateFlag = true;\n break;\n case 'm':\n case 'n':\n case 'M':\n case 'F':\n if (isNaN(iDatePart)) {\n vMonth = self.getMonth(vDatePart);\n if (vMonth > 0) {\n out.month = vMonth;\n } else {\n return null;\n }\n } else {\n if (iDatePart >= 1 && iDatePart <= 12) {\n out.month = iDatePart;\n } else {\n return null;\n }\n }\n vDateFlag = true;\n break;\n case 'd':\n case 'j':\n if (iDatePart >= 1 && iDatePart <= 31) {\n out.day = iDatePart;\n } else {\n return null;\n }\n vDateFlag = true;\n break;\n case 'g':\n case 'h':\n vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :\n (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;\n mer = vDateParts[vMeriIndex];\n if (vMeriIndex > -1) {\n vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :\n (_compare(mer, vSettings.meridiem[1]) ? 12 : -1);\n if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) {\n out.hour = iDatePart + vMeriOffset - 1;\n } else if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n }\n } else {\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n } else {\n return null;\n }\n }\n vTimeFlag = true;\n break;\n case 'G':\n case 'H':\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n case 'i':\n if (iDatePart >= 0 && iDatePart <= 59) {\n out.min = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n case 's':\n if (iDatePart >= 0 && iDatePart <= 59) {\n out.sec = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n }\n }\n if (vDateFlag === true && out.year && out.month && out.day) {\n out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);\n } else {\n if (vTimeFlag !== true) {\n return null;\n }\n out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);\n }\n return out.date;\n },\n guessDate: function (vDateStr, vFormat) {\n if (typeof vDateStr !== 'string') {\n return vDateStr;\n }\n var self = this, vParts = vDateStr.replace(self.separators, '\\0').split('\\0'), vPattern = /^[djmn]/g, len,\n vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, n, iPart, iSec;\n\n if (!vPattern.test(vFormatParts[0])) {\n return vDateStr;\n }\n\n for (i = 0; i < vParts.length; i++) {\n vDigit = 2;\n iPart = vParts[i];\n iSec = parseInt(iPart.substr(0, 2));\n if (isNaN(iSec)) {\n return null;\n }\n switch (i) {\n case 0:\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n vDate.setMonth(iSec - 1);\n } else {\n vDate.setDate(iSec);\n }\n break;\n case 1:\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n vDate.setDate(iSec);\n } else {\n vDate.setMonth(iSec - 1);\n }\n break;\n case 2:\n vYear = vDate.getFullYear();\n len = iPart.length;\n vDigit = len < 4 ? len : 4;\n vYear = parseInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4));\n if (!vYear) {\n return null;\n }\n vDate.setFullYear(vYear);\n break;\n case 3:\n vDate.setHours(iSec);\n break;\n case 4:\n vDate.setMinutes(iSec);\n break;\n case 5:\n vDate.setSeconds(iSec);\n break;\n }\n n = iPart.substr(vDigit);\n if (n.length > 0) {\n vParts.splice(i + 1, 0, n);\n }\n }\n return vDate;\n },\n parseFormat: function (vChar, vDate) {\n var self = this, vSettings = self.dateSettings, fmt, backslash = /\\\\?(.?)/gi, doFormat = function (t, s) {\n return fmt[t] ? fmt[t]() : s;\n };\n fmt = {\n /////////\n // DAY //\n /////////\n /**\n * Day of month with leading 0: `01..31`\n * @return {string}\n */\n d: function () {\n return _lpad(fmt.j(), 2);\n },\n /**\n * Shorthand day name: `Mon...Sun`\n * @return {string}\n */\n D: function () {\n return vSettings.daysShort[fmt.w()];\n },\n /**\n * Day of month: `1..31`\n * @return {number}\n */\n j: function () {\n return vDate.getDate();\n },\n /**\n * Full day name: `Monday...Sunday`\n * @return {number}\n */\n l: function () {\n return vSettings.days[fmt.w()];\n },\n /**\n * ISO-8601 day of week: `1[Mon]..7[Sun]`\n * @return {number}\n */\n N: function () {\n return fmt.w() || 7;\n },\n /**\n * Day of week: `0[Sun]..6[Sat]`\n * @return {number}\n */\n w: function () {\n return vDate.getDay();\n },\n /**\n * Day of year: `0..365`\n * @return {number}\n */\n z: function () {\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);\n return Math.round((a - b) / DAY);\n },\n\n //////////\n // WEEK //\n //////////\n /**\n * ISO-8601 week number\n * @return {number}\n */\n W: function () {\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);\n return _lpad(1 + Math.round((a - b) / DAY / 7), 2);\n },\n\n ///////////\n // MONTH //\n ///////////\n /**\n * Full month name: `January...December`\n * @return {string}\n */\n F: function () {\n return vSettings.months[vDate.getMonth()];\n },\n /**\n * Month w/leading 0: `01..12`\n * @return {string}\n */\n m: function () {\n return _lpad(fmt.n(), 2);\n },\n /**\n * Shorthand month name; `Jan...Dec`\n * @return {string}\n */\n M: function () {\n return vSettings.monthsShort[vDate.getMonth()];\n },\n /**\n * Month: `1...12`\n * @return {number}\n */\n n: function () {\n return vDate.getMonth() + 1;\n },\n /**\n * Days in month: `28...31`\n * @return {number}\n */\n t: function () {\n return (new Date(fmt.Y(), fmt.n(), 0)).getDate();\n },\n\n //////////\n // YEAR //\n //////////\n /**\n * Is leap year? `0 or 1`\n * @return {number}\n */\n L: function () {\n var Y = fmt.Y();\n return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;\n },\n /**\n * ISO-8601 year\n * @return {number}\n */\n o: function () {\n var n = fmt.n(), W = fmt.W(), Y = fmt.Y();\n return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);\n },\n /**\n * Full year: `e.g. 1980...2010`\n * @return {number}\n */\n Y: function () {\n return vDate.getFullYear();\n },\n /**\n * Last two digits of year: `00...99`\n * @return {string}\n */\n y: function () {\n return fmt.Y().toString().slice(-2);\n },\n\n //////////\n // TIME //\n //////////\n /**\n * Meridian lower: `am or pm`\n * @return {string}\n */\n a: function () {\n return fmt.A().toLowerCase();\n },\n /**\n * Meridian upper: `AM or PM`\n * @return {string}\n */\n A: function () {\n var n = fmt.G() < 12 ? 0 : 1;\n return vSettings.meridiem[n];\n },\n /**\n * Swatch Internet time: `000..999`\n * @return {string}\n */\n B: function () {\n var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();\n return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);\n },\n /**\n * 12-Hours: `1..12`\n * @return {number}\n */\n g: function () {\n return fmt.G() % 12 || 12;\n },\n /**\n * 24-Hours: `0..23`\n * @return {number}\n */\n G: function () {\n return vDate.getHours();\n },\n /**\n * 12-Hours with leading 0: `01..12`\n * @return {string}\n */\n h: function () {\n return _lpad(fmt.g(), 2);\n },\n /**\n * 24-Hours w/leading 0: `00..23`\n * @return {string}\n */\n H: function () {\n return _lpad(fmt.G(), 2);\n },\n /**\n * Minutes w/leading 0: `00..59`\n * @return {string}\n */\n i: function () {\n return _lpad(vDate.getMinutes(), 2);\n },\n /**\n * Seconds w/leading 0: `00..59`\n * @return {string}\n */\n s: function () {\n return _lpad(vDate.getSeconds(), 2);\n },\n /**\n * Microseconds: `000000-999000`\n * @return {string}\n */\n u: function () {\n return _lpad(vDate.getMilliseconds() * 1000, 6);\n },\n\n //////////////\n // TIMEZONE //\n //////////////\n /**\n * Timezone identifier: `e.g. Atlantic/Azores, ...`\n * @return {string}\n */\n e: function () {\n var str = /\\((.*)\\)/.exec(String(vDate))[1];\n return str || 'Coordinated Universal Time';\n },\n /**\n * DST observed? `0 or 1`\n * @return {number}\n */\n I: function () {\n var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),\n b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);\n return ((a - c) !== (b - d)) ? 1 : 0;\n },\n /**\n * Difference to GMT in hour format: `e.g. +0200`\n * @return {string}\n */\n O: function () {\n var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);\n return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);\n },\n /**\n * Difference to GMT with colon: `e.g. +02:00`\n * @return {string}\n */\n P: function () {\n var O = fmt.O();\n return (O.substr(0, 3) + ':' + O.substr(3, 2));\n },\n /**\n * Timezone abbreviation: `e.g. EST, MDT, ...`\n * @return {string}\n */\n T: function () {\n var str = (String(vDate).match(self.tzParts) || [\"\"]).pop().replace(self.tzClip, \"\");\n return str || 'UTC';\n },\n /**\n * Timezone offset in seconds: `-43200...50400`\n * @return {number}\n */\n Z: function () {\n return -vDate.getTimezoneOffset() * 60;\n },\n\n ////////////////////\n // FULL DATE TIME //\n ////////////////////\n /**\n * ISO-8601 date\n * @return {string}\n */\n c: function () {\n return 'Y-m-d\\\\TH:i:sP'.replace(backslash, doFormat);\n },\n /**\n * RFC 2822 date\n * @return {string}\n */\n r: function () {\n return 'D, d M Y H:i:s O'.replace(backslash, doFormat);\n },\n /**\n * Seconds since UNIX epoch\n * @return {number}\n */\n U: function () {\n return vDate.getTime() / 1000 || 0;\n }\n };\n return doFormat(vChar, vChar);\n },\n formatDate: function (vDate, vFormat) {\n var self = this, i, n, len, str, vChar, vDateStr = '', BACKSLASH = '\\\\';\n if (typeof vDate === 'string') {\n vDate = self.parseDate(vDate, vFormat);\n if (!vDate) {\n return null;\n }\n }\n if (vDate instanceof Date) {\n len = vFormat.length;\n for (i = 0; i < len; i++) {\n vChar = vFormat.charAt(i);\n if (vChar === 'S' || vChar === BACKSLASH) {\n continue;\n }\n if (i > 0 && vFormat.charAt(i - 1) === BACKSLASH) {\n vDateStr += vChar;\n continue;\n }\n str = self.parseFormat(vChar, vDate);\n if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {\n n = parseInt(str) || 0;\n str += self.dateSettings.ordinal(n);\n }\n vDateStr += str;\n }\n return vDateStr;\n }\n return '';\n }\n };\n})();","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\nvar laravelValidation;\nlaravelValidation = {\n\n implicitRules: ['Required','Confirmed'],\n\n /**\n * Initialize laravel validations.\n */\n init: function () {\n\n // Disable class rules and attribute rules\n $.validator.classRuleSettings = {};\n $.validator.attributeRules = function () {\n this.rules = {}\n };\n\n $.validator.dataRules = this.arrayRules;\n $.validator.prototype.arrayRulesCache = {};\n\n // Register validations methods\n this.setupValidations();\n },\n\n arrayRules: function(element) {\n\n var rules = {},\n validator = $.data( element.form, \"validator\"),\n cache = validator.arrayRulesCache;\n\n // Is not an Array\n if (element.name.indexOf('[') === -1) {\n return rules;\n }\n\n if (! (element.name in cache)) {\n cache[element.name] = {};\n }\n\n $.each(validator.settings.rules, function(name, tmpRules) {\n if (name in cache[element.name]) {\n rules = laravelValidation.helpers.mergeRules(rules, cache[element.name][name]);\n } else {\n cache[element.name][name] = {};\n\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(name);\n if (element.name.match(nameRegExp)) {\n var newRules = $.validator.normalizeRule(tmpRules) || {};\n cache[element.name][name] = newRules;\n\n rules = laravelValidation.helpers.mergeRules(rules, newRules);\n }\n }\n });\n\n return rules;\n },\n\n setupValidations: function () {\n\n /**\n * Validate a set of local JS based rules against an element.\n *\n * @param validator\n * @param values\n * @param element\n * @param rules\n * @returns {boolean}\n */\n var validateLocalRules = function (validator, values, element, rules) {\n var validated = true,\n previous = validator.previousValue(element);\n\n $.each(rules, function (i, param) {\n var implicit = param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1;\n var rule = param[0];\n var message = param[2];\n\n if (! implicit && validator.optional(element)) {\n validated = \"dependency-mismatch\";\n return false;\n }\n\n if (laravelValidation.methods[rule] !== undefined) {\n $.each(values, function(index, value) {\n validated = laravelValidation.methods[rule].call(validator, value, element, param[1], function(valid) {\n validator.settings.messages[element.name].laravelValidationRemote = previous.originalMessage;\n if (valid) {\n var submitted = validator.formSubmitted;\n validator.prepareElement(element);\n validator.formSubmitted = submitted;\n validator.successList.push(element);\n delete validator.invalid[element.name];\n validator.showErrors();\n } else {\n var errors = {};\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message;\n validator.invalid[element.name] = true;\n validator.showErrors(errors);\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n });\n\n // Break loop.\n if (validated === false) {\n return false;\n }\n });\n } else {\n validated = false;\n }\n\n if (validated !== true) {\n if (!validator.settings.messages[element.name] ) {\n validator.settings.messages[element.name] = {};\n }\n\n validator.settings.messages[element.name].laravelValidation= message;\n\n return false;\n }\n\n });\n\n return validated;\n };\n\n /**\n * Create JQueryValidation check to validate Laravel rules.\n */\n\n $.validator.addMethod(\"laravelValidation\", function (value, element, params) {\n var rules = [],\n arrayRules = [];\n $.each(params, function (i, param) {\n // put Implicit rules in front\n var isArrayRule = param[4].indexOf('[') !== -1;\n if (param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1) {\n isArrayRule ? arrayRules.unshift(param) : rules.unshift(param);\n } else {\n isArrayRule ? arrayRules.push(param) : rules.push(param);\n }\n });\n\n // Validate normal rules.\n var localRulesResult = validateLocalRules(this, [value], element, rules);\n\n // Validate items of the array using array rules.\n var arrayValue = ! Array.isArray(value) ? [value] : value;\n var arrayRulesResult = validateLocalRules(this, arrayValue, element, arrayRules);\n\n return localRulesResult && arrayRulesResult;\n }, '');\n\n\n /**\n * Create JQueryValidation check to validate Remote Laravel rules.\n */\n $.validator.addMethod(\"laravelValidationRemote\", function (value, element, params) {\n\n var implicit = false,\n check = params[0][1],\n attribute = element.name,\n token = check[1],\n validateAll = check[2];\n\n $.each(params, function (i, parameters) {\n implicit = implicit || parameters[3];\n });\n\n\n if ( !implicit && this.optional( element ) ) {\n return \"dependency-mismatch\";\n }\n\n var previous = this.previousValue( element ),\n validator, data;\n\n if (!this.settings.messages[ element.name ] ) {\n this.settings.messages[ element.name ] = {};\n }\n previous.originalMessage = this.settings.messages[ element.name ].laravelValidationRemote;\n this.settings.messages[ element.name ].laravelValidationRemote = previous.message;\n\n var param = typeof param === \"string\" && { url: param } || param;\n\n if (laravelValidation.helpers.arrayEquals(previous.old, value) || previous.old === value) {\n return previous.valid;\n }\n\n previous.old = value;\n validator = this;\n this.startRequest( element );\n\n data = $(validator.currentForm).serializeArray();\n\n data.push({\n 'name': '_jsvalidation',\n 'value': attribute\n });\n\n data.push({\n 'name': '_jsvalidation_validate_all',\n 'value': validateAll\n });\n\n var formMethod = $(validator.currentForm).attr('method');\n if($(validator.currentForm).find('input[name=\"_method\"]').length) {\n formMethod = $(validator.currentForm).find('input[name=\"_method\"]').val();\n }\n\n $.ajax( $.extend( true, {\n mode: \"abort\",\n port: \"validate\" + element.name,\n dataType: \"json\",\n data: data,\n context: validator.currentForm,\n url: $(validator.currentForm).attr('action'),\n type: formMethod,\n\n beforeSend: function (xhr) {\n if ($(validator.currentForm).attr('method').toLowerCase() !== 'get' && token) {\n return xhr.setRequestHeader('X-XSRF-TOKEN', token);\n }\n }\n }, param )\n ).always(function( response, textStatus ) {\n var errors, message, submitted, valid;\n\n if (textStatus === 'error') {\n valid = false;\n response = laravelValidation.helpers.parseErrorResponse(response);\n } else if (textStatus === 'success') {\n valid = response === true || response === \"true\";\n } else {\n return;\n }\n\n validator.settings.messages[ element.name ].laravelValidationRemote = previous.originalMessage;\n\n if ( valid ) {\n submitted = validator.formSubmitted;\n validator.prepareElement( element );\n validator.formSubmitted = submitted;\n validator.successList.push( element );\n delete validator.invalid[ element.name ];\n validator.showErrors();\n } else {\n errors = {};\n message = response || validator.defaultMessage( element, \"remote\" );\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message[0];\n validator.invalid[ element.name ] = true;\n validator.showErrors( errors );\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n validator.stopRequest( element, valid );\n }\n );\n return \"pending\";\n }, '');\n }\n};\n\n$(function() {\n laravelValidation.init();\n});\n","/*!\r\n * jQuery Validation Plugin v1.19.2\r\n *\r\n * https://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2020 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\r\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\r\n}));","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./resources/assets/js/helpers.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/locutus/php/array/array_diff.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/locutus/php/array/array_diff.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function array_diff(arr1) {\n // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/array_diff/\n // original by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Sanjoy Roy\n // revised by: Brett Zamir (http://brett-zamir.me)\n // example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld'])\n // returns 1: {0:'Kevin'}\n\n var retArr = {};\n var argl = arguments.length;\n var k1 = '';\n var i = 1;\n var k = '';\n var arr = {};\n\n arr1keys: for (k1 in arr1) {\n // eslint-disable-line no-labels\n for (i = 1; i < argl; i++) {\n arr = arguments[i];\n for (k in arr) {\n if (arr[k] === arr1[k1]) {\n // If it reaches here, it was found in at least one array, so try next value\n continue arr1keys; // eslint-disable-line no-labels\n }\n }\n retArr[k1] = arr1[k1];\n }\n }\n\n return retArr;\n};\n//# sourceMappingURL=array_diff.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/datetime/strtotime.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/locutus/php/datetime/strtotime.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar reSpace = '[ \\\\t]+';\nvar reSpaceOpt = '[ \\\\t]*';\nvar reMeridian = '(?:([ap])\\\\.?m\\\\.?([\\\\t ]|$))';\nvar reHour24 = '(2[0-4]|[01]?[0-9])';\nvar reHour24lz = '([01][0-9]|2[0-4])';\nvar reHour12 = '(0?[1-9]|1[0-2])';\nvar reMinute = '([0-5]?[0-9])';\nvar reMinutelz = '([0-5][0-9])';\nvar reSecond = '(60|[0-5]?[0-9])';\nvar reSecondlz = '(60|[0-5][0-9])';\nvar reFrac = '(?:\\\\.([0-9]+))';\n\nvar reDayfull = 'sunday|monday|tuesday|wednesday|thursday|friday|saturday';\nvar reDayabbr = 'sun|mon|tue|wed|thu|fri|sat';\nvar reDaytext = reDayfull + '|' + reDayabbr + '|weekdays?';\n\nvar reReltextnumber = 'first|second|third|fourth|fifth|sixth|seventh|eighth?|ninth|tenth|eleventh|twelfth';\nvar reReltexttext = 'next|last|previous|this';\nvar reReltextunit = '(?:second|sec|minute|min|hour|day|fortnight|forthnight|month|year)s?|weeks|' + reDaytext;\n\nvar reYear = '([0-9]{1,4})';\nvar reYear2 = '([0-9]{2})';\nvar reYear4 = '([0-9]{4})';\nvar reYear4withSign = '([+-]?[0-9]{4})';\nvar reMonth = '(1[0-2]|0?[0-9])';\nvar reMonthlz = '(0[0-9]|1[0-2])';\nvar reDay = '(?:(3[01]|[0-2]?[0-9])(?:st|nd|rd|th)?)';\nvar reDaylz = '(0[0-9]|[1-2][0-9]|3[01])';\n\nvar reMonthFull = 'january|february|march|april|may|june|july|august|september|october|november|december';\nvar reMonthAbbr = 'jan|feb|mar|apr|may|jun|jul|aug|sept?|oct|nov|dec';\nvar reMonthroman = 'i[vx]|vi{0,3}|xi{0,2}|i{1,3}';\nvar reMonthText = '(' + reMonthFull + '|' + reMonthAbbr + '|' + reMonthroman + ')';\n\nvar reTzCorrection = '((?:GMT)?([+-])' + reHour24 + ':?' + reMinute + '?)';\nvar reDayOfYear = '(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])';\nvar reWeekOfYear = '(0[1-9]|[1-4][0-9]|5[0-3])';\n\nfunction processMeridian(hour, meridian) {\n meridian = meridian && meridian.toLowerCase();\n\n switch (meridian) {\n case 'a':\n hour += hour === 12 ? -12 : 0;\n break;\n case 'p':\n hour += hour !== 12 ? 12 : 0;\n break;\n }\n\n return hour;\n}\n\nfunction processYear(yearStr) {\n var year = +yearStr;\n\n if (yearStr.length < 4 && year < 100) {\n year += year < 70 ? 2000 : 1900;\n }\n\n return year;\n}\n\nfunction lookupMonth(monthStr) {\n return {\n jan: 0,\n january: 0,\n i: 0,\n feb: 1,\n february: 1,\n ii: 1,\n mar: 2,\n march: 2,\n iii: 2,\n apr: 3,\n april: 3,\n iv: 3,\n may: 4,\n v: 4,\n jun: 5,\n june: 5,\n vi: 5,\n jul: 6,\n july: 6,\n vii: 6,\n aug: 7,\n august: 7,\n viii: 7,\n sep: 8,\n sept: 8,\n september: 8,\n ix: 8,\n oct: 9,\n october: 9,\n x: 9,\n nov: 10,\n november: 10,\n xi: 10,\n dec: 11,\n december: 11,\n xii: 11\n }[monthStr.toLowerCase()];\n}\n\nfunction lookupWeekday(dayStr) {\n var desiredSundayNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var dayNumbers = {\n mon: 1,\n monday: 1,\n tue: 2,\n tuesday: 2,\n wed: 3,\n wednesday: 3,\n thu: 4,\n thursday: 4,\n fri: 5,\n friday: 5,\n sat: 6,\n saturday: 6,\n sun: 0,\n sunday: 0\n };\n\n return dayNumbers[dayStr.toLowerCase()] || desiredSundayNumber;\n}\n\nfunction lookupRelative(relText) {\n var relativeNumbers = {\n last: -1,\n previous: -1,\n this: 0,\n first: 1,\n next: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eight: 8,\n eighth: 8,\n ninth: 9,\n tenth: 10,\n eleventh: 11,\n twelfth: 12\n };\n\n var relativeBehavior = {\n this: 1\n };\n\n var relTextLower = relText.toLowerCase();\n\n return {\n amount: relativeNumbers[relTextLower],\n behavior: relativeBehavior[relTextLower] || 0\n };\n}\n\nfunction processTzCorrection(tzOffset, oldValue) {\n var reTzCorrectionLoose = /(?:GMT)?([+-])(\\d+)(:?)(\\d{0,2})/i;\n tzOffset = tzOffset && tzOffset.match(reTzCorrectionLoose);\n\n if (!tzOffset) {\n return oldValue;\n }\n\n var sign = tzOffset[1] === '-' ? 1 : -1;\n var hours = +tzOffset[2];\n var minutes = +tzOffset[4];\n\n if (!tzOffset[4] && !tzOffset[3]) {\n minutes = Math.floor(hours % 100);\n hours = Math.floor(hours / 100);\n }\n\n return sign * (hours * 60 + minutes);\n}\n\nvar formats = {\n yesterday: {\n regex: /^yesterday/i,\n name: 'yesterday',\n callback: function callback() {\n this.rd -= 1;\n return this.resetTime();\n }\n },\n\n now: {\n regex: /^now/i,\n name: 'now'\n // do nothing\n },\n\n noon: {\n regex: /^noon/i,\n name: 'noon',\n callback: function callback() {\n return this.resetTime() && this.time(12, 0, 0, 0);\n }\n },\n\n midnightOrToday: {\n regex: /^(midnight|today)/i,\n name: 'midnight | today',\n callback: function callback() {\n return this.resetTime();\n }\n },\n\n tomorrow: {\n regex: /^tomorrow/i,\n name: 'tomorrow',\n callback: function callback() {\n this.rd += 1;\n return this.resetTime();\n }\n },\n\n timestamp: {\n regex: /^@(-?\\d+)/i,\n name: 'timestamp',\n callback: function callback(match, timestamp) {\n this.rs += +timestamp;\n this.y = 1970;\n this.m = 0;\n this.d = 1;\n this.dates = 0;\n\n return this.resetTime() && this.zone(0);\n }\n },\n\n firstOrLastDay: {\n regex: /^(first|last) day of/i,\n name: 'firstdayof | lastdayof',\n callback: function callback(match, day) {\n if (day.toLowerCase() === 'first') {\n this.firstOrLastDayOfMonth = 1;\n } else {\n this.firstOrLastDayOfMonth = -1;\n }\n }\n },\n\n backOrFrontOf: {\n regex: RegExp('^(back|front) of ' + reHour24 + reSpaceOpt + reMeridian + '?', 'i'),\n name: 'backof | frontof',\n callback: function callback(match, side, hours, meridian) {\n var back = side.toLowerCase() === 'back';\n var hour = +hours;\n var minute = 15;\n\n if (!back) {\n hour -= 1;\n minute = 45;\n }\n\n hour = processMeridian(hour, meridian);\n\n return this.resetTime() && this.time(hour, minute, 0, 0);\n }\n },\n\n weekdayOf: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reDayfull + '|' + reDayabbr + ')' + reSpace + 'of', 'i'),\n name: 'weekdayof'\n // todo\n },\n\n mssqltime: {\n regex: RegExp('^' + reHour12 + ':' + reMinutelz + ':' + reSecondlz + '[:.]([0-9]+)' + reMeridian, 'i'),\n name: 'mssqltime',\n callback: function callback(match, hour, minute, second, frac, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, +frac.substr(0, 3));\n }\n },\n\n timeLong12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),\n name: 'timelong12',\n callback: function callback(match, hour, minute, second, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, 0);\n }\n },\n\n timeShort12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'),\n name: 'timeshort12',\n callback: function callback(match, hour, minute, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, 0, 0);\n }\n },\n\n timeTiny12: {\n regex: RegExp('^' + reHour12 + reSpaceOpt + reMeridian, 'i'),\n name: 'timetiny12',\n callback: function callback(match, hour, meridian) {\n return this.time(processMeridian(+hour, meridian), 0, 0, 0);\n }\n },\n\n soap: {\n regex: RegExp('^' + reYear4 + '-' + reMonthlz + '-' + reDaylz + 'T' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reFrac + reTzCorrection + '?', 'i'),\n name: 'soap',\n callback: function callback(match, year, month, day, hour, minute, second, frac, tzCorrection) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, +frac.substr(0, 3)) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n wddx: {\n regex: RegExp('^' + reYear4 + '-' + reMonth + '-' + reDay + 'T' + reHour24 + ':' + reMinute + ':' + reSecond),\n name: 'wddx',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n exif: {\n regex: RegExp('^' + reYear4 + ':' + reMonthlz + ':' + reDaylz + ' ' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz, 'i'),\n name: 'exif',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpc: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + 'T' + reHour24 + ':' + reMinutelz + ':' + reSecondlz),\n name: 'xmlrpc',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpcNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + '[Tt]' + reHour24 + reMinutelz + reSecondlz),\n name: 'xmlrpcnocolon',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n clf: {\n regex: RegExp('^' + reDay + '/(' + reMonthAbbr + ')/' + reYear4 + ':' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reSpace + reTzCorrection, 'i'),\n name: 'clf',\n callback: function callback(match, day, month, year, hour, minute, second, tzCorrection) {\n return this.ymd(+year, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n iso8601long: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond + reFrac, 'i'),\n name: 'iso8601long',\n callback: function callback(match, hour, minute, second, frac) {\n return this.time(+hour, +minute, +second, +frac.substr(0, 3));\n }\n },\n\n dateTextual: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]+' + reYear, 'i'),\n name: 'datetextual',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n pointedDate4: {\n regex: RegExp('^' + reDay + '[.\\\\t-]' + reMonth + '[.-]' + reYear4),\n name: 'pointeddate4',\n callback: function callback(match, day, month, year) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pointedDate2: {\n regex: RegExp('^' + reDay + '[.\\\\t]' + reMonth + '\\\\.' + reYear2),\n name: 'pointeddate2',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n timeLong24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond),\n name: 'timelong24',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n dateNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz),\n name: 'datenocolon',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pgydotd: {\n regex: RegExp('^' + reYear4 + '\\\\.?' + reDayOfYear),\n name: 'pgydotd',\n callback: function callback(match, year, day) {\n return this.ymd(+year, 0, +day);\n }\n },\n\n timeShort24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute, 'i'),\n name: 'timeshort24',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, 0);\n }\n },\n\n iso8601noColon: {\n regex: RegExp('^t?' + reHour24lz + reMinutelz + reSecondlz, 'i'),\n name: 'iso8601nocolon',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n iso8601dateSlash: {\n // eventhough the trailing slash is optional in PHP\n // here it's mandatory and inputs without the slash\n // are handled by dateslash\n regex: RegExp('^' + reYear4 + '/' + reMonthlz + '/' + reDaylz + '/'),\n name: 'iso8601dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n dateSlash: {\n regex: RegExp('^' + reYear4 + '/' + reMonth + '/' + reDay),\n name: 'dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n american: {\n regex: RegExp('^' + reMonth + '/' + reDay + '/' + reYear),\n name: 'american',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n americanShort: {\n regex: RegExp('^' + reMonth + '/' + reDay),\n name: 'americanshort',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, month - 1, +day);\n }\n },\n\n gnuDateShortOrIso8601date2: {\n // iso8601date2 is complete subset of gnudateshort\n regex: RegExp('^' + reYear + '-' + reMonth + '-' + reDay),\n name: 'gnudateshort | iso8601date2',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n iso8601date4: {\n regex: RegExp('^' + reYear4withSign + '-' + reMonthlz + '-' + reDaylz),\n name: 'iso8601date4',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n gnuNoColon: {\n regex: RegExp('^t' + reHour24lz + reMinutelz, 'i'),\n name: 'gnunocolon',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, this.f);\n }\n },\n\n gnuDateShorter: {\n regex: RegExp('^' + reYear4 + '-' + reMonth),\n name: 'gnudateshorter',\n callback: function callback(match, year, month) {\n return this.ymd(+year, month - 1, 1);\n }\n },\n\n pgTextReverse: {\n // note: allowed years are from 32-9999\n // years below 32 should be treated as days in datefull\n regex: RegExp('^' + '(\\\\d{3,4}|[4-9]\\\\d|3[2-9])-(' + reMonthAbbr + ')-' + reDaylz, 'i'),\n name: 'pgtextreverse',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateFull: {\n regex: RegExp('^' + reDay + '[ \\\\t.-]*' + reMonthText + '[ \\\\t.-]*' + reYear, 'i'),\n name: 'datefull',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoDay: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reYear4, 'i'),\n name: 'datenoday',\n callback: function callback(match, month, year) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n dateNoDayRev: {\n regex: RegExp('^' + reYear4 + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenodayrev',\n callback: function callback(match, year, month) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n pgTextShort: {\n regex: RegExp('^(' + reMonthAbbr + ')-' + reDaylz + '-' + reYear, 'i'),\n name: 'pgtextshort',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoYear: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]*', 'i'),\n name: 'datenoyear',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n dateNoYearRev: {\n regex: RegExp('^' + reDay + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenoyearrev',\n callback: function callback(match, day, month) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n isoWeekDay: {\n regex: RegExp('^' + reYear4 + '-?W' + reWeekOfYear + '(?:-?([0-7]))?'),\n name: 'isoweekday | isoweek',\n callback: function callback(match, year, week, day) {\n day = day ? +day : 1;\n\n if (!this.ymd(+year, 0, 1)) {\n return false;\n }\n\n // get day of week for Jan 1st\n var dayOfWeek = new Date(this.y, this.m, this.d).getDay();\n\n // and use the day to figure out the offset for day 1 of week 1\n dayOfWeek = 0 - (dayOfWeek > 4 ? dayOfWeek - 7 : dayOfWeek);\n\n this.rd += dayOfWeek + (week - 1) * 7 + day;\n }\n },\n\n relativeText: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reReltextunit + ')', 'i'),\n name: 'relativetext',\n callback: function callback(match, relValue, relUnit) {\n // todo: implement handling of 'this time-unit'\n // eslint-disable-next-line no-unused-vars\n var _lookupRelative = lookupRelative(relValue),\n amount = _lookupRelative.amount,\n behavior = _lookupRelative.behavior;\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n relative: {\n regex: RegExp('^([+-]*)[ \\\\t]*(\\\\d+)' + reSpaceOpt + '(' + reReltextunit + '|week)', 'i'),\n name: 'relative',\n callback: function callback(match, signs, relValue, relUnit) {\n var minuses = signs.replace(/[^-]/g, '').length;\n\n var amount = +relValue * Math.pow(-1, minuses);\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n dayText: {\n regex: RegExp('^(' + reDaytext + ')', 'i'),\n name: 'daytext',\n callback: function callback(match, dayText) {\n this.resetTime();\n this.weekday = lookupWeekday(dayText, 0);\n\n if (this.weekdayBehavior !== 2) {\n this.weekdayBehavior = 1;\n }\n }\n },\n\n relativeTextWeek: {\n regex: RegExp('^(' + reReltexttext + ')' + reSpace + 'week', 'i'),\n name: 'relativetextweek',\n callback: function callback(match, relText) {\n this.weekdayBehavior = 2;\n\n switch (relText.toLowerCase()) {\n case 'this':\n this.rd += 0;\n break;\n case 'next':\n this.rd += 7;\n break;\n case 'last':\n case 'previous':\n this.rd -= 7;\n break;\n }\n\n if (isNaN(this.weekday)) {\n this.weekday = 1;\n }\n }\n },\n\n monthFullOrMonthAbbr: {\n regex: RegExp('^(' + reMonthFull + '|' + reMonthAbbr + ')', 'i'),\n name: 'monthfull | monthabbr',\n callback: function callback(match, month) {\n return this.ymd(this.y, lookupMonth(month), this.d);\n }\n },\n\n tzCorrection: {\n regex: RegExp('^' + reTzCorrection, 'i'),\n name: 'tzcorrection',\n callback: function callback(tzCorrection) {\n return this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n ago: {\n regex: /^ago/i,\n name: 'ago',\n callback: function callback() {\n this.ry = -this.ry;\n this.rm = -this.rm;\n this.rd = -this.rd;\n this.rh = -this.rh;\n this.ri = -this.ri;\n this.rs = -this.rs;\n this.rf = -this.rf;\n }\n },\n\n gnuNoColon2: {\n // second instance of gnunocolon, without leading 't'\n // it's down here, because it is very generic (4 digits in a row)\n // thus conflicts with many rules above\n // only year4 should come afterwards\n regex: RegExp('^' + reHour24lz + reMinutelz, 'i'),\n name: 'gnunocolon',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, this.f);\n }\n },\n\n year4: {\n regex: RegExp('^' + reYear4),\n name: 'year4',\n callback: function callback(match, year) {\n this.y = +year;\n return true;\n }\n },\n\n whitespace: {\n regex: /^[ .,\\t]+/,\n name: 'whitespace'\n // do nothing\n },\n\n any: {\n regex: /^[\\s\\S]+/,\n name: 'any',\n callback: function callback() {\n return false;\n }\n }\n};\n\nvar resultProto = {\n // date\n y: NaN,\n m: NaN,\n d: NaN,\n // time\n h: NaN,\n i: NaN,\n s: NaN,\n f: NaN,\n\n // relative shifts\n ry: 0,\n rm: 0,\n rd: 0,\n rh: 0,\n ri: 0,\n rs: 0,\n rf: 0,\n\n // weekday related shifts\n weekday: NaN,\n weekdayBehavior: 0,\n\n // first or last day of month\n // 0 none, 1 first, -1 last\n firstOrLastDayOfMonth: 0,\n\n // timezone correction in minutes\n z: NaN,\n\n // counters\n dates: 0,\n times: 0,\n zones: 0,\n\n // helper functions\n ymd: function ymd(y, m, d) {\n if (this.dates > 0) {\n return false;\n }\n\n this.dates++;\n this.y = y;\n this.m = m;\n this.d = d;\n return true;\n },\n time: function time(h, i, s, f) {\n if (this.times > 0) {\n return false;\n }\n\n this.times++;\n this.h = h;\n this.i = i;\n this.s = s;\n this.f = f;\n\n return true;\n },\n resetTime: function resetTime() {\n this.h = 0;\n this.i = 0;\n this.s = 0;\n this.f = 0;\n this.times = 0;\n\n return true;\n },\n zone: function zone(minutes) {\n if (this.zones <= 1) {\n this.zones++;\n this.z = minutes;\n return true;\n }\n\n return false;\n },\n toDate: function toDate(relativeTo) {\n if (this.dates && !this.times) {\n this.h = this.i = this.s = this.f = 0;\n }\n\n // fill holes\n if (isNaN(this.y)) {\n this.y = relativeTo.getFullYear();\n }\n\n if (isNaN(this.m)) {\n this.m = relativeTo.getMonth();\n }\n\n if (isNaN(this.d)) {\n this.d = relativeTo.getDate();\n }\n\n if (isNaN(this.h)) {\n this.h = relativeTo.getHours();\n }\n\n if (isNaN(this.i)) {\n this.i = relativeTo.getMinutes();\n }\n\n if (isNaN(this.s)) {\n this.s = relativeTo.getSeconds();\n }\n\n if (isNaN(this.f)) {\n this.f = relativeTo.getMilliseconds();\n }\n\n // adjust special early\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n this.d = 1;\n break;\n case -1:\n this.d = 0;\n this.m += 1;\n break;\n }\n\n if (!isNaN(this.weekday)) {\n var date = new Date(relativeTo.getTime());\n date.setFullYear(this.y, this.m, this.d);\n date.setHours(this.h, this.i, this.s, this.f);\n\n var dow = date.getDay();\n\n if (this.weekdayBehavior === 2) {\n // To make \"this week\" work, where the current day of week is a \"sunday\"\n if (dow === 0 && this.weekday !== 0) {\n this.weekday = -6;\n }\n\n // To make \"sunday this week\" work, where the current day of week is not a \"sunday\"\n if (this.weekday === 0 && dow !== 0) {\n this.weekday = 7;\n }\n\n this.d -= dow;\n this.d += this.weekday;\n } else {\n var diff = this.weekday - dow;\n\n // some PHP magic\n if (this.rd < 0 && diff < 0 || this.rd >= 0 && diff <= -this.weekdayBehavior) {\n diff += 7;\n }\n\n if (this.weekday >= 0) {\n this.d += diff;\n } else {\n this.d -= 7 - (Math.abs(this.weekday) - dow);\n }\n\n this.weekday = NaN;\n }\n }\n\n // adjust relative\n this.y += this.ry;\n this.m += this.rm;\n this.d += this.rd;\n\n this.h += this.rh;\n this.i += this.ri;\n this.s += this.rs;\n this.f += this.rf;\n\n this.ry = this.rm = this.rd = 0;\n this.rh = this.ri = this.rs = this.rf = 0;\n\n var result = new Date(relativeTo.getTime());\n // since Date constructor treats years <= 99 as 1900+\n // it can't be used, thus this weird way\n result.setFullYear(this.y, this.m, this.d);\n result.setHours(this.h, this.i, this.s, this.f);\n\n // note: this is done twice in PHP\n // early when processing special relatives\n // and late\n // todo: check if the logic can be reduced\n // to just one time action\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n result.setDate(1);\n break;\n case -1:\n result.setMonth(result.getMonth() + 1, 0);\n break;\n }\n\n // adjust timezone\n if (!isNaN(this.z) && result.getTimezoneOffset() !== this.z) {\n result.setUTCFullYear(result.getFullYear(), result.getMonth(), result.getDate());\n\n result.setUTCHours(result.getHours(), result.getMinutes() + this.z, result.getSeconds(), result.getMilliseconds());\n }\n\n return result;\n }\n};\n\nmodule.exports = function strtotime(str, now) {\n // discuss at: http://locutus.io/php/strtotime/\n // original by: Caio Ariede (http://caioariede.com)\n // improved by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Caio Ariede (http://caioariede.com)\n // improved by: A. Matías Quezada (http://amatiasq.com)\n // improved by: preuter\n // improved by: Brett Zamir (http://brett-zamir.me)\n // improved by: Mirko Faber\n // input by: David\n // bugfixed by: Wagner B. Soares\n // bugfixed by: Artur Tchernychev\n // bugfixed by: Stephan Bösch-Plepelits (http://github.com/plepe)\n // reimplemented by: Rafał Kukawski\n // note 1: Examples all have a fixed timestamp to prevent\n // note 1: tests to fail because of variable time(zones)\n // example 1: strtotime('+1 day', 1129633200)\n // returns 1: 1129719600\n // example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200)\n // returns 2: 1130425202\n // example 3: strtotime('last month', 1129633200)\n // returns 3: 1127041200\n // example 4: strtotime('2009-05-04 08:30:00+00')\n // returns 4: 1241425800\n // example 5: strtotime('2009-05-04 08:30:00+02:00')\n // returns 5: 1241418600\n if (now == null) {\n now = Math.floor(Date.now() / 1000);\n }\n\n // the rule order is very fragile\n // as many formats are similar to others\n // so small change can cause\n // input misinterpretation\n var rules = [formats.yesterday, formats.now, formats.noon, formats.midnightOrToday, formats.tomorrow, formats.timestamp, formats.firstOrLastDay, formats.backOrFrontOf,\n // formats.weekdayOf, // not yet implemented\n formats.mssqltime, formats.timeLong12, formats.timeShort12, formats.timeTiny12, formats.soap, formats.wddx, formats.exif, formats.xmlRpc, formats.xmlRpcNoColon, formats.clf, formats.iso8601long, formats.dateTextual, formats.pointedDate4, formats.pointedDate2, formats.timeLong24, formats.dateNoColon, formats.pgydotd, formats.timeShort24, formats.iso8601noColon,\n // iso8601dateSlash needs to come before dateSlash\n formats.iso8601dateSlash, formats.dateSlash, formats.american, formats.americanShort, formats.gnuDateShortOrIso8601date2, formats.iso8601date4, formats.gnuNoColon, formats.gnuDateShorter, formats.pgTextReverse, formats.dateFull, formats.dateNoDay, formats.dateNoDayRev, formats.pgTextShort, formats.dateNoYear, formats.dateNoYearRev, formats.isoWeekDay, formats.relativeText, formats.relative, formats.dayText, formats.relativeTextWeek, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.ago, formats.gnuNoColon2, formats.year4,\n // note: the two rules below\n // should always come last\n formats.whitespace, formats.any];\n\n var result = Object.create(resultProto);\n\n while (str.length) {\n for (var i = 0, l = rules.length; i < l; i++) {\n var format = rules[i];\n\n var match = str.match(format.regex);\n\n if (match) {\n // care only about false results. Ignore other values\n if (format.callback && format.callback.apply(result, match) === false) {\n return false;\n }\n\n str = str.substr(match[0].length);\n break;\n }\n }\n }\n\n return Math.floor(result.toDate(new Date(now * 1000)) / 1000);\n};\n//# sourceMappingURL=strtotime.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/info/ini_get.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/locutus/php/info/ini_get.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nmodule.exports = function ini_get(varname) {\n // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/ini_get/\n // original by: Brett Zamir (http://brett-zamir.me)\n // note 1: The ini values must be set by ini_set or manually within an ini file\n // example 1: ini_set('date.timezone', 'Asia/Hong_Kong')\n // example 1: ini_get('date.timezone')\n // returns 1: 'Asia/Hong_Kong'\n\n var $global = typeof window !== 'undefined' ? window : global;\n $global.$locutus = $global.$locutus || {};\n var $locutus = $global.$locutus;\n $locutus.php = $locutus.php || {};\n $locutus.php.ini = $locutus.php.ini || {};\n\n if ($locutus.php.ini[varname] && $locutus.php.ini[varname].local_value !== undefined) {\n if ($locutus.php.ini[varname].local_value === null) {\n return '';\n }\n return $locutus.php.ini[varname].local_value;\n }\n\n return '';\n};\n//# sourceMappingURL=ini_get.js.map\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/strings/strlen.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/strings/strlen.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function strlen(string) {\n // discuss at: http://locutus.io/php/strlen/\n // original by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Sakimori\n // improved by: Kevin van Zonneveld (http://kvz.io)\n // input by: Kirk Strobeck\n // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)\n // revised by: Brett Zamir (http://brett-zamir.me)\n // note 1: May look like overkill, but in order to be truly faithful to handling all Unicode\n // note 1: characters and to this function in PHP which does not count the number of bytes\n // note 1: but counts the number of characters, something like this is really necessary.\n // example 1: strlen('Kevin van Zonneveld')\n // returns 1: 19\n // example 2: ini_set('unicode.semantics', 'on')\n // example 2: strlen('A\\ud87e\\udc04Z')\n // returns 2: 3\n\n var str = string + '';\n\n var iniVal = ( true ? __webpack_require__(/*! ../info/ini_get */ \"./node_modules/locutus/php/info/ini_get.js\")('unicode.semantics') : undefined) || 'off';\n if (iniVal === 'off') {\n return str.length;\n }\n\n var i = 0;\n var lgth = 0;\n\n var getWholeChar = function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n var next = '';\n var prev = '';\n if (code >= 0xD800 && code <= 0xDBFF) {\n // High surrogate (could change last hex to 0xDB7F to\n // treat high private surrogates as single characters)\n if (str.length <= i + 1) {\n throw new Error('High surrogate without following low surrogate');\n }\n next = str.charCodeAt(i + 1);\n if (next < 0xDC00 || next > 0xDFFF) {\n throw new Error('High surrogate without following low surrogate');\n }\n return str.charAt(i) + str.charAt(i + 1);\n } else if (code >= 0xDC00 && code <= 0xDFFF) {\n // Low surrogate\n if (i === 0) {\n throw new Error('Low surrogate without preceding high surrogate');\n }\n prev = str.charCodeAt(i - 1);\n if (prev < 0xD800 || prev > 0xDBFF) {\n // (could change last hex to 0xDB7F to treat high private surrogates\n // as single characters)\n throw new Error('Low surrogate without preceding high surrogate');\n }\n // We can pass over low surrogates now as the second\n // component in a pair which we have already processed\n return false;\n }\n return str.charAt(i);\n };\n\n for (i = 0, lgth = 0; i < str.length; i++) {\n if (getWholeChar(str, i) === false) {\n continue;\n }\n // Adapt this line at the top of any loop, passing in the whole string and\n // the current iteration and returning a variable to represent the individual character;\n // purpose is to treat the first part of a surrogate pair as the whole character and then\n // ignore the second part\n lgth++;\n }\n\n return lgth;\n};\n//# sourceMappingURL=strlen.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/var/is_numeric.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/var/is_numeric.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function is_numeric(mixedVar) {\n // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/is_numeric/\n // original by: Kevin van Zonneveld (http://kvz.io)\n // improved by: David\n // improved by: taith\n // bugfixed by: Tim de Koning\n // bugfixed by: WebDevHobo (http://webdevhobo.blogspot.com/)\n // bugfixed by: Brett Zamir (http://brett-zamir.me)\n // bugfixed by: Denis Chenu (http://shnoulle.net)\n // example 1: is_numeric(186.31)\n // returns 1: true\n // example 2: is_numeric('Kevin van Zonneveld')\n // returns 2: false\n // example 3: is_numeric(' +186.31e2')\n // returns 3: true\n // example 4: is_numeric('')\n // returns 4: false\n // example 5: is_numeric([])\n // returns 5: false\n // example 6: is_numeric('1 ')\n // returns 6: false\n\n var whitespace = [' ', '\\n', '\\r', '\\t', '\\f', '\\x0b', '\\xa0', '\\u2000', '\\u2001', '\\u2002', '\\u2003', '\\u2004', '\\u2005', '\\u2006', '\\u2007', '\\u2008', '\\u2009', '\\u200A', '\\u200B', '\\u2028', '\\u2029', '\\u3000'].join('');\n\n // @todo: Break this up using many single conditions with early returns\n return (typeof mixedVar === 'number' || typeof mixedVar === 'string' && whitespace.indexOf(mixedVar.slice(-1)) === -1) && mixedVar !== '' && !isNaN(mixedVar);\n};\n//# sourceMappingURL=is_numeric.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"./resources/assets/js/helpers.js\":\n/*!****************************************!*\\\n !*** ./resources/assets/js/helpers.js ***!\n \\****************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! locutus/php/strings/strlen */ \"./node_modules/locutus/php/strings/strlen.js\");\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! locutus/php/array/array_diff */ \"./node_modules/locutus/php/array/array_diff.js\");\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! locutus/php/datetime/strtotime */ \"./node_modules/locutus/php/datetime/strtotime.js\");\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! locutus/php/var/is_numeric */ \"./node_modules/locutus/php/var/is_numeric.js\");\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__);\n/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n\n\n\n$.extend(true, laravelValidation, {\n helpers: {\n /**\n * Numeric rules\n */\n numericRules: ['Integer', 'Numeric'],\n\n /**\n * Gets the file information from file input.\n *\n * @param fieldObj\n * @param index\n * @returns {{file: *, extension: string, size: number}}\n */\n fileinfo: function (fieldObj, index) {\n var FileName = fieldObj.value;\n index = typeof index !== 'undefined' ? index : 0;\n\n if (fieldObj.files !== null) {\n if (typeof fieldObj.files[index] !== 'undefined') {\n return {\n file: FileName,\n extension: FileName.substr(FileName.lastIndexOf('.') + 1),\n size: fieldObj.files[index].size / 1024,\n type: fieldObj.files[index].type\n };\n }\n }\n\n return false;\n },\n\n /**\n * Gets the selectors for th specified field names.\n *\n * @param names\n * @returns {string}\n */\n selector: function (names) {\n var selector = [];\n\n if (!this.isArray(names)) {\n names = [names];\n }\n\n for (var i = 0; i < names.length; i++) {\n selector.push(\"[name='\" + names[i] + \"']\");\n }\n\n return selector.join();\n },\n\n /**\n * Check if element has numeric rules.\n *\n * @param element\n * @returns {boolean}\n */\n hasNumericRules: function (element) {\n return this.hasRules(element, this.numericRules);\n },\n\n /**\n * Check if element has passed rules.\n *\n * @param element\n * @param rules\n * @returns {boolean}\n */\n hasRules: function (element, rules) {\n var found = false;\n\n if (typeof rules === 'string') {\n rules = [rules];\n }\n\n var validator = $.data(element.form, \"validator\");\n var listRules = [];\n var cache = validator.arrayRulesCache;\n\n if (element.name in cache) {\n $.each(cache[element.name], function (index, arrayRule) {\n listRules.push(arrayRule);\n });\n }\n\n if (element.name in validator.settings.rules) {\n listRules.push(validator.settings.rules[element.name]);\n }\n\n $.each(listRules, function (index, objRules) {\n if ('laravelValidation' in objRules) {\n var _rules = objRules.laravelValidation;\n\n for (var i = 0; i < _rules.length; i++) {\n if ($.inArray(_rules[i][0], rules) !== -1) {\n found = true;\n return false;\n }\n }\n }\n });\n return found;\n },\n\n /**\n * Return the string length using PHP function.\n * http://php.net/manual/en/function.strlen.php\n * http://phpjs.org/functions/strlen/\n *\n * @param string\n */\n strlen: function (string) {\n return locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default()(string);\n },\n\n /**\n * Get the size of the object depending of his type.\n *\n * @param obj\n * @param element\n * @param value\n * @returns int\n */\n getSize: function getSize(obj, element, value) {\n if (this.hasNumericRules(element) && this.is_numeric(value)) {\n return parseFloat(value);\n } else if (this.isArray(value)) {\n return parseFloat(value.length);\n } else if (element.type === 'file') {\n return parseFloat(Math.floor(this.fileinfo(element).size));\n }\n\n return parseFloat(this.strlen(value));\n },\n\n /**\n * Return specified rule from element.\n *\n * @param rule\n * @param element\n * @returns object\n */\n getLaravelValidation: function (rule, element) {\n var found = undefined;\n $.each($.validator.staticRules(element), function (key, rules) {\n if (key === \"laravelValidation\") {\n $.each(rules, function (i, value) {\n if (value[0] === rule) {\n found = value;\n }\n });\n }\n });\n return found;\n },\n\n /**\n * Return he timestamp of value passed using format or default format in element.\n *\n * @param value\n * @param format\n * @returns {boolean|int}\n */\n parseTime: function (value, format) {\n var timeValue = false;\n var fmt = new DateFormatter();\n\n if (typeof format === 'object') {\n var dateRule = this.getLaravelValidation('DateFormat', format);\n\n if (dateRule !== undefined) {\n format = dateRule[1][0];\n } else {\n format = null;\n }\n }\n\n if (format == null) {\n timeValue = this.strtotime(value);\n } else {\n timeValue = fmt.parseDate(value, format);\n\n if (timeValue) {\n timeValue = Math.round(timeValue.getTime() / 1000);\n }\n }\n\n return timeValue;\n },\n\n /**\n * Compare a given date against another using an operator.\n *\n * @param validator\n * @param value\n * @param element\n * @param params\n * @param operator\n * @return {boolean}\n */\n compareDates: function (validator, value, element, params, operator) {\n var timeCompare = parseFloat(params);\n\n if (isNaN(timeCompare)) {\n var target = this.dependentElement(validator, element, params);\n\n if (target === undefined) {\n return false;\n }\n\n timeCompare = this.parseTime(validator.elementValue(target), target);\n }\n\n var timeValue = this.parseTime(value, element);\n\n if (timeValue === false) {\n return false;\n }\n\n switch (operator) {\n case '<':\n return timeValue < timeCompare;\n\n case '<=':\n return timeValue <= timeCompare;\n\n case '==':\n case '===':\n return timeValue === timeCompare;\n\n case '>':\n return timeValue > timeCompare;\n\n case '>=':\n return timeValue >= timeCompare;\n\n default:\n throw new Error('Unsupported operator.');\n }\n },\n\n /**\n * This method allows you to intelligently guess the date by closely matching the specific format.\n *\n * @param value\n * @param format\n * @returns {Date}\n */\n guessDate: function (value, format) {\n var fmt = new DateFormatter();\n return fmt.guessDate(value, format);\n },\n\n /**\n * Returns Unix timestamp based on PHP function strototime.\n * http://php.net/manual/es/function.strtotime.php\n * http://phpjs.org/functions/strtotime/\n *\n * @param text\n * @param now\n * @returns {*}\n */\n strtotime: function (text, now) {\n return locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default()(text, now);\n },\n\n /**\n * Returns if value is numeric.\n * http://php.net/manual/es/var.is_numeric.php\n * http://phpjs.org/functions/is_numeric/\n *\n * @param mixed_var\n * @returns {*}\n */\n is_numeric: function (mixed_var) {\n return locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default()(mixed_var);\n },\n\n /**\n * Check whether the argument is of type Array.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray#Polyfill\n *\n * @param arg\n * @returns {boolean}\n */\n isArray: function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n },\n\n /**\n * Returns Array diff based on PHP function array_diff.\n * http://php.net/manual/es/function.array_diff.php\n * http://phpjs.org/functions/array_diff/\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayDiff: function (arr1, arr2) {\n return locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default()(arr1, arr2);\n },\n\n /**\n * Check whether two arrays are equal to one another.\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayEquals: function (arr1, arr2) {\n if (!this.isArray(arr1) || !this.isArray(arr2)) {\n return false;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n return $.isEmptyObject(this.arrayDiff(arr1, arr2));\n },\n\n /**\n * Makes element dependant from other.\n *\n * @param validator\n * @param element\n * @param name\n * @returns {*}\n */\n dependentElement: function (validator, element, name) {\n var el = validator.findByName(name);\n\n if (el[0] !== undefined && validator.settings.onfocusout) {\n var event = 'blur';\n\n if (el[0].tagName === 'SELECT' || el[0].tagName === 'OPTION' || el[0].type === 'checkbox' || el[0].type === 'radio') {\n event = 'click';\n }\n\n var ruleName = '.validate-laravelValidation';\n el.off(ruleName).off(event + ruleName + '-' + element.name).on(event + ruleName + '-' + element.name, function () {\n $(element).valid();\n });\n }\n\n return el[0];\n },\n\n /**\n * Parses error Ajax response and gets the message.\n *\n * @param response\n * @returns {string[]}\n */\n parseErrorResponse: function (response) {\n var newResponse = ['Whoops, looks like something went wrong.'];\n\n if ('responseText' in response) {\n var errorMsg = response.responseText.match(/(.*)<\\/h1\\s*>/i);\n\n if (this.isArray(errorMsg)) {\n newResponse = [errorMsg[1]];\n }\n }\n\n return newResponse;\n },\n\n /**\n * Escape string to use as Regular Expression.\n *\n * @param str\n * @returns string\n */\n escapeRegExp: function (str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n\n /**\n * Generate RegExp from wildcard attributes.\n *\n * @param name\n * @returns {RegExp}\n */\n regexFromWildcard: function (name) {\n var nameParts = name.split(\"[*]\");\n\n if (nameParts.length === 1) {\n nameParts.push('');\n }\n\n var regexpParts = nameParts.map(function (currentValue, index) {\n if (index % 2 === 0) {\n currentValue = currentValue + '[';\n } else {\n currentValue = ']' + currentValue;\n }\n\n return laravelValidation.helpers.escapeRegExp(currentValue);\n });\n return new RegExp('^' + regexpParts.join('[^\\\\]]*') + '$');\n },\n\n /**\n * Merge additional laravel validation rules into the current rule set.\n *\n * @param {object} rules\n * @param {object} newRules\n * @returns {object}\n */\n mergeRules: function (rules, newRules) {\n var rulesList = {\n 'laravelValidation': newRules.laravelValidation || [],\n 'laravelValidationRemote': newRules.laravelValidationRemote || []\n };\n\n for (var key in rulesList) {\n if (rulesList[key].length === 0) {\n continue;\n }\n\n if (typeof rules[key] === \"undefined\") {\n rules[key] = [];\n }\n\n rules[key] = rules[key].concat(rulesList[key]);\n }\n\n return rules;\n }\n }\n});\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2RhdGV0aW1lL3N0cnRvdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvaW5mby9pbmlfZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2N1dHVzL3BocC9zdHJpbmdzL3N0cmxlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiJCIsImV4dGVuZCIsImxhcmF2ZWxWYWxpZGF0aW9uIiwiaGVscGVycyIsIm51bWVyaWNSdWxlcyIsImZpbGVpbmZvIiwiZmllbGRPYmoiLCJpbmRleCIsIkZpbGVOYW1lIiwidmFsdWUiLCJmaWxlcyIsImZpbGUiLCJleHRlbnNpb24iLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInNpemUiLCJ0eXBlIiwic2VsZWN0b3IiLCJuYW1lcyIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iLCJoYXNOdW1lcmljUnVsZXMiLCJlbGVtZW50IiwiaGFzUnVsZXMiLCJydWxlcyIsImZvdW5kIiwidmFsaWRhdG9yIiwiZGF0YSIsImZvcm0iLCJsaXN0UnVsZXMiLCJjYWNoZSIsImFycmF5UnVsZXNDYWNoZSIsIm5hbWUiLCJlYWNoIiwiYXJyYXlSdWxlIiwic2V0dGluZ3MiLCJvYmpSdWxlcyIsIl9ydWxlcyIsImluQXJyYXkiLCJzdHJsZW4iLCJzdHJpbmciLCJnZXRTaXplIiwib2JqIiwiaXNfbnVtZXJpYyIsInBhcnNlRmxvYXQiLCJNYXRoIiwiZmxvb3IiLCJnZXRMYXJhdmVsVmFsaWRhdGlvbiIsInJ1bGUiLCJ1bmRlZmluZWQiLCJzdGF0aWNSdWxlcyIsImtleSIsInBhcnNlVGltZSIsImZvcm1hdCIsInRpbWVWYWx1ZSIsImZtdCIsIkRhdGVGb3JtYXR0ZXIiLCJkYXRlUnVsZSIsInN0cnRvdGltZSIsInBhcnNlRGF0ZSIsInJvdW5kIiwiZ2V0VGltZSIsImNvbXBhcmVEYXRlcyIsInBhcmFtcyIsIm9wZXJhdG9yIiwidGltZUNvbXBhcmUiLCJpc05hTiIsInRhcmdldCIsImRlcGVuZGVudEVsZW1lbnQiLCJlbGVtZW50VmFsdWUiLCJFcnJvciIsImd1ZXNzRGF0ZSIsInRleHQiLCJub3ciLCJtaXhlZF92YXIiLCJhcmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJhcnJheURpZmYiLCJhcnIxIiwiYXJyMiIsImFycmF5X2RpZmYiLCJhcnJheUVxdWFscyIsImlzRW1wdHlPYmplY3QiLCJlbCIsImZpbmRCeU5hbWUiLCJvbmZvY3Vzb3V0IiwiZXZlbnQiLCJ0YWdOYW1lIiwicnVsZU5hbWUiLCJvZmYiLCJvbiIsInZhbGlkIiwicGFyc2VFcnJvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJuZXdSZXNwb25zZSIsImVycm9yTXNnIiwicmVzcG9uc2VUZXh0IiwibWF0Y2giLCJlc2NhcGVSZWdFeHAiLCJzdHIiLCJyZXBsYWNlIiwicmVnZXhGcm9tV2lsZGNhcmQiLCJuYW1lUGFydHMiLCJzcGxpdCIsInJlZ2V4cFBhcnRzIiwibWFwIiwiY3VycmVudFZhbHVlIiwiUmVnRXhwIiwibWVyZ2VSdWxlcyIsIm5ld1J1bGVzIiwicnVsZXNMaXN0IiwibGFyYXZlbFZhbGlkYXRpb25SZW1vdGUiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNsQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixFQUFFO0FBQ3hCLHNCQUFzQixFQUFFO0FBQ3hCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3REFBd0QsSUFBSTtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixJQUFJO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQzs7Ozs7Ozs7Ozs7O0FDM2pDQSw4Q0FBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQzFCYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsS0FBOEIsR0FBRyxtQkFBTyxDQUFDLG1FQUFpQix5QkFBeUIsU0FBUztBQUM1RztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDOzs7Ozs7Ozs7Ozs7QUMzRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0M7Ozs7Ozs7Ozs7O0FDOUJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7OztBQ25CQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBRUFBLENBQUMsQ0FBQ0MsTUFBRixDQUFTLElBQVQsRUFBZUMsaUJBQWYsRUFBa0M7QUFFOUJDLFNBQU8sRUFBRTtBQUVMOzs7QUFHQUMsZ0JBQVksRUFBRSxDQUFDLFNBQUQsRUFBWSxTQUFaLENBTFQ7O0FBT0w7Ozs7Ozs7QUFPQUMsWUFBUSxFQUFFLFVBQVVDLFFBQVYsRUFBb0JDLEtBQXBCLEVBQTJCO0FBQ2pDLFVBQUlDLFFBQVEsR0FBR0YsUUFBUSxDQUFDRyxLQUF4QjtBQUNBRixXQUFLLEdBQUcsT0FBT0EsS0FBUCxLQUFpQixXQUFqQixHQUErQkEsS0FBL0IsR0FBdUMsQ0FBL0M7O0FBQ0EsVUFBS0QsUUFBUSxDQUFDSSxLQUFULEtBQW1CLElBQXhCLEVBQStCO0FBQzNCLFlBQUksT0FBT0osUUFBUSxDQUFDSSxLQUFULENBQWVILEtBQWYsQ0FBUCxLQUFpQyxXQUFyQyxFQUFrRDtBQUM5QyxpQkFBTztBQUNISSxnQkFBSSxFQUFFSCxRQURIO0FBRUhJLHFCQUFTLEVBQUVKLFFBQVEsQ0FBQ0ssTUFBVCxDQUFnQkwsUUFBUSxDQUFDTSxXQUFULENBQXFCLEdBQXJCLElBQTRCLENBQTVDLENBRlI7QUFHSEMsZ0JBQUksRUFBRVQsUUFBUSxDQUFDSSxLQUFULENBQWVILEtBQWYsRUFBc0JRLElBQXRCLEdBQTZCLElBSGhDO0FBSUhDLGdCQUFJLEVBQUVWLFFBQVEsQ0FBQ0ksS0FBVCxDQUFlSCxLQUFmLEVBQXNCUztBQUp6QixXQUFQO0FBTUg7QUFDSjs7QUFDRCxhQUFPLEtBQVA7QUFDSCxLQTVCSTs7QUErQkw7Ozs7OztBQU1BQyxZQUFRLEVBQUUsVUFBVUMsS0FBVixFQUFpQjtBQUN2QixVQUFJRCxRQUFRLEdBQUcsRUFBZjs7QUFDQSxVQUFJLENBQUUsS0FBS0UsT0FBTCxDQUFhRCxLQUFiLENBQU4sRUFBNEI7QUFDeEJBLGFBQUssR0FBRyxDQUFDQSxLQUFELENBQVI7QUFDSDs7QUFDRCxXQUFLLElBQUlFLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLEtBQUssQ0FBQ0csTUFBMUIsRUFBa0NELENBQUMsRUFBbkMsRUFBdUM7QUFDbkNILGdCQUFRLENBQUNLLElBQVQsQ0FBYyxZQUFZSixLQUFLLENBQUNFLENBQUQsQ0FBakIsR0FBdUIsSUFBckM7QUFDSDs7QUFDRCxhQUFPSCxRQUFRLENBQUNNLElBQVQsRUFBUDtBQUNILEtBOUNJOztBQWlETDs7Ozs7O0FBTUFDLG1CQUFlLEVBQUUsVUFBVUMsT0FBVixFQUFtQjtBQUNoQyxhQUFPLEtBQUtDLFFBQUwsQ0FBY0QsT0FBZCxFQUF1QixLQUFLckIsWUFBNUIsQ0FBUDtBQUNILEtBekRJOztBQTJETDs7Ozs7OztBQU9Bc0IsWUFBUSxFQUFFLFVBQVVELE9BQVYsRUFBbUJFLEtBQW5CLEVBQTBCO0FBRWhDLFVBQUlDLEtBQUssR0FBRyxLQUFaOztBQUNBLFVBQUksT0FBT0QsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUMzQkEsYUFBSyxHQUFHLENBQUNBLEtBQUQsQ0FBUjtBQUNIOztBQUVELFVBQUlFLFNBQVMsR0FBRzdCLENBQUMsQ0FBQzhCLElBQUYsQ0FBT0wsT0FBTyxDQUFDTSxJQUFmLEVBQXFCLFdBQXJCLENBQWhCO0FBQ0EsVUFBSUMsU0FBUyxHQUFHLEVBQWhCO0FBQ0EsVUFBSUMsS0FBSyxHQUFHSixTQUFTLENBQUNLLGVBQXRCOztBQUNBLFVBQUlULE9BQU8sQ0FBQ1UsSUFBUixJQUFnQkYsS0FBcEIsRUFBMkI7QUFDdkJqQyxTQUFDLENBQUNvQyxJQUFGLENBQU9ILEtBQUssQ0FBQ1IsT0FBTyxDQUFDVSxJQUFULENBQVosRUFBNEIsVUFBVTVCLEtBQVYsRUFBaUI4QixTQUFqQixFQUE0QjtBQUNwREwsbUJBQVMsQ0FBQ1YsSUFBVixDQUFlZSxTQUFmO0FBQ0gsU0FGRDtBQUdIOztBQUNELFVBQUlaLE9BQU8sQ0FBQ1UsSUFBUixJQUFnQk4sU0FBUyxDQUFDUyxRQUFWLENBQW1CWCxLQUF2QyxFQUE4QztBQUMxQ0ssaUJBQVMsQ0FBQ1YsSUFBVixDQUFlTyxTQUFTLENBQUNTLFFBQVYsQ0FBbUJYLEtBQW5CLENBQXlCRixPQUFPLENBQUNVLElBQWpDLENBQWY7QUFDSDs7QUFDRG5DLE9BQUMsQ0FBQ29DLElBQUYsQ0FBT0osU0FBUCxFQUFrQixVQUFTekIsS0FBVCxFQUFlZ0MsUUFBZixFQUF3QjtBQUN0QyxZQUFJLHVCQUF1QkEsUUFBM0IsRUFBcUM7QUFDakMsY0FBSUMsTUFBTSxHQUFDRCxRQUFRLENBQUNyQyxpQkFBcEI7O0FBQ0EsZUFBSyxJQUFJa0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29CLE1BQU0sQ0FBQ25CLE1BQTNCLEVBQW1DRCxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLGdCQUFJcEIsQ0FBQyxDQUFDeUMsT0FBRixDQUFVRCxNQUFNLENBQUNwQixDQUFELENBQU4sQ0FBVSxDQUFWLENBQVYsRUFBdUJPLEtBQXZCLE1BQWtDLENBQUMsQ0FBdkMsRUFBMEM7QUFDdENDLG1CQUFLLEdBQUcsSUFBUjtBQUNBLHFCQUFPLEtBQVA7QUFDSDtBQUNKO0FBQ0o7QUFDSixPQVZEO0FBWUEsYUFBT0EsS0FBUDtBQUNILEtBakdJOztBQW1HTDs7Ozs7OztBQU9BYyxVQUFNLEVBQUUsVUFBVUMsTUFBVixFQUFrQjtBQUN0QixhQUFPRCxpRUFBTSxDQUFDQyxNQUFELENBQWI7QUFDSCxLQTVHSTs7QUE4R0w7Ozs7Ozs7O0FBUUFDLFdBQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCQyxHQUFqQixFQUFzQnBCLE9BQXRCLEVBQStCaEIsS0FBL0IsRUFBc0M7QUFFM0MsVUFBSSxLQUFLZSxlQUFMLENBQXFCQyxPQUFyQixLQUFpQyxLQUFLcUIsVUFBTCxDQUFnQnJDLEtBQWhCLENBQXJDLEVBQTZEO0FBQ3pELGVBQU9zQyxVQUFVLENBQUN0QyxLQUFELENBQWpCO0FBQ0gsT0FGRCxNQUVPLElBQUksS0FBS1UsT0FBTCxDQUFhVixLQUFiLENBQUosRUFBeUI7QUFDNUIsZUFBT3NDLFVBQVUsQ0FBQ3RDLEtBQUssQ0FBQ1ksTUFBUCxDQUFqQjtBQUNILE9BRk0sTUFFQSxJQUFJSSxPQUFPLENBQUNULElBQVIsS0FBaUIsTUFBckIsRUFBNkI7QUFDaEMsZUFBTytCLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBSzVDLFFBQUwsQ0FBY29CLE9BQWQsRUFBdUJWLElBQWxDLENBQUQsQ0FBakI7QUFDSDs7QUFFRCxhQUFPZ0MsVUFBVSxDQUFDLEtBQUtMLE1BQUwsQ0FBWWpDLEtBQVosQ0FBRCxDQUFqQjtBQUNILEtBaklJOztBQW9JTDs7Ozs7OztBQU9BeUMsd0JBQW9CLEVBQUUsVUFBU0MsSUFBVCxFQUFlMUIsT0FBZixFQUF3QjtBQUUxQyxVQUFJRyxLQUFLLEdBQUd3QixTQUFaO0FBQ0FwRCxPQUFDLENBQUNvQyxJQUFGLENBQU9wQyxDQUFDLENBQUM2QixTQUFGLENBQVl3QixXQUFaLENBQXdCNUIsT0FBeEIsQ0FBUCxFQUF5QyxVQUFTNkIsR0FBVCxFQUFjM0IsS0FBZCxFQUFxQjtBQUMxRCxZQUFJMkIsR0FBRyxLQUFHLG1CQUFWLEVBQStCO0FBQzNCdEQsV0FBQyxDQUFDb0MsSUFBRixDQUFPVCxLQUFQLEVBQWMsVUFBVVAsQ0FBVixFQUFhWCxLQUFiLEVBQW9CO0FBQzlCLGdCQUFJQSxLQUFLLENBQUMsQ0FBRCxDQUFMLEtBQVcwQyxJQUFmLEVBQXFCO0FBQ2pCdkIsbUJBQUssR0FBQ25CLEtBQU47QUFDSDtBQUNKLFdBSkQ7QUFLSDtBQUNKLE9BUkQ7QUFVQSxhQUFPbUIsS0FBUDtBQUNILEtBekpJOztBQTJKTDs7Ozs7OztBQU9BMkIsYUFBUyxFQUFFLFVBQVU5QyxLQUFWLEVBQWlCK0MsTUFBakIsRUFBeUI7QUFFaEMsVUFBSUMsU0FBUyxHQUFHLEtBQWhCO0FBQ0EsVUFBSUMsR0FBRyxHQUFHLElBQUlDLGFBQUosRUFBVjs7QUFFQSxVQUFJLE9BQU9ILE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDNUIsWUFBSUksUUFBUSxHQUFHLEtBQUtWLG9CQUFMLENBQTBCLFlBQTFCLEVBQXdDTSxNQUF4QyxDQUFmOztBQUNBLFlBQUlJLFFBQVEsS0FBS1IsU0FBakIsRUFBNEI7QUFDeEJJLGdCQUFNLEdBQUdJLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWSxDQUFaLENBQVQ7QUFDSCxTQUZELE1BRU87QUFDSEosZ0JBQU0sR0FBRyxJQUFUO0FBQ0g7QUFDSjs7QUFFRCxVQUFJQSxNQUFNLElBQUksSUFBZCxFQUFvQjtBQUNoQkMsaUJBQVMsR0FBRyxLQUFLSSxTQUFMLENBQWVwRCxLQUFmLENBQVo7QUFDSCxPQUZELE1BRU87QUFDSGdELGlCQUFTLEdBQUdDLEdBQUcsQ0FBQ0ksU0FBSixDQUFjckQsS0FBZCxFQUFxQitDLE1BQXJCLENBQVo7O0FBQ0EsWUFBSUMsU0FBSixFQUFlO0FBQ1hBLG1CQUFTLEdBQUdULElBQUksQ0FBQ2UsS0FBTCxDQUFZTixTQUFTLENBQUNPLE9BQVYsS0FBc0IsSUFBbEMsQ0FBWjtBQUNIO0FBQ0o7O0FBRUQsYUFBT1AsU0FBUDtBQUNILEtBMUxJOztBQTRMTDs7Ozs7Ozs7OztBQVVBUSxnQkFBWSxFQUFFLFVBQVVwQyxTQUFWLEVBQXFCcEIsS0FBckIsRUFBNEJnQixPQUE1QixFQUFxQ3lDLE1BQXJDLEVBQTZDQyxRQUE3QyxFQUF1RDtBQUVqRSxVQUFJQyxXQUFXLEdBQUdyQixVQUFVLENBQUNtQixNQUFELENBQTVCOztBQUVBLFVBQUlHLEtBQUssQ0FBQ0QsV0FBRCxDQUFULEVBQXdCO0FBQ3BCLFlBQUlFLE1BQU0sR0FBRyxLQUFLQyxnQkFBTCxDQUFzQjFDLFNBQXRCLEVBQWlDSixPQUFqQyxFQUEwQ3lDLE1BQTFDLENBQWI7O0FBQ0EsWUFBSUksTUFBTSxLQUFLbEIsU0FBZixFQUEwQjtBQUN0QixpQkFBTyxLQUFQO0FBQ0g7O0FBQ0RnQixtQkFBVyxHQUFHLEtBQUtiLFNBQUwsQ0FBZTFCLFNBQVMsQ0FBQzJDLFlBQVYsQ0FBdUJGLE1BQXZCLENBQWYsRUFBK0NBLE1BQS9DLENBQWQ7QUFDSDs7QUFFRCxVQUFJYixTQUFTLEdBQUcsS0FBS0YsU0FBTCxDQUFlOUMsS0FBZixFQUFzQmdCLE9BQXRCLENBQWhCOztBQUNBLFVBQUlnQyxTQUFTLEtBQUssS0FBbEIsRUFBeUI7QUFDckIsZUFBTyxLQUFQO0FBQ0g7O0FBRUQsY0FBUVUsUUFBUjtBQUNJLGFBQUssR0FBTDtBQUNJLGlCQUFPVixTQUFTLEdBQUdXLFdBQW5COztBQUVKLGFBQUssSUFBTDtBQUNJLGlCQUFPWCxTQUFTLElBQUlXLFdBQXBCOztBQUVKLGFBQUssSUFBTDtBQUNBLGFBQUssS0FBTDtBQUNJLGlCQUFPWCxTQUFTLEtBQUtXLFdBQXJCOztBQUVKLGFBQUssR0FBTDtBQUNJLGlCQUFPWCxTQUFTLEdBQUdXLFdBQW5COztBQUVKLGFBQUssSUFBTDtBQUNJLGlCQUFPWCxTQUFTLElBQUlXLFdBQXBCOztBQUVKO0FBQ0ksZ0JBQU0sSUFBSUssS0FBSixDQUFVLHVCQUFWLENBQU47QUFsQlI7QUFvQkgsS0EzT0k7O0FBNk9MOzs7Ozs7O0FBT0FDLGFBQVMsRUFBRSxVQUFVakUsS0FBVixFQUFpQitDLE1BQWpCLEVBQXlCO0FBQ2hDLFVBQUlFLEdBQUcsR0FBRyxJQUFJQyxhQUFKLEVBQVY7QUFDQSxhQUFPRCxHQUFHLENBQUNnQixTQUFKLENBQWNqRSxLQUFkLEVBQXFCK0MsTUFBckIsQ0FBUDtBQUNILEtBdlBJOztBQXlQTDs7Ozs7Ozs7O0FBU0FLLGFBQVMsRUFBRSxVQUFVYyxJQUFWLEVBQWdCQyxHQUFoQixFQUFxQjtBQUM1QixhQUFPZixxRUFBUyxDQUFDYyxJQUFELEVBQU9DLEdBQVAsQ0FBaEI7QUFDSCxLQXBRSTs7QUFzUUw7Ozs7Ozs7O0FBUUE5QixjQUFVLEVBQUUsVUFBVStCLFNBQVYsRUFBcUI7QUFDN0IsYUFBTy9CLGlFQUFVLENBQUMrQixTQUFELENBQWpCO0FBQ0gsS0FoUkk7O0FBa1JMOzs7Ozs7O0FBT0ExRCxXQUFPLEVBQUUsVUFBUzJELEdBQVQsRUFBYztBQUNuQixhQUFPQyxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLFFBQWpCLENBQTBCQyxJQUExQixDQUErQkosR0FBL0IsTUFBd0MsZ0JBQS9DO0FBQ0gsS0EzUkk7O0FBNlJMOzs7Ozs7Ozs7QUFTQUssYUFBUyxFQUFFLFVBQVVDLElBQVYsRUFBZ0JDLElBQWhCLEVBQXNCO0FBQzdCLGFBQU9DLG1FQUFVLENBQUNGLElBQUQsRUFBT0MsSUFBUCxDQUFqQjtBQUNILEtBeFNJOztBQTBTTDs7Ozs7OztBQU9BRSxlQUFXLEVBQUUsVUFBVUgsSUFBVixFQUFnQkMsSUFBaEIsRUFBc0I7QUFDL0IsVUFBSSxDQUFFLEtBQUtsRSxPQUFMLENBQWFpRSxJQUFiLENBQUYsSUFBd0IsQ0FBRSxLQUFLakUsT0FBTCxDQUFha0UsSUFBYixDQUE5QixFQUFrRDtBQUM5QyxlQUFPLEtBQVA7QUFDSDs7QUFFRCxVQUFJRCxJQUFJLENBQUMvRCxNQUFMLEtBQWdCZ0UsSUFBSSxDQUFDaEUsTUFBekIsRUFBaUM7QUFDN0IsZUFBTyxLQUFQO0FBQ0g7O0FBRUQsYUFBT3JCLENBQUMsQ0FBQ3dGLGFBQUYsQ0FBZ0IsS0FBS0wsU0FBTCxDQUFlQyxJQUFmLEVBQXFCQyxJQUFyQixDQUFoQixDQUFQO0FBQ0gsS0EzVEk7O0FBNlRMOzs7Ozs7OztBQVFBZCxvQkFBZ0IsRUFBRSxVQUFTMUMsU0FBVCxFQUFvQkosT0FBcEIsRUFBNkJVLElBQTdCLEVBQW1DO0FBRWpELFVBQUlzRCxFQUFFLEdBQUM1RCxTQUFTLENBQUM2RCxVQUFWLENBQXFCdkQsSUFBckIsQ0FBUDs7QUFFQSxVQUFLc0QsRUFBRSxDQUFDLENBQUQsQ0FBRixLQUFRckMsU0FBUixJQUFzQnZCLFNBQVMsQ0FBQ1MsUUFBVixDQUFtQnFELFVBQTlDLEVBQTJEO0FBQ3ZELFlBQUlDLEtBQUssR0FBRyxNQUFaOztBQUNBLFlBQUlILEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTUksT0FBTixLQUFrQixRQUFsQixJQUNBSixFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU1JLE9BQU4sS0FBa0IsUUFEbEIsSUFFQUosRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNekUsSUFBTixLQUFlLFVBRmYsSUFHQXlFLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTXpFLElBQU4sS0FBZSxPQUhuQixFQUlFO0FBQ0U0RSxlQUFLLEdBQUcsT0FBUjtBQUNIOztBQUVELFlBQUlFLFFBQVEsR0FBRyw2QkFBZjtBQUNBTCxVQUFFLENBQUNNLEdBQUgsQ0FBUUQsUUFBUixFQUNLQyxHQURMLENBQ1NILEtBQUssR0FBR0UsUUFBUixHQUFtQixHQUFuQixHQUF5QnJFLE9BQU8sQ0FBQ1UsSUFEMUMsRUFFSzZELEVBRkwsQ0FFU0osS0FBSyxHQUFHRSxRQUFSLEdBQW1CLEdBQW5CLEdBQXlCckUsT0FBTyxDQUFDVSxJQUYxQyxFQUVnRCxZQUFXO0FBQ25EbkMsV0FBQyxDQUFFeUIsT0FBRixDQUFELENBQWF3RSxLQUFiO0FBQ0gsU0FKTDtBQUtIOztBQUVELGFBQU9SLEVBQUUsQ0FBQyxDQUFELENBQVQ7QUFDSCxLQTVWSTs7QUE4Vkw7Ozs7OztBQU1BUyxzQkFBa0IsRUFBRSxVQUFVQyxRQUFWLEVBQW9CO0FBQ3BDLFVBQUlDLFdBQVcsR0FBRyxDQUFDLDBDQUFELENBQWxCOztBQUNBLFVBQUksa0JBQWtCRCxRQUF0QixFQUFnQztBQUM1QixZQUFJRSxRQUFRLEdBQUdGLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQkMsS0FBdEIsQ0FBNEIsdUJBQTVCLENBQWY7O0FBQ0EsWUFBSSxLQUFLcEYsT0FBTCxDQUFha0YsUUFBYixDQUFKLEVBQTRCO0FBQ3hCRCxxQkFBVyxHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFELENBQVQsQ0FBZDtBQUNIO0FBQ0o7O0FBQ0QsYUFBT0QsV0FBUDtBQUNILEtBN1dJOztBQStXTDs7Ozs7O0FBTUFJLGdCQUFZLEVBQUUsVUFBVUMsR0FBVixFQUFlO0FBQ3pCLGFBQU9BLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLHFDQUFaLEVBQW1ELE1BQW5ELENBQVA7QUFDSCxLQXZYSTs7QUF5WEw7Ozs7OztBQU1BQyxxQkFBaUIsRUFBRSxVQUFTeEUsSUFBVCxFQUFlO0FBQzlCLFVBQUl5RSxTQUFTLEdBQUd6RSxJQUFJLENBQUMwRSxLQUFMLENBQVcsS0FBWCxDQUFoQjs7QUFDQSxVQUFJRCxTQUFTLENBQUN2RixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBQ3hCdUYsaUJBQVMsQ0FBQ3RGLElBQVYsQ0FBZSxFQUFmO0FBQ0g7O0FBQ0QsVUFBSXdGLFdBQVcsR0FBR0YsU0FBUyxDQUFDRyxHQUFWLENBQWMsVUFBU0MsWUFBVCxFQUF1QnpHLEtBQXZCLEVBQThCO0FBQzFELFlBQUlBLEtBQUssR0FBRyxDQUFSLEtBQWMsQ0FBbEIsRUFBcUI7QUFDakJ5RyxzQkFBWSxHQUFHQSxZQUFZLEdBQUcsR0FBOUI7QUFDSCxTQUZELE1BRU87QUFDSEEsc0JBQVksR0FBRyxNQUFLQSxZQUFwQjtBQUNIOztBQUVELGVBQU85RyxpQkFBaUIsQ0FBQ0MsT0FBbEIsQ0FBMEJxRyxZQUExQixDQUF1Q1EsWUFBdkMsQ0FBUDtBQUNILE9BUmlCLENBQWxCO0FBVUEsYUFBTyxJQUFJQyxNQUFKLENBQVcsTUFBSUgsV0FBVyxDQUFDdkYsSUFBWixDQUFpQixTQUFqQixDQUFKLEdBQWdDLEdBQTNDLENBQVA7QUFDSCxLQS9ZSTs7QUFpWkw7Ozs7Ozs7QUFPQTJGLGNBQVUsRUFBRSxVQUFVdkYsS0FBVixFQUFpQndGLFFBQWpCLEVBQTJCO0FBQ25DLFVBQUlDLFNBQVMsR0FBRztBQUNaLDZCQUFxQkQsUUFBUSxDQUFDakgsaUJBQVQsSUFBOEIsRUFEdkM7QUFFWixtQ0FBMkJpSCxRQUFRLENBQUNFLHVCQUFULElBQW9DO0FBRm5ELE9BQWhCOztBQUtBLFdBQUssSUFBSS9ELEdBQVQsSUFBZ0I4RCxTQUFoQixFQUEyQjtBQUN2QixZQUFJQSxTQUFTLENBQUM5RCxHQUFELENBQVQsQ0FBZWpDLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0I7QUFDSDs7QUFFRCxZQUFJLE9BQU9NLEtBQUssQ0FBQzJCLEdBQUQsQ0FBWixLQUFzQixXQUExQixFQUF1QztBQUNuQzNCLGVBQUssQ0FBQzJCLEdBQUQsQ0FBTCxHQUFhLEVBQWI7QUFDSDs7QUFFRDNCLGFBQUssQ0FBQzJCLEdBQUQsQ0FBTCxHQUFhM0IsS0FBSyxDQUFDMkIsR0FBRCxDQUFMLENBQVdnRSxNQUFYLENBQWtCRixTQUFTLENBQUM5RCxHQUFELENBQTNCLENBQWI7QUFDSDs7QUFFRCxhQUFPM0IsS0FBUDtBQUNIO0FBM2FJO0FBRnFCLENBQWxDLEUiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9oZWxwZXJzLmpzXCIpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFycmF5X2RpZmYoYXJyMSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2FycmF5X2RpZmYvXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogU2Fuam95IFJveVxuICAvLyAgcmV2aXNlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gICBleGFtcGxlIDE6IGFycmF5X2RpZmYoWydLZXZpbicsICd2YW4nLCAnWm9ubmV2ZWxkJ10sIFsndmFuJywgJ1pvbm5ldmVsZCddKVxuICAvLyAgIHJldHVybnMgMTogezA6J0tldmluJ31cblxuICB2YXIgcmV0QXJyID0ge307XG4gIHZhciBhcmdsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGsxID0gJyc7XG4gIHZhciBpID0gMTtcbiAgdmFyIGsgPSAnJztcbiAgdmFyIGFyciA9IHt9O1xuXG4gIGFycjFrZXlzOiBmb3IgKGsxIGluIGFycjEpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxhYmVsc1xuICAgIGZvciAoaSA9IDE7IGkgPCBhcmdsOyBpKyspIHtcbiAgICAgIGFyciA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAoayBpbiBhcnIpIHtcbiAgICAgICAgaWYgKGFycltrXSA9PT0gYXJyMVtrMV0pIHtcbiAgICAgICAgICAvLyBJZiBpdCByZWFjaGVzIGhlcmUsIGl0IHdhcyBmb3VuZCBpbiBhdCBsZWFzdCBvbmUgYXJyYXksIHNvIHRyeSBuZXh0IHZhbHVlXG4gICAgICAgICAgY29udGludWUgYXJyMWtleXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbGFiZWxzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldEFycltrMV0gPSBhcnIxW2sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0QXJyO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5X2RpZmYuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVTcGFjZSA9ICdbIFxcXFx0XSsnO1xudmFyIHJlU3BhY2VPcHQgPSAnWyBcXFxcdF0qJztcbnZhciByZU1lcmlkaWFuID0gJyg/OihbYXBdKVxcXFwuP21cXFxcLj8oW1xcXFx0IF18JCkpJztcbnZhciByZUhvdXIyNCA9ICcoMlswLTRdfFswMV0/WzAtOV0pJztcbnZhciByZUhvdXIyNGx6ID0gJyhbMDFdWzAtOV18MlswLTRdKSc7XG52YXIgcmVIb3VyMTIgPSAnKDA/WzEtOV18MVswLTJdKSc7XG52YXIgcmVNaW51dGUgPSAnKFswLTVdP1swLTldKSc7XG52YXIgcmVNaW51dGVseiA9ICcoWzAtNV1bMC05XSknO1xudmFyIHJlU2Vjb25kID0gJyg2MHxbMC01XT9bMC05XSknO1xudmFyIHJlU2Vjb25kbHogPSAnKDYwfFswLTVdWzAtOV0pJztcbnZhciByZUZyYWMgPSAnKD86XFxcXC4oWzAtOV0rKSknO1xuXG52YXIgcmVEYXlmdWxsID0gJ3N1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5JztcbnZhciByZURheWFiYnIgPSAnc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0JztcbnZhciByZURheXRleHQgPSByZURheWZ1bGwgKyAnfCcgKyByZURheWFiYnIgKyAnfHdlZWtkYXlzPyc7XG5cbnZhciByZVJlbHRleHRudW1iZXIgPSAnZmlyc3R8c2Vjb25kfHRoaXJkfGZvdXJ0aHxmaWZ0aHxzaXh0aHxzZXZlbnRofGVpZ2h0aD98bmludGh8dGVudGh8ZWxldmVudGh8dHdlbGZ0aCc7XG52YXIgcmVSZWx0ZXh0dGV4dCA9ICduZXh0fGxhc3R8cHJldmlvdXN8dGhpcyc7XG52YXIgcmVSZWx0ZXh0dW5pdCA9ICcoPzpzZWNvbmR8c2VjfG1pbnV0ZXxtaW58aG91cnxkYXl8Zm9ydG5pZ2h0fGZvcnRobmlnaHR8bW9udGh8eWVhcilzP3x3ZWVrc3wnICsgcmVEYXl0ZXh0O1xuXG52YXIgcmVZZWFyID0gJyhbMC05XXsxLDR9KSc7XG52YXIgcmVZZWFyMiA9ICcoWzAtOV17Mn0pJztcbnZhciByZVllYXI0ID0gJyhbMC05XXs0fSknO1xudmFyIHJlWWVhcjR3aXRoU2lnbiA9ICcoWystXT9bMC05XXs0fSknO1xudmFyIHJlTW9udGggPSAnKDFbMC0yXXwwP1swLTldKSc7XG52YXIgcmVNb250aGx6ID0gJygwWzAtOV18MVswLTJdKSc7XG52YXIgcmVEYXkgPSAnKD86KDNbMDFdfFswLTJdP1swLTldKSg/OnN0fG5kfHJkfHRoKT8pJztcbnZhciByZURheWx6ID0gJygwWzAtOV18WzEtMl1bMC05XXwzWzAxXSknO1xuXG52YXIgcmVNb250aEZ1bGwgPSAnamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcic7XG52YXIgcmVNb250aEFiYnIgPSAnamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB0P3xvY3R8bm92fGRlYyc7XG52YXIgcmVNb250aHJvbWFuID0gJ2lbdnhdfHZpezAsM318eGl7MCwyfXxpezEsM30nO1xudmFyIHJlTW9udGhUZXh0ID0gJygnICsgcmVNb250aEZ1bGwgKyAnfCcgKyByZU1vbnRoQWJiciArICd8JyArIHJlTW9udGhyb21hbiArICcpJztcblxudmFyIHJlVHpDb3JyZWN0aW9uID0gJygoPzpHTVQpPyhbKy1dKScgKyByZUhvdXIyNCArICc6PycgKyByZU1pbnV0ZSArICc/KSc7XG52YXIgcmVEYXlPZlllYXIgPSAnKDAwWzEtOV18MFsxLTldWzAtOV18WzEyXVswLTldWzAtOV18M1swLTVdWzAtOV18MzZbMC02XSknO1xudmFyIHJlV2Vla09mWWVhciA9ICcoMFsxLTldfFsxLTRdWzAtOV18NVswLTNdKSc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NNZXJpZGlhbihob3VyLCBtZXJpZGlhbikge1xuICBtZXJpZGlhbiA9IG1lcmlkaWFuICYmIG1lcmlkaWFuLnRvTG93ZXJDYXNlKCk7XG5cbiAgc3dpdGNoIChtZXJpZGlhbikge1xuICAgIGNhc2UgJ2EnOlxuICAgICAgaG91ciArPSBob3VyID09PSAxMiA/IC0xMiA6IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwJzpcbiAgICAgIGhvdXIgKz0gaG91ciAhPT0gMTIgPyAxMiA6IDA7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBob3VyO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzWWVhcih5ZWFyU3RyKSB7XG4gIHZhciB5ZWFyID0gK3llYXJTdHI7XG5cbiAgaWYgKHllYXJTdHIubGVuZ3RoIDwgNCAmJiB5ZWFyIDwgMTAwKSB7XG4gICAgeWVhciArPSB5ZWFyIDwgNzAgPyAyMDAwIDogMTkwMDtcbiAgfVxuXG4gIHJldHVybiB5ZWFyO1xufVxuXG5mdW5jdGlvbiBsb29rdXBNb250aChtb250aFN0cikge1xuICByZXR1cm4ge1xuICAgIGphbjogMCxcbiAgICBqYW51YXJ5OiAwLFxuICAgIGk6IDAsXG4gICAgZmViOiAxLFxuICAgIGZlYnJ1YXJ5OiAxLFxuICAgIGlpOiAxLFxuICAgIG1hcjogMixcbiAgICBtYXJjaDogMixcbiAgICBpaWk6IDIsXG4gICAgYXByOiAzLFxuICAgIGFwcmlsOiAzLFxuICAgIGl2OiAzLFxuICAgIG1heTogNCxcbiAgICB2OiA0LFxuICAgIGp1bjogNSxcbiAgICBqdW5lOiA1LFxuICAgIHZpOiA1LFxuICAgIGp1bDogNixcbiAgICBqdWx5OiA2LFxuICAgIHZpaTogNixcbiAgICBhdWc6IDcsXG4gICAgYXVndXN0OiA3LFxuICAgIHZpaWk6IDcsXG4gICAgc2VwOiA4LFxuICAgIHNlcHQ6IDgsXG4gICAgc2VwdGVtYmVyOiA4LFxuICAgIGl4OiA4LFxuICAgIG9jdDogOSxcbiAgICBvY3RvYmVyOiA5LFxuICAgIHg6IDksXG4gICAgbm92OiAxMCxcbiAgICBub3ZlbWJlcjogMTAsXG4gICAgeGk6IDEwLFxuICAgIGRlYzogMTEsXG4gICAgZGVjZW1iZXI6IDExLFxuICAgIHhpaTogMTFcbiAgfVttb250aFN0ci50b0xvd2VyQ2FzZSgpXTtcbn1cblxuZnVuY3Rpb24gbG9va3VwV2Vla2RheShkYXlTdHIpIHtcbiAgdmFyIGRlc2lyZWRTdW5kYXlOdW1iZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG5cbiAgdmFyIGRheU51bWJlcnMgPSB7XG4gICAgbW9uOiAxLFxuICAgIG1vbmRheTogMSxcbiAgICB0dWU6IDIsXG4gICAgdHVlc2RheTogMixcbiAgICB3ZWQ6IDMsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHRodTogNCxcbiAgICB0aHVyc2RheTogNCxcbiAgICBmcmk6IDUsXG4gICAgZnJpZGF5OiA1LFxuICAgIHNhdDogNixcbiAgICBzYXR1cmRheTogNixcbiAgICBzdW46IDAsXG4gICAgc3VuZGF5OiAwXG4gIH07XG5cbiAgcmV0dXJuIGRheU51bWJlcnNbZGF5U3RyLnRvTG93ZXJDYXNlKCldIHx8IGRlc2lyZWRTdW5kYXlOdW1iZXI7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFJlbGF0aXZlKHJlbFRleHQpIHtcbiAgdmFyIHJlbGF0aXZlTnVtYmVycyA9IHtcbiAgICBsYXN0OiAtMSxcbiAgICBwcmV2aW91czogLTEsXG4gICAgdGhpczogMCxcbiAgICBmaXJzdDogMSxcbiAgICBuZXh0OiAxLFxuICAgIHNlY29uZDogMixcbiAgICB0aGlyZDogMyxcbiAgICBmb3VydGg6IDQsXG4gICAgZmlmdGg6IDUsXG4gICAgc2l4dGg6IDYsXG4gICAgc2V2ZW50aDogNyxcbiAgICBlaWdodDogOCxcbiAgICBlaWdodGg6IDgsXG4gICAgbmludGg6IDksXG4gICAgdGVudGg6IDEwLFxuICAgIGVsZXZlbnRoOiAxMSxcbiAgICB0d2VsZnRoOiAxMlxuICB9O1xuXG4gIHZhciByZWxhdGl2ZUJlaGF2aW9yID0ge1xuICAgIHRoaXM6IDFcbiAgfTtcblxuICB2YXIgcmVsVGV4dExvd2VyID0gcmVsVGV4dC50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiB7XG4gICAgYW1vdW50OiByZWxhdGl2ZU51bWJlcnNbcmVsVGV4dExvd2VyXSxcbiAgICBiZWhhdmlvcjogcmVsYXRpdmVCZWhhdmlvcltyZWxUZXh0TG93ZXJdIHx8IDBcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1R6Q29ycmVjdGlvbih0ek9mZnNldCwgb2xkVmFsdWUpIHtcbiAgdmFyIHJlVHpDb3JyZWN0aW9uTG9vc2UgPSAvKD86R01UKT8oWystXSkoXFxkKykoOj8pKFxcZHswLDJ9KS9pO1xuICB0ek9mZnNldCA9IHR6T2Zmc2V0ICYmIHR6T2Zmc2V0Lm1hdGNoKHJlVHpDb3JyZWN0aW9uTG9vc2UpO1xuXG4gIGlmICghdHpPZmZzZXQpIHtcbiAgICByZXR1cm4gb2xkVmFsdWU7XG4gIH1cblxuICB2YXIgc2lnbiA9IHR6T2Zmc2V0WzFdID09PSAnLScgPyAxIDogLTE7XG4gIHZhciBob3VycyA9ICt0ek9mZnNldFsyXTtcbiAgdmFyIG1pbnV0ZXMgPSArdHpPZmZzZXRbNF07XG5cbiAgaWYgKCF0ek9mZnNldFs0XSAmJiAhdHpPZmZzZXRbM10pIHtcbiAgICBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAlIDEwMCk7XG4gICAgaG91cnMgPSBNYXRoLmZsb29yKGhvdXJzIC8gMTAwKTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogKGhvdXJzICogNjAgKyBtaW51dGVzKTtcbn1cblxudmFyIGZvcm1hdHMgPSB7XG4gIHllc3RlcmRheToge1xuICAgIHJlZ2V4OiAvXnllc3RlcmRheS9pLFxuICAgIG5hbWU6ICd5ZXN0ZXJkYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHRoaXMucmQgLT0gMTtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpO1xuICAgIH1cbiAgfSxcblxuICBub3c6IHtcbiAgICByZWdleDogL15ub3cvaSxcbiAgICBuYW1lOiAnbm93J1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfSxcblxuICBub29uOiB7XG4gICAgcmVnZXg6IC9ebm9vbi9pLFxuICAgIG5hbWU6ICdub29uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnRpbWUoMTIsIDAsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICBtaWRuaWdodE9yVG9kYXk6IHtcbiAgICByZWdleDogL14obWlkbmlnaHR8dG9kYXkpL2ksXG4gICAgbmFtZTogJ21pZG5pZ2h0IHwgdG9kYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpO1xuICAgIH1cbiAgfSxcblxuICB0b21vcnJvdzoge1xuICAgIHJlZ2V4OiAvXnRvbW9ycm93L2ksXG4gICAgbmFtZTogJ3RvbW9ycm93JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJkICs9IDE7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZXN0YW1wOiB7XG4gICAgcmVnZXg6IC9eQCgtP1xcZCspL2ksXG4gICAgbmFtZTogJ3RpbWVzdGFtcCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB0aW1lc3RhbXApIHtcbiAgICAgIHRoaXMucnMgKz0gK3RpbWVzdGFtcDtcbiAgICAgIHRoaXMueSA9IDE5NzA7XG4gICAgICB0aGlzLm0gPSAwO1xuICAgICAgdGhpcy5kID0gMTtcbiAgICAgIHRoaXMuZGF0ZXMgPSAwO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnpvbmUoMCk7XG4gICAgfVxuICB9LFxuXG4gIGZpcnN0T3JMYXN0RGF5OiB7XG4gICAgcmVnZXg6IC9eKGZpcnN0fGxhc3QpIGRheSBvZi9pLFxuICAgIG5hbWU6ICdmaXJzdGRheW9mIHwgbGFzdGRheW9mJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSkge1xuICAgICAgaWYgKGRheS50b0xvd2VyQ2FzZSgpID09PSAnZmlyc3QnKSB7XG4gICAgICAgIHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGJhY2tPckZyb250T2Y6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKGJhY2t8ZnJvbnQpIG9mICcgKyByZUhvdXIyNCArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuICsgJz8nLCAnaScpLFxuICAgIG5hbWU6ICdiYWNrb2YgfCBmcm9udG9mJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHNpZGUsIGhvdXJzLCBtZXJpZGlhbikge1xuICAgICAgdmFyIGJhY2sgPSBzaWRlLnRvTG93ZXJDYXNlKCkgPT09ICdiYWNrJztcbiAgICAgIHZhciBob3VyID0gK2hvdXJzO1xuICAgICAgdmFyIG1pbnV0ZSA9IDE1O1xuXG4gICAgICBpZiAoIWJhY2spIHtcbiAgICAgICAgaG91ciAtPSAxO1xuICAgICAgICBtaW51dGUgPSA0NTtcbiAgICAgIH1cblxuICAgICAgaG91ciA9IHByb2Nlc3NNZXJpZGlhbihob3VyLCBtZXJpZGlhbik7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VGltZSgpICYmIHRoaXMudGltZShob3VyLCBtaW51dGUsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICB3ZWVrZGF5T2Y6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHRudW1iZXIgKyAnfCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICcoJyArIHJlRGF5ZnVsbCArICd8JyArIHJlRGF5YWJiciArICcpJyArIHJlU3BhY2UgKyAnb2YnLCAnaScpLFxuICAgIG5hbWU6ICd3ZWVrZGF5b2YnXG4gICAgLy8gdG9kb1xuICB9LFxuXG4gIG1zc3FsdGltZToge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiArICdbOi5dKFswLTldKyknICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAnbXNzcWx0aW1lJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjLCBtZXJpZGlhbikge1xuICAgICAgcmV0dXJuIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgK21pbnV0ZSwgK3NlY29uZCwgK2ZyYWMuc3Vic3RyKDAsIDMpKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZUxvbmcxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZSArICdbOi5dJyArIHJlU2Vjb25kbHogKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAndGltZWxvbmcxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICB0aW1lU2hvcnQxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZWx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ3RpbWVzaG9ydDEyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsIDAsIDApO1xuICAgIH1cbiAgfSxcblxuICB0aW1lVGlueTEyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZUhvdXIxMiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICd0aW1ldGlueTEyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCAwLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgc29hcDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICctJyArIHJlTW9udGhseiArICctJyArIHJlRGF5bHogKyAnVCcgKyByZUhvdXIyNGx6ICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHogKyByZUZyYWMgKyByZVR6Q29ycmVjdGlvbiArICc/JywgJ2knKSxcbiAgICBuYW1lOiAnc29hcCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhYywgdHpDb3JyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCArZnJhYy5zdWJzdHIoMCwgMykpICYmIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICB3ZGR4OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0nICsgcmVNb250aCArICctJyArIHJlRGF5ICsgJ1QnICsgcmVIb3VyMjQgKyAnOicgKyByZU1pbnV0ZSArICc6JyArIHJlU2Vjb25kKSxcbiAgICBuYW1lOiAnd2RkeCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGV4aWY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnOicgKyByZU1vbnRobHogKyAnOicgKyByZURheWx6ICsgJyAnICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6LCAnaScpLFxuICAgIG5hbWU6ICdleGlmJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgeG1sUnBjOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiArICdUJyArIHJlSG91cjI0ICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHopLFxuICAgIG5hbWU6ICd4bWxycGMnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICB4bWxScGNOb0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiArICdbVHRdJyArIHJlSG91cjI0ICsgcmVNaW51dGVseiArIHJlU2Vjb25kbHopLFxuICAgIG5hbWU6ICd4bWxycGNub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgY2xmOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICcvKCcgKyByZU1vbnRoQWJiciArICcpLycgKyByZVllYXI0ICsgJzonICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6ICsgcmVTcGFjZSArIHJlVHpDb3JyZWN0aW9uLCAnaScpLFxuICAgIG5hbWU6ICdjbGYnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhciwgaG91ciwgbWludXRlLCBzZWNvbmQsIHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCkgJiYgdGhpcy56b25lKHByb2Nlc3NUekNvcnJlY3Rpb24odHpDb3JyZWN0aW9uKSk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFsb25nOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCArIHJlRnJhYywgJ2knKSxcbiAgICBuYW1lOiAnaXNvODYwMWxvbmcnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsICtmcmFjLnN1YnN0cigwLCAzKSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVUZXh0dWFsOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoVGV4dCArICdbIC5cXFxcdC1dKicgKyByZURheSArICdbLC5zdG5kcmhcXFxcdCBdKycgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ2RhdGV0ZXh0dWFsJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcG9pbnRlZERhdGU0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbLlxcXFx0LV0nICsgcmVNb250aCArICdbLi1dJyArIHJlWWVhcjQpLFxuICAgIG5hbWU6ICdwb2ludGVkZGF0ZTQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBwb2ludGVkRGF0ZTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1suXFxcXHRdJyArIHJlTW9udGggKyAnXFxcXC4nICsgcmVZZWFyMiksXG4gICAgbmFtZTogJ3BvaW50ZWRkYXRlMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXksIG1vbnRoLCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVMb25nMjQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjQgKyAnWzouXScgKyByZU1pbnV0ZSArICdbOi5dJyArIHJlU2Vjb25kKSxcbiAgICBuYW1lOiAndGltZWxvbmcyNCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgcmVNb250aGx6ICsgcmVEYXlseiksXG4gICAgbmFtZTogJ2RhdGVub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcGd5ZG90ZDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICdcXFxcLj8nICsgcmVEYXlPZlllYXIpLFxuICAgIG5hbWU6ICdwZ3lkb3RkJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCAwLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVNob3J0MjQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjQgKyAnWzouXScgKyByZU1pbnV0ZSwgJ2knKSxcbiAgICBuYW1lOiAndGltZXNob3J0MjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKCtob3VyLCArbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgaXNvODYwMW5vQ29sb246IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjRseiArIHJlTWludXRlbHogKyByZVNlY29uZGx6LCAnaScpLFxuICAgIG5hbWU6ICdpc284NjAxbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFkYXRlU2xhc2g6IHtcbiAgICAvLyBldmVudGhvdWdoIHRoZSB0cmFpbGluZyBzbGFzaCBpcyBvcHRpb25hbCBpbiBQSFBcbiAgICAvLyBoZXJlIGl0J3MgbWFuZGF0b3J5IGFuZCBpbnB1dHMgd2l0aG91dCB0aGUgc2xhc2hcbiAgICAvLyBhcmUgaGFuZGxlZCBieSBkYXRlc2xhc2hcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLycgKyByZU1vbnRobHogKyAnLycgKyByZURheWx6ICsgJy8nKSxcbiAgICBuYW1lOiAnaXNvODYwMWRhdGVzbGFzaCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTbGFzaDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICcvJyArIHJlTW9udGggKyAnLycgKyByZURheSksXG4gICAgbmFtZTogJ2RhdGVzbGFzaCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGFtZXJpY2FuOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoICsgJy8nICsgcmVEYXkgKyAnLycgKyByZVllYXIpLFxuICAgIG5hbWU6ICdhbWVyaWNhbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGFtZXJpY2FuU2hvcnQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlTW9udGggKyAnLycgKyByZURheSksXG4gICAgbmFtZTogJ2FtZXJpY2Fuc2hvcnQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHRoaXMueSwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZ251RGF0ZVNob3J0T3JJc284NjAxZGF0ZTI6IHtcbiAgICAvLyBpc284NjAxZGF0ZTIgaXMgY29tcGxldGUgc3Vic2V0IG9mIGdudWRhdGVzaG9ydFxuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyICsgJy0nICsgcmVNb250aCArICctJyArIHJlRGF5KSxcbiAgICBuYW1lOiAnZ251ZGF0ZXNob3J0IHwgaXNvODYwMWRhdGUyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgaXNvODYwMWRhdGU0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0d2l0aFNpZ24gKyAnLScgKyByZU1vbnRobHogKyAnLScgKyByZURheWx6KSxcbiAgICBuYW1lOiAnaXNvODYwMWRhdGU0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZ251Tm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ150JyArIHJlSG91cjI0bHogKyByZU1pbnV0ZWx6LCAnaScpLFxuICAgIG5hbWU6ICdnbnVub2NvbG9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgdGhpcy5mKTtcbiAgICB9XG4gIH0sXG5cbiAgZ251RGF0ZVNob3J0ZXI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLScgKyByZU1vbnRoKSxcbiAgICBuYW1lOiAnZ251ZGF0ZXNob3J0ZXInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgcGdUZXh0UmV2ZXJzZToge1xuICAgIC8vIG5vdGU6IGFsbG93ZWQgeWVhcnMgYXJlIGZyb20gMzItOTk5OVxuICAgIC8vIHllYXJzIGJlbG93IDMyIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRheXMgaW4gZGF0ZWZ1bGxcbiAgICByZWdleDogUmVnRXhwKCdeJyArICcoXFxcXGR7Myw0fXxbNC05XVxcXFxkfDNbMi05XSktKCcgKyByZU1vbnRoQWJiciArICcpLScgKyByZURheWx6LCAnaScpLFxuICAgIG5hbWU6ICdwZ3RleHRyZXZlcnNlJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZUZ1bGw6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1sgXFxcXHQuLV0qJyArIHJlTW9udGhUZXh0ICsgJ1sgXFxcXHQuLV0qJyArIHJlWWVhciwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZWZ1bGwnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9EYXk6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlTW9udGhUZXh0ICsgJ1sgLlxcXFx0LV0qJyArIHJlWWVhcjQsICdpJyksXG4gICAgbmFtZTogJ2RhdGVub2RheScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksIDEpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9EYXlSZXY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnWyAuXFxcXHQtXSonICsgcmVNb250aFRleHQsICdpJyksXG4gICAgbmFtZTogJ2RhdGVub2RheXJldicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBsb29rdXBNb250aChtb250aCksIDEpO1xuICAgIH1cbiAgfSxcblxuICBwZ1RleHRTaG9ydDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14oJyArIHJlTW9udGhBYmJyICsgJyktJyArIHJlRGF5bHogKyAnLScgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ3BndGV4dHNob3J0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vWWVhcjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSonLCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm95ZWFyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb1llYXJSZXY6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF5ICsgJ1sgLlxcXFx0LV0qJyArIHJlTW9udGhUZXh0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm95ZWFycmV2JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGlzb1dlZWtEYXk6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLT9XJyArIHJlV2Vla09mWWVhciArICcoPzotPyhbMC03XSkpPycpLFxuICAgIG5hbWU6ICdpc293ZWVrZGF5IHwgaXNvd2VlaycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgICAgIGRheSA9IGRheSA/ICtkYXkgOiAxO1xuXG4gICAgICBpZiAoIXRoaXMueW1kKCt5ZWFyLCAwLCAxKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkYXkgb2Ygd2VlayBmb3IgSmFuIDFzdFxuICAgICAgdmFyIGRheU9mV2VlayA9IG5ldyBEYXRlKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpLmdldERheSgpO1xuXG4gICAgICAvLyBhbmQgdXNlIHRoZSBkYXkgdG8gZmlndXJlIG91dCB0aGUgb2Zmc2V0IGZvciBkYXkgMSBvZiB3ZWVrIDFcbiAgICAgIGRheU9mV2VlayA9IDAgLSAoZGF5T2ZXZWVrID4gNCA/IGRheU9mV2VlayAtIDcgOiBkYXlPZldlZWspO1xuXG4gICAgICB0aGlzLnJkICs9IGRheU9mV2VlayArICh3ZWVrIC0gMSkgKiA3ICsgZGF5O1xuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZVRleHQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHRudW1iZXIgKyAnfCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICcoJyArIHJlUmVsdGV4dHVuaXQgKyAnKScsICdpJyksXG4gICAgbmFtZTogJ3JlbGF0aXZldGV4dCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCByZWxWYWx1ZSwgcmVsVW5pdCkge1xuICAgICAgLy8gdG9kbzogaW1wbGVtZW50IGhhbmRsaW5nIG9mICd0aGlzIHRpbWUtdW5pdCdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgdmFyIF9sb29rdXBSZWxhdGl2ZSA9IGxvb2t1cFJlbGF0aXZlKHJlbFZhbHVlKSxcbiAgICAgICAgICBhbW91bnQgPSBfbG9va3VwUmVsYXRpdmUuYW1vdW50LFxuICAgICAgICAgIGJlaGF2aW9yID0gX2xvb2t1cFJlbGF0aXZlLmJlaGF2aW9yO1xuXG4gICAgICBzd2l0Y2ggKHJlbFVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgdGhpcy5ycyArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLnJpICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICB0aGlzLnJoICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodHMnOlxuICAgICAgICBjYXNlICdmb3J0aG5pZ2h0JzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodHMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogMTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQgKiA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgICAgdGhpcy5ybSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgdGhpcy5yeSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbic6Y2FzZSAnbW9uZGF5JzpcbiAgICAgICAgY2FzZSAndHVlJzpjYXNlICd0dWVzZGF5JzpcbiAgICAgICAgY2FzZSAnd2VkJzpjYXNlICd3ZWRuZXNkYXknOlxuICAgICAgICBjYXNlICd0aHUnOmNhc2UgJ3RodXJzZGF5JzpcbiAgICAgICAgY2FzZSAnZnJpJzpjYXNlICdmcmlkYXknOlxuICAgICAgICBjYXNlICdzYXQnOmNhc2UgJ3NhdHVyZGF5JzpcbiAgICAgICAgY2FzZSAnc3VuJzpjYXNlICdzdW5kYXknOlxuICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gbG9va3VwV2Vla2RheShyZWxVbml0LCA3KTtcbiAgICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICAgICAgdGhpcy5yZCArPSAoYW1vdW50ID4gMCA/IGFtb3VudCAtIDEgOiBhbW91bnQpICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vla2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZWtkYXlzJzpcbiAgICAgICAgICAvLyB0b2RvXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHJlbGF0aXZlOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXihbKy1dKilbIFxcXFx0XSooXFxcXGQrKScgKyByZVNwYWNlT3B0ICsgJygnICsgcmVSZWx0ZXh0dW5pdCArICd8d2VlayknLCAnaScpLFxuICAgIG5hbWU6ICdyZWxhdGl2ZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBzaWducywgcmVsVmFsdWUsIHJlbFVuaXQpIHtcbiAgICAgIHZhciBtaW51c2VzID0gc2lnbnMucmVwbGFjZSgvW14tXS9nLCAnJykubGVuZ3RoO1xuXG4gICAgICB2YXIgYW1vdW50ID0gK3JlbFZhbHVlICogTWF0aC5wb3coLTEsIG1pbnVzZXMpO1xuXG4gICAgICBzd2l0Y2ggKHJlbFVuaXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgdGhpcy5ycyArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLnJpICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICB0aGlzLnJoICs9IGFtb3VudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRuaWdodHMnOlxuICAgICAgICBjYXNlICdmb3J0aG5pZ2h0JzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodHMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogMTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgdGhpcy5yZCArPSBhbW91bnQgKiA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgICAgdGhpcy5ybSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgdGhpcy5yeSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbic6Y2FzZSAnbW9uZGF5JzpcbiAgICAgICAgY2FzZSAndHVlJzpjYXNlICd0dWVzZGF5JzpcbiAgICAgICAgY2FzZSAnd2VkJzpjYXNlICd3ZWRuZXNkYXknOlxuICAgICAgICBjYXNlICd0aHUnOmNhc2UgJ3RodXJzZGF5JzpcbiAgICAgICAgY2FzZSAnZnJpJzpjYXNlICdmcmlkYXknOlxuICAgICAgICBjYXNlICdzYXQnOmNhc2UgJ3NhdHVyZGF5JzpcbiAgICAgICAgY2FzZSAnc3VuJzpjYXNlICdzdW5kYXknOlxuICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gbG9va3VwV2Vla2RheShyZWxVbml0LCA3KTtcbiAgICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICAgICAgdGhpcy5yZCArPSAoYW1vdW50ID4gMCA/IGFtb3VudCAtIDEgOiBhbW91bnQpICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vla2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZWtkYXlzJzpcbiAgICAgICAgICAvLyB0b2RvXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRheVRleHQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZURheXRleHQgKyAnKScsICdpJyksXG4gICAgbmFtZTogJ2RheXRleHQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5VGV4dCkge1xuICAgICAgdGhpcy5yZXNldFRpbWUoKTtcbiAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkoZGF5VGV4dCwgMCk7XG5cbiAgICAgIGlmICh0aGlzLndlZWtkYXlCZWhhdmlvciAhPT0gMikge1xuICAgICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHJlbGF0aXZlVGV4dFdlZWs6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZVJlbHRleHR0ZXh0ICsgJyknICsgcmVTcGFjZSArICd3ZWVrJywgJ2knKSxcbiAgICBuYW1lOiAncmVsYXRpdmV0ZXh0d2VlaycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCByZWxUZXh0KSB7XG4gICAgICB0aGlzLndlZWtkYXlCZWhhdmlvciA9IDI7XG5cbiAgICAgIHN3aXRjaCAocmVsVGV4dC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ3RoaXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgdGhpcy5yZCArPSA3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgY2FzZSAncHJldmlvdXMnOlxuICAgICAgICAgIHRoaXMucmQgLT0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFOKHRoaXMud2Vla2RheSkpIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5ID0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW9udGhGdWxsT3JNb250aEFiYnI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZU1vbnRoRnVsbCArICd8JyArIHJlTW9udGhBYmJyICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdtb250aGZ1bGwgfCBtb250aGFiYnInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgdGhpcy5kKTtcbiAgICB9XG4gIH0sXG5cbiAgdHpDb3JyZWN0aW9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVR6Q29ycmVjdGlvbiwgJ2knKSxcbiAgICBuYW1lOiAndHpjb3JyZWN0aW9uJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sodHpDb3JyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lKHByb2Nlc3NUekNvcnJlY3Rpb24odHpDb3JyZWN0aW9uKSk7XG4gICAgfVxuICB9LFxuXG4gIGFnbzoge1xuICAgIHJlZ2V4OiAvXmFnby9pLFxuICAgIG5hbWU6ICdhZ28nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHRoaXMucnkgPSAtdGhpcy5yeTtcbiAgICAgIHRoaXMucm0gPSAtdGhpcy5ybTtcbiAgICAgIHRoaXMucmQgPSAtdGhpcy5yZDtcbiAgICAgIHRoaXMucmggPSAtdGhpcy5yaDtcbiAgICAgIHRoaXMucmkgPSAtdGhpcy5yaTtcbiAgICAgIHRoaXMucnMgPSAtdGhpcy5ycztcbiAgICAgIHRoaXMucmYgPSAtdGhpcy5yZjtcbiAgICB9XG4gIH0sXG5cbiAgZ251Tm9Db2xvbjI6IHtcbiAgICAvLyBzZWNvbmQgaW5zdGFuY2Ugb2YgZ251bm9jb2xvbiwgd2l0aG91dCBsZWFkaW5nICd0J1xuICAgIC8vIGl0J3MgZG93biBoZXJlLCBiZWNhdXNlIGl0IGlzIHZlcnkgZ2VuZXJpYyAoNCBkaWdpdHMgaW4gYSByb3cpXG4gICAgLy8gdGh1cyBjb25mbGljdHMgd2l0aCBtYW55IHJ1bGVzIGFib3ZlXG4gICAgLy8gb25seSB5ZWFyNCBzaG91bGQgY29tZSBhZnRlcndhcmRzXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZUhvdXIyNGx6ICsgcmVNaW51dGVseiwgJ2knKSxcbiAgICBuYW1lOiAnZ251bm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsIDAsIHRoaXMuZik7XG4gICAgfVxuICB9LFxuXG4gIHllYXI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0KSxcbiAgICBuYW1lOiAneWVhcjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhcikge1xuICAgICAgdGhpcy55ID0gK3llYXI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2hpdGVzcGFjZToge1xuICAgIHJlZ2V4OiAvXlsgLixcXHRdKy8sXG4gICAgbmFtZTogJ3doaXRlc3BhY2UnXG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxuXG4gIGFueToge1xuICAgIHJlZ2V4OiAvXltcXHNcXFNdKy8sXG4gICAgbmFtZTogJ2FueScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHJlc3VsdFByb3RvID0ge1xuICAvLyBkYXRlXG4gIHk6IE5hTixcbiAgbTogTmFOLFxuICBkOiBOYU4sXG4gIC8vIHRpbWVcbiAgaDogTmFOLFxuICBpOiBOYU4sXG4gIHM6IE5hTixcbiAgZjogTmFOLFxuXG4gIC8vIHJlbGF0aXZlIHNoaWZ0c1xuICByeTogMCxcbiAgcm06IDAsXG4gIHJkOiAwLFxuICByaDogMCxcbiAgcmk6IDAsXG4gIHJzOiAwLFxuICByZjogMCxcblxuICAvLyB3ZWVrZGF5IHJlbGF0ZWQgc2hpZnRzXG4gIHdlZWtkYXk6IE5hTixcbiAgd2Vla2RheUJlaGF2aW9yOiAwLFxuXG4gIC8vIGZpcnN0IG9yIGxhc3QgZGF5IG9mIG1vbnRoXG4gIC8vIDAgbm9uZSwgMSBmaXJzdCwgLTEgbGFzdFxuICBmaXJzdE9yTGFzdERheU9mTW9udGg6IDAsXG5cbiAgLy8gdGltZXpvbmUgY29ycmVjdGlvbiBpbiBtaW51dGVzXG4gIHo6IE5hTixcblxuICAvLyBjb3VudGVyc1xuICBkYXRlczogMCxcbiAgdGltZXM6IDAsXG4gIHpvbmVzOiAwLFxuXG4gIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgeW1kOiBmdW5jdGlvbiB5bWQoeSwgbSwgZCkge1xuICAgIGlmICh0aGlzLmRhdGVzID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZXMrKztcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMubSA9IG07XG4gICAgdGhpcy5kID0gZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgdGltZTogZnVuY3Rpb24gdGltZShoLCBpLCBzLCBmKSB7XG4gICAgaWYgKHRoaXMudGltZXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lcysrO1xuICAgIHRoaXMuaCA9IGg7XG4gICAgdGhpcy5pID0gaTtcbiAgICB0aGlzLnMgPSBzO1xuICAgIHRoaXMuZiA9IGY7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgcmVzZXRUaW1lOiBmdW5jdGlvbiByZXNldFRpbWUoKSB7XG4gICAgdGhpcy5oID0gMDtcbiAgICB0aGlzLmkgPSAwO1xuICAgIHRoaXMucyA9IDA7XG4gICAgdGhpcy5mID0gMDtcbiAgICB0aGlzLnRpbWVzID0gMDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICB6b25lOiBmdW5jdGlvbiB6b25lKG1pbnV0ZXMpIHtcbiAgICBpZiAodGhpcy56b25lcyA8PSAxKSB7XG4gICAgICB0aGlzLnpvbmVzKys7XG4gICAgICB0aGlzLnogPSBtaW51dGVzO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICB0b0RhdGU6IGZ1bmN0aW9uIHRvRGF0ZShyZWxhdGl2ZVRvKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXMgJiYgIXRoaXMudGltZXMpIHtcbiAgICAgIHRoaXMuaCA9IHRoaXMuaSA9IHRoaXMucyA9IHRoaXMuZiA9IDA7XG4gICAgfVxuXG4gICAgLy8gZmlsbCBob2xlc1xuICAgIGlmIChpc05hTih0aGlzLnkpKSB7XG4gICAgICB0aGlzLnkgPSByZWxhdGl2ZVRvLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMubSkpIHtcbiAgICAgIHRoaXMubSA9IHJlbGF0aXZlVG8uZ2V0TW9udGgoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5kKSkge1xuICAgICAgdGhpcy5kID0gcmVsYXRpdmVUby5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMuaCkpIHtcbiAgICAgIHRoaXMuaCA9IHJlbGF0aXZlVG8uZ2V0SG91cnMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5pKSkge1xuICAgICAgdGhpcy5pID0gcmVsYXRpdmVUby5nZXRNaW51dGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMucykpIHtcbiAgICAgIHRoaXMucyA9IHJlbGF0aXZlVG8uZ2V0U2Vjb25kcygpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmYpKSB7XG4gICAgICB0aGlzLmYgPSByZWxhdGl2ZVRvLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIH1cblxuICAgIC8vIGFkanVzdCBzcGVjaWFsIGVhcmx5XG4gICAgc3dpdGNoICh0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLmQgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHRoaXMuZCA9IDA7XG4gICAgICAgIHRoaXMubSArPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKHRoaXMud2Vla2RheSkpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUocmVsYXRpdmVUby5nZXRUaW1lKCkpO1xuICAgICAgZGF0ZS5zZXRGdWxsWWVhcih0aGlzLnksIHRoaXMubSwgdGhpcy5kKTtcbiAgICAgIGRhdGUuc2V0SG91cnModGhpcy5oLCB0aGlzLmksIHRoaXMucywgdGhpcy5mKTtcblxuICAgICAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG5cbiAgICAgIGlmICh0aGlzLndlZWtkYXlCZWhhdmlvciA9PT0gMikge1xuICAgICAgICAvLyBUbyBtYWtlIFwidGhpcyB3ZWVrXCIgd29yaywgd2hlcmUgdGhlIGN1cnJlbnQgZGF5IG9mIHdlZWsgaXMgYSBcInN1bmRheVwiXG4gICAgICAgIGlmIChkb3cgPT09IDAgJiYgdGhpcy53ZWVrZGF5ICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5ID0gLTY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUbyBtYWtlIFwic3VuZGF5IHRoaXMgd2Vla1wiIHdvcmssIHdoZXJlIHRoZSBjdXJyZW50IGRheSBvZiB3ZWVrIGlzIG5vdCBhIFwic3VuZGF5XCJcbiAgICAgICAgaWYgKHRoaXMud2Vla2RheSA9PT0gMCAmJiBkb3cgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndlZWtkYXkgPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kIC09IGRvdztcbiAgICAgICAgdGhpcy5kICs9IHRoaXMud2Vla2RheTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkaWZmID0gdGhpcy53ZWVrZGF5IC0gZG93O1xuXG4gICAgICAgIC8vIHNvbWUgUEhQIG1hZ2ljXG4gICAgICAgIGlmICh0aGlzLnJkIDwgMCAmJiBkaWZmIDwgMCB8fCB0aGlzLnJkID49IDAgJiYgZGlmZiA8PSAtdGhpcy53ZWVrZGF5QmVoYXZpb3IpIHtcbiAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53ZWVrZGF5ID49IDApIHtcbiAgICAgICAgICB0aGlzLmQgKz0gZGlmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmQgLT0gNyAtIChNYXRoLmFicyh0aGlzLndlZWtkYXkpIC0gZG93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2Vla2RheSA9IE5hTjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGp1c3QgcmVsYXRpdmVcbiAgICB0aGlzLnkgKz0gdGhpcy5yeTtcbiAgICB0aGlzLm0gKz0gdGhpcy5ybTtcbiAgICB0aGlzLmQgKz0gdGhpcy5yZDtcblxuICAgIHRoaXMuaCArPSB0aGlzLnJoO1xuICAgIHRoaXMuaSArPSB0aGlzLnJpO1xuICAgIHRoaXMucyArPSB0aGlzLnJzO1xuICAgIHRoaXMuZiArPSB0aGlzLnJmO1xuXG4gICAgdGhpcy5yeSA9IHRoaXMucm0gPSB0aGlzLnJkID0gMDtcbiAgICB0aGlzLnJoID0gdGhpcy5yaSA9IHRoaXMucnMgPSB0aGlzLnJmID0gMDtcblxuICAgIHZhciByZXN1bHQgPSBuZXcgRGF0ZShyZWxhdGl2ZVRvLmdldFRpbWUoKSk7XG4gICAgLy8gc2luY2UgRGF0ZSBjb25zdHJ1Y3RvciB0cmVhdHMgeWVhcnMgPD0gOTkgYXMgMTkwMCtcbiAgICAvLyBpdCBjYW4ndCBiZSB1c2VkLCB0aHVzIHRoaXMgd2VpcmQgd2F5XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpO1xuICAgIHJlc3VsdC5zZXRIb3Vycyh0aGlzLmgsIHRoaXMuaSwgdGhpcy5zLCB0aGlzLmYpO1xuXG4gICAgLy8gbm90ZTogdGhpcyBpcyBkb25lIHR3aWNlIGluIFBIUFxuICAgIC8vIGVhcmx5IHdoZW4gcHJvY2Vzc2luZyBzcGVjaWFsIHJlbGF0aXZlc1xuICAgIC8vIGFuZCBsYXRlXG4gICAgLy8gdG9kbzogY2hlY2sgaWYgdGhlIGxvZ2ljIGNhbiBiZSByZWR1Y2VkXG4gICAgLy8gdG8ganVzdCBvbmUgdGltZSBhY3Rpb25cbiAgICBzd2l0Y2ggKHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJlc3VsdC5zZXREYXRlKDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHJlc3VsdC5zZXRNb250aChyZXN1bHQuZ2V0TW9udGgoKSArIDEsIDApO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBhZGp1c3QgdGltZXpvbmVcbiAgICBpZiAoIWlzTmFOKHRoaXMueikgJiYgcmVzdWx0LmdldFRpbWV6b25lT2Zmc2V0KCkgIT09IHRoaXMueikge1xuICAgICAgcmVzdWx0LnNldFVUQ0Z1bGxZZWFyKHJlc3VsdC5nZXRGdWxsWWVhcigpLCByZXN1bHQuZ2V0TW9udGgoKSwgcmVzdWx0LmdldERhdGUoKSk7XG5cbiAgICAgIHJlc3VsdC5zZXRVVENIb3VycyhyZXN1bHQuZ2V0SG91cnMoKSwgcmVzdWx0LmdldE1pbnV0ZXMoKSArIHRoaXMueiwgcmVzdWx0LmdldFNlY29uZHMoKSwgcmVzdWx0LmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cnRvdGltZShzdHIsIG5vdykge1xuICAvLyAgICAgICBkaXNjdXNzIGF0OiBodHRwOi8vbG9jdXR1cy5pby9waHAvc3RydG90aW1lL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cDovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cDovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBBLiBNYXTDrWFzIFF1ZXphZGEgKGh0dHA6Ly9hbWF0aWFzcS5jb20pXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IHByZXV0ZXJcbiAgLy8gICAgICBpbXByb3ZlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gICAgICBpbXByb3ZlZCBieTogTWlya28gRmFiZXJcbiAgLy8gICAgICAgICBpbnB1dCBieTogRGF2aWRcbiAgLy8gICAgICBidWdmaXhlZCBieTogV2FnbmVyIEIuIFNvYXJlc1xuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBBcnR1ciBUY2hlcm55Y2hldlxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBTdGVwaGFuIELDtnNjaC1QbGVwZWxpdHMgKGh0dHA6Ly9naXRodWIuY29tL3BsZXBlKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBSYWZhxYIgS3VrYXdza2lcbiAgLy8gICAgICAgICAgIG5vdGUgMTogRXhhbXBsZXMgYWxsIGhhdmUgYSBmaXhlZCB0aW1lc3RhbXAgdG8gcHJldmVudFxuICAvLyAgICAgICAgICAgbm90ZSAxOiB0ZXN0cyB0byBmYWlsIGJlY2F1c2Ugb2YgdmFyaWFibGUgdGltZSh6b25lcylcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogc3RydG90aW1lKCcrMSBkYXknLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAxOiAxMTI5NzE5NjAwXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHN0cnRvdGltZSgnKzEgd2VlayAyIGRheXMgNCBob3VycyAyIHNlY29uZHMnLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAyOiAxMTMwNDI1MjAyXG4gIC8vICAgICAgICBleGFtcGxlIDM6IHN0cnRvdGltZSgnbGFzdCBtb250aCcsIDExMjk2MzMyMDApXG4gIC8vICAgICAgICByZXR1cm5zIDM6IDExMjcwNDEyMDBcbiAgLy8gICAgICAgIGV4YW1wbGUgNDogc3RydG90aW1lKCcyMDA5LTA1LTA0IDA4OjMwOjAwKzAwJylcbiAgLy8gICAgICAgIHJldHVybnMgNDogMTI0MTQyNTgwMFxuICAvLyAgICAgICAgZXhhbXBsZSA1OiBzdHJ0b3RpbWUoJzIwMDktMDUtMDQgMDg6MzA6MDArMDI6MDAnKVxuICAvLyAgICAgICAgcmV0dXJucyA1OiAxMjQxNDE4NjAwXG4gIGlmIChub3cgPT0gbnVsbCkge1xuICAgIG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICB9XG5cbiAgLy8gdGhlIHJ1bGUgb3JkZXIgaXMgdmVyeSBmcmFnaWxlXG4gIC8vIGFzIG1hbnkgZm9ybWF0cyBhcmUgc2ltaWxhciB0byBvdGhlcnNcbiAgLy8gc28gc21hbGwgY2hhbmdlIGNhbiBjYXVzZVxuICAvLyBpbnB1dCBtaXNpbnRlcnByZXRhdGlvblxuICB2YXIgcnVsZXMgPSBbZm9ybWF0cy55ZXN0ZXJkYXksIGZvcm1hdHMubm93LCBmb3JtYXRzLm5vb24sIGZvcm1hdHMubWlkbmlnaHRPclRvZGF5LCBmb3JtYXRzLnRvbW9ycm93LCBmb3JtYXRzLnRpbWVzdGFtcCwgZm9ybWF0cy5maXJzdE9yTGFzdERheSwgZm9ybWF0cy5iYWNrT3JGcm9udE9mLFxuICAvLyBmb3JtYXRzLndlZWtkYXlPZiwgLy8gbm90IHlldCBpbXBsZW1lbnRlZFxuICBmb3JtYXRzLm1zc3FsdGltZSwgZm9ybWF0cy50aW1lTG9uZzEyLCBmb3JtYXRzLnRpbWVTaG9ydDEyLCBmb3JtYXRzLnRpbWVUaW55MTIsIGZvcm1hdHMuc29hcCwgZm9ybWF0cy53ZGR4LCBmb3JtYXRzLmV4aWYsIGZvcm1hdHMueG1sUnBjLCBmb3JtYXRzLnhtbFJwY05vQ29sb24sIGZvcm1hdHMuY2xmLCBmb3JtYXRzLmlzbzg2MDFsb25nLCBmb3JtYXRzLmRhdGVUZXh0dWFsLCBmb3JtYXRzLnBvaW50ZWREYXRlNCwgZm9ybWF0cy5wb2ludGVkRGF0ZTIsIGZvcm1hdHMudGltZUxvbmcyNCwgZm9ybWF0cy5kYXRlTm9Db2xvbiwgZm9ybWF0cy5wZ3lkb3RkLCBmb3JtYXRzLnRpbWVTaG9ydDI0LCBmb3JtYXRzLmlzbzg2MDFub0NvbG9uLFxuICAvLyBpc284NjAxZGF0ZVNsYXNoIG5lZWRzIHRvIGNvbWUgYmVmb3JlIGRhdGVTbGFzaFxuICBmb3JtYXRzLmlzbzg2MDFkYXRlU2xhc2gsIGZvcm1hdHMuZGF0ZVNsYXNoLCBmb3JtYXRzLmFtZXJpY2FuLCBmb3JtYXRzLmFtZXJpY2FuU2hvcnQsIGZvcm1hdHMuZ251RGF0ZVNob3J0T3JJc284NjAxZGF0ZTIsIGZvcm1hdHMuaXNvODYwMWRhdGU0LCBmb3JtYXRzLmdudU5vQ29sb24sIGZvcm1hdHMuZ251RGF0ZVNob3J0ZXIsIGZvcm1hdHMucGdUZXh0UmV2ZXJzZSwgZm9ybWF0cy5kYXRlRnVsbCwgZm9ybWF0cy5kYXRlTm9EYXksIGZvcm1hdHMuZGF0ZU5vRGF5UmV2LCBmb3JtYXRzLnBnVGV4dFNob3J0LCBmb3JtYXRzLmRhdGVOb1llYXIsIGZvcm1hdHMuZGF0ZU5vWWVhclJldiwgZm9ybWF0cy5pc29XZWVrRGF5LCBmb3JtYXRzLnJlbGF0aXZlVGV4dCwgZm9ybWF0cy5yZWxhdGl2ZSwgZm9ybWF0cy5kYXlUZXh0LCBmb3JtYXRzLnJlbGF0aXZlVGV4dFdlZWssIGZvcm1hdHMubW9udGhGdWxsT3JNb250aEFiYnIsIGZvcm1hdHMudHpDb3JyZWN0aW9uLCBmb3JtYXRzLmFnbywgZm9ybWF0cy5nbnVOb0NvbG9uMiwgZm9ybWF0cy55ZWFyNCxcbiAgLy8gbm90ZTogdGhlIHR3byBydWxlcyBiZWxvd1xuICAvLyBzaG91bGQgYWx3YXlzIGNvbWUgbGFzdFxuICBmb3JtYXRzLndoaXRlc3BhY2UsIGZvcm1hdHMuYW55XTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShyZXN1bHRQcm90byk7XG5cbiAgd2hpbGUgKHN0ci5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJ1bGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGZvcm1hdCA9IHJ1bGVzW2ldO1xuXG4gICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goZm9ybWF0LnJlZ2V4KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIGNhcmUgb25seSBhYm91dCBmYWxzZSByZXN1bHRzLiBJZ25vcmUgb3RoZXIgdmFsdWVzXG4gICAgICAgIGlmIChmb3JtYXQuY2FsbGJhY2sgJiYgZm9ybWF0LmNhbGxiYWNrLmFwcGx5KHJlc3VsdCwgbWF0Y2gpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGguZmxvb3IocmVzdWx0LnRvRGF0ZShuZXcgRGF0ZShub3cgKiAxMDAwKSkgLyAxMDAwKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJ0b3RpbWUuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaV9nZXQodmFybmFtZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2luaV9nZXQvXG4gIC8vIG9yaWdpbmFsIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogVGhlIGluaSB2YWx1ZXMgbXVzdCBiZSBzZXQgYnkgaW5pX3NldCBvciBtYW51YWxseSB3aXRoaW4gYW4gaW5pIGZpbGVcbiAgLy8gICBleGFtcGxlIDE6IGluaV9zZXQoJ2RhdGUudGltZXpvbmUnLCAnQXNpYS9Ib25nX0tvbmcnKVxuICAvLyAgIGV4YW1wbGUgMTogaW5pX2dldCgnZGF0ZS50aW1lem9uZScpXG4gIC8vICAgcmV0dXJucyAxOiAnQXNpYS9Ib25nX0tvbmcnXG5cbiAgdmFyICRnbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgJGdsb2JhbC4kbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXMgfHwge307XG4gIHZhciAkbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXM7XG4gICRsb2N1dHVzLnBocCA9ICRsb2N1dHVzLnBocCB8fCB7fTtcbiAgJGxvY3V0dXMucGhwLmluaSA9ICRsb2N1dHVzLnBocC5pbmkgfHwge307XG5cbiAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0gJiYgJGxvY3V0dXMucGhwLmluaVt2YXJuYW1lXS5sb2NhbF92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuICRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pX2dldC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL3N0cmxlbi9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHA6Ly9rdnouaW8pXG4gIC8vIGltcHJvdmVkIGJ5OiBTYWtpbW9yaVxuICAvLyBpbXByb3ZlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cDovL2t2ei5pbylcbiAgLy8gICAgaW5wdXQgYnk6IEtpcmsgU3Ryb2JlY2tcbiAgLy8gYnVnZml4ZWQgYnk6IE9ubm8gTWFyc21hbiAoaHR0cHM6Ly90d2l0dGVyLmNvbS9vbm5vbWFyc21hbilcbiAgLy8gIHJldmlzZWQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgbm90ZSAxOiBNYXkgbG9vayBsaWtlIG92ZXJraWxsLCBidXQgaW4gb3JkZXIgdG8gYmUgdHJ1bHkgZmFpdGhmdWwgdG8gaGFuZGxpbmcgYWxsIFVuaWNvZGVcbiAgLy8gICAgICBub3RlIDE6IGNoYXJhY3RlcnMgYW5kIHRvIHRoaXMgZnVuY3Rpb24gaW4gUEhQIHdoaWNoIGRvZXMgbm90IGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXNcbiAgLy8gICAgICBub3RlIDE6IGJ1dCBjb3VudHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBzb21ldGhpbmcgbGlrZSB0aGlzIGlzIHJlYWxseSBuZWNlc3NhcnkuXG4gIC8vICAgZXhhbXBsZSAxOiBzdHJsZW4oJ0tldmluIHZhbiBab25uZXZlbGQnKVxuICAvLyAgIHJldHVybnMgMTogMTlcbiAgLy8gICBleGFtcGxlIDI6IGluaV9zZXQoJ3VuaWNvZGUuc2VtYW50aWNzJywgJ29uJylcbiAgLy8gICBleGFtcGxlIDI6IHN0cmxlbignQVxcdWQ4N2VcXHVkYzA0WicpXG4gIC8vICAgcmV0dXJucyAyOiAzXG5cbiAgdmFyIHN0ciA9IHN0cmluZyArICcnO1xuXG4gIHZhciBpbmlWYWwgPSAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnID8gcmVxdWlyZSgnLi4vaW5mby9pbmlfZ2V0JykoJ3VuaWNvZGUuc2VtYW50aWNzJykgOiB1bmRlZmluZWQpIHx8ICdvZmYnO1xuICBpZiAoaW5pVmFsID09PSAnb2ZmJykge1xuICAgIHJldHVybiBzdHIubGVuZ3RoO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIgbGd0aCA9IDA7XG5cbiAgdmFyIGdldFdob2xlQ2hhciA9IGZ1bmN0aW9uIGdldFdob2xlQ2hhcihzdHIsIGkpIHtcbiAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIHZhciBuZXh0ID0gJyc7XG4gICAgdmFyIHByZXYgPSAnJztcbiAgICBpZiAoY29kZSA+PSAweEQ4MDAgJiYgY29kZSA8PSAweERCRkYpIHtcbiAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlIChjb3VsZCBjaGFuZ2UgbGFzdCBoZXggdG8gMHhEQjdGIHRvXG4gICAgICAvLyB0cmVhdCBoaWdoIHByaXZhdGUgc3Vycm9nYXRlcyBhcyBzaW5nbGUgY2hhcmFjdGVycylcbiAgICAgIGlmIChzdHIubGVuZ3RoIDw9IGkgKyAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGlnaCBzdXJyb2dhdGUgd2l0aG91dCBmb2xsb3dpbmcgbG93IHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgbmV4dCA9IHN0ci5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgIGlmIChuZXh0IDwgMHhEQzAwIHx8IG5leHQgPiAweERGRkYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaWdoIHN1cnJvZ2F0ZSB3aXRob3V0IGZvbGxvd2luZyBsb3cgc3Vycm9nYXRlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyLmNoYXJBdChpKSArIHN0ci5jaGFyQXQoaSArIDEpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA+PSAweERDMDAgJiYgY29kZSA8PSAweERGRkYpIHtcbiAgICAgIC8vIExvdyBzdXJyb2dhdGVcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTG93IHN1cnJvZ2F0ZSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgcHJldiA9IHN0ci5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICAgIGlmIChwcmV2IDwgMHhEODAwIHx8IHByZXYgPiAweERCRkYpIHtcbiAgICAgICAgLy8gKGNvdWxkIGNoYW5nZSBsYXN0IGhleCB0byAweERCN0YgdG8gdHJlYXQgaGlnaCBwcml2YXRlIHN1cnJvZ2F0ZXNcbiAgICAgICAgLy8gYXMgc2luZ2xlIGNoYXJhY3RlcnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTG93IHN1cnJvZ2F0ZSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgLy8gV2UgY2FuIHBhc3Mgb3ZlciBsb3cgc3Vycm9nYXRlcyBub3cgYXMgdGhlIHNlY29uZFxuICAgICAgLy8gY29tcG9uZW50IGluIGEgcGFpciB3aGljaCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdHIuY2hhckF0KGkpO1xuICB9O1xuXG4gIGZvciAoaSA9IDAsIGxndGggPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGdldFdob2xlQ2hhcihzdHIsIGkpID09PSBmYWxzZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIEFkYXB0IHRoaXMgbGluZSBhdCB0aGUgdG9wIG9mIGFueSBsb29wLCBwYXNzaW5nIGluIHRoZSB3aG9sZSBzdHJpbmcgYW5kXG4gICAgLy8gdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGFuZCByZXR1cm5pbmcgYSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgY2hhcmFjdGVyO1xuICAgIC8vIHB1cnBvc2UgaXMgdG8gdHJlYXQgdGhlIGZpcnN0IHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciBhcyB0aGUgd2hvbGUgY2hhcmFjdGVyIGFuZCB0aGVuXG4gICAgLy8gaWdub3JlIHRoZSBzZWNvbmQgcGFydFxuICAgIGxndGgrKztcbiAgfVxuXG4gIHJldHVybiBsZ3RoO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmxlbi5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNfbnVtZXJpYyhtaXhlZFZhcikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAvLyAgZGlzY3VzcyBhdDogaHR0cDovL2xvY3V0dXMuaW8vcGhwL2lzX251bWVyaWMvXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogRGF2aWRcbiAgLy8gaW1wcm92ZWQgYnk6IHRhaXRoXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBUaW0gZGUgS29uaW5nXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBXZWJEZXZIb2JvIChodHRwOi8vd2ViZGV2aG9iby5ibG9nc3BvdC5jb20vKVxuICAvLyBidWdmaXhlZCBieTogQnJldHQgWmFtaXIgKGh0dHA6Ly9icmV0dC16YW1pci5tZSlcbiAgLy8gYnVnZml4ZWQgYnk6IERlbmlzIENoZW51IChodHRwOi8vc2hub3VsbGUubmV0KVxuICAvLyAgIGV4YW1wbGUgMTogaXNfbnVtZXJpYygxODYuMzEpXG4gIC8vICAgcmV0dXJucyAxOiB0cnVlXG4gIC8vICAgZXhhbXBsZSAyOiBpc19udW1lcmljKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDI6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSAzOiBpc19udW1lcmljKCcgKzE4Ni4zMWUyJylcbiAgLy8gICByZXR1cm5zIDM6IHRydWVcbiAgLy8gICBleGFtcGxlIDQ6IGlzX251bWVyaWMoJycpXG4gIC8vICAgcmV0dXJucyA0OiBmYWxzZVxuICAvLyAgIGV4YW1wbGUgNTogaXNfbnVtZXJpYyhbXSlcbiAgLy8gICByZXR1cm5zIDU6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSA2OiBpc19udW1lcmljKCcxICcpXG4gIC8vICAgcmV0dXJucyA2OiBmYWxzZVxuXG4gIHZhciB3aGl0ZXNwYWNlID0gWycgJywgJ1xcbicsICdcXHInLCAnXFx0JywgJ1xcZicsICdcXHgwYicsICdcXHhhMCcsICdcXHUyMDAwJywgJ1xcdTIwMDEnLCAnXFx1MjAwMicsICdcXHUyMDAzJywgJ1xcdTIwMDQnLCAnXFx1MjAwNScsICdcXHUyMDA2JywgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAwQicsICdcXHUyMDI4JywgJ1xcdTIwMjknLCAnXFx1MzAwMCddLmpvaW4oJycpO1xuXG4gIC8vIEB0b2RvOiBCcmVhayB0aGlzIHVwIHVzaW5nIG1hbnkgc2luZ2xlIGNvbmRpdGlvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIHJldHVybiAodHlwZW9mIG1peGVkVmFyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWl4ZWRWYXIgPT09ICdzdHJpbmcnICYmIHdoaXRlc3BhY2UuaW5kZXhPZihtaXhlZFZhci5zbGljZSgtMSkpID09PSAtMSkgJiYgbWl4ZWRWYXIgIT09ICcnICYmICFpc05hTihtaXhlZFZhcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNfbnVtZXJpYy5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIExhcmF2ZWwgSmF2YXNjcmlwdCBWYWxpZGF0aW9uXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Byb2VuZ3NvZnQvbGFyYXZlbC1qc3ZhbGlkYXRpb25cbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdmFsaWRhdG9yc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNyBQcm9lbmdzb2Z0XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgc3RybGVuIGZyb20gJ2xvY3V0dXMvcGhwL3N0cmluZ3Mvc3RybGVuJztcbmltcG9ydCBhcnJheV9kaWZmIGZyb20gJ2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYnO1xuaW1wb3J0IHN0cnRvdGltZSBmcm9tICdsb2N1dHVzL3BocC9kYXRldGltZS9zdHJ0b3RpbWUnO1xuaW1wb3J0IGlzX251bWVyaWMgZnJvbSAnbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMnO1xuXG4kLmV4dGVuZCh0cnVlLCBsYXJhdmVsVmFsaWRhdGlvbiwge1xuXG4gICAgaGVscGVyczoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1lcmljIHJ1bGVzXG4gICAgICAgICAqL1xuICAgICAgICBudW1lcmljUnVsZXM6IFsnSW50ZWdlcicsICdOdW1lcmljJ10sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGZpbGUgaW5mb3JtYXRpb24gZnJvbSBmaWxlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZmllbGRPYmpcbiAgICAgICAgICogQHBhcmFtIGluZGV4XG4gICAgICAgICAqIEByZXR1cm5zIHt7ZmlsZTogKiwgZXh0ZW5zaW9uOiBzdHJpbmcsIHNpemU6IG51bWJlcn19XG4gICAgICAgICAqL1xuICAgICAgICBmaWxlaW5mbzogZnVuY3Rpb24gKGZpZWxkT2JqLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIEZpbGVOYW1lID0gZmllbGRPYmoudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoIGZpZWxkT2JqLmZpbGVzICE9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRPYmouZmlsZXNbaW5kZXhdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb246IEZpbGVOYW1lLnN1YnN0cihGaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWVsZE9iai5maWxlc1tpbmRleF0uc2l6ZSAvIDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWVsZE9iai5maWxlc1tpbmRleF0udHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3RvcnMgZm9yIHRoIHNwZWNpZmllZCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVzXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShuYW1lcykpICB7XG4gICAgICAgICAgICAgICAgbmFtZXMgPSBbbmFtZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goXCJbbmFtZT0nXCIgKyBuYW1lc1tpXSArIFwiJ11cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3Iuam9pbigpO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIG51bWVyaWMgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTnVtZXJpY1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUnVsZXMoZWxlbWVudCwgdGhpcy5udW1lcmljUnVsZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyBwYXNzZWQgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBydWxlc1xuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCwgcnVsZXMpIHtcblxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9ICQuZGF0YShlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdmFyIGxpc3RSdWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdmFsaWRhdG9yLmFycmF5UnVsZXNDYWNoZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGVbZWxlbWVudC5uYW1lXSwgZnVuY3Rpb24gKGluZGV4LCBhcnJheVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2goYXJyYXlSdWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gdmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2godmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJC5lYWNoKGxpc3RSdWxlcywgZnVuY3Rpb24oaW5kZXgsb2JqUnVsZXMpe1xuICAgICAgICAgICAgICAgIGlmICgnbGFyYXZlbFZhbGlkYXRpb24nIGluIG9ialJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcnVsZXM9b2JqUnVsZXMubGFyYXZlbFZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3J1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KF9ydWxlc1tpXVswXSxydWxlcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiB0aGUgc3RyaW5nIGxlbmd0aCB1c2luZyBQSFAgZnVuY3Rpb24uXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJsZW4ucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cmxlbi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgc3RybGVuOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RybGVuKHN0cmluZyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGRlcGVuZGluZyBvZiBoaXMgdHlwZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9ialxuICAgICAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHJldHVybnMgaW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiBnZXRTaXplKG9iaiwgZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTnVtZXJpY1J1bGVzKGVsZW1lbnQpICYmIHRoaXMuaXNfbnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGguZmxvb3IodGhpcy5maWxlaW5mbyhlbGVtZW50KS5zaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuc3RybGVuKHZhbHVlKSk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHNwZWNpZmllZCBydWxlIGZyb20gZWxlbWVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJ1bGVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXRMYXJhdmVsVmFsaWRhdGlvbjogZnVuY3Rpb24ocnVsZSwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAkLmVhY2goJC52YWxpZGF0b3Iuc3RhdGljUnVsZXMoZWxlbWVudCksIGZ1bmN0aW9uKGtleSwgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5PT09XCJsYXJhdmVsVmFsaWRhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChydWxlcywgZnVuY3Rpb24gKGksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF09PT1ydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBoZSB0aW1lc3RhbXAgb2YgdmFsdWUgcGFzc2VkIHVzaW5nIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdCBpbiBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxpbnR9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZVRpbWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBmbXQgPSBuZXcgRGF0ZUZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZVJ1bGUgPSB0aGlzLmdldExhcmF2ZWxWYWxpZGF0aW9uKCdEYXRlRm9ybWF0JywgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlUnVsZVsxXVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGltZVZhbHVlID0gdGhpcy5zdHJ0b3RpbWUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lVmFsdWUgPSBmbXQucGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVZhbHVlID0gTWF0aC5yb3VuZCgodGltZVZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgYSBnaXZlbiBkYXRlIGFnYWluc3QgYW5vdGhlciB1c2luZyBhbiBvcGVyYXRvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbGlkYXRvclxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gb3BlcmF0b3JcbiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNvbXBhcmVEYXRlczogZnVuY3Rpb24gKHZhbGlkYXRvciwgdmFsdWUsIGVsZW1lbnQsIHBhcmFtcywgb3BlcmF0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHRpbWVDb21wYXJlID0gcGFyc2VGbG9hdChwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4odGltZUNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZGVwZW5kZW50RWxlbWVudCh2YWxpZGF0b3IsIGVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUNvbXBhcmUgPSB0aGlzLnBhcnNlVGltZSh2YWxpZGF0b3IuZWxlbWVudFZhbHVlKHRhcmdldCksIHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSB0aGlzLnBhcnNlVGltZSh2YWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGltZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlIDwgdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWUgPD0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA9PT0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA+IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlID49IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvcGVyYXRvci4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBpbnRlbGxpZ2VudGx5IGd1ZXNzIHRoZSBkYXRlIGJ5IGNsb3NlbHkgbWF0Y2hpbmcgdGhlIHNwZWNpZmljIGZvcm1hdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlXG4gICAgICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBndWVzc0RhdGU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZm10ID0gbmV3IERhdGVGb3JtYXR0ZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBmbXQuZ3Vlc3NEYXRlKHZhbHVlLCBmb3JtYXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgVW5peCB0aW1lc3RhbXAgYmFzZWQgb24gUEhQIGZ1bmN0aW9uIHN0cm90b3RpbWUuXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lcy9mdW5jdGlvbi5zdHJ0b3RpbWUucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cnRvdGltZS9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHRleHRcbiAgICAgICAgICogQHBhcmFtIG5vd1xuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgICAgICovXG4gICAgICAgIHN0cnRvdGltZTogZnVuY3Rpb24gKHRleHQsIG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cnRvdGltZSh0ZXh0LCBub3cpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgaWYgdmFsdWUgaXMgbnVtZXJpYy5cbiAgICAgICAgICogaHR0cDovL3BocC5uZXQvbWFudWFsL2VzL3Zhci5pc19udW1lcmljLnBocFxuICAgICAgICAgKiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9pc19udW1lcmljL1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbWl4ZWRfdmFyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAgICAgKi9cbiAgICAgICAgaXNfbnVtZXJpYzogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzX251bWVyaWMobWl4ZWRfdmFyKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBvZiB0eXBlIEFycmF5LlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5I1BvbHlmaWxsXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBhcmdcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBpc0FycmF5OiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBBcnJheSBkaWZmIGJhc2VkIG9uIFBIUCBmdW5jdGlvbiBhcnJheV9kaWZmLlxuICAgICAgICAgKiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZXMvZnVuY3Rpb24uYXJyYXlfZGlmZi5waHBcbiAgICAgICAgICogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvYXJyYXlfZGlmZi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheURpZmY6IGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlfZGlmZihhcnIxLCBhcnIyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgd2hldGhlciB0d28gYXJyYXlzIGFyZSBlcXVhbCB0byBvbmUgYW5vdGhlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheUVxdWFsczogZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShhcnIxKSB8fCAhIHRoaXMuaXNBcnJheShhcnIyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICQuaXNFbXB0eU9iamVjdCh0aGlzLmFycmF5RGlmZihhcnIxLCBhcnIyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2VzIGVsZW1lbnQgZGVwZW5kYW50IGZyb20gb3RoZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWxpZGF0b3JcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50OiBmdW5jdGlvbih2YWxpZGF0b3IsIGVsZW1lbnQsIG5hbWUpIHtcblxuICAgICAgICAgICAgdmFyIGVsPXZhbGlkYXRvci5maW5kQnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIGVsWzBdIT09dW5kZWZpbmVkICAmJiB2YWxpZGF0b3Iuc2V0dGluZ3Mub25mb2N1c291dCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSAnYmx1cic7XG4gICAgICAgICAgICAgICAgaWYgKGVsWzBdLnRhZ05hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxbMF0udHlwZSA9PT0gJ3JhZGlvJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdjbGljayc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lID0gJy52YWxpZGF0ZS1sYXJhdmVsVmFsaWRhdGlvbic7XG4gICAgICAgICAgICAgICAgZWwub2ZmKCBydWxlTmFtZSApXG4gICAgICAgICAgICAgICAgICAgIC5vZmYoZXZlbnQgKyBydWxlTmFtZSArICctJyArIGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCBldmVudCArIHJ1bGVOYW1lICsgJy0nICsgZWxlbWVudC5uYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoIGVsZW1lbnQgKS52YWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsWzBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgZXJyb3IgQWpheCByZXNwb25zZSBhbmQgZ2V0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmVzcG9uc2UgPSBbJ1dob29wcywgbG9va3MgbGlrZSBzb21ldGhpbmcgd2VudCB3cm9uZy4nXTtcbiAgICAgICAgICAgIGlmICgncmVzcG9uc2VUZXh0JyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dC5tYXRjaCgvPGgxXFxzKj4oLiopPFxcL2gxXFxzKj4vaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheShlcnJvck1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmVzcG9uc2UgPSBbZXJyb3JNc2dbMV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRXNjYXBlIHN0cmluZyB0byB1c2UgYXMgUmVndWxhciBFeHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gc3RyXG4gICAgICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhdGUgUmVnRXhwIGZyb20gd2lsZGNhcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICAgICAgICovXG4gICAgICAgIHJlZ2V4RnJvbVdpbGRjYXJkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdChcIlsqXVwiKTtcbiAgICAgICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlZ2V4cFBhcnRzID0gbmFtZVBhcnRzLm1hcChmdW5jdGlvbihjdXJyZW50VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAnWyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gJ10nICtjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhcmF2ZWxWYWxpZGF0aW9uLmhlbHBlcnMuZXNjYXBlUmVnRXhwKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nK3JlZ2V4cFBhcnRzLmpvaW4oJ1teXFxcXF1dKicpKyckJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lcmdlIGFkZGl0aW9uYWwgbGFyYXZlbCB2YWxpZGF0aW9uIHJ1bGVzIGludG8gdGhlIGN1cnJlbnQgcnVsZSBzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxlc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UnVsZXNcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG1lcmdlUnVsZXM6IGZ1bmN0aW9uIChydWxlcywgbmV3UnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBydWxlc0xpc3QgPSB7XG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb24gfHwgW10sXG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uUmVtb3RlJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb25SZW1vdGUgfHwgW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNMaXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBydWxlc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcnVsZXNba2V5XSA9IHJ1bGVzW2tleV0uY29uY2F0KHJ1bGVzTGlzdFtrZXldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Timezone Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n helpers: {\n\n /**\n * Check if the specified timezone is valid.\n *\n * @param value\n * @returns {boolean}\n */\n isTimezone: function (value) {\n\n var timezones={\n \"africa\": [\n \"abidjan\",\n \"accra\",\n \"addis_ababa\",\n \"algiers\",\n \"asmara\",\n \"bamako\",\n \"bangui\",\n \"banjul\",\n \"bissau\",\n \"blantyre\",\n \"brazzaville\",\n \"bujumbura\",\n \"cairo\",\n \"casablanca\",\n \"ceuta\",\n \"conakry\",\n \"dakar\",\n \"dar_es_salaam\",\n \"djibouti\",\n \"douala\",\n \"el_aaiun\",\n \"freetown\",\n \"gaborone\",\n \"harare\",\n \"johannesburg\",\n \"juba\",\n \"kampala\",\n \"khartoum\",\n \"kigali\",\n \"kinshasa\",\n \"lagos\",\n \"libreville\",\n \"lome\",\n \"luanda\",\n \"lubumbashi\",\n \"lusaka\",\n \"malabo\",\n \"maputo\",\n \"maseru\",\n \"mbabane\",\n \"mogadishu\",\n \"monrovia\",\n \"nairobi\",\n \"ndjamena\",\n \"niamey\",\n \"nouakchott\",\n \"ouagadougou\",\n \"porto-novo\",\n \"sao_tome\",\n \"tripoli\",\n \"tunis\",\n \"windhoek\"\n ],\n \"america\": [\n \"adak\",\n \"anchorage\",\n \"anguilla\",\n \"antigua\",\n \"araguaina\",\n \"argentina\\/buenos_aires\",\n \"argentina\\/catamarca\",\n \"argentina\\/cordoba\",\n \"argentina\\/jujuy\",\n \"argentina\\/la_rioja\",\n \"argentina\\/mendoza\",\n \"argentina\\/rio_gallegos\",\n \"argentina\\/salta\",\n \"argentina\\/san_juan\",\n \"argentina\\/san_luis\",\n \"argentina\\/tucuman\",\n \"argentina\\/ushuaia\",\n \"aruba\",\n \"asuncion\",\n \"atikokan\",\n \"bahia\",\n \"bahia_banderas\",\n \"barbados\",\n \"belem\",\n \"belize\",\n \"blanc-sablon\",\n \"boa_vista\",\n \"bogota\",\n \"boise\",\n \"cambridge_bay\",\n \"campo_grande\",\n \"cancun\",\n \"caracas\",\n \"cayenne\",\n \"cayman\",\n \"chicago\",\n \"chihuahua\",\n \"costa_rica\",\n \"creston\",\n \"cuiaba\",\n \"curacao\",\n \"danmarkshavn\",\n \"dawson\",\n \"dawson_creek\",\n \"denver\",\n \"detroit\",\n \"dominica\",\n \"edmonton\",\n \"eirunepe\",\n \"el_salvador\",\n \"fortaleza\",\n \"glace_bay\",\n \"godthab\",\n \"goose_bay\",\n \"grand_turk\",\n \"grenada\",\n \"guadeloupe\",\n \"guatemala\",\n \"guayaquil\",\n \"guyana\",\n \"halifax\",\n \"havana\",\n \"hermosillo\",\n \"indiana\\/indianapolis\",\n \"indiana\\/knox\",\n \"indiana\\/marengo\",\n \"indiana\\/petersburg\",\n \"indiana\\/tell_city\",\n \"indiana\\/vevay\",\n \"indiana\\/vincennes\",\n \"indiana\\/winamac\",\n \"inuvik\",\n \"iqaluit\",\n \"jamaica\",\n \"juneau\",\n \"kentucky\\/louisville\",\n \"kentucky\\/monticello\",\n \"kralendijk\",\n \"la_paz\",\n \"lima\",\n \"los_angeles\",\n \"lower_princes\",\n \"maceio\",\n \"managua\",\n \"manaus\",\n \"marigot\",\n \"martinique\",\n \"matamoros\",\n \"mazatlan\",\n \"menominee\",\n \"merida\",\n \"metlakatla\",\n \"mexico_city\",\n \"miquelon\",\n \"moncton\",\n \"monterrey\",\n \"montevideo\",\n \"montreal\",\n \"montserrat\",\n \"nassau\",\n \"new_york\",\n \"nipigon\",\n \"nome\",\n \"noronha\",\n \"north_dakota\\/beulah\",\n \"north_dakota\\/center\",\n \"north_dakota\\/new_salem\",\n \"ojinaga\",\n \"panama\",\n \"pangnirtung\",\n \"paramaribo\",\n \"phoenix\",\n \"port-au-prince\",\n \"port_of_spain\",\n \"porto_velho\",\n \"puerto_rico\",\n \"rainy_river\",\n \"rankin_inlet\",\n \"recife\",\n \"regina\",\n \"resolute\",\n \"rio_branco\",\n \"santa_isabel\",\n \"santarem\",\n \"santiago\",\n \"santo_domingo\",\n \"sao_paulo\",\n \"scoresbysund\",\n \"shiprock\",\n \"sitka\",\n \"st_barthelemy\",\n \"st_johns\",\n \"st_kitts\",\n \"st_lucia\",\n \"st_thomas\",\n \"st_vincent\",\n \"swift_current\",\n \"tegucigalpa\",\n \"thule\",\n \"thunder_bay\",\n \"tijuana\",\n \"toronto\",\n \"tortola\",\n \"vancouver\",\n \"whitehorse\",\n \"winnipeg\",\n \"yakutat\",\n \"yellowknife\"\n ],\n \"antarctica\": [\n \"casey\",\n \"davis\",\n \"dumontdurville\",\n \"macquarie\",\n \"mawson\",\n \"mcmurdo\",\n \"palmer\",\n \"rothera\",\n \"south_pole\",\n \"syowa\",\n \"vostok\"\n ],\n \"arctic\": [\n \"longyearbyen\"\n ],\n \"asia\": [\n \"aden\",\n \"almaty\",\n \"amman\",\n \"anadyr\",\n \"aqtau\",\n \"aqtobe\",\n \"ashgabat\",\n \"baghdad\",\n \"bahrain\",\n \"baku\",\n \"bangkok\",\n \"beirut\",\n \"bishkek\",\n \"brunei\",\n \"choibalsan\",\n \"chongqing\",\n \"colombo\",\n \"damascus\",\n \"dhaka\",\n \"dili\",\n \"dubai\",\n \"dushanbe\",\n \"gaza\",\n \"harbin\",\n \"hebron\",\n \"ho_chi_minh\",\n \"hong_kong\",\n \"hovd\",\n \"irkutsk\",\n \"jakarta\",\n \"jayapura\",\n \"jerusalem\",\n \"kabul\",\n \"kamchatka\",\n \"karachi\",\n \"kashgar\",\n \"kathmandu\",\n \"khandyga\",\n \"kolkata\",\n \"krasnoyarsk\",\n \"kuala_lumpur\",\n \"kuching\",\n \"kuwait\",\n \"macau\",\n \"magadan\",\n \"makassar\",\n \"manila\",\n \"muscat\",\n \"nicosia\",\n \"novokuznetsk\",\n \"novosibirsk\",\n \"omsk\",\n \"oral\",\n \"phnom_penh\",\n \"pontianak\",\n \"pyongyang\",\n \"qatar\",\n \"qyzylorda\",\n \"rangoon\",\n \"riyadh\",\n \"sakhalin\",\n \"samarkand\",\n \"seoul\",\n \"shanghai\",\n \"singapore\",\n \"taipei\",\n \"tashkent\",\n \"tbilisi\",\n \"tehran\",\n \"thimphu\",\n \"tokyo\",\n \"ulaanbaatar\",\n \"urumqi\",\n \"ust-nera\",\n \"vientiane\",\n \"vladivostok\",\n \"yakutsk\",\n \"yekaterinburg\",\n \"yerevan\"\n ],\n \"atlantic\": [\n \"azores\",\n \"bermuda\",\n \"canary\",\n \"cape_verde\",\n \"faroe\",\n \"madeira\",\n \"reykjavik\",\n \"south_georgia\",\n \"st_helena\",\n \"stanley\"\n ],\n \"australia\": [\n \"adelaide\",\n \"brisbane\",\n \"broken_hill\",\n \"currie\",\n \"darwin\",\n \"eucla\",\n \"hobart\",\n \"lindeman\",\n \"lord_howe\",\n \"melbourne\",\n \"perth\",\n \"sydney\"\n ],\n \"europe\": [\n \"amsterdam\",\n \"andorra\",\n \"athens\",\n \"belgrade\",\n \"berlin\",\n \"bratislava\",\n \"brussels\",\n \"bucharest\",\n \"budapest\",\n \"busingen\",\n \"chisinau\",\n \"copenhagen\",\n \"dublin\",\n \"gibraltar\",\n \"guernsey\",\n \"helsinki\",\n \"isle_of_man\",\n \"istanbul\",\n \"jersey\",\n \"kaliningrad\",\n \"kiev\",\n \"lisbon\",\n \"ljubljana\",\n \"london\",\n \"luxembourg\",\n \"madrid\",\n \"malta\",\n \"mariehamn\",\n \"minsk\",\n \"monaco\",\n \"moscow\",\n \"oslo\",\n \"paris\",\n \"podgorica\",\n \"prague\",\n \"riga\",\n \"rome\",\n \"samara\",\n \"san_marino\",\n \"sarajevo\",\n \"simferopol\",\n \"skopje\",\n \"sofia\",\n \"stockholm\",\n \"tallinn\",\n \"tirane\",\n \"uzhgorod\",\n \"vaduz\",\n \"vatican\",\n \"vienna\",\n \"vilnius\",\n \"volgograd\",\n \"warsaw\",\n \"zagreb\",\n \"zaporozhye\",\n \"zurich\"\n ],\n \"indian\": [\n \"antananarivo\",\n \"chagos\",\n \"christmas\",\n \"cocos\",\n \"comoro\",\n \"kerguelen\",\n \"mahe\",\n \"maldives\",\n \"mauritius\",\n \"mayotte\",\n \"reunion\"\n ],\n \"pacific\": [\n \"apia\",\n \"auckland\",\n \"chatham\",\n \"chuuk\",\n \"easter\",\n \"efate\",\n \"enderbury\",\n \"fakaofo\",\n \"fiji\",\n \"funafuti\",\n \"galapagos\",\n \"gambier\",\n \"guadalcanal\",\n \"guam\",\n \"honolulu\",\n \"johnston\",\n \"kiritimati\",\n \"kosrae\",\n \"kwajalein\",\n \"majuro\",\n \"marquesas\",\n \"midway\",\n \"nauru\",\n \"niue\",\n \"norfolk\",\n \"noumea\",\n \"pago_pago\",\n \"palau\",\n \"pitcairn\",\n \"pohnpei\",\n \"port_moresby\",\n \"rarotonga\",\n \"saipan\",\n \"tahiti\",\n \"tarawa\",\n \"tongatapu\",\n \"wake\",\n \"wallis\"\n ],\n \"utc\": [\n \"\"\n ]\n };\n\n var tzparts= value.split('/',2);\n var continent=tzparts[0].toLowerCase();\n var city='';\n if (tzparts[1]) {\n city=tzparts[1].toLowerCase();\n }\n\n return (continent in timezones && ( timezones[continent].length===0 || timezones[continent].indexOf(city)!==-1))\n }\n }\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Methods that implement Laravel Validations\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n methods:{\n\n helpers: laravelValidation.helpers,\n\n jsRemoteTimer:0,\n\n /**\n * \"Validate\" optional attributes.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Sometimes: function() {\n return true;\n },\n\n /**\n * Bail This is the default behaivour os JSValidation.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Bail: function() {\n return true;\n },\n\n /**\n * \"Indicate\" validation should pass if value is null.\n * Always returns true, just lets us put \"nullable\" in rules.\n *\n * @return {boolean}\n */\n Nullable: function() {\n return true;\n },\n\n /**\n * Validate the given attribute is filled if it is present.\n */\n Filled: function(value, element) {\n return $.validator.methods.required.call(this, value, element, true);\n },\n\n\n /**\n * Validate that a required attribute exists.\n */\n Required: function(value, element) {\n return $.validator.methods.required.call(this, value, element);\n },\n\n /**\n * Validate that an attribute exists when any other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWith: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required=required || (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWithAll: function(value, element, params) {\n var validator=this,\n required=true;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when any other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithout: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required ||\n target===undefined||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n );\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithoutAll: function(value, element, params) {\n var validator=this,\n required=true,\n currentObject=this;\n\n $.each(params,function(i, param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target===undefined ||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when another attribute has a given value.\n *\n * @return {boolean}\n */\n RequiredIf: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return $.validator.methods.required.call(\n this, value, element, true\n );\n }\n }\n }\n\n return true;\n },\n\n /**\n * Validate that an attribute exists when another\n * attribute does not have a given value.\n *\n * @return {boolean}\n */\n RequiredUnless: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return true;\n }\n }\n }\n\n return $.validator.methods.required.call(\n this, value, element, true\n );\n\n },\n\n /**\n * Validate that an attribute has a matching confirmation.\n *\n * @return {boolean}\n */\n Confirmed: function(value, element, params) {\n return laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that two attributes match.\n *\n * @return {boolean}\n */\n Same: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n return String(value) === String(this.elementValue(target));\n }\n return false;\n },\n\n /**\n * Validate that the values of an attribute is in another attribute.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n * @constructor\n */\n InArray: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return found;\n },\n\n /**\n * Validate an attribute is unique among other values.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n */\n Distinct: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName !== element.name && targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return !found;\n },\n\n\n /**\n * Validate that an attribute is different from another attribute.\n *\n * @return {boolean}\n */\n Different: function(value, element, params) {\n return ! laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that an attribute was \"accepted\".\n * This validation rule implies the attribute is \"required\".\n *\n * @return {boolean}\n */\n Accepted: function(value) {\n var regex = new RegExp(\"^(?:(yes|on|1|true))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an array.\n *\n * @param value\n * @param element\n */\n Array: function(value, element) {\n if (element.name.indexOf('[') !== -1 && element.name.indexOf(']') !== -1) {\n return true;\n }\n\n return laravelValidation.helpers.isArray(value);\n },\n\n /**\n * Validate that an attribute is a boolean.\n *\n * @return {boolean}\n */\n Boolean: function(value) {\n var regex= new RegExp(\"^(?:(true|false|1|0))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an integer.\n *\n * @return {boolean}\n */\n Integer: function(value) {\n var regex= new RegExp(\"^(?:-?\\\\d+)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is numeric.\n */\n Numeric: function(value, element) {\n return $.validator.methods.number.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a string.\n *\n * @return {boolean}\n */\n String: function(value) {\n return typeof value === 'string';\n },\n\n /**\n * The field under validation must be numeric and must have an exact length of value.\n */\n Digits: function(value, element, params) {\n return (\n $.validator.methods.number.call(this, value, element, true) &&\n value.length === parseInt(params, 10)\n );\n },\n\n /**\n * The field under validation must have a length between the given min and max.\n */\n DigitsBetween: function(value, element, params) {\n return ($.validator.methods.number.call(this, value, element, true)\n && value.length>=parseFloat(params[0]) && value.length<=parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute.\n *\n * @return {boolean}\n */\n Size: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) === parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is between a set of values.\n *\n * @return {boolean}\n */\n Between: function(value, element, params) {\n return ( laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]) &&\n laravelValidation.helpers.getSize(this,element,value) <= parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute is greater than a minimum value.\n *\n * @return {boolean}\n */\n Min: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is less than a maximum value.\n *\n * @return {boolean}\n */\n Max: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) <= parseFloat(params[0]);\n },\n\n /**\n * Validate an attribute is contained within a list of values.\n *\n * @return {boolean}\n */\n In: function(value, element, params) {\n if (laravelValidation.helpers.isArray(value)\n && laravelValidation.helpers.hasRules(element, \"Array\")\n ) {\n var diff = laravelValidation.helpers.arrayDiff(value, params);\n\n return Object.keys(diff).length === 0;\n }\n\n return params.indexOf(value.toString()) !== -1;\n },\n\n /**\n * Validate an attribute is not contained within a list of values.\n *\n * @return {boolean}\n */\n NotIn: function(value, element, params) {\n return params.indexOf(value.toString()) === -1;\n },\n\n /**\n * Validate that an attribute is a valid IP.\n *\n * @return {boolean}\n */\n Ip: function(value) {\n return /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(value) ||\n /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);\n },\n\n /**\n * Validate that an attribute is a valid e-mail address.\n */\n Email: function(value, element) {\n return $.validator.methods.email.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a valid URL.\n */\n Url: function(value, element) {\n return $.validator.methods.url.call(this, value, element, true);\n },\n\n /**\n * The field under validation must be a successfully uploaded file.\n *\n * @return {boolean}\n */\n File: function(value, element) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if ('files' in element ) {\n return (element.files.length > 0);\n }\n return false;\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n *\n * @return {boolean}\n */\n Mimes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n return (fileinfo !== false && lowerParams.indexOf(fileinfo.extension.toLowerCase())!==-1);\n },\n\n /**\n * The file under validation must match one of the given MIME types.\n *\n * @return {boolean}\n */\n Mimetypes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n\n if (fileinfo === false) {\n return false;\n }\n return (lowerParams.indexOf(fileinfo.type.toLowerCase())!==-1);\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n */\n Image: function(value, element) {\n return laravelValidation.methods.Mimes.call(this, value, element, [\n 'jpg', 'png', 'gif', 'bmp', 'svg', 'jpeg'\n ]);\n },\n\n /**\n * Validate dimensions of Image.\n *\n * @return {boolean|string}\n */\n Dimensions: function(value, element, params, callback) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if (element.files === null || typeof element.files[0] === 'undefined') {\n return false;\n }\n\n var fr = new FileReader;\n fr.onload = function () {\n var img = new Image();\n img.onload = function () {\n var height = parseFloat(img.naturalHeight);\n var width = parseFloat(img.naturalWidth);\n var ratio = width / height;\n var notValid = ((params['width']) && parseFloat(params['width'] !== width)) ||\n ((params['min_width']) && parseFloat(params['min_width']) > width) ||\n ((params['max_width']) && parseFloat(params['max_width']) < width) ||\n ((params['height']) && parseFloat(params['height']) !== height) ||\n ((params['min_height']) && parseFloat(params['min_height']) > height) ||\n ((params['max_height']) && parseFloat(params['max_height']) < height) ||\n ((params['ratio']) && ratio !== parseFloat(eval(params['ratio']))\n );\n callback(! notValid);\n };\n img.onerror = function() {\n callback(false);\n };\n img.src = fr.result;\n };\n fr.readAsDataURL(element.files[0]);\n\n return 'pending';\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n Alpha: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n\n var regex = new RegExp(\"^(?:^[a-z\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n\n },\n\n /**\n * Validate that an attribute contains only alpha-numeric characters.\n *\n * @return {boolean}\n */\n AlphaNum: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n AlphaDash: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC_-]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute passes a regular expression check.\n *\n * @return {boolean}\n */\n Regex: function(value, element, params) {\n var invalidModifiers=['x','s','u','X','U','A'];\n // Converting php regular expression\n var phpReg= new RegExp('^(?:\\/)(.*\\\\\\/?[^\\/]*|[^\\/]*)(?:\\/)([gmixXsuUAJ]*)?$');\n var matches=params[0].match(phpReg);\n if (matches === null) {\n return false;\n }\n // checking modifiers\n var php_modifiers=[];\n if (matches[2]!==undefined) {\n php_modifiers=matches[2].split('');\n for (var i=0; i');\n },\n\n /**\n * Validate the date is equal or after a given date.\n *\n * @return {boolean}\n */\n AfterOrEqual: function(value, element, params) {\n return laravelValidation.helpers.compareDates(this, value, element, params, '>=');\n },\n\n\n /**\n * Validate that an attribute is a valid date.\n */\n Timezone: function(value) {\n return laravelValidation.helpers.isTimezone(value);\n },\n\n\n /**\n * Validate the attribute is a valid JSON string.\n *\n * @param value\n * @return bool\n */\n Json: function(value) {\n var result = true;\n try {\n JSON.parse(value);\n } catch (e) {\n result = false;\n }\n return result;\n }\n }\n});\n"]} \ No newline at end of file +{"version":3,"sources":["resources/assets/js/jsvalidation.js","node_modules/jquery-validation/dist/jquery.validate.js","node_modules/php-date-formatter/js/php-date-formatter.js","es-build/helpers.js","resources/assets/js/timezones.js","resources/assets/js/validations.js"],"names":["laravelValidation","factory","define","amd","module","exports","require","jQuery","$","extend","fn","validate","options","this","length","validator","data","attr","settings","onsubmit","on","event","submitButton","currentTarget","hasClass","cancelSubmit","undefined","handle","hidden","result","submitHandler","formSubmitted","name","val","appendTo","currentForm","debug","call","remove","preventDefault","form","pendingRequest","focusInvalid","window","console","warn","valid","errorList","is","each","element","concat","rules","command","argument","staticRules","existingRules","param","filtered","isContentEditable","closest","normalizeRule","messages","split","index","method","normalizeRules","classRules","attributeRules","dataRules","required","remote","trim","str","replace","called","expr","pseudos","blank","a","filled","unchecked","prop","defaults","init","format","source","params","arguments","args","makeArray","unshift","apply","constructor","Array","slice","i","n","RegExp","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","which","elementValue","inArray","keyCode","invalid","onclick","parentNode","highlight","type","findByName","addClass","removeClass","setDefaults","email","url","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","max","min","step","autoCreateRanges","prototype","labelContainer","errorContext","containers","add","valueCache","pending","reset","delegate","eventType","key","value","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","check","rs","group","cleanElement","clean","checkElement","validationTargetFor","v","prepareElement","testgroup","push","numberOfInvalids","toHide","errors","map","message","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","removeAttr","resetElements","objectLength","obj","count","not","text","addWrapper","hide","size","findLastActive","filter","trigger","e","rulesCache","find","error","selector","join","resetInternals","toShow","idx","$element","validity","badInput","substr","lastIndexOf","rule","normalizer","rulesCount","dependencyMismatch","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","toUpperCase","substring","toLowerCase","customMessage","m","String","findDefined","defaultMessage","title","theregex","test","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","html","wrap","append","errorPlacement","insertAfter","parents","escapeCssMeta","match","describer","string","getLength","nodeName","depend","dependTypes","boolean","function","startRequest","stopRequest","submit","previousValue","old","destroy","off","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","isFunction","parts","isArray","transformed","addMethod","Date","toString","decimalPlaces","num","toInt","Math","round","pow","decimals","errorMessage","re","Error","target","optionDataString","previous","originalMessage","ajax","mode","port","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","abort","ajaxSettings","root","DateFormatter","self","$h","DAY","HOUR","dateSettings","days","daysShort","months","monthsShort","meridiem","ordinal","suffixes","1","2","3","floor","separators","validParts","intParts","tzParts","tzClip","getInt","radix","parseInt","compare","str1","str2","lpad","chr","merge","out","hasOwnProperty","getIndex","arr","config","getMonth","parseDate","vDate","vFormat","vFormatParts","vDateParts","vDatePart","iDatePart","vMonth","vMeriIndex","vMeriOffset","len","mer","vDateFlag","vTimeFlag","vSettings","year","month","day","hour","sec","splice","indexOf","varY","varM","varD","guessDate","vDateStr","vYear","iPart","iSec","vParts","vDigit","setMonth","setDate","getFullYear","setFullYear","setHours","setMinutes","setSeconds","parseFormat","vChar","doFormat","t","s","fmt","backslash","d","j","D","w","getDate","l","N","getDay","z","Y","b","W","F","M","L","o","y","A","G","B","H","getUTCHours","getUTCMinutes","getUTCSeconds","g","getHours","h","getMinutes","getSeconds","u","getMilliseconds","exec","I","UTC","O","tzo","getTimezoneOffset","abs","P","T","pop","Z","c","r","U","getTime","formatDate","implicitRules","arrayRules","arrayRulesCache","setupValidations","cache","tmpRules","nameRegExp","newRules","helpers","mergeRules","regexFromWildcard","validateLocalRules","values","validated","implicit","laravelValidationRemote","isArrayRule","localRulesResult","arrayValue","arrayRulesResult","attribute","token","validateAll","arrayEquals","serializeArray","formMethod","beforeSend","setRequestHeader","always","textStatus","parseErrorResponse","modules","installedModules","__webpack_require__","moduleId","getter","Object","defineProperty","enumerable","get","Symbol","toStringTag","__esModule","ns","create","bind","object","property","p","./node_modules/locutus/php/array/array_diff.js","arr1","retArr","argl","k1","k","arr1keys","./node_modules/locutus/php/datetime/strtotime.js","reSpace","reSpaceOpt","reMeridian","reHour24","reHour24lz","reHour12","reMinute","reMinutelz","reSecond","reSecondlz","reFrac","reDayfull","reDayabbr","reDaytext","reReltextnumber","reReltexttext","reReltextunit","reYear","reYear4","reMonth","reMonthlz","reDay","reDaylz","reMonthFull","reMonthAbbr","reMonthText","reTzCorrection","reDateNoYear","processMeridian","meridian","processYear","yearStr","lookupMonth","monthStr","jan","january","feb","february","ii","mar","march","iii","apr","april","iv","may","jun","june","vi","jul","july","vii","aug","august","viii","sep","sept","september","ix","oct","october","x","nov","november","xi","dec","december","xii","lookupWeekday","dayStr","desiredSundayNumber","mon","monday","tue","tuesday","wed","wednesday","thu","thursday","fri","friday","sat","saturday","sun","sunday","processTzCorrection","tzOffset","oldValue","sign","hours","minutes","formats","yesterday","regex","callback","rd","resetTime","now","noon","time","midnightOrToday","tomorrow","timestamp","dates","zone","firstOrLastDay","firstOrLastDayOfMonth","backOrFrontOf","side","minute","weekdayOf","mssqltime","second","frac","timeLong12","timeShort12","timeTiny12","soap","tzCorrection","ymd","wddx","exif","xmlRpc","xmlRpcNoColon","clf","iso8601long","dateTextual","pointedDate4","pointedDate2","timeLong24","dateNoColon","pgydotd","timeShort24","iso8601noColon","iso8601dateSlash","dateSlash","american","americanShort","gnuDateShortOrIso8601date2","iso8601date4","gnuNoColon","times","f","gnuDateShorter","pgTextReverse","dateFull","dateNoDay","dateNoDayRev","pgTextShort","dateNoYear","dateNoYearRev","isoWeekDay","week","dayOfWeek","relativeText","relValue","relUnit","relTextLower","_lookupRelative","amount","last","first","next","third","fourth","fifth","sixth","seventh","eight","eighth","ninth","tenth","eleventh","twelfth","behavior","ri","rh","rm","ry","weekday","weekdayBehavior","relative","signs","minuses","dayText","relativeTextWeek","relText","monthFullOrMonthAbbr","ago","rf","year4","whitespace","dateShortWithTimeLong","dateShortWithTimeLong12","dateShortWithTimeShort","dateShortWithTimeShort12","resultProto","NaN","zones","toDate","relativeTo","dow","diff","setUTCFullYear","setUTCHours","longestMatch","finalRule","./node_modules/locutus/php/info/ini_get.js","global","varname","$global","$locutus","php","ini","local_value","./node_modules/locutus/php/strings/strlen.js","lgth","prev","code","charCodeAt","getWholeChar","./node_modules/locutus/php/var/is_numeric.js","mixedVar","./node_modules/webpack/buildin/global.js","Function","./resources/assets/js/helpers.js","__webpack_exports__","locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__","locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default","locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__","locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default","locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__","locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default","locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__","locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default","numericRules","fileinfo","fieldObj","FileName","files","file","extension","names","hasNumericRules","hasRules","found","listRules","arrayRule","objRules","_rules","strlen","getSize","is_numeric","parseFloat","getLaravelValidation","parseTime","dateRule","timeValue","strtotime","compareDates","operator","timeCompare","dependentElement","mixed_var","arg","arrayDiff","arr2","isEmptyObject","ruleName","el","tagName","errorMsg","newResponse","responseText","escapeRegExp","nameParts","regexpParts","currentValue","rulesList","isTimezone","timezones","africa","america","antarctica","arctic","asia","atlantic","australia","europe","indian","pacific","utc","tzparts","continent","city","jsRemoteTimer","Sometimes","Bail","Nullable","Filled","Required","RequiredWith","currentObject","RequiredWithAll","RequiredWithout","RequiredWithoutAll","RequiredIf","RequiredUnless","Confirmed","Same","InArray","equals","targetName","Distinct","Different","Accepted","Boolean","Integer","Numeric","Digits","DigitsBetween","Size","Between","Min","Max","In","keys","NotIn","Ip","Email","Url","File","FileReader","FileList","Blob","Mimes","lowerParams","item","Mimetypes","Image","Dimensions","fr","onload","img","height","naturalHeight","width","naturalWidth","ratio","notValid","eval","onerror","src","readAsDataURL","Alpha","AlphaNum","AlphaDash","Regex","invalidModifiers","phpReg","matches","php_modifiers","DateFormat","Before","BeforeOrEqual","After","AfterOrEqual","Timezone","Json","JSON","parse"],"mappings":"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,eACA,SACA,UACA,UACA,SACA,UACA,YACA,aACA,UACA,SACA,UACA,eACA,SACA,eACA,SACA,UACA,WACA,WACA,WACA,cACA,YACA,YACA,UACA,YACA,aACA,UACA,aACA,YACA,YACA,SACA,UACA,SACA,aACA,uBACA,eACA,kBACA,qBACA,oBACA,gBACA,oBACA,kBACA,SACA,UACA,UACA,SACA,sBACA,sBACA,aACA,SACA,OACA,cACA,gBACA,SACA,UACA,SACA,UACA,aACA,YACA,WACA,YACA,SACA,aACA,cACA,WACA,UACA,YACA,aACA,WACA,aACA,SACA,WACA,UACA,OACA,UACA,sBACA,sBACA,yBACA,UACA,SACA,cACA,aACA,UACA,iBACA,gBACA,cACA,cACA,cACA,eACA,SACA,SACA,WACA,aACA,eACA,WACA,WACA,gBACA,YACA,eACA,WACA,QACA,gBACA,WACA,WACA,WACA,YACA,aACA,gBACA,cACA,QACA,cACA,UACA,UACA,UACA,YACA,aACA,WACA,UACA,eAEAC,WAAA,CACA,QACA,QACA,iBACA,YACA,SACA,UACA,SACA,UACA,aACA,QACA,UAEAC,OAAA,CACA,gBAEAC,KAAA,CACA,OACA,SACA,QACA,SACA,QACA,SACA,WACA,UACA,UACA,OACA,UACA,SACA,UACA,SACA,aACA,YACA,UACA,WACA,QACA,OACA,QACA,WACA,OACA,SACA,SACA,cACA,YACA,OACA,UACA,UACA,WACA,YACA,QACA,YACA,UACA,UACA,YACA,WACA,UACA,cACA,eACA,UACA,SACA,QACA,UACA,WACA,SACA,SACA,UACA,eACA,cACA,OACA,OACA,aACA,YACA,YACA,QACA,YACA,UACA,SACA,WACA,YACA,QACA,WACA,YACA,SACA,WACA,UACA,SACA,UACA,QACA,cACA,SACA,WACA,YACA,cACA,UACA,gBACA,WAEAC,SAAA,CACA,SACA,UACA,SACA,aACA,QACA,UACA,YACA,gBACA,YACA,WAEAC,UAAA,CACA,WACA,WACA,cACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,QACA,UAEAC,OAAA,CACA,YACA,UACA,SACA,WACA,SACA,aACA,WACA,YACA,WACA,WACA,WACA,aACA,SACA,YACA,WACA,WACA,cACA,WACA,SACA,cACA,OACA,SACA,YACA,SACA,aACA,SACA,QACA,YACA,QACA,SACA,SACA,OACA,QACA,YACA,SACA,OACA,OACA,SACA,aACA,WACA,aACA,SACA,QACA,YACA,UACA,SACA,WACA,QACA,UACA,SACA,UACA,YACA,SACA,SACA,aACA,UAEAC,OAAA,CACA,eACA,SACA,YACA,QACA,SACA,YACA,OACA,WACA,YACA,UACA,WAEAC,QAAA,CACA,OACA,WACA,UACA,QACA,SACA,QACA,YACA,UACA,OACA,WACA,YACA,UACA,cACA,OACA,WACA,WACA,aACA,SACA,YACA,SACA,YACA,SACA,QACA,OACA,UACA,SACA,YACA,QACA,WACA,UACA,eACA,YACA,SACA,SACA,SACA,YACA,OACA,UAEAC,IAAA,CACA,KAIAC,EAAAloB,EAAA/F,MAAA,IAAA,GACAkuB,EAAAD,EAAA,GAAA1jB,cACA4jB,EAAA,GAKA,OAJAF,EAAA,KACAE,EAAAF,EAAA,GAAA1jB,eAGA2jB,KAAAb,IAAA,IAAAA,EAAAa,GAAAnxB,SAAA,IAAAswB,EAAAa,GAAAta,QAAAua,QC/cA1xB,EAAAC,QAAA,EAAAT,kBAAA,CAEA6N,QAAA,CAEA8O,QAAA3c,kBAAA2c,QAEAwV,cAAA,EAQAC,UAAA,WACA,OAAA,GASAC,KAAA,WACA,OAAA,GASAC,SAAA,WACA,OAAA,GAMAC,OAAA,SAAAzoB,EAAA5G,GACA,OAAA1C,EAAAO,UAAA8M,QAAAvJ,SAAAjC,KAAAxB,KAAAiJ,EAAA5G,GAAA,IAOAsvB,SAAA,SAAA1oB,EAAA5G,GACA,OAAA1C,EAAAO,UAAA8M,QAAAvJ,SAAAjC,KAAAxB,KAAAiJ,EAAA5G,IAQAuvB,aAAA,SAAA3oB,EAAA5G,EAAAqC,GACA,IAAAxE,EAAAF,KACAyD,GAAA,EACAouB,EAAA7xB,KAeA,OAbAL,EA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","file":"jsvalidation.min.js","sourcesContent":["/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\nvar laravelValidation;\nlaravelValidation = {\n\n implicitRules: ['Required','Confirmed'],\n\n /**\n * Initialize laravel validations.\n */\n init: function () {\n\n // Disable class rules and attribute rules\n $.validator.classRuleSettings = {};\n $.validator.attributeRules = function () {\n this.rules = {}\n };\n\n $.validator.dataRules = this.arrayRules;\n $.validator.prototype.arrayRulesCache = {};\n\n // Register validations methods\n this.setupValidations();\n },\n\n arrayRules: function(element) {\n\n var rules = {},\n validator = $.data( element.form, \"validator\"),\n cache = validator.arrayRulesCache;\n\n // Is not an Array\n if (element.name.indexOf('[') === -1) {\n return rules;\n }\n\n if (! (element.name in cache)) {\n cache[element.name] = {};\n }\n\n $.each(validator.settings.rules, function(name, tmpRules) {\n if (name in cache[element.name]) {\n rules = laravelValidation.helpers.mergeRules(rules, cache[element.name][name]);\n } else {\n cache[element.name][name] = {};\n\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(name);\n if (element.name.match(nameRegExp)) {\n var newRules = $.validator.normalizeRule(tmpRules) || {};\n cache[element.name][name] = newRules;\n\n rules = laravelValidation.helpers.mergeRules(rules, newRules);\n }\n }\n });\n\n return rules;\n },\n\n setupValidations: function () {\n\n /**\n * Validate a set of local JS based rules against an element.\n *\n * @param validator\n * @param values\n * @param element\n * @param rules\n * @returns {boolean}\n */\n var validateLocalRules = function (validator, values, element, rules) {\n var validated = true,\n previous = validator.previousValue(element);\n\n $.each(rules, function (i, param) {\n var implicit = param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1;\n var rule = param[0];\n var message = param[2];\n\n if (! implicit && validator.optional(element)) {\n validated = \"dependency-mismatch\";\n return false;\n }\n\n if (laravelValidation.methods[rule] !== undefined) {\n $.each(values, function(index, value) {\n validated = laravelValidation.methods[rule].call(validator, value, element, param[1], function(valid) {\n validator.settings.messages[element.name].laravelValidationRemote = previous.originalMessage;\n if (valid) {\n var submitted = validator.formSubmitted;\n validator.prepareElement(element);\n validator.formSubmitted = submitted;\n validator.successList.push(element);\n delete validator.invalid[element.name];\n validator.showErrors();\n } else {\n var errors = {};\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message;\n validator.invalid[element.name] = true;\n validator.showErrors(errors);\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n });\n\n // Break loop.\n if (validated === false) {\n return false;\n }\n });\n } else {\n validated = false;\n }\n\n if (validated !== true) {\n if (!validator.settings.messages[element.name] ) {\n validator.settings.messages[element.name] = {};\n }\n\n validator.settings.messages[element.name].laravelValidation= message;\n\n return false;\n }\n\n });\n\n return validated;\n };\n\n /**\n * Create JQueryValidation check to validate Laravel rules.\n */\n\n $.validator.addMethod(\"laravelValidation\", function (value, element, params) {\n var rules = [],\n arrayRules = [];\n $.each(params, function (i, param) {\n // put Implicit rules in front\n var isArrayRule = param[4].indexOf('[') !== -1;\n if (param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1) {\n isArrayRule ? arrayRules.unshift(param) : rules.unshift(param);\n } else {\n isArrayRule ? arrayRules.push(param) : rules.push(param);\n }\n });\n\n // Validate normal rules.\n var localRulesResult = validateLocalRules(this, [value], element, rules);\n\n // Validate items of the array using array rules.\n var arrayValue = ! Array.isArray(value) ? [value] : value;\n var arrayRulesResult = validateLocalRules(this, arrayValue, element, arrayRules);\n\n return localRulesResult && arrayRulesResult;\n }, '');\n\n\n /**\n * Create JQueryValidation check to validate Remote Laravel rules.\n */\n $.validator.addMethod(\"laravelValidationRemote\", function (value, element, params) {\n\n var implicit = false,\n check = params[0][1],\n attribute = element.name,\n token = check[1],\n validateAll = check[2];\n\n $.each(params, function (i, parameters) {\n implicit = implicit || parameters[3];\n });\n\n\n if ( !implicit && this.optional( element ) ) {\n return \"dependency-mismatch\";\n }\n\n var previous = this.previousValue( element ),\n validator, data;\n\n if (!this.settings.messages[ element.name ] ) {\n this.settings.messages[ element.name ] = {};\n }\n previous.originalMessage = this.settings.messages[ element.name ].laravelValidationRemote;\n this.settings.messages[ element.name ].laravelValidationRemote = previous.message;\n\n var param = typeof param === \"string\" && { url: param } || param;\n\n if (laravelValidation.helpers.arrayEquals(previous.old, value) || previous.old === value) {\n return previous.valid;\n }\n\n previous.old = value;\n validator = this;\n this.startRequest( element );\n\n data = $(validator.currentForm).serializeArray();\n\n data.push({\n 'name': '_jsvalidation',\n 'value': attribute\n });\n\n data.push({\n 'name': '_jsvalidation_validate_all',\n 'value': validateAll\n });\n\n var formMethod = $(validator.currentForm).attr('method');\n if($(validator.currentForm).find('input[name=\"_method\"]').length) {\n formMethod = $(validator.currentForm).find('input[name=\"_method\"]').val();\n }\n\n $.ajax( $.extend( true, {\n mode: \"abort\",\n port: \"validate\" + element.name,\n dataType: \"json\",\n data: data,\n context: validator.currentForm,\n url: $(validator.currentForm).attr('action'),\n type: formMethod,\n\n beforeSend: function (xhr) {\n if ($(validator.currentForm).attr('method').toLowerCase() !== 'get' && token) {\n return xhr.setRequestHeader('X-XSRF-TOKEN', token);\n }\n }\n }, param )\n ).always(function( response, textStatus ) {\n var errors, message, submitted, valid;\n\n if (textStatus === 'error') {\n valid = false;\n response = laravelValidation.helpers.parseErrorResponse(response);\n } else if (textStatus === 'success') {\n valid = response === true || response === \"true\";\n } else {\n return;\n }\n\n validator.settings.messages[ element.name ].laravelValidationRemote = previous.originalMessage;\n\n if ( valid ) {\n submitted = validator.formSubmitted;\n validator.prepareElement( element );\n validator.formSubmitted = submitted;\n validator.successList.push( element );\n delete validator.invalid[ element.name ];\n validator.showErrors();\n } else {\n errors = {};\n message = response || validator.defaultMessage( element, \"remote\" );\n errors[ element.name ]\n = previous.message\n = typeof message === \"function\" ? message( value ) : message[0];\n validator.invalid[ element.name ] = true;\n validator.showErrors( errors );\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n validator.stopRequest( element, valid );\n }\n );\n return \"pending\";\n }, '');\n }\n};\n\n$(function() {\n laravelValidation.init();\n});\n","/*!\r\n * jQuery Validation Plugin v1.19.2\r\n *\r\n * https://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2020 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\r\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\r\n}));","/*!\r\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2020\r\n * @version 1.3.6\r\n *\r\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\r\n * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery. The\r\n * library also adds support for Universal Module Definition (UMD).\r\n * \r\n * @see http://php.net/manual/en/function.date.php\r\n *\r\n * For more JQuery plugins visit http://plugins.krajee.com\r\n * For more Yii related demos visit http://demos.krajee.com\r\n */\r\n(function (root, factory) {\r\n // noinspection JSUnresolvedVariable\r\n if (typeof define === 'function' && define.amd) { // AMD\r\n // noinspection JSUnresolvedFunction\r\n define([], factory);\r\n } else {\r\n // noinspection JSUnresolvedVariable\r\n if (typeof module === 'object' && module.exports) { // Node\r\n // noinspection JSUnresolvedVariable\r\n module.exports = factory();\r\n } else { // Browser globals\r\n root.DateFormatter = factory();\r\n }\r\n }\r\n}(typeof self !== 'undefined' ? self : this, function () {\r\n var DateFormatter, $h;\r\n /**\r\n * Global helper object\r\n */\r\n $h = {\r\n DAY: 1000 * 60 * 60 * 24,\r\n HOUR: 3600,\r\n defaults: {\r\n dateSettings: {\r\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n months: [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\r\n 'August', 'September', 'October', 'November', 'December'\r\n ],\r\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n meridiem: ['AM', 'PM'],\r\n ordinal: function (number) {\r\n var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};\r\n return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];\r\n }\r\n },\r\n separators: /[ \\-+\\/.:@]/g,\r\n validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,\r\n intParts: /[djwNzmnyYhHgGis]/g,\r\n tzParts: /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\r\n tzClip: /[^-+\\dA-Z]/g\r\n },\r\n getInt: function (str, radix) {\r\n return parseInt(str, (radix ? radix : 10));\r\n },\r\n compare: function (str1, str2) {\r\n return typeof (str1) === 'string' && typeof (str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();\r\n },\r\n lpad: function (value, length, chr) {\r\n var val = value.toString();\r\n chr = chr || '0';\r\n return val.length < length ? $h.lpad(chr + val, length) : val;\r\n },\r\n merge: function (out) {\r\n var i, obj;\r\n out = out || {};\r\n for (i = 1; i < arguments.length; i++) {\r\n obj = arguments[i];\r\n if (!obj) {\r\n continue;\r\n }\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (typeof obj[key] === 'object') {\r\n $h.merge(out[key], obj[key]);\r\n } else {\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n }\r\n return out;\r\n },\r\n getIndex: function (val, arr) {\r\n for (var i = 0; i < arr.length; i++) {\r\n if (arr[i].toLowerCase() === val.toLowerCase()) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n };\r\n\r\n /**\r\n * Date Formatter Library Constructor\r\n * @param options\r\n * @constructor\r\n */\r\n DateFormatter = function (options) {\r\n var self = this, config = $h.merge($h.defaults, options);\r\n self.dateSettings = config.dateSettings;\r\n self.separators = config.separators;\r\n self.validParts = config.validParts;\r\n self.intParts = config.intParts;\r\n self.tzParts = config.tzParts;\r\n self.tzClip = config.tzClip;\r\n };\r\n\r\n /**\r\n * DateFormatter Library Prototype\r\n */\r\n DateFormatter.prototype = {\r\n constructor: DateFormatter,\r\n getMonth: function (val) {\r\n var self = this, i;\r\n i = $h.getIndex(val, self.dateSettings.monthsShort) + 1;\r\n if (i === 0) {\r\n i = $h.getIndex(val, self.dateSettings.months) + 1;\r\n }\r\n return i;\r\n },\r\n parseDate: function (vDate, vFormat) {\r\n var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,\r\n vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,\r\n out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};\r\n if (!vDate) {\r\n return null;\r\n }\r\n if (vDate instanceof Date) {\r\n return vDate;\r\n }\r\n if (vFormat === 'U') {\r\n i = $h.getInt(vDate);\r\n return i ? new Date(i * 1000) : vDate;\r\n }\r\n switch (typeof vDate) {\r\n case 'number':\r\n return new Date(vDate);\r\n case 'string':\r\n break;\r\n default:\r\n return null;\r\n }\r\n vFormatParts = vFormat.match(self.validParts);\r\n if (!vFormatParts || vFormatParts.length === 0) {\r\n throw new Error('Invalid date format definition.');\r\n }\r\n for (i = vFormatParts.length - 1; i >= 0; i--) {\r\n if (vFormatParts[i] === 'S') {\r\n vFormatParts.splice(i, 1);\r\n }\r\n }\r\n vDateParts = vDate.replace(self.separators, '\\0').split('\\0');\r\n for (i = 0; i < vDateParts.length; i++) {\r\n vDatePart = vDateParts[i];\r\n iDatePart = $h.getInt(vDatePart);\r\n switch (vFormatParts[i]) {\r\n case 'y':\r\n case 'Y':\r\n if (iDatePart) {\r\n len = vDatePart.length;\r\n out.year = len === 2 ? $h.getInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vDateFlag = true;\r\n break;\r\n case 'm':\r\n case 'n':\r\n case 'M':\r\n case 'F':\r\n if (isNaN(iDatePart)) {\r\n vMonth = self.getMonth(vDatePart);\r\n if (vMonth > 0) {\r\n out.month = vMonth;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n if (iDatePart >= 1 && iDatePart <= 12) {\r\n out.month = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n }\r\n vDateFlag = true;\r\n break;\r\n case 'd':\r\n case 'j':\r\n if (iDatePart >= 1 && iDatePart <= 31) {\r\n out.day = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vDateFlag = true;\r\n break;\r\n case 'g':\r\n case 'h':\r\n vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :\r\n ((vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1);\r\n mer = vDateParts[vMeriIndex];\r\n if (vMeriIndex !== -1) {\r\n vMeriOffset = $h.compare(mer, vSettings.meridiem[0]) ? 0 :\r\n ($h.compare(mer, vSettings.meridiem[1]) ? 12 : -1);\r\n if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset !== -1) {\r\n out.hour = iDatePart % 12 === 0 ? vMeriOffset : iDatePart + vMeriOffset;\r\n } else {\r\n if (iDatePart >= 0 && iDatePart <= 23) {\r\n out.hour = iDatePart;\r\n }\r\n }\r\n } else {\r\n if (iDatePart >= 0 && iDatePart <= 23) {\r\n out.hour = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n }\r\n vTimeFlag = true;\r\n break;\r\n case 'G':\r\n case 'H':\r\n if (iDatePart >= 0 && iDatePart <= 23) {\r\n out.hour = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vTimeFlag = true;\r\n break;\r\n case 'i':\r\n if (iDatePart >= 0 && iDatePart <= 59) {\r\n out.min = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vTimeFlag = true;\r\n break;\r\n case 's':\r\n if (iDatePart >= 0 && iDatePart <= 59) {\r\n out.sec = iDatePart;\r\n } else {\r\n return null;\r\n }\r\n vTimeFlag = true;\r\n break;\r\n }\r\n }\r\n if (vDateFlag === true) {\r\n var varY = out.year || 0, varM = out.month ? out.month - 1 : 0, varD = out.day || 1;\r\n out.date = new Date(varY, varM, varD, out.hour, out.min, out.sec, 0);\r\n } else {\r\n if (vTimeFlag !== true) {\r\n return null;\r\n }\r\n out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);\r\n }\r\n return out.date;\r\n },\r\n guessDate: function (vDateStr, vFormat) {\r\n if (typeof vDateStr !== 'string') {\r\n return vDateStr;\r\n }\r\n var self = this, vParts = vDateStr.replace(self.separators, '\\0').split('\\0'), vPattern = /^[djmn]/g, len,\r\n vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, n, iPart, iSec;\r\n\r\n if (!vPattern.test(vFormatParts[0])) {\r\n return vDateStr;\r\n }\r\n\r\n for (i = 0; i < vParts.length; i++) {\r\n vDigit = 2;\r\n iPart = vParts[i];\r\n iSec = $h.getInt(iPart.substr(0, 2));\r\n if (isNaN(iSec)) {\r\n return null;\r\n }\r\n switch (i) {\r\n case 0:\r\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\r\n vDate.setMonth(iSec - 1);\r\n } else {\r\n vDate.setDate(iSec);\r\n }\r\n break;\r\n case 1:\r\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\r\n vDate.setDate(iSec);\r\n } else {\r\n vDate.setMonth(iSec - 1);\r\n }\r\n break;\r\n case 2:\r\n vYear = vDate.getFullYear();\r\n len = iPart.length;\r\n vDigit = len < 4 ? len : 4;\r\n vYear = $h.getInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4));\r\n if (!vYear) {\r\n return null;\r\n }\r\n vDate.setFullYear(vYear);\r\n break;\r\n case 3:\r\n vDate.setHours(iSec);\r\n break;\r\n case 4:\r\n vDate.setMinutes(iSec);\r\n break;\r\n case 5:\r\n vDate.setSeconds(iSec);\r\n break;\r\n }\r\n n = iPart.substr(vDigit);\r\n if (n.length > 0) {\r\n vParts.splice(i + 1, 0, n);\r\n }\r\n }\r\n return vDate;\r\n },\r\n parseFormat: function (vChar, vDate) {\r\n var self = this, vSettings = self.dateSettings, fmt, backslash = /\\\\?(.?)/gi, doFormat = function (t, s) {\r\n return fmt[t] ? fmt[t]() : s;\r\n };\r\n fmt = {\r\n /////////\r\n // DAY //\r\n /////////\r\n /**\r\n * Day of month with leading 0: `01..31`\r\n * @return {string}\r\n */\r\n d: function () {\r\n return $h.lpad(fmt.j(), 2);\r\n },\r\n /**\r\n * Shorthand day name: `Mon...Sun`\r\n * @return {string}\r\n */\r\n D: function () {\r\n return vSettings.daysShort[fmt.w()];\r\n },\r\n /**\r\n * Day of month: `1..31`\r\n * @return {number}\r\n */\r\n j: function () {\r\n return vDate.getDate();\r\n },\r\n /**\r\n * Full day name: `Monday...Sunday`\r\n * @return {string}\r\n */\r\n l: function () {\r\n return vSettings.days[fmt.w()];\r\n },\r\n /**\r\n * ISO-8601 day of week: `1[Mon]..7[Sun]`\r\n * @return {number}\r\n */\r\n N: function () {\r\n return fmt.w() || 7;\r\n },\r\n /**\r\n * Day of week: `0[Sun]..6[Sat]`\r\n * @return {number}\r\n */\r\n w: function () {\r\n return vDate.getDay();\r\n },\r\n /**\r\n * Day of year: `0..365`\r\n * @return {number}\r\n */\r\n z: function () {\r\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);\r\n return Math.round((a - b) / $h.DAY);\r\n },\r\n\r\n //////////\r\n // WEEK //\r\n //////////\r\n /**\r\n * ISO-8601 week number\r\n * @return {number}\r\n */\r\n W: function () {\r\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);\r\n return $h.lpad(1 + Math.round((a - b) / $h.DAY / 7), 2);\r\n },\r\n\r\n ///////////\r\n // MONTH //\r\n ///////////\r\n /**\r\n * Full month name: `January...December`\r\n * @return {string}\r\n */\r\n F: function () {\r\n return vSettings.months[vDate.getMonth()];\r\n },\r\n /**\r\n * Month w/leading 0: `01..12`\r\n * @return {string}\r\n */\r\n m: function () {\r\n return $h.lpad(fmt.n(), 2);\r\n },\r\n /**\r\n * Shorthand month name; `Jan...Dec`\r\n * @return {string}\r\n */\r\n M: function () {\r\n return vSettings.monthsShort[vDate.getMonth()];\r\n },\r\n /**\r\n * Month: `1...12`\r\n * @return {number}\r\n */\r\n n: function () {\r\n return vDate.getMonth() + 1;\r\n },\r\n /**\r\n * Days in month: `28...31`\r\n * @return {number}\r\n */\r\n t: function () {\r\n return (new Date(fmt.Y(), fmt.n(), 0)).getDate();\r\n },\r\n\r\n //////////\r\n // YEAR //\r\n //////////\r\n /**\r\n * Is leap year? `0 or 1`\r\n * @return {number}\r\n */\r\n L: function () {\r\n var Y = fmt.Y();\r\n return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;\r\n },\r\n /**\r\n * ISO-8601 year\r\n * @return {number}\r\n */\r\n o: function () {\r\n var n = fmt.n(), W = fmt.W(), Y = fmt.Y();\r\n return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);\r\n },\r\n /**\r\n * Full year: `e.g. 1980...2010`\r\n * @return {number}\r\n */\r\n Y: function () {\r\n return vDate.getFullYear();\r\n },\r\n /**\r\n * Last two digits of year: `00...99`\r\n * @return {string}\r\n */\r\n y: function () {\r\n return fmt.Y().toString().slice(-2);\r\n },\r\n\r\n //////////\r\n // TIME //\r\n //////////\r\n /**\r\n * Meridian lower: `am or pm`\r\n * @return {string}\r\n */\r\n a: function () {\r\n return fmt.A().toLowerCase();\r\n },\r\n /**\r\n * Meridian upper: `AM or PM`\r\n * @return {string}\r\n */\r\n A: function () {\r\n var n = fmt.G() < 12 ? 0 : 1;\r\n return vSettings.meridiem[n];\r\n },\r\n /**\r\n * Swatch Internet time: `000..999`\r\n * @return {string}\r\n */\r\n B: function () {\r\n var H = vDate.getUTCHours() * $h.HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();\r\n return $h.lpad(Math.floor((H + i + s + $h.HOUR) / 86.4) % 1000, 3);\r\n },\r\n /**\r\n * 12-Hours: `1..12`\r\n * @return {number}\r\n */\r\n g: function () {\r\n return fmt.G() % 12 || 12;\r\n },\r\n /**\r\n * 24-Hours: `0..23`\r\n * @return {number}\r\n */\r\n G: function () {\r\n return vDate.getHours();\r\n },\r\n /**\r\n * 12-Hours with leading 0: `01..12`\r\n * @return {string}\r\n */\r\n h: function () {\r\n return $h.lpad(fmt.g(), 2);\r\n },\r\n /**\r\n * 24-Hours w/leading 0: `00..23`\r\n * @return {string}\r\n */\r\n H: function () {\r\n return $h.lpad(fmt.G(), 2);\r\n },\r\n /**\r\n * Minutes w/leading 0: `00..59`\r\n * @return {string}\r\n */\r\n i: function () {\r\n return $h.lpad(vDate.getMinutes(), 2);\r\n },\r\n /**\r\n * Seconds w/leading 0: `00..59`\r\n * @return {string}\r\n */\r\n s: function () {\r\n return $h.lpad(vDate.getSeconds(), 2);\r\n },\r\n /**\r\n * Microseconds: `000000-999000`\r\n * @return {string}\r\n */\r\n u: function () {\r\n return $h.lpad(vDate.getMilliseconds() * 1000, 6);\r\n },\r\n\r\n //////////////\r\n // TIMEZONE //\r\n //////////////\r\n /**\r\n * Timezone identifier: `e.g. Atlantic/Azores, ...`\r\n * @return {string}\r\n */\r\n e: function () {\r\n var str = /\\((.*)\\)/.exec(String(vDate))[1];\r\n return str || 'Coordinated Universal Time';\r\n },\r\n /**\r\n * DST observed? `0 or 1`\r\n * @return {number}\r\n */\r\n I: function () {\r\n var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),\r\n b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);\r\n return ((a - c) !== (b - d)) ? 1 : 0;\r\n },\r\n /**\r\n * Difference to GMT in hour format: `e.g. +0200`\r\n * @return {string}\r\n */\r\n O: function () {\r\n var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);\r\n return (tzo > 0 ? '-' : '+') + $h.lpad(Math.floor(a / 60) * 100 + a % 60, 4);\r\n },\r\n /**\r\n * Difference to GMT with colon: `e.g. +02:00`\r\n * @return {string}\r\n */\r\n P: function () {\r\n var O = fmt.O();\r\n return (O.substr(0, 3) + ':' + O.substr(3, 2));\r\n },\r\n /**\r\n * Timezone abbreviation: `e.g. EST, MDT, ...`\r\n * @return {string}\r\n */\r\n T: function () {\r\n var str = (String(vDate).match(self.tzParts) || ['']).pop().replace(self.tzClip, '');\r\n return str || 'UTC';\r\n },\r\n /**\r\n * Timezone offset in seconds: `-43200...50400`\r\n * @return {number}\r\n */\r\n Z: function () {\r\n return -vDate.getTimezoneOffset() * 60;\r\n },\r\n\r\n ////////////////////\r\n // FULL DATE TIME //\r\n ////////////////////\r\n /**\r\n * ISO-8601 date\r\n * @return {string}\r\n */\r\n c: function () {\r\n return 'Y-m-d\\\\TH:i:sP'.replace(backslash, doFormat);\r\n },\r\n /**\r\n * RFC 2822 date\r\n * @return {string}\r\n */\r\n r: function () {\r\n return 'D, d M Y H:i:s O'.replace(backslash, doFormat);\r\n },\r\n /**\r\n * Seconds since UNIX epoch\r\n * @return {number}\r\n */\r\n U: function () {\r\n return vDate.getTime() / 1000 || 0;\r\n }\r\n };\r\n return doFormat(vChar, vChar);\r\n },\r\n formatDate: function (vDate, vFormat) {\r\n var self = this, i, n, len, str, vChar, vDateStr = '', BACKSLASH = '\\\\';\r\n if (typeof vDate === 'string') {\r\n vDate = self.parseDate(vDate, vFormat);\r\n if (!vDate) {\r\n return null;\r\n }\r\n }\r\n if (vDate instanceof Date) {\r\n len = vFormat.length;\r\n for (i = 0; i < len; i++) {\r\n vChar = vFormat.charAt(i);\r\n if (vChar === 'S' || vChar === BACKSLASH) {\r\n continue;\r\n }\r\n if (i > 0 && vFormat.charAt(i - 1) === BACKSLASH) {\r\n vDateStr += vChar;\r\n continue;\r\n }\r\n str = self.parseFormat(vChar, vDate);\r\n if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {\r\n n = $h.getInt(str) || 0;\r\n str += self.dateSettings.ordinal(n);\r\n }\r\n vDateStr += str;\r\n }\r\n return vDateStr;\r\n }\r\n return '';\r\n }\r\n };\r\n return DateFormatter;\r\n}));","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./resources/assets/js/helpers.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/locutus/php/array/array_diff.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/locutus/php/array/array_diff.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function array_diff(arr1) {\n // eslint-disable-line camelcase\n // discuss at: https://locutus.io/php/array_diff/\n // original by: Kevin van Zonneveld (https://kvz.io)\n // improved by: Sanjoy Roy\n // revised by: Brett Zamir (https://brett-zamir.me)\n // example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld'])\n // returns 1: {0:'Kevin'}\n\n var retArr = {};\n var argl = arguments.length;\n var k1 = '';\n var i = 1;\n var k = '';\n var arr = {};\n\n arr1keys: for (k1 in arr1) {\n // eslint-disable-line no-labels\n for (i = 1; i < argl; i++) {\n arr = arguments[i];\n for (k in arr) {\n if (arr[k] === arr1[k1]) {\n // If it reaches here, it was found in at least one array, so try next value\n continue arr1keys; // eslint-disable-line no-labels\n }\n }\n retArr[k1] = arr1[k1];\n }\n }\n\n return retArr;\n};\n//# sourceMappingURL=array_diff.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/datetime/strtotime.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/locutus/php/datetime/strtotime.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar reSpace = '[ \\\\t]+';\nvar reSpaceOpt = '[ \\\\t]*';\nvar reMeridian = '(?:([ap])\\\\.?m\\\\.?([\\\\t ]|$))';\nvar reHour24 = '(2[0-4]|[01]?[0-9])';\nvar reHour24lz = '([01][0-9]|2[0-4])';\nvar reHour12 = '(0?[1-9]|1[0-2])';\nvar reMinute = '([0-5]?[0-9])';\nvar reMinutelz = '([0-5][0-9])';\nvar reSecond = '(60|[0-5]?[0-9])';\nvar reSecondlz = '(60|[0-5][0-9])';\nvar reFrac = '(?:\\\\.([0-9]+))';\n\nvar reDayfull = 'sunday|monday|tuesday|wednesday|thursday|friday|saturday';\nvar reDayabbr = 'sun|mon|tue|wed|thu|fri|sat';\nvar reDaytext = reDayfull + '|' + reDayabbr + '|weekdays?';\n\nvar reReltextnumber = 'first|second|third|fourth|fifth|sixth|seventh|eighth?|ninth|tenth|eleventh|twelfth';\nvar reReltexttext = 'next|last|previous|this';\nvar reReltextunit = '(?:second|sec|minute|min|hour|day|fortnight|forthnight|month|year)s?|weeks|' + reDaytext;\n\nvar reYear = '([0-9]{1,4})';\nvar reYear2 = '([0-9]{2})';\nvar reYear4 = '([0-9]{4})';\nvar reYear4withSign = '([+-]?[0-9]{4})';\nvar reMonth = '(1[0-2]|0?[0-9])';\nvar reMonthlz = '(0[0-9]|1[0-2])';\nvar reDay = '(?:(3[01]|[0-2]?[0-9])(?:st|nd|rd|th)?)';\nvar reDaylz = '(0[0-9]|[1-2][0-9]|3[01])';\n\nvar reMonthFull = 'january|february|march|april|may|june|july|august|september|october|november|december';\nvar reMonthAbbr = 'jan|feb|mar|apr|may|jun|jul|aug|sept?|oct|nov|dec';\nvar reMonthroman = 'i[vx]|vi{0,3}|xi{0,2}|i{1,3}';\nvar reMonthText = '(' + reMonthFull + '|' + reMonthAbbr + '|' + reMonthroman + ')';\n\nvar reTzCorrection = '((?:GMT)?([+-])' + reHour24 + ':?' + reMinute + '?)';\nvar reDayOfYear = '(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])';\nvar reWeekOfYear = '(0[1-9]|[1-4][0-9]|5[0-3])';\n\nvar reDateNoYear = reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]*';\n\nfunction processMeridian(hour, meridian) {\n meridian = meridian && meridian.toLowerCase();\n\n switch (meridian) {\n case 'a':\n hour += hour === 12 ? -12 : 0;\n break;\n case 'p':\n hour += hour !== 12 ? 12 : 0;\n break;\n }\n\n return hour;\n}\n\nfunction processYear(yearStr) {\n var year = +yearStr;\n\n if (yearStr.length < 4 && year < 100) {\n year += year < 70 ? 2000 : 1900;\n }\n\n return year;\n}\n\nfunction lookupMonth(monthStr) {\n return {\n jan: 0,\n january: 0,\n i: 0,\n feb: 1,\n february: 1,\n ii: 1,\n mar: 2,\n march: 2,\n iii: 2,\n apr: 3,\n april: 3,\n iv: 3,\n may: 4,\n v: 4,\n jun: 5,\n june: 5,\n vi: 5,\n jul: 6,\n july: 6,\n vii: 6,\n aug: 7,\n august: 7,\n viii: 7,\n sep: 8,\n sept: 8,\n september: 8,\n ix: 8,\n oct: 9,\n october: 9,\n x: 9,\n nov: 10,\n november: 10,\n xi: 10,\n dec: 11,\n december: 11,\n xii: 11\n }[monthStr.toLowerCase()];\n}\n\nfunction lookupWeekday(dayStr) {\n var desiredSundayNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var dayNumbers = {\n mon: 1,\n monday: 1,\n tue: 2,\n tuesday: 2,\n wed: 3,\n wednesday: 3,\n thu: 4,\n thursday: 4,\n fri: 5,\n friday: 5,\n sat: 6,\n saturday: 6,\n sun: 0,\n sunday: 0\n };\n\n return dayNumbers[dayStr.toLowerCase()] || desiredSundayNumber;\n}\n\nfunction lookupRelative(relText) {\n var relativeNumbers = {\n last: -1,\n previous: -1,\n this: 0,\n first: 1,\n next: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eight: 8,\n eighth: 8,\n ninth: 9,\n tenth: 10,\n eleventh: 11,\n twelfth: 12\n };\n\n var relativeBehavior = {\n this: 1\n };\n\n var relTextLower = relText.toLowerCase();\n\n return {\n amount: relativeNumbers[relTextLower],\n behavior: relativeBehavior[relTextLower] || 0\n };\n}\n\nfunction processTzCorrection(tzOffset, oldValue) {\n var reTzCorrectionLoose = /(?:GMT)?([+-])(\\d+)(:?)(\\d{0,2})/i;\n tzOffset = tzOffset && tzOffset.match(reTzCorrectionLoose);\n\n if (!tzOffset) {\n return oldValue;\n }\n\n var sign = tzOffset[1] === '-' ? 1 : -1;\n var hours = +tzOffset[2];\n var minutes = +tzOffset[4];\n\n if (!tzOffset[4] && !tzOffset[3]) {\n minutes = Math.floor(hours % 100);\n hours = Math.floor(hours / 100);\n }\n\n return sign * (hours * 60 + minutes);\n}\n\nvar formats = {\n yesterday: {\n regex: /^yesterday/i,\n name: 'yesterday',\n callback: function callback() {\n this.rd -= 1;\n return this.resetTime();\n }\n },\n\n now: {\n regex: /^now/i,\n name: 'now'\n // do nothing\n },\n\n noon: {\n regex: /^noon/i,\n name: 'noon',\n callback: function callback() {\n return this.resetTime() && this.time(12, 0, 0, 0);\n }\n },\n\n midnightOrToday: {\n regex: /^(midnight|today)/i,\n name: 'midnight | today',\n callback: function callback() {\n return this.resetTime();\n }\n },\n\n tomorrow: {\n regex: /^tomorrow/i,\n name: 'tomorrow',\n callback: function callback() {\n this.rd += 1;\n return this.resetTime();\n }\n },\n\n timestamp: {\n regex: /^@(-?\\d+)/i,\n name: 'timestamp',\n callback: function callback(match, timestamp) {\n this.rs += +timestamp;\n this.y = 1970;\n this.m = 0;\n this.d = 1;\n this.dates = 0;\n\n return this.resetTime() && this.zone(0);\n }\n },\n\n firstOrLastDay: {\n regex: /^(first|last) day of/i,\n name: 'firstdayof | lastdayof',\n callback: function callback(match, day) {\n if (day.toLowerCase() === 'first') {\n this.firstOrLastDayOfMonth = 1;\n } else {\n this.firstOrLastDayOfMonth = -1;\n }\n }\n },\n\n backOrFrontOf: {\n regex: RegExp('^(back|front) of ' + reHour24 + reSpaceOpt + reMeridian + '?', 'i'),\n name: 'backof | frontof',\n callback: function callback(match, side, hours, meridian) {\n var back = side.toLowerCase() === 'back';\n var hour = +hours;\n var minute = 15;\n\n if (!back) {\n hour -= 1;\n minute = 45;\n }\n\n hour = processMeridian(hour, meridian);\n\n return this.resetTime() && this.time(hour, minute, 0, 0);\n }\n },\n\n weekdayOf: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reDayfull + '|' + reDayabbr + ')' + reSpace + 'of', 'i'),\n name: 'weekdayof'\n // todo\n },\n\n mssqltime: {\n regex: RegExp('^' + reHour12 + ':' + reMinutelz + ':' + reSecondlz + '[:.]([0-9]+)' + reMeridian, 'i'),\n name: 'mssqltime',\n callback: function callback(match, hour, minute, second, frac, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, +frac.substr(0, 3));\n }\n },\n\n timeLong12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),\n name: 'timelong12',\n callback: function callback(match, hour, minute, second, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, +second, 0);\n }\n },\n\n timeShort12: {\n regex: RegExp('^' + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'),\n name: 'timeshort12',\n callback: function callback(match, hour, minute, meridian) {\n return this.time(processMeridian(+hour, meridian), +minute, 0, 0);\n }\n },\n\n timeTiny12: {\n regex: RegExp('^' + reHour12 + reSpaceOpt + reMeridian, 'i'),\n name: 'timetiny12',\n callback: function callback(match, hour, meridian) {\n return this.time(processMeridian(+hour, meridian), 0, 0, 0);\n }\n },\n\n soap: {\n regex: RegExp('^' + reYear4 + '-' + reMonthlz + '-' + reDaylz + 'T' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reFrac + reTzCorrection + '?', 'i'),\n name: 'soap',\n callback: function callback(match, year, month, day, hour, minute, second, frac, tzCorrection) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, +frac.substr(0, 3)) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n wddx: {\n regex: RegExp('^' + reYear4 + '-' + reMonth + '-' + reDay + 'T' + reHour24 + ':' + reMinute + ':' + reSecond),\n name: 'wddx',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n exif: {\n regex: RegExp('^' + reYear4 + ':' + reMonthlz + ':' + reDaylz + ' ' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz, 'i'),\n name: 'exif',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpc: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + 'T' + reHour24 + ':' + reMinutelz + ':' + reSecondlz),\n name: 'xmlrpc',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n xmlRpcNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz + '[Tt]' + reHour24 + reMinutelz + reSecondlz),\n name: 'xmlrpcnocolon',\n callback: function callback(match, year, month, day, hour, minute, second) {\n return this.ymd(+year, month - 1, +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n clf: {\n regex: RegExp('^' + reDay + '/(' + reMonthAbbr + ')/' + reYear4 + ':' + reHour24lz + ':' + reMinutelz + ':' + reSecondlz + reSpace + reTzCorrection, 'i'),\n name: 'clf',\n callback: function callback(match, day, month, year, hour, minute, second, tzCorrection) {\n return this.ymd(+year, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0) && this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n iso8601long: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond + reFrac, 'i'),\n name: 'iso8601long',\n callback: function callback(match, hour, minute, second, frac) {\n return this.time(+hour, +minute, +second, +frac.substr(0, 3));\n }\n },\n\n dateTextual: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reDay + '[,.stndrh\\\\t ]+' + reYear, 'i'),\n name: 'datetextual',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n pointedDate4: {\n regex: RegExp('^' + reDay + '[.\\\\t-]' + reMonth + '[.-]' + reYear4),\n name: 'pointeddate4',\n callback: function callback(match, day, month, year) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pointedDate2: {\n regex: RegExp('^' + reDay + '[.\\\\t]' + reMonth + '\\\\.' + reYear2),\n name: 'pointeddate2',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n timeLong24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond),\n name: 'timelong24',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n dateNoColon: {\n regex: RegExp('^' + reYear4 + reMonthlz + reDaylz),\n name: 'datenocolon',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n pgydotd: {\n regex: RegExp('^' + reYear4 + '\\\\.?' + reDayOfYear),\n name: 'pgydotd',\n callback: function callback(match, year, day) {\n return this.ymd(+year, 0, +day);\n }\n },\n\n timeShort24: {\n regex: RegExp('^t?' + reHour24 + '[:.]' + reMinute, 'i'),\n name: 'timeshort24',\n callback: function callback(match, hour, minute) {\n return this.time(+hour, +minute, 0, 0);\n }\n },\n\n iso8601noColon: {\n regex: RegExp('^t?' + reHour24lz + reMinutelz + reSecondlz, 'i'),\n name: 'iso8601nocolon',\n callback: function callback(match, hour, minute, second) {\n return this.time(+hour, +minute, +second, 0);\n }\n },\n\n iso8601dateSlash: {\n // eventhough the trailing slash is optional in PHP\n // here it's mandatory and inputs without the slash\n // are handled by dateslash\n regex: RegExp('^' + reYear4 + '/' + reMonthlz + '/' + reDaylz + '/'),\n name: 'iso8601dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n dateSlash: {\n regex: RegExp('^' + reYear4 + '/' + reMonth + '/' + reDay),\n name: 'dateslash',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n american: {\n regex: RegExp('^' + reMonth + '/' + reDay + '/' + reYear),\n name: 'american',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n americanShort: {\n regex: RegExp('^' + reMonth + '/' + reDay),\n name: 'americanshort',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, month - 1, +day);\n }\n },\n\n gnuDateShortOrIso8601date2: {\n // iso8601date2 is complete subset of gnudateshort\n regex: RegExp('^' + reYear + '-' + reMonth + '-' + reDay),\n name: 'gnudateshort | iso8601date2',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), month - 1, +day);\n }\n },\n\n iso8601date4: {\n regex: RegExp('^' + reYear4withSign + '-' + reMonthlz + '-' + reDaylz),\n name: 'iso8601date4',\n callback: function callback(match, year, month, day) {\n return this.ymd(+year, month - 1, +day);\n }\n },\n\n gnuNoColon: {\n regex: RegExp('^t?' + reHour24lz + reMinutelz, 'i'),\n name: 'gnunocolon',\n callback: function callback(match, hour, minute) {\n // this rule is a special case\n // if time was already set once by any preceding rule, it sets the captured value as year\n switch (this.times) {\n case 0:\n return this.time(+hour, +minute, 0, this.f);\n case 1:\n this.y = hour * 100 + +minute;\n this.times++;\n\n return true;\n default:\n return false;\n }\n }\n },\n\n gnuDateShorter: {\n regex: RegExp('^' + reYear4 + '-' + reMonth),\n name: 'gnudateshorter',\n callback: function callback(match, year, month) {\n return this.ymd(+year, month - 1, 1);\n }\n },\n\n pgTextReverse: {\n // note: allowed years are from 32-9999\n // years below 32 should be treated as days in datefull\n regex: RegExp('^' + '(\\\\d{3,4}|[4-9]\\\\d|3[2-9])-(' + reMonthAbbr + ')-' + reDaylz, 'i'),\n name: 'pgtextreverse',\n callback: function callback(match, year, month, day) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateFull: {\n regex: RegExp('^' + reDay + '[ \\\\t.-]*' + reMonthText + '[ \\\\t.-]*' + reYear, 'i'),\n name: 'datefull',\n callback: function callback(match, day, month, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoDay: {\n regex: RegExp('^' + reMonthText + '[ .\\\\t-]*' + reYear4, 'i'),\n name: 'datenoday',\n callback: function callback(match, month, year) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n dateNoDayRev: {\n regex: RegExp('^' + reYear4 + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenodayrev',\n callback: function callback(match, year, month) {\n return this.ymd(+year, lookupMonth(month), 1);\n }\n },\n\n pgTextShort: {\n regex: RegExp('^(' + reMonthAbbr + ')-' + reDaylz + '-' + reYear, 'i'),\n name: 'pgtextshort',\n callback: function callback(match, month, day, year) {\n return this.ymd(processYear(year), lookupMonth(month), +day);\n }\n },\n\n dateNoYear: {\n regex: RegExp('^' + reDateNoYear, 'i'),\n name: 'datenoyear',\n callback: function callback(match, month, day) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n dateNoYearRev: {\n regex: RegExp('^' + reDay + '[ .\\\\t-]*' + reMonthText, 'i'),\n name: 'datenoyearrev',\n callback: function callback(match, day, month) {\n return this.ymd(this.y, lookupMonth(month), +day);\n }\n },\n\n isoWeekDay: {\n regex: RegExp('^' + reYear4 + '-?W' + reWeekOfYear + '(?:-?([0-7]))?'),\n name: 'isoweekday | isoweek',\n callback: function callback(match, year, week, day) {\n day = day ? +day : 1;\n\n if (!this.ymd(+year, 0, 1)) {\n return false;\n }\n\n // get day of week for Jan 1st\n var dayOfWeek = new Date(this.y, this.m, this.d).getDay();\n\n // and use the day to figure out the offset for day 1 of week 1\n dayOfWeek = 0 - (dayOfWeek > 4 ? dayOfWeek - 7 : dayOfWeek);\n\n this.rd += dayOfWeek + (week - 1) * 7 + day;\n }\n },\n\n relativeText: {\n regex: RegExp('^(' + reReltextnumber + '|' + reReltexttext + ')' + reSpace + '(' + reReltextunit + ')', 'i'),\n name: 'relativetext',\n callback: function callback(match, relValue, relUnit) {\n // todo: implement handling of 'this time-unit'\n // eslint-disable-next-line no-unused-vars\n var _lookupRelative = lookupRelative(relValue),\n amount = _lookupRelative.amount,\n behavior = _lookupRelative.behavior;\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n relative: {\n regex: RegExp('^([+-]*)[ \\\\t]*(\\\\d+)' + reSpaceOpt + '(' + reReltextunit + '|week)', 'i'),\n name: 'relative',\n callback: function callback(match, signs, relValue, relUnit) {\n var minuses = signs.replace(/[^-]/g, '').length;\n\n var amount = +relValue * Math.pow(-1, minuses);\n\n switch (relUnit.toLowerCase()) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n this.rs += amount;\n break;\n case 'min':\n case 'mins':\n case 'minute':\n case 'minutes':\n this.ri += amount;\n break;\n case 'hour':\n case 'hours':\n this.rh += amount;\n break;\n case 'day':\n case 'days':\n this.rd += amount;\n break;\n case 'fortnight':\n case 'fortnights':\n case 'forthnight':\n case 'forthnights':\n this.rd += amount * 14;\n break;\n case 'week':\n case 'weeks':\n this.rd += amount * 7;\n break;\n case 'month':\n case 'months':\n this.rm += amount;\n break;\n case 'year':\n case 'years':\n this.ry += amount;\n break;\n case 'mon':case 'monday':\n case 'tue':case 'tuesday':\n case 'wed':case 'wednesday':\n case 'thu':case 'thursday':\n case 'fri':case 'friday':\n case 'sat':case 'saturday':\n case 'sun':case 'sunday':\n this.resetTime();\n this.weekday = lookupWeekday(relUnit, 7);\n this.weekdayBehavior = 1;\n this.rd += (amount > 0 ? amount - 1 : amount) * 7;\n break;\n case 'weekday':\n case 'weekdays':\n // todo\n break;\n }\n }\n },\n\n dayText: {\n regex: RegExp('^(' + reDaytext + ')', 'i'),\n name: 'daytext',\n callback: function callback(match, dayText) {\n this.resetTime();\n this.weekday = lookupWeekday(dayText, 0);\n\n if (this.weekdayBehavior !== 2) {\n this.weekdayBehavior = 1;\n }\n }\n },\n\n relativeTextWeek: {\n regex: RegExp('^(' + reReltexttext + ')' + reSpace + 'week', 'i'),\n name: 'relativetextweek',\n callback: function callback(match, relText) {\n this.weekdayBehavior = 2;\n\n switch (relText.toLowerCase()) {\n case 'this':\n this.rd += 0;\n break;\n case 'next':\n this.rd += 7;\n break;\n case 'last':\n case 'previous':\n this.rd -= 7;\n break;\n }\n\n if (isNaN(this.weekday)) {\n this.weekday = 1;\n }\n }\n },\n\n monthFullOrMonthAbbr: {\n regex: RegExp('^(' + reMonthFull + '|' + reMonthAbbr + ')', 'i'),\n name: 'monthfull | monthabbr',\n callback: function callback(match, month) {\n return this.ymd(this.y, lookupMonth(month), this.d);\n }\n },\n\n tzCorrection: {\n regex: RegExp('^' + reTzCorrection, 'i'),\n name: 'tzcorrection',\n callback: function callback(tzCorrection) {\n return this.zone(processTzCorrection(tzCorrection));\n }\n },\n\n ago: {\n regex: /^ago/i,\n name: 'ago',\n callback: function callback() {\n this.ry = -this.ry;\n this.rm = -this.rm;\n this.rd = -this.rd;\n this.rh = -this.rh;\n this.ri = -this.ri;\n this.rs = -this.rs;\n this.rf = -this.rf;\n }\n },\n\n year4: {\n regex: RegExp('^' + reYear4),\n name: 'year4',\n callback: function callback(match, year) {\n this.y = +year;\n return true;\n }\n },\n\n whitespace: {\n regex: /^[ .,\\t]+/,\n name: 'whitespace'\n // do nothing\n },\n\n dateShortWithTimeLong: {\n regex: RegExp('^' + reDateNoYear + 't?' + reHour24 + '[:.]' + reMinute + '[:.]' + reSecond, 'i'),\n name: 'dateshortwithtimelong',\n callback: function callback(match, month, day, hour, minute, second) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(+hour, +minute, +second, 0);\n }\n },\n\n dateShortWithTimeLong12: {\n regex: RegExp('^' + reDateNoYear + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),\n name: 'dateshortwithtimelong12',\n callback: function callback(match, month, day, hour, minute, second, meridian) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(processMeridian(+hour, meridian), +minute, +second, 0);\n }\n },\n\n dateShortWithTimeShort: {\n regex: RegExp('^' + reDateNoYear + 't?' + reHour24 + '[:.]' + reMinute, 'i'),\n name: 'dateshortwithtimeshort',\n callback: function callback(match, month, day, hour, minute) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(+hour, +minute, 0, 0);\n }\n },\n\n dateShortWithTimeShort12: {\n regex: RegExp('^' + reDateNoYear + reHour12 + '[:.]' + reMinutelz + reSpaceOpt + reMeridian, 'i'),\n name: 'dateshortwithtimeshort12',\n callback: function callback(match, month, day, hour, minute, meridian) {\n return this.ymd(this.y, lookupMonth(month), +day) && this.time(processMeridian(+hour, meridian), +minute, 0, 0);\n }\n }\n};\n\nvar resultProto = {\n // date\n y: NaN,\n m: NaN,\n d: NaN,\n // time\n h: NaN,\n i: NaN,\n s: NaN,\n f: NaN,\n\n // relative shifts\n ry: 0,\n rm: 0,\n rd: 0,\n rh: 0,\n ri: 0,\n rs: 0,\n rf: 0,\n\n // weekday related shifts\n weekday: NaN,\n weekdayBehavior: 0,\n\n // first or last day of month\n // 0 none, 1 first, -1 last\n firstOrLastDayOfMonth: 0,\n\n // timezone correction in minutes\n z: NaN,\n\n // counters\n dates: 0,\n times: 0,\n zones: 0,\n\n // helper functions\n ymd: function ymd(y, m, d) {\n if (this.dates > 0) {\n return false;\n }\n\n this.dates++;\n this.y = y;\n this.m = m;\n this.d = d;\n return true;\n },\n time: function time(h, i, s, f) {\n if (this.times > 0) {\n return false;\n }\n\n this.times++;\n this.h = h;\n this.i = i;\n this.s = s;\n this.f = f;\n\n return true;\n },\n resetTime: function resetTime() {\n this.h = 0;\n this.i = 0;\n this.s = 0;\n this.f = 0;\n this.times = 0;\n\n return true;\n },\n zone: function zone(minutes) {\n if (this.zones <= 1) {\n this.zones++;\n this.z = minutes;\n return true;\n }\n\n return false;\n },\n toDate: function toDate(relativeTo) {\n if (this.dates && !this.times) {\n this.h = this.i = this.s = this.f = 0;\n }\n\n // fill holes\n if (isNaN(this.y)) {\n this.y = relativeTo.getFullYear();\n }\n\n if (isNaN(this.m)) {\n this.m = relativeTo.getMonth();\n }\n\n if (isNaN(this.d)) {\n this.d = relativeTo.getDate();\n }\n\n if (isNaN(this.h)) {\n this.h = relativeTo.getHours();\n }\n\n if (isNaN(this.i)) {\n this.i = relativeTo.getMinutes();\n }\n\n if (isNaN(this.s)) {\n this.s = relativeTo.getSeconds();\n }\n\n if (isNaN(this.f)) {\n this.f = relativeTo.getMilliseconds();\n }\n\n // adjust special early\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n this.d = 1;\n break;\n case -1:\n this.d = 0;\n this.m += 1;\n break;\n }\n\n if (!isNaN(this.weekday)) {\n var date = new Date(relativeTo.getTime());\n date.setFullYear(this.y, this.m, this.d);\n date.setHours(this.h, this.i, this.s, this.f);\n\n var dow = date.getDay();\n\n if (this.weekdayBehavior === 2) {\n // To make \"this week\" work, where the current day of week is a \"sunday\"\n if (dow === 0 && this.weekday !== 0) {\n this.weekday = -6;\n }\n\n // To make \"sunday this week\" work, where the current day of week is not a \"sunday\"\n if (this.weekday === 0 && dow !== 0) {\n this.weekday = 7;\n }\n\n this.d -= dow;\n this.d += this.weekday;\n } else {\n var diff = this.weekday - dow;\n\n // some PHP magic\n if (this.rd < 0 && diff < 0 || this.rd >= 0 && diff <= -this.weekdayBehavior) {\n diff += 7;\n }\n\n if (this.weekday >= 0) {\n this.d += diff;\n } else {\n this.d -= 7 - (Math.abs(this.weekday) - dow);\n }\n\n this.weekday = NaN;\n }\n }\n\n // adjust relative\n this.y += this.ry;\n this.m += this.rm;\n this.d += this.rd;\n\n this.h += this.rh;\n this.i += this.ri;\n this.s += this.rs;\n this.f += this.rf;\n\n this.ry = this.rm = this.rd = 0;\n this.rh = this.ri = this.rs = this.rf = 0;\n\n var result = new Date(relativeTo.getTime());\n // since Date constructor treats years <= 99 as 1900+\n // it can't be used, thus this weird way\n result.setFullYear(this.y, this.m, this.d);\n result.setHours(this.h, this.i, this.s, this.f);\n\n // note: this is done twice in PHP\n // early when processing special relatives\n // and late\n // todo: check if the logic can be reduced\n // to just one time action\n switch (this.firstOrLastDayOfMonth) {\n case 1:\n result.setDate(1);\n break;\n case -1:\n result.setMonth(result.getMonth() + 1, 0);\n break;\n }\n\n // adjust timezone\n if (!isNaN(this.z) && result.getTimezoneOffset() !== this.z) {\n result.setUTCFullYear(result.getFullYear(), result.getMonth(), result.getDate());\n\n result.setUTCHours(result.getHours(), result.getMinutes() + this.z, result.getSeconds(), result.getMilliseconds());\n }\n\n return result;\n }\n};\n\nmodule.exports = function strtotime(str, now) {\n // discuss at: https://locutus.io/php/strtotime/\n // original by: Caio Ariede (https://caioariede.com)\n // improved by: Kevin van Zonneveld (https://kvz.io)\n // improved by: Caio Ariede (https://caioariede.com)\n // improved by: A. Matías Quezada (https://amatiasq.com)\n // improved by: preuter\n // improved by: Brett Zamir (https://brett-zamir.me)\n // improved by: Mirko Faber\n // input by: David\n // bugfixed by: Wagner B. Soares\n // bugfixed by: Artur Tchernychev\n // bugfixed by: Stephan Bösch-Plepelits (https://github.com/plepe)\n // reimplemented by: Rafał Kukawski\n // note 1: Examples all have a fixed timestamp to prevent\n // note 1: tests to fail because of variable time(zones)\n // example 1: strtotime('+1 day', 1129633200)\n // returns 1: 1129719600\n // example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200)\n // returns 2: 1130425202\n // example 3: strtotime('last month', 1129633200)\n // returns 3: 1127041200\n // example 4: strtotime('2009-05-04 08:30:00+00')\n // returns 4: 1241425800\n // example 5: strtotime('2009-05-04 08:30:00+02:00')\n // returns 5: 1241418600\n\n if (now == null) {\n now = Math.floor(Date.now() / 1000);\n }\n\n // the rule order is important\n // if multiple rules match, the longest match wins\n // if multiple rules match the same string, the first match wins\n var rules = [formats.yesterday, formats.now, formats.noon, formats.midnightOrToday, formats.tomorrow, formats.timestamp, formats.firstOrLastDay, formats.backOrFrontOf,\n // formats.weekdayOf, // not yet implemented\n formats.timeTiny12, formats.timeShort12, formats.timeLong12, formats.mssqltime, formats.timeShort24, formats.timeLong24, formats.iso8601long, formats.gnuNoColon, formats.iso8601noColon, formats.americanShort, formats.american, formats.iso8601date4, formats.iso8601dateSlash, formats.dateSlash, formats.gnuDateShortOrIso8601date2, formats.gnuDateShorter, formats.dateFull, formats.pointedDate4, formats.pointedDate2, formats.dateNoDay, formats.dateNoDayRev, formats.dateTextual, formats.dateNoYear, formats.dateNoYearRev, formats.dateNoColon, formats.xmlRpc, formats.xmlRpcNoColon, formats.soap, formats.wddx, formats.exif, formats.pgydotd, formats.isoWeekDay, formats.pgTextShort, formats.pgTextReverse, formats.clf, formats.year4, formats.ago, formats.dayText, formats.relativeTextWeek, formats.relativeText, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.dateShortWithTimeShort12, formats.dateShortWithTimeLong12, formats.dateShortWithTimeShort, formats.dateShortWithTimeLong, formats.relative, formats.whitespace];\n\n var result = Object.create(resultProto);\n\n while (str.length) {\n var longestMatch = null;\n var finalRule = null;\n\n for (var i = 0, l = rules.length; i < l; i++) {\n var format = rules[i];\n\n var match = str.match(format.regex);\n\n if (match) {\n if (!longestMatch || match[0].length > longestMatch[0].length) {\n longestMatch = match;\n finalRule = format;\n }\n }\n }\n\n if (!finalRule || finalRule.callback && finalRule.callback.apply(result, longestMatch) === false) {\n return false;\n }\n\n str = str.substr(longestMatch[0].length);\n finalRule = null;\n longestMatch = null;\n }\n\n return Math.floor(result.toDate(new Date(now * 1000)) / 1000);\n};\n//# sourceMappingURL=strtotime.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/info/ini_get.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/locutus/php/info/ini_get.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nmodule.exports = function ini_get(varname) {\n // eslint-disable-line camelcase\n // discuss at: https://locutus.io/php/ini_get/\n // original by: Brett Zamir (https://brett-zamir.me)\n // note 1: The ini values must be set by ini_set or manually within an ini file\n // example 1: ini_set('date.timezone', 'Asia/Hong_Kong')\n // example 1: ini_get('date.timezone')\n // returns 1: 'Asia/Hong_Kong'\n\n var $global = typeof window !== 'undefined' ? window : global;\n $global.$locutus = $global.$locutus || {};\n var $locutus = $global.$locutus;\n $locutus.php = $locutus.php || {};\n $locutus.php.ini = $locutus.php.ini || {};\n\n if ($locutus.php.ini[varname] && $locutus.php.ini[varname].local_value !== undefined) {\n if ($locutus.php.ini[varname].local_value === null) {\n return '';\n }\n return $locutus.php.ini[varname].local_value;\n }\n\n return '';\n};\n//# sourceMappingURL=ini_get.js.map\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/strings/strlen.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/strings/strlen.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function strlen(string) {\n // discuss at: https://locutus.io/php/strlen/\n // original by: Kevin van Zonneveld (https://kvz.io)\n // improved by: Sakimori\n // improved by: Kevin van Zonneveld (https://kvz.io)\n // input by: Kirk Strobeck\n // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)\n // revised by: Brett Zamir (https://brett-zamir.me)\n // note 1: May look like overkill, but in order to be truly faithful to handling all Unicode\n // note 1: characters and to this function in PHP which does not count the number of bytes\n // note 1: but counts the number of characters, something like this is really necessary.\n // example 1: strlen('Kevin van Zonneveld')\n // returns 1: 19\n // example 2: ini_set('unicode.semantics', 'on')\n // example 2: strlen('A\\ud87e\\udc04Z')\n // returns 2: 3\n\n var str = string + '';\n\n var iniVal = ( true ? __webpack_require__(/*! ../info/ini_get */ \"./node_modules/locutus/php/info/ini_get.js\")('unicode.semantics') : undefined) || 'off';\n if (iniVal === 'off') {\n return str.length;\n }\n\n var i = 0;\n var lgth = 0;\n\n var getWholeChar = function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n var next = '';\n var prev = '';\n if (code >= 0xD800 && code <= 0xDBFF) {\n // High surrogate (could change last hex to 0xDB7F to\n // treat high private surrogates as single characters)\n if (str.length <= i + 1) {\n throw new Error('High surrogate without following low surrogate');\n }\n next = str.charCodeAt(i + 1);\n if (next < 0xDC00 || next > 0xDFFF) {\n throw new Error('High surrogate without following low surrogate');\n }\n return str.charAt(i) + str.charAt(i + 1);\n } else if (code >= 0xDC00 && code <= 0xDFFF) {\n // Low surrogate\n if (i === 0) {\n throw new Error('Low surrogate without preceding high surrogate');\n }\n prev = str.charCodeAt(i - 1);\n if (prev < 0xD800 || prev > 0xDBFF) {\n // (could change last hex to 0xDB7F to treat high private surrogates\n // as single characters)\n throw new Error('Low surrogate without preceding high surrogate');\n }\n // We can pass over low surrogates now as the second\n // component in a pair which we have already processed\n return false;\n }\n return str.charAt(i);\n };\n\n for (i = 0, lgth = 0; i < str.length; i++) {\n if (getWholeChar(str, i) === false) {\n continue;\n }\n // Adapt this line at the top of any loop, passing in the whole string and\n // the current iteration and returning a variable to represent the individual character;\n // purpose is to treat the first part of a surrogate pair as the whole character and then\n // ignore the second part\n lgth++;\n }\n\n return lgth;\n};\n//# sourceMappingURL=strlen.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/locutus/php/var/is_numeric.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/locutus/php/var/is_numeric.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function is_numeric(mixedVar) {\n // eslint-disable-line camelcase\n // discuss at: https://locutus.io/php/is_numeric/\n // original by: Kevin van Zonneveld (https://kvz.io)\n // improved by: David\n // improved by: taith\n // bugfixed by: Tim de Koning\n // bugfixed by: WebDevHobo (https://webdevhobo.blogspot.com/)\n // bugfixed by: Brett Zamir (https://brett-zamir.me)\n // bugfixed by: Denis Chenu (https://shnoulle.net)\n // example 1: is_numeric(186.31)\n // returns 1: true\n // example 2: is_numeric('Kevin van Zonneveld')\n // returns 2: false\n // example 3: is_numeric(' +186.31e2')\n // returns 3: true\n // example 4: is_numeric('')\n // returns 4: false\n // example 5: is_numeric([])\n // returns 5: false\n // example 6: is_numeric('1 ')\n // returns 6: false\n\n var whitespace = [' ', '\\n', '\\r', '\\t', '\\f', '\\x0b', '\\xa0', '\\u2000', '\\u2001', '\\u2002', '\\u2003', '\\u2004', '\\u2005', '\\u2006', '\\u2007', '\\u2008', '\\u2009', '\\u200A', '\\u200B', '\\u2028', '\\u2029', '\\u3000'].join('');\n\n // @todo: Break this up using many single conditions with early returns\n return (typeof mixedVar === 'number' || typeof mixedVar === 'string' && whitespace.indexOf(mixedVar.slice(-1)) === -1) && mixedVar !== '' && !isNaN(mixedVar);\n};\n//# sourceMappingURL=is_numeric.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"./resources/assets/js/helpers.js\":\n/*!****************************************!*\\\n !*** ./resources/assets/js/helpers.js ***!\n \\****************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! locutus/php/strings/strlen */ \"./node_modules/locutus/php/strings/strlen.js\");\n/* harmony import */ var locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! locutus/php/array/array_diff */ \"./node_modules/locutus/php/array/array_diff.js\");\n/* harmony import */ var locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! locutus/php/datetime/strtotime */ \"./node_modules/locutus/php/datetime/strtotime.js\");\n/* harmony import */ var locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! locutus/php/var/is_numeric */ \"./node_modules/locutus/php/var/is_numeric.js\");\n/* harmony import */ var locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3__);\n/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n\n\n\n$.extend(true, laravelValidation, {\n helpers: {\n /**\n * Numeric rules\n */\n numericRules: ['Integer', 'Numeric'],\n\n /**\n * Gets the file information from file input.\n *\n * @param fieldObj\n * @param index\n * @returns {{file: *, extension: string, size: number}}\n */\n fileinfo: function (fieldObj, index) {\n var FileName = fieldObj.value;\n index = typeof index !== 'undefined' ? index : 0;\n\n if (fieldObj.files !== null) {\n if (typeof fieldObj.files[index] !== 'undefined') {\n return {\n file: FileName,\n extension: FileName.substr(FileName.lastIndexOf('.') + 1),\n size: fieldObj.files[index].size / 1024,\n type: fieldObj.files[index].type\n };\n }\n }\n\n return false;\n },\n\n /**\n * Gets the selectors for th specified field names.\n *\n * @param names\n * @returns {string}\n */\n selector: function (names) {\n var selector = [];\n\n if (!this.isArray(names)) {\n names = [names];\n }\n\n for (var i = 0; i < names.length; i++) {\n selector.push(\"[name='\" + names[i] + \"']\");\n }\n\n return selector.join();\n },\n\n /**\n * Check if element has numeric rules.\n *\n * @param element\n * @returns {boolean}\n */\n hasNumericRules: function (element) {\n return this.hasRules(element, this.numericRules);\n },\n\n /**\n * Check if element has passed rules.\n *\n * @param element\n * @param rules\n * @returns {boolean}\n */\n hasRules: function (element, rules) {\n var found = false;\n\n if (typeof rules === 'string') {\n rules = [rules];\n }\n\n var validator = $.data(element.form, \"validator\");\n var listRules = [];\n var cache = validator.arrayRulesCache;\n\n if (element.name in cache) {\n $.each(cache[element.name], function (index, arrayRule) {\n listRules.push(arrayRule);\n });\n }\n\n if (element.name in validator.settings.rules) {\n listRules.push(validator.settings.rules[element.name]);\n }\n\n $.each(listRules, function (index, objRules) {\n if ('laravelValidation' in objRules) {\n var _rules = objRules.laravelValidation;\n\n for (var i = 0; i < _rules.length; i++) {\n if ($.inArray(_rules[i][0], rules) !== -1) {\n found = true;\n return false;\n }\n }\n }\n });\n return found;\n },\n\n /**\n * Return the string length using PHP function.\n * http://php.net/manual/en/function.strlen.php\n * http://phpjs.org/functions/strlen/\n *\n * @param string\n */\n strlen: function (string) {\n return locutus_php_strings_strlen__WEBPACK_IMPORTED_MODULE_0___default()(string);\n },\n\n /**\n * Get the size of the object depending of his type.\n *\n * @param obj\n * @param element\n * @param value\n * @returns int\n */\n getSize: function getSize(obj, element, value) {\n if (this.hasNumericRules(element) && this.is_numeric(value)) {\n return parseFloat(value);\n } else if (this.isArray(value)) {\n return parseFloat(value.length);\n } else if (element.type === 'file') {\n return parseFloat(Math.floor(this.fileinfo(element).size));\n }\n\n return parseFloat(this.strlen(value));\n },\n\n /**\n * Return specified rule from element.\n *\n * @param rule\n * @param element\n * @returns object\n */\n getLaravelValidation: function (rule, element) {\n var found = undefined;\n $.each($.validator.staticRules(element), function (key, rules) {\n if (key === \"laravelValidation\") {\n $.each(rules, function (i, value) {\n if (value[0] === rule) {\n found = value;\n }\n });\n }\n });\n return found;\n },\n\n /**\n * Return he timestamp of value passed using format or default format in element.\n *\n * @param value\n * @param format\n * @returns {boolean|int}\n */\n parseTime: function (value, format) {\n var timeValue = false;\n var fmt = new DateFormatter();\n\n if (typeof format === 'object') {\n var dateRule = this.getLaravelValidation('DateFormat', format);\n\n if (dateRule !== undefined) {\n format = dateRule[1][0];\n } else {\n format = null;\n }\n }\n\n if (format == null) {\n timeValue = this.strtotime(value);\n } else {\n timeValue = fmt.parseDate(value, format);\n\n if (timeValue) {\n timeValue = Math.round(timeValue.getTime() / 1000);\n }\n }\n\n return timeValue;\n },\n\n /**\n * Compare a given date against another using an operator.\n *\n * @param validator\n * @param value\n * @param element\n * @param params\n * @param operator\n * @return {boolean}\n */\n compareDates: function (validator, value, element, params, operator) {\n var timeCompare = parseFloat(params);\n\n if (isNaN(timeCompare)) {\n var target = this.dependentElement(validator, element, params);\n\n if (target === undefined) {\n return false;\n }\n\n timeCompare = this.parseTime(validator.elementValue(target), target);\n }\n\n var timeValue = this.parseTime(value, element);\n\n if (timeValue === false) {\n return false;\n }\n\n switch (operator) {\n case '<':\n return timeValue < timeCompare;\n\n case '<=':\n return timeValue <= timeCompare;\n\n case '==':\n case '===':\n return timeValue === timeCompare;\n\n case '>':\n return timeValue > timeCompare;\n\n case '>=':\n return timeValue >= timeCompare;\n\n default:\n throw new Error('Unsupported operator.');\n }\n },\n\n /**\n * This method allows you to intelligently guess the date by closely matching the specific format.\n *\n * @param value\n * @param format\n * @returns {Date}\n */\n guessDate: function (value, format) {\n var fmt = new DateFormatter();\n return fmt.guessDate(value, format);\n },\n\n /**\n * Returns Unix timestamp based on PHP function strototime.\n * http://php.net/manual/es/function.strtotime.php\n * http://phpjs.org/functions/strtotime/\n *\n * @param text\n * @param now\n * @returns {*}\n */\n strtotime: function (text, now) {\n return locutus_php_datetime_strtotime__WEBPACK_IMPORTED_MODULE_2___default()(text, now);\n },\n\n /**\n * Returns if value is numeric.\n * http://php.net/manual/es/var.is_numeric.php\n * http://phpjs.org/functions/is_numeric/\n *\n * @param mixed_var\n * @returns {*}\n */\n is_numeric: function (mixed_var) {\n return locutus_php_var_is_numeric__WEBPACK_IMPORTED_MODULE_3___default()(mixed_var);\n },\n\n /**\n * Check whether the argument is of type Array.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray#Polyfill\n *\n * @param arg\n * @returns {boolean}\n */\n isArray: function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n },\n\n /**\n * Returns Array diff based on PHP function array_diff.\n * http://php.net/manual/es/function.array_diff.php\n * http://phpjs.org/functions/array_diff/\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayDiff: function (arr1, arr2) {\n return locutus_php_array_array_diff__WEBPACK_IMPORTED_MODULE_1___default()(arr1, arr2);\n },\n\n /**\n * Check whether two arrays are equal to one another.\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayEquals: function (arr1, arr2) {\n if (!this.isArray(arr1) || !this.isArray(arr2)) {\n return false;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n return $.isEmptyObject(this.arrayDiff(arr1, arr2));\n },\n\n /**\n * Makes element dependant from other.\n *\n * @param validator\n * @param element\n * @param name\n * @returns {*}\n */\n dependentElement: function (validator, element, name) {\n var el = validator.findByName(name);\n\n if (el[0] !== undefined && validator.settings.onfocusout) {\n var event = 'blur';\n\n if (el[0].tagName === 'SELECT' || el[0].tagName === 'OPTION' || el[0].type === 'checkbox' || el[0].type === 'radio') {\n event = 'click';\n }\n\n var ruleName = '.validate-laravelValidation';\n el.off(ruleName).off(event + ruleName + '-' + element.name).on(event + ruleName + '-' + element.name, function () {\n $(element).valid();\n });\n }\n\n return el[0];\n },\n\n /**\n * Parses error Ajax response and gets the message.\n *\n * @param response\n * @returns {string[]}\n */\n parseErrorResponse: function (response) {\n var newResponse = ['Whoops, looks like something went wrong.'];\n\n if ('responseText' in response) {\n var errorMsg = response.responseText.match(/(.*)<\\/h1\\s*>/i);\n\n if (this.isArray(errorMsg)) {\n newResponse = [errorMsg[1]];\n }\n }\n\n return newResponse;\n },\n\n /**\n * Escape string to use as Regular Expression.\n *\n * @param str\n * @returns string\n */\n escapeRegExp: function (str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n\n /**\n * Generate RegExp from wildcard attributes.\n *\n * @param name\n * @returns {RegExp}\n */\n regexFromWildcard: function (name) {\n var nameParts = name.split(\"[*]\");\n\n if (nameParts.length === 1) {\n nameParts.push('');\n }\n\n var regexpParts = nameParts.map(function (currentValue, index) {\n if (index % 2 === 0) {\n currentValue = currentValue + '[';\n } else {\n currentValue = ']' + currentValue;\n }\n\n return laravelValidation.helpers.escapeRegExp(currentValue);\n });\n return new RegExp('^' + regexpParts.join('[^\\\\]]*') + '$');\n },\n\n /**\n * Merge additional laravel validation rules into the current rule set.\n *\n * @param {object} rules\n * @param {object} newRules\n * @returns {object}\n */\n mergeRules: function (rules, newRules) {\n var rulesList = {\n 'laravelValidation': newRules.laravelValidation || [],\n 'laravelValidationRemote': newRules.laravelValidationRemote || []\n };\n\n for (var key in rulesList) {\n if (rulesList[key].length === 0) {\n continue;\n }\n\n if (typeof rules[key] === \"undefined\") {\n rules[key] = [];\n }\n\n rules[key] = rules[key].concat(rulesList[key]);\n }\n\n return rules;\n }\n }\n});\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvY3V0dXMvcGhwL2RhdGV0aW1lL3N0cnRvdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvaW5mby9pbmlfZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2N1dHVzL3BocC9zdHJpbmdzL3N0cmxlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiJCIsImV4dGVuZCIsImxhcmF2ZWxWYWxpZGF0aW9uIiwiaGVscGVycyIsIm51bWVyaWNSdWxlcyIsImZpbGVpbmZvIiwiZmllbGRPYmoiLCJpbmRleCIsIkZpbGVOYW1lIiwidmFsdWUiLCJmaWxlcyIsImZpbGUiLCJleHRlbnNpb24iLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInNpemUiLCJ0eXBlIiwic2VsZWN0b3IiLCJuYW1lcyIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iLCJoYXNOdW1lcmljUnVsZXMiLCJlbGVtZW50IiwiaGFzUnVsZXMiLCJydWxlcyIsImZvdW5kIiwidmFsaWRhdG9yIiwiZGF0YSIsImZvcm0iLCJsaXN0UnVsZXMiLCJjYWNoZSIsImFycmF5UnVsZXNDYWNoZSIsIm5hbWUiLCJlYWNoIiwiYXJyYXlSdWxlIiwic2V0dGluZ3MiLCJvYmpSdWxlcyIsIl9ydWxlcyIsImluQXJyYXkiLCJzdHJsZW4iLCJzdHJpbmciLCJnZXRTaXplIiwib2JqIiwiaXNfbnVtZXJpYyIsInBhcnNlRmxvYXQiLCJNYXRoIiwiZmxvb3IiLCJnZXRMYXJhdmVsVmFsaWRhdGlvbiIsInJ1bGUiLCJ1bmRlZmluZWQiLCJzdGF0aWNSdWxlcyIsImtleSIsInBhcnNlVGltZSIsImZvcm1hdCIsInRpbWVWYWx1ZSIsImZtdCIsIkRhdGVGb3JtYXR0ZXIiLCJkYXRlUnVsZSIsInN0cnRvdGltZSIsInBhcnNlRGF0ZSIsInJvdW5kIiwiZ2V0VGltZSIsImNvbXBhcmVEYXRlcyIsInBhcmFtcyIsIm9wZXJhdG9yIiwidGltZUNvbXBhcmUiLCJpc05hTiIsInRhcmdldCIsImRlcGVuZGVudEVsZW1lbnQiLCJlbGVtZW50VmFsdWUiLCJFcnJvciIsImd1ZXNzRGF0ZSIsInRleHQiLCJub3ciLCJtaXhlZF92YXIiLCJhcmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJhcnJheURpZmYiLCJhcnIxIiwiYXJyMiIsImFycmF5X2RpZmYiLCJhcnJheUVxdWFscyIsImlzRW1wdHlPYmplY3QiLCJlbCIsImZpbmRCeU5hbWUiLCJvbmZvY3Vzb3V0IiwiZXZlbnQiLCJ0YWdOYW1lIiwicnVsZU5hbWUiLCJvZmYiLCJvbiIsInZhbGlkIiwicGFyc2VFcnJvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJuZXdSZXNwb25zZSIsImVycm9yTXNnIiwicmVzcG9uc2VUZXh0IiwibWF0Y2giLCJlc2NhcGVSZWdFeHAiLCJzdHIiLCJyZXBsYWNlIiwicmVnZXhGcm9tV2lsZGNhcmQiLCJuYW1lUGFydHMiLCJzcGxpdCIsInJlZ2V4cFBhcnRzIiwibWFwIiwiY3VycmVudFZhbHVlIiwiUmVnRXhwIiwibWVyZ2VSdWxlcyIsIm5ld1J1bGVzIiwicnVsZXNMaXN0IiwibGFyYXZlbFZhbGlkYXRpb25SZW1vdGUiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNsQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixFQUFFO0FBQ3hCLHNCQUFzQixFQUFFO0FBQ3hCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3REFBd0QsSUFBSTtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLElBQUk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUM7Ozs7Ozs7Ozs7OztBQ3hsQ0EsOENBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7QUMxQmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JB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WSxHQUFHLEdBQTlCO0FBQ0gsU0FGRCxNQUVPO0FBQ0hBLHNCQUFZLEdBQUcsTUFBS0EsWUFBcEI7QUFDSDs7QUFFRCxlQUFPOUcsaUJBQWlCLENBQUNDLE9BQWxCLENBQTBCcUcsWUFBMUIsQ0FBdUNRLFlBQXZDLENBQVA7QUFDSCxPQVJpQixDQUFsQjtBQVVBLGFBQU8sSUFBSUMsTUFBSixDQUFXLE1BQUlILFdBQVcsQ0FBQ3ZGLElBQVosQ0FBaUIsU0FBakIsQ0FBSixHQUFnQyxHQUEzQyxDQUFQO0FBQ0gsS0EvWUk7O0FBaVpMOzs7Ozs7O0FBT0EyRixjQUFVLEVBQUUsVUFBVXZGLEtBQVYsRUFBaUJ3RixRQUFqQixFQUEyQjtBQUNuQyxVQUFJQyxTQUFTLEdBQUc7QUFDWiw2QkFBcUJELFFBQVEsQ0FBQ2pILGlCQUFULElBQThCLEVBRHZDO0FBRVosbUNBQTJCaUgsUUFBUSxDQUFDRSx1QkFBVCxJQUFvQztBQUZuRCxPQUFoQjs7QUFLQSxXQUFLLElBQUkvRCxHQUFULElBQWdCOEQsU0FBaEIsRUFBMkI7QUFDdkIsWUFBSUEsU0FBUyxDQUFDOUQsR0FBRCxDQUFULENBQWVqQyxNQUFmLEtBQTBCLENBQTlCLEVBQWlDO0FBQzdCO0FBQ0g7O0FBRUQsWUFBSSxPQUFPTSxLQUFLLENBQUMyQixHQUFELENBQVosS0FBc0IsV0FBMUIsRUFBdUM7QUFDbkMzQixlQUFLLENBQUMyQixHQUFELENBQUwsR0FBYSxFQUFiO0FBQ0g7O0FBRUQzQixhQUFLLENBQUMyQixHQUFELENBQUwsR0FBYTNCLEtBQUssQ0FBQzJCLEdBQUQsQ0FBTCxDQUFXZ0UsTUFBWCxDQUFrQkYsU0FBUyxDQUFDOUQsR0FBRCxDQUEzQixDQUFiO0FBQ0g7O0FBRUQsYUFBTzNCLEtBQVA7QUFDSDtBQTNhSTtBQUZxQixDQUFsQyxFIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3Jlc291cmNlcy9hc3NldHMvanMvaGVscGVycy5qc1wiKTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhcnJheV9kaWZmKGFycjEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvYXJyYXlfZGlmZi9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHBzOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogU2Fuam95IFJveVxuICAvLyAgcmV2aXNlZCBieTogQnJldHQgWmFtaXIgKGh0dHBzOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgZXhhbXBsZSAxOiBhcnJheV9kaWZmKFsnS2V2aW4nLCAndmFuJywgJ1pvbm5ldmVsZCddLCBbJ3ZhbicsICdab25uZXZlbGQnXSlcbiAgLy8gICByZXR1cm5zIDE6IHswOidLZXZpbid9XG5cbiAgdmFyIHJldEFyciA9IHt9O1xuICB2YXIgYXJnbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBrMSA9ICcnO1xuICB2YXIgaSA9IDE7XG4gIHZhciBrID0gJyc7XG4gIHZhciBhcnIgPSB7fTtcblxuICBhcnIxa2V5czogZm9yIChrMSBpbiBhcnIxKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sYWJlbHNcbiAgICBmb3IgKGkgPSAxOyBpIDwgYXJnbDsgaSsrKSB7XG4gICAgICBhcnIgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKGsgaW4gYXJyKSB7XG4gICAgICAgIGlmIChhcnJba10gPT09IGFycjFbazFdKSB7XG4gICAgICAgICAgLy8gSWYgaXQgcmVhY2hlcyBoZXJlLCBpdCB3YXMgZm91bmQgaW4gYXQgbGVhc3Qgb25lIGFycmF5LCBzbyB0cnkgbmV4dCB2YWx1ZVxuICAgICAgICAgIGNvbnRpbnVlIGFycjFrZXlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxhYmVsc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXRBcnJbazFdID0gYXJyMVtrMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldEFycjtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJheV9kaWZmLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlU3BhY2UgPSAnWyBcXFxcdF0rJztcbnZhciByZVNwYWNlT3B0ID0gJ1sgXFxcXHRdKic7XG52YXIgcmVNZXJpZGlhbiA9ICcoPzooW2FwXSlcXFxcLj9tXFxcXC4/KFtcXFxcdCBdfCQpKSc7XG52YXIgcmVIb3VyMjQgPSAnKDJbMC00XXxbMDFdP1swLTldKSc7XG52YXIgcmVIb3VyMjRseiA9ICcoWzAxXVswLTldfDJbMC00XSknO1xudmFyIHJlSG91cjEyID0gJygwP1sxLTldfDFbMC0yXSknO1xudmFyIHJlTWludXRlID0gJyhbMC01XT9bMC05XSknO1xudmFyIHJlTWludXRlbHogPSAnKFswLTVdWzAtOV0pJztcbnZhciByZVNlY29uZCA9ICcoNjB8WzAtNV0/WzAtOV0pJztcbnZhciByZVNlY29uZGx6ID0gJyg2MHxbMC01XVswLTldKSc7XG52YXIgcmVGcmFjID0gJyg/OlxcXFwuKFswLTldKykpJztcblxudmFyIHJlRGF5ZnVsbCA9ICdzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSc7XG52YXIgcmVEYXlhYmJyID0gJ3N1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCc7XG52YXIgcmVEYXl0ZXh0ID0gcmVEYXlmdWxsICsgJ3wnICsgcmVEYXlhYmJyICsgJ3x3ZWVrZGF5cz8nO1xuXG52YXIgcmVSZWx0ZXh0bnVtYmVyID0gJ2ZpcnN0fHNlY29uZHx0aGlyZHxmb3VydGh8ZmlmdGh8c2l4dGh8c2V2ZW50aHxlaWdodGg/fG5pbnRofHRlbnRofGVsZXZlbnRofHR3ZWxmdGgnO1xudmFyIHJlUmVsdGV4dHRleHQgPSAnbmV4dHxsYXN0fHByZXZpb3VzfHRoaXMnO1xudmFyIHJlUmVsdGV4dHVuaXQgPSAnKD86c2Vjb25kfHNlY3xtaW51dGV8bWlufGhvdXJ8ZGF5fGZvcnRuaWdodHxmb3J0aG5pZ2h0fG1vbnRofHllYXIpcz98d2Vla3N8JyArIHJlRGF5dGV4dDtcblxudmFyIHJlWWVhciA9ICcoWzAtOV17MSw0fSknO1xudmFyIHJlWWVhcjIgPSAnKFswLTldezJ9KSc7XG52YXIgcmVZZWFyNCA9ICcoWzAtOV17NH0pJztcbnZhciByZVllYXI0d2l0aFNpZ24gPSAnKFsrLV0/WzAtOV17NH0pJztcbnZhciByZU1vbnRoID0gJygxWzAtMl18MD9bMC05XSknO1xudmFyIHJlTW9udGhseiA9ICcoMFswLTldfDFbMC0yXSknO1xudmFyIHJlRGF5ID0gJyg/OigzWzAxXXxbMC0yXT9bMC05XSkoPzpzdHxuZHxyZHx0aCk/KSc7XG52YXIgcmVEYXlseiA9ICcoMFswLTldfFsxLTJdWzAtOV18M1swMV0pJztcblxudmFyIHJlTW9udGhGdWxsID0gJ2phbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXInO1xudmFyIHJlTW9udGhBYmJyID0gJ2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwdD98b2N0fG5vdnxkZWMnO1xudmFyIHJlTW9udGhyb21hbiA9ICdpW3Z4XXx2aXswLDN9fHhpezAsMn18aXsxLDN9JztcbnZhciByZU1vbnRoVGV4dCA9ICcoJyArIHJlTW9udGhGdWxsICsgJ3wnICsgcmVNb250aEFiYnIgKyAnfCcgKyByZU1vbnRocm9tYW4gKyAnKSc7XG5cbnZhciByZVR6Q29ycmVjdGlvbiA9ICcoKD86R01UKT8oWystXSknICsgcmVIb3VyMjQgKyAnOj8nICsgcmVNaW51dGUgKyAnPyknO1xudmFyIHJlRGF5T2ZZZWFyID0gJygwMFsxLTldfDBbMS05XVswLTldfFsxMl1bMC05XVswLTldfDNbMC01XVswLTldfDM2WzAtNl0pJztcbnZhciByZVdlZWtPZlllYXIgPSAnKDBbMS05XXxbMS00XVswLTldfDVbMC0zXSknO1xuXG52YXIgcmVEYXRlTm9ZZWFyID0gcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSonO1xuXG5mdW5jdGlvbiBwcm9jZXNzTWVyaWRpYW4oaG91ciwgbWVyaWRpYW4pIHtcbiAgbWVyaWRpYW4gPSBtZXJpZGlhbiAmJiBtZXJpZGlhbi50b0xvd2VyQ2FzZSgpO1xuXG4gIHN3aXRjaCAobWVyaWRpYW4pIHtcbiAgICBjYXNlICdhJzpcbiAgICAgIGhvdXIgKz0gaG91ciA9PT0gMTIgPyAtMTIgOiAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncCc6XG4gICAgICBob3VyICs9IGhvdXIgIT09IDEyID8gMTIgOiAwO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gaG91cjtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1llYXIoeWVhclN0cikge1xuICB2YXIgeWVhciA9ICt5ZWFyU3RyO1xuXG4gIGlmICh5ZWFyU3RyLmxlbmd0aCA8IDQgJiYgeWVhciA8IDEwMCkge1xuICAgIHllYXIgKz0geWVhciA8IDcwID8gMjAwMCA6IDE5MDA7XG4gIH1cblxuICByZXR1cm4geWVhcjtcbn1cblxuZnVuY3Rpb24gbG9va3VwTW9udGgobW9udGhTdHIpIHtcbiAgcmV0dXJuIHtcbiAgICBqYW46IDAsXG4gICAgamFudWFyeTogMCxcbiAgICBpOiAwLFxuICAgIGZlYjogMSxcbiAgICBmZWJydWFyeTogMSxcbiAgICBpaTogMSxcbiAgICBtYXI6IDIsXG4gICAgbWFyY2g6IDIsXG4gICAgaWlpOiAyLFxuICAgIGFwcjogMyxcbiAgICBhcHJpbDogMyxcbiAgICBpdjogMyxcbiAgICBtYXk6IDQsXG4gICAgdjogNCxcbiAgICBqdW46IDUsXG4gICAganVuZTogNSxcbiAgICB2aTogNSxcbiAgICBqdWw6IDYsXG4gICAganVseTogNixcbiAgICB2aWk6IDYsXG4gICAgYXVnOiA3LFxuICAgIGF1Z3VzdDogNyxcbiAgICB2aWlpOiA3LFxuICAgIHNlcDogOCxcbiAgICBzZXB0OiA4LFxuICAgIHNlcHRlbWJlcjogOCxcbiAgICBpeDogOCxcbiAgICBvY3Q6IDksXG4gICAgb2N0b2JlcjogOSxcbiAgICB4OiA5LFxuICAgIG5vdjogMTAsXG4gICAgbm92ZW1iZXI6IDEwLFxuICAgIHhpOiAxMCxcbiAgICBkZWM6IDExLFxuICAgIGRlY2VtYmVyOiAxMSxcbiAgICB4aWk6IDExXG4gIH1bbW9udGhTdHIudG9Mb3dlckNhc2UoKV07XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFdlZWtkYXkoZGF5U3RyKSB7XG4gIHZhciBkZXNpcmVkU3VuZGF5TnVtYmVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuXG4gIHZhciBkYXlOdW1iZXJzID0ge1xuICAgIG1vbjogMSxcbiAgICBtb25kYXk6IDEsXG4gICAgdHVlOiAyLFxuICAgIHR1ZXNkYXk6IDIsXG4gICAgd2VkOiAzLFxuICAgIHdlZG5lc2RheTogMyxcbiAgICB0aHU6IDQsXG4gICAgdGh1cnNkYXk6IDQsXG4gICAgZnJpOiA1LFxuICAgIGZyaWRheTogNSxcbiAgICBzYXQ6IDYsXG4gICAgc2F0dXJkYXk6IDYsXG4gICAgc3VuOiAwLFxuICAgIHN1bmRheTogMFxuICB9O1xuXG4gIHJldHVybiBkYXlOdW1iZXJzW2RheVN0ci50b0xvd2VyQ2FzZSgpXSB8fCBkZXNpcmVkU3VuZGF5TnVtYmVyO1xufVxuXG5mdW5jdGlvbiBsb29rdXBSZWxhdGl2ZShyZWxUZXh0KSB7XG4gIHZhciByZWxhdGl2ZU51bWJlcnMgPSB7XG4gICAgbGFzdDogLTEsXG4gICAgcHJldmlvdXM6IC0xLFxuICAgIHRoaXM6IDAsXG4gICAgZmlyc3Q6IDEsXG4gICAgbmV4dDogMSxcbiAgICBzZWNvbmQ6IDIsXG4gICAgdGhpcmQ6IDMsXG4gICAgZm91cnRoOiA0LFxuICAgIGZpZnRoOiA1LFxuICAgIHNpeHRoOiA2LFxuICAgIHNldmVudGg6IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgZWlnaHRoOiA4LFxuICAgIG5pbnRoOiA5LFxuICAgIHRlbnRoOiAxMCxcbiAgICBlbGV2ZW50aDogMTEsXG4gICAgdHdlbGZ0aDogMTJcbiAgfTtcblxuICB2YXIgcmVsYXRpdmVCZWhhdmlvciA9IHtcbiAgICB0aGlzOiAxXG4gIH07XG5cbiAgdmFyIHJlbFRleHRMb3dlciA9IHJlbFRleHQudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4ge1xuICAgIGFtb3VudDogcmVsYXRpdmVOdW1iZXJzW3JlbFRleHRMb3dlcl0sXG4gICAgYmVoYXZpb3I6IHJlbGF0aXZlQmVoYXZpb3JbcmVsVGV4dExvd2VyXSB8fCAwXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUekNvcnJlY3Rpb24odHpPZmZzZXQsIG9sZFZhbHVlKSB7XG4gIHZhciByZVR6Q29ycmVjdGlvbkxvb3NlID0gLyg/OkdNVCk/KFsrLV0pKFxcZCspKDo/KShcXGR7MCwyfSkvaTtcbiAgdHpPZmZzZXQgPSB0ek9mZnNldCAmJiB0ek9mZnNldC5tYXRjaChyZVR6Q29ycmVjdGlvbkxvb3NlKTtcblxuICBpZiAoIXR6T2Zmc2V0KSB7XG4gICAgcmV0dXJuIG9sZFZhbHVlO1xuICB9XG5cbiAgdmFyIHNpZ24gPSB0ek9mZnNldFsxXSA9PT0gJy0nID8gMSA6IC0xO1xuICB2YXIgaG91cnMgPSArdHpPZmZzZXRbMl07XG4gIHZhciBtaW51dGVzID0gK3R6T2Zmc2V0WzRdO1xuXG4gIGlmICghdHpPZmZzZXRbNF0gJiYgIXR6T2Zmc2V0WzNdKSB7XG4gICAgbWludXRlcyA9IE1hdGguZmxvb3IoaG91cnMgJSAxMDApO1xuICAgIGhvdXJzID0gTWF0aC5mbG9vcihob3VycyAvIDEwMCk7XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIDYwICsgbWludXRlcyk7XG59XG5cbnZhciBmb3JtYXRzID0ge1xuICB5ZXN0ZXJkYXk6IHtcbiAgICByZWdleDogL155ZXN0ZXJkYXkvaSxcbiAgICBuYW1lOiAneWVzdGVyZGF5JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJkIC09IDE7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgbm93OiB7XG4gICAgcmVnZXg6IC9ebm93L2ksXG4gICAgbmFtZTogJ25vdydcbiAgICAvLyBkbyBub3RoaW5nXG4gIH0sXG5cbiAgbm9vbjoge1xuICAgIHJlZ2V4OiAvXm5vb24vaSxcbiAgICBuYW1lOiAnbm9vbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCkgJiYgdGhpcy50aW1lKDEyLCAwLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgbWlkbmlnaHRPclRvZGF5OiB7XG4gICAgcmVnZXg6IC9eKG1pZG5pZ2h0fHRvZGF5KS9pLFxuICAgIG5hbWU6ICdtaWRuaWdodCB8IHRvZGF5JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgdG9tb3Jyb3c6IHtcbiAgICByZWdleDogL150b21vcnJvdy9pLFxuICAgIG5hbWU6ICd0b21vcnJvdycsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgdGhpcy5yZCArPSAxO1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVzdGFtcDoge1xuICAgIHJlZ2V4OiAvXkAoLT9cXGQrKS9pLFxuICAgIG5hbWU6ICd0aW1lc3RhbXAnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgdGltZXN0YW1wKSB7XG4gICAgICB0aGlzLnJzICs9ICt0aW1lc3RhbXA7XG4gICAgICB0aGlzLnkgPSAxOTcwO1xuICAgICAgdGhpcy5tID0gMDtcbiAgICAgIHRoaXMuZCA9IDE7XG4gICAgICB0aGlzLmRhdGVzID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUaW1lKCkgJiYgdGhpcy56b25lKDApO1xuICAgIH1cbiAgfSxcblxuICBmaXJzdE9yTGFzdERheToge1xuICAgIHJlZ2V4OiAvXihmaXJzdHxsYXN0KSBkYXkgb2YvaSxcbiAgICBuYW1lOiAnZmlyc3RkYXlvZiB8IGxhc3RkYXlvZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXkpIHtcbiAgICAgIGlmIChkYXkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICB0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0T3JMYXN0RGF5T2ZNb250aCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBiYWNrT3JGcm9udE9mOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXihiYWNrfGZyb250KSBvZiAnICsgcmVIb3VyMjQgKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiArICc/JywgJ2knKSxcbiAgICBuYW1lOiAnYmFja29mIHwgZnJvbnRvZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBzaWRlLCBob3VycywgbWVyaWRpYW4pIHtcbiAgICAgIHZhciBiYWNrID0gc2lkZS50b0xvd2VyQ2FzZSgpID09PSAnYmFjayc7XG4gICAgICB2YXIgaG91ciA9ICtob3VycztcbiAgICAgIHZhciBtaW51dGUgPSAxNTtcblxuICAgICAgaWYgKCFiYWNrKSB7XG4gICAgICAgIGhvdXIgLT0gMTtcbiAgICAgICAgbWludXRlID0gNDU7XG4gICAgICB9XG5cbiAgICAgIGhvdXIgPSBwcm9jZXNzTWVyaWRpYW4oaG91ciwgbWVyaWRpYW4pO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRpbWUoKSAmJiB0aGlzLnRpbWUoaG91ciwgbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgd2Vla2RheU9mOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0bnVtYmVyICsgJ3wnICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnKCcgKyByZURheWZ1bGwgKyAnfCcgKyByZURheWFiYnIgKyAnKScgKyByZVNwYWNlICsgJ29mJywgJ2knKSxcbiAgICBuYW1lOiAnd2Vla2RheW9mJ1xuICAgIC8vIHRvZG9cbiAgfSxcblxuICBtc3NxbHRpbWU6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJzonICsgcmVNaW51dGVseiArICc6JyArIHJlU2Vjb25kbHogKyAnWzouXShbMC05XSspJyArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ21zc3FsdGltZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhYywgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUocHJvY2Vzc01lcmlkaWFuKCtob3VyLCBtZXJpZGlhbiksICttaW51dGUsICtzZWNvbmQsICtmcmFjLnN1YnN0cigwLCAzKSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVMb25nMTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZGx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ3RpbWVsb25nMTInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVNob3J0MTI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlSG91cjEyICsgJ1s6Ll0nICsgcmVNaW51dGVseiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICd0aW1lc2hvcnQxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtaW51dGUsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCAwLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgdGltZVRpbnkxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVIb3VyMTIgKyByZVNwYWNlT3B0ICsgcmVNZXJpZGlhbiwgJ2knKSxcbiAgICBuYW1lOiAndGltZXRpbnkxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBob3VyLCBtZXJpZGlhbikge1xuICAgICAgcmV0dXJuIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgMCwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIHNvYXA6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLScgKyByZU1vbnRobHogKyAnLScgKyByZURheWx6ICsgJ1QnICsgcmVIb3VyMjRseiArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6ICsgcmVGcmFjICsgcmVUekNvcnJlY3Rpb24gKyAnPycsICdpJyksXG4gICAgbmFtZTogJ3NvYXAnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWMsIHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgK2ZyYWMuc3Vic3RyKDAsIDMpKSAmJiB0aGlzLnpvbmUocHJvY2Vzc1R6Q29ycmVjdGlvbih0ekNvcnJlY3Rpb24pKTtcbiAgICB9XG4gIH0sXG5cbiAgd2RkeDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArICctJyArIHJlTW9udGggKyAnLScgKyByZURheSArICdUJyArIHJlSG91cjI0ICsgJzonICsgcmVNaW51dGUgKyAnOicgKyByZVNlY29uZCksXG4gICAgbmFtZTogJ3dkZHgnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBleGlmOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJzonICsgcmVNb250aGx6ICsgJzonICsgcmVEYXlseiArICcgJyArIHJlSG91cjI0bHogKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiwgJ2knKSxcbiAgICBuYW1lOiAnZXhpZicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIHhtbFJwYzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHogKyAnVCcgKyByZUhvdXIyNCArICc6JyArIHJlTWludXRlbHogKyAnOicgKyByZVNlY29uZGx6KSxcbiAgICBuYW1lOiAneG1scnBjJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSkgJiYgdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgeG1sUnBjTm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHogKyAnW1R0XScgKyByZUhvdXIyNCArIHJlTWludXRlbHogKyByZVNlY29uZGx6KSxcbiAgICBuYW1lOiAneG1scnBjbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGNsZjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXkgKyAnLygnICsgcmVNb250aEFiYnIgKyAnKS8nICsgcmVZZWFyNCArICc6JyArIHJlSG91cjI0bHogKyAnOicgKyByZU1pbnV0ZWx6ICsgJzonICsgcmVTZWNvbmRseiArIHJlU3BhY2UgKyByZVR6Q29ycmVjdGlvbiwgJ2knKSxcbiAgICBuYW1lOiAnY2xmJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCB0ekNvcnJlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KSAmJiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApICYmIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICBpc284NjAxbG9uZzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ150PycgKyByZUhvdXIyNCArICdbOi5dJyArIHJlTWludXRlICsgJ1s6Ll0nICsgcmVTZWNvbmQgKyByZUZyYWMsICdpJyksXG4gICAgbmFtZTogJ2lzbzg2MDFsb25nJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lKCtob3VyLCArbWludXRlLCArc2Vjb25kLCArZnJhYy5zdWJzdHIoMCwgMykpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlVGV4dHVhbDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aFRleHQgKyAnWyAuXFxcXHQtXSonICsgcmVEYXkgKyAnWywuc3RuZHJoXFxcXHQgXSsnICsgcmVZZWFyLCAnaScpLFxuICAgIG5hbWU6ICdkYXRldGV4dHVhbCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHBvaW50ZWREYXRlNDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXkgKyAnWy5cXFxcdC1dJyArIHJlTW9udGggKyAnWy4tXScgKyByZVllYXI0KSxcbiAgICBuYW1lOiAncG9pbnRlZGRhdGU0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbW9udGggLSAxLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgcG9pbnRlZERhdGUyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbLlxcXFx0XScgKyByZU1vbnRoICsgJ1xcXFwuJyArIHJlWWVhcjIpLFxuICAgIG5hbWU6ICdwb2ludGVkZGF0ZTInLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgZGF5LCBtb250aCwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICB0aW1lTG9uZzI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCksXG4gICAgbmFtZTogJ3RpbWVsb25nMjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9Db2xvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNCArIHJlTW9udGhseiArIHJlRGF5bHopLFxuICAgIG5hbWU6ICdkYXRlbm9jb2xvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHBneWRvdGQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnXFxcXC4/JyArIHJlRGF5T2ZZZWFyKSxcbiAgICBuYW1lOiAncGd5ZG90ZCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgMCwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIHRpbWVTaG9ydDI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUsICdpJyksXG4gICAgbmFtZTogJ3RpbWVzaG9ydDI0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGhvdXIsIG1pbnV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFub0NvbG9uOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXnQ/JyArIHJlSG91cjI0bHogKyByZU1pbnV0ZWx6ICsgcmVTZWNvbmRseiwgJ2knKSxcbiAgICBuYW1lOiAnaXNvODYwMW5vY29sb24nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlLCBzZWNvbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsICtzZWNvbmQsIDApO1xuICAgIH1cbiAgfSxcblxuICBpc284NjAxZGF0ZVNsYXNoOiB7XG4gICAgLy8gZXZlbnRob3VnaCB0aGUgdHJhaWxpbmcgc2xhc2ggaXMgb3B0aW9uYWwgaW4gUEhQXG4gICAgLy8gaGVyZSBpdCdzIG1hbmRhdG9yeSBhbmQgaW5wdXRzIHdpdGhvdXQgdGhlIHNsYXNoXG4gICAgLy8gYXJlIGhhbmRsZWQgYnkgZGF0ZXNsYXNoXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy8nICsgcmVNb250aGx6ICsgJy8nICsgcmVEYXlseiArICcvJyksXG4gICAgbmFtZTogJ2lzbzg2MDFkYXRlc2xhc2gnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlU2xhc2g6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhcjQgKyAnLycgKyByZU1vbnRoICsgJy8nICsgcmVEYXkpLFxuICAgIG5hbWU6ICdkYXRlc2xhc2gnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgsIGRheSkge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKCt5ZWFyLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBhbWVyaWNhbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVNb250aCArICcvJyArIHJlRGF5ICsgJy8nICsgcmVZZWFyKSxcbiAgICBuYW1lOiAnYW1lcmljYW4nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSwgeWVhcikge1xuICAgICAgcmV0dXJuIHRoaXMueW1kKHByb2Nlc3NZZWFyKHllYXIpLCBtb250aCAtIDEsICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBhbWVyaWNhblNob3J0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoICsgJy8nICsgcmVEYXkpLFxuICAgIG5hbWU6ICdhbWVyaWNhbnNob3J0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGdudURhdGVTaG9ydE9ySXNvODYwMWRhdGUyOiB7XG4gICAgLy8gaXNvODYwMWRhdGUyIGlzIGNvbXBsZXRlIHN1YnNldCBvZiBnbnVkYXRlc2hvcnRcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlWWVhciArICctJyArIHJlTW9udGggKyAnLScgKyByZURheSksXG4gICAgbmFtZTogJ2dudWRhdGVzaG9ydCB8IGlzbzg2MDFkYXRlMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGlzbzg2MDFkYXRlNDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVZZWFyNHdpdGhTaWduICsgJy0nICsgcmVNb250aGx6ICsgJy0nICsgcmVEYXlseiksXG4gICAgbmFtZTogJ2lzbzg2MDFkYXRlNCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGdudU5vQ29sb246IHtcbiAgICByZWdleDogUmVnRXhwKCdedD8nICsgcmVIb3VyMjRseiArIHJlTWludXRlbHosICdpJyksXG4gICAgbmFtZTogJ2dudW5vY29sb24nLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgaG91ciwgbWludXRlKSB7XG4gICAgICAvLyB0aGlzIHJ1bGUgaXMgYSBzcGVjaWFsIGNhc2VcbiAgICAgIC8vIGlmIHRpbWUgd2FzIGFscmVhZHkgc2V0IG9uY2UgYnkgYW55IHByZWNlZGluZyBydWxlLCBpdCBzZXRzIHRoZSBjYXB0dXJlZCB2YWx1ZSBhcyB5ZWFyXG4gICAgICBzd2l0Y2ggKHRoaXMudGltZXMpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWUoK2hvdXIsICttaW51dGUsIDAsIHRoaXMuZik7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLnkgPSBob3VyICogMTAwICsgK21pbnV0ZTtcbiAgICAgICAgICB0aGlzLnRpbWVzKys7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdudURhdGVTaG9ydGVyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0nICsgcmVNb250aCksXG4gICAgbmFtZTogJ2dudWRhdGVzaG9ydGVyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQoK3llYXIsIG1vbnRoIC0gMSwgMSk7XG4gICAgfVxuICB9LFxuXG4gIHBnVGV4dFJldmVyc2U6IHtcbiAgICAvLyBub3RlOiBhbGxvd2VkIHllYXJzIGFyZSBmcm9tIDMyLTk5OTlcbiAgICAvLyB5ZWFycyBiZWxvdyAzMiBzaG91bGQgYmUgdHJlYXRlZCBhcyBkYXlzIGluIGRhdGVmdWxsXG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyAnKFxcXFxkezMsNH18WzQtOV1cXFxcZHwzWzItOV0pLSgnICsgcmVNb250aEFiYnIgKyAnKS0nICsgcmVEYXlseiwgJ2knKSxcbiAgICBuYW1lOiAncGd0ZXh0cmV2ZXJzZScsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVGdWxsOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbIFxcXFx0Li1dKicgKyByZU1vbnRoVGV4dCArICdbIFxcXFx0Li1dKicgKyByZVllYXIsICdpJyksXG4gICAgbmFtZTogJ2RhdGVmdWxsJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheSwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZChwcm9jZXNzWWVhcih5ZWFyKSwgbG9va3VwTW9udGgobW9udGgpLCArZGF5KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vRGF5OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZU1vbnRoVGV4dCArICdbIC5cXFxcdC1dKicgKyByZVllYXI0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm9kYXknLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIHllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZU5vRGF5UmV2OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJ1sgLlxcXFx0LV0qJyArIHJlTW9udGhUZXh0LCAnaScpLFxuICAgIG5hbWU6ICdkYXRlbm9kYXlyZXYnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCgreWVhciwgbG9va3VwTW9udGgobW9udGgpLCAxKTtcbiAgICB9XG4gIH0sXG5cbiAgcGdUZXh0U2hvcnQ6IHtcbiAgICByZWdleDogUmVnRXhwKCdeKCcgKyByZU1vbnRoQWJiciArICcpLScgKyByZURheWx6ICsgJy0nICsgcmVZZWFyLCAnaScpLFxuICAgIG5hbWU6ICdwZ3RleHRzaG9ydCcsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCB5ZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQocHJvY2Vzc1llYXIoeWVhciksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVOb1llYXI6IHtcbiAgICByZWdleDogUmVnRXhwKCdeJyArIHJlRGF0ZU5vWWVhciwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZW5veWVhcicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5KSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBkYXRlTm9ZZWFyUmV2OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURheSArICdbIC5cXFxcdC1dKicgKyByZU1vbnRoVGV4dCwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZW5veWVhcnJldicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBkYXksIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpO1xuICAgIH1cbiAgfSxcblxuICBpc29XZWVrRGF5OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0ICsgJy0/VycgKyByZVdlZWtPZlllYXIgKyAnKD86LT8oWzAtN10pKT8nKSxcbiAgICBuYW1lOiAnaXNvd2Vla2RheSB8IGlzb3dlZWsnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhciwgd2VlaywgZGF5KSB7XG4gICAgICBkYXkgPSBkYXkgPyArZGF5IDogMTtcblxuICAgICAgaWYgKCF0aGlzLnltZCgreWVhciwgMCwgMSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGF5IG9mIHdlZWsgZm9yIEphbiAxc3RcbiAgICAgIHZhciBkYXlPZldlZWsgPSBuZXcgRGF0ZSh0aGlzLnksIHRoaXMubSwgdGhpcy5kKS5nZXREYXkoKTtcblxuICAgICAgLy8gYW5kIHVzZSB0aGUgZGF5IHRvIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBmb3IgZGF5IDEgb2Ygd2VlayAxXG4gICAgICBkYXlPZldlZWsgPSAwIC0gKGRheU9mV2VlayA+IDQgPyBkYXlPZldlZWsgLSA3IDogZGF5T2ZXZWVrKTtcblxuICAgICAgdGhpcy5yZCArPSBkYXlPZldlZWsgKyAod2VlayAtIDEpICogNyArIGRheTtcbiAgICB9XG4gIH0sXG5cbiAgcmVsYXRpdmVUZXh0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0bnVtYmVyICsgJ3wnICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnKCcgKyByZVJlbHRleHR1bml0ICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdyZWxhdGl2ZXRleHQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgcmVsVmFsdWUsIHJlbFVuaXQpIHtcbiAgICAgIC8vIHRvZG86IGltcGxlbWVudCBoYW5kbGluZyBvZiAndGhpcyB0aW1lLXVuaXQnXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHZhciBfbG9va3VwUmVsYXRpdmUgPSBsb29rdXBSZWxhdGl2ZShyZWxWYWx1ZSksXG4gICAgICAgICAgYW1vdW50ID0gX2xvb2t1cFJlbGF0aXZlLmFtb3VudCxcbiAgICAgICAgICBiZWhhdmlvciA9IF9sb29rdXBSZWxhdGl2ZS5iZWhhdmlvcjtcblxuICAgICAgc3dpdGNoIChyZWxVbml0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHRoaXMucnMgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgdGhpcy5yaSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy5yaCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3J0bmlnaHQnOlxuICAgICAgICBjYXNlICdmb3J0bmlnaHRzJzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRobmlnaHRzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IGFtb3VudCAqIDE0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICAgIHRoaXMucm0gKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHRoaXMucnkgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb24nOmNhc2UgJ21vbmRheSc6XG4gICAgICAgIGNhc2UgJ3R1ZSc6Y2FzZSAndHVlc2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZCc6Y2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgY2FzZSAndGh1JzpjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIGNhc2UgJ2ZyaSc6Y2FzZSAnZnJpZGF5JzpcbiAgICAgICAgY2FzZSAnc2F0JzpjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIGNhc2UgJ3N1bic6Y2FzZSAnc3VuZGF5JzpcbiAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkocmVsVW5pdCwgNyk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgICAgIHRoaXMucmQgKz0gKGFtb3VudCA+IDAgPyBhbW91bnQgLSAxIDogYW1vdW50KSAqIDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICBjYXNlICd3ZWVrZGF5cyc6XG4gICAgICAgICAgLy8gdG9kb1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZToge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14oWystXSopWyBcXFxcdF0qKFxcXFxkKyknICsgcmVTcGFjZU9wdCArICcoJyArIHJlUmVsdGV4dHVuaXQgKyAnfHdlZWspJywgJ2knKSxcbiAgICBuYW1lOiAncmVsYXRpdmUnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgc2lnbnMsIHJlbFZhbHVlLCByZWxVbml0KSB7XG4gICAgICB2YXIgbWludXNlcyA9IHNpZ25zLnJlcGxhY2UoL1teLV0vZywgJycpLmxlbmd0aDtcblxuICAgICAgdmFyIGFtb3VudCA9ICtyZWxWYWx1ZSAqIE1hdGgucG93KC0xLCBtaW51c2VzKTtcblxuICAgICAgc3dpdGNoIChyZWxVbml0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHRoaXMucnMgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgdGhpcy5yaSArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy5yaCArPSBhbW91bnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb3J0bmlnaHQnOlxuICAgICAgICBjYXNlICdmb3J0bmlnaHRzJzpcbiAgICAgICAgY2FzZSAnZm9ydGhuaWdodCc6XG4gICAgICAgIGNhc2UgJ2ZvcnRobmlnaHRzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IGFtb3VudCAqIDE0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHRoaXMucmQgKz0gYW1vdW50ICogNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICAgIHRoaXMucm0gKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHRoaXMucnkgKz0gYW1vdW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb24nOmNhc2UgJ21vbmRheSc6XG4gICAgICAgIGNhc2UgJ3R1ZSc6Y2FzZSAndHVlc2RheSc6XG4gICAgICAgIGNhc2UgJ3dlZCc6Y2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgY2FzZSAndGh1JzpjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIGNhc2UgJ2ZyaSc6Y2FzZSAnZnJpZGF5JzpcbiAgICAgICAgY2FzZSAnc2F0JzpjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIGNhc2UgJ3N1bic6Y2FzZSAnc3VuZGF5JzpcbiAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IGxvb2t1cFdlZWtkYXkocmVsVW5pdCwgNyk7XG4gICAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgICAgIHRoaXMucmQgKz0gKGFtb3VudCA+IDAgPyBhbW91bnQgLSAxIDogYW1vdW50KSAqIDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWtkYXknOlxuICAgICAgICBjYXNlICd3ZWVrZGF5cyc6XG4gICAgICAgICAgLy8gdG9kb1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXlUZXh0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVEYXl0ZXh0ICsgJyknLCAnaScpLFxuICAgIG5hbWU6ICdkYXl0ZXh0JyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIGRheVRleHQpIHtcbiAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICB0aGlzLndlZWtkYXkgPSBsb29rdXBXZWVrZGF5KGRheVRleHQsIDApO1xuXG4gICAgICBpZiAodGhpcy53ZWVrZGF5QmVoYXZpb3IgIT09IDIpIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWxhdGl2ZVRleHRXZWVrOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVSZWx0ZXh0dGV4dCArICcpJyArIHJlU3BhY2UgKyAnd2VlaycsICdpJyksXG4gICAgbmFtZTogJ3JlbGF0aXZldGV4dHdlZWsnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgcmVsVGV4dCkge1xuICAgICAgdGhpcy53ZWVrZGF5QmVoYXZpb3IgPSAyO1xuXG4gICAgICBzd2l0Y2ggKHJlbFRleHQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICd0aGlzJzpcbiAgICAgICAgICB0aGlzLnJkICs9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIHRoaXMucmQgKz0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICB0aGlzLnJkIC09IDc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05hTih0aGlzLndlZWtkYXkpKSB7XG4gICAgICAgIHRoaXMud2Vla2RheSA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vbnRoRnVsbE9yTW9udGhBYmJyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXignICsgcmVNb250aEZ1bGwgKyAnfCcgKyByZU1vbnRoQWJiciArICcpJywgJ2knKSxcbiAgICBuYW1lOiAnbW9udGhmdWxsIHwgbW9udGhhYmJyJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksIHRoaXMuZCk7XG4gICAgfVxuICB9LFxuXG4gIHR6Q29ycmVjdGlvbjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVUekNvcnJlY3Rpb24sICdpJyksXG4gICAgbmFtZTogJ3R6Y29ycmVjdGlvbicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKHR6Q29ycmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZShwcm9jZXNzVHpDb3JyZWN0aW9uKHR6Q29ycmVjdGlvbikpO1xuICAgIH1cbiAgfSxcblxuICBhZ286IHtcbiAgICByZWdleDogL15hZ28vaSxcbiAgICBuYW1lOiAnYWdvJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnJ5ID0gLXRoaXMucnk7XG4gICAgICB0aGlzLnJtID0gLXRoaXMucm07XG4gICAgICB0aGlzLnJkID0gLXRoaXMucmQ7XG4gICAgICB0aGlzLnJoID0gLXRoaXMucmg7XG4gICAgICB0aGlzLnJpID0gLXRoaXMucmk7XG4gICAgICB0aGlzLnJzID0gLXRoaXMucnM7XG4gICAgICB0aGlzLnJmID0gLXRoaXMucmY7XG4gICAgfVxuICB9LFxuXG4gIHllYXI0OiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZVllYXI0KSxcbiAgICBuYW1lOiAneWVhcjQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgeWVhcikge1xuICAgICAgdGhpcy55ID0gK3llYXI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2hpdGVzcGFjZToge1xuICAgIHJlZ2V4OiAvXlsgLixcXHRdKy8sXG4gICAgbmFtZTogJ3doaXRlc3BhY2UnXG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lTG9uZzoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgJ3Q/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUgKyAnWzouXScgKyByZVNlY29uZCwgJ2knKSxcbiAgICBuYW1lOiAnZGF0ZXNob3J0d2l0aHRpbWVsb25nJyxcbiAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2sobWF0Y2gsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgK3NlY29uZCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lTG9uZzEyOiB7XG4gICAgcmVnZXg6IFJlZ0V4cCgnXicgKyByZURhdGVOb1llYXIgKyByZUhvdXIxMiArICdbOi5dJyArIHJlTWludXRlICsgJ1s6Ll0nICsgcmVTZWNvbmRseiArIHJlU3BhY2VPcHQgKyByZU1lcmlkaWFuLCAnaScpLFxuICAgIG5hbWU6ICdkYXRlc2hvcnR3aXRodGltZWxvbmcxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWVyaWRpYW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnltZCh0aGlzLnksIGxvb2t1cE1vbnRoKG1vbnRoKSwgK2RheSkgJiYgdGhpcy50aW1lKHByb2Nlc3NNZXJpZGlhbigraG91ciwgbWVyaWRpYW4pLCArbWludXRlLCArc2Vjb25kLCAwKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0ZVNob3J0V2l0aFRpbWVTaG9ydDoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgJ3Q/JyArIHJlSG91cjI0ICsgJ1s6Ll0nICsgcmVNaW51dGUsICdpJyksXG4gICAgbmFtZTogJ2RhdGVzaG9ydHdpdGh0aW1lc2hvcnQnLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhtYXRjaCwgbW9udGgsIGRheSwgaG91ciwgbWludXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZSgraG91ciwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGVTaG9ydFdpdGhUaW1lU2hvcnQxMjoge1xuICAgIHJlZ2V4OiBSZWdFeHAoJ14nICsgcmVEYXRlTm9ZZWFyICsgcmVIb3VyMTIgKyAnWzouXScgKyByZU1pbnV0ZWx6ICsgcmVTcGFjZU9wdCArIHJlTWVyaWRpYW4sICdpJyksXG4gICAgbmFtZTogJ2RhdGVzaG9ydHdpdGh0aW1lc2hvcnQxMicsXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKG1hdGNoLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIG1lcmlkaWFuKSB7XG4gICAgICByZXR1cm4gdGhpcy55bWQodGhpcy55LCBsb29rdXBNb250aChtb250aCksICtkYXkpICYmIHRoaXMudGltZShwcm9jZXNzTWVyaWRpYW4oK2hvdXIsIG1lcmlkaWFuKSwgK21pbnV0ZSwgMCwgMCk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcmVzdWx0UHJvdG8gPSB7XG4gIC8vIGRhdGVcbiAgeTogTmFOLFxuICBtOiBOYU4sXG4gIGQ6IE5hTixcbiAgLy8gdGltZVxuICBoOiBOYU4sXG4gIGk6IE5hTixcbiAgczogTmFOLFxuICBmOiBOYU4sXG5cbiAgLy8gcmVsYXRpdmUgc2hpZnRzXG4gIHJ5OiAwLFxuICBybTogMCxcbiAgcmQ6IDAsXG4gIHJoOiAwLFxuICByaTogMCxcbiAgcnM6IDAsXG4gIHJmOiAwLFxuXG4gIC8vIHdlZWtkYXkgcmVsYXRlZCBzaGlmdHNcbiAgd2Vla2RheTogTmFOLFxuICB3ZWVrZGF5QmVoYXZpb3I6IDAsXG5cbiAgLy8gZmlyc3Qgb3IgbGFzdCBkYXkgb2YgbW9udGhcbiAgLy8gMCBub25lLCAxIGZpcnN0LCAtMSBsYXN0XG4gIGZpcnN0T3JMYXN0RGF5T2ZNb250aDogMCxcblxuICAvLyB0aW1lem9uZSBjb3JyZWN0aW9uIGluIG1pbnV0ZXNcbiAgejogTmFOLFxuXG4gIC8vIGNvdW50ZXJzXG4gIGRhdGVzOiAwLFxuICB0aW1lczogMCxcbiAgem9uZXM6IDAsXG5cbiAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICB5bWQ6IGZ1bmN0aW9uIHltZCh5LCBtLCBkKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlcysrO1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy5tID0gbTtcbiAgICB0aGlzLmQgPSBkO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICB0aW1lOiBmdW5jdGlvbiB0aW1lKGgsIGksIHMsIGYpIHtcbiAgICBpZiAodGhpcy50aW1lcyA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzKys7XG4gICAgdGhpcy5oID0gaDtcbiAgICB0aGlzLmkgPSBpO1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5mID0gZjtcblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICByZXNldFRpbWU6IGZ1bmN0aW9uIHJlc2V0VGltZSgpIHtcbiAgICB0aGlzLmggPSAwO1xuICAgIHRoaXMuaSA9IDA7XG4gICAgdGhpcy5zID0gMDtcbiAgICB0aGlzLmYgPSAwO1xuICAgIHRoaXMudGltZXMgPSAwO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIHpvbmU6IGZ1bmN0aW9uIHpvbmUobWludXRlcykge1xuICAgIGlmICh0aGlzLnpvbmVzIDw9IDEpIHtcbiAgICAgIHRoaXMuem9uZXMrKztcbiAgICAgIHRoaXMueiA9IG1pbnV0ZXM7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHRvRGF0ZTogZnVuY3Rpb24gdG9EYXRlKHJlbGF0aXZlVG8pIHtcbiAgICBpZiAodGhpcy5kYXRlcyAmJiAhdGhpcy50aW1lcykge1xuICAgICAgdGhpcy5oID0gdGhpcy5pID0gdGhpcy5zID0gdGhpcy5mID0gMDtcbiAgICB9XG5cbiAgICAvLyBmaWxsIGhvbGVzXG4gICAgaWYgKGlzTmFOKHRoaXMueSkpIHtcbiAgICAgIHRoaXMueSA9IHJlbGF0aXZlVG8uZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5tKSkge1xuICAgICAgdGhpcy5tID0gcmVsYXRpdmVUby5nZXRNb250aCgpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmQpKSB7XG4gICAgICB0aGlzLmQgPSByZWxhdGl2ZVRvLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5oKSkge1xuICAgICAgdGhpcy5oID0gcmVsYXRpdmVUby5nZXRIb3VycygpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGlzLmkpKSB7XG4gICAgICB0aGlzLmkgPSByZWxhdGl2ZVRvLmdldE1pbnV0ZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhpcy5zKSkge1xuICAgICAgdGhpcy5zID0gcmVsYXRpdmVUby5nZXRTZWNvbmRzKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHRoaXMuZikpIHtcbiAgICAgIHRoaXMuZiA9IHJlbGF0aXZlVG8uZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IHNwZWNpYWwgZWFybHlcbiAgICBzd2l0Y2ggKHRoaXMuZmlyc3RPckxhc3REYXlPZk1vbnRoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgdGhpcy5kID0gMDtcbiAgICAgICAgdGhpcy5tICs9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICghaXNOYU4odGhpcy53ZWVrZGF5KSkge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShyZWxhdGl2ZVRvLmdldFRpbWUoKSk7XG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKHRoaXMueSwgdGhpcy5tLCB0aGlzLmQpO1xuICAgICAgZGF0ZS5zZXRIb3Vycyh0aGlzLmgsIHRoaXMuaSwgdGhpcy5zLCB0aGlzLmYpO1xuXG4gICAgICB2YXIgZG93ID0gZGF0ZS5nZXREYXkoKTtcblxuICAgICAgaWYgKHRoaXMud2Vla2RheUJlaGF2aW9yID09PSAyKSB7XG4gICAgICAgIC8vIFRvIG1ha2UgXCJ0aGlzIHdlZWtcIiB3b3JrLCB3aGVyZSB0aGUgY3VycmVudCBkYXkgb2Ygd2VlayBpcyBhIFwic3VuZGF5XCJcbiAgICAgICAgaWYgKGRvdyA9PT0gMCAmJiB0aGlzLndlZWtkYXkgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndlZWtkYXkgPSAtNjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRvIG1ha2UgXCJzdW5kYXkgdGhpcyB3ZWVrXCIgd29yaywgd2hlcmUgdGhlIGN1cnJlbnQgZGF5IG9mIHdlZWsgaXMgbm90IGEgXCJzdW5kYXlcIlxuICAgICAgICBpZiAodGhpcy53ZWVrZGF5ID09PSAwICYmIGRvdyAhPT0gMCkge1xuICAgICAgICAgIHRoaXMud2Vla2RheSA9IDc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmQgLT0gZG93O1xuICAgICAgICB0aGlzLmQgKz0gdGhpcy53ZWVrZGF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLndlZWtkYXkgLSBkb3c7XG5cbiAgICAgICAgLy8gc29tZSBQSFAgbWFnaWNcbiAgICAgICAgaWYgKHRoaXMucmQgPCAwICYmIGRpZmYgPCAwIHx8IHRoaXMucmQgPj0gMCAmJiBkaWZmIDw9IC10aGlzLndlZWtkYXlCZWhhdmlvcikge1xuICAgICAgICAgIGRpZmYgKz0gNztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndlZWtkYXkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuZCArPSBkaWZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZCAtPSA3IC0gKE1hdGguYWJzKHRoaXMud2Vla2RheSkgLSBkb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53ZWVrZGF5ID0gTmFOO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkanVzdCByZWxhdGl2ZVxuICAgIHRoaXMueSArPSB0aGlzLnJ5O1xuICAgIHRoaXMubSArPSB0aGlzLnJtO1xuICAgIHRoaXMuZCArPSB0aGlzLnJkO1xuXG4gICAgdGhpcy5oICs9IHRoaXMucmg7XG4gICAgdGhpcy5pICs9IHRoaXMucmk7XG4gICAgdGhpcy5zICs9IHRoaXMucnM7XG4gICAgdGhpcy5mICs9IHRoaXMucmY7XG5cbiAgICB0aGlzLnJ5ID0gdGhpcy5ybSA9IHRoaXMucmQgPSAwO1xuICAgIHRoaXMucmggPSB0aGlzLnJpID0gdGhpcy5ycyA9IHRoaXMucmYgPSAwO1xuXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBEYXRlKHJlbGF0aXZlVG8uZ2V0VGltZSgpKTtcbiAgICAvLyBzaW5jZSBEYXRlIGNvbnN0cnVjdG9yIHRyZWF0cyB5ZWFycyA8PSA5OSBhcyAxOTAwK1xuICAgIC8vIGl0IGNhbid0IGJlIHVzZWQsIHRodXMgdGhpcyB3ZWlyZCB3YXlcbiAgICByZXN1bHQuc2V0RnVsbFllYXIodGhpcy55LCB0aGlzLm0sIHRoaXMuZCk7XG4gICAgcmVzdWx0LnNldEhvdXJzKHRoaXMuaCwgdGhpcy5pLCB0aGlzLnMsIHRoaXMuZik7XG5cbiAgICAvLyBub3RlOiB0aGlzIGlzIGRvbmUgdHdpY2UgaW4gUEhQXG4gICAgLy8gZWFybHkgd2hlbiBwcm9jZXNzaW5nIHNwZWNpYWwgcmVsYXRpdmVzXG4gICAgLy8gYW5kIGxhdGVcbiAgICAvLyB0b2RvOiBjaGVjayBpZiB0aGUgbG9naWMgY2FuIGJlIHJlZHVjZWRcbiAgICAvLyB0byBqdXN0IG9uZSB0aW1lIGFjdGlvblxuICAgIHN3aXRjaCAodGhpcy5maXJzdE9yTGFzdERheU9mTW9udGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmVzdWx0LnNldERhdGUoMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgcmVzdWx0LnNldE1vbnRoKHJlc3VsdC5nZXRNb250aCgpICsgMSwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGFkanVzdCB0aW1lem9uZVxuICAgIGlmICghaXNOYU4odGhpcy56KSAmJiByZXN1bHQuZ2V0VGltZXpvbmVPZmZzZXQoKSAhPT0gdGhpcy56KSB7XG4gICAgICByZXN1bHQuc2V0VVRDRnVsbFllYXIocmVzdWx0LmdldEZ1bGxZZWFyKCksIHJlc3VsdC5nZXRNb250aCgpLCByZXN1bHQuZ2V0RGF0ZSgpKTtcblxuICAgICAgcmVzdWx0LnNldFVUQ0hvdXJzKHJlc3VsdC5nZXRIb3VycygpLCByZXN1bHQuZ2V0TWludXRlcygpICsgdGhpcy56LCByZXN1bHQuZ2V0U2Vjb25kcygpLCByZXN1bHQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RydG90aW1lKHN0ciwgbm93KSB7XG4gIC8vICAgICAgIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvc3RydG90aW1lL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBDYWlvIEFyaWVkZSAoaHR0cHM6Ly9jYWlvYXJpZWRlLmNvbSlcbiAgLy8gICAgICBpbXByb3ZlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cHM6Ly9rdnouaW8pXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IENhaW8gQXJpZWRlIChodHRwczovL2NhaW9hcmllZGUuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBBLiBNYXTDrWFzIFF1ZXphZGEgKGh0dHBzOi8vYW1hdGlhc3EuY29tKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBwcmV1dGVyXG4gIC8vICAgICAgaW1wcm92ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIGltcHJvdmVkIGJ5OiBNaXJrbyBGYWJlclxuICAvLyAgICAgICAgIGlucHV0IGJ5OiBEYXZpZFxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBXYWduZXIgQi4gU29hcmVzXG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IEFydHVyIFRjaGVybnljaGV2XG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IFN0ZXBoYW4gQsO2c2NoLVBsZXBlbGl0cyAoaHR0cHM6Ly9naXRodWIuY29tL3BsZXBlKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBSYWZhxYIgS3VrYXdza2lcbiAgLy8gICAgICAgICAgIG5vdGUgMTogRXhhbXBsZXMgYWxsIGhhdmUgYSBmaXhlZCB0aW1lc3RhbXAgdG8gcHJldmVudFxuICAvLyAgICAgICAgICAgbm90ZSAxOiB0ZXN0cyB0byBmYWlsIGJlY2F1c2Ugb2YgdmFyaWFibGUgdGltZSh6b25lcylcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogc3RydG90aW1lKCcrMSBkYXknLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAxOiAxMTI5NzE5NjAwXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHN0cnRvdGltZSgnKzEgd2VlayAyIGRheXMgNCBob3VycyAyIHNlY29uZHMnLCAxMTI5NjMzMjAwKVxuICAvLyAgICAgICAgcmV0dXJucyAyOiAxMTMwNDI1MjAyXG4gIC8vICAgICAgICBleGFtcGxlIDM6IHN0cnRvdGltZSgnbGFzdCBtb250aCcsIDExMjk2MzMyMDApXG4gIC8vICAgICAgICByZXR1cm5zIDM6IDExMjcwNDEyMDBcbiAgLy8gICAgICAgIGV4YW1wbGUgNDogc3RydG90aW1lKCcyMDA5LTA1LTA0IDA4OjMwOjAwKzAwJylcbiAgLy8gICAgICAgIHJldHVybnMgNDogMTI0MTQyNTgwMFxuICAvLyAgICAgICAgZXhhbXBsZSA1OiBzdHJ0b3RpbWUoJzIwMDktMDUtMDQgMDg6MzA6MDArMDI6MDAnKVxuICAvLyAgICAgICAgcmV0dXJucyA1OiAxMjQxNDE4NjAwXG5cbiAgaWYgKG5vdyA9PSBudWxsKSB7XG4gICAgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIH1cblxuICAvLyB0aGUgcnVsZSBvcmRlciBpcyBpbXBvcnRhbnRcbiAgLy8gaWYgbXVsdGlwbGUgcnVsZXMgbWF0Y2gsIHRoZSBsb25nZXN0IG1hdGNoIHdpbnNcbiAgLy8gaWYgbXVsdGlwbGUgcnVsZXMgbWF0Y2ggdGhlIHNhbWUgc3RyaW5nLCB0aGUgZmlyc3QgbWF0Y2ggd2luc1xuICB2YXIgcnVsZXMgPSBbZm9ybWF0cy55ZXN0ZXJkYXksIGZvcm1hdHMubm93LCBmb3JtYXRzLm5vb24sIGZvcm1hdHMubWlkbmlnaHRPclRvZGF5LCBmb3JtYXRzLnRvbW9ycm93LCBmb3JtYXRzLnRpbWVzdGFtcCwgZm9ybWF0cy5maXJzdE9yTGFzdERheSwgZm9ybWF0cy5iYWNrT3JGcm9udE9mLFxuICAvLyBmb3JtYXRzLndlZWtkYXlPZiwgLy8gbm90IHlldCBpbXBsZW1lbnRlZFxuICBmb3JtYXRzLnRpbWVUaW55MTIsIGZvcm1hdHMudGltZVNob3J0MTIsIGZvcm1hdHMudGltZUxvbmcxMiwgZm9ybWF0cy5tc3NxbHRpbWUsIGZvcm1hdHMudGltZVNob3J0MjQsIGZvcm1hdHMudGltZUxvbmcyNCwgZm9ybWF0cy5pc284NjAxbG9uZywgZm9ybWF0cy5nbnVOb0NvbG9uLCBmb3JtYXRzLmlzbzg2MDFub0NvbG9uLCBmb3JtYXRzLmFtZXJpY2FuU2hvcnQsIGZvcm1hdHMuYW1lcmljYW4sIGZvcm1hdHMuaXNvODYwMWRhdGU0LCBmb3JtYXRzLmlzbzg2MDFkYXRlU2xhc2gsIGZvcm1hdHMuZGF0ZVNsYXNoLCBmb3JtYXRzLmdudURhdGVTaG9ydE9ySXNvODYwMWRhdGUyLCBmb3JtYXRzLmdudURhdGVTaG9ydGVyLCBmb3JtYXRzLmRhdGVGdWxsLCBmb3JtYXRzLnBvaW50ZWREYXRlNCwgZm9ybWF0cy5wb2ludGVkRGF0ZTIsIGZvcm1hdHMuZGF0ZU5vRGF5LCBmb3JtYXRzLmRhdGVOb0RheVJldiwgZm9ybWF0cy5kYXRlVGV4dHVhbCwgZm9ybWF0cy5kYXRlTm9ZZWFyLCBmb3JtYXRzLmRhdGVOb1llYXJSZXYsIGZvcm1hdHMuZGF0ZU5vQ29sb24sIGZvcm1hdHMueG1sUnBjLCBmb3JtYXRzLnhtbFJwY05vQ29sb24sIGZvcm1hdHMuc29hcCwgZm9ybWF0cy53ZGR4LCBmb3JtYXRzLmV4aWYsIGZvcm1hdHMucGd5ZG90ZCwgZm9ybWF0cy5pc29XZWVrRGF5LCBmb3JtYXRzLnBnVGV4dFNob3J0LCBmb3JtYXRzLnBnVGV4dFJldmVyc2UsIGZvcm1hdHMuY2xmLCBmb3JtYXRzLnllYXI0LCBmb3JtYXRzLmFnbywgZm9ybWF0cy5kYXlUZXh0LCBmb3JtYXRzLnJlbGF0aXZlVGV4dFdlZWssIGZvcm1hdHMucmVsYXRpdmVUZXh0LCBmb3JtYXRzLm1vbnRoRnVsbE9yTW9udGhBYmJyLCBmb3JtYXRzLnR6Q29ycmVjdGlvbiwgZm9ybWF0cy5kYXRlU2hvcnRXaXRoVGltZVNob3J0MTIsIGZvcm1hdHMuZGF0ZVNob3J0V2l0aFRpbWVMb25nMTIsIGZvcm1hdHMuZGF0ZVNob3J0V2l0aFRpbWVTaG9ydCwgZm9ybWF0cy5kYXRlU2hvcnRXaXRoVGltZUxvbmcsIGZvcm1hdHMucmVsYXRpdmUsIGZvcm1hdHMud2hpdGVzcGFjZV07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUocmVzdWx0UHJvdG8pO1xuXG4gIHdoaWxlIChzdHIubGVuZ3RoKSB7XG4gICAgdmFyIGxvbmdlc3RNYXRjaCA9IG51bGw7XG4gICAgdmFyIGZpbmFsUnVsZSA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJ1bGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGZvcm1hdCA9IHJ1bGVzW2ldO1xuXG4gICAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2goZm9ybWF0LnJlZ2V4KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmICghbG9uZ2VzdE1hdGNoIHx8IG1hdGNoWzBdLmxlbmd0aCA+IGxvbmdlc3RNYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgICBsb25nZXN0TWF0Y2ggPSBtYXRjaDtcbiAgICAgICAgICBmaW5hbFJ1bGUgPSBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZpbmFsUnVsZSB8fCBmaW5hbFJ1bGUuY2FsbGJhY2sgJiYgZmluYWxSdWxlLmNhbGxiYWNrLmFwcGx5KHJlc3VsdCwgbG9uZ2VzdE1hdGNoKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdHIgPSBzdHIuc3Vic3RyKGxvbmdlc3RNYXRjaFswXS5sZW5ndGgpO1xuICAgIGZpbmFsUnVsZSA9IG51bGw7XG4gICAgbG9uZ2VzdE1hdGNoID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKHJlc3VsdC50b0RhdGUobmV3IERhdGUobm93ICogMTAwMCkpIC8gMTAwMCk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RydG90aW1lLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmlfZ2V0KHZhcm5hbWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvaW5pX2dldC9cbiAgLy8gb3JpZ2luYWwgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogVGhlIGluaSB2YWx1ZXMgbXVzdCBiZSBzZXQgYnkgaW5pX3NldCBvciBtYW51YWxseSB3aXRoaW4gYW4gaW5pIGZpbGVcbiAgLy8gICBleGFtcGxlIDE6IGluaV9zZXQoJ2RhdGUudGltZXpvbmUnLCAnQXNpYS9Ib25nX0tvbmcnKVxuICAvLyAgIGV4YW1wbGUgMTogaW5pX2dldCgnZGF0ZS50aW1lem9uZScpXG4gIC8vICAgcmV0dXJucyAxOiAnQXNpYS9Ib25nX0tvbmcnXG5cbiAgdmFyICRnbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgJGdsb2JhbC4kbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXMgfHwge307XG4gIHZhciAkbG9jdXR1cyA9ICRnbG9iYWwuJGxvY3V0dXM7XG4gICRsb2N1dHVzLnBocCA9ICRsb2N1dHVzLnBocCB8fCB7fTtcbiAgJGxvY3V0dXMucGhwLmluaSA9ICRsb2N1dHVzLnBocC5pbmkgfHwge307XG5cbiAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0gJiYgJGxvY3V0dXMucGhwLmluaVt2YXJuYW1lXS5sb2NhbF92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuICRsb2N1dHVzLnBocC5pbmlbdmFybmFtZV0ubG9jYWxfdmFsdWU7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pX2dldC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICAvLyAgZGlzY3VzcyBhdDogaHR0cHM6Ly9sb2N1dHVzLmlvL3BocC9zdHJsZW4vXG4gIC8vIG9yaWdpbmFsIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwczovL2t2ei5pbylcbiAgLy8gaW1wcm92ZWQgYnk6IFNha2ltb3JpXG4gIC8vIGltcHJvdmVkIGJ5OiBLZXZpbiB2YW4gWm9ubmV2ZWxkIChodHRwczovL2t2ei5pbylcbiAgLy8gICAgaW5wdXQgYnk6IEtpcmsgU3Ryb2JlY2tcbiAgLy8gYnVnZml4ZWQgYnk6IE9ubm8gTWFyc21hbiAoaHR0cHM6Ly90d2l0dGVyLmNvbS9vbm5vbWFyc21hbilcbiAgLy8gIHJldmlzZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIG5vdGUgMTogTWF5IGxvb2sgbGlrZSBvdmVya2lsbCwgYnV0IGluIG9yZGVyIHRvIGJlIHRydWx5IGZhaXRoZnVsIHRvIGhhbmRsaW5nIGFsbCBVbmljb2RlXG4gIC8vICAgICAgbm90ZSAxOiBjaGFyYWN0ZXJzIGFuZCB0byB0aGlzIGZ1bmN0aW9uIGluIFBIUCB3aGljaCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzXG4gIC8vICAgICAgbm90ZSAxOiBidXQgY291bnRzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycywgc29tZXRoaW5nIGxpa2UgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LlxuICAvLyAgIGV4YW1wbGUgMTogc3RybGVuKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDE6IDE5XG4gIC8vICAgZXhhbXBsZSAyOiBpbmlfc2V0KCd1bmljb2RlLnNlbWFudGljcycsICdvbicpXG4gIC8vICAgZXhhbXBsZSAyOiBzdHJsZW4oJ0FcXHVkODdlXFx1ZGMwNFonKVxuICAvLyAgIHJldHVybnMgMjogM1xuXG4gIHZhciBzdHIgPSBzdHJpbmcgKyAnJztcblxuICB2YXIgaW5pVmFsID0gKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUoJy4uL2luZm8vaW5pX2dldCcpKCd1bmljb2RlLnNlbWFudGljcycpIDogdW5kZWZpbmVkKSB8fCAnb2ZmJztcbiAgaWYgKGluaVZhbCA9PT0gJ29mZicpIHtcbiAgICByZXR1cm4gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGxndGggPSAwO1xuXG4gIHZhciBnZXRXaG9sZUNoYXIgPSBmdW5jdGlvbiBnZXRXaG9sZUNoYXIoc3RyLCBpKSB7XG4gICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB2YXIgbmV4dCA9ICcnO1xuICAgIHZhciBwcmV2ID0gJyc7XG4gICAgaWYgKGNvZGUgPj0gMHhEODAwICYmIGNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSAoY291bGQgY2hhbmdlIGxhc3QgaGV4IHRvIDB4REI3RiB0b1xuICAgICAgLy8gdHJlYXQgaGlnaCBwcml2YXRlIHN1cnJvZ2F0ZXMgYXMgc2luZ2xlIGNoYXJhY3RlcnMpXG4gICAgICBpZiAoc3RyLmxlbmd0aCA8PSBpICsgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hpZ2ggc3Vycm9nYXRlIHdpdGhvdXQgZm9sbG93aW5nIGxvdyBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIG5leHQgPSBzdHIuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dCA8IDB4REMwMCB8fCBuZXh0ID4gMHhERkZGKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGlnaCBzdXJyb2dhdGUgd2l0aG91dCBmb2xsb3dpbmcgbG93IHN1cnJvZ2F0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoaSkgKyBzdHIuY2hhckF0KGkgKyAxKTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPj0gMHhEQzAwICYmIGNvZGUgPD0gMHhERkZGKSB7XG4gICAgICAvLyBMb3cgc3Vycm9nYXRlXG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvdyBzdXJyb2dhdGUgd2l0aG91dCBwcmVjZWRpbmcgaGlnaCBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIHByZXYgPSBzdHIuY2hhckNvZGVBdChpIC0gMSk7XG4gICAgICBpZiAocHJldiA8IDB4RDgwMCB8fCBwcmV2ID4gMHhEQkZGKSB7XG4gICAgICAgIC8vIChjb3VsZCBjaGFuZ2UgbGFzdCBoZXggdG8gMHhEQjdGIHRvIHRyZWF0IGhpZ2ggcHJpdmF0ZSBzdXJyb2dhdGVzXG4gICAgICAgIC8vIGFzIHNpbmdsZSBjaGFyYWN0ZXJzKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvdyBzdXJyb2dhdGUgd2l0aG91dCBwcmVjZWRpbmcgaGlnaCBzdXJyb2dhdGUnKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGNhbiBwYXNzIG92ZXIgbG93IHN1cnJvZ2F0ZXMgbm93IGFzIHRoZSBzZWNvbmRcbiAgICAgIC8vIGNvbXBvbmVudCBpbiBhIHBhaXIgd2hpY2ggd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLmNoYXJBdChpKTtcbiAgfTtcblxuICBmb3IgKGkgPSAwLCBsZ3RoID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChnZXRXaG9sZUNoYXIoc3RyLCBpKSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBBZGFwdCB0aGlzIGxpbmUgYXQgdGhlIHRvcCBvZiBhbnkgbG9vcCwgcGFzc2luZyBpbiB0aGUgd2hvbGUgc3RyaW5nIGFuZFxuICAgIC8vIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBhbmQgcmV0dXJuaW5nIGEgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBpbmRpdmlkdWFsIGNoYXJhY3RlcjtcbiAgICAvLyBwdXJwb3NlIGlzIHRvIHRyZWF0IHRoZSBmaXJzdCBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgYXMgdGhlIHdob2xlIGNoYXJhY3RlciBhbmQgdGhlblxuICAgIC8vIGlnbm9yZSB0aGUgc2Vjb25kIHBhcnRcbiAgICBsZ3RoKys7XG4gIH1cblxuICByZXR1cm4gbGd0aDtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJsZW4uanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzX251bWVyaWMobWl4ZWRWYXIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgLy8gIGRpc2N1c3MgYXQ6IGh0dHBzOi8vbG9jdXR1cy5pby9waHAvaXNfbnVtZXJpYy9cbiAgLy8gb3JpZ2luYWwgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHBzOi8va3Z6LmlvKVxuICAvLyBpbXByb3ZlZCBieTogRGF2aWRcbiAgLy8gaW1wcm92ZWQgYnk6IHRhaXRoXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBUaW0gZGUgS29uaW5nXG4gIC8vIGJ1Z2ZpeGVkIGJ5OiBXZWJEZXZIb2JvIChodHRwczovL3dlYmRldmhvYm8uYmxvZ3Nwb3QuY29tLylcbiAgLy8gYnVnZml4ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwczovL2JyZXR0LXphbWlyLm1lKVxuICAvLyBidWdmaXhlZCBieTogRGVuaXMgQ2hlbnUgKGh0dHBzOi8vc2hub3VsbGUubmV0KVxuICAvLyAgIGV4YW1wbGUgMTogaXNfbnVtZXJpYygxODYuMzEpXG4gIC8vICAgcmV0dXJucyAxOiB0cnVlXG4gIC8vICAgZXhhbXBsZSAyOiBpc19udW1lcmljKCdLZXZpbiB2YW4gWm9ubmV2ZWxkJylcbiAgLy8gICByZXR1cm5zIDI6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSAzOiBpc19udW1lcmljKCcgKzE4Ni4zMWUyJylcbiAgLy8gICByZXR1cm5zIDM6IHRydWVcbiAgLy8gICBleGFtcGxlIDQ6IGlzX251bWVyaWMoJycpXG4gIC8vICAgcmV0dXJucyA0OiBmYWxzZVxuICAvLyAgIGV4YW1wbGUgNTogaXNfbnVtZXJpYyhbXSlcbiAgLy8gICByZXR1cm5zIDU6IGZhbHNlXG4gIC8vICAgZXhhbXBsZSA2OiBpc19udW1lcmljKCcxICcpXG4gIC8vICAgcmV0dXJucyA2OiBmYWxzZVxuXG4gIHZhciB3aGl0ZXNwYWNlID0gWycgJywgJ1xcbicsICdcXHInLCAnXFx0JywgJ1xcZicsICdcXHgwYicsICdcXHhhMCcsICdcXHUyMDAwJywgJ1xcdTIwMDEnLCAnXFx1MjAwMicsICdcXHUyMDAzJywgJ1xcdTIwMDQnLCAnXFx1MjAwNScsICdcXHUyMDA2JywgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAwQicsICdcXHUyMDI4JywgJ1xcdTIwMjknLCAnXFx1MzAwMCddLmpvaW4oJycpO1xuXG4gIC8vIEB0b2RvOiBCcmVhayB0aGlzIHVwIHVzaW5nIG1hbnkgc2luZ2xlIGNvbmRpdGlvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIHJldHVybiAodHlwZW9mIG1peGVkVmFyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWl4ZWRWYXIgPT09ICdzdHJpbmcnICYmIHdoaXRlc3BhY2UuaW5kZXhPZihtaXhlZFZhci5zbGljZSgtMSkpID09PSAtMSkgJiYgbWl4ZWRWYXIgIT09ICcnICYmICFpc05hTihtaXhlZFZhcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNfbnVtZXJpYy5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIExhcmF2ZWwgSmF2YXNjcmlwdCBWYWxpZGF0aW9uXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Byb2VuZ3NvZnQvbGFyYXZlbC1qc3ZhbGlkYXRpb25cbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdmFsaWRhdG9yc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNyBQcm9lbmdzb2Z0XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgc3RybGVuIGZyb20gJ2xvY3V0dXMvcGhwL3N0cmluZ3Mvc3RybGVuJztcbmltcG9ydCBhcnJheV9kaWZmIGZyb20gJ2xvY3V0dXMvcGhwL2FycmF5L2FycmF5X2RpZmYnO1xuaW1wb3J0IHN0cnRvdGltZSBmcm9tICdsb2N1dHVzL3BocC9kYXRldGltZS9zdHJ0b3RpbWUnO1xuaW1wb3J0IGlzX251bWVyaWMgZnJvbSAnbG9jdXR1cy9waHAvdmFyL2lzX251bWVyaWMnO1xuXG4kLmV4dGVuZCh0cnVlLCBsYXJhdmVsVmFsaWRhdGlvbiwge1xuXG4gICAgaGVscGVyczoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1lcmljIHJ1bGVzXG4gICAgICAgICAqL1xuICAgICAgICBudW1lcmljUnVsZXM6IFsnSW50ZWdlcicsICdOdW1lcmljJ10sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGZpbGUgaW5mb3JtYXRpb24gZnJvbSBmaWxlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZmllbGRPYmpcbiAgICAgICAgICogQHBhcmFtIGluZGV4XG4gICAgICAgICAqIEByZXR1cm5zIHt7ZmlsZTogKiwgZXh0ZW5zaW9uOiBzdHJpbmcsIHNpemU6IG51bWJlcn19XG4gICAgICAgICAqL1xuICAgICAgICBmaWxlaW5mbzogZnVuY3Rpb24gKGZpZWxkT2JqLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIEZpbGVOYW1lID0gZmllbGRPYmoudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoIGZpZWxkT2JqLmZpbGVzICE9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRPYmouZmlsZXNbaW5kZXhdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb246IEZpbGVOYW1lLnN1YnN0cihGaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWVsZE9iai5maWxlc1tpbmRleF0uc2l6ZSAvIDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWVsZE9iai5maWxlc1tpbmRleF0udHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3RvcnMgZm9yIHRoIHNwZWNpZmllZCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVzXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShuYW1lcykpICB7XG4gICAgICAgICAgICAgICAgbmFtZXMgPSBbbmFtZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goXCJbbmFtZT0nXCIgKyBuYW1lc1tpXSArIFwiJ11cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3Iuam9pbigpO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIG51bWVyaWMgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTnVtZXJpY1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUnVsZXMoZWxlbWVudCwgdGhpcy5udW1lcmljUnVsZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyBwYXNzZWQgcnVsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBydWxlc1xuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc1J1bGVzOiBmdW5jdGlvbiAoZWxlbWVudCwgcnVsZXMpIHtcblxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9ICQuZGF0YShlbGVtZW50LmZvcm0sIFwidmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdmFyIGxpc3RSdWxlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdmFsaWRhdG9yLmFycmF5UnVsZXNDYWNoZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGVbZWxlbWVudC5uYW1lXSwgZnVuY3Rpb24gKGluZGV4LCBhcnJheVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2goYXJyYXlSdWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gdmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgbGlzdFJ1bGVzLnB1c2godmFsaWRhdG9yLnNldHRpbmdzLnJ1bGVzW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJC5lYWNoKGxpc3RSdWxlcywgZnVuY3Rpb24oaW5kZXgsb2JqUnVsZXMpe1xuICAgICAgICAgICAgICAgIGlmICgnbGFyYXZlbFZhbGlkYXRpb24nIGluIG9ialJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcnVsZXM9b2JqUnVsZXMubGFyYXZlbFZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3J1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KF9ydWxlc1tpXVswXSxydWxlcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiB0aGUgc3RyaW5nIGxlbmd0aCB1c2luZyBQSFAgZnVuY3Rpb24uXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJsZW4ucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cmxlbi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgc3RybGVuOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RybGVuKHN0cmluZyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGRlcGVuZGluZyBvZiBoaXMgdHlwZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9ialxuICAgICAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHJldHVybnMgaW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiBnZXRTaXplKG9iaiwgZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTnVtZXJpY1J1bGVzKGVsZW1lbnQpICYmIHRoaXMuaXNfbnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGguZmxvb3IodGhpcy5maWxlaW5mbyhlbGVtZW50KS5zaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuc3RybGVuKHZhbHVlKSk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHNwZWNpZmllZCBydWxlIGZyb20gZWxlbWVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJ1bGVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXRMYXJhdmVsVmFsaWRhdGlvbjogZnVuY3Rpb24ocnVsZSwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAkLmVhY2goJC52YWxpZGF0b3Iuc3RhdGljUnVsZXMoZWxlbWVudCksIGZ1bmN0aW9uKGtleSwgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5PT09XCJsYXJhdmVsVmFsaWRhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChydWxlcywgZnVuY3Rpb24gKGksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF09PT1ydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybiBoZSB0aW1lc3RhbXAgb2YgdmFsdWUgcGFzc2VkIHVzaW5nIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdCBpbiBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxpbnR9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZVRpbWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBmbXQgPSBuZXcgRGF0ZUZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZVJ1bGUgPSB0aGlzLmdldExhcmF2ZWxWYWxpZGF0aW9uKCdEYXRlRm9ybWF0JywgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlUnVsZVsxXVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGltZVZhbHVlID0gdGhpcy5zdHJ0b3RpbWUodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lVmFsdWUgPSBmbXQucGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVZhbHVlID0gTWF0aC5yb3VuZCgodGltZVZhbHVlLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgYSBnaXZlbiBkYXRlIGFnYWluc3QgYW5vdGhlciB1c2luZyBhbiBvcGVyYXRvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbGlkYXRvclxuICAgICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gb3BlcmF0b3JcbiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNvbXBhcmVEYXRlczogZnVuY3Rpb24gKHZhbGlkYXRvciwgdmFsdWUsIGVsZW1lbnQsIHBhcmFtcywgb3BlcmF0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHRpbWVDb21wYXJlID0gcGFyc2VGbG9hdChwYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4odGltZUNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZGVwZW5kZW50RWxlbWVudCh2YWxpZGF0b3IsIGVsZW1lbnQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUNvbXBhcmUgPSB0aGlzLnBhcnNlVGltZSh2YWxpZGF0b3IuZWxlbWVudFZhbHVlKHRhcmdldCksIHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0aW1lVmFsdWUgPSB0aGlzLnBhcnNlVGltZSh2YWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGltZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlIDwgdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lVmFsdWUgPD0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc9PSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPT09JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA9PT0gdGltZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVWYWx1ZSA+IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZVZhbHVlID49IHRpbWVDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvcGVyYXRvci4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBpbnRlbGxpZ2VudGx5IGd1ZXNzIHRoZSBkYXRlIGJ5IGNsb3NlbHkgbWF0Y2hpbmcgdGhlIHNwZWNpZmljIGZvcm1hdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlXG4gICAgICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBndWVzc0RhdGU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZm10ID0gbmV3IERhdGVGb3JtYXR0ZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBmbXQuZ3Vlc3NEYXRlKHZhbHVlLCBmb3JtYXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgVW5peCB0aW1lc3RhbXAgYmFzZWQgb24gUEhQIGZ1bmN0aW9uIHN0cm90b3RpbWUuXG4gICAgICAgICAqIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lcy9mdW5jdGlvbi5zdHJ0b3RpbWUucGhwXG4gICAgICAgICAqIGh0dHA6Ly9waHBqcy5vcmcvZnVuY3Rpb25zL3N0cnRvdGltZS9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHRleHRcbiAgICAgICAgICogQHBhcmFtIG5vd1xuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgICAgICovXG4gICAgICAgIHN0cnRvdGltZTogZnVuY3Rpb24gKHRleHQsIG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cnRvdGltZSh0ZXh0LCBub3cpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgaWYgdmFsdWUgaXMgbnVtZXJpYy5cbiAgICAgICAgICogaHR0cDovL3BocC5uZXQvbWFudWFsL2VzL3Zhci5pc19udW1lcmljLnBocFxuICAgICAgICAgKiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9pc19udW1lcmljL1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbWl4ZWRfdmFyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAgICAgKi9cbiAgICAgICAgaXNfbnVtZXJpYzogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICAgICAgcmV0dXJuIGlzX251bWVyaWMobWl4ZWRfdmFyKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBvZiB0eXBlIEFycmF5LlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5I1BvbHlmaWxsXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBhcmdcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBpc0FycmF5OiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBBcnJheSBkaWZmIGJhc2VkIG9uIFBIUCBmdW5jdGlvbiBhcnJheV9kaWZmLlxuICAgICAgICAgKiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZXMvZnVuY3Rpb24uYXJyYXlfZGlmZi5waHBcbiAgICAgICAgICogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvYXJyYXlfZGlmZi9cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheURpZmY6IGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlfZGlmZihhcnIxLCBhcnIyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2sgd2hldGhlciB0d28gYXJyYXlzIGFyZSBlcXVhbCB0byBvbmUgYW5vdGhlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGFycjFcbiAgICAgICAgICogQHBhcmFtIGFycjJcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBhcnJheUVxdWFsczogZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgICAgICAgICAgIGlmICghIHRoaXMuaXNBcnJheShhcnIxKSB8fCAhIHRoaXMuaXNBcnJheShhcnIyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuICQuaXNFbXB0eU9iamVjdCh0aGlzLmFycmF5RGlmZihhcnIxLCBhcnIyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2VzIGVsZW1lbnQgZGVwZW5kYW50IGZyb20gb3RoZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWxpZGF0b3JcbiAgICAgICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMgeyp9XG4gICAgICAgICAqL1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50OiBmdW5jdGlvbih2YWxpZGF0b3IsIGVsZW1lbnQsIG5hbWUpIHtcblxuICAgICAgICAgICAgdmFyIGVsPXZhbGlkYXRvci5maW5kQnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIGVsWzBdIT09dW5kZWZpbmVkICAmJiB2YWxpZGF0b3Iuc2V0dGluZ3Mub25mb2N1c291dCApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSAnYmx1cic7XG4gICAgICAgICAgICAgICAgaWYgKGVsWzBdLnRhZ05hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsWzBdLnR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxbMF0udHlwZSA9PT0gJ3JhZGlvJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdjbGljayc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lID0gJy52YWxpZGF0ZS1sYXJhdmVsVmFsaWRhdGlvbic7XG4gICAgICAgICAgICAgICAgZWwub2ZmKCBydWxlTmFtZSApXG4gICAgICAgICAgICAgICAgICAgIC5vZmYoZXZlbnQgKyBydWxlTmFtZSArICctJyArIGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLm9uKCBldmVudCArIHJ1bGVOYW1lICsgJy0nICsgZWxlbWVudC5uYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoIGVsZW1lbnQgKS52YWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsWzBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgZXJyb3IgQWpheCByZXNwb25zZSBhbmQgZ2V0cyB0aGUgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlRXJyb3JSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmVzcG9uc2UgPSBbJ1dob29wcywgbG9va3MgbGlrZSBzb21ldGhpbmcgd2VudCB3cm9uZy4nXTtcbiAgICAgICAgICAgIGlmICgncmVzcG9uc2VUZXh0JyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dC5tYXRjaCgvPGgxXFxzKj4oLiopPFxcL2gxXFxzKj4vaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBcnJheShlcnJvck1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmVzcG9uc2UgPSBbZXJyb3JNc2dbMV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRXNjYXBlIHN0cmluZyB0byB1c2UgYXMgUmVndWxhciBFeHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gc3RyXG4gICAgICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgZXNjYXBlUmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhdGUgUmVnRXhwIGZyb20gd2lsZGNhcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge1JlZ0V4cH1cbiAgICAgICAgICovXG4gICAgICAgIHJlZ2V4RnJvbVdpbGRjYXJkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdChcIlsqXVwiKTtcbiAgICAgICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlZ2V4cFBhcnRzID0gbmFtZVBhcnRzLm1hcChmdW5jdGlvbihjdXJyZW50VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAnWyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gJ10nICtjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhcmF2ZWxWYWxpZGF0aW9uLmhlbHBlcnMuZXNjYXBlUmVnRXhwKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nK3JlZ2V4cFBhcnRzLmpvaW4oJ1teXFxcXF1dKicpKyckJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lcmdlIGFkZGl0aW9uYWwgbGFyYXZlbCB2YWxpZGF0aW9uIHJ1bGVzIGludG8gdGhlIGN1cnJlbnQgcnVsZSBzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxlc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UnVsZXNcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG1lcmdlUnVsZXM6IGZ1bmN0aW9uIChydWxlcywgbmV3UnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBydWxlc0xpc3QgPSB7XG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb24gfHwgW10sXG4gICAgICAgICAgICAgICAgJ2xhcmF2ZWxWYWxpZGF0aW9uUmVtb3RlJzogbmV3UnVsZXMubGFyYXZlbFZhbGlkYXRpb25SZW1vdGUgfHwgW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNMaXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBydWxlc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcnVsZXNba2V5XSA9IHJ1bGVzW2tleV0uY29uY2F0KHJ1bGVzTGlzdFtrZXldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Timezone Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n helpers: {\n\n /**\n * Check if the specified timezone is valid.\n *\n * @param value\n * @returns {boolean}\n */\n isTimezone: function (value) {\n\n var timezones={\n \"africa\": [\n \"abidjan\",\n \"accra\",\n \"addis_ababa\",\n \"algiers\",\n \"asmara\",\n \"bamako\",\n \"bangui\",\n \"banjul\",\n \"bissau\",\n \"blantyre\",\n \"brazzaville\",\n \"bujumbura\",\n \"cairo\",\n \"casablanca\",\n \"ceuta\",\n \"conakry\",\n \"dakar\",\n \"dar_es_salaam\",\n \"djibouti\",\n \"douala\",\n \"el_aaiun\",\n \"freetown\",\n \"gaborone\",\n \"harare\",\n \"johannesburg\",\n \"juba\",\n \"kampala\",\n \"khartoum\",\n \"kigali\",\n \"kinshasa\",\n \"lagos\",\n \"libreville\",\n \"lome\",\n \"luanda\",\n \"lubumbashi\",\n \"lusaka\",\n \"malabo\",\n \"maputo\",\n \"maseru\",\n \"mbabane\",\n \"mogadishu\",\n \"monrovia\",\n \"nairobi\",\n \"ndjamena\",\n \"niamey\",\n \"nouakchott\",\n \"ouagadougou\",\n \"porto-novo\",\n \"sao_tome\",\n \"tripoli\",\n \"tunis\",\n \"windhoek\"\n ],\n \"america\": [\n \"adak\",\n \"anchorage\",\n \"anguilla\",\n \"antigua\",\n \"araguaina\",\n \"argentina\\/buenos_aires\",\n \"argentina\\/catamarca\",\n \"argentina\\/cordoba\",\n \"argentina\\/jujuy\",\n \"argentina\\/la_rioja\",\n \"argentina\\/mendoza\",\n \"argentina\\/rio_gallegos\",\n \"argentina\\/salta\",\n \"argentina\\/san_juan\",\n \"argentina\\/san_luis\",\n \"argentina\\/tucuman\",\n \"argentina\\/ushuaia\",\n \"aruba\",\n \"asuncion\",\n \"atikokan\",\n \"bahia\",\n \"bahia_banderas\",\n \"barbados\",\n \"belem\",\n \"belize\",\n \"blanc-sablon\",\n \"boa_vista\",\n \"bogota\",\n \"boise\",\n \"cambridge_bay\",\n \"campo_grande\",\n \"cancun\",\n \"caracas\",\n \"cayenne\",\n \"cayman\",\n \"chicago\",\n \"chihuahua\",\n \"costa_rica\",\n \"creston\",\n \"cuiaba\",\n \"curacao\",\n \"danmarkshavn\",\n \"dawson\",\n \"dawson_creek\",\n \"denver\",\n \"detroit\",\n \"dominica\",\n \"edmonton\",\n \"eirunepe\",\n \"el_salvador\",\n \"fortaleza\",\n \"glace_bay\",\n \"godthab\",\n \"goose_bay\",\n \"grand_turk\",\n \"grenada\",\n \"guadeloupe\",\n \"guatemala\",\n \"guayaquil\",\n \"guyana\",\n \"halifax\",\n \"havana\",\n \"hermosillo\",\n \"indiana\\/indianapolis\",\n \"indiana\\/knox\",\n \"indiana\\/marengo\",\n \"indiana\\/petersburg\",\n \"indiana\\/tell_city\",\n \"indiana\\/vevay\",\n \"indiana\\/vincennes\",\n \"indiana\\/winamac\",\n \"inuvik\",\n \"iqaluit\",\n \"jamaica\",\n \"juneau\",\n \"kentucky\\/louisville\",\n \"kentucky\\/monticello\",\n \"kralendijk\",\n \"la_paz\",\n \"lima\",\n \"los_angeles\",\n \"lower_princes\",\n \"maceio\",\n \"managua\",\n \"manaus\",\n \"marigot\",\n \"martinique\",\n \"matamoros\",\n \"mazatlan\",\n \"menominee\",\n \"merida\",\n \"metlakatla\",\n \"mexico_city\",\n \"miquelon\",\n \"moncton\",\n \"monterrey\",\n \"montevideo\",\n \"montreal\",\n \"montserrat\",\n \"nassau\",\n \"new_york\",\n \"nipigon\",\n \"nome\",\n \"noronha\",\n \"north_dakota\\/beulah\",\n \"north_dakota\\/center\",\n \"north_dakota\\/new_salem\",\n \"ojinaga\",\n \"panama\",\n \"pangnirtung\",\n \"paramaribo\",\n \"phoenix\",\n \"port-au-prince\",\n \"port_of_spain\",\n \"porto_velho\",\n \"puerto_rico\",\n \"rainy_river\",\n \"rankin_inlet\",\n \"recife\",\n \"regina\",\n \"resolute\",\n \"rio_branco\",\n \"santa_isabel\",\n \"santarem\",\n \"santiago\",\n \"santo_domingo\",\n \"sao_paulo\",\n \"scoresbysund\",\n \"shiprock\",\n \"sitka\",\n \"st_barthelemy\",\n \"st_johns\",\n \"st_kitts\",\n \"st_lucia\",\n \"st_thomas\",\n \"st_vincent\",\n \"swift_current\",\n \"tegucigalpa\",\n \"thule\",\n \"thunder_bay\",\n \"tijuana\",\n \"toronto\",\n \"tortola\",\n \"vancouver\",\n \"whitehorse\",\n \"winnipeg\",\n \"yakutat\",\n \"yellowknife\"\n ],\n \"antarctica\": [\n \"casey\",\n \"davis\",\n \"dumontdurville\",\n \"macquarie\",\n \"mawson\",\n \"mcmurdo\",\n \"palmer\",\n \"rothera\",\n \"south_pole\",\n \"syowa\",\n \"vostok\"\n ],\n \"arctic\": [\n \"longyearbyen\"\n ],\n \"asia\": [\n \"aden\",\n \"almaty\",\n \"amman\",\n \"anadyr\",\n \"aqtau\",\n \"aqtobe\",\n \"ashgabat\",\n \"baghdad\",\n \"bahrain\",\n \"baku\",\n \"bangkok\",\n \"beirut\",\n \"bishkek\",\n \"brunei\",\n \"choibalsan\",\n \"chongqing\",\n \"colombo\",\n \"damascus\",\n \"dhaka\",\n \"dili\",\n \"dubai\",\n \"dushanbe\",\n \"gaza\",\n \"harbin\",\n \"hebron\",\n \"ho_chi_minh\",\n \"hong_kong\",\n \"hovd\",\n \"irkutsk\",\n \"jakarta\",\n \"jayapura\",\n \"jerusalem\",\n \"kabul\",\n \"kamchatka\",\n \"karachi\",\n \"kashgar\",\n \"kathmandu\",\n \"khandyga\",\n \"kolkata\",\n \"krasnoyarsk\",\n \"kuala_lumpur\",\n \"kuching\",\n \"kuwait\",\n \"macau\",\n \"magadan\",\n \"makassar\",\n \"manila\",\n \"muscat\",\n \"nicosia\",\n \"novokuznetsk\",\n \"novosibirsk\",\n \"omsk\",\n \"oral\",\n \"phnom_penh\",\n \"pontianak\",\n \"pyongyang\",\n \"qatar\",\n \"qyzylorda\",\n \"rangoon\",\n \"riyadh\",\n \"sakhalin\",\n \"samarkand\",\n \"seoul\",\n \"shanghai\",\n \"singapore\",\n \"taipei\",\n \"tashkent\",\n \"tbilisi\",\n \"tehran\",\n \"thimphu\",\n \"tokyo\",\n \"ulaanbaatar\",\n \"urumqi\",\n \"ust-nera\",\n \"vientiane\",\n \"vladivostok\",\n \"yakutsk\",\n \"yekaterinburg\",\n \"yerevan\"\n ],\n \"atlantic\": [\n \"azores\",\n \"bermuda\",\n \"canary\",\n \"cape_verde\",\n \"faroe\",\n \"madeira\",\n \"reykjavik\",\n \"south_georgia\",\n \"st_helena\",\n \"stanley\"\n ],\n \"australia\": [\n \"adelaide\",\n \"brisbane\",\n \"broken_hill\",\n \"currie\",\n \"darwin\",\n \"eucla\",\n \"hobart\",\n \"lindeman\",\n \"lord_howe\",\n \"melbourne\",\n \"perth\",\n \"sydney\"\n ],\n \"europe\": [\n \"amsterdam\",\n \"andorra\",\n \"athens\",\n \"belgrade\",\n \"berlin\",\n \"bratislava\",\n \"brussels\",\n \"bucharest\",\n \"budapest\",\n \"busingen\",\n \"chisinau\",\n \"copenhagen\",\n \"dublin\",\n \"gibraltar\",\n \"guernsey\",\n \"helsinki\",\n \"isle_of_man\",\n \"istanbul\",\n \"jersey\",\n \"kaliningrad\",\n \"kiev\",\n \"lisbon\",\n \"ljubljana\",\n \"london\",\n \"luxembourg\",\n \"madrid\",\n \"malta\",\n \"mariehamn\",\n \"minsk\",\n \"monaco\",\n \"moscow\",\n \"oslo\",\n \"paris\",\n \"podgorica\",\n \"prague\",\n \"riga\",\n \"rome\",\n \"samara\",\n \"san_marino\",\n \"sarajevo\",\n \"simferopol\",\n \"skopje\",\n \"sofia\",\n \"stockholm\",\n \"tallinn\",\n \"tirane\",\n \"uzhgorod\",\n \"vaduz\",\n \"vatican\",\n \"vienna\",\n \"vilnius\",\n \"volgograd\",\n \"warsaw\",\n \"zagreb\",\n \"zaporozhye\",\n \"zurich\"\n ],\n \"indian\": [\n \"antananarivo\",\n \"chagos\",\n \"christmas\",\n \"cocos\",\n \"comoro\",\n \"kerguelen\",\n \"mahe\",\n \"maldives\",\n \"mauritius\",\n \"mayotte\",\n \"reunion\"\n ],\n \"pacific\": [\n \"apia\",\n \"auckland\",\n \"chatham\",\n \"chuuk\",\n \"easter\",\n \"efate\",\n \"enderbury\",\n \"fakaofo\",\n \"fiji\",\n \"funafuti\",\n \"galapagos\",\n \"gambier\",\n \"guadalcanal\",\n \"guam\",\n \"honolulu\",\n \"johnston\",\n \"kiritimati\",\n \"kosrae\",\n \"kwajalein\",\n \"majuro\",\n \"marquesas\",\n \"midway\",\n \"nauru\",\n \"niue\",\n \"norfolk\",\n \"noumea\",\n \"pago_pago\",\n \"palau\",\n \"pitcairn\",\n \"pohnpei\",\n \"port_moresby\",\n \"rarotonga\",\n \"saipan\",\n \"tahiti\",\n \"tarawa\",\n \"tongatapu\",\n \"wake\",\n \"wallis\"\n ],\n \"utc\": [\n \"\"\n ]\n };\n\n var tzparts= value.split('/',2);\n var continent=tzparts[0].toLowerCase();\n var city='';\n if (tzparts[1]) {\n city=tzparts[1].toLowerCase();\n }\n\n return (continent in timezones && ( timezones[continent].length===0 || timezones[continent].indexOf(city)!==-1))\n }\n }\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Methods that implement Laravel Validations\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n methods:{\n\n helpers: laravelValidation.helpers,\n\n jsRemoteTimer:0,\n\n /**\n * \"Validate\" optional attributes.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Sometimes: function() {\n return true;\n },\n\n /**\n * Bail This is the default behaivour os JSValidation.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Bail: function() {\n return true;\n },\n\n /**\n * \"Indicate\" validation should pass if value is null.\n * Always returns true, just lets us put \"nullable\" in rules.\n *\n * @return {boolean}\n */\n Nullable: function() {\n return true;\n },\n\n /**\n * Validate the given attribute is filled if it is present.\n */\n Filled: function(value, element) {\n return $.validator.methods.required.call(this, value, element, true);\n },\n\n\n /**\n * Validate that a required attribute exists.\n */\n Required: function(value, element) {\n return $.validator.methods.required.call(this, value, element);\n },\n\n /**\n * Validate that an attribute exists when any other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWith: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required=required || (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWithAll: function(value, element, params) {\n var validator=this,\n required=true;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when any other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithout: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required ||\n target===undefined||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n );\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithoutAll: function(value, element, params) {\n var validator=this,\n required=true,\n currentObject=this;\n\n $.each(params,function(i, param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target===undefined ||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when another attribute has a given value.\n *\n * @return {boolean}\n */\n RequiredIf: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return $.validator.methods.required.call(\n this, value, element, true\n );\n }\n }\n }\n\n return true;\n },\n\n /**\n * Validate that an attribute exists when another\n * attribute does not have a given value.\n *\n * @return {boolean}\n */\n RequiredUnless: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return true;\n }\n }\n }\n\n return $.validator.methods.required.call(\n this, value, element, true\n );\n\n },\n\n /**\n * Validate that an attribute has a matching confirmation.\n *\n * @return {boolean}\n */\n Confirmed: function(value, element, params) {\n return laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that two attributes match.\n *\n * @return {boolean}\n */\n Same: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n return String(value) === String(this.elementValue(target));\n }\n return false;\n },\n\n /**\n * Validate that the values of an attribute is in another attribute.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n * @constructor\n */\n InArray: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return found;\n },\n\n /**\n * Validate an attribute is unique among other values.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n */\n Distinct: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName !== element.name && targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return !found;\n },\n\n\n /**\n * Validate that an attribute is different from another attribute.\n *\n * @return {boolean}\n */\n Different: function(value, element, params) {\n return ! laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that an attribute was \"accepted\".\n * This validation rule implies the attribute is \"required\".\n *\n * @return {boolean}\n */\n Accepted: function(value) {\n var regex = new RegExp(\"^(?:(yes|on|1|true))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an array.\n *\n * @param value\n * @param element\n */\n Array: function(value, element) {\n if (element.name.indexOf('[') !== -1 && element.name.indexOf(']') !== -1) {\n return true;\n }\n\n return laravelValidation.helpers.isArray(value);\n },\n\n /**\n * Validate that an attribute is a boolean.\n *\n * @return {boolean}\n */\n Boolean: function(value) {\n var regex= new RegExp(\"^(?:(true|false|1|0))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an integer.\n *\n * @return {boolean}\n */\n Integer: function(value) {\n var regex= new RegExp(\"^(?:-?\\\\d+)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is numeric.\n */\n Numeric: function(value, element) {\n return $.validator.methods.number.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a string.\n *\n * @return {boolean}\n */\n String: function(value) {\n return typeof value === 'string';\n },\n\n /**\n * The field under validation must be numeric and must have an exact length of value.\n */\n Digits: function(value, element, params) {\n return (\n $.validator.methods.number.call(this, value, element, true) &&\n value.length === parseInt(params, 10)\n );\n },\n\n /**\n * The field under validation must have a length between the given min and max.\n */\n DigitsBetween: function(value, element, params) {\n return ($.validator.methods.number.call(this, value, element, true)\n && value.length>=parseFloat(params[0]) && value.length<=parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute.\n *\n * @return {boolean}\n */\n Size: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) === parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is between a set of values.\n *\n * @return {boolean}\n */\n Between: function(value, element, params) {\n return ( laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]) &&\n laravelValidation.helpers.getSize(this,element,value) <= parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute is greater than a minimum value.\n *\n * @return {boolean}\n */\n Min: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is less than a maximum value.\n *\n * @return {boolean}\n */\n Max: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) <= parseFloat(params[0]);\n },\n\n /**\n * Validate an attribute is contained within a list of values.\n *\n * @return {boolean}\n */\n In: function(value, element, params) {\n if (laravelValidation.helpers.isArray(value)\n && laravelValidation.helpers.hasRules(element, \"Array\")\n ) {\n var diff = laravelValidation.helpers.arrayDiff(value, params);\n\n return Object.keys(diff).length === 0;\n }\n\n return params.indexOf(value.toString()) !== -1;\n },\n\n /**\n * Validate an attribute is not contained within a list of values.\n *\n * @return {boolean}\n */\n NotIn: function(value, element, params) {\n return params.indexOf(value.toString()) === -1;\n },\n\n /**\n * Validate that an attribute is a valid IP.\n *\n * @return {boolean}\n */\n Ip: function(value) {\n return /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(value) ||\n /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);\n },\n\n /**\n * Validate that an attribute is a valid e-mail address.\n */\n Email: function(value, element) {\n return $.validator.methods.email.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a valid URL.\n */\n Url: function(value, element) {\n return $.validator.methods.url.call(this, value, element, true);\n },\n\n /**\n * The field under validation must be a successfully uploaded file.\n *\n * @return {boolean}\n */\n File: function(value, element) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if ('files' in element ) {\n return (element.files.length > 0);\n }\n return false;\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n *\n * @return {boolean}\n */\n Mimes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n return (fileinfo !== false && lowerParams.indexOf(fileinfo.extension.toLowerCase())!==-1);\n },\n\n /**\n * The file under validation must match one of the given MIME types.\n *\n * @return {boolean}\n */\n Mimetypes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n\n if (fileinfo === false) {\n return false;\n }\n return (lowerParams.indexOf(fileinfo.type.toLowerCase())!==-1);\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n */\n Image: function(value, element) {\n return laravelValidation.methods.Mimes.call(this, value, element, [\n 'jpg', 'png', 'gif', 'bmp', 'svg', 'jpeg'\n ]);\n },\n\n /**\n * Validate dimensions of Image.\n *\n * @return {boolean|string}\n */\n Dimensions: function(value, element, params, callback) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if (element.files === null || typeof element.files[0] === 'undefined') {\n return false;\n }\n\n var fr = new FileReader;\n fr.onload = function () {\n var img = new Image();\n img.onload = function () {\n var height = parseFloat(img.naturalHeight);\n var width = parseFloat(img.naturalWidth);\n var ratio = width / height;\n var notValid = ((params['width']) && parseFloat(params['width'] !== width)) ||\n ((params['min_width']) && parseFloat(params['min_width']) > width) ||\n ((params['max_width']) && parseFloat(params['max_width']) < width) ||\n ((params['height']) && parseFloat(params['height']) !== height) ||\n ((params['min_height']) && parseFloat(params['min_height']) > height) ||\n ((params['max_height']) && parseFloat(params['max_height']) < height) ||\n ((params['ratio']) && ratio !== parseFloat(eval(params['ratio']))\n );\n callback(! notValid);\n };\n img.onerror = function() {\n callback(false);\n };\n img.src = fr.result;\n };\n fr.readAsDataURL(element.files[0]);\n\n return 'pending';\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n Alpha: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n\n var regex = new RegExp(\"^(?:^[a-z\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n\n },\n\n /**\n * Validate that an attribute contains only alpha-numeric characters.\n *\n * @return {boolean}\n */\n AlphaNum: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n AlphaDash: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC_-]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute passes a regular expression check.\n *\n * @return {boolean}\n */\n Regex: function(value, element, params) {\n var invalidModifiers=['x','s','u','X','U','A'];\n // Converting php regular expression\n var phpReg= new RegExp('^(?:\\/)(.*\\\\\\/?[^\\/]*|[^\\/]*)(?:\\/)([gmixXsuUAJ]*)?$');\n var matches=params[0].match(phpReg);\n if (matches === null) {\n return false;\n }\n // checking modifiers\n var php_modifiers=[];\n if (matches[2]!==undefined) {\n php_modifiers=matches[2].split('');\n for (var i=0; i');\n },\n\n /**\n * Validate the date is equal or after a given date.\n *\n * @return {boolean}\n */\n AfterOrEqual: function(value, element, params) {\n return laravelValidation.helpers.compareDates(this, value, element, params, '>=');\n },\n\n\n /**\n * Validate that an attribute is a valid date.\n */\n Timezone: function(value) {\n return laravelValidation.helpers.isTimezone(value);\n },\n\n\n /**\n * Validate the attribute is a valid JSON string.\n *\n * @param value\n * @return bool\n */\n Json: function(value) {\n var result = true;\n try {\n JSON.parse(value);\n } catch (e) {\n result = false;\n }\n return result;\n }\n }\n});\n"]} \ No newline at end of file