!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("MyTimetable",[],e):"object"==typeof exports?exports.MyTimetable=e():n.MyTimetable=e()}(self,(()=>(()=>{"use strict";var n={424:(n,e,t)=>{t.d(e,{Z:()=>a});var o=t(537),r=t.n(o),i=t(645),s=t.n(i)()(r());s.push([n.id,":root {\n --main-border-color: #dadce0;\n --main-font-color: #444950;\n --main-bg-color: #ffffff;\n}\n\n.planner {\n display: flex;\n background-color: black;\n height: 720px;\n}\n.todolist {\n width: 70%;\n height: 100%;\n background-color: red;\n}\n.timetable {\n width: 100%;\n height: 100%;\n background-color: var(--main-bg-color);\n display: flex;\n font-family: sans-serif;\n color: var(--main-font-color);\n border: 1px solid var(--main-border-color);\n}\n.hours.hour-header {\n width: 15%;\n display: flex;\n flex-direction: column;\n text-align: center;\n}\n.hours.hour-header .hour {\n border-bottom: 1px solid var(--main-border-color);\n flex-grow: 1;\n height: 100%;\n padding: 5px 0;\n}\n.hours.hour-header .hour:last-child {\n border-bottom: none;\n}\n.contents {\n position: relative;\n width: 100%;\n}\n.contents .minutes {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n}\n.contents .minutes .minute {\n flex-grow: 1;\n border-left: 1px solid var(--main-border-color);\n}\n.contents .hours {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n}\n.contents .hours .hour {\n flex-grow: 1;\n border-bottom: 1px solid var(--main-border-color);\n position: relative;\n}\n.contents .hours .hour:last-child {\n border-bottom: none;\n}\n\n.contents .hours .hour .timeline {\n position: absolute;\n height: 100%;\n top: 0;\n}\n","",{version:3,sources:["webpack://./src/index.css"],names:[],mappings:"AAAA;EACE,4BAA4B;EAC5B,0BAA0B;EAC1B,wBAAwB;AAC1B;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,aAAa;AACf;AACA;EACE,UAAU;EACV,YAAY;EACZ,qBAAqB;AACvB;AACA;EACE,WAAW;EACX,YAAY;EACZ,sCAAsC;EACtC,aAAa;EACb,uBAAuB;EACvB,6BAA6B;EAC7B,0CAA0C;AAC5C;AACA;EACE,UAAU;EACV,aAAa;EACb,sBAAsB;EACtB,kBAAkB;AACpB;AACA;EACE,iDAAiD;EACjD,YAAY;EACZ,YAAY;EACZ,cAAc;AAChB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,kBAAkB;EAClB,WAAW;AACb;AACA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,aAAa;AACf;AACA;EACE,YAAY;EACZ,+CAA+C;AACjD;AACA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,aAAa;EACb,sBAAsB;AACxB;AACA;EACE,YAAY;EACZ,iDAAiD;EACjD,kBAAkB;AACpB;AACA;EACE,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,YAAY;EACZ,MAAM;AACR",sourcesContent:[":root {\n --main-border-color: #dadce0;\n --main-font-color: #444950;\n --main-bg-color: #ffffff;\n}\n\n.planner {\n display: flex;\n background-color: black;\n height: 720px;\n}\n.todolist {\n width: 70%;\n height: 100%;\n background-color: red;\n}\n.timetable {\n width: 100%;\n height: 100%;\n background-color: var(--main-bg-color);\n display: flex;\n font-family: sans-serif;\n color: var(--main-font-color);\n border: 1px solid var(--main-border-color);\n}\n.hours.hour-header {\n width: 15%;\n display: flex;\n flex-direction: column;\n text-align: center;\n}\n.hours.hour-header .hour {\n border-bottom: 1px solid var(--main-border-color);\n flex-grow: 1;\n height: 100%;\n padding: 5px 0;\n}\n.hours.hour-header .hour:last-child {\n border-bottom: none;\n}\n.contents {\n position: relative;\n width: 100%;\n}\n.contents .minutes {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n}\n.contents .minutes .minute {\n flex-grow: 1;\n border-left: 1px solid var(--main-border-color);\n}\n.contents .hours {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n}\n.contents .hours .hour {\n flex-grow: 1;\n border-bottom: 1px solid var(--main-border-color);\n position: relative;\n}\n.contents .hours .hour:last-child {\n border-bottom: none;\n}\n\n.contents .hours .hour .timeline {\n position: absolute;\n height: 100%;\n top: 0;\n}\n"],sourceRoot:""}]);const a=s},645:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",o=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),o&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),o&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,o,r,i){"string"==typeof n&&(n=[[null,n,void 0]]);var s={};if(o)for(var a=0;a0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=i),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),r&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=r):d[4]="".concat(r)),e.push(d))}},e}},537:n=>{n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),i="/*# ".concat(r," */"),s=t.sources.map((function(n){return"/*# sourceURL=".concat(t.sourceRoot||"").concat(n," */")}));return[e].concat(s).concat([i]).join("\n")}return[e].join("\n")}},548:(n,e,t)=>{t.r(e),t.d(e,{default:()=>v});var o=t(379),r=t.n(o),i=t(795),s=t.n(i),a=t(569),l=t.n(a),c=t(565),d=t.n(c),A=t(216),u=t.n(A),m=t(589),h=t.n(m),p=t(424),f={};f.styleTagTransform=h(),f.setAttributes=d(),f.insert=l().bind(null,"head"),f.domAPI=s(),f.insertStyleElement=u(),r()(p.Z,f);const v=p.Z&&p.Z.locals?p.Z.locals:void 0},379:n=>{var e=[];function t(n){for(var t=-1,o=0;o{var e={};n.exports=function(n,t){var o=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}},216:n=>{n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},565:(n,e,t)=>{n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},795:n=>{n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var o="";t.supports&&(o+="@supports (".concat(t.supports,") {")),t.media&&(o+="@media ".concat(t.media," {"));var r=void 0!==t.layer;r&&(o+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),o+=t.css,r&&(o+="}"),t.media&&(o+="}"),t.supports&&(o+="}");var i=t.sourceMap;i&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(o,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},589:n=>{n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},427:(n,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Timeline=void 0,e.Timeline=class{constructor(n){this.id=n.id,this.color=n.color,this.startAt=new Date(n.startAt),this.endAt=new Date(n.endAt),this.meta=n.meta}}},748:(n,e,t)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Timetable=void 0;const o=t(301),r=t(427);e.Timetable=class{constructor(n,e,t){var o;this.rootElement=n,this.hourElements=[],this.timelines=(null!=e?e:[]).map((n=>new r.Timeline(n))),this.options={startHour:null!==(o=null==t?void 0:t.startHour)&&void 0!==o?o:0},this.init()}init(){var n;this.rootElement.innerHTML=(0,o.TIMETABLE_INNERHTML)(null!==(n=this.options.startHour)&&void 0!==n?n:0);const e=this.rootElement.querySelectorAll(".contents .hours div.hour");this.hourElements=[].slice.call(e),this.timelines.forEach((n=>this.draw(n)))}draw(n){var e;const t=n.startAt.getHours(),r=n.endAt.getHours();for(let i=t;i<=r;i+=1){const s=t===i?n.startAt.getMinutes():0,a=r===i?n.endAt.getMinutes():60;if(s===a)break;const l=s/60*100,c=(a-s)/60*100,d=document.createElement("div");d.innerHTML=(0,o.TIMELINE_INNERHTML)(n,`${l}%`,`${c}%`),null===(e=this.hourElements[i-this.options.startHour])||void 0===e||e.append(d)}}getTimelines(){return this.timelines}getTimeline(n){return this.timelines.find((e=>e.id===n))}addTimelines(n){n.forEach((n=>this.addTimeline(n)))}addTimeline(n){this.removeTimeline(n.id);const e=new r.Timeline(n);this.timelines.push(e),this.timelines.sort(((n,e)=>n.id-e.id)),this.draw(e)}removeTimelines(n){n.forEach((n=>this.removeTimeline(n)))}removeTimeline(n){const e=this.timelines.findIndex((e=>e.id===n));-1!==e&&(this.timelines.splice(e,1),this.rootElement.querySelectorAll(`.timeline[data-timeline-id="${n}"]`).forEach((n=>{var e;null===(e=n.parentElement)||void 0===e||e.remove()})))}}},301:(n,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.TIMELINE_INNERHTML=e.TIMETABLE_INNERHTML=void 0,e.TIMETABLE_INNERHTML=(n=0)=>{const e=n%24,t=[];for(let n=0;n<24;n+=1)t.push((e+n)%24);return'
'+t.map((n=>`
${n}
`)).join("")+'
\n
\n
\n
\n
\n
\n
\n
\n
'+t.map((n=>`
`)).join("")+"
"},e.TIMELINE_INNERHTML=(n,e,t)=>`
`}},e={};function t(o){var r=e[o];if(void 0!==r)return r.exports;var i=e[o]={id:o,exports:{}};return n[o](i,i.exports,t),i.exports}t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var o in e)t.o(e,o)&&!t.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:e[o]})},t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),t.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})};var o={};return(()=>{var n=o;const e=t(748);t(548),n.default=e.Timetable})(),o.default})())); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCbkksSUFBakJvSSxFQUNILE9BQU9BLEVBQWE3SixRQUdyQixJQUFJQyxFQUFTeUosRUFBeUJFLEdBQVksQ0FDakRySixHQUFJcUosRUFFSjVKLFFBQVMsSUFPVixPQUhBOEosRUFBb0JGLEdBQVUzSixFQUFRQSxFQUFPRCxRQUFTMkosR0FHL0MxSixFQUFPRCxRQ3BCZjJKLEVBQW9CSSxFQUFLOUosSUFDeEIsSUFBSStKLEVBQVMvSixHQUFVQSxFQUFPZ0ssV0FDN0IsSUFBT2hLLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMEosRUFBb0JPLEVBQUVGLEVBQVEsQ0FBRWhCLEVBQUdnQixJQUM1QkEsR0NMUkwsRUFBb0JPLEVBQUksQ0FBQ2xLLEVBQVNtSyxLQUNqQyxJQUFJLElBQUlDLEtBQU9ELEVBQ1hSLEVBQW9CVSxFQUFFRixFQUFZQyxLQUFTVCxFQUFvQlUsRUFBRXJLLEVBQVNvSyxJQUM1RUUsT0FBT0MsZUFBZXZLLEVBQVNvSyxFQUFLLENBQUVJLFlBQVksRUFBTUMsSUFBS04sRUFBV0MsTUNKM0VULEVBQW9CVSxFQUFJLENBQUMzRyxFQUFLZ0gsSUFBVUosT0FBT0ssVUFBVUMsZUFBZXBELEtBQUs5RCxFQUFLZ0gsR0NDbEZmLEVBQW9Ca0IsRUFBSzdLLElBQ0gsb0JBQVg4SyxRQUEwQkEsT0FBT0MsYUFDMUNULE9BQU9DLGVBQWV2SyxFQUFTOEssT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEVixPQUFPQyxlQUFldkssRUFBUyxhQUFjLENBQUVnTCxPQUFPLEssNkJDTHZELGVBQ0EsT0FFQSxVQUFlLEVBQUFDLFciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vTXlUaW1ldGFibGUvLi9zcmMvaW5kZXguY3NzIiwid2VicGFjazovL015VGltZXRhYmxlLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL015VGltZXRhYmxlLy4vc3JjL2luZGV4LmNzcz9jZmU0Iiwid2VicGFjazovL015VGltZXRhYmxlLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL015VGltZXRhYmxlLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL015VGltZXRhYmxlLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vTXlUaW1ldGFibGUvLi9zcmMvVGltZWxpbmUudHMiLCJ3ZWJwYWNrOi8vTXlUaW1ldGFibGUvLi9zcmMvVGltZXRhYmxlLnRzIiwid2VicGFjazovL015VGltZXRhYmxlLy4vc3JjL3RlbXBsYXRlcy50cyIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vTXlUaW1ldGFibGUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9NeVRpbWV0YWJsZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL015VGltZXRhYmxlLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiTXlUaW1ldGFibGVcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiTXlUaW1ldGFibGVcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiTXlUaW1ldGFibGVcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdCB7XFxuICAtLW1haW4tYm9yZGVyLWNvbG9yOiAjZGFkY2UwO1xcbiAgLS1tYWluLWZvbnQtY29sb3I6ICM0NDQ5NTA7XFxuICAtLW1haW4tYmctY29sb3I6ICNmZmZmZmY7XFxufVxcblxcbi5wbGFubmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcXG4gIGhlaWdodDogNzIwcHg7XFxufVxcbi50b2RvbGlzdCB7XFxuICB3aWR0aDogNzAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xcbn1cXG4udGltZXRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWFpbi1iZy1jb2xvcik7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxuICBjb2xvcjogdmFyKC0tbWFpbi1mb250LWNvbG9yKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1haW4tYm9yZGVyLWNvbG9yKTtcXG59XFxuLmhvdXJzLmhvdXItaGVhZGVyIHtcXG4gIHdpZHRoOiAxNSU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmhvdXJzLmhvdXItaGVhZGVyIC5ob3VyIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tYWluLWJvcmRlci1jb2xvcik7XFxuICBmbGV4LWdyb3c6IDE7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwYWRkaW5nOiA1cHggMDtcXG59XFxuLmhvdXJzLmhvdXItaGVhZGVyIC5ob3VyOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuLmNvbnRlbnRzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4uY29udGVudHMgLm1pbnV0ZXMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmNvbnRlbnRzIC5taW51dGVzIC5taW51dGUge1xcbiAgZmxleC1ncm93OiAxO1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tYWluLWJvcmRlci1jb2xvcik7XFxufVxcbi5jb250ZW50cyAuaG91cnMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5jb250ZW50cyAuaG91cnMgLmhvdXIge1xcbiAgZmxleC1ncm93OiAxO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1haW4tYm9yZGVyLWNvbG9yKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbnRlbnRzIC5ob3VycyAuaG91cjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcblxcbi5jb250ZW50cyAuaG91cnMgLmhvdXIgLnRpbWVsaW5lIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHRvcDogMDtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2luZGV4LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLDRCQUE0QjtFQUM1QiwwQkFBMEI7RUFDMUIsd0JBQXdCO0FBQzFCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHVCQUF1QjtFQUN2QixhQUFhO0FBQ2Y7QUFDQTtFQUNFLFVBQVU7RUFDVixZQUFZO0VBQ1oscUJBQXFCO0FBQ3ZCO0FBQ0E7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLHNDQUFzQztFQUN0QyxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLDZCQUE2QjtFQUM3QiwwQ0FBMEM7QUFDNUM7QUFDQTtFQUNFLFVBQVU7RUFDVixhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsaURBQWlEO0VBQ2pELFlBQVk7RUFDWixZQUFZO0VBQ1osY0FBYztBQUNoQjtBQUNBO0VBQ0UsbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxrQkFBa0I7RUFDbEIsV0FBVztBQUNiO0FBQ0E7RUFDRSxrQkFBa0I7RUFDbEIsTUFBTTtFQUNOLE9BQU87RUFDUCxRQUFRO0VBQ1IsU0FBUztFQUNULGFBQWE7QUFDZjtBQUNBO0VBQ0UsWUFBWTtFQUNaLCtDQUErQztBQUNqRDtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLE1BQU07RUFDTixPQUFPO0VBQ1AsUUFBUTtFQUNSLFNBQVM7RUFDVCxhQUFhO0VBQ2Isc0JBQXNCO0FBQ3hCO0FBQ0E7RUFDRSxZQUFZO0VBQ1osaURBQWlEO0VBQ2pELGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixNQUFNO0FBQ1JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcbiAgLS1tYWluLWJvcmRlci1jb2xvcjogI2RhZGNlMDtcXG4gIC0tbWFpbi1mb250LWNvbG9yOiAjNDQ0OTUwO1xcbiAgLS1tYWluLWJnLWNvbG9yOiAjZmZmZmZmO1xcbn1cXG5cXG4ucGxhbm5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XFxuICBoZWlnaHQ6IDcyMHB4O1xcbn1cXG4udG9kb2xpc3Qge1xcbiAgd2lkdGg6IDcwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXG59XFxuLnRpbWV0YWJsZSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1haW4tYmctY29sb3IpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xcbiAgY29sb3I6IHZhcigtLW1haW4tZm9udC1jb2xvcik7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tYWluLWJvcmRlci1jb2xvcik7XFxufVxcbi5ob3Vycy5ob3VyLWhlYWRlciB7XFxuICB3aWR0aDogMTUlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5ob3Vycy5ob3VyLWhlYWRlciAuaG91ciB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWFpbi1ib3JkZXItY29sb3IpO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5ob3Vycy5ob3VyLWhlYWRlciAuaG91cjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcbi5jb250ZW50cyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmNvbnRlbnRzIC5taW51dGVzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5jb250ZW50cyAubWludXRlcyAubWludXRlIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWFpbi1ib3JkZXItY29sb3IpO1xcbn1cXG4uY29udGVudHMgLmhvdXJzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4uY29udGVudHMgLmhvdXJzIC5ob3VyIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tYWluLWJvcmRlci1jb2xvcik7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jb250ZW50cyAuaG91cnMgLmhvdXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG5cXG4uY29udGVudHMgLmhvdXJzIC5ob3VyIC50aW1lbGluZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB0b3A6IDA7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vaW5kZXguY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9pbmRleC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiaW1wb3J0IHsgSVRpbWVsaW5lIH0gZnJvbSAnLi9JVGltZWxpbmUnXG5cbmV4cG9ydCBjbGFzcyBUaW1lbGluZSB7XG4gIGlkOiBudW1iZXJcbiAgY29sb3I6IHN0cmluZ1xuICBzdGFydEF0OiBEYXRlXG4gIGVuZEF0OiBEYXRlXG4gIG1ldGE/OiBhbnlcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBJVGltZWxpbmUpIHtcbiAgICB0aGlzLmlkID0gZGF0YS5pZFxuICAgIHRoaXMuY29sb3IgPSBkYXRhLmNvbG9yXG4gICAgdGhpcy5zdGFydEF0ID0gbmV3IERhdGUoZGF0YS5zdGFydEF0KVxuICAgIHRoaXMuZW5kQXQgPSBuZXcgRGF0ZShkYXRhLmVuZEF0KVxuICAgIHRoaXMubWV0YSA9IGRhdGEubWV0YVxuICB9XG59XG4iLCJpbXBvcnQgeyBJT3B0aW9ucyB9IGZyb20gJy4vSU9wdGlvbnMnXG5pbXBvcnQgeyBJVGltZWxpbmUgfSBmcm9tICcuL0lUaW1lbGluZSdcbmltcG9ydCB7IFRJTUVUQUJMRV9JTk5FUkhUTUwsIFRJTUVMSU5FX0lOTkVSSFRNTCB9IGZyb20gJy4vdGVtcGxhdGVzJ1xuaW1wb3J0IHsgVGltZWxpbmUgfSBmcm9tICcuL1RpbWVsaW5lJ1xuXG5leHBvcnQgY2xhc3MgVGltZXRhYmxlIHtcbiAgcHJpdmF0ZSByb290RWxlbWVudDogSFRNTEVsZW1lbnRcbiAgcHJpdmF0ZSBob3VyRWxlbWVudHM6IEhUTUxFbGVtZW50W11cbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lbGluZXM6IFRpbWVsaW5lW11cbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiB7XG4gICAgc3RhcnRIb3VyOiBudW1iZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3RFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICB0aW1lbGluZXM/OiBJVGltZWxpbmVbXSxcbiAgICBvcHRpb25zPzogSU9wdGlvbnMsXG4gICkge1xuICAgIHRoaXMucm9vdEVsZW1lbnQgPSByb290RWxlbWVudFxuICAgIHRoaXMuaG91ckVsZW1lbnRzID0gW11cbiAgICB0aGlzLnRpbWVsaW5lcyA9ICh0aW1lbGluZXMgPz8gW10pLm1hcCgoaXRlbSkgPT4gbmV3IFRpbWVsaW5lKGl0ZW0pKVxuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIHN0YXJ0SG91cjogb3B0aW9ucz8uc3RhcnRIb3VyID8/IDAsXG4gICAgfVxuICAgIHRoaXMuaW5pdCgpXG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb290RWxlbWVudC5pbm5lckhUTUwgPSBUSU1FVEFCTEVfSU5ORVJIVE1MKFxuICAgICAgdGhpcy5vcHRpb25zLnN0YXJ0SG91ciA/PyAwLFxuICAgIClcblxuICAgIGNvbnN0IGhvdXJFbGVtZW50cyA9IHRoaXMucm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICcuY29udGVudHMgLmhvdXJzIGRpdi5ob3VyJyxcbiAgICApXG4gICAgdGhpcy5ob3VyRWxlbWVudHMgPSBbXS5zbGljZS5jYWxsKGhvdXJFbGVtZW50cylcblxuICAgIHRoaXMudGltZWxpbmVzLmZvckVhY2goKGl0ZW0pID0+IHRoaXMuZHJhdyhpdGVtKSlcbiAgfVxuXG4gIHByaXZhdGUgZHJhdyh0aW1lbGluZTogVGltZWxpbmUpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydEF0SG91cnMgPSB0aW1lbGluZS5zdGFydEF0LmdldEhvdXJzKClcbiAgICBjb25zdCBlbmRBdEhvdXJzID0gdGltZWxpbmUuZW5kQXQuZ2V0SG91cnMoKVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0QXRIb3VyczsgaSA8PSBlbmRBdEhvdXJzOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0QXRNaW51dGVzID1cbiAgICAgICAgc3RhcnRBdEhvdXJzID09PSBpID8gdGltZWxpbmUuc3RhcnRBdC5nZXRNaW51dGVzKCkgOiAwXG4gICAgICBjb25zdCBlbmRBdE1pbnV0ZXMgPSBlbmRBdEhvdXJzID09PSBpID8gdGltZWxpbmUuZW5kQXQuZ2V0TWludXRlcygpIDogNjBcbiAgICAgIGlmIChzdGFydEF0TWludXRlcyA9PT0gZW5kQXRNaW51dGVzKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnRBdE1pbnV0ZXMgLyA2MCkgKiAxMDBcbiAgICAgIGNvbnN0IHdpZHRoID0gKChlbmRBdE1pbnV0ZXMgLSBzdGFydEF0TWludXRlcykgLyA2MCkgKiAxMDBcblxuICAgICAgY29uc3QgdGltZWxpbmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIHRpbWVsaW5lRWxlbWVudC5pbm5lckhUTUwgPSBUSU1FTElORV9JTk5FUkhUTUwoXG4gICAgICAgIHRpbWVsaW5lLFxuICAgICAgICBgJHtsZWZ0fSVgLFxuICAgICAgICBgJHt3aWR0aH0lYCxcbiAgICAgIClcbiAgICAgIHRoaXMuaG91ckVsZW1lbnRzW2kgLSB0aGlzLm9wdGlvbnMuc3RhcnRIb3VyXT8uYXBwZW5kKHRpbWVsaW5lRWxlbWVudClcbiAgICB9XG4gIH1cblxuICBnZXRUaW1lbGluZXMoKTogVGltZWxpbmVbXSB7XG4gICAgcmV0dXJuIHRoaXMudGltZWxpbmVzXG4gIH1cblxuICBnZXRUaW1lbGluZShpZDogbnVtYmVyKTogVGltZWxpbmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRpbWVsaW5lcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZClcbiAgfVxuXG4gIGFkZFRpbWVsaW5lcyhfdGltZWxpbmVzOiBJVGltZWxpbmVbXSk6IHZvaWQge1xuICAgIF90aW1lbGluZXMuZm9yRWFjaCgodGltZWxpbmUpID0+IHRoaXMuYWRkVGltZWxpbmUodGltZWxpbmUpKVxuICB9XG5cbiAgYWRkVGltZWxpbmUoX3RpbWVsaW5lOiBJVGltZWxpbmUpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVRpbWVsaW5lKF90aW1lbGluZS5pZClcblxuICAgIGNvbnN0IHRpbWVsaW5lID0gbmV3IFRpbWVsaW5lKF90aW1lbGluZSlcbiAgICB0aGlzLnRpbWVsaW5lcy5wdXNoKHRpbWVsaW5lKVxuICAgIHRoaXMudGltZWxpbmVzLnNvcnQoKGEsIGIpID0+IGEuaWQgLSBiLmlkKVxuXG4gICAgdGhpcy5kcmF3KHRpbWVsaW5lKVxuICB9XG5cbiAgcmVtb3ZlVGltZWxpbmVzKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBpZHMuZm9yRWFjaCgoaWQpID0+IHRoaXMucmVtb3ZlVGltZWxpbmUoaWQpKVxuICB9XG5cbiAgcmVtb3ZlVGltZWxpbmUoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMudGltZWxpbmVzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpXG4gICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudGltZWxpbmVzLnNwbGljZShpZHgsIDEpXG4gICAgY29uc3QgdGltZWxpbmVFbGVtZW50cyA9IHRoaXMucm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAudGltZWxpbmVbZGF0YS10aW1lbGluZS1pZD1cIiR7aWR9XCJdYCxcbiAgICApXG4gICAgdGltZWxpbmVFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQ/LnJlbW92ZSgpXG4gICAgfSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgVGltZWxpbmUgfSBmcm9tICcuL1RpbWVsaW5lJ1xuXG5leHBvcnQgY29uc3QgVElNRVRBQkxFX0lOTkVSSFRNTCA9IChfc3RhcnRIb3VyOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc3RhcnRIb3VyID0gX3N0YXJ0SG91ciAlIDI0XG4gIGNvbnN0IGhvdXJSYW5nZSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjQ7IGkgKz0gMSkge1xuICAgIGhvdXJSYW5nZS5wdXNoKChzdGFydEhvdXIgKyBpKSAlIDI0KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICAnPGRpdiBjbGFzcz1cInRpbWV0YWJsZVwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwiaG91cnMgaG91ci1oZWFkZXJcIj4nICtcbiAgICBob3VyUmFuZ2UubWFwKChob3VyKSA9PiBgPGRpdiBjbGFzcz1cImhvdXJcIj4ke2hvdXJ9PC9kaXY+YCkuam9pbignJykgK1xuICAgICc8L2Rpdj4nICtcbiAgICBgPGRpdiBjbGFzcz1cImNvbnRlbnRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWludXRlc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW51dGUgbWludXRlLTBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWludXRlIG1pbnV0ZS0xMFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW51dGUgbWludXRlLTIwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbnV0ZSBtaW51dGUtMzBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWludXRlIG1pbnV0ZS00MFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW51dGUgbWludXRlLTUwXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gICtcbiAgICAnPGRpdiBjbGFzcz1cImhvdXJzXCI+JyArXG4gICAgaG91clJhbmdlXG4gICAgICAubWFwKChob3VyKSA9PiBgPGRpdiBjbGFzcz1cImhvdXJcIiBkYXRhLWhvdXI9XCIke2hvdXJ9XCI+PC9kaXY+YClcbiAgICAgIC5qb2luKCcnKSArXG4gICAgJzwvZGl2PicgK1xuICAgICc8L2Rpdj4nICtcbiAgICAnPC9kaXY+J1xuICApXG59XG5cbmV4cG9ydCBjb25zdCBUSU1FTElORV9JTk5FUkhUTUwgPSAoXG4gIHRpbWVsaW5lOiBUaW1lbGluZSxcbiAgbGVmdDogbnVtYmVyIHwgc3RyaW5nLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxuKTogc3RyaW5nID0+XG4gIGA8ZGl2IGNsYXNzPVwidGltZWxpbmVcIiBzdHlsZT1cImxlZnQ6ICR7bGVmdH07IHdpZHRoOiAke3dpZHRofTsgYmFja2dyb3VuZC1jb2xvcjogJHt0aW1lbGluZS5jb2xvcn07XCIgZGF0YS10aW1lbGluZS1pZD1cIiR7dGltZWxpbmUuaWR9XCI+PC9kaXY+YFxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IFRpbWV0YWJsZSB9IGZyb20gJy4vVGltZXRhYmxlJ1xuaW1wb3J0ICcuL2luZGV4LmNzcydcblxuZXhwb3J0IGRlZmF1bHQgVGltZXRhYmxlXG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fX0NTU19MT0FERVJfRVhQT1JUX19fIiwicHVzaCIsImlkIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2UiLCJzb3VyY2VSb290Iiwib3B0aW9ucyIsInN0eWxlVGFnVHJhbnNmb3JtIiwic2V0QXR0cmlidXRlcyIsImluc2VydCIsImRvbUFQSSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlc0luRE9NIiwiZ2V0SW5kZXhCeUlkZW50aWZpZXIiLCJpZGVudGlmaWVyIiwicmVzdWx0IiwibW9kdWxlc1RvRG9tIiwiaWRDb3VudE1hcCIsImlkZW50aWZpZXJzIiwiYmFzZSIsImNvdW50IiwiaW5kZXhCeUlkZW50aWZpZXIiLCJvYmoiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJzcGxpY2UiLCJhcGkiLCJ1cGRhdGUiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwiaW5kZXgiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaSIsIl9pbmRleCIsIm1lbW8iLCJzdHlsZSIsInRhcmdldCIsInN0eWxlVGFyZ2V0IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwid2luZG93IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiZSIsImdldFRhcmdldCIsIkVycm9yIiwiYXBwZW5kQ2hpbGQiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImFwcGx5IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlU3R5bGVFbGVtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJjb25zdHJ1Y3RvciIsImNvbG9yIiwic3RhcnRBdCIsIkRhdGUiLCJlbmRBdCIsIm1ldGEiLCJyb290RWxlbWVudCIsInRpbWVsaW5lcyIsImhvdXJFbGVtZW50cyIsIlRpbWVsaW5lIiwic3RhcnRIb3VyIiwiaW5pdCIsImlubmVySFRNTCIsIlRJTUVUQUJMRV9JTk5FUkhUTUwiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2xpY2UiLCJjYWxsIiwiZm9yRWFjaCIsImRyYXciLCJ0aW1lbGluZSIsInN0YXJ0QXRIb3VycyIsImdldEhvdXJzIiwiZW5kQXRIb3VycyIsInN0YXJ0QXRNaW51dGVzIiwiZ2V0TWludXRlcyIsImVuZEF0TWludXRlcyIsImxlZnQiLCJ3aWR0aCIsInRpbWVsaW5lRWxlbWVudCIsIlRJTUVMSU5FX0lOTkVSSFRNTCIsImFwcGVuZCIsImdldFRpbWVsaW5lcyIsImdldFRpbWVsaW5lIiwiZmluZCIsImFkZFRpbWVsaW5lcyIsIl90aW1lbGluZXMiLCJhZGRUaW1lbGluZSIsIl90aW1lbGluZSIsInJlbW92ZVRpbWVsaW5lIiwic29ydCIsImEiLCJiIiwicmVtb3ZlVGltZWxpbmVzIiwiaWRzIiwiaWR4IiwiZmluZEluZGV4IiwicGFyZW50RWxlbWVudCIsIl9zdGFydEhvdXIiLCJob3VyUmFuZ2UiLCJob3VyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm4iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZCIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJUaW1ldGFibGUiXSwic291cmNlUm9vdCI6IiJ9