month-class
Version:
Month class, manages information of the month from a given date
2 lines • 118 kB
JavaScript
var Month;(()=>{var t={125:t=>{function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,r){if(r&&("object"===e(r)||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined");return n(t)}function n(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function o(t){var e="function"==typeof Map?new Map:void 0;return(o=function(t){if(null===t||(r=t,-1===Function.toString.call(r).indexOf("[native code]")))return t;var r;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return i(t,arguments,c(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),u(n,t)})(t)}function i(t,e,r){return(i=a()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var o=new(Function.bind.apply(t,n));return r&&u(o,r.prototype),o}).apply(null,arguments)}function a(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function u(t,e){return(u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var s,l,f,y=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&u(t,e)}(s,t);var e,o,i=(e=s,o=a(),function(){var t,n=c(e);if(o){var i=c(this).constructor;t=Reflect.construct(n,arguments,i)}else t=n.apply(this,arguments);return r(this,t)});function s(t,e){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,s);var o="function"==typeof t?t.apply(t,e):t;if("string"!=typeof o)throw new TypeError("error message must be string");return(r=i.call(this,o)).name="MonthError",Error.captureStackTrace&&Error.captureStackTrace(n(r),s),r}return s}(o(Error));f={TYPE_CURRENT_OPTION:"Current option must be a Date",TYPE_DATEBOOK_OPTION:"Datebook option must be an Array",INVALID_WEEKEND_OPTION:"Weekend option must be a number between 0 to 12 or a string that match the regex /^[0-1]{7}$/",INVALID_DATEBOOK_SCHEMA:"Some datebook's element has invalid schema"},(l="messages")in(s=y)?Object.defineProperty(s,l,{value:f,enumerable:!0,configurable:!0,writable:!0}):s[l]=f,t.exports=y},29:(t,e,r)=>{var n=r(722),o=/^[0-1]{7}$/,i=/^\d{4}-\d{2}-\d{2}/,a=["task","event","appointment","meeting"];e.weekend=function(t){var e=n.isIntNumber(t)&&t>=0&&t<=15,r=o.test(t);return e||r},e.datebook=function(t){return t.map((function(t){return function(t){return!(!n.isObject(t)||!("date"in t&&"title"in t&&"description"in t&&"holiday"in t&&"type"in t)||!n.isString(t.date)||!n.isString(t.title)||!n.isString(t.description)||!n.isString(t.type)||!n.isBoolean(t.holiday)||!i.test(t.date)||Number.isNaN(Date.parse(t.date))||Date.parse(t.date)<=0||!a.includes(t.type)||0===t.title.length||0===t.description.length)}(t)})).every((function(t){return!0===t}))}},565:(t,e,r)=>{function n(t,e){if(t){if("string"==typeof t)return o(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(t,e):void 0}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var i=r(722),a=new Map([[0,"0000011"],[1,"1000001"],[2,"1100000"],[3,"0110000"],[4,"0011000"],[5,"0001100"],[6,"0000110"],[7,"0000001"],[8,"1000000"],[9,"0100000"],[10,"0010000"],[11,"0001000"],[12,"0000100"],[13,"0000010"],[14,"0000001"],[15,"0000000"]]),u=[1,2,3,4,5,6,0];e.createYYMMDD=function(t){return[t.getFullYear(),t.getMonth(),t.getDate()]},e.createWeekend=function(t){var e,r=(e=t,i.isIntNumber(e)&&e>=0&&e<=14?a.get(e):e).split("");return u.reduce((function(t,e,i){return"1"===r[i]?[].concat(function(t){if(Array.isArray(t))return o(t)}(a=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(a)||n(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]):t;var a}),[])},e.createSCE=function(t){var e,r,o=(r=3,function(t){if(Array.isArray(t))return t}(e=t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],a=!0,u=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);a=!0);}catch(t){u=!0,o=t}finally{try{a||null==r.return||r.return()}finally{if(u)throw o}}return i}}(e,r)||n(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],a=o[1];return[1,o[2],new Date(i,a+1,0).getDate()]}},722:(t,e)=>{var r=/\s([a-z|A-Z]+)/,n=function(t){return{}.toString.call(t)},o=function(t){return n(t).match(r)[1].toLocaleLowerCase()},i=function(t){return"[object Object]"===n(t)},a=function(t){return i(t)&&!Object.getPrototypeOf(t)};e.isArray=function(t){return Array.isArray(t)},e.isBoolean=function(t){return"[object Boolean]"===n(t)},e.isDate=function(t){return"[object Date]"===n(t)},e.isFunction=function(t){return"[object Function]"===n(t)},e.isNumber=function(t){return"[object Number]"===n(t)},e.isFloatNumber=function(t){return"[object Number]"===n(t)&&!Number.isInteger(t)},e.isIntNumber=function(t){return"[object Number]"===n(t)&&Number.isInteger(t)},e.isString=function(t){return"[object String]"===n(t)},e.isObject=i,e.isNullObject=a,e.isPOJO=function(t){return i(t)&&(a(t)||"Object"===Object.getPrototypeOf(t).constructor.name)},e.isEmptyArray=function(t){return Array.isArray(t)&&0===t.length},e.isEmptyObject=function(t){return i(t)&&0===Object.getOwnPropertyNames(t).length},e.isArrayOf=function(t,e){return t.map((function(t){return e.includes(o(t))})).every((function(t){return!!t}))},e.isObjectOf=function(t,e){return Object.keys(t).map((function(r){return e.includes(o(t[r]))})).every((function(t){return!!t}))}},579:(t,e,r)=>{function n(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return o(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var u=r(125),c=r(722),s=r(29),l=r(565),f=r(18),y=r(451),p=r(942),d=r(608),b=r(514),h=r(795),m=u.messages,v=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.current,n=void 0===r?new Date:r,o=e.weekend,a=void 0===o?0:o,v=e.datebook,D=void 0===v?[]:v;if(i(this,t),!c.isDate(n))throw new u(m.TYPE_CURRENT_OPTION);if(!s.weekend(a))throw new u(m.INVALID_WEEKEND_OPTION);if(!c.isArray(D))throw new u(m.TYPE_DATEBOOK_OPTION);if(!c.isEmptyArray(D)&&!s.datebook(D))throw new u(m.INVALID_DATEBOOK_SCHEMA);Object.defineProperty(this,"YYMMDD",{value:l.createYYMMDD(n)}),Object.defineProperty(this,"WEEKEND",{value:l.createWeekend(a)}),Object.defineProperty(this,"SCE",{value:l.createSCE(this.YYMMDD)}),this.year=this.YYMMDD[0],this.number=this.YYMMDD[1],this.planner=f({datebook:D,YYMMDD:this.YYMMDD,SCE:this.SCE}),this.weekends=y({YYMMDD:this.YYMMDD,WEEKEND:this.WEEKEND,SCE:this.SCE}),this.holidays=p(this.planner),this.nonworkdays=d({weekends:this.weekends,holidays:this.holidays}),this.days=b({YYMMDD:this.YYMMDD,SCE:this.SCE,weekends:this.weekends,nonworkdays:this.nonworkdays,planner:this.planner}),this.summary=h({YYMMDD:this.YYMMDD,nonworkdays:this.nonworkdays})}var e,r;return e=t,(r=[{key:"addDatebook",value:function(t){if(!c.isArray(t))throw new u(m.TYPE_DATEBOOK_OPTION);if(!c.isEmptyArray(t)&&!s.datebook(t))throw new u(m.INVALID_DATEBOOK_SCHEMA);var e=f({datebook:t,YYMMDD:this.YYMMDD,SCE:this.SCE}),r=e.tasks,o=e.events,i=e.appointments,a=e.meetings,l=this.planner,y=l.tasks,v=l.events,D=l.appointments,g=l.meetings,w=[].concat(n(y),n(r)),O=[].concat(n(v),n(o)),M=[].concat(n(D),n(i)),S=[].concat(n(g),n(a));return this.planner={tasks:w,events:O,appointments:M,meetings:S},this.holidays=p(this.planner),this.nonworkdays=d({weekends:this.weekends,holidays:this.holidays}),this.days=b({YYMMDD:this.YYMMDD,SCE:this.SCE,weekends:this.weekends,nonworkdays:this.nonworkdays,planner:this.planner}),this.summary=h({YYMMDD:this.YYMMDD,nonworkdays:this.nonworkdays}),this}}])&&a(e.prototype,r),t}();t.exports=v},514:t=>{function e(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],a=!0,u=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);a=!0);}catch(t){u=!0,o=t}finally{try{a||null==r.return||r.return()}finally{if(u)throw o}}return i}}(t,e)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}t.exports=function(t){for(var r=t.YYMMDD,n=t.SCE,o=t.weekends,i=t.nonworkdays,a=t.planner,u=e(r,2),c=u[0],s=u[1],l=e(n,3),f=l[0],y=l[1],p=l[2],d=a.tasks,b=a.events,h=a.appointments,m=a.meetings,v=[],D=new Date(c,s,1),g=0===D.getDay()?0:1,w=0,O=function(t){D.setDate(t);var e=!i.includes(t),r=o.includes(t),n=D.getDay(),a=t<y?"elapsed":t===y?"current":"remaining",u=d.filter((function(e){return e.YYMMDD[2]===t})).length,l=b.filter((function(e){return e.YYMMDD[2]===t})).length,f=h.filter((function(e){return e.YYMMDD[2]===t})).length,p=m.filter((function(e){return e.YYMMDD[2]===t})).length;0===n&&(g+=1),e&&(w+=1);var O={day:t,date:[c,s,t],weekday:n,type:a,week:g,workday:w,isWorkday:e,isWeekend:r,scheduled:{tasks:u,events:l,appointments:f,meetings:p,total:u+l+f+p}};v.push(O)},M=f;M<=p;M+=1)O(M);return v}},942:t=>{function e(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}t.exports=function(t){var r=function(t){return[].concat(e(t.tasks),e(t.events),e(t.appointments),e(t.meetings))}(t);if(0===r.length)return[];var n=r.reduce((function(t,r){return r.holiday?[].concat(e(t),[r.YYMMDD[2]]):e(t)}),[]);return Array.from(new Set(n))}},608:t=>{function e(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var n=function(t,e){return t-e};t.exports=function(t){var r=t.weekends,o=t.holidays;return Array.from(new Set([].concat(e(r),e(o)))).sort(n)}},18:t=>{function e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function r(t){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?e(Object(o),!0).forEach((function(e){n(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):e(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=function(t,e){return t.day-e.day};t.exports=function(t){var e,n,i,a=(e={datebook:t.datebook,YYMMDD:t.YYMMDD,SCE:t.SCE},n=e.YYMMDD,i=e.SCE,e.datebook.map((function(t){return r(r({},t),{},{YYMMDD:(e=t.date,e.slice(0,10).split("-").map((function(t){return parseInt(t,10)})).map((function(t,e){return 1===e?t-1:t})))});var e})).filter((function(t){var e=t.YYMMDD[0]===n[0],r=t.YYMMDD[1]===n[1],o=t.YYMMDD[2]>=i[0]&&t.YYMMDD[2]<=i[2];return e&&r&&o}))).sort(o);return{tasks:a.filter((function(t){return"task"===t.type})),events:a.filter((function(t){return"event"===t.type})),appointments:a.filter((function(t){return"appointment"===t.type})),meetings:a.filter((function(t){return"meeting"===t.type}))}}},795:t=>{function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}t.exports=function(t){for(var r=t.YYMMDD,n=t.nonworkdays,o=(Y=3,function(t){if(Array.isArray(t))return t}(S=r)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],a=!0,u=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);a=!0);}catch(t){u=!0,o=t}finally{try{a||null==r.return||r.return()}finally{if(u)throw o}}return i}}(S,Y)||function(t,r){if(t){if("string"==typeof t)return e(t,r);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,r):void 0}}(S,Y)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=o[0],a=o[1],u=o[2],c=new Date(i,a,1),s=new Date(i,a,u),l=new Date(i,a+1,0),f=s.getDate(),y=l.getDate(),p=f-1,d=y-f,b=parseFloat((f/y).toFixed(2)),h=new Date(i,a,1),m=0===c.getDay()?0:1,v=m,D=m,g=0,w=0,O=1;O<=y;O+=1){h.setDate(O);var M=h.getDay();0===M&&O<=f&&(v+=1),0===M&&(D+=1),!n.includes(O)&&O<=f&&(g+=1),n.includes(O)||(w+=1)}var S,Y;return{dates:{start:c,current:s,end:l},days:{current:f,total:y,elapsed:p,remaining:d,percentage:b},weeks:{current:v,total:D,elapsed:v-1,remaining:D-v,percentage:parseFloat((v/D).toFixed(2))},workdays:{current:g,total:w,elapsed:g-1,remaining:w-g,percentage:parseFloat((g/w).toFixed(2))}}}},451:t=>{function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}t.exports=function(t){for(var r=t.YYMMDD,n=t.WEEKEND,o=t.SCE,i=function(t,r){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],a=!0,u=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);a=!0);}catch(t){u=!0,o=t}finally{try{a||null==r.return||r.return()}finally{if(u)throw o}}return i}}(t,r)||function(t,r){if(t){if("string"==typeof t)return e(t,r);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,r):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(r,2),a=i[0],u=i[1],c=o[2],s=new Date(a,u,1),l=[],f=1;f<=c;f+=1){s.setDate(f);var y=s.getDay();n.includes(y)&&l.push(f)}return l}}},e={},r=function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(579);Month=r})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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M0JnQnlFLEVBNEJoQi9CLE1BM0JlZ0MsRUE0QmZNLFFBN0JnQlAsRUFFZSxFQTRCL0JRLFVBN0JlUCxFQURDRCxFQStCaEJTLFdBM0JvQlosWUFKSkcsRUFDREMsR0FHMkNILFFBQVEsS0E2QnBFYSxTQUFVLENBQ1JwRixRQTNCbUIyRSxFQTRCbkJqQyxNQTNCa0JrQyxFQTRCbEJJLFFBN0JtQkwsRUFFa0IsRUE0QnJDTSxVQTdCa0JMLEVBRENELEVBK0JuQk8sV0EzQnVCWixZQUpKSyxFQUNEQyxHQUdpREwsUUFBUSxRLGtIQ2xDakZuSyxFQUFPQyxRQWZnQixTQUFDLEdBTXRCLElBTm1ELElBQTNCa0QsRUFBMkIsRUFBM0JBLE9BQVFpRCxFQUFtQixFQUFuQkEsUUFBU0YsRUFBVSxFQUFWQSxJQUN6QyxFLGsxQkFBQSxDQUFpQi9DLEVBQWpCLEdBQU9DLEVBQVAsS0FBV0MsRUFBWCxLQUNNaUYsRUFBUXBDLEVBQUksR0FDWnFCLEVBQVksSUFBSTdGLEtBQUswQixFQUFJQyxFQUFJLEdBQzdCOEMsRUFBVyxHQUVSd0MsRUFBSSxFQUFHQSxHQUFLTCxFQUFPSyxHQUFLLEVBQUcsQ0FDbENwQixFQUFVSSxRQUFRZ0IsR0FDbEIsSUFBTWIsRUFBVVAsRUFBVUUsU0FDdEJyQixFQUFReEUsU0FBU2tHLElBQVUzQixFQUFTb0MsS0FBS0ksR0FFL0MsT0FBT3hDLEtDakRMOEUsRUFBMkIsR0NFM0JDLEVEQ0osU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVKLEVBQXlCRyxHQUM1QyxRQUFxQkUsSUFBakJELEVBQ0gsT0FBT0EsRUFBYXBMLFFBR3JCLElBQUlELEVBQVNpTCxFQUF5QkcsR0FBWSxDQUdqRG5MLFFBQVMsSUFPVixPQUhBc0wsRUFBb0JILEdBQVVwTCxFQUFRQSxFQUFPQyxRQUFTa0wsR0FHL0NuTCxFQUFPQyxRQ2xCV2tMLENBQW9CLEsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Nb250aC8uL3NyYy9Nb250aEVycm9yL2luZGV4LmpzIiwid2VicGFjazovL01vbnRoLy4vc3JjL2hlbHBlcnMvaXNWYWxpZC5qcyIsIndlYnBhY2s6Ly9Nb250aC8uL3NyYy9oZWxwZXJzL3JlYWRvbmx5LmpzIiwid2VicGFjazovL01vbnRoLy4vc3JjL2hlbHBlcnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vTW9udGgvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vTW9udGgvLi9zcmMvc2VydmljZXMvY3JlYXRlRGF5cy5qcyIsIndlYnBhY2s6Ly9Nb250aC8uL3NyYy9zZXJ2aWNlcy9jcmVhdGVIb2xpZGF5cy5qcyIsIndlYnBhY2s6Ly9Nb250aC8uL3NyYy9zZXJ2aWNlcy9jcmVhdGVOb25Xb3JrZGF5cy5qcyIsIndlYnBhY2s6Ly9Nb250aC8uL3NyYy9zZXJ2aWNlcy9jcmVhdGVQbGFubmVyLmpzIiwid2VicGFjazovL01vbnRoLy4vc3JjL3NlcnZpY2VzL2NyZWF0ZVN1bW1hcnkuanMiLCJ3ZWJwYWNrOi8vTW9udGgvLi9zcmMvc2VydmljZXMvY3JlYXRlV2Vla2VuZHMuanMiLCJ3ZWJwYWNrOi8vTW9udGgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vTW9udGgvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgTWFuYWdlcyBNb250aEVycm9yIG1vZHVsZSwgdXNlZCB0byBjcmVhdGUgYWxsIGVycm9ycyBzcGVjaWZpYyB0b1xuICogdGhlIE1vbnRoIGNsYXNzLlxuICovXG5cbi8vIOKUgeKUgVx0TU9EVUxFXHTilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcbi8qKlxuICogTW9udGhFcnJvciBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGVycm9ycyBzcGVjaWZpYyB0byB0aGUgJ01vbnRoJyBjbGFzcy5cbiAqXG4gKiBAY2xhc3MgICAgTW9udGhFcnJvclxuICogQGF1Z21lbnRzIEVycm9yXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBNb250aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBNb250aEVycm9yLlxuICAgKlxuICAgKiBUaGUgYG1lc3NhZ2VgIHBhcmFtZXRlciBtdXN0IGJlIHR5cGUgYHN0cmluZ2Agb3IgYGZ1bmN0aW9uYC4gSWZcbiAgICogYSBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXJzLCBuZWNlc3NhcnkgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb25cbiAgICogbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaW4gdGhlIGNvbnN0cnVjdG9yLCBpZiB0aGUgcmVzdWx0IG9mXG4gICAqIHRoZSBmdW5jdGlvbiBpcyBub3Qgb2YgdHlwZSBgc3RyaW5nYCwgaXQgd2lsbCB0aHJvdyBhIGBUeXBlRXJyb3JgLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgIE1vbnRoRXJyb3JcbiAgICogQHBhcmFtICAgICB7c3RyaW5nfEZ1bmN0aW9ufSBtZXNzYWdlIC0gTW9udGhFcnJvcidzIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSAgICAge0FycmF5fSBbcGFyYW1zXSAtIFBhcmFtZXRlciB0byBjcmVhdGUgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogQHRocm93cyAgICB7VHlwZUVycm9yfSBJZiB0aGUgbWVzc2FnZSBpcyBub3Qgb2YgdHlwZSBzdHJpbmcuXG4gICAqIEBleGFtcGxlIGNvbnN0IEVSUk9SID0gbmV3IE1vbnRoRXJyb3IoJ2N1cnJlbnQgb3B0aW9uIG11c3QgYmUgYSBEYXRlJyk7XG4gICAqXG4gICAqIGNvbnN0IERZTkFNSUNfTUVTU0FHRSA9IHR5cGUgPT4gYGN1cnJlbnQgb3B0aW9uIG11c3QgYmUgYSAke3R5cGV9YDtcbiAgICogY29uc3QgRFlOQU1JQ19FUlJPUiA9IG5ldyBNb250aEVycm9yKERZTkFNSUNfTUVTU0FHRSwgWydEYXRlJ10pO1xuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSwgcGFyYW1zKSB7XG4gICAgY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVvZiBtZXNzYWdlID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0ICRtZXNzYWdlID0gaXNGdW5jdGlvbiA/IG1lc3NhZ2UuYXBwbHkobWVzc2FnZSwgcGFyYW1zKSA6IG1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiAkbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Vycm9yIG1lc3NhZ2UgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG4gICAgc3VwZXIoJG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdNb250aEVycm9yJztcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vbnRoRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgbWVzc2FnZXMgZm9yIHNwZWNpZmljIGVycm9ycyBvZiB0aGUgbW9udGggY2xhc3MuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlcm9mIE1vbnRoRXJyb3JcbiAgICovXG4gIHN0YXRpYyBtZXNzYWdlcyA9IHtcbiAgICBUWVBFX0NVUlJFTlRfT1BUSU9OOiAnQ3VycmVudCBvcHRpb24gbXVzdCBiZSBhIERhdGUnLFxuICAgIFRZUEVfREFURUJPT0tfT1BUSU9OOiAnRGF0ZWJvb2sgb3B0aW9uIG11c3QgYmUgYW4gQXJyYXknLFxuICAgIElOVkFMSURfV0VFS0VORF9PUFRJT046ICdXZWVrZW5kIG9wdGlvbiBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCB0byAxMiBvciBhIHN0cmluZyB0aGF0IG1hdGNoIHRoZSByZWdleCAvXlswLTFdezd9JC8nLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgSU5WQUxJRF9EQVRFQk9PS19TQ0hFTUE6IFwiU29tZSBkYXRlYm9vaydzIGVsZW1lbnQgaGFzIGludmFsaWQgc2NoZW1hXCIsXG4gIH07XG59XG5cbi8vIOKUgeKUgVx0RVhQT1JUIE1PRFVMRVx04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5tb2R1bGUuZXhwb3J0cyA9IE1vbnRoRXJyb3I7XG4iLCIvKipcbiAqIEBmaWxlIE1hbmFnZXMgaXNWYWxpZCBtb2R1bGUsIHVzZWQgdG8gY2hlY2sgdGhlIG9wdGlvbnMgb2YgdGhlIGNvbnN0cnVjdG9yXG4gKiBtZXRob2Qgb2YgdGhlIGNsYXNzIE1vbnRoLlxuICovXG5cbi8vIOKUgeKUgVx0SU1QT1JUIE1PRFVMRVNcdOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8vIOKUgeKUgVx0Q09OU1RBTlRTXHTilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gY2hlY2sgdGhlIHBhdHRlcm4gb2YgdGhlIHdlZWtlbmQgb3B0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCByZWdleFdlZWtlbmQgPSAvXlswLTFdezd9JC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gY2hlY2sgdGhlIHBhdHRlcm4gb2YgdGhlIGRhdGVib29rIGl0ZW0gb3B0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCByZWdleERhdGUgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9LztcblxuLyoqXG4gKiBBcnJheSBjb250YWluaW5nIGFsbCBhbGxvd2VkIHR5cGVzIG9mIHBsYW5uZWQgZGF0ZXMgaW4gZGF0ZWJvb2sgcGxhbnMuXG4gKlxuICogQHR5cGUge0FycmF5LjxzdHJpbmc+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgdHlwZXMgPSBbJ3Rhc2snLCAnZXZlbnQnLCAnYXBwb2ludG1lbnQnLCAnbWVldGluZyddO1xuXG4vLyDilIHilIFcdEZVTkNUSU9OU1x04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4vKipcbiAqIFRoZSAnaXNWYWxpZFBsYW4oKScgZnVuY3Rpb24gcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZSwgdmFsaWRhdGVzIGlmIGFuIG9iamVjdFxuICogZm9sbG93cyBhIHNjaGVtYS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge29iamVjdH0gcGxhbiAtIEEgb2JqZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gdmFsaWQgb2JqZWN0IHNjaGVtYTsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICogQGV4YW1wbGUgY29uc3QgaXNWYWxpZCA9IGlzVmFsaWREYXRlYm9va0l0ZW0oe1xuICogICBkYXRlOiAnMjAyMS0wMS0xNScsXG4gKiAgIHRpdGxlOiBcIk1vbSdzIGJpcnRoZGF5XCIsXG4gKiAgIGRlc2NyaXB0aW9uOiBcIk1vbSdzIGJpcnRoZGF5XCIsXG4gKiAgIGhvbGlkYXk6IGZhbHNlLFxuICogICB0eXBlOiAnZXZlbnQnLFxuICogfSk7IC8vIGV4cGVjdGVkIHZhbHVlIHRydWVcbiAqXG4gKi9cbmNvbnN0IGlzVmFsaWRQbGFuID0gcGxhbiA9PiB7XG4gIGlmICghdXRpbHMuaXNPYmplY3QocGxhbikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoJ2RhdGUnIGluIHBsYW4pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghKCd0aXRsZScgaW4gcGxhbikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBwbGFuKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoISgnaG9saWRheScgaW4gcGxhbikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoJ3R5cGUnIGluIHBsYW4pKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyhwbGFuLmRhdGUpKSByZXR1cm4gZmFsc2U7XG4gIGlmICghdXRpbHMuaXNTdHJpbmcocGxhbi50aXRsZSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCF1dGlscy5pc1N0cmluZyhwbGFuLmRlc2NyaXB0aW9uKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHBsYW4udHlwZSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCF1dGlscy5pc0Jvb2xlYW4ocGxhbi5ob2xpZGF5KSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICghcmVnZXhEYXRlLnRlc3QocGxhbi5kYXRlKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoTnVtYmVyLmlzTmFOKERhdGUucGFyc2UocGxhbi5kYXRlKSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKERhdGUucGFyc2UocGxhbi5kYXRlKSA8PSAwKSByZXR1cm4gZmFsc2U7XG4gIGlmICghdHlwZXMuaW5jbHVkZXMocGxhbi50eXBlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChwbGFuLnRpdGxlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGxhbi5kZXNjcmlwdGlvbi5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyDilIHilIFcdE1PRFVMRVx04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4vKipcbiAqIFRoZSBgaXNWYWxpZFdlZWtlbmQoKWAgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuIERldGVybWluZXMgd2hldGhlciB0aGVcbiAqIHBhc3NlZCB2YWx1ZSBpcyBhbiB2YWxpZCB3ZWVrZW5kIHZhbHVlIGZvciB0aGUgYGdldFdlZWtlbmRzKClgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7bnVtYmVyfHN0cmluZ30gd2Vla2VuZCAtIFRoZSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gdmFsaWQgd2Vla2VuZCBvcHRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAqIEBleGFtcGxlIGNvbnN0IGlzVmFsaWQgPSBpc1ZhbGlkV2Vla2VuZCgxKTsgLy8gZXhwZWN0ZWQgdmFsdWUgdHJ1ZVxuICpcbiAqL1xuY29uc3QgaXNWYWxpZFdlZWtlbmQgPSB3ZWVrZW5kID0+IHtcbiAgY29uc3QgaXNCeU51bWJlciA9IHV0aWxzLmlzSW50TnVtYmVyKHdlZWtlbmQpICYmIHdlZWtlbmQgPj0gMCAmJiB3ZWVrZW5kIDw9IDE1O1xuICBjb25zdCBpc0J5UGF0dGVybiA9IHJlZ2V4V2Vla2VuZC50ZXN0KHdlZWtlbmQpO1xuICByZXR1cm4gaXNCeU51bWJlciB8fCBpc0J5UGF0dGVybjtcbn07XG5cbi8qKlxuICogVGhlIGBpc1ZhbGlkRGF0ZWJvb2soKWAgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuIERldGVybWluZXMgaWYgYWxsXG4gKiB0aGUgdmFsdWVzIG9mIGEgcGFzc2VkIGFycmF5IGFyZSB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gICAgIHtBcnJheS48b2JqZWN0Pn0gcGxhbnMgLSBBbiBvYmplY3QgYXJyYXkuXG4gKiBAcmV0dXJucyAgIHtib29sZWFufSBgdHJ1ZWAgaWYgYWxsIGFycmF5IGVsZW1lbnRzIGlzIGFuIHZhbGlkIG9iamVjdCBzY2hlbWE7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAqIEBwcml2YXRlXG4gKiBAZXhhbXBsZSBjb25zdCBpc1ZhbGlkID0gaXNWYWxpZERhdGVib29rSXRlbXMoaXRlbSk7XG4gKlxuICovXG5jb25zdCBpc1ZhbGlkRGF0ZWJvb2sgPSBwbGFucyA9PiBwbGFucy5tYXAocGxhbiA9PiBpc1ZhbGlkUGxhbihwbGFuKSkuZXZlcnkoaXRlbSA9PiBpdGVtID09PSB0cnVlKTtcblxuLy8g4pSB4pSBXHRFWFBPUlQgTU9EVUxFXHTilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcbmV4cG9ydHMud2Vla2VuZCA9IGlzVmFsaWRXZWVrZW5kO1xuZXhwb3J0cy5kYXRlYm9vayA9IGlzVmFsaWREYXRlYm9vaztcbiIsIi8qKlxuICogQGZpbGUgTWFuYWdlcyByZWFkb25seSBtb2R1bGUsIHVzZWQgdG8gY3JlYXRlIHRoZSByZWFkLW9ubHkgcHJvcGVydGllcyBmb3JcbiAqIHRoZSBjbGFzcyBNb250aC5cbiAqL1xuXG4vLyDilIHilIFcdElNUE9SVCBNT0RVTEVTXHTilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG4vLyDilIHilIFcdENPTlNUQU5UU1x04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4vKipcbiAqIEEgTWFwIG9iamVjdCB0aGF0IHN0b3JlcyB0aGUgdmFsaWQgcGF0dGVybnMgZm9yIHRoZSBgZ2V0UGF0dGVybigpYCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge01hcDxudW1iZXIsIHN0cmluZz59XG4gKi9cbmNvbnN0IG1hcFdlZWtlbmQgPSBuZXcgTWFwKFtcbiAgWzAsICcwMDAwMDExJ10sIC8vICAwMCBTYXR1cmRheSwgU3VuZGF5XG4gIFsxLCAnMTAwMDAwMSddLCAvLyAgMDEgU3VuZGF5LCBNb25kYXlcbiAgWzIsICcxMTAwMDAwJ10sIC8vICAwMiBNb25kYXksIFR1ZXNkYXlcbiAgWzMsICcwMTEwMDAwJ10sIC8vICAwMyBUdWVzZGF5LCBXZWRuZXNkYXlcbiAgWzQsICcwMDExMDAwJ10sIC8vICAwNCBXZWRuZXNkYXksIFRodXJzZGF5XG4gIFs1LCAnMDAwMTEwMCddLCAvLyAgMDUgVGh1cnNkYXksIEZyaWRheVxuICBbNiwgJzAwMDAxMTAnXSwgLy8gIDA2IEZyaWRheSwgU2F0dXJkYXlcbiAgWzcsICcwMDAwMDAxJ10sIC8vICAwNyBTdW5kYXlcbiAgWzgsICcxMDAwMDAwJ10sIC8vICAwOCBNb25kYXlcbiAgWzksICcwMTAwMDAwJ10sIC8vICAwOSBUdWVzZGF5XG4gIFsxMCwgJzAwMTAwMDAnXSwgLy8gMTAgV2VkbmVzZGF5XG4gIFsxMSwgJzAwMDEwMDAnXSwgLy8gMTEgVGh1cnNkYXlcbiAgWzEyLCAnMDAwMDEwMCddLCAvLyAxMiBGcmlkYXlcbiAgWzEzLCAnMDAwMDAxMCddLCAvLyAxMyBTYXR1cmRheVxuICBbMTQsICcwMDAwMDAxJ10sIC8vIDE0IFN1bmRheVxuICBbMTUsICcwMDAwMDAwJ10sIC8vIDE1IE5vbmVcbl0pO1xuXG4vKipcbiAqIEFycmF5IHdpdGggbnVtZXJpYyBlbGVtZW50cy4gVGhlIG51bWJlcnMgcmVwcmVzZW50cyB0aGUgZGF5cyBvZiB0aGUgd2VlayxcbiAqIHdoZXJlIDAgcmVwcmVzZW50cyBTdW5kYXksIGxpa2UgYERhdGUucHJvdG90eXBlLmdldERheSgpYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICovXG5jb25zdCB3ZWVrZGF5cyA9IFsxLCAyLCAzLCA0LCA1LCA2LCAwXTtcblxuLy8g4pSB4pSBXHRGVU5DVElPTlNcdOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuLyoqXG4gKiBUaGUgYGdldFBhdHRlcm4oKWAgZnVuY3Rpb24gcmV0dXJucyBhIGBzdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZGF5cyB0aGF0IGFyZVxuICogd2Vla2VuZHMuIFRoZSBzdHJpbmcgY29udGFpbnMgb25seSAwIG9yIDEgYW5kIGxlbmd0aCA3IHdoZXJlIDAgYXJlIHRoZVxuICogd29ya2RheXMgYW5kIDEgdGhlIHdlZWtlbmRzLlxuICpcbiAqIGB2YWx1ZWAgbXVzdCBiZSBhIGBzdHJpbmdgIG9yIGludGVnZXIgYG51bWJlcmAgYmV0d2VlbiAwIHRvIDE1LiBJZiBhIGBzdHJpbmdgXG4gKiBpcyBwYXNzZWQsIHRoZSBzdHJpbmcgbXVzdCBtYXRjaCB0byByZWdleCBgL15bMC0xXXs3fSQvYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7bnVtYmVyfHN0cmluZ30gdmFsdWUgLSBBIHZhbGlkIHdlZWtlbmQgb3B0aW9uLlxuICogQHJldHVybnMgICB7c3RyaW5nfSBBIGBzdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cbiAqIEBleGFtcGxlIGNvbnN0IHBhdHRlcm4gPSBnZXRQYXR0ZXJuKDEpOyAvLyBleHBlY3RlZCB2YWx1ZSAnMTAwMDAwMSdcbiAqXG4gKiBAZXhhbXBsZSBjb25zdCBwYXR0ZXJuID0gZ2V0UGF0dGVybigyKTsgLy8gZXhwZWN0ZWQgdmFsdWUgJzEyMDAwMDAnXG4gKiBjb25zdCBQQVRURVJOXzAyID0gZ2V0UGF0dGVybigyKTsgLy8gZXhwZWN0ZWQgdmFsdWUgJzExMDAwMDAnXG4gKiBjb25zdCBQQVRURVJOXzAzID0gZ2V0UGF0dGVybigwKTsgLy8gZXhwZWN0ZWQgdmFsdWUgJzAwMDAwMDAnXG4gKlxuICovXG5jb25zdCBnZXRQYXR0ZXJuID0gdmFsdWUgPT4ge1xuICBjb25zdCBpc0J5TnVtYmVyID0gdXRpbHMuaXNJbnROdW1iZXIodmFsdWUpICYmIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTQ7XG4gIGlmIChpc0J5TnVtYmVyKSByZXR1cm4gbWFwV2Vla2VuZC5nZXQodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyDilIHilIFcdE1PRFVMRVx04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4vKipcbiAqIFRoZSBgY3JlYXRlWVlNTUREKClgIGZ1bmN0aW9uIHJldHVybnMgZnJvbSBhbiBpbnN0YW5jZSBvZiBgRGF0ZWAgYSBudW1iZXJcbiAqIGFycmF5IHdpdGggdGhyZWUgZWxlbWVudHMuIFRoZSBhcnJheSBlbGVtZW50cyByZXByZXNlbnQgdGhlIHllYXIgbnVtYmVyLFxuICogbW9udGggbnVtYmVyIGFuZCBkYXkgbnVtYmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7RGF0ZX0gZGF0ZSAtIEFuIGluc3RhbmNlIGBEYXRlYC5cbiAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gQSBudW1iZXIgYGFycmF5YCB3aXRoIHRocmVlIGVsZW1lbnRzLlxuICogQGV4YW1wbGUgY29uc3QgWVlNTUREID0gY3JlYXRlWVlNTUREKG5ldyBEYXRlKDIwMjAsIDEsIDEyKSk7XG4gKiBjb25zdCBbWUVBUiwgTU9OVEgsIERBWV0gPSBZWU1NREQ7IC8vIGV4cGVjdGVkIHZhbHVlIFsyMDIwLCAxLCAxMl1cbiAqXG4gKi9cbmNvbnN0IGNyZWF0ZVlZTU1ERCA9IGRhdGUgPT4gW2RhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKV07XG5cbi8qKlxuICogVGhlIGBjcmVhdGVXZWVrZW5kcygpYCBmdW5jdGlvbiByZXR1cm5zIGEgbnVtYmVyIGBhcnJheWAuIFRoZSBhcnJheSBlbGVtZW50c1xuICogcmVwcmVzZW50IGRheXMgb2YgdGhlIHdlZWsgdGhhdCBhcmUgbm90IHdvcmtpbmcgZGF5cyBhbmQgdGFrZXMgYXMgd2Vla2VuZC5cbiAqIFdoZXJlIDAgcmVwcmVzZW50cyBTdW5kYXkgYW5kIDEgbW9uZGF5LCBsaWtlIGFzIGBEYXRlLnByb3RvdHlwZS5nZXREYXkoKWAuXG4gKlxuICogVGhlIGBvcHRpb25gIHBhcmFtZXRlciBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTUgb3IgYVxuICogYHN0cmluZ2AgdGhhdCBtYXRjaCB0aGUgcmVnZXggYC9eWzAtMV17N30kL2AgKGUuZy4gJzAwMDAwMDEnKS4gVGhlIGZpcnN0XG4gKiBkaWdpdCBpbiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgTW9uZGF5IGFuZCB0aGUgbGFzdCBkaWdpdCByZXByZXNlbnRzIFN1bmRheS5cbiAqIFRoZSB6ZXJvcyByZXByZXNlbnQgdGhlIHdvcmtpbmcgZGF5cyBhbmQgdGhlIG9uZXMgcmVwcmVzZW50IHRoZSBub24td29ya2luZ1xuICogZGF5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge251bWJlcnxzdHJpbmd9IG9wdGlvbiAtIEEgdmFsaWQgd2Vla2VuZCBvcHRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IEEgbnVtYmVyIGFycmF5LlxuICogQGV4YW1wbGUgY29uc3Qgd2Vla2VuZCA9IGNyZWF0ZVdlZWtlbmQoMSk7IC8vIGV4cGVjdGVkIHZhbHVlIFswLCA2XVxuICpcbiAqL1xuY29uc3QgY3JlYXRlV2Vla2VuZCA9IG9wdGlvbiA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wdGlvbik7XG4gIGNvbnN0IGNoYXJzID0gcGF0dGVybi5zcGxpdCgnJyk7XG4gIHJldHVybiB3ZWVrZGF5cy5yZWR1Y2UoKGFjYywgY3VyciwgaWR4KSA9PiAoY2hhcnNbaWR4XSA9PT0gJzEnID8gWy4uLmFjYywgY3Vycl0gOiBhY2MpLCBbXSk7XG59O1xuXG4vKipcbiAqIFRoZSBgY3JlYXRlU0NFKClgIGZ1bmN0aW9uIHJldHVybnMgYSBudW1iZXIgYGFycmF5YCB3aXRoIHRocmVlIGVsZW1lbnRzIGZyb21cbiAqIGFub3RoZXIgbnVtYmVyIGBhcnJheWAuIFRoZSBhcnJheSBlbGVtZW50cyByZXByZXNlbnQgb25lIGRheSBvZiB0aGUgbW9udGgsXG4gKiB0aGUgZGF5IG1vbnRoIHN0YXJ0LCB0aGUgZGF5IG1vbnRoIGN1cnJlbnQgYW5kIHRoZSBkYXkgbW9udGggZW5kLCBpdHMgdmFsdWVcbiAqIGlzIGxpa2UgYERhdGUucHJvdG90eXBlLmdldERhdGUoKWAuXG4gKlxuICogVGhlIGBZWU1NRERgIHBhcmFtIG11c3QgYmUgYSBudW1iZXIgYGFycmF5YCB3aXRoIHRocmVlIGVsZW1lbnRzLiBUaGUgYXJyYXlcbiAqIGVsZW1lbnRzIHJlcHJlc2VudCB0aGUgeWVhciBudW1iZXIsIG1vbnRoIG51bWJlciBhbmQgZGF5IG51bWJlciBgW1lZLCBNTSwgRERdYC5cbiAqXG4gKiBAcGFyYW0gICAgIHtBcnJheS48bnVtYmVyPn0gWVlNTUREIC0gQSBudW1iZXIgYXJyYXkgd2l0aCB0aHJlZSBlbGVtZW50cy5cbiAqIEByZXR1cm5zICAge0FycmF5LjxudW1iZXI+fSBBIG51bWJlciBhcnJheSB3aXRoIHRocmVlIGVsZW1lbnRzLlxuICogQHByaXZhdGVcbiAqIEBleGFtcGxlIGNvbnN0IFNDRSA9IGNyZWF0ZVNDRShbMjAyMSwgMCwgMTVdKTsgLy8gZXhwZWN0ZWQgdmFsdWUgWzEsIDE1LCAzMV1cbiAqXG4gKi9cbmNvbnN0IGNyZWF0ZVNDRSA9IFlZTU1ERCA9PiB7XG4gIGNvbnN0IFtZWSwgTU0sIEREXSA9IFlZTU1ERDtcbiAgcmV0dXJuIFsxLCBERCwgbmV3IERhdGUoWVksIE1NICsgMSwgMCkuZ2V0RGF0ZSgpXTtcbn07XG5cbi8vIOKUgeKUgVx0RVhQT1JUIE1PRFVMRVx04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5leHBvcnRzLmNyZWF0ZVlZTU1ERCA9IGNyZWF0ZVlZTU1ERDtcbmV4cG9ydHMuY3JlYXRlV2Vla2VuZCA9IGNyZWF0ZVdlZWtlbmQ7XG5leHBvcnRzLmNyZWF0ZVNDRSA9IGNyZWF0ZVNDRTtcbiIsIi8qKlxuICogQGZpbGUgTWFuYWdlcyB1dGlscyBtb2R1bGUsIHVzZWQgdG8gY2hlY2sgdGhlIHR5cGVzIG9mIHZhbHVlcyBnaXZlbi5cbiAqL1xuXG4vLyDilIHilIFcdENPTlNUQU5UU1x04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4vKipcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCByZWdleCA9IC9cXHMoW2EtenxBLVpdKykvO1xuXG4vLyDilIHilIFcdEZVTkNUSU9OU1x04pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4vKipcbiAqIFRoZSBgdG9TdHJpbmcoKWAgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QuXG4gKiBAZXhhbXBsZSBjb25zdCB0b3N0cmluZyA9IHRvU3RyaW5nKHRydWUpOyAvLyBbb2JqZWN0IEJvb2xlYW5dO1xuICpcbiAqL1xuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiAoe30udG9TdHJpbmcuY2FsbCh2YWx1ZSkpO1xuXG4vKipcbiAqIFRoZSBgdG9UeXBlKClgIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgdGhlIHVuZXZhbHVhdGVkXG4gKiBvcGVyYW5kLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB0eXBlIG9mIHRoZSB1b