!function(){function t(){if(this.complete){const e=this.getAttribute("data-lazy-src");if(e&&this.src!==e)return void this.addEventListener("onload",t);const n=this.width,d=this.height;n&&n>0&&d&&d>0&&(this.setAttribute("width",n),this.setAttribute("height",d),i(this))}else this.addEventListener("onload",t)}var e=function(){const e=document.querySelectorAll("img[data-recalc-dims]");for(let i=0;i{var e={135:e=>{var t="1.11.3",a=new Function("try { return this===window; }catch(e){ return false; }"),n=a()?new Function("if ((/iPad|iPhone|iPod/.test(navigator.userAgent || navigator.vendor || window.opera) && !window.MSStream) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)){ return true; }else{ return false; }"):new Function("return false;"),i=a()?new Function("if (/Instagram/.test(navigator.userAgent || navigator.vendor || window.opera)){ return true; }else{ return false; }"):new Function("return false;");function l(e){var t={title:"name",dateStart:"startDate",dateEnd:"endDate",timeStart:"startTime",timeEnd:"endTime"};return Object.keys(t).forEach((function(a){null==e[t["".concat(a)]]&&null!=e["".concat(a)]&&(e[t["".concat(a)]]=e["".concat(a)])})),e}function s(e){if(e=function(e){return null!=e.endDate&&""!=e.endDate||null==e.startDate||(e.endDate=e.startDate),["start","end"].forEach((function(t){if(null!=e[t+"Date"]){e[t+"Date"]=e[t+"Date"].replace(/\.\d{3}/,"").replace("Z","");var a=e[t+"Date"].split("T");null!=a[1]&&(e[t+"Date"]=a[0],e[t+"Time"]=a[1])}if(null!=e[t+"Time"]&&8===e[t+"Time"].length){var n=e[t+"Time"];e[t+"Time"]=n.substring(0,n.length-3)}})),e}(e),e.startDate=d(e.startDate),e.endDate=d(e.endDate),"modal"===e.listStyle&&(e.trigger="click"),null!=e.language&&""!=e.language||(e.language="en"),null!=e.recurrence&&""!=e.recurrence&&(e.recurrence=e.recurrence.replace(/\s+/g,"")),!e.description||e.descriptionHtmlFree)return e;var t=Object.assign({},e);return t.description=t.description.replace(//gi,"\n"),t.descriptionHtmlFree=t.description.replace(/\[url\]/gi,"").replace(/(\|.*)\[\/url\]/gi,"").replace(/\[\/url\]/gi,""),t.description=t.description.replace(/\[url\]([\w&$+.,:;=~!*'?@^%#|\s\-()/]*)\[\/url\]/gi,(function(e,t){var a=t.split("|"),n='';return a.length>1&&""!=a[1]?n+=a[1]:n+=a[0],n+""})),t}function r(e){return null==e.options||e.options.length<1?(console.error("add-to-calendar button generation failed: no options set"),!1):["name","startDate"].every((function(t){return null!=e["".concat(t)]&&""!=e["".concat(t)]||(console.error("add-to-calendar button generation failed: required setting missing ["+t+"]"),!1)}))}function d(e){var t=new Date,a=t.getUTCMonth()+1+"-"+t.getUTCDate()+"-"+t.getUTCFullYear(),n=(e=e.replace(/today/gi,a)).split("+"),i=n[0].split("-"),l=new Date(i[0],i[1]-1,i[2]);return i[0].length<4&&(l=new Date(i[2],i[0]-1,i[1])),null!=n[1]&&n[1]>0&&l.setDate(l.getDate()+parseInt(n[1])),l.getFullYear()+"-"+(l.getMonth()+1<10?"0":"")+(l.getMonth()+1)+"-"+(l.getDate()<10?"0":"")+l.getDate()}function o(e){if(null!=e.identifier&&""!=e.identifier&&(/^[\w-]+$/.test(e.identifier)||(e.identifier="",console.error("add-to-calendar button generation: identifier invalid - using auto numbers instead"))),!(null==e.icsFile||""==e.icsFile||L(e.icsFile,!1)&&/\.ics$/.test(e.icsFile)))return console.error("add-to-calendar button generation failed: explicit ics file path not valid"),!1;var t=["Apple","Google","iCal","Microsoft365","Outlook.com","MicrosoftTeams","Yahoo"];if(!e.options.every((function(e){var a=e.split("|");return!!t.includes(a[0])||(console.error("add-to-calendar button generation failed: invalid option ["+a[0]+"]"),!1)})))return!1;var a=["startDate","endDate"],n=a;return!!a.every((function(t){if(10!==e["".concat(t)].length)return console.error("add-to-calendar button generation failed: date misspelled [-> YYYY-MM-DD]"),!1;var a=e["".concat(t)].split("-");return a.length<3||a.length>3?(console.error("add-to-calendar button generation failed: date misspelled ["+t+": "+e["".concat(t)]+"]"),!1):(n["".concat(t)]=new Date(a[0],a[1]-1,a[2]),!0)}))&&!(!["startTime","endTime"].every((function(t){if(null!=e["".concat(t)]){if(5!==e["".concat(t)].length)return console.error("add-to-calendar button generation failed: time misspelled [-> HH:MM]"),!1;var a=e["".concat(t)].split(":");if(a.length<2||a.length>2)return console.error("add-to-calendar button generation failed: time misspelled ["+t+": "+e["".concat(t)]+"]"),!1;if(a[0]>23)return console.error("add-to-calendar button generation failed: time misspelled - hours number too high ["+t+": "+a[0]+"]"),!1;if(a[1]>59)return console.error("add-to-calendar button generation failed: time misspelled - minutes number too high ["+t+": "+a[1]+"]"),!1;"startTime"==t&&(n.startDate=new Date(n.startDate.getTime()+36e5*a[0]+6e4*a[1])),"endTime"==t&&(n.endDate=new Date(n.endDate.getTime()+36e5*a[0]+6e4*a[1]))}return!0}))||(null!=e.startTime&&null==e.endTime||null==e.startTime&&null!=e.endTime?(console.error("add-to-calendar button generation failed: if you set a starting time, you also need to define an end time"),1):n.endDate3&&void 0!==arguments[3]&&arguments[3],l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",s=arguments.length>5&&void 0!==arguments[5]&&arguments[5],r=b("Add to Calendar",e.language);s&&""==l&&(l=r);var d="";switch(a){case"Trigger":default:"click"===e.trigger?t.addEventListener("click",E((function(){return v(e,t,!1,!0)}))):(t.addEventListener("touchstart",E((function(){return v(e,t,!1,!0)})),{passive:!0}),t.addEventListener("mouseenter",E((function(){return u(e,t,!1,!0)})))),t.setAttribute("id",e.identifier),l=l||r,d='';break;case"Apple":t.addEventListener("click",w((function(){s?t.blur():h(),f(e)}))),t.setAttribute("id",e.identifier+"-apple"),l=l||"Apple",d='';break;case"Google":t.addEventListener("click",w((function(){s?t.blur():h(),function(e){var t="https://calendar.google.com/calendar/render?action=TEMPLATE",a=g(e,"clean","google");t+="&dates="+a.start+"%2F"+a.end,null!=e.name&&""!=e.name&&(t+="&text="+encodeURIComponent(e.name));var i="";null!=e.description&&""!=e.description&&(i=e.description),null!=e.location&&""!=e.location&&(t+="&location="+encodeURIComponent(e.location),n()&&(""!=i&&(i+="

"),i+="📍: "+e.location)),""!=i&&(t+="&details="+encodeURIComponent(i)),null!=e.recurrence&&""!=e.recurrence&&(t+="&recur="+encodeURIComponent(e.recurrence)),L(t)&&window.open(t,"_blank").focus()}(e)}))),t.setAttribute("id",e.identifier+"-google"),l=l||"Google",d='';break;case"iCal":t.addEventListener("click",w((function(){s?t.blur():h(),f(e)}))),t.setAttribute("id",e.identifier+"-ical"),l=l||b("iCal File",e.language),d='';break;case"MicrosoftTeams":if(null!=e.recurrence&&""!=e.recurrence)return void t.remove();t.addEventListener("click",w((function(){s?t.blur():h(),function(e){var t="https://teams.microsoft.com/l/meeting/new?",a=g(e,"delimiters","microsoft");t+="&startTime="+a.start+"&endTime="+a.end;var n="";null!=e.name&&""!=e.name&&(t+="&subject="+encodeURIComponent(e.name)),null!=e.location&&""!=e.location&&(t+="&location="+(n=encodeURIComponent(e.location)),n+=" // "),null!=e.descriptionHtmlFree&&""!=e.descriptionHtmlFree&&(t+="&content="+n+encodeURIComponent(e.descriptionHtmlFree)),L(t)&&window.open(t,"_blank").focus()}(e)}))),t.setAttribute("id",e.identifier+"-msteams"),l=l||"Microsoft Teams",d='';break;case"Microsoft365":if(null!=e.recurrence&&""!=e.recurrence)return void t.remove();t.addEventListener("click",w((function(){s?t.blur():h(),_(e,"365")}))),t.setAttribute("id",e.identifier+"-ms365"),l=l||"Microsoft 365",d='';break;case"Outlook.com":if(null!=e.recurrence&&""!=e.recurrence)return void t.remove();t.addEventListener("click",w((function(){s?t.blur():h(),_(e,"outlook")}))),t.setAttribute("id",e.identifier+"-outlook"),l=l||"Outlook.com",d='';break;case"Yahoo":if(null!=e.recurrence&&""!=e.recurrence)return void t.remove();t.addEventListener("click",w((function(){s?t.blur():h(),function(e){var t="https://calendar.yahoo.com/?v=60",a=g(e,"clean");t+="&st="+a.start+"&et="+a.end,a.allday&&(t+="&dur=allday"),null!=e.name&&""!=e.name&&(t+="&title="+encodeURIComponent(e.name)),null!=e.location&&""!=e.location&&(t+="&in_loc="+encodeURIComponent(e.location)),null!=e.descriptionHtmlFree&&""!=e.descriptionHtmlFree&&(t+="&desc="+encodeURIComponent(e.descriptionHtmlFree)),L(t)&&window.open(t,"_blank").focus()}(e)}))),t.setAttribute("id",e.identifier+"-yahoo"),l=l||"Yahoo",d='';break;case"Close":t.addEventListener("click",w((function(){s?t.blur():h()}))),t.addEventListener("focus",w((function(){return h(!1)}))),t.setAttribute("id",e.identifier+"-close"),l=b("Close",e.language),d=''}if(s&&t.setAttribute("id",e.identifier),s||"Trigger"!==a?t.addEventListener("keydown",E((function(e){"Enter"==e.key&&(e.preventDefault(),t.click())}))):t.addEventListener("keydown",E((function(a){"Enter"==a.key&&(a.preventDefault(),v(e,t,!0,!0))}))),i){var o=document.createElement("span");o.classList.add("atcb-icon"),o.innerHTML=d,t.appendChild(o)}var c=document.createElement("span");c.classList.add("atcb-text"),c.textContent=l,t.appendChild(c)}function m(e,t){if(e.textContent="",t.name&&t.location&&t.startDate){var a=document.createElement("script");a.setAttribute("type","application/ld+json"),a.textContent='{ "event": { "@context":"https://schema.org", "@type":"Event", ',a.textContent+='"name":"'+t.name+'", ',t.descriptionHtmlFree&&(a.textContent+='"description":"'+t.descriptionHtmlFree+'", ');var n=g(t,"delimiters","general",!0);a.textContent+='"startDate":"'+n.start+'", ',a.textContent+='"endDate":"'+n.end+'", ',t.location.startsWith("http")?(a.textContent+='"eventAttendanceMode":"https://schema.org/OnlineEventAttendanceMode", ',a.textContent+='"location": { "@type":"VirtualLocation", "url":"'+t.location+'" } '):a.textContent+='"location":"'+t.location+'" ',a.textContent+="} }",e.appendChild(a)}var i=document.createElement("div");i.classList.add("atcb-button-wrapper"),e.appendChild(i);var l=document.createElement("button");if(l.classList.add("atcb-button"),l.setAttribute("type","button"),i.appendChild(l),1===t.options.length){var s=t.options[0].split("|");c(t,l,s[0],!0,t.label,!0)}else{c(t,l,"Trigger",!0,t.label);var r=document.createElement("div");r.classList.add("atcb-dropdown-anchor"),i.appendChild(r)}e.classList.remove("atcb"),e.classList.add("atcb-initialized"),t.inline?e.style.display="inline-block":e.style.display="block",console.log('add-to-calendar button "'+t.identifier+'" created')}function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"dropdown",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=document.createElement("div");n.setAttribute("id","atcb-bgoverlay"),"modal"!==e&&a&&n.classList.add("atcb-animate-bg"),a||n.classList.add("atcb-no-bg"),n.tabIndex=0,n.addEventListener("click",w((function(e){e.target===e.currentTarget&&h(!0)})));var i=!1;return n.addEventListener("touchstart",E((function(){return i=!1})),{passive:!0}),n.addEventListener("touchmove",E((function(){return i=!0})),{passive:!0}),n.addEventListener("touchend",w((function(e){!1===i&&e.target===e.currentTarget&&h(!0)})),{passive:!0}),n.addEventListener("focus",E((function(e){e.target===e.currentTarget&&h()}))),"click"!==t?n.addEventListener("mousemove",E((function(e){e.target===e.currentTarget&&h(!0)}))):n.classList.add("atcb-click"),n}function v(e,t){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];t.classList.contains("atcb-active")||document.querySelector(".atcb-active-modal")?h():u(e,t,a,n)}function u(e,t){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!document.querySelector(".atcb-list")&&!document.querySelector(".atcb-modal")){var i=function(e){var t=document.createElement("div");if(t.classList.add("atcb-list"),e.options.forEach((function(a){var n=a.split("|"),i=document.createElement("div");i.classList.add("atcb-list-item"),i.tabIndex=0,t.appendChild(i),c(e,i,n[0],!0,n[1])})),"modal"===e.listStyle){var a=document.createElement("div");a.classList.add("atcb-list-item","atcb-list-item-close"),a.tabIndex=0,t.appendChild(a),c(e,a,"Close",!0)}return t}(e);t?(t.classList.add("atcb-active"),"modal"===e.listStyle?(t.classList.add("atcb-modal-style"),i.classList.add("atcb-modal")):(y(t,i),i.classList.add("atcb-dropdown"),n&&i.classList.add("atcb-generated-button"))):i.classList.add("atcb-modal");var l=p(e.listStyle,e.trigger,e.background);"modal"===e.listStyle?(document.body.appendChild(l),l.appendChild(i),document.body.classList.add("atcb-modal-no-scroll")):(document.body.appendChild(i),document.body.appendChild(l)),C(l),a?i.firstChild.focus():(i.firstChild.focus(),i.firstChild.blur())}}function h(){if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0])){var e=document.querySelector(".atcb-active, .atcb-active-modal");e&&e.focus()}Array.from(document.querySelectorAll(".atcb-active")).forEach((function(e){e.classList.remove("atcb-active")})),Array.from(document.querySelectorAll(".atcb-active-modal")).forEach((function(e){e.classList.remove("atcb-active-modal")})),document.body.classList.remove("atcb-modal-no-scroll"),Array.from(document.querySelectorAll(".atcb-list")).concat(Array.from(document.querySelectorAll(".atcb-info-modal"))).concat(Array.from(document.querySelectorAll("#atcb-bgoverlay"))).forEach((function(e){return e.remove()}))}function _(e){var t="https://";t+="outlook"==(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"365")?"outlook.live.com":"outlook.office.com",t+="/calendar/0/deeplink/compose?path=%2Fcalendar%2Faction%2Fcompose&rru=addevent";var a=g(e,"delimiters","microsoft");t+="&startdt="+a.start+"&enddt="+a.end,a.allday&&(t+="&allday=true"),null!=e.name&&""!=e.name&&(t+="&subject="+encodeURIComponent(e.name)),null!=e.location&&""!=e.location&&(t+="&location="+encodeURIComponent(e.location)),null!=e.description&&""!=e.description&&(t+="&body="+encodeURIComponent(e.description.replace(/\n/g,"
"))),L(t)&&window.open(t,"_blank").focus()}function f(e){if(null==e.icsFile||""==e.icsFile){var a=new Date;a=a.toISOString();var l=g(e,"clean","ical"),s="";l.allday&&(s=";VALUE=DATE");var r=["BEGIN:VCALENDAR","VERSION:2.0"];r.push("PRODID:-// github.com/jekuer/add-to-calendar-button // atcb v"+t+" //EN"),r.push("CALSCALE:GREGORIAN"),r.push("BEGIN:VEVENT"),r.push("UID:"+a+"@add-to-calendar-button"),r.push("DTSTAMP:"+l.start,"DTSTART"+s+":"+l.start,"DTEND"+s+":"+l.end,"SUMMARY:"+e.name.replace(/.{65}/g,"$&\r\n ")),null!=e.descriptionHtmlFree&&""!=e.descriptionHtmlFree&&r.push("DESCRIPTION:"+e.descriptionHtmlFree.replace(/\n/g,"\\n").replace(/.{60}/g,"$&\r\n ")),null!=e.location&&""!=e.location&&r.push("LOCATION:"+e.location),null!=e.recurrence&&""!=e.recurrence&&r.push(e.recurrence),a=a.replace(/\.\d{3}/g,"").replace(/[^a-z\d]/gi,""),r.push("STATUS:CONFIRMED","LAST-MODIFIED:"+a,"SEQUENCE:0","END:VEVENT","END:VCALENDAR");var d="data:text/calendar;charset=utf-8,"+encodeURIComponent(r.join("\r\n")),o=e.iCalFileName||"event-to-save-in-my-calendar";if(i()){var c=document.createElement("input");document.body.appendChild(c);var m=c.contentEditable,v=c.readOnly;if(c.value=d,c.contentEditable=!0,c.readOnly=!1,n()){var u=document.createRange();u.selectNodeContents(c);var _=window.getSelection();_.removeAllRanges(),_.addRange(u),c.setSelectionRange(0,999999)}else navigator.clipboard.writeText(d),c.select();c.contentEditable=m,c.readOnly=v,document.execCommand("copy"),c.remove();var f=[{label:b("Close note",e.language),type:"close"}];!function(e,t,a,n){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",l=p("modal","click",e.background),s=document.createElement("div");s.classList.add("atcb-modal","atcb-info-modal"),s.tabIndex=0,l.appendChild(s),document.body.appendChild(l),document.body.classList.add("atcb-modal-no-scroll");var r=document.getElementById(e.identifier);null!=r&&r.classList.add("atcb-active-modal");var d=document.createElement("div");"instagram"===(d.classList.add("atcb-modal-box"),i)&&d.classList.add("atcb-modal-instagram"),s.appendChild(d),C(l);var o=document.createElement("div");o.classList.add("atcb-modal-headline"),o.textContent=t,d.appendChild(o);var c=document.createElement("div");c.classList.add("atcb-modal-content"),c.innerHTML=a,d.appendChild(c),n.forEach((function(e,t){var a=document.createElement("button");a.setAttribute("type","button"),a.classList.add("atcb-modal-btn"),a.textContent=e.label,d.appendChild(a),0==t&&a.focus(),e.type,a.addEventListener("click",w((function(){return h()}))),a.addEventListener("keydown",E((function(e){"Enter"==e.key&&(e.preventDefault(),h())})))}))}(e,b("Instagram iCal",e.language),b("Instagram info description",e.language),f,"instagram")}else try{if(window.ActiveXObject){if(window.ActiveXObject&&document.execCommand){var L=window.open(d,"_blank");L.document.close(),L.document.execCommand("SaveAs",!0,o||d),L.close()}}else{var y=document.createElement("a");y.href=d,y.target="_blank",y.download=o;var k=new MouseEvent("click",{view:window,button:0,bubbles:!0,cancelable:!1});y.dispatchEvent(k),(window.URL||window.webkitURL).revokeObjectURL(y.href)}}catch(e){console.error(e)}}else window.open(e.icsFile,"_self")}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"delimiters",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"general",n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=e.startDate.split("-"),l=e.endDate.split("-"),s="",r="",d=!1;if(null!=e.startTime&&null!=e.endTime){if(null!=e.timeZoneOffset&&""!=e.timeZoneOffset)s=new Date(i[0]+"-"+i[1]+"-"+i[2]+"T"+e.startTime+":00.000"+e.timeZoneOffset),r=new Date(l[0]+"-"+l[1]+"-"+l[2]+"T"+e.endTime+":00.000"+e.timeZoneOffset);else if(s=new Date(i[0]+"-"+i[1]+"-"+i[2]+"T"+e.startTime+":00.000+00:00"),r=new Date(l[0]+"-"+l[1]+"-"+l[2]+"T"+e.endTime+":00.000+00:00"),null!=e.timeZone&&""!=e.timeZone){var o=new Date(s.toLocaleString("en-US",{timeZone:"UTC"}));"currentBrowser"==e.timeZone&&(e.timeZone=Intl.DateTimeFormat().resolvedOptions().timeZone);var c=new Date(s.toLocaleString("en-US",{timeZone:e.timeZone})),m=o.getTime()-c.getTime();s.setTime(s.getTime()+m),r.setTime(r.getTime()+m)}if(s=s.toISOString().replace(".000",""),r=r.toISOString().replace(".000",""),"clean"==t&&(s=s.replace(/-/g,"").replace(/:/g,""),r=r.replace(/-/g,"").replace(/:/g,"")),n){var p="",v="";null!=e.timeZoneOffset&&""!=e.timeZoneOffset?(p=e.timeZoneOffset,v=e.timeZoneOffset):null!=e.timeZone&&""!=e.timeZone&&(p=new Date(s.toLocaleString("sv",{timeZone:e.timeZone})).toString().match(/GMT(.{5})/g)[0].replace(/GMT(.{3})(.{2})/g,"$1:$2"),v=new Date(r.toLocaleString("sv",{timeZone:e.timeZone})).toString().match(/GMT(.{5})/g)[0].replace(/GMT(.{3})(.{2})/g,"$1:$2")),s=s.slice(0,-1)+p,r=r.slice(0,-1)+v}}else{d=!0;var u=(s=new Date(Date.UTC(i[0],i[1]-1,i[2]))).toISOString().replace(/T(.+)Z/g,"");r=new Date(Date.UTC(l[0],l[1]-1,l[2])),"google"!=a&&"microsoft"!=a&&"ical"!=a||r.setDate(r.getDate()+1);var h=r.toISOString().replace(/T(.+)Z/g,"");"clean"==t&&(u=u.replace(/-/g,""),h=h.replace(/-/g,"")),s=u,r=h}return{start:s,end:r,allday:d}}function L(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!e.match(/((\.\.\/)|(\.\.\\)|(%2e%2e%2f)|(%252e%252e%252f)|(%2e%2e\/)|(%252e%252e\/)|(\.\.%2f)|(\.\.%252f)|(%2e%2e%5c)|(%252e%252e%255c)|(%2e%2e\\)|(%252e%252e\\)|(\.\.%5c)|(\.\.%255c)|(\.\.%c0%af)|(\.\.%25c0%25af)|(\.\.%c1%9c)|(\.\.%25c1%259c))/gi)||(t&&console.error("Seems like the generated URL includes at least one security issue and got blocked. Please check the calendar button parameters!"),!1)}function y(e,t){var a=!1;null!==e.nextElementSibling&&e.nextElementSibling.classList.contains("atcb-dropdown-anchor")&&(e=e.nextSibling,a=!0);var n=e.getBoundingClientRect();t.style.width=n.width+"px",t.style.top=!0===a?n.top+window.scrollY+"px":n.bottom+window.scrollY+"px",t.style.left=n.left+"px"}function C(e){e.style.width=window.innerWidth+"px",e.style.height=window.innerHeight+100+"px"}function w(e){var t,a=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return function(){for(var i=arguments.length,l=new Array(i),s=0;s1&&void 0!==arguments[1]?arguments[1]:200;return function(){if(!t){for(var i=arguments.length,l=new Array(i),s=0;sWe automatically put a magical URL into your phone's clipboard.
  1. Close this note, ...
  2. Open any other browser on your phone, ...
  3. Paste the clipboard content and go."}break;case"de":switch(e){case"Add to Calendar":return"Im Kalender speichern";case"iCal File":return"iCal-Datei";case"Close":return"Schließen";case"Close Selection":return"Auswahl schließen";case"Close note":return"Fenster schließen";case"Instagram iCal":return"Instagram iCal";case"Instagram info description":return"Leider hat der Instagram-Browser so seine Probleme mit der Art, wie wir Kalender-Dateien erzeugen.
    Wir haben automatisch eine magische URL in die Zwischenablage deines Smartphones kopiert.
    1. Schließe dieses Fenster, ...
    2. Öffne einen anderen Browser auf deinem Smartphone, ...
    3. Nutze die Einfügen-Funktion, um fortzufahren."}}return e}a()&&(document.addEventListener("keydown",E((function(e){"Escape"===e.key&&h()}))),window.addEventListener("resize",function(e){var t,a=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,i=null,l=0,s=function(){l=Date.now(),i=null;for(var n=arguments.length,s=new Array(n),r=0;rn){i&&(clearTimeout(i),i=null),l=r;for(var o=arguments.length,c=new Array(o),m=0;m2&&void 0!==arguments[2])||arguments[2];if(!r(e))throw new Error("data missing; see logs");if(!o(e=s(e)))throw new Error("Invalid data; see logs");t?e.identifier=t.id:(e.identifier="atcb-btn-custom",e.listStyle="modal",e.trigger="click"),u(e,t,a)},atcb_init:function(){console.log("add-to-calendar button initialized (version "+t+")"),console.log("See https://github.com/jekuer/add-to-calendar-button for details");var e=document.querySelectorAll(".atcb");if(e.length>0)for(var a=document.querySelectorAll(".atcb-initialized"),n=0;n]+)>)/gi,""));r(i=l(i))&&o(i=s(i))&&(null!=i.identifier&&""!=i.identifier||(i.identifier="atcb-btn-"+(n+a.length+1)),m(e[parseInt(n)],i))}}}},152:(e,t,a)=>{var n=a(781);e.exports=function(e,t){var a=document.createElement("div");a.style.display="inline-block";var i=document.createElement("div");i.classList.add("atcb"),i.style.display="none";var l=0;e.cats.m360_sessions_day[0]&&e.cats.m360_sessions_day[0].metafields&&e.cats.m360_sessions_day[0].metafields.day_full&&(l=e.cats.m360_sessions_day[0].metafields.day_full);var s,r,d=e.metafields.time_start||"00:00",o=e.metafields.time_end||"00:00";t||(t="Europe/London"),i.innerHTML='{\n "name":"'+e.post_title+'",\n "description":"'+(s=e.post_content,r=document.createElement("div"),r.innerHTML=s,(r.textContent||r.innerText||"").replace(/\t/g,"")).replace(/"/gi,"'")+'",\n\n "startDate":"'+l+'",\n "endDate":"'+l+'",\n "startTime":"'+d+'",\n "endTime":"'+o+'",\n "location":"",\n "label":"'+n("Add to Calendar")+'",\n "options":[\n "Apple",\n "Google",\n "iCal",\n "Microsoft365",\n "MicrosoftTeams",\n "Outlook.com",\n "Yahoo"\n ],\n "trigger":"click",\n "timeZone":"'+t+'",\n "iCalFileName":"Reminder-Event"\n}',a.appendChild(i);var c=new Date,m=new Date(l),p=c.getTime()-m.getTime();return!!(l&&p<0)&&a}},39:(e,t,a)=>{var n=a(781),i=a(410),l=[i.location_tag,i.tag,i.track,i.pass_type];e.exports=function(e){var t=document.createElement("div");for(var a in t.innerHTML=n("FILTER BY"),t.style.display="inline-block",console.log(e,"cats"),e)if(console.log(a,e[a]),-1!==l.indexOf(a)&&e[a].length){var s=document.createElement("select"),r=document.createElement("option");for(var d in r.innerHTML=""+i.cats_titles[a],r.value="",s.appendChild(r),s.id=a,e[a]){var o=document.createElement("option");o.innerHTML=e[a][d].name,o.value=e[a][d].slug,s.appendChild(o)}s.addEventListener("change",window.sessionFilterBySearch),t.appendChild(s)}return t}},72:(e,t,a)=>{var n=a(410),i=a(781);e.exports=function(e,t,a){var l=!1,s=0;e.cats[n.day][0]&&e.cats[n.day][0].metafields&&e.cats[n.day][0].metafields.day_full&&(s=e.cats[n.day][0].metafields.day_full);var r=s+" "+e.metafields[n.time_start],d=s+" "+e.metafields[n.time_end];if(t=r&&t=d&&s===t.split(" ")[0]&&(l="",a.first||s!==t.split(" ")[0]||(a.first=!0));return l}},628:(e,t,a)=>{var n=a(781),i=a(793),l=a(135),s=(l.atcb_action,l.atcb_init),r="",d="",o="",c={};e.exports=function(e,t,a){c=a,r=t,window.thrive_data[t].current_timezone_time&&"session_template"===window.thrive_data[t].id&&(window.thrive_data[t].current_timezone_time=c.current_timezone_time,window.thrive_data[t].current_timezone_date=c.current_timezone_date,d=window.thrive_data[t].current_timezone_date,window.thrive_data[t].local_timezone_time=parseInt((new Date).getTime()/1e3),setInterval((function(){window.thrive_data[r].local_timezone_time_now=parseInt((new Date).getTime()/1e3);var e=window.thrive_data[r].local_timezone_time_now-window.thrive_data[r].local_timezone_time;window.thrive_data[r].local_timezone_time_dt=e;var t=new Date(d.replace(/\-/g,"/"));if(t.setTime(t.getTime()+1e3*e),window.thrive_data[r].current_timezone_date=d.split(" ")[0]+" "+("0"+t.getHours()).slice(-2)+":"+("0"+t.getMinutes()).slice(-2),(t.getMinutes()%10==0||t.getMinutes()%10==5)&&o!==t.getMinutes()%10){o=t.getMinutes()%10;var a=document.getElementById(window.thrive_data[r].id);a.innerHTML="",a.appendChild(i(window.thrive_data[r])),s()}if(window.time_left_settings){var l=new Date(window.time_left_settings.full_date_start.replace(/\s+/g,"T")+":00.000Z").getTime()-new Date(window.thrive_data[r].current_timezone_date.replace(/\s+/g,"T")+":00.000Z").getTime();l/=1e3;var c=parseInt(l/3600);l%=3600;var m=parseInt(l/60),p=document.getElementById("counter_on");0===c&&(c=""),m=("0"+m).slice(-2);var v=n("Live in {{h}} hours {{m}} minutes").replace("{{h}}",c).replace("{{m}}",m);p.children[0].innerHTML=v}}),1e4),console.log("Time tracking interval started"))}},429:(e,t,a)=>{var n=a(781),i=a(410),l=[i.location_tag,i.tag,i.track,i.pass_type,i.exhibitor_location,i.exhibitor_product],s=function(e){var t=document.querySelectorAll("#"+e.target.parentNode.id+" .active");console.log(t,"#"+e.target.parentNode.id+" active"),t.forEach((function(e){return e.classList.remove("active")})),console.log(e.target.innerHTML,e);var a=e.target.value;e.target.parentNode.value="All"===a?"":a,e.target.classList.add("active"),window.exhibitorFilterBySearch()};e.exports=function(e){var t=document.createElement("div");for(var a in t.style.display="inline-block",console.log(e,"cats",l),e)if(l.indexOf(a)>-1&&Object.keys(e[a]).length){var r=document.createElement("div");r.innerHTML=n("FILTER BY "+i.cats_titles[a]),t.appendChild(r),console.log("ADD IT IN",a);var d=document.createElement("div");d.classList.add("select");var o=document.createElement("div");for(var c in o.classList.add("option"),o.classList.add("active"),o.innerHTML=n("All"),o.addEventListener("click",s),o.value="All",d.appendChild(o),d.multiple=!0,d.id=a,e[a]){var m=document.createElement("div");m.classList.add("option"),m.innerHTML=e[a][c].name,m.value=e[a][c].slug,m.addEventListener("click",s),d.appendChild(m)}d.addEventListener("change",window.sessionFilterBySearch),t.appendChild(d)}else console.log("ADD IT NOT",a);return t}},404:(e,t,a)=>{var n=a(355),i=a(781);e.exports=function(e,t){if(search=post_content=e.post_content,regex=new RegExp(/\[vid(\s.*?)?\](?:([^\[]+)?\[\/vid\])?/gi),matches=search.match(regex),matches&&matches.length>0){result=[],endresult=[];for(var a=e.post_content,l=function(){var e=document.createElement("button"),t=result[1].split('"')[1]+"";e.addEventListener("click",(function(){return n(t)})),e.innerHTML=i("Watch Again"),endresult[endresult.length]=e};result=regex.exec(a);)l();var s=[];for(var r in matches){var d=search.split(matches[r]);search=d[1],s[s.length]=d[0],matches.length===r+1&&(s[s.length]=d[1])}for(var r in s){var o=document.createElement("p");o.innerHTML=s[r],t.appendChild(o),r{e.exports=function(e){var t=document.createElement("div");t.classList.add("group_partners");var a=document.createElement("div"),n=document.createElement("div");for(var i in a.classList.add("session_partners"),n.textContent=e.title,n.classList.add("sponsor_type"),a.appendChild(n),e.img)if(e.img[i]){var l=document.createElement("img");l.classList.add("partner_img"),l.src=e.img[i],a.appendChild(l)}return t.appendChild(a),[t]}},992:e=>{var t=function(e){var t=e.target;""===t.id&&(t=t.parentNode),active_day=t.id;var a=document.getElementsByClassName("active_agenda_day")[0];a&&a.classList&&a.classList.remove("active_agenda_day"),t.classList.add("active_agenda_day"),window.sessionFilterBySearch({})};e.exports=function(e,a){var n=document.createElement("div");if(!e)return n.innerHTML="Not found",n;for(var i in days=e.sort((function(e,t){return e.metafields.day_order-t.metafields.day_order})),n.classList.add("agenda_days"),e){var l=document.createElement("div");a?parseInt(e[i].term_id)===parseInt(a)&&l.classList.add("active_agenda_day"):(window.active_day=a=e[i].term_id,l.classList.add("active_agenda_day")),l.id=e[i].term_id,l.classList.add("agenda_day"),l.innerHTML=""+e[i].description+""+e[i].name+"",l.addEventListener("click",t),n.appendChild(l)}return n}},582:(e,t,a)=>{var n=a(781),i=a(410),l=a(701),s=a(463),r=a(84),d=a(152),o=a(355),c=a(670),m=a(766),p=a(404),v=a(601),u=a(72);e.exports=function(e,t,a,h,_,f,g,L,y,C,w){var E=arguments.length>11&&void 0!==arguments[11]&&arguments[11],b=document.createElement("div"),k=document.createElement("div"),T=document.createElement("div"),x=document.createElement("div"),M=document.createElement("div"),H=document.createElement("div"),A=document.createElement("div"),I=document.createElement("p"),S=document.createElement("img"),N=document.createElement("div"),z=document.createElement("div"),D=document.createElement("div"),B=document.createElement("div"),F=document.createElement("div"),O=document.createElement("div"),V=document.createElement("div");if(T.appendChild(O),A.innerHTML=e.post_title,A.classList.add("agenda_title"),p(e,I),e.cats[i.track]&&void 0!==e.cats[i.track][0]&&(B.innerHTML=e.cats[i.track][0].name,b.classList.add(e.cats[i.track][0].slug),e.cats[i.track][0].metafields&&e.cats[i.track][0].metafields.color&&("true"===w?B.style.backgroundColor="#"+e.cats[i.track][0].metafields.color:B.style.color="#"+e.cats[i.track][0].metafields.color)),e.cats[i.tag]&&void 0!==e.cats[i.tag][0]&&(F.innerHTML=e.cats[i.tag][0].name,b.classList.add(e.cats[i.tag][0].slug),e.cats[i.tag][0].metafields&&e.cats[i.tag][0].metafields.color&&("true"===w?F.style.backgroundColor="#"+e.cats[i.tag][0].metafields.color:F.style.color="#"+e.cats[i.tag][0].metafields.color)),e.cats[i.location_tag]&&void 0!==e.cats[i.location_tag][0]&&(z.innerHTML="
      "+e.cats[i.location_tag][0].name+"
      ",b.classList.add(e.cats[i.location_tag][0].slug)),e.cats[i.pass_type]&&void 0!==e.cats[i.pass_type][0])for(var R in D.innerHTML="
      "+e.cats[i.pass_type][0].name+"
      ",e.cats[i.pass_type])b.classList.add(e.cats[i.pass_type][R].slug);B.classList.add("agenda_track"),D.classList.add("agenda_cat"),F.classList.add("agenda_cat"),e.cats[i.tag]&&e.cats[i.tag][0]&&F.classList.add("display_"+e.cats[i.tag][0].parent),e.thumbnail&&(S.src=e.thumbnail,S.classList.add("agenda_img"),b.appendChild(S)),N.innerHTML="
      "+e.metafields[i.time_start]+" - "+e.metafields[i.time_end]+"
      ",N.classList.add("agenda_time"),z.classList.add("agenda_location"),O.classList.add("agenda_holder"),O.classList.add("expand_button"),V.classList.add("agenda_expander"),T.classList.add("session_holder"),x.classList.add("session_sponsors"),M.classList.add("session_speakers"),H.classList.add("session_agendainfo");var U=!1;for(var j in e.mediafields)!1!==j.indexOf("group_")&&(U=r(e.mediafields[j]))[0]&&V.appendChild(U[0]);try{var Z=null;e.relations&&e.relations[i.speakers+"0"]&&e.relations[i.speakers+"0"].data&&e.relations[i.speakers+"0"].data.length&&(Z=l({data:e.relations[i.speakers+"0"].data}));var q=null;e.relations&&e.relations[i.speakers+"1"]&&e.relations[i.speakers+"1"].data&&e.relations[i.speakers+"1"].data.length&&(q=l({data:e.relations[i.speakers+"1"].data}));var Y=null,G=[],P=[];e.relations[i.sponsor+"3"]&&e.relations[i.sponsor+"3"].metafields&&e.relations[i.sponsor+"3"].metafields.sponsor_title[0]&&(G=e.relations[i.sponsor+"3"].metafields.sponsor_title),e.relations[i.sponsor+"3"]&&e.relations[i.sponsor+"3"].data&&e.relations[i.sponsor+"3"].data.length&&(P=e.relations[i.sponsor+"3"].data),Y=s({data:P,meta:G});var W=document.createElement("div");if(null!==Z){var $=document.createElement("div");$.innerHTML=n("Moderator"),W.appendChild($),W.appendChild(Z)}if(null!==q){var Q=document.createElement("div");Q.innerHTML=n("Speakers"),W.appendChild(Q),W.appendChild(q)}}catch(e){console.log(e)}N.style.display="inline-block",O.appendChild(N),z.innerHTML&&O.appendChild(z),B.innerHTML&&O.appendChild(B),F.innerHTML&&O.appendChild(F),D.innerHTML&&O.appendChild(D);var J=d(e,_);J&&O.appendChild(J);var K=front_core_var.site_url,X="";front_core_var.current_lang!==front_core_var.default_lang&&(X="/"+front_core_var.current_lang);var ee=K+X+"/session/"+e.post_name+"/";if(h){if(ee){var te=document.createElement("a"),ae=document.createElement("div");ae.classList.add("session_url"),te.href=ee,ae.appendChild(te),te.appendChild(A),O.appendChild(te),b.appendChild(O)}}else{var ne=document.createElement("div");ne.classList.add("wp-block-buttons");var ie=document.createElement("div");ie.classList.add("wp-block-button");var le=document.createElement("a");if(le.classList.add("button"),le.classList.add("wp-block-button__link"),le.href=ee,le.innerHTML=n("View Session Details"),V.appendChild(I),W&&V.appendChild(W),ie.appendChild(le),ne.appendChild(ie),V.appendChild(ne),O.appendChild(A),E||O.addEventListener("click",(function(){b.classList.toggle("active")})),O.classList.add("pointer"),b.appendChild(O),b.appendChild(V),"false"!==C){var se=u(e,f,L);if(se){var re=v(se,!1,!0);re.children[0].id="counter_on",b.appendChild(re)}}else{if(e.metafields.video_external_link){var de=v(n("Register"),e.metafields.video_external_link);b.appendChild(de)}if(e.metafields.video_id){var oe=v(n("Watch Again"),ee);b.appendChild(oe),"false"!==y&&oe.addEventListener("click",(function(t){t.preventDefault(),o(e.metafields.video_id)}))}if(e.metafields.video_url){var ce=v(n("Watch Again"),ee);"false"!==y&&ce.addEventListener("click",(function(t){t.preventDefault(),c(e.metafields.video_url)})),b.appendChild(ce)}if(e.metafields.video_iframe){var me=v(n("Watch Again"),ee);"false"!==y&&me.addEventListener("click",(function(t){t.preventDefault(),m(e.metafields.video_iframe)})),b.appendChild(me)}}}null!==Y&&O.appendChild(Y),H.appendChild(k);var pe=!0;for(var ve in e.cats.m360_sessions_day){var ue=e.cats.m360_sessions_day[ve];b.classList.add("agenda_day_"+ue.term_id),parseInt(t)===ue.term_id&&(pe=!1)}return(null==ue||pe)&&(b.style.display="none"),b.classList.add("single_session"),e.cats[i.tag]&&e.cats[i.tag][0]&&e.cats[i.tag][0].metafields.color&&(V.style["border-left"]="solid 3px #"+e.cats[i.tag][0].metafields.color,O.style["border-left"]="solid 3px #"+e.cats[i.tag][0].metafields.color),e.cats[i.track]&&e.cats[i.track][0]&&e.cats[i.track][0].metafields.color&&(b.dataset.borderbottom="AAAsolid 3px #"+e.cats[i.track][0].metafields.color,b.style["border-bottom"]="solid 3px #"+e.cats[i.track][0].metafields.color.replace("#","")),[b]}},122:e=>{e.exports=function(){var e=new Date;return e.getFullYear()+"-"+e.getMonth()+"-"+e.getDate()+"|"+e.getHours()+":"+("0"+e.getMinutes()).slice(-2)+" "}},766:e=>{e.exports=function(e){var t=document.getElementById("play_video_container"),a=document.createElement("div");a.innerHTML='',t&&("undefined"!=typeof GSMAVideo&&GSMAVideo.stop(),t.innerHTML="",t.appendChild(a),window.scrollTo(0,0))}},355:e=>{e.exports=function(e){var t=document.getElementById("play_video_container");"undefined"!=typeof GSMAVideo&&GSMAVideo.stop(),t.innerHTML="";var a="https://csm-e.tls1.yospace.com/csm/"+e+"/0000120357494.m3u8?yo.ns=true",n=document.createElement("div");if(n.classList.add("gsmavideo"),n.dataset.link=a,n.dataset.poster=front_core_var.plugin_url+"../plugin_gsma_videos/gsma_stinger.jpg",n.dataset.autoplay="true",t&&t.appendChild(n),"undefined"!=typeof GSMAVideo)GSMAVideo.videoRun();else{var i=front_core_var.plugin_url+"../plugin_gsma_videos/theoplayer/gsmavideo.class.js?ver=6.0",l=document.createElement("script");l.src=i,document.body.appendChild(l)}window.scrollTo(0,0)}},670:e=>{e.exports=function(e){var t=document.getElementById("play_video_container");"undefined"!=typeof GSMAVideo&&GSMAVideo.stop(),t.innerHTML="";var a=e,n=document.createElement("div");if(n.classList.add("gsmavideo"),n.dataset.link=a,n.dataset.poster=front_core_var.plugin_url+"../plugin_gsma_videos/gsma_stinger.jpg",n.dataset.autoplay="true",t&&t.appendChild(n),"undefined"!=typeof GSMAVideo)GSMAVideo.videoRun();else{var i=front_core_var.plugin_url+"../plugin_gsma_videos/theoplayer/gsmavideo.class.js?ver=6.0",l=document.createElement("script");l.src=i,document.body.appendChild(l)}window.scrollTo(0,0)}},128:(e,t,a)=>{var n=a(410),i=a(781);window.exhibitorFilterBySearch=function(e){var t,a;document.querySelector(".letter_filter.active").classList.remove("active"),document.querySelector(".letter_clear").classList.add("active");var i=document.getElementById("exhibitors_search")?document.getElementById("exhibitors_search").value:"",l=(null===(t=document.getElementById(n.exhibitor_location))||void 0===t?void 0:t.value)||"",s=(null===(a=document.getElementById(n.exhibitor_product))||void 0===a?void 0:a.value)||"",r=l+s+i;console.log("filter",r);for(var d=document.querySelectorAll(".item_single"),o=0;o{var n=a(781),i=["*","#","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],l=function(e){window.clearAllFilters&&window.clearAllFilters();var t=e.target.textContent,a=document.querySelector(".letter_filter.active");a&&a.classList.remove("active"),e.target.classList.add("active");for(var i=document.querySelectorAll(".item_list"),l=0;l{var n=a(410),i=a(781);window.sessionFilterBySearch=function(e){var t,a,i,l,s=document.getElementById("sessions_search")?document.getElementById("sessions_search").value:"",r=(null===(t=document.getElementById(n.tag))||void 0===t?void 0:t.value)||"",d=(null===(a=document.getElementById(n.location_tag))||void 0===a?void 0:a.value)||"",o=(null===(i=document.getElementById(n.track))||void 0===i?void 0:i.value)||"",c=(null===(l=document.getElementById(n.pass_type))||void 0===l?void 0:l.value)||"",m=c+r+d+o+s;console.log("filter",m);for(var p=document.querySelectorAll(".single_session"),v=0;v{var n=a(781),i=a(410),l=[i.location_tag,i.tag,i.track,i.pass_type],s=function(e){var t=document.querySelectorAll("#"+e.target.parentNode.id+" .active");console.log(t,"#"+e.target.parentNode.id+" active"),t.forEach((function(e){return e.classList.remove("active")})),console.log(e.target.innerHTML,e);var a=e.target.value;e.target.parentNode.value="All"===a?"":a,e.target.classList.add("active"),window.sessionFilterBySearch()};e.exports=function(e){var t=document.createElement("div");for(var a in t.style.display="inline-block",console.log(e,"cats"),e)if(console.log(a,e[a]),-1!==l.indexOf(a)&&e[a].length){var r=document.createElement("div");r.innerHTML=n("FILTER BY "+i.cats_titles[a].toUpperCase()),t.appendChild(r);var d=document.createElement("div");d.classList.add("select");var o=document.createElement("div");for(var c in o.value="All",o.classList.add("option"),o.classList.add("active"),o.innerHTML=n("All"),o.addEventListener("click",s),d.appendChild(o),d.multiple=!0,d.id=a,e[a]){var m=document.createElement("div");m.classList.add("option"),m.innerHTML=e[a][c].name,m.value=e[a][c].slug,m.addEventListener("click",s),d.appendChild(m)}d.addEventListener("change",window.sessionFilterBySearch),t.appendChild(d)}return t}},601:e=>{e.exports=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("a");t&&(n.href=t),n.target="_blank",n.classList.add("wp-block-buttons");var i=document.createElement("div");i.classList.add("wp-block-button");var l=document.createElement("button");return l.classList.add("wp-block-button__link"),l.innerHTML=e,i.appendChild(l),a&&i.classList.add("outline"),-1!==e.indexOf("Live in")&&(i.id="counter_on"),n.appendChild(i),n}},410:e=>{var t,a={};window.thrive_data&&(a=null===(t=window.thrive_data[0])||void 0===t||null===(t=t.config)||void 0===t||null===(t=t.types)||void 0===t?void 0:t.session);var n={exhibitor_location:"m360_exhibitors_locations",exhibitor_product:"m360_exhibitors_products",location_tag:"m360_sessions_locations",tag:"m360_sessions_tag",track:"m360_sessions_track",day:"m360_sessions_day",video_cat:"m360_video_cat",sponsor_cat:"m360_sponsor_cat",pass_type:"m360_sessions_pass",speakers:"m360_speakers",sponsor:"m360_sponsor",time_start:"time_start",time_end:"time_end",cats_titles:{m360_sessions_locations:"Location",m360_sessions_tag:"Theme",m360_sessions_track:"Track",m360_sessions_pass:"Pass",m360_exhibitors_locations:"LOCATION",m360_exhibitors_products:"PRODUCT"},config:a};e.exports=n},0:e=>{var t=function(e){var t=document.createElement("div");for(var a in e){var n=document.createElement("div");n.innerHTML=a+": "+e[a],t.appendChild(n)}return t};e.exports=function(e){console.log("data",a);var a=e.data,n=document.createElement("div");for(var i in a){var l=document.createElement("div"),s=document.createElement("h4"),r=document.createElement("p"),d=document.createElement("img");s.innerHTML=a[i].post_title,r.innerHTML=a[i].post_content,d.src=a[i].thumbnail;var o=t(a[i].metafields);l.appendChild(s),l.appendChild(d),l.appendChild(r),l.appendChild(o),n.appendChild(l)}return n}},855:e=>{var t=function(e){var t=document.createElement("div");for(var a in e){var n=document.createElement("div");n.innerHTML=a+": "+e[a],t.appendChild(n)}return t};e.exports=function(e){console.log("data",e);var a=e.data,n=document.createElement("div");for(var i in a){var l=document.createElement("div"),s=document.createElement("h4"),r=document.createElement("p"),d=document.createElement("img");s.innerHTML=a[i].post_title,r.innerHTML=a[i].post_content,d.src=a[i].metafields.Logo_URL;var o=t(a[i].metafields);l.appendChild(s),l.appendChild(d),l.appendChild(r),l.appendChild(o),n.appendChild(l)}return n}},579:(e,t,a)=>{var n=a(500),i=(n.searchFilterItems,n.letterFilterItems),l=a(128),s=a(429),r=a(781),d=function(e){var t=document.createElement("div");for(var a in e){var n=document.createElement("div");n.innerHTML=a+": "+JSON.stringify(e[a]),t.appendChild(n)}return t};e.exports=function(e){console.log("mwcs data",e);var t=e.data,a=document.createElement("div");a.classList.add("exhibitors_holder");var n=document.createElement("div");n.classList.add("exhibitors_results");var o=document.createElement("div"),c=document.createElement("div");o.classList.add("ex_sidebar"),c.classList.add("ex_restbar"),a.appendChild(o),a.appendChild(c);var m=document.createElement("div");m.classList.add("filter_box"),o.appendChild(l()),o.appendChild(s(e.cats)),m.appendChild(i()),c.appendChild(m),c.appendChild(n);var p="*";for(var v in t){var u="";u=t[v].metafields.CompanyName.trim().toUpperCase().slice(0,1),!1===isNaN(u)&&(u="#"),!1===/[a-zA-Z0-9]/.test(u)&&(u="*"),u!==p&&(p=u);var h=document.createElement("a");for(var _ in h.classList.add("letter_"+p),h.classList.add("item_list"),h.classList.add("item_single"),t[v].cats)for(var f in console.log(_),t[v].cats[_])console.log(f),h.classList.add(f.split(" ").join("-")),h.classList.add(t[v].cats[_][f].slug);h.href=front_core_var.site_url+"/exhibitor/"+t[v].post_name;var g=document.createElement("div"),L=document.createElement("h4"),y=document.createElement("p"),C=document.createElement("p"),w=document.createElement("img"),E=document.createElement("div");E.classList.add("ex_logo"),E.appendChild(w),y.classList.add("stands"),g.classList.add("exhibitor_single"),L.innerHTML=t[v].post_title,C.innerHTML=t[v].post_content,t[v].metafields.Logo_URL?w.src=t[v].metafields.Logo_URL:w.src=front_core_var.plugin_url+"img/Placeholder.png",d(t[v].metafields),g.appendChild(E),g.appendChild(L);var b=t[v].metafields.StandDetails.StandDetail,k=Object.keys(b).length;y.innerHTML=k+" "+r("Stands"),void 0!==b.Hidden&&(k=1,y.innerHTML=k+" "+r("Stand")),g.appendChild(y),h.appendChild(g),n.appendChild(h)}return a}},179:(e,t,a)=>{var n=a(410),i=a(582),l=a(992),s=(a(84),a(942)),r=a(39),d=a(72);window.active_day=!1,window.links_live=!1,e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=document.createElement("div");e.filters&&(a.appendChild(r(e.cats)),a.appendChild(s()));var o=l(e.cats[n.day],active_day);"true"!==e.upcomming_only&&a.appendChild(o),t.sort((function(e,t){try{e.cats[n.day][0].metafields.day_full}catch(e){}var a=""+e.metafields[n.time_start];try{t.cats[n.day][0].metafields.day_full}catch(e){}var i=""+t.metafields[n.time_start];if(console.log(a,i,a.localeCompare(i)),a.localeCompare)return a.localeCompare(i)})),console.log("data in sorted",e,t);var c=[],m={},p={};for(var v in t){var u,h,_,f=null===(u=t[v].metafields[n.time_start])||void 0===u?void 0:u.split(":")[0];f||(f="00");var g="";if(-1!==c.indexOf(f)?_=m[f].children[1]:(c.push(f),(h=document.createElement("div")).innerHTML="
      "+f+":00
      ",h.classList.add("timeslot"),h.classList.add("timeslot_"+f),m[f]=h,(_=document.createElement("div")).classList.add("timesessions"),m[f].appendChild(_)),"true"===e.upcomming_only){var L=d(t[v],e.current_timezone_date,p);if(!1!==L&&""!==L){g=i(t[v],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,p,e.video_above_agenda,e.video_stream_counter,e.cat_color_to_bg,!0),_.appendChild(g[0]);break}}else g=i(t[v],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,p,e.video_above_agenda,e.video_stream_counter,e.cat_color_to_bg,!1),_.appendChild(g[0])}var y=Object.keys(m);for(var C in y.sort(),y)a.appendChild(m[y[C]]);return a}},337:(e,t,a)=>{var n=a(410),i=a(582),l=a(992),s=(a(84),a(942)),r=a(39),d=a(72);window.active_day=!1,window.links_live=!1,e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=document.createElement("div");e.filters&&(a.appendChild(r(e.cats)),a.appendChild(s()));var o=l(e.cats[n.day],active_day);"true"!==e.upcomming_only&&a.appendChild(o),t.sort((function(e,t){try{e.cats[n.day][0].metafields.day_full}catch(e){}var a=""+e.metafields[n.time_start];try{t.cats[n.day][0].metafields.day_full}catch(e){}var i=""+t.metafields[n.time_start];if(console.log(a,i,a.localeCompare(i)),a.localeCompare)return a.localeCompare(i)})),console.log("data in sorted",e,t);var c=[],m={},p={};for(var v in t){var u,h,_,f=null===(u=t[v].metafields[n.time_start])||void 0===u?void 0:u.split(":")[0];f||(f="00");var g="";if(-1!==c.indexOf(f)?_=m[f].children[1]:(c.push(f),(h=document.createElement("div")).innerHTML="
      "+f+":00
      ",h.classList.add("timeslot"),h.classList.add("timeslot_"+f),m[f]=h,(_=document.createElement("div")).classList.add("timesessions"),m[f].appendChild(_)),"true"===e.upcomming_only){var L=d(t[v],e.current_timezone_date,p);if(!1!==L&&""!==L){g=i(t[v],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,p,e.video_above_agenda,e.video_stream_counter,!0),_.appendChild(g[0]);break}}else g=i(t[v],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,p,e.video_above_agenda,e.video_stream_counter,!1),_.appendChild(g[0])}var y=Object.keys(m);for(var C in y.sort(),y)a.appendChild(m[y[C]]);return a}},899:(e,t,a)=>{var n=a(410),i=a(582),l=a(992),s=(a(84),a(942)),r=a(658),d=a(72);window.active_day=!1,window.links_live=!1,e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=document.createElement("div"),o=document.createElement("div"),c=document.createElement("div");o.classList.add("ex_sidebar"),c.classList.add("ex_restbar"),a.appendChild(o),a.appendChild(c),document.createElement("div").classList.add("filter_box"),o.appendChild(s()),o.appendChild(r(e.cats));var m=l(e.cats[n.day],active_day);"true"!==e.upcomming_only&&c.appendChild(m),t.sort((function(e,t){try{e.cats[n.day][0].metafields.day_full}catch(e){}var a=""+e.metafields[n.time_start];try{t.cats[n.day][0].metafields.day_full}catch(e){}var i=""+t.metafields[n.time_start];if(console.log(a,i,a.localeCompare(i)),a.localeCompare)return a.localeCompare(i)})),console.log("data in sorted",e,t);var p=[],v={},u={};for(var h in t){var _,f,g,L=null===(_=t[h].metafields[n.time_start])||void 0===_?void 0:_.split(":")[0];L||(L="00");var y="";if(-1!==p.indexOf(L)?g=v[L].children[1]:(p.push(L),(f=document.createElement("div")).innerHTML="
      "+L+":00
      ",f.classList.add("timeslot"),f.classList.add("timeslot_"+L),v[L]=f,(g=document.createElement("div")).classList.add("timesessions"),v[L].appendChild(g)),"true"===e.upcomming_only){var C=d(t[h],e.current_timezone_date,u);if(!1!==C&&""!==C){y=i(t[h],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,u,e.video_above_agenda,e.video_stream_counter,e.cat_color_to_bg,!0),g.appendChild(y[0]);break}}else y=i(t[h],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,u,e.video_above_agenda,e.video_stream_counter,e.cat_color_to_bg,!1),g.appendChild(y[0])}var w=Object.keys(v);for(var E in w.sort(),w)c.appendChild(v[w[E]]);return a}},241:(e,t,a)=>{var n=a(410),i=a(582),l=a(992),s=(a(84),a(942)),r=a(39),d=a(72);window.active_day=!1,window.links_live=!1,e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=document.createElement("div"),o=document.createElement("div");o.classList.add("sessionHolder"),e.filters&&(a.appendChild(r(e.cats)),a.appendChild(s()));var c=l(e.cats[n.day],active_day);"true"!==e.upcomming_only&&a.appendChild(c),t.sort((function(e,t){try{e.cats[n.day][0].metafields.day_full}catch(e){}var a=""+e.metafields[n.time_start];try{t.cats[n.day][0].metafields.day_full}catch(e){}var i=""+t.metafields[n.time_start];if(console.log(a,i,a.localeCompare(i)),a.localeCompare)return a.localeCompare(i)})),console.log("data in sorted",e,t);var m=[],p={},v={};for(var u in t){var h,_,f,g=null===(h=t[u].metafields[n.time_start])||void 0===h?void 0:h.split(":")[0];g||(g="00");var L="";if(-1!==m.indexOf(g)?f=p[g].children[1]:(m.push(g),(_=document.createElement("div")).innerHTML="
      "+g+":00
      ",_.classList.add("timeslot"),_.classList.add("timeslot_"+g),p[g]=_,(f=document.createElement("div")).classList.add("timesessions"),p[g].appendChild(f)),"true"===e.upcomming_only){var y=d(t[u],e.current_timezone_date,v);if(!1!==y&&""!==y){L=i(t[u],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,v,e.video_above_agenda,e.video_stream_counter,e.cat_color_to_bg,!0),f.appendChild(L[0]);break}}else L=i(t[u],active_day,e.config.types.session,links_live,e.timezone,e.current_timezone_date,e.location_to_stream_link,v,e.video_above_agenda,e.video_stream_counter,e.cat_color_to_bg,!1),f.appendChild(L[0])}var C=Object.keys(p);for(var w in C.sort(),C)o.appendChild(p[C[w]]);return a.appendChild(o),a}},829:e=>{e.exports=function(e){var t=e.data,a=5;window.innerWidth<700&&(a=2);var n=0;t.sort((function(e,t){return e.post_titlet.post_title?1:0}));var i=document.createElement("div");i.classList.add("speakers_list");var l=function(){var e=document.createElement("div"),l=document.createElement("h6"),r=document.createElement("p"),d=document.createElement("p"),o=document.createElement("figure"),c=document.createElement("img"),m=document.createElement("div");l.innerHTML=t[s].post_title,l.classList.add("speaker_name"),r.innerHTML=t[s].metafields.companyName,r.classList.add("speaker_company"),d.innerHTML=t[s].metafields.jobTitle,d.classList.add("speaker_title"),t[s].metafields.photo?c.src="https://app.mobile360series.com/M360/"+t[s].metafields.photo:c.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",e.classList.add("speaker_single"),t[s].thumbnail&&(c.src=t[s].thumbnail),o.appendChild(c),e.appendChild(o),e.appendChild(l),e.appendChild(r),e.appendChild(d);var p=Math.floor(s/a);e.expand_i=p,e.all_data=t[s],m.addEventListener("click",(function(){var e=document.getElementsByClassName("expand_holder active");e.length>0&&e[0].classList.remove("active"),i.classList.remove("selected_speaker"),m.innerHTML=""})),e.addEventListener("click",(function(){i.classList.add("selected_speaker");var t=document.getElementsByClassName("speaker_single active");t.length>0&&t[0].classList.remove("active");var a=document.getElementsByClassName("expand_holder active");a.length>0&&a[0].classList.remove("active");var n=document.getElementsByClassName("expand_holder");for(var l in n)n[l].innerHTML="";e.classList.toggle("active");var s="expand_"+e.expand_i,r=document.getElementsByClassName(s);r[0].classList.add("active"),r[0].innerHTML+="

      "+e.all_data.metafields.firstname+" "+e.all_data.metafields.lastname+"

      "+e.all_data.metafields.companyName+"

      "+e.all_data.metafields.jobTitle+"

      "+e.all_data.post_content+"

      "})),i.appendChild(e),++n!==a&&parseInt(s)!==t.length-1||(m.classList.add("expand_"+p),m.classList.add("expand_holder"),i.appendChild(m),n=0)};for(var s in t)l();return i}},953:(e,t,a)=>{var n=a(500),i=n.searchFilterItems,l=n.letterFilterItems;e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=5;window.innerWidth<700&&(a=2);var n=0;t.sort((function(e,t){return e.metafields.companyName.toUpperCase()t.metafields.companyName.toUpperCase()?1:0}));var s="*",r=document.createElement("div");r.classList.add("spekers_");var d=document.createElement("div");d.classList.add("inner_box");var o=document.createElement("div");o.classList.add("filter_box"),d.appendChild(i()),d.appendChild(l()),r.appendChild(o),o.appendChild(d);var c=document.createElement("div");c.innerHTML='
      *
      ',c.classList.add("speakers_list"),c.classList.add("item_list"),c.classList.add("letter_"+s);var m,p,v,u=function(){var e=document.createElement("div"),i=document.createElement("h6"),l=document.createElement("p"),d=document.createElement("p"),o=document.createElement("img"),u=document.createElement("figure"),_=document.createElement("div");if(m="",t[h].metafields.companyName&&(m=t[h].metafields.companyName.trim().toUpperCase().slice(0,1),!1===isNaN(m)&&(m="#"),!1===/[a-zA-Z0-9]/.test(m)&&(m="*"),m!==s)){s=m,r.appendChild(c),(c=document.createElement("div")).classList.add("speakers_list"),c.classList.add("item_list"),c.classList.add("letter_"+s);var f=document.createElement("div");f.innerHTML=s,f.style.width="100%",c.appendChild(f)}i.innerHTML=t[h].post_title,i.classList.add("speaker_name"),l.innerHTML=t[h].metafields.companyName,l.classList.add("speaker_company"),d.innerHTML=t[h].metafields.jobTitle,d.classList.add("speaker_title"),t[h].metafields.photo?o.src="https://app.mobile360series.com/M360/"+t[h].metafields.photo:o.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",t[h].thumbnail&&(o.src=t[h].thumbnail),u.appendChild(o),e.appendChild(u),e.appendChild(i),e.appendChild(d),e.appendChild(l);var g=Math.floor(h/a);e.expand_i=g,e.all_data=t[h],_.addEventListener("click",(function(){var e=document.getElementsByClassName("expand_holder active");e.length>0&&e[0].classList.remove("active"),c.classList.remove("selected_speaker"),_.innerHTML=""}));var L=front_core_var.site_url;if(p="",front_core_var.current_lang!==front_core_var.default_lang&&(p="/"+front_core_var.current_lang),v=L+p+"/speaker/"+t[h].post_name,window.links_live){var y=document.createElement("a");y.appendChild(e),v&&(y.href=v),y.classList.add("speaker_single"),y.classList.add("item_single"),c.appendChild(y)}else e.classList.add("speaker_single"),e.classList.add("item_single"),e.addEventListener("click",(function(){c.classList.add("selected_speaker");var t=document.getElementsByClassName("speaker_single active");t.length>0&&t[0].classList.remove("active");var a=document.getElementsByClassName("expand_holder active");a.length>0&&a[0].classList.remove("active");var n=document.getElementsByClassName("expand_holder");for(var i in n)n[i].innerHTML="";e.classList.toggle("active");var l="expand_"+e.expand_i,s=document.getElementsByClassName(l);s[0].classList.add("active"),s[0].innerHTML+="

      "+e.all_data.metafields.firstname+" "+e.all_data.metafields.lastname+"

      "+e.all_data.metafields.companyName+"

      "+e.all_data.metafields.jobTitle+"

      "+e.all_data.post_content+"

      "})),c.appendChild(e);++n!==a&&parseInt(h)!==t.length-1||(_.classList.add("expand_"+g),_.classList.add("expand_holder"),c.appendChild(_),n=0)};for(var h in t)u();return r.appendChild(c),r}},701:e=>{e.exports=function(e){var t=e.data,a=document.createElement("div");for(var n in a.classList.add("speakers_list"),console.log(" speaker_template_expand",t),t){var i=document.createElement("div"),l=document.createElement("h6"),s=document.createElement("p"),r=document.createElement("p"),d=document.createElement("img"),o=document.createElement("div"),c=document.createElement("div");l.innerHTML=t[n].post_title,l.classList.add("speaker_name"),s.innerHTML=t[n].metafields.companyName,s.classList.add("speaker_company"),r.innerHTML=t[n].metafields.jobTitle,r.classList.add("speaker_title"),t[n].thumbnail?d.src=t[n].thumbnail:d.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",i.classList.add("speaker_single"),o.classList.add("cont_left"),c.classList.add("cont_right"),o.appendChild(d),c.appendChild(l),c.appendChild(s),c.appendChild(r),i.appendChild(o),i.appendChild(c),a.appendChild(i)}return a}},247:(e,t,a)=>{var n=a(500),i=n.searchFilterItems,l=n.letterFilterItems;e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=5;window.innerWidth<700&&(a=2);var n=0;t.sort((function(e,t){return e.metafields.companyNamet.metafields.companyName?1:0}));var s="*",r=document.createElement("div");r.classList.add("spekers_");var d=document.createElement("div");d.classList.add("inner_box");var o=document.createElement("div");o.classList.add("filter_box"),d.appendChild(i()),d.appendChild(l()),r.appendChild(o),o.appendChild(d);var c=document.createElement("div");c.innerHTML='
      *
      ',c.classList.add("speakers_list"),c.classList.add("item_list"),c.classList.add("letter_"+s);var m,p,v,u=function(){var e=document.createElement("div"),i=document.createElement("h6"),l=document.createElement("p"),d=document.createElement("p"),o=document.createElement("img"),u=document.createElement("figure"),_=document.createElement("div");if(m="",t[h].metafields.companyName&&(m=t[h].metafields.companyName.trim().toUpperCase().slice(0,1),!1===isNaN(m)&&(m="#"),!1===/[a-zA-Z0-9]/.test(m)&&(m="*"),m!==s)){s=m,r.appendChild(c),(c=document.createElement("div")).classList.add("speakers_list"),c.classList.add("item_list"),c.classList.add("letter_"+s);var f=document.createElement("div");f.innerHTML=s,f.style.width="100%",c.appendChild(f)}i.innerHTML=t[h].post_title,i.classList.add("speaker_name"),l.innerHTML=t[h].metafields.companyName,l.classList.add("speaker_company"),d.innerHTML=t[h].metafields.jobTitle,d.classList.add("speaker_title"),t[h].metafields.photo?o.src="https://app.mobile360series.com/M360/"+t[h].metafields.photo:o.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",t[h].thumbnail&&(o.src=t[h].thumbnail),u.appendChild(o),e.appendChild(u),e.appendChild(i),e.appendChild(d),e.appendChild(l);var g=Math.floor(h/a);e.expand_i=g,e.all_data=t[h],_.addEventListener("click",(function(){var e=document.getElementsByClassName("expand_holder active");e.length>0&&e[0].classList.remove("active"),c.classList.remove("selected_speaker"),_.innerHTML=""}));var L=front_core_var.site_url;if(p="",front_core_var.current_lang!==front_core_var.default_lang&&(p="/"+front_core_var.current_lang),v=L+p+"/speaker/"+t[h].post_name,window.links_live){var y=document.createElement("a");y.appendChild(e),v&&(y.href=v),y.classList.add("speaker_single"),y.classList.add("item_single"),c.appendChild(y)}else e.classList.add("speaker_single"),e.classList.add("item_single"),e.addEventListener("click",(function(){c.classList.add("selected_speaker");var t=document.getElementsByClassName("speaker_single active");t.length>0&&t[0].classList.remove("active");var a=document.getElementsByClassName("expand_holder active");a.length>0&&a[0].classList.remove("active");var n=document.getElementsByClassName("expand_holder");for(var i in n)n[i].innerHTML="";e.classList.toggle("active");var l="expand_"+e.expand_i,s=document.getElementsByClassName(l);s[0].classList.add("active"),s[0].innerHTML+="

      "+e.all_data.metafields.firstname+" "+e.all_data.metafields.lastname+"

      "+e.all_data.metafields.companyName+"

      "+e.all_data.metafields.jobTitle+"

      "+e.all_data.post_content+"

      "})),c.appendChild(e);++n!==a&&parseInt(h)!==t.length-1||(_.classList.add("expand_"+g),_.classList.add("expand_holder"),c.appendChild(_),n=0)};for(var h in t)u();return r.appendChild(c),r}},814:(e,t,a)=>{var n=a(500),i=n.searchFilterItems,l=n.letterFilterItems;e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=5;window.innerWidth<700&&(a=2);var n=0;t.sort((function(e,t){return e.metafields.companyName.toUpperCase()t.metafields.companyName.toUpperCase()?1:0}));var s="*",r=document.createElement("div");r.classList.add("speakers_");var d=document.createElement("div");d.classList.add("inner_box");var o=document.createElement("div");o.classList.add("filter_box"),d.appendChild(i()),d.appendChild(l()),o.appendChild(d);var c=document.createElement("div");c.classList.add("wrapper"),c.appendChild(o),c.appendChild(r);var m,p,v,u=document.createElement("div"),h=function(){var e=document.createElement("div"),i=document.createElement("h6"),l=document.createElement("p"),d=document.createElement("p"),o=document.createElement("img"),c=document.createElement("figure"),h=document.createElement("div");m="",t[_].metafields.companyName&&(m=t[_].metafields.companyName.trim().toUpperCase().slice(0,1),!1===isNaN(m)&&(m="#"),!1===/[a-zA-Z0-9]/.test(m)&&(m="*"),s=m,r.appendChild(u),(u=document.createElement("div")).classList.add("speakers_list"),u.classList.add("item_list"),u.classList.add("letter_"+s)),i.innerHTML=t[_].post_title,i.classList.add("speaker_name"),l.innerHTML=t[_].metafields.companyName,l.classList.add("speaker_company"),d.innerHTML=t[_].metafields.jobTitle,d.classList.add("speaker_title"),t[_].metafields.photo?o.src="https://app.mobile360series.com/M360/"+t[_].metafields.photo:o.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",t[_].thumbnail&&(o.src=t[_].thumbnail),c.appendChild(o),e.appendChild(c),e.appendChild(i),e.appendChild(d),e.appendChild(l);var f=Math.floor(_/a);e.expand_i=f,e.all_data=t[_],h.addEventListener("click",(function(){var e=document.getElementsByClassName("expand_holder active");e.length>0&&e[0].classList.remove("active"),u.classList.remove("selected_speaker"),h.innerHTML=""}));var g=front_core_var.site_url;if(p="",front_core_var.current_lang!==front_core_var.default_lang&&(p="/"+front_core_var.current_lang),v=g+p+"/speaker/"+t[_].post_name,window.links_live){var L=document.createElement("a");L.appendChild(e),v&&(L.href=v),L.classList.add("speaker_single"),L.classList.add("item_single"),u.appendChild(L)}else e.classList.add("speaker_single"),e.classList.add("item_single"),e.addEventListener("click",(function(){u.classList.add("selected_speaker");var t=document.getElementsByClassName("speaker_single active");t.length>0&&t[0].classList.remove("active");var a=document.getElementsByClassName("expand_holder active");a.length>0&&a[0].classList.remove("active");var n=document.getElementsByClassName("expand_holder");for(var i in n)n[i].innerHTML="";e.classList.toggle("active");var l="expand_"+e.expand_i,s=document.getElementsByClassName(l);s[0].classList.add("active"),s[0].innerHTML+="

      "+e.all_data.metafields.firstname+" "+e.all_data.metafields.lastname+"

      "+e.all_data.metafields.companyName+"

      "+e.all_data.metafields.jobTitle+"

      "+e.all_data.post_content+"

      "})),u.appendChild(e);++n!==a&&parseInt(_)!==t.length-1||(h.classList.add("expand_"+f),h.classList.add("expand_holder"),u.appendChild(h),n=0)};for(var _ in t)h();return r.appendChild(u),c}},865:(e,t,a)=>{var n=a(500),i=n.searchFilterItems,l=n.letterFilterItems;e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=5;window.innerWidth<700&&(a=2);var n=0;console.log(t),t.sort((function(e,t){if(e.metafields.order_companyNamet.metafields.order_companyName)return 1;if(e.metafields.order_companyName==t.metafields.order_companyName){if(e.metafields.lastnamet.metafields.lastname)return 1}return 0}));var s="*",r=document.createElement("div");r.classList.add("speakers_");var d=document.createElement("div");d.classList.add("inner_box");var o=document.createElement("div");o.classList.add("filter_box"),d.appendChild(i()),d.appendChild(l()),o.appendChild(d);var c=document.createElement("div");c.classList.add("wrapper"),c.appendChild(o),c.appendChild(r);var m,p,v,u=document.createElement("div"),h=function(){var e=document.createElement("div"),i=document.createElement("h6"),l=document.createElement("p"),d=document.createElement("p"),o=document.createElement("img"),c=document.createElement("figure"),h=document.createElement("div");m="",!t[_].metafields.order_companyName&&t[_].metafields.companyName&&(t[_].metafields.order_companyName,t[_].metafields.companyName),t[_].metafields.order_companyName&&(m=t[_].metafields.order_companyName.trim().toUpperCase().slice(0,1),!1===isNaN(m)&&(m="#"),!1===/[a-zA-Z0-9]/.test(m)&&(m="*"),s=m,r.appendChild(u),(u=document.createElement("div")).classList.add("speakers_list"),u.classList.add("item_list"),u.classList.add("letter_"+s)),i.innerHTML=t[_].post_title,i.classList.add("speaker_name"),l.innerHTML=t[_].metafields.companyName,l.classList.add("speaker_company"),d.innerHTML=t[_].metafields.jobTitle,d.classList.add("speaker_title"),t[_].metafields.photo?o.src="https://app.mobile360series.com/M360/"+t[_].metafields.photo:o.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",t[_].thumbnail&&(o.src=t[_].thumbnail),c.appendChild(o),e.appendChild(c),e.appendChild(i),e.appendChild(d),e.appendChild(l);var f=Math.floor(_/a);e.expand_i=f,e.all_data=t[_],h.addEventListener("click",(function(){var e=document.getElementsByClassName("expand_holder active");e.length>0&&e[0].classList.remove("active"),u.classList.remove("selected_speaker"),h.innerHTML=""}));var g=front_core_var.site_url;if(p="",front_core_var.current_lang!==front_core_var.default_lang&&(p="/"+front_core_var.current_lang),v=g+p+"/speaker/"+t[_].post_name,window.links_live){var L=document.createElement("a");L.appendChild(e),v&&(L.href=v),L.classList.add("speaker_single"),L.classList.add("item_single"),u.appendChild(L)}else e.classList.add("speaker_single"),e.classList.add("item_single"),e.addEventListener("click",(function(){u.classList.add("selected_speaker");var t=document.getElementsByClassName("speaker_single active");t.length>0&&t[0].classList.remove("active");var a=document.getElementsByClassName("expand_holder active");a.length>0&&a[0].classList.remove("active");var n=document.getElementsByClassName("expand_holder");for(var i in n)n[i].innerHTML="";e.classList.toggle("active");var l="expand_"+e.expand_i,s=document.getElementsByClassName(l);s[0].classList.add("active"),s[0].innerHTML+="

      "+e.all_data.metafields.firstname+" "+e.all_data.metafields.lastname+"

      "+e.all_data.metafields.companyName+"

      "+e.all_data.metafields.jobTitle+"

      "+e.all_data.post_content+"

      "})),u.appendChild(e);++n!==a&&parseInt(_)!==t.length-1||(h.classList.add("expand_"+f),h.classList.add("expand_holder"),u.appendChild(h),n=0)};for(var _ in t)h();return r.appendChild(u),c}},380:(e,t,a)=>{var n=a(500),i=n.searchFilterItems,l=n.letterFilterItems;e.exports=function(e){e.links?window.links_live||(window.links_live=!0):window.links_live&&(window.links_live=!1);var t=e.data,a=5;window.innerWidth<700&&(a=2);var n=0;t.sort((function(e,t){return e.metafields.companyName.toUpperCase()t.metafields.companyName.toUpperCase()?1:0}));var s="*",r=document.createElement("div");r.classList.add("speakers_");var d=document.createElement("div");d.classList.add("inner_box");var o=document.createElement("div");o.classList.add("filter_box"),d.appendChild(i()),d.appendChild(l()),o.appendChild(d);var c=document.createElement("div");c.classList.add("wrapper"),c.appendChild(o),c.appendChild(r);var m,p,v,u=document.createElement("div"),h=function(){var e=document.createElement("div"),i=document.createElement("h6"),l=document.createElement("p"),d=document.createElement("p"),o=document.createElement("img"),c=document.createElement("figure"),h=document.createElement("div");if(m="",t[_].metafields.companyName){m=t[_].metafields.companyName.trim().toUpperCase().slice(0,1),!1===isNaN(m)&&(m="#"),!1===/[a-zA-Z0-9]/.test(m)&&(m="*"),s=m,r.appendChild(u),(u=document.createElement("div")).classList.add("speakers_list"),u.classList.add("item_list"),u.classList.add("letter_"+s);var f=document.createElement("div");u.appendChild(f)}i.innerHTML=t[_].post_title,i.classList.add("speaker_name"),l.innerHTML=t[_].metafields.companyName,l.classList.add("speaker_company"),d.innerHTML=t[_].metafields.jobTitle,d.classList.add("speaker_title"),t[_].metafields.photo?o.src="https://app.mobile360series.com/M360/"+t[_].metafields.photo:o.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",t[_].thumbnail&&(o.src=t[_].thumbnail),c.appendChild(o),e.appendChild(c),e.appendChild(i),e.appendChild(d),e.appendChild(l);var g=Math.floor(_/a);e.expand_i=g,e.all_data=t[_],h.addEventListener("click",(function(){var e=document.getElementsByClassName("expand_holder active");e.length>0&&e[0].classList.remove("active"),u.classList.remove("selected_speaker"),h.innerHTML=""}));var L=front_core_var.site_url;if(p="",front_core_var.current_lang!==front_core_var.default_lang&&(p="/"+front_core_var.current_lang),v=L+p+"/speaker/"+t[_].post_name,window.links_live){var y=document.createElement("a");y.appendChild(e),v&&(y.href=v),y.classList.add("speaker_single"),y.classList.add("item_single"),u.appendChild(y)}else e.classList.add("speaker_single"),e.classList.add("item_single"),e.addEventListener("click",(function(){u.classList.add("selected_speaker");var t=document.getElementsByClassName("speaker_single active");t.length>0&&t[0].classList.remove("active");var a=document.getElementsByClassName("expand_holder active");a.length>0&&a[0].classList.remove("active");var n=document.getElementsByClassName("expand_holder");for(var i in n)n[i].innerHTML="";e.classList.toggle("active");var l="expand_"+e.expand_i,s=document.getElementsByClassName(l);s[0].classList.add("active"),s[0].innerHTML+="

      "+e.all_data.metafields.firstname+" "+e.all_data.metafields.lastname+"

      "+e.all_data.metafields.companyName+"

      "+e.all_data.metafields.jobTitle+"

      "+e.all_data.post_content+"

      "})),u.appendChild(e);++n!==a&&parseInt(_)!==t.length-1||(h.classList.add("expand_"+g),h.classList.add("expand_holder"),u.appendChild(h),n=0)};for(var _ in t)h();return r.appendChild(u),c}},789:(e,t,a)=>{var n=a(410),i=[],l={},s=5;window.innerWidth<700&&(s=2);var r=function(e,t){var a=document.createElement("div"),n=document.createElement("img");if(n.title=e.post_title,a.classList.add("sponsor_single"),e.thumbnail&&(n.src=e.thumbnail),""!==e.metafields.sponsor_url){var i=document.createElement("a");i.href=e.metafields.sponsor_url,i.appendChild(n),i.target="_blank",n=i}a.appendChild(n);var l=Math.floor(t/s);return a.expand_i=l,a.all_data=e,a};e.exports=function(e){var t=e.data,a=0,d={},o=null;for(var c in i=e.cats[n.sponsor_cat])l[i[c].metafields.cat_order]=i[c];var m=document.createElement("div");for(var p in m.classList.add("sponsors_list"),t.sort((function(e,t){return e.post_title.localeCompare?e.post_title.localeCompare(t.post_title):e.post_title{e.exports=function(e){var t=e.data,a=e.meta,n=document.createElement("div");for(var i in n.classList.add("sponsors_list"),t){var l=document.createElement("div"),s=document.createElement("h6"),r=(document.createElement("p"),document.createElement("p"),document.createElement("img")),d=document.createElement("div"),o=document.createElement("div");if(a&&a[i]&&(s.innerHTML=a[i],s.classList.add("sponsor_name")),t[i].thumbnail?(r.src=t[i].thumbnail,r.title=t[i].post_title,r.alt="",a&&a[i]&&(r.alt=a[i])):r.src=front_core_var.plugin_url+"img/speaker-thumbnail.png",""!==t[i].metafields.sponsor_url){var c=document.createElement("a");c.href=t[i].metafields.sponsor_url,c.appendChild(r),c.target="_blank",r=c}l.classList.add("sponsor_single"),d.classList.add("cont_left"),o.classList.add("cont_right"),d.appendChild(s),o.appendChild(r),l.appendChild(d),l.appendChild(o),n.appendChild(l)}return n}},394:(e,t,a)=>{var n=a(410),i=[],l={},s=5;window.innerWidth<700&&(s=2);var r=function(e,t){var a=document.createElement("div"),n=document.createElement("img");if(n.title=e.post_title,a.classList.add("video_single"),e.thumbnail&&(n.src=e.thumbnail),e.videofields){var i=document.createElement("a");i.href=e.videofields.video_data,i.appendChild(n),i.target="_blank",n=i}a.appendChild(n);var l=Math.floor(t/s);return a.expand_i=l,a.all_data=e,a};e.exports=function(e){var t=e.data,a=0,d={};console.log("VIDEOS!",e);var o=null;for(var c in i=e.cats[n.video_cat])l[i[c].metafields.cat_order]=i[c];var m=document.createElement("div");for(var p in m.classList.add("videos_list"),t.sort((function(e,t){return e.post_title.localeCompare?e.post_title.localeCompare(t.post_title):e.post_title{e.exports={es:{"FILTER BY":"FILTRAR POR","Search The Sessions":"Buscar sesiones",Clear:"Borrar","Search The Speakers":"Buscar oradores",Register:"Registrarse","Watch Again":"Ver nuevamente","Live in {{h}} hours {{m}} minutes":"Vivo en {{h}} horas y {{m}} minutos",Upcoming:"Próximamente","View Session Details":"Ver información de la sesión","Search here...":"Buscar aquí...","Add to Calendar":"Añadir al calendario"},"zh-hans":{"FILTER BY":"过滤","FILTER BY PASS":"按入场证筛选","FILTER BY THEME":"按主题筛选","FILTER BY TRACK":"按活动筛选","Search The Sessions":"搜索会话",Clear:"清除","Search The Speakers":"搜索演讲者","Search here...":"搜索","FILTER BY LOCATION":"按位置筛选","FILTER BY PRODUCT":"按产品筛选",Stand:"展台",Stands:"展台",All:"所有"}}},781:(e,t,a)=>{var n=a(830);e.exports=function(e){var t=front_core_var.current_lang;return n[t]&&n[t][e]?n[t][e]:e}},793:(e,t,a)=>{var n=a(179),i=a(899),l=a(241),s=a(337),r=a(829),d=a(953),o=a(865),c=a(380),m=a(814),p=a(247),v=(a(0),a(579)),u=a(855),h=a(789),_=a(394),f=[];f.session_template_core=n,f.session_template_mwcs=i,f.session_template_mwl=l,f.session_template_four_yfn=s,f.speaker_template=r,f.speaker_template_core=d,f.speaker_template_mwcs=o,f.speaker_template_mwl=c,f.speaker_template_m360=m,f.speaker_template_four_yfn=p,f.exhibitor_template_mwcs=v,f.exhibitor_template_core=u,f.sponsor_template_core=h,f.video_template_core=_,e.exports=function(e){var t=e.id+"";void 0!==e.layout&&e.layout!==e.id+"_default"&&(t=e.layout),console.log("layout = ",t);var a=f[t];if("function"==typeof a)return a(e);var n=document.createElement("p");return n.innerHTML="JavaScript Building. Sass Building. Testing with id: [".concat(e.id,"], layout: [").concat(t,"] . Your custom layout does not exist or configured incorrectly"),n}}},t={};function a(n){var i=t[n];if(void 0!==i)return i.exports;var l=t[n]={exports:{}};return e[n](l,l.exports,a),l.exports}(()=>{"use strict";var e,t=a(410),n=a(793),i=a(628),l=a(122),s=a(135),r=(s.atcb_action,s.atcb_init);function d(e,t){for(var a in e)if(t===e[a].metafields.day_full)return!0;return!1}function o(e){var t=parseInt(e);if(window.thrive_data){var a=document.getElementById(window.thrive_data[t].id);a&&(a.innerHTML="",a.appendChild(n(window.thrive_data[t])),console.log("started",a,thrive_data[t]),"session_template_mwcs"===thrive_data[t].layout&&window.sessionFilterBySearch&&window.sessionFilterBySearch())}}window.addEventListener("load",(function(a){!function(){if(void 0!==window.thrive_data)for(var a in window.thrive_data)window.thrive_data[a].timezone&&"session_template"===window.thrive_data[a].id?(e=a,fetch(front_core_var.site_url+"?time_server&timezone="+window.thrive_data[a].timezone+"×tamp="+l()).then((function(e){return e.json()})).then((function(a){var n=a;console.log("server time",n),window.thrive_data[e].server_time=n,d(window.thrive_data[e].cats[t.day],n.current_timezone_date.split(" ")[0])&&i(thrive_data,e,n),o(e),r()}))):(o(a),r())}()})),window.addEventListener("focus",(function(t){o(e),r()})),window.addEventListener("load",(function(){window.sessionFilterBySearch()}))})()})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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YXItYnV0dG9uL25wbV9kaXN0L2Nqcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL2FkZFRvQ2FsZW5kYXIuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy9jYXRlZ29yaWVzRmlsdGVyLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL2NvbXBvbmVudHMvY291bnRlckNoZWNrLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL2NvbXBvbmVudHMvY291bnRlclRvTGl2ZS5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL2V4aGliaXRvckNhdGVnb3JpZXNGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy9leHRyYWN0VmlkZW9JZC5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL2dldE1lZGlhZGF0YS5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL2dldFNlc3NEYXRlcy5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL2dldFNpbmdsZVNlc3Npb24uanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy9nZXRUb2RheVN0cmluZy5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL3BsYXlJZnJhbWVVcmwuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy9wbGF5WW9zcGFjZVZpZGVvSWQuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy9wbGF5WW9zcGFjZVZpZGVvVXJsLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL2NvbXBvbmVudHMvc2VhcmNoRmlsdGVyRXhoaWJpdG9ycy5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb21wb25lbnRzL3NlYXJjaEZpbHRlckl0ZW1zLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL2NvbXBvbmVudHMvc2VhcmNoRmlsdGVyU2Vzc2lvbnMuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy9zZXNzaW9uQ2F0ZWdvcmllc0ZpbHRlck1XQ1MuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvY29tcG9uZW50cy93cEJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL2V4aGliaXRvcl90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90ZW1wbGF0ZXMvZXhoaWJpdG9yX3RlbXBsYXRlX2NvcmUuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL2V4aGliaXRvcl90ZW1wbGF0ZV9td2NzLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL3RlbXBsYXRlcy9zZXNzaW9uX3RlbXBsYXRlX2NvcmUuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL3Nlc3Npb25fdGVtcGxhdGVfZm91cl95Zm4uanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL3Nlc3Npb25fdGVtcGxhdGVfbXdjcy5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90ZW1wbGF0ZXMvc2Vzc2lvbl90ZW1wbGF0ZV9td2wuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGVfY29yZS5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90ZW1wbGF0ZXMvc3BlYWtlcl90ZW1wbGF0ZV9leHBhbmQuanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGVfZm91cl95Zm4uanMiLCJ3ZWJwYWNrOi8vcGx1Z2luX2RlZmF1bHQvLi9zcmMvanMvdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGVfbTM2MC5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90ZW1wbGF0ZXMvc3BlYWtlcl90ZW1wbGF0ZV9td2NzLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL3RlbXBsYXRlcy9zcGVha2VyX3RlbXBsYXRlX213bC5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90ZW1wbGF0ZXMvc3BvbnNvcl90ZW1wbGF0ZV9jb3JlLmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL3RlbXBsYXRlcy9zcG9uc29yX3RlbXBsYXRlX2V4cGFuZC5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90ZW1wbGF0ZXMvdmlkZW9fdGVtcGxhdGVfY29yZS5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy90cmFuc2xhdGlvbl9saXN0LmpzIiwid2VicGFjazovL3BsdWdpbl9kZWZhdWx0Ly4vc3JjL2pzL3RyYW5zbGF0aW9ucy5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy91dGlscy5qcyIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9wbHVnaW5fZGVmYXVsdC8uL3NyYy9qcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICsrKysrKysrKysrKysrKysrKysrKytcbiAqIEFkZC10by1DYWxlbmRhciBCdXR0b25cbiAqICsrKysrKysrKysrKysrKysrKysrKytcbiAqL1xuY29uc3QgYXRjYlZlcnNpb24gPSAnMS4xMS4zJztcbi8qIENyZWF0b3I6IEplbnMgS3VlcnNjaG5lciAoaHR0cHM6Ly9qZW5za3VlcnNjaG5lci5kZSlcbiAqIFByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9qZWt1ZXIvYWRkLXRvLWNhbGVuZGFyLWJ1dHRvblxuICogTGljZW5zZTogTUlUIHdpdGgg4oCcQ29tbW9ucyBDbGF1c2XigJ0gTGljZW5zZSBDb25kaXRpb24gdjEuMFxuICpcbiAqL1xuXG4vLyBDSEVDS0lORyBGT1IgU1BFQ0lGSUMgREVWSUNFRCBBTkQgU1lTVEVNU1xuLy8gYnJvd3NlclxuY29uc3QgaXNCcm93c2VyID0gbmV3IEZ1bmN0aW9uKCd0cnkgeyByZXR1cm4gdGhpcz09PXdpbmRvdzsgfWNhdGNoKGUpeyByZXR1cm4gZmFsc2U7IH0nKTtcbi8vIGlPU1xuY29uc3QgaXNpT1MgPSBpc0Jyb3dzZXIoKVxuICA/IG5ldyBGdW5jdGlvbihcbiAgICAgIFwiaWYgKCgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci52ZW5kb3IgfHwgd2luZG93Lm9wZXJhKSAmJiAhd2luZG93Lk1TU3RyZWFtKSB8fCAobmF2aWdhdG9yLnBsYXRmb3JtID09PSAnTWFjSW50ZWwnICYmIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDEpKXsgcmV0dXJuIHRydWU7IH1lbHNleyByZXR1cm4gZmFsc2U7IH1cIlxuICAgIClcbiAgOiBuZXcgRnVuY3Rpb24oJ3JldHVybiBmYWxzZTsnKTtcbi8vIEluc3RhZ3JhbVxuY29uc3QgaXNJbnN0YWdyYW0gPSBpc0Jyb3dzZXIoKVxuICA/IG5ldyBGdW5jdGlvbihcbiAgICAgICdpZiAoL0luc3RhZ3JhbS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci52ZW5kb3IgfHwgd2luZG93Lm9wZXJhKSl7IHJldHVybiB0cnVlOyB9ZWxzZXsgcmV0dXJuIGZhbHNlOyB9J1xuICAgIClcbiAgOiBuZXcgRnVuY3Rpb24oJ3JldHVybiBmYWxzZTsnKTtcblxuLy8gSU5JVElBTElaRSBUSEUgU0NSSVBUIEFORCBGVU5DVElPTkFMSVRZXG5mdW5jdGlvbiBhdGNiX2luaXQoKSB7XG4gIC8vIGxldCdzIGdldCBzdGFydGVkXG4gIGNvbnNvbGUubG9nKCdhZGQtdG8tY2FsZW5kYXIgYnV0dG9uIGluaXRpYWxpemVkICh2ZXJzaW9uICcgKyBhdGNiVmVyc2lvbiArICcpJyk7XG4gIGNvbnNvbGUubG9nKCdTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pla3Vlci9hZGQtdG8tY2FsZW5kYXItYnV0dG9uIGZvciBkZXRhaWxzJyk7XG4gIC8vIGdldCBhbGwgcGxhY2Vob2xkZXJzXG4gIGNvbnN0IGF0Y0J1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXRjYicpO1xuICAvLyBpZiB0aGVyZSBhcmUgc29tZSwgbW92ZSBvblxuICBpZiAoYXRjQnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgLy8gZ2V0IHRoZSBhbW91bnQgb2YgYWxyZWFkeSBpbml0aWFsaXplZCBvbmVzIGZpcnN0XG4gICAgY29uc3QgYXRjQnV0dG9uc0luaXRpYWxpemVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmF0Y2ItaW5pdGlhbGl6ZWQnKTtcbiAgICAvLyBnZW5lcmF0ZSB0aGUgYnV0dG9ucyBvbmUgYnkgb25lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdGNCdXR0b25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBza2lwIGFscmVhZHkgaW5pdGlhbGl6ZWQgb25lc1xuICAgICAgaWYgKGF0Y0J1dHRvbnNbcGFyc2VJbnQoaSldLmNsYXNzTGlzdC5jb250YWlucygnYXRjYi1pbml0aWFsaXplZCcpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IEpTT04gZnJvbSBIVE1MIGJsb2NrLCBidXQgcmVtb3ZlIHJlYWwgY29kZSBsaW5lIGJyZWFrcyBiZWZvcmUgcGFyc2luZy5cbiAgICAgIC8vIHVzZSA8YnI+IG9yIFxcbiBleHBsaWNpdGVseSBpbiB0aGUgZGVzY3JpcHRpb24gdG8gY3JlYXRlIGEgbGluZSBicmVhay5cbiAgICAgIC8vIGFsc28gc3RyaXAgSFRNTCB0YWdzIChlc3BlY2lhbGx5IHNpbmNlIHN0dXBpZCBTYWZhcmkgYWRkcyBzdHVmZikuXG4gICAgICBsZXQgYXRjYkNvbmZpZyA9IEpTT04ucGFyc2UoXG4gICAgICAgIGF0Y0J1dHRvbnNbcGFyc2VJbnQoaSldLmlubmVySFRNTC5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2csICcnKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwgJycpXG4gICAgICApO1xuICAgICAgLy8gcmV3cml0ZSBjb25maWcgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IC0geW91IGNhbiByZW1vdmUgdGhpcywgaWYgeW91IGRpZCBub3QgdXNlIHRoaXMgc2NyaXB0IGJlZm9yZSB2MS40LjAuXG4gICAgICBhdGNiQ29uZmlnID0gYXRjYl9wYXRjaF9jb25maWcoYXRjYkNvbmZpZyk7XG4gICAgICAvLyBjaGVjaywgaWYgYWxsIHJlcXVpcmVkIGRhdGEgaXMgYXZhaWxhYmxlXG4gICAgICBpZiAoYXRjYl9jaGVja19yZXF1aXJlZChhdGNiQ29uZmlnKSkge1xuICAgICAgICAvLyBSZXdyaXRlIGR5bmFtaWMgZGF0ZXMsIHN0YW5kYXJkaXplIGxpbmUgYnJlYWtzIGFuZCB0cmFuc2Zvcm0gdXJscyBpbiB0aGUgZGVzY3JpcHRpb25cbiAgICAgICAgYXRjYkNvbmZpZyA9IGF0Y2JfZGVjb3JhdGVfZGF0YShhdGNiQ29uZmlnKTtcbiAgICAgICAgLy8gdmFsaWRhdGUgdGhlIGNvbmZpZyAoSlNPTiBpcHV0KSAuLi5cbiAgICAgICAgaWYgKGF0Y2JfdmFsaWRhdGUoYXRjYkNvbmZpZykpIHtcbiAgICAgICAgICAvLyAuLi4gYW5kIGdlbmVyYXRlIHRoZSBidXR0b24gb24gc3VjY2Vzc1xuICAgICAgICAgIC8vIHNldCBpZGVudGlmaWVyXG4gICAgICAgICAgaWYgKGF0Y2JDb25maWcuaWRlbnRpZmllciA9PSBudWxsIHx8IGF0Y2JDb25maWcuaWRlbnRpZmllciA9PSAnJykge1xuICAgICAgICAgICAgYXRjYkNvbmZpZy5pZGVudGlmaWVyID0gJ2F0Y2ItYnRuLScgKyAoaSArIGF0Y0J1dHRvbnNJbml0aWFsaXplZC5sZW5ndGggKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZ2VuZXJhdGUgdGhlIGJ1dHRvblxuICAgICAgICAgIGF0Y2JfZ2VuZXJhdGUoYXRjQnV0dG9uc1twYXJzZUludChpKV0sIGF0Y2JDb25maWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEJBQ0tXQVJEUyBDT01QQVRJQklMSVRZIFJFV1JJVEUgLSB5b3UgY2FuIHJlbW92ZSB0aGlzLCBpZiB5b3UgZGlkIG5vdCB1c2UgdGhpcyBzY3JpcHQgYmVmb3JlIHYxLjQuMC5cbmZ1bmN0aW9uIGF0Y2JfcGF0Y2hfY29uZmlnKGF0Y2JDb25maWcpIHtcbiAgY29uc3Qga2V5Q2hhbmdlcyA9IHtcbiAgICB0aXRsZTogJ25hbWUnLFxuICAgIGRhdGVTdGFydDogJ3N0YXJ0RGF0ZScsXG4gICAgZGF0ZUVuZDogJ2VuZERhdGUnLFxuICAgIHRpbWVTdGFydDogJ3N0YXJ0VGltZScsXG4gICAgdGltZUVuZDogJ2VuZFRpbWUnLFxuICB9O1xuICBPYmplY3Qua2V5cyhrZXlDaGFuZ2VzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoYXRjYkNvbmZpZ1trZXlDaGFuZ2VzW2Ake2tleX1gXV0gPT0gbnVsbCAmJiBhdGNiQ29uZmlnW2Ake2tleX1gXSAhPSBudWxsKSB7XG4gICAgICBhdGNiQ29uZmlnW2tleUNoYW5nZXNbYCR7a2V5fWBdXSA9IGF0Y2JDb25maWdbYCR7a2V5fWBdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGNiQ29uZmlnO1xufVxuXG4vLyBDTEVBTiBEQVRBIEJFRk9SRSBGVVJUSEVSIFZBTElEQVRJT04gKENPTlNJREVSSU5HIFNQRUNJQUwgUlVMRVMgQU5EIFNDSEVNRVMpXG5mdW5jdGlvbiBhdGNiX2RlY29yYXRlX2RhdGEoYXRjYkNvbmZpZykge1xuICAvLyBjbGVhbnVwIGRpZmZlcmVudCBkYXRlLXRpbWUgZm9ybWF0c1xuICBhdGNiQ29uZmlnID0gYXRjYl9kYXRlX2NsZWFudXAoYXRjYkNvbmZpZyk7XG4gIC8vIGNhbGN1bGF0ZSB0aGUgcmVhbCBkYXRlIHZhbHVlcyBpbiBjYXNlIHRoYXQgdGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBydWxlcyBpbmNsdWRlZCAoZS5nLiBhZGRpbmcgZGF5cyBkeW5hbWljYWxseSlcbiAgYXRjYkNvbmZpZy5zdGFydERhdGUgPSBhdGNiX2RhdGVfY2FsY3VsYXRpb24oYXRjYkNvbmZpZy5zdGFydERhdGUpO1xuICBhdGNiQ29uZmlnLmVuZERhdGUgPSBhdGNiX2RhdGVfY2FsY3VsYXRpb24oYXRjYkNvbmZpZy5lbmREYXRlKTtcbiAgLy8gZm9yY2UgY2xpY2sgdHJpZ2dlciBvbiBtb2RhbCBzdHlsZVxuICBpZiAoYXRjYkNvbmZpZy5saXN0U3R5bGUgPT09ICdtb2RhbCcpIHtcbiAgICBhdGNiQ29uZmlnLnRyaWdnZXIgPSAnY2xpY2snO1xuICB9XG4gIC8vIHNldCBsYW5ndWFnZSBpZiBub3Qgc2V0XG4gIGlmIChhdGNiQ29uZmlnLmxhbmd1YWdlID09IG51bGwgfHwgYXRjYkNvbmZpZy5sYW5ndWFnZSA9PSAnJykge1xuICAgIGF0Y2JDb25maWcubGFuZ3VhZ2UgPSAnZW4nO1xuICB9XG4gIC8vIGZvcm1hdCBSUlVMRSAocmVtb3ZlIHNwYWNlcylcbiAgaWYgKGF0Y2JDb25maWcucmVjdXJyZW5jZSAhPSBudWxsICYmIGF0Y2JDb25maWcucmVjdXJyZW5jZSAhPSAnJykge1xuICAgIGF0Y2JDb25maWcucmVjdXJyZW5jZSA9IGF0Y2JDb25maWcucmVjdXJyZW5jZS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgfVxuXG4gIC8vIGlmIG5vIGRlc2NyaXB0aW9uIG9yIGFscmVhZHkgZGVjb3JhdGVkLCByZXR1cm4gZWFybHkgaGVyZVxuICBpZiAoIWF0Y2JDb25maWcuZGVzY3JpcHRpb24gfHwgYXRjYkNvbmZpZy5kZXNjcmlwdGlvbkh0bWxGcmVlKSByZXR1cm4gYXRjYkNvbmZpZztcblxuICAvLyBtYWtlIGEgY29weSBvZiB0aGUgZ2l2ZW4gYXJndW1lbnQgcmF0aGVyIHRoYW4gbXV0YXRpbmcgaW4gcGxhY2VcbiAgY29uc3QgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGF0Y2JDb25maWcpO1xuICAvLyBzdGFuZGFyZGl6ZSBhbnkgbGluZSBicmVha3MgaW4gdGhlIGRlc2NyaXB0aW9uIGFuZCB0cmFuc2Zvcm0gVVJMcyAoYnV0IGtlZXAgYSBjbGVhbiBjb3B5IHdpdGhvdXQgdGhlIFVSTCBtYWdpYyBmb3IgaUNhbClcbiAgZGF0YS5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb24ucmVwbGFjZSgvPGJyXFxzKlxcLz8+L2dpLCAnXFxuJyk7XG4gIGRhdGEuZGVzY3JpcHRpb25IdG1sRnJlZSA9IGRhdGEuZGVzY3JpcHRpb25cbiAgICAucmVwbGFjZSgvXFxbdXJsXFxdL2dpLCAnJylcbiAgICAucmVwbGFjZSgvKFxcfC4qKVxcW1xcL3VybFxcXS9naSwgJycpXG4gICAgLnJlcGxhY2UoL1xcW1xcL3VybFxcXS9naSwgJycpO1xuICBkYXRhLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbi5yZXBsYWNlKFxuICAgIC9cXFt1cmxcXF0oW1xcdyYkKy4sOjs9fiEqJz9AXiUjfFxcc1xcLSgpL10qKVxcW1xcL3VybFxcXS9naSxcbiAgICBmdW5jdGlvbiAobWF0Y2gsIHAxKSB7XG4gICAgICBjb25zdCB1cmxUZXh0ID0gcDEuc3BsaXQoJ3wnKTtcbiAgICAgIGxldCBsaW5rID0gJzxhIGhyZWY9XCInICsgdXJsVGV4dFswXSArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiPic7XG4gICAgICBpZiAodXJsVGV4dC5sZW5ndGggPiAxICYmIHVybFRleHRbMV0gIT0gJycpIHtcbiAgICAgICAgbGluayArPSB1cmxUZXh0WzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGluayArPSB1cmxUZXh0WzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmsgKyAnPC9hPic7XG4gICAgfVxuICApO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLy8gQ0hFQ0sgRk9SIFJFUVVJUkVEIEZJRUxEU1xuZnVuY3Rpb24gYXRjYl9jaGVja19yZXF1aXJlZChkYXRhKSB7XG4gIC8vIGNoZWNrIGZvciBhdCBsZWFzdCAxIG9wdGlvblxuICBpZiAoZGF0YS5vcHRpb25zID09IG51bGwgfHwgZGF0YS5vcHRpb25zLmxlbmd0aCA8IDEpIHtcbiAgICBjb25zb2xlLmVycm9yKCdhZGQtdG8tY2FsZW5kYXIgYnV0dG9uIGdlbmVyYXRpb24gZmFpbGVkOiBubyBvcHRpb25zIHNldCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBjaGVjayBmb3IgbWluIHJlcXVpcmVkIGRhdGEgKHdpdGhvdXQgXCJvcHRpb25zXCIpXG4gIGNvbnN0IHJlcXVpcmVkRmllbGQgPSBbJ25hbWUnLCAnc3RhcnREYXRlJ107XG4gIHJldHVybiByZXF1aXJlZEZpZWxkLmV2ZXJ5KGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIGlmIChkYXRhW2Ake2ZpZWxkfWBdID09IG51bGwgfHwgZGF0YVtgJHtmaWVsZH1gXSA9PSAnJykge1xuICAgICAgY29uc29sZS5lcnJvcignYWRkLXRvLWNhbGVuZGFyIGJ1dHRvbiBnZW5lcmF0aW9uIGZhaWxlZDogcmVxdWlyZWQgc2V0dGluZyBtaXNzaW5nIFsnICsgZmllbGQgKyAnXScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbi8vIENBTENVTEFURSBBTkQgQ0xFQU4gVVAgVEhFIEFDVFVBTCBEQVRFU1xuZnVuY3Rpb24gYXRjYl9kYXRlX2NsZWFudXAoZGF0YSkge1xuICAvLyBzZXQgZW5kRGF0ZSA9IHN0YXJ0RGF0ZSwgaWYgbm90IHByb3ZpZGVkXG4gIGlmICgoZGF0YS5lbmREYXRlID09IG51bGwgfHwgZGF0YS5lbmREYXRlID09ICcnKSAmJiBkYXRhLnN0YXJ0RGF0ZSAhPSBudWxsKSB7XG4gICAgZGF0YS5lbmREYXRlID0gZGF0YS5zdGFydERhdGU7XG4gIH1cbiAgLy8gcGFyc2UgZGF0ZSt0aW1lIGZvcm1hdCAodW5vZmZpY2lhbCBhbHRlcm5hdGl2ZSB0byB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbilcbiAgY29uc3QgZW5kcG9pbnRzID0gWydzdGFydCcsICdlbmQnXTtcbiAgZW5kcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgaWYgKGRhdGFbcG9pbnQgKyAnRGF0ZSddICE9IG51bGwpIHtcbiAgICAgIC8vIHJlbW92ZSBhbnkgbWlsbGlzZWNvbmRzIGluZm9ybWF0aW9uXG4gICAgICBkYXRhW3BvaW50ICsgJ0RhdGUnXSA9IGRhdGFbcG9pbnQgKyAnRGF0ZSddLnJlcGxhY2UoL1xcLlxcZHszfS8sICcnKS5yZXBsYWNlKCdaJywgJycpO1xuICAgICAgLy8gaWRlbnRpZnkgYSBwb3NzaWJsZSB0aW1lIGluZm9ybWF0aW9uIHdpdGhpbiB0aGUgZGF0ZSBzdHJpbmdcbiAgICAgIGNvbnN0IHRtcFNwbGl0U3RhcnREYXRlID0gZGF0YVtwb2ludCArICdEYXRlJ10uc3BsaXQoJ1QnKTtcbiAgICAgIGlmICh0bXBTcGxpdFN0YXJ0RGF0ZVsxXSAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFbcG9pbnQgKyAnRGF0ZSddID0gdG1wU3BsaXRTdGFydERhdGVbMF07XG4gICAgICAgIGRhdGFbcG9pbnQgKyAnVGltZSddID0gdG1wU3BsaXRTdGFydERhdGVbMV07XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJlbW92ZSBhbnkgc2Vjb25kcyBmcm9tIHRpbWUgaW5mb3JtYXRpb25cbiAgICBpZiAoZGF0YVtwb2ludCArICdUaW1lJ10gIT0gbnVsbCAmJiBkYXRhW3BvaW50ICsgJ1RpbWUnXS5sZW5ndGggPT09IDgpIHtcbiAgICAgIGNvbnN0IHRpbWVTdHIgPSBkYXRhW3BvaW50ICsgJ1RpbWUnXTtcbiAgICAgIGRhdGFbcG9pbnQgKyAnVGltZSddID0gdGltZVN0ci5zdWJzdHJpbmcoMCwgdGltZVN0ci5sZW5ndGggLSAzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gYXRjYl9kYXRlX2NhbGN1bGF0aW9uKGRhdGVTdHJpbmcpIHtcbiAgLy8gcmVwbGFjZSBcInRvZGF5XCIgd2l0aCB0aGUgY3VycmVudCBkYXRlIGZpcnN0XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgdG9kYXlTdHJpbmcgPSB0b2RheS5nZXRVVENNb250aCgpICsgMSArICctJyArIHRvZGF5LmdldFVUQ0RhdGUoKSArICctJyArIHRvZGF5LmdldFVUQ0Z1bGxZZWFyKCk7XG4gIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnJlcGxhY2UoL3RvZGF5L2dpLCB0b2RheVN0cmluZyk7XG4gIC8vIGNoZWNrIGZvciBhbnkgZHluYW1pYyBhZGRpdGlvbnMgYW5kIGFkanVzdFxuICBjb25zdCBkYXRlU3RyaW5nUGFydHMgPSBkYXRlU3RyaW5nLnNwbGl0KCcrJyk7XG4gIGNvbnN0IGRhdGVQYXJ0cyA9IGRhdGVTdHJpbmdQYXJ0c1swXS5zcGxpdCgnLScpO1xuICBsZXQgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGVQYXJ0c1swXSwgZGF0ZVBhcnRzWzFdIC0gMSwgZGF0ZVBhcnRzWzJdKTtcbiAgaWYgKGRhdGVQYXJ0c1swXS5sZW5ndGggPCA0KSB7XG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHZlcnNpb24gPDEuNS4wXG4gICAgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGVQYXJ0c1syXSwgZGF0ZVBhcnRzWzBdIC0gMSwgZGF0ZVBhcnRzWzFdKTtcbiAgfVxuICBpZiAoZGF0ZVN0cmluZ1BhcnRzWzFdICE9IG51bGwgJiYgZGF0ZVN0cmluZ1BhcnRzWzFdID4gMCkge1xuICAgIG5ld0RhdGUuc2V0RGF0ZShuZXdEYXRlLmdldERhdGUoKSArIHBhcnNlSW50KGRhdGVTdHJpbmdQYXJ0c1sxXSkpO1xuICB9XG4gIHJldHVybiAoXG4gICAgbmV3RGF0ZS5nZXRGdWxsWWVhcigpICtcbiAgICAnLScgK1xuICAgICgobmV3RGF0ZS5nZXRNb250aCgpICsgMSA8IDEwID8gJzAnIDogJycpICsgKG5ld0RhdGUuZ2V0TW9udGgoKSArIDEpKSArXG4gICAgJy0nICtcbiAgICAobmV3RGF0ZS5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArXG4gICAgbmV3RGF0ZS5nZXREYXRlKClcbiAgKTtcbn1cblxuLy8gVkFMSURBVEUgVEhFIElOUFVUIERBVEFcbmZ1bmN0aW9uIGF0Y2JfdmFsaWRhdGUoZGF0YSkge1xuICAvLyB2YWxpZGF0ZSBwcmVmaXhcbiAgaWYgKGRhdGEuaWRlbnRpZmllciAhPSBudWxsICYmIGRhdGEuaWRlbnRpZmllciAhPSAnJykge1xuICAgIGlmICghL15bXFx3LV0rJC8udGVzdChkYXRhLmlkZW50aWZpZXIpKSB7XG4gICAgICBkYXRhLmlkZW50aWZpZXIgPSAnJztcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2FkZC10by1jYWxlbmRhciBidXR0b24gZ2VuZXJhdGlvbjogaWRlbnRpZmllciBpbnZhbGlkIC0gdXNpbmcgYXV0byBudW1iZXJzIGluc3RlYWQnKTtcbiAgICB9XG4gIH1cbiAgLy8gdmFsaWRhdGUgZXhwbGljaXQgaWNzIGZpbGVcbiAgaWYgKGRhdGEuaWNzRmlsZSAhPSBudWxsICYmIGRhdGEuaWNzRmlsZSAhPSAnJykge1xuICAgIGlmICghYXRjYl9zZWN1cmVfdXJsKGRhdGEuaWNzRmlsZSwgZmFsc2UpIHx8ICEvXFwuaWNzJC8udGVzdChkYXRhLmljc0ZpbGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdhZGQtdG8tY2FsZW5kYXIgYnV0dG9uIGdlbmVyYXRpb24gZmFpbGVkOiBleHBsaWNpdCBpY3MgZmlsZSBwYXRoIG5vdCB2YWxpZCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyB2YWxpZGF0ZSBvcHRpb25zXG4gIGNvbnN0IG9wdGlvbnMgPSBbJ0FwcGxlJywgJ0dvb2dsZScsICdpQ2FsJywgJ01pY3Jvc29mdDM2NScsICdPdXRsb29rLmNvbScsICdNaWNyb3NvZnRUZWFtcycsICdZYWhvbyddO1xuICBpZiAoXG4gICAgIWRhdGEub3B0aW9ucy5ldmVyeShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBjb25zdCBjbGVhbk9wdGlvbiA9IG9wdGlvbi5zcGxpdCgnfCcpO1xuICAgICAgaWYgKCFvcHRpb25zLmluY2x1ZGVzKGNsZWFuT3B0aW9uWzBdKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdhZGQtdG8tY2FsZW5kYXIgYnV0dG9uIGdlbmVyYXRpb24gZmFpbGVkOiBpbnZhbGlkIG9wdGlvbiBbJyArIGNsZWFuT3B0aW9uWzBdICsgJ10nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHZhbGlkYXRlIGRhdGVcbiAgY29uc3QgZGF0ZXMgPSBbJ3N0YXJ0RGF0ZScsICdlbmREYXRlJ107XG4gIGNvbnN0IG5ld0RhdGUgPSBkYXRlcztcbiAgaWYgKFxuICAgICFkYXRlcy5ldmVyeShmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgaWYgKGRhdGFbYCR7ZGF0ZX1gXS5sZW5ndGggIT09IDEwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FkZC10by1jYWxlbmRhciBidXR0b24gZ2VuZXJhdGlvbiBmYWlsZWQ6IGRhdGUgbWlzc3BlbGxlZCBbLT4gWVlZWS1NTS1ERF0nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0ZVBhcnRzID0gZGF0YVtgJHtkYXRlfWBdLnNwbGl0KCctJyk7XG4gICAgICBpZiAoZGF0ZVBhcnRzLmxlbmd0aCA8IDMgfHwgZGF0ZVBhcnRzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnYWRkLXRvLWNhbGVuZGFyIGJ1dHRvbiBnZW5lcmF0aW9uIGZhaWxlZDogZGF0ZSBtaXNzcGVsbGVkIFsnICsgZGF0ZSArICc6ICcgKyBkYXRhW2Ake2RhdGV9YF0gKyAnXSdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbmV3RGF0ZVtgJHtkYXRlfWBdID0gbmV3IERhdGUoZGF0ZVBhcnRzWzBdLCBkYXRlUGFydHNbMV0gLSAxLCBkYXRlUGFydHNbMl0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHZhbGlkYXRlIHRpbWVcbiAgY29uc3QgdGltZXMgPSBbJ3N0YXJ0VGltZScsICdlbmRUaW1lJ107XG4gIGlmIChcbiAgICAhdGltZXMuZXZlcnkoZnVuY3Rpb24gKHRpbWUpIHtcbiAgICAgIGlmIChkYXRhW2Ake3RpbWV9YF0gIT0gbnVsbCkge1xuICAgICAgICBpZiAoZGF0YVtgJHt0aW1lfWBdLmxlbmd0aCAhPT0gNSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FkZC10by1jYWxlbmRhciBidXR0b24gZ2VuZXJhdGlvbiBmYWlsZWQ6IHRpbWUgbWlzc3BlbGxlZCBbLT4gSEg6TU1dJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0cyA9IGRhdGFbYCR7dGltZX1gXS5zcGxpdCgnOicpO1xuICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgdGltZSBwYXJ0c1xuICAgICAgICBpZiAodGltZVBhcnRzLmxlbmd0aCA8IDIgfHwgdGltZVBhcnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ2FkZC10by1jYWxlbmRhciBidXR0b24gZ2VuZXJhdGlvbiBmYWlsZWQ6IHRpbWUgbWlzc3BlbGxlZCBbJyArXG4gICAgICAgICAgICAgIHRpbWUgK1xuICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgZGF0YVtgJHt0aW1lfWBdICtcbiAgICAgICAgICAgICAgJ10nXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVQYXJ0c1swXSA+IDIzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdhZGQtdG8tY2FsZW5kYXIgYnV0dG9uIGdlbmVyYXRpb24gZmFpbGVkOiB0aW1lIG1pc3NwZWxsZWQgLSBob3VycyBudW1iZXIgdG9vIGhpZ2ggWycgK1xuICAgICAgICAgICAgICB0aW1lICtcbiAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgIHRpbWVQYXJ0c1swXSArXG4gICAgICAgICAgICAgICddJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lUGFydHNbMV0gPiA1OSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnYWRkLXRvLWNhbGVuZGFyIGJ1dHRvbiBnZW5lcmF0aW9uIGZhaWxlZDogdGltZSBtaXNzcGVsbGVkIC0gbWludXRlcyBudW1iZXIgdG9vIGhpZ2ggWycgK1xuICAgICAgICAgICAgICB0aW1lICtcbiAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgIHRpbWVQYXJ0c1sxXSArXG4gICAgICAgICAgICAgICddJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgZGF0ZSB3aXRoIHRoZSB0aW1lIGZvciBmdXJ0aGVyIHZhbGlkYXRpb24gc3RlcHNcbiAgICAgICAgaWYgKHRpbWUgPT0gJ3N0YXJ0VGltZScpIHtcbiAgICAgICAgICBuZXdEYXRlLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgbmV3RGF0ZS5zdGFydERhdGUuZ2V0VGltZSgpICsgdGltZVBhcnRzWzBdICogMzYwMDAwMCArIHRpbWVQYXJ0c1sxXSAqIDYwMDAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZSA9PSAnZW5kVGltZScpIHtcbiAgICAgICAgICBuZXdEYXRlLmVuZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIG5ld0RhdGUuZW5kRGF0ZS5nZXRUaW1lKCkgKyB0aW1lUGFydHNbMF0gKiAzNjAwMDAwICsgdGltZVBhcnRzWzFdICogNjAwMDBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKChkYXRhLnN0YXJ0VGltZSAhPSBudWxsICYmIGRhdGEuZW5kVGltZSA9PSBudWxsKSB8fCAoZGF0YS5zdGFydFRpbWUgPT0gbnVsbCAmJiBkYXRhLmVuZFRpbWUgIT0gbnVsbCkpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ2FkZC10by1jYWxlbmRhciBidXR0b24gZ2VuZXJhdGlvbiBmYWlsZWQ6IGlmIHlvdSBzZXQgYSBzdGFydGluZyB0aW1lLCB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSBhbiBlbmQgdGltZSdcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyB2YWxpZGF0ZSB3aGV0aGVyIGVuZCBpcyBub3QgYmVmb3JlIHN0YXJ0XG4gIGlmIChuZXdEYXRlLmVuZERhdGUgPCBuZXdEYXRlLnN0YXJ0RGF0ZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2FkZC10by1jYWxlbmRhciBidXR0b24gZ2VuZXJhdGlvbiBmYWlsZWQ6IGVuZCBkYXRlIGJlZm9yZSBzdGFydCBkYXRlJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHZhbGlkYXRlIGFueSBnaXZlbiBSUlVMRSAob3IgcmVzcGVjdGl2ZSBvdGhlciBwYXJhbWV0ZXJzKVxuICBpZiAoZGF0YS5yZWN1cnJlbmNlICE9IG51bGwgJiYgZGF0YS5yZWN1cnJlbmNlICE9ICcnKSB7XG4gICAgaWYgKCEvXltcXHc9OzoqKy0vXFxcXF0rJC8udGVzdChkYXRhLnJlY3VycmVuY2UpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdhZGQtdG8tY2FsZW5kYXIgYnV0dG9uIGdlbmVyYXRpb24gZmFpbGVkOiBSUlVMRSBkYXRhIG1pc3NwZWxsZWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gb24gcGFzc2luZyB0aGUgdmFsaWRhdGlvbiwgcmV0dXJuIHRydWVcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIEdFTkVSQVRFIFRIRSBBQ1RVQUwgQlVUVE9OXG4vLyBoZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGxhYmVscyBmb3IgdGhlIGJ1dHRvbiBhbmQgbGlzdCBvcHRpb25zXG5mdW5jdGlvbiBhdGNiX2dlbmVyYXRlX2xhYmVsKGRhdGEsIHBhcmVudCwgdHlwZSwgaWNvbiA9IGZhbHNlLCB0ZXh0ID0gJycsIG9uZU9wdGlvbiA9IGZhbHNlKSB7XG4gIGxldCBkZWZhdWx0VHJpZ2dlclRleHQgPSBhdGNiX3RyYW5zbGF0ZSgnQWRkIHRvIENhbGVuZGFyJywgZGF0YS5sYW5ndWFnZSk7XG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgMSBvcHRpb24sIHdlIHVzZSB0aGUgdHJpZ2dlciB0ZXh0IG9uIHRoZSBvcHRpb24gbGFiZWwuIFRoZXJlZm9yZSwgZm9yY2luZyBpdCBoZXJlXG4gIGlmIChvbmVPcHRpb24gJiYgdGV4dCA9PSAnJykge1xuICAgIHRleHQgPSBkZWZhdWx0VHJpZ2dlclRleHQ7XG4gIH1cbiAgbGV0IGljb25TdmcgPSAnJztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnVHJpZ2dlcic6XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChkYXRhLnRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICBhdGNiX2RlYm91bmNlX2xlYWRpbmcoKCkgPT4gYXRjYl90b2dnbGUoZGF0YSwgcGFyZW50LCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAndG91Y2hzdGFydCcsXG4gICAgICAgICAgYXRjYl9kZWJvdW5jZV9sZWFkaW5nKCgpID0+IGF0Y2JfdG9nZ2xlKGRhdGEsIHBhcmVudCwgZmFsc2UsIHRydWUpKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ21vdXNlZW50ZXInLFxuICAgICAgICAgIGF0Y2JfZGVib3VuY2VfbGVhZGluZygoKSA9PiBhdGNiX29wZW4oZGF0YSwgcGFyZW50LCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdpZCcsIGRhdGEuaWRlbnRpZmllcik7XG4gICAgICB0ZXh0ID0gdGV4dCB8fCBkZWZhdWx0VHJpZ2dlclRleHQ7XG4gICAgICBpY29uU3ZnID1cbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTIyLjg4IDEyMi44OFwiPjxwYXRoIGQ9XCJNODEuNjEgNC43M2MwLTIuNjEgMi41OC00LjczIDUuNzctNC43M3M1Ljc3IDIuMTIgNS43NyA0LjczdjIwLjcyYzAgMi42MS0yLjU4IDQuNzMtNS43NyA0Ljczcy01Ljc3LTIuMTItNS43Ny00LjczVjQuNzNoMHptLTMuNjUgNzYuMDNjMS44MyAwIDMuMzIgMS40OSAzLjMyIDMuMzJzLTEuNDkgMy4zMi0zLjMyIDMuMzJsLTEyLjk1LS4wNC0uMDQgMTIuOTNjMCAxLjgzLTEuNDkgMy4zMi0zLjMyIDMuMzJzLTMuMzItMS40OS0zLjMyLTMuMzJsLjA0LTEyLjk0LTEyLjkzLS4wNWMtMS44MyAwLTMuMzItMS40OS0zLjMyLTMuMzJzMS40OS0zLjMyIDMuMzItMy4zMmwxMi45NC4wNC4wNC0xMi45M2MwLTEuODMgMS40OS0zLjMyIDMuMzItMy4zMnMzLjMyIDEuNDkgMy4zMiAzLjMybC0uMDQgMTIuOTUgMTIuOTQuMDRoMHpNMjkuNjEgNC43M2MwLTIuNjEgMi41OC00LjczIDUuNzctNC43M3M1Ljc3IDIuMTIgNS43NyA0LjczdjIwLjcyYzAgMi42MS0yLjU4IDQuNzMtNS43NyA0Ljczcy01Ljc3LTIuMTItNS43Ny00LjczVjQuNzNoMHpNNi40IDQ1LjMyaDExMC4wOFYyMS40N2MwLS44LS4zMy0xLjUzLS44Ni0yLjA3LS41My0uNTMtMS4yNi0uODYtMi4wNy0uODZIMTAzYy0xLjc3IDAtMy4yLTEuNDMtMy4yLTMuMnMxLjQzLTMuMiAzLjItMy4yaDEwLjU1YzIuNTcgMCA0LjkgMS4wNSA2LjU5IDIuNzRzMi43NCA0LjAyIDIuNzQgNi41OXYyNy4wNiA2NS4wM2MwIDIuNTctMS4wNSA0LjktMi43NCA2LjU5cy00LjAyIDIuNzQtNi41OSAyLjc0SDkuMzNjLTIuNTcgMC00LjktMS4wNS02LjU5LTIuNzQtMS42OS0xLjctMi43NC00LjAzLTIuNzQtNi42VjQ4LjUzIDIxLjQ3YzAtMi41NyAxLjA1LTQuOSAyLjc0LTYuNTlzNC4wMi0yLjc0IDYuNTktMi43NEgyMC42YzEuNzcgMCAzLjIgMS40MyAzLjIgMy4ycy0xLjQzIDMuMi0zLjIgMy4ySDkuMzNjLS44IDAtMS41My4zMy0yLjA3Ljg2LS41My41My0uODYgMS4yNi0uODYgMi4wN3YyMy44NWgwem0xMTAuMDggNi40MUg2LjR2NjEuODJjMCAuOC4zMyAxLjUzLjg2IDIuMDcuNTMuNTMgMS4yNi44NiAyLjA3Ljg2aDEwNC4yMmMuOCAwIDEuNTMtLjMzIDIuMDctLjg2LjUzLS41My44Ni0xLjI2Ljg2LTIuMDdWNTEuNzNoMHpNNTAuNDMgMTguNTRjLTEuNzcgMC0zLjItMS40My0zLjItMy4yczEuNDMtMy4yIDMuMi0zLjJoMjEuNDljMS43NyAwIDMuMiAxLjQzIDMuMiAzLjJzLTEuNDMgMy4yLTMuMiAzLjJINTAuNDNoMHpcIi8+PC9zdmc+JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0FwcGxlJzpcbiAgICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICBhdGNiX2RlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICBvbmVPcHRpb24gPyBwYXJlbnQuYmx1cigpIDogYXRjYl9jbG9zZSgpO1xuICAgICAgICAgIGF0Y2JfZ2VuZXJhdGVfaWNhbChkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdpZCcsIGRhdGEuaWRlbnRpZmllciArICctYXBwbGUnKTtcbiAgICAgIHRleHQgPSB0ZXh0IHx8ICdBcHBsZSc7XG4gICAgICBpY29uU3ZnID1cbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNjRcIiBoZWlnaHQ9XCI2NFwiIHNoYXBlLXJlbmRlcmluZz1cImdlb21ldHJpY1ByZWNpc2lvblwiIGltYWdlLXJlbmRlcmluZz1cIm9wdGltaXplUXVhbGl0eVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiB2aWV3Qm94PVwiMCAwIDY0MCA2NDBcIj48cGF0aCBkPVwiTTQ5NC43ODIgMzQwLjAyYy0uODAzLTgxLjAyNSA2Ni4wODQtMTE5LjkwNyA2OS4wNzItMTIxLjgzMi0zNy41OTUtNTQuOTkzLTk2LjE2Ny02Mi41NTItMTE3LjAzNy02My40MDItNDkuODQzLTUuMDMyLTk3LjI0MiAyOS4zNjItMTIyLjU2NSAyOS4zNjItMjUuMjUzIDAtNjQuMjc3LTI4LjYwNy0xMDUuNjA0LTI3Ljg1LTU0LjMyLjgwMy0xMDQuNCAzMS41OTQtMTMyLjQwMyA4MC4yNDVDMjkuODEgMzM0LjQ1NyA3MS44MSA0NzkuNTggMTI2LjgxNiA1NTguOTc2YzI2Ljg3IDM4Ljg4MiA1OC45MTQgODIuNTYgMTAwLjk5NyA4MSA0MC41MTItMS41OTQgNTUuODQzLTI2LjI0NCAxMDQuODQ4LTI2LjI0NCA0OC45OTMgMCA2Mi43NTMgMjYuMjQ1IDEwNS42NCAyNS40MDYgNDMuNjA2LS44MDMgNzEuMjMyLTM5LjYzOCA5Ny45MjUtNzguNjUgMzAuODg3LTQ1LjEyIDQzLjU0OC04OC43NSA0NC4zMTYtOTAuOTk0LS45NjktLjQzNy04NS4wMjktMzIuNjM0LTg1Ljg3OS0xMjkuNDM5bC4xMTgtLjAzNXpNNDE0LjIzIDEwMi4xNzhDNDM2LjU1MyA3NS4wOTUgNDUxLjYzNiAzNy41IDQ0Ny41MTQtLjAyNGMtMzIuMTYyIDEuMzExLTcxLjE2MyAyMS40MzctOTQuMjUzIDQ4LjQ4NS0yMC43MjkgMjQuMDEyLTM4LjgzNiA2Mi4yOC0zMy45OTMgOTkuMDM2IDM1LjkxOCAyLjggNzIuNTkxLTE4LjI0OCA5NC45MjYtNDUuMjcybC4wMzYtLjA0N3pcIi8+PC9zdmc+JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0dvb2dsZSc6XG4gICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgYXRjYl9kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgb25lT3B0aW9uID8gcGFyZW50LmJsdXIoKSA6IGF0Y2JfY2xvc2UoKTtcbiAgICAgICAgICBhdGNiX2dlbmVyYXRlX2dvb2dsZShkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdpZCcsIGRhdGEuaWRlbnRpZmllciArICctZ29vZ2xlJyk7XG4gICAgICB0ZXh0ID0gdGV4dCB8fCAnR29vZ2xlJztcbiAgICAgIGljb25TdmcgPVxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMjIuODggMTIyLjg4XCI+PHBhdGggZD1cIk05My43OCAyOS4xSDI5LjF2NjQuNjhoNjQuNjhWMjkuMXpcIiBmaWxsPVwiI2ZmZlwiLz48cGF0aCBkPVwiTTkzLjc4IDEyMi44OGwyOS4xLTI5LjFoLTI5LjF2MjkuMXpcIiBmaWxsPVwiI2Y3MmEyNVwiLz48cGF0aCBkPVwiTTEyMi44OCAyOS4xaC0yOS4xdjY0LjY4aDI5LjFWMjkuMXpcIiBmaWxsPVwiI2ZiYmMwNFwiLz48cGF0aCBkPVwiTTkzLjc4IDkzLjc4SDI5LjF2MjkuMWg2NC42OHYtMjkuMXpcIiBmaWxsPVwiIzM0YTg1M1wiLz48cGF0aCBkPVwiTTAgOTMuNzh2MTkuNGMwIDUuMzYgNC4zNCA5LjcgOS43IDkuN2gxOS40di0yOS4xSDBoMHpcIiBmaWxsPVwiIzE4ODAzOFwiLz48cGF0aCBkPVwiTTEyMi44OCAyOS4xVjkuN2MwLTUuMzYtNC4zNC05LjctOS43LTkuN2gtMTkuNHYyOS4xaDI5LjEgMHpcIiBmaWxsPVwiIzE5NjdkMlwiLz48cGF0aCBkPVwiTTkzLjc4IDBIOS43QzQuMzQgMCAwIDQuMzQgMCA5Ljd2ODQuMDhoMjkuMVYyOS4xaDY0LjY3VjBoLjAxelwiIGZpbGw9XCIjNDI4NWY0XCIvPjxwYXRoIGQ9XCJNNDIuMzcgNzkuMjdjLTIuNDItMS42My00LjA5LTQuMDItNS03LjE3bDUuNjEtMi4zMWMuNTEgMS45NCAxLjQgMy40NCAyLjY3IDQuNTEgMS4yNiAxLjA3IDIuOCAxLjU5IDQuNTkgMS41OSAxLjg0IDAgMy40MS0uNTYgNC43My0xLjY3IDEuMzItMS4xMiAxLjk4LTIuNTQgMS45OC00LjI2IDAtMS43Ni0uNy0zLjItMi4wOS00LjMycy0zLjE0LTEuNjctNS4yMi0xLjY3SDQ2LjR2LTUuNTVoMi45MWMxLjc5IDAgMy4zMS0uNDggNC41NC0xLjQ2IDEuMjMtLjk3IDEuODQtMi4zIDEuODQtMy45OSAwLTEuNS0uNTUtMi43LTEuNjUtMy42cy0yLjQ5LTEuMzUtNC4xOC0xLjM1Yy0xLjY1IDAtMi45Ni40NC0zLjkzIDEuMzJzLTEuNyAyLTIuMTIgMy4yNGwtNS41NS0yLjMxYy43NC0yLjA5IDIuMDktMy45MyA0LjA3LTUuNTJzNC41MS0yLjM5IDcuNTgtMi4zOWMyLjI3IDAgNC4zMi40NCA2LjEzIDEuMzJzMy4yMyAyLjEgNC4yNiAzLjY1YzEuMDMgMS41NiAxLjU0IDMuMzEgMS41NCA1LjI1IDAgMS45OC0uNDggMy42NS0xLjQzIDUuMDMtLjk1IDEuMzctMi4xMyAyLjQzLTMuNTIgMy4xNnYuMzNjMS43OS43NCAzLjM2IDEuOTYgNC41MSAzLjUyIDEuMTcgMS41OCAxLjc2IDMuNDYgMS43NiA1LjY2cy0uNTYgNC4xNi0xLjY3IDUuODhjLTEuMTIgMS43Mi0yLjY2IDMuMDgtNC42MiA0LjA3cy00LjE3IDEuNDktNi42MiAxLjQ5Yy0yLjg0IDAtNS40Ni0uODEtNy44OC0yLjQ1aDAgMHptMzQuNDYtMjcuODRsLTYuMTYgNC40NS0zLjA4LTQuNjcgMTEuMDUtNy45N2g0LjI0djM3LjZoLTYuMDVWNTEuNDNoMHpcIiBmaWxsPVwiIzFhNzNlOFwiLz48L3N2Zz4nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaUNhbCc6XG4gICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgYXRjYl9kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgb25lT3B0aW9uID8gcGFyZW50LmJsdXIoKSA6IGF0Y2JfY2xvc2UoKTtcbiAgICAgICAgICBhdGNiX2dlbmVyYXRlX2ljYWwoZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcGFyZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBkYXRhLmlkZW50aWZpZXIgKyAnLWljYWwnKTtcbiAgICAgIHRleHQgPSB0ZXh0IHx8IGF0Y2JfdHJhbnNsYXRlKCdpQ2FsIEZpbGUnLCBkYXRhLmxhbmd1YWdlKTtcbiAgICAgIGljb25TdmcgPVxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMjIuODggMTIyLjg4XCI+PHBhdGggZD1cIk04MS42MSA0LjczYzAtMi42MSAyLjU4LTQuNzMgNS43Ny00LjczczUuNzcgMi4xMiA1Ljc3IDQuNzN2MjAuNzJjMCAyLjYxLTIuNTggNC43My01Ljc3IDQuNzNzLTUuNzctMi4xMi01Ljc3LTQuNzNWNC43M2gwem0tMTUuNSA5OS4wOGMtLjM0IDAtLjYxLTEuNDMtLjYxLTMuMnMuMjctMy4yLjYxLTMuMkg4MS45Yy4zNCAwIC42MSAxLjQzLjYxIDMuMnMtLjI3IDMuMi0uNjEgMy4ySDY2LjExaDB6TTE1Ljg1IDY3LjA5Yy0uMzQgMC0uNjEtMS40My0uNjEtMy4ycy4yNy0zLjIuNjEtMy4yaDE1Ljc5Yy4zNCAwIC42MSAxLjQzLjYxIDMuMnMtLjI3IDMuMi0uNjEgMy4ySDE1Ljg1aDB6bTI1LjEzIDBjLS4zNCAwLS42MS0xLjQzLS42MS0zLjJzLjI3LTMuMi42MS0zLjJoMTUuNzljLjM0IDAgLjYxIDEuNDMuNjEgMy4ycy0uMjcgMy4yLS42MSAzLjJINDAuOThoMHptMjUuMTMgMGMtLjM0IDAtLjYxLTEuNDMtLjYxLTMuMnMuMjctMy4yLjYxLTMuMkg4MS45Yy4zNCAwIC42MSAxLjQzLjYxIDMuMnMtLjI3IDMuMi0uNjEgMy4ySDY2LjExaDB6bTI1LjE0IDBjLS4zNCAwLS42MS0xLjQzLS42MS0zLjJzLjI3LTMuMi42MS0zLjJoMTUuNzljLjM0IDAgLjYxIDEuNDMuNjEgMy4ycy0uMjcgMy4yLS42MSAzLjJIOTEuMjVoMHptLTc1LjQgMTguMzZjLS4zNCAwLS42MS0xLjQzLS42MS0zLjJzLjI3LTMuMi42MS0zLjJoMTUuNzljLjM0IDAgLjYxIDEuNDMuNjEgMy4ycy0uMjcgMy4yLS42MSAzLjJIMTUuODVoMHptMjUuMTMgMGMtLjM0IDAtLjYxLTEuNDMtLjYxLTMuMnMuMjctMy4yLjYxLTMuMmgxNS43OWMuMzQgMCAuNjEgMS40My42MSAzLjJzLS4yNyAzLjItLjYxIDMuMkg0MC45OGgwem0yNS4xMyAwYy0uMzQgMC0uNjEtMS40My0uNjEtMy4ycy4yNy0zLjIuNjEtMy4ySDgxLjljLjM0IDAgLjYxIDEuNDMuNjEgMy4ycy0uMjcgMy4yLS42MSAzLjJINjYuMTFoMHptMjUuMTQgMGMtLjM0IDAtLjYxLTEuNDMtLjYxLTMuMnMuMjctMy4yLjYxLTMuMmgxNS43OWMuMzQgMCAuNjEgMS40My42MSAzLjJzLS4yNyAzLjItLjYxIDMuMkg5MS4yNWgwem0tNzUuNCAxOC4zNmMtLjM0IDAtLjYxLTEuNDMtLjYxLTMuMnMuMjctMy4yLjYxLTMuMmgxNS43OWMuMzQgMCAuNjEgMS40My42MSAzLjJzLS4yNyAzLjItLjYxIDMuMkgxNS44NWgwem0yNS4xMyAwYy0uMzQgMC0uNjEtMS40My0uNjEtMy4ycy4yNy0zLjIuNjEtMy4yaDE1Ljc5Yy4zNCAwIC42MSAxLjQzLjYxIDMuMnMtLjI3IDMuMi0uNjEgMy4ySDQwLjk4aDB6TTI5LjYxIDQuNzNjMC0yLjYxIDIuNTgtNC43MyA1Ljc3LTQuNzNzNS43NyAyLjEyIDUuNzcgNC43M3YyMC43MmMwIDIuNjEtMi41OCA0LjczLTUuNzcgNC43M3MtNS43Ny0yLjEyLTUuNzctNC43M1Y0LjczaDB6TTYuNCA0NS4zMmgxMTAuMDdWMjEuNDdjMC0uOC0uMzMtMS41My0uODYtMi4wNy0uNTMtLjUzLTEuMjYtLjg2LTIuMDctLjg2SDEwM2MtMS43NyAwLTMuMi0xLjQzLTMuMi0zLjJzMS40My0zLjIgMy4yLTMuMmgxMC41NWMyLjU3IDAgNC45IDEuMDUgNi41OSAyLjc0czIuNzQgNC4wMiAyLjc0IDYuNTl2MjcuMDYgNjUuMDNjMCAyLjU3LTEuMDUgNC45LTIuNzQgNi41OXMtNC4wMiAyLjc0LTYuNTkgMi43NEg5LjMzYy0yLjU3IDAtNC45LTEuMDUtNi41OS0yLjc0LTEuNjktMS43LTIuNzQtNC4wMy0yLjc0LTYuNlY0OC41MiAyMS40N2MwLTIuNTcgMS4wNS00LjkgMi43NC02LjU5czQuMDItMi43NCA2LjU5LTIuNzRIMjAuNmMxLjc3IDAgMy4yIDEuNDMgMy4yIDMuMnMtMS40MyAzLjItMy4yIDMuMkg5LjMzYy0uOCAwLTEuNTMuMzMtMi4wNy44Ni0uNTMuNTMtLjg2IDEuMjYtLjg2IDIuMDd2MjMuODVoMHptMTEwLjA4IDYuNDFINi40djYxLjgyYzAgLjguMzMgMS41My44NiAyLjA3LjUzLjUzIDEuMjYuODYgMi4wNy44NmgxMDQuMjJjLjggMCAxLjUzLS4zMyAyLjA3LS44Ni41My0uNTMuODYtMS4yNi44Ni0yLjA3VjUxLjczaDB6TTUwLjQzIDE4LjU0Yy0xLjc3IDAtMy4yLTEuNDMtMy4yLTMuMnMxLjQzLTMuMiAzLjItMy4yaDIxLjQ5YzEuNzcgMCAzLjIgMS40MyAzLjIgMy4ycy0xLjQzIDMuMi0zLjIgMy4ySDUwLjQzaDB6XCIvPjwvc3ZnPic7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNaWNyb3NvZnRUZWFtcyc6XG4gICAgICBpZiAoZGF0YS5yZWN1cnJlbmNlID09IG51bGwgfHwgZGF0YS5yZWN1cnJlbmNlID09ICcnKSB7XG4gICAgICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgYXRjYl9kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICBvbmVPcHRpb24gPyBwYXJlbnQuYmx1cigpIDogYXRjYl9jbG9zZSgpO1xuICAgICAgICAgICAgYXRjYl9nZW5lcmF0ZV90ZWFtcyhkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50LnJlbW92ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdpZCcsIGRhdGEuaWRlbnRpZmllciArICctbXN0ZWFtcycpO1xuICAgICAgdGV4dCA9IHRleHQgfHwgJ01pY3Jvc29mdCBUZWFtcyc7XG4gICAgICBpY29uU3ZnID1cbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgMjIyOC44MzMgMjA3My4zMzNcIj48ZyBmaWxsPVwiIzUwNTljOVwiPjxwYXRoIGQ9XCJNMTU1NC42MzcgNzc3LjVoNTc1LjcxM2M1NC4zOTEgMCA5OC40ODMgNDQuMDkyIDk4LjQ4MyA5OC40ODN2NTI0LjM5OGMwIDE5OS45MDEtMTYyLjA1MSAzNjEuOTUyLTM2MS45NTIgMzYxLjk1MmgwLTEuNzExYy0xOTkuOTAxLjAyOC0zNjEuOTc1LTE2Mi0zNjIuMDA0LTM2MS45MDF2LS4wNTItNTcxLjQwOWMuMDAxLTI4LjQyNyAyMy4wNDUtNTEuNDcxIDUxLjQ3MS01MS40NzFoMHpcIi8+PGNpcmNsZSBjeD1cIjE5NDMuNzVcIiBjeT1cIjQ0MC41ODNcIiByPVwiMjMzLjI1XCIvPjwvZz48ZyBmaWxsPVwiIzdiODNlYlwiPjxjaXJjbGUgY3g9XCIxMjE4LjA4M1wiIGN5PVwiMzM2LjkxN1wiIHI9XCIzMzYuOTE3XCIvPjxwYXRoIGQ9XCJNMTY2Ny4zMjMgNzc3LjVINzE3LjAxYy01My43NDMgMS4zMy05Ni4yNTcgNDUuOTMxLTk1LjAxIDk5LjY3NnY1OTguMTA1Yy03LjUwNSAzMjIuNTE5IDI0Ny42NTcgNTkwLjE2IDU3MC4xNjcgNTk4LjA1MyAzMjIuNTEtNy44OTMgNTc3LjY3MS0yNzUuNTM0IDU3MC4xNjctNTk4LjA1M1Y4NzcuMTc2YzEuMjQ1LTUzLjc0NS00MS4yNjgtOTguMzQ2LTk1LjAxMS05OS42NzZ6XCIvPjwvZz48cGF0aCBvcGFjaXR5PVwiLjFcIiBkPVwiTTEyNDQgNzc3LjV2ODM4LjE0NWMtLjI1OCAzOC40MzUtMjMuNTQ5IDcyLjk2NC01OS4wOSA4Ny41OTgtMTEuMzE2IDQuNzg3LTIzLjQ3OCA3LjI1NC0zNS43NjUgNy4yNTdINjY3LjYxM2MtNi43MzgtMTcuMTA1LTEyLjk1OC0zNC4yMS0xOC4xNDItNTEuODMzLTE4LjE0NC01OS40NzctMjcuNDAyLTEyMS4zMDctMjcuNDcyLTE4My40OVY4NzcuMDJjLTEuMjQ2LTUzLjY1OSA0MS4xOTgtOTguMTkgOTQuODU1LTk5LjUySDEyNDR6XCIvPjxwYXRoIG9wYWNpdHk9XCIuMlwiIGQ9XCJNMTE5Mi4xNjcgNzc3LjV2ODg5Ljk3OGE5MS44NCA5MS44NCAwIDAgMS03LjI1NyAzNS43NjVjLTE0LjYzNCAzNS41NDEtNDkuMTYzIDU4LjgzMy04Ny41OTggNTkuMDlINjkxLjk3NWMtOC44MTItMTcuMTA1LTE3LjEwNS0zNC4yMS0yNC4zNjItNTEuODMzcy0xMi45NTgtMzQuMjEtMTguMTQyLTUxLjgzM2E2MzEuMjggNjMxLjI4IDAgMCAxLTI3LjQ3Mi0xODMuNDlWODc3LjAyYy0xLjI0Ni01My42NTkgNDEuMTk4LTk4LjE5IDk0Ljg1NS05OS41Mmg0NzUuMzEzelwiLz48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTExOTIuMTY3IDc3Ny41djc4Ni4zMTJjLS4zOTUgNTIuMjIzLTQyLjYzMiA5NC40Ni05NC44NTUgOTQuODU1aC00NDcuODRBNjMxLjI4IDYzMS4yOCAwIDAgMSA2MjIgMTQ3NS4xNzdWODc3LjAyYy0xLjI0Ni01My42NTkgNDEuMTk4LTk4LjE5IDk0Ljg1NS05OS41Mmg0NzUuMzEyelwiLz48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTExNDAuMzMzIDc3Ny41djc4Ni4zMTJjLS4zOTUgNTIuMjIzLTQyLjYzMiA5NC40Ni05NC44NTUgOTQuODU1SDY0OS40NzJBNjMxLjI4IDYzMS4yOCAwIDAgMSA2MjIgMTQ3NS4xNzdWODc3LjAyYy0xLjI0Ni01My42NTkgNDEuMTk4LTk4LjE5IDk0Ljg1NS05OS41Mmg0MjMuNDc4elwiLz48cGF0aCBvcGFjaXR5PVwiLjFcIiBkPVwiTTEyNDQgNTA5LjUyMnYxNjMuMjc1Yy04LjgxMi41MTgtMTcuMTA1IDEuMDM3LTI1LjkxNyAxLjAzN3MtMTcuMTA1LS41MTgtMjUuOTE3LTEuMDM3Yy0xNy40OTYtMS4xNjEtMzQuODQ4LTMuOTM3LTUxLjgzMy04LjI5M2EzMzYuOTIgMzM2LjkyIDAgMCAxLTIzMy4yNS0xOTguMDAzIDI4OC4wMiAyODguMDIgMCAwIDEtMTYuNTg3LTUxLjgzM2gyNTguNjQ4YzUyLjMwNS4xOTggOTQuNjU3IDQyLjU0OSA5NC44NTYgOTQuODU0elwiLz48dXNlIHhsaW5rOmhyZWY9XCIjQ1wiIG9wYWNpdHk9XCIuMlwiLz48dXNlIHhsaW5rOmhyZWY9XCIjQ1wiIG9wYWNpdHk9XCIuMlwiLz48cGF0aCBvcGFjaXR5PVwiLjJcIiBkPVwiTTExNDAuMzMzIDU2MS4zNTV2MTAzLjE0OEEzMzYuOTIgMzM2LjkyIDAgMCAxIDkwNy4wODMgNDY2LjVoMTM4LjM5NWM1Mi4zMDUuMTk5IDk0LjY1NiA0Mi41NTEgOTQuODU1IDk0Ljg1NXpcIi8+PGxpbmVhckdyYWRpZW50IGlkPVwiQVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIHgxPVwiMTk4LjA5OVwiIHkxPVwiMzkyLjI2MVwiIHgyPVwiOTQyLjIzNFwiIHkyPVwiMTY4MS4wNzNcIj48c3RvcCBvZmZzZXQ9XCIwXCIgc3RvcC1jb2xvcj1cIiM1YTYyYzNcIi8+PHN0b3Agb2Zmc2V0PVwiLjVcIiBzdG9wLWNvbG9yPVwiIzRkNTViZFwiLz48c3RvcCBvZmZzZXQ9XCIxXCIgc3RvcC1jb2xvcj1cIiMzOTQwYWJcIi8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPVwidXJsKCNBKVwiIGQ9XCJNOTUuMDEgNDY2LjVoOTUwLjMxMmM1Mi40NzMgMCA5NS4wMSA0Mi41MzggOTUuMDEgOTUuMDF2OTUwLjMxMmMwIDUyLjQ3My00Mi41MzggOTUuMDEtOTUuMDEgOTUuMDFIOTUuMDFjLTUyLjQ3MyAwLTk1LjAxLTQyLjUzOC05NS4wMS05NS4wMVY1NjEuNTFjMC01Mi40NzIgNDIuNTM4LTk1LjAxIDk1LjAxLTk1LjAxelwiLz48cGF0aCBmaWxsPVwiI2ZmZlwiIGQ9XCJNODIwLjIxMSw4MjguMTkzSDYzMC4yNDF2NTE3LjI5N0g1MDkuMjExVjgyOC4xOTNIMzIwLjEyM1Y3MjcuODQ0aDUwMC4wODhWODI4LjE5M3pcIi8+PGRlZnMgPjxwYXRoIGlkPVwiQ1wiIGQ9XCJNMTE5Mi4xNjcgNTYxLjM1NXYxMTEuNDQyYy0xNy40OTYtMS4xNjEtMzQuODQ4LTMuOTM3LTUxLjgzMy04LjI5M2EzMzYuOTIgMzM2LjkyIDAgMCAxLTIzMy4yNS0xOTguMDAzaDE5MC4yMjhjNTIuMzA0LjE5OCA5NC42NTYgNDIuNTUgOTQuODU1IDk0Ljg1NHpcIi8+PC9kZWZzPjwvc3ZnPic7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNaWNyb3NvZnQzNjUnOlxuICAgICAgaWYgKGRhdGEucmVjdXJyZW5jZSA9PSBudWxsIHx8IGRhdGEucmVjdXJyZW5jZSA9PSAnJykge1xuICAgICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAnY2xpY2snLFxuICAgICAgICAgIGF0Y2JfZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgb25lT3B0aW9uID8gcGFyZW50LmJsdXIoKSA6IGF0Y2JfY2xvc2UoKTtcbiAgICAgICAgICAgIGF0Y2JfZ2VuZXJhdGVfbWljcm9zb2Z0KGRhdGEsICczNjUnKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50LnJlbW92ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdpZCcsIGRhdGEuaWRlbnRpZmllciArICctbXMzNjUnKTtcbiAgICAgIHRleHQgPSB0ZXh0IHx8ICdNaWNyb3NvZnQgMzY1JztcbiAgICAgIGljb25TdmcgPVxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNzgwNTAgMzMzMzM0XCIgc2hhcGUtcmVuZGVyaW5nPVwiZ2VvbWV0cmljUHJlY2lzaW9uXCIgaW1hZ2UtcmVuZGVyaW5nPVwib3B0aW1pemVRdWFsaXR5XCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGZpbGw9XCIjZWEzZTIzXCIgZD1cIk0yNzgwNTAgMzA1NTU2bC0yOS0xNlYyODYyN0wxNzg4MDcgMCA0NDggNjY5NzFsLTQ0OCA4NyAyMiAyMDAyMjcgNjA4NjUtMjM4MjFWODA1NTVsMTE3OTIwLTI4MTkzLTE3IDIzOTUxOUwxMjIgMjY3Mjg1bDE3ODY2OCA2NTk3NnY3M2w5OTIzMS0yNzQ2MnYtMzE2elwiLz48L3N2Zz4nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnT3V0bG9vay5jb20nOlxuICAgICAgaWYgKGRhdGEucmVjdXJyZW5jZSA9PSBudWxsIHx8IGRhdGEucmVjdXJyZW5jZSA9PSAnJykge1xuICAgICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAnY2xpY2snLFxuICAgICAgICAgIGF0Y2JfZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgb25lT3B0aW9uID8gcGFyZW50LmJsdXIoKSA6IGF0Y2JfY2xvc2UoKTtcbiAgICAgICAgICAgIGF0Y2JfZ2VuZXJhdGVfbWljcm9zb2Z0KGRhdGEsICdvdXRsb29rJyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudC5yZW1vdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcGFyZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBkYXRhLmlkZW50aWZpZXIgKyAnLW91dGxvb2snKTtcbiAgICAgIHRleHQgPSB0ZXh0IHx8ICdPdXRsb29rLmNvbSc7XG4gICAgICBpY29uU3ZnID1cbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCItMC4xMjk3OTM3MjY5ODEgMCAzMy4yNTE5OTY3MTk0MjEgMzJcIiB3aWR0aD1cIjI1MDBcIiBoZWlnaHQ9XCIyMzk3XCI+PHBhdGggZD1cIk0yOC41OTYgMkgxMS40MDRBMS40MDQgMS40MDQgMCAwIDAgMTAgMy40MDRWNWw5LjY5IDNMMzAgNVYzLjQwNEExLjQwNCAxLjQwNCAwIDAgMCAyOC41OTYgMnpcIiBmaWxsPVwiIzAzNjRiOFwiLz48cGF0aCBkPVwiTTMxLjY1IDE3LjQwNUExMS4zNDEgMTEuMzQxIDAgMCAwIDMyIDE2YS42NjYuNjY2IDAgMCAwLS4zMzMtLjU3NmwtLjAxMy0uMDA4LS4wMDQtLjAwMkwyMC44MTIgOS4yNGExLjQ5OSAxLjQ5OSAwIDAgMC0xLjQ3OS0uMDgzIDEuNDkgMS40OSAwIDAgMC0uMTQ1LjA4Mkw4LjM1IDE1LjQxNWwtLjAwNC4wMDItLjAxMi4wMDdBLjY2Ni42NjYgMCAwIDAgOCAxNmExMS4zNDQgMTEuMzQ0IDAgMCAwIC4zNSAxLjQwNWwxMS40OTIgOC40MDV6XCIgZmlsbD1cIiMwYTI3NjdcIi8+PHBhdGggZD1cIk0yNCA1aC03bC0yLjAyMSAzTDE3IDExbDcgNmg2di02elwiIGZpbGw9XCIjMjhhOGVhXCIvPjxwYXRoIGQ9XCJNMTAgNWg3djZoLTd6XCIgZmlsbD1cIiMwMDc4ZDRcIi8+PHBhdGggZD1cIk0yNCA1aDZ2NmgtNnpcIiBmaWxsPVwiIzUwZDlmZlwiLz48cGF0aCBkPVwiTTI0IDE3bC03LTZoLTd2Nmw3IDYgMTAuODMyIDEuNzY4elwiIGZpbGw9XCIjMDM2NGI4XCIvPjxwYXRoIGQ9XCJNMTcgMTFoN3Y2aC03elwiIGZpbGw9XCIjMDA3OGQ0XCIvPjxwYXRoIGQ9XCJNMTAgMTdoN3Y2aC03elwiIGZpbGw9XCIjMDY0YThjXCIvPjxwYXRoIGQ9XCJNMjQgMTdoNnY2aC02elwiIGZpbGw9XCIjMDA3OGQ0XCIvPjxwYXRoIGQ9XCJNMjAuMTkgMjUuMjE4bC0xMS43OTMtOC42LjQ5NS0uODcgMTAuOTA5IDYuMjEyYS41MjguNTI4IDAgMCAwIC40Mi0uMDEybDEwLjkzMy02LjIzLjQ5Ni44Njl6XCIgZmlsbD1cIiMwYTI3NjdcIiBvcGFjaXR5PVwiLjVcIi8+PHBhdGggZD1cIk0zMS42NjcgMTYuNTc3bC0uMDE0LjAwOC0uMDAzLjAwMi0xMC44MzggNi4xNzRhMS40OTcgMS40OTcgMCAwIDEtMS40Ni4wOTFsMy43NzQgNS4wNjEgOC4yNTQgMS43OTd2LjAwNEExLjQ5OCAxLjQ5OCAwIDAgMCAzMiAyOC41VjE2YS42NjYuNjY2IDAgMCAxLS4zMzMuNTc3elwiIGZpbGw9XCIjMTQ5MGRmXCIvPjxwYXRoIGQ9XCJNMzIgMjguNXYtLjczOGwtOS45ODMtNS42ODgtMS4yMDUuNjg3YTEuNDk3IDEuNDk3IDAgMCAxLTEuNDYuMDkxbDMuNzc0IDUuMDYxIDguMjU0IDEuNzk3di4wMDRBMS40OTggMS40OTggMCAwIDAgMzIgMjguNXpcIiBvcGFjaXR5PVwiLjA1XCIvPjxwYXRoIGQ9XCJNMzEuOTUgMjguODgzTDIxLjAwNyAyMi42NWwtLjE5NS4xMWExLjQ5NyAxLjQ5NyAwIDAgMS0xLjQ2LjA5MmwzLjc3NCA1LjA2MSA4LjI1NCAxLjc5N3YuMDA0YTEuNTAxIDEuNTAxIDAgMCAwIC41Ny0uODN6XCIgb3BhY2l0eT1cIi4xXCIvPjxwYXRoIGQ9XCJNOC4zNSAxNi41OXYtLjAxaC0uMDFsLS4wMy0uMDJBLjY1LjY1IDAgMCAxIDggMTZ2MTIuNUExLjQ5OCAxLjQ5OCAwIDAgMCA5LjUgMzBoMjFhMS41MDMgMS41MDMgMCAwIDAgLjM3LS4wNS42MzcuNjM3IDAgMCAwIC4xOC0uMDYuMTQyLjE0MiAwIDAgMCAuMDYtLjAyIDEuMDQ4IDEuMDQ4IDAgMCAwIC4yMy0uMTNjLjAyLS4wMS4wMy0uMDEuMDQtLjAzelwiIGZpbGw9XCIjMjhhOGVhXCIvPjxwYXRoIGQ9XCJNMTggMjQuNjY3VjguMzMzQTEuMzM3IDEuMzM3IDAgMCAwIDE2LjY2NyA3SDEwLjAzdjcuNDU2bC0xLjY4Ljk1OC0uMDA1LjAwMi0uMDEyLjAwN0EuNjY2LjY2NiAwIDAgMCA4IDE2di4wMDVWMTZ2MTBoOC42NjdBMS4zMzcgMS4zMzcgMCAwIDAgMTggMjQuNjY3elwiIG9wYWNpdHk9XCIuMVwiLz48cGF0aCBkPVwiTTE3IDI1LjY2N1Y5LjMzM0ExLjMzNyAxLjMzNyAwIDAgMCAxNS42NjcgOEgxMC4wM3Y2LjQ1NmwtMS42OC45NTgtLjAwNS4wMDItLjAxMi4wMDdBLjY2Ni42NjYgMCAwIDAgOCAxNnYuMDA1VjE2djExaDcuNjY3QTEuMzM3IDEuMzM3IDAgMCAwIDE3IDI1LjY2N3pcIiBvcGFjaXR5PVwiLjJcIi8+PHBhdGggZD1cIk0xNyAyMy42NjdWOS4zMzNBMS4zMzcgMS4zMzcgMCAwIDAgMTUuNjY3IDhIMTAuMDN2Ni40NTZsLTEuNjguOTU4LS4wMDUuMDAyLS4wMTIuMDA3QS42NjYuNjY2IDAgMCAwIDggMTZ2LjAwNVYxNnY5aDcuNjY3QTEuMzM3IDEuMzM3IDAgMCAwIDE3IDIzLjY2N3pcIiBvcGFjaXR5PVwiLjJcIi8+PHBhdGggZD1cIk0xNiAyMy42NjdWOS4zMzNBMS4zMzcgMS4zMzcgMCAwIDAgMTQuNjY3IDhIMTAuMDN2Ni40NTZsLTEuNjguOTU4LS4wMDUuMDAyLS4wMTIuMDA3QS42NjYuNjY2IDAgMCAwIDggMTZ2LjAwNVYxNnY5aDYuNjY3QTEuMzM3IDEuMzM3IDAgMCAwIDE2IDIzLjY2N3pcIiBvcGFjaXR5PVwiLjJcIi8+PHBhdGggZD1cIk0xLjMzMyA4aDEzLjMzNEExLjMzMyAxLjMzMyAwIDAgMSAxNiA5LjMzM3YxMy4zMzRBMS4zMzMgMS4zMzMgMCAwIDEgMTQuNjY3IDI0SDEuMzMzQTEuMzMzIDEuMzMzIDAgMCAxIDAgMjIuNjY3VjkuMzMzQTEuMzMzIDEuMzMzIDAgMCAxIDEuMzMzIDh6XCIgZmlsbD1cIiMwMDc4ZDRcIi8+PHBhdGggZD1cIk0zLjg2NyAxMy40NjhhNC4xODEgNC4xODEgMCAwIDEgMS42NDItMS44MTRBNC45NjUgNC45NjUgMCAwIDEgOC4xMTkgMTFhNC42MTcgNC42MTcgMCAwIDEgMi40MTMuNjIgNC4xNCA0LjE0IDAgMCAxIDEuNTk4IDEuNzMzIDUuNTk3IDUuNTk3IDAgMCAxIC41NiAyLjU1IDUuOTAxIDUuOTAxIDAgMCAxLS41NzcgMi42NjYgNC4yMzkgNC4yMzkgMCAwIDEtMS42NDUgMS43OTRBNC44IDQuOCAwIDAgMSA3Ljk2MyAyMWE0LjcyOSA0LjcyOSAwIDAgMS0yLjQ2OC0uNjI3IDQuMjA0IDQuMjA0IDAgMCAxLTEuNjE4LTEuNzM2IDUuNDU5IDUuNDU5IDAgMCAxLS41NjctMi41MTkgNi4wNTUgNi4wNTUgMCAwIDEgLjU1Ny0yLjY1em0xLjc1IDQuMjU4YTIuNzE2IDIuNzE2IDAgMCAwIC45MjMgMS4xOTQgMi40MTEgMi40MTEgMCAwIDAgMS40NDMuNDM1IDIuNTMzIDIuNTMzIDAgMCAwIDEuNTQxLS40NDkgMi42MDMgMi42MDMgMCAwIDAgLjg5Ny0xLjE5NyA0LjYyNiA0LjYyNiAwIDAgMCAuMjg2LTEuNjY1IDUuMDYzIDUuMDYzIDAgMCAwLS4yNy0xLjY4NiAyLjY2OSAyLjY2OSAwIDAgMC0uODY2LTEuMjQgMi4zODcgMi4zODcgMCAwIDAtMS41MjctLjQ3MyAyLjQ5MyAyLjQ5MyAwIDAgMC0xLjQ3Ny40MzkgMi43NDEgMi43NDEgMCAwIDAtLjk0NCAxLjIwMyA0Ljc3NiA0Ljc3NiAwIDAgMC0uMDA3IDMuNDR6XCIgZmlsbD1cIiNmZmZcIi8+PC9zdmc+JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1lhaG9vJzpcbiAgICAgIGlmIChkYXRhLnJlY3VycmVuY2UgPT0gbnVsbCB8fCBkYXRhLnJlY3VycmVuY2UgPT0gJycpIHtcbiAgICAgICAgcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICBhdGNiX2RlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIG9uZU9wdGlvbiA/IHBhcmVudC5ibHVyKCkgOiBhdGNiX2Nsb3NlKCk7XG4gICAgICAgICAgICBhdGNiX2dlbmVyYXRlX3lhaG9vKGRhdGEpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnQucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgZGF0YS5pZGVudGlmaWVyICsgJy15YWhvbycpO1xuICAgICAgdGV4dCA9IHRleHQgfHwgJ1lhaG9vJztcbiAgICAgIGljb25TdmcgPVxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMzg2LjM0IDMwMTAuNVwiIHNoYXBlLXJlbmRlcmluZz1cImdlb21ldHJpY1ByZWNpc2lvblwiIGltYWdlLXJlbmRlcmluZz1cIm9wdGltaXplUXVhbGl0eVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTAgNzMyLjg4aDY0NS44NGwzNzYuMDcgOTYyLjEgMzgwLjk2LTk2Mi4xaDYyOC43NmwtOTQ2LjggMjI3Ny42Mkg0NTEuOThsMjU5LjE5LTYwMy41M0wuMDIgNzMyLjg4em0yNzYzLjg0IDc2OC43NWgtNzA0LjI2TDI2ODQuNjUgMGw3MDEuNjkuMDMtNjIyLjUgMTUwMS42em0tNTE5Ljc4IDE0My43MmMyMTYuMDkgMCAzOTEuMjUgMTc1LjE3IDM5MS4yNSAzOTEuMjIgMCAyMTYuMDYtMTc1LjE2IDM5MS4yMy0zOTEuMjUgMzkxLjIzLTIxNi4wNiAwLTM5MS4xOS0xNzUuMTctMzkxLjE5LTM5MS4yMyAwLTIxNi4wNSAxNzUuMTYtMzkxLjIyIDM5MS4xOS0zOTEuMjJ6XCIgZmlsbD1cIiM1ZjAxZDFcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCIvPjwvc3ZnPic7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdDbG9zZSc6XG4gICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgYXRjYl9kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgb25lT3B0aW9uID8gcGFyZW50LmJsdXIoKSA6IGF0Y2JfY2xvc2UoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2ZvY3VzJyxcbiAgICAgICAgYXRjYl9kZWJvdW5jZSgoKSA9PiBhdGNiX2Nsb3NlKGZhbHNlKSlcbiAgICAgICk7XG4gICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdpZCcsIGRhdGEuaWRlbnRpZmllciArICctY2xvc2UnKTtcbiAgICAgIHRleHQgPSBhdGNiX3RyYW5zbGF0ZSgnQ2xvc2UnLCBkYXRhLmxhbmd1YWdlKTtcbiAgICAgIGljb25TdmcgPVxuICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTEuOTkxLjY5YTIuMzUgMi4zNSAwIDAgMSAzLjMxOC0uMDA5Yy45MTguOTExLjkyMiAyLjM5Mi4wMDkgMy4zMDdsLTQuMDA5IDQuMDE0IDQuMDEzIDQuMDE4Yy45MDYuOTA5Ljg5MyAyLjM4LS4wMjcgMy4yODdhMi4zNSAyLjM1IDAgMCAxLTMuMzA3LS4wMDRsLTMuOTg1LTMuOTktMy45OTMgMy45OTdhMi4zNSAyLjM1IDAgMCAxLTMuMzE4LjAwOWMtLjkxOC0uOTExLS45MjItMi4zOTItLjAwOS0zLjMwN2w0LjAwOS00LjAxNEwuNjc4IDMuOThDLS4yMjggMy4wNzItLjIxNSAxLjYuNzA2LjY5M2EyLjM1IDIuMzUgMCAwIDEgMy4zMDcuMDA0bDMuOTg1IDMuOTl6XCIvPjwvc3ZnPic7XG4gICAgICBicmVhaztcbiAgfVxuICAvLyBvdmVycmlkZSB0aGUgaWQgZm9yIHRoZSBvbmVPcHRpb24gYnV0dG9uLCBzaW5jZSB0aGUgYnV0dG9uIGFsd2F5cyBuZWVkcyB0byBoYXZlIHRoZSBidXR0b24gaWRcbiAgaWYgKG9uZU9wdGlvbikge1xuICAgIHBhcmVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgZGF0YS5pZGVudGlmaWVyKTtcbiAgfVxuICAvLyBzdXBwb3J0IGtleWJvYXJkIGlucHV0XG4gIGlmICghb25lT3B0aW9uICYmIHR5cGUgPT09ICdUcmlnZ2VyJykge1xuICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgYXRjYl9kZWJvdW5jZV9sZWFkaW5nKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09ICdFbnRlcicpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGF0Y2JfdG9nZ2xlKGRhdGEsIHBhcmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIGF0Y2JfZGVib3VuY2VfbGVhZGluZygoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PSAnRW50ZXInKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBwYXJlbnQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIC8vIGFkZCBpY29uIGFuZCB0ZXh0IGxhYmVsXG4gIGlmIChpY29uKSB7XG4gICAgY29uc3QgaWNvbkVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGljb25FbC5jbGFzc0xpc3QuYWRkKCdhdGNiLWljb24nKTtcbiAgICBpY29uRWwuaW5uZXJIVE1MID0gaWNvblN2ZztcbiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoaWNvbkVsKTtcbiAgfVxuICBjb25zdCB0ZXh0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gIHRleHRFbC5jbGFzc0xpc3QuYWRkKCdhdGNiLXRleHQnKTtcbiAgdGV4dEVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcGFyZW50LmFwcGVuZENoaWxkKHRleHRFbCk7XG59XG5cbi8vIGdlbmVyYXRlIHRoZSB0cmlnZ2VyaW5nIGJ1dHRvblxuZnVuY3Rpb24gYXRjYl9nZW5lcmF0ZShidXR0b24sIGRhdGEpIHtcbiAgLy8gY2xlYW4gdGhlIHBsYWNlaG9sZGVyXG4gIGJ1dHRvbi50ZXh0Q29udGVudCA9ICcnO1xuICAvLyBjcmVhdGUgc2NoZW1hLm9yZyBkYXRhLCBpZiBwb3NzaWJsZSAoaHR0cHM6Ly9zY2hlbWEub3JnL0V2ZW50KVxuICAvLyBUT0RPOiBzdXBwb3J0IHJlY3VycmluZyBldmVudHNcbiAgaWYgKGRhdGEubmFtZSAmJiBkYXRhLmxvY2F0aW9uICYmIGRhdGEuc3RhcnREYXRlKSB7XG4gICAgY29uc3Qgc2NoZW1hRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY2hlbWFFbC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYXBwbGljYXRpb24vbGQranNvbicpO1xuICAgIHNjaGVtYUVsLnRleHRDb250ZW50ID0gJ3sgXCJldmVudFwiOiB7IFwiQGNvbnRleHRcIjpcImh0dHBzOi8vc2NoZW1hLm9yZ1wiLCBcIkB0eXBlXCI6XCJFdmVudFwiLCAnO1xuICAgIHNjaGVtYUVsLnRleHRDb250ZW50ICs9ICdcIm5hbWVcIjpcIicgKyBkYXRhLm5hbWUgKyAnXCIsICc7XG4gICAgaWYgKGRhdGEuZGVzY3JpcHRpb25IdG1sRnJlZSlcbiAgICAgIHNjaGVtYUVsLnRleHRDb250ZW50ICs9ICdcImRlc2NyaXB0aW9uXCI6XCInICsgZGF0YS5kZXNjcmlwdGlvbkh0bWxGcmVlICsgJ1wiLCAnO1xuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBhdGNiX2dlbmVyYXRlX3RpbWUoZGF0YSwgJ2RlbGltaXRlcnMnLCAnZ2VuZXJhbCcsIHRydWUpO1xuICAgIHNjaGVtYUVsLnRleHRDb250ZW50ICs9ICdcInN0YXJ0RGF0ZVwiOlwiJyArIGZvcm1hdHRlZERhdGUuc3RhcnQgKyAnXCIsICc7XG4gICAgc2NoZW1hRWwudGV4dENvbnRlbnQgKz0gJ1wiZW5kRGF0ZVwiOlwiJyArIGZvcm1hdHRlZERhdGUuZW5kICsgJ1wiLCAnO1xuICAgIGlmIChkYXRhLmxvY2F0aW9uLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgc2NoZW1hRWwudGV4dENvbnRlbnQgKz0gJ1wiZXZlbnRBdHRlbmRhbmNlTW9kZVwiOlwiaHR0cHM6Ly9zY2hlbWEub3JnL09ubGluZUV2ZW50QXR0ZW5kYW5jZU1vZGVcIiwgJztcbiAgICAgIHNjaGVtYUVsLnRleHRDb250ZW50ICs9ICdcImxvY2F0aW9uXCI6IHsgXCJAdHlwZVwiOlwiVmlydHVhbExvY2F0aW9uXCIsIFwidXJsXCI6XCInICsgZGF0YS5sb2NhdGlvbiArICdcIiB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVtYUVsLnRleHRDb250ZW50ICs9ICdcImxvY2F0aW9uXCI6XCInICsgZGF0YS5sb2NhdGlvbiArICdcIiAnO1xuICAgIH1cbiAgICBzY2hlbWFFbC50ZXh0Q29udGVudCArPSAnfSB9JztcbiAgICBidXR0b24uYXBwZW5kQ2hpbGQoc2NoZW1hRWwpO1xuICB9XG4gIC8vIGdlbmVyYXRlIHRoZSB3cmFwcGVyIGRpdlxuICBjb25zdCBidXR0b25UcmlnZ2VyV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBidXR0b25UcmlnZ2VyV3JhcHBlci5jbGFzc0xpc3QuYWRkKCdhdGNiLWJ1dHRvbi13cmFwcGVyJyk7XG4gIGJ1dHRvbi5hcHBlbmRDaGlsZChidXR0b25UcmlnZ2VyV3JhcHBlcik7XG4gIC8vIGdlbmVyYXRlIHRoZSBidXR0b24gdHJpZ2dlciBkaXZcbiAgY29uc3QgYnV0dG9uVHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICBidXR0b25UcmlnZ2VyLmNsYXNzTGlzdC5hZGQoJ2F0Y2ItYnV0dG9uJyk7XG4gIGJ1dHRvblRyaWdnZXIuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuICBidXR0b25UcmlnZ2VyV3JhcHBlci5hcHBlbmRDaGlsZChidXR0b25UcmlnZ2VyKTtcbiAgLy8gZ2VuZXJhdGUgdGhlIGxhYmVsIGluY2wuIGV2ZW50TGlzdGVuZXJzXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgMSBjYWxlbmRhciBvcHRpb24sIHdlIGRpcmVjdGx5IHNob3cgdGhpcyBhdCB0aGUgYnV0dG9uLCBidXQgd2l0aCB0aGUgdHJpZ2dlcidzIGxhYmVsIHRleHRcbiAgaWYgKGRhdGEub3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBvcHRpb25QYXJ0cyA9IGRhdGEub3B0aW9uc1swXS5zcGxpdCgnfCcpO1xuICAgIGF0Y2JfZ2VuZXJhdGVfbGFiZWwoZGF0YSwgYnV0dG9uVHJpZ2dlciwgb3B0aW9uUGFydHNbMF0sIHRydWUsIGRhdGEubGFiZWwsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGF0Y2JfZ2VuZXJhdGVfbGFiZWwoZGF0YSwgYnV0dG9uVHJpZ2dlciwgJ1RyaWdnZXInLCB0cnVlLCBkYXRhLmxhYmVsKTtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgYW5jaG9yIGRpdiB0byBwbGFjZSB0aGUgZHJvcGRvd24sIHdoaWxlIHRoZSBwb3NpdGlvbiBjYW4gYmUgZGVmaW5lZCB2aWEgQ1NTXG4gICAgY29uc3QgYnV0dG9uRHJvcGRvd25BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBidXR0b25Ecm9wZG93bkFuY2hvci5jbGFzc0xpc3QuYWRkKCdhdGNiLWRyb3Bkb3duLWFuY2hvcicpO1xuICAgIGJ1dHRvblRyaWdnZXJXcmFwcGVyLmFwcGVuZENoaWxkKGJ1dHRvbkRyb3Bkb3duQW5jaG9yKTtcbiAgfVxuICAvLyB1cGRhdGUgdGhlIHBsYWNlaG9sZGVyIGNsYXNzIHRvIHByZXZlbnQgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb25zXG4gIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdhdGNiJyk7XG4gIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdhdGNiLWluaXRpYWxpemVkJyk7XG4gIC8vIHNob3cgdGhlIHBsYWNlaG9sZGVyIGRpdlxuICBpZiAoZGF0YS5pbmxpbmUpIHtcbiAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICB9IGVsc2Uge1xuICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgfVxuICAvLyBjb25zb2xlIGxvZ1xuICBjb25zb2xlLmxvZygnYWRkLXRvLWNhbGVuZGFyIGJ1dHRvbiBcIicgKyBkYXRhLmlkZW50aWZpZXIgKyAnXCIgY3JlYXRlZCcpO1xufVxuXG4vLyBnZW5lcmF0ZSB0aGUgZHJvcGRvd24gbGlzdCAoY2FuIGFsc28gYXBwZWFyIHdpaHRpbiBhIG1vZGFsLCBpZiBvcHRpb24gaXMgc2V0KVxuZnVuY3Rpb24gYXRjYl9nZW5lcmF0ZV9kcm9wZG93bl9saXN0KGRhdGEpIHtcbiAgY29uc3Qgb3B0aW9uc0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3B0aW9uc0xpc3QuY2xhc3NMaXN0LmFkZCgnYXRjYi1saXN0Jyk7XG4gIC8vIGdlbmVyYXRlIHRoZSBsaXN0IGl0ZW1zXG4gIGRhdGEub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBjb25zdCBvcHRpb25QYXJ0cyA9IG9wdGlvbi5zcGxpdCgnfCcpO1xuICAgIGNvbnN0IG9wdGlvbkl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBvcHRpb25JdGVtLmNsYXNzTGlzdC5hZGQoJ2F0Y2ItbGlzdC1pdGVtJyk7XG4gICAgb3B0aW9uSXRlbS50YWJJbmRleCA9IDA7XG4gICAgb3B0aW9uc0xpc3QuYXBwZW5kQ2hpbGQob3B0aW9uSXRlbSk7XG4gICAgLy8gZ2VuZXJhdGUgdGhlIGxhYmVsIGluY2wuIGluZGl2aWR1YWwgZXZlbnRMaXN0ZW5lclxuICAgIGF0Y2JfZ2VuZXJhdGVfbGFiZWwoZGF0YSwgb3B0aW9uSXRlbSwgb3B0aW9uUGFydHNbMF0sIHRydWUsIG9wdGlvblBhcnRzWzFdKTtcbiAgfSk7XG4gIC8vIGluIHRoZSBtb2RhbCBjYXNlLCB3ZSBhbHNvIHJlbmRlciBhIGNsb3NlIG9wdGlvblxuICBpZiAoZGF0YS5saXN0U3R5bGUgPT09ICdtb2RhbCcpIHtcbiAgICBjb25zdCBvcHRpb25JdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgb3B0aW9uSXRlbS5jbGFzc0xpc3QuYWRkKCdhdGNiLWxpc3QtaXRlbScsICdhdGNiLWxpc3QtaXRlbS1jbG9zZScpO1xuICAgIG9wdGlvbkl0ZW0udGFiSW5kZXggPSAwO1xuICAgIG9wdGlvbnNMaXN0LmFwcGVuZENoaWxkKG9wdGlvbkl0ZW0pO1xuICAgIGF0Y2JfZ2VuZXJhdGVfbGFiZWwoZGF0YSwgb3B0aW9uSXRlbSwgJ0Nsb3NlJywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNMaXN0O1xufVxuXG4vLyBjcmVhdGUgdGhlIGJhY2tncm91bmQgb3ZlcmxheSwgd2hpY2ggYWxzbyBhY3RzIGFzIHRyaWdnZXIgdG8gY2xvc2UgYW55IGRyb3Bkb3duc1xuZnVuY3Rpb24gYXRjYl9nZW5lcmF0ZV9iZ19vdmVybGF5KGxpc3RTdHlsZSA9ICdkcm9wZG93bicsIHRyaWdnZXIgPSAnJywgZGFya2VuID0gdHJ1ZSkge1xuICBjb25zdCBiZ092ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgYmdPdmVybGF5LnNldEF0dHJpYnV0ZSgnaWQnLCAnYXRjYi1iZ292ZXJsYXknKTtcbiAgaWYgKGxpc3RTdHlsZSAhPT0gJ21vZGFsJyAmJiBkYXJrZW4pIHtcbiAgICBiZ092ZXJsYXkuY2xhc3NMaXN0LmFkZCgnYXRjYi1hbmltYXRlLWJnJyk7XG4gIH1cbiAgaWYgKCFkYXJrZW4pIHtcbiAgICBiZ092ZXJsYXkuY2xhc3NMaXN0LmFkZCgnYXRjYi1uby1iZycpO1xuICB9XG4gIGJnT3ZlcmxheS50YWJJbmRleCA9IDA7XG4gIGJnT3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFxuICAgICdjbGljaycsXG4gICAgYXRjYl9kZWJvdW5jZSgoZSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQpIHJldHVybjtcbiAgICAgIGF0Y2JfY2xvc2UodHJ1ZSk7XG4gICAgfSlcbiAgKTtcbiAgbGV0IGZpbmdlck1vdmVkID0gZmFsc2U7XG4gIGJnT3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFxuICAgICd0b3VjaHN0YXJ0JyxcbiAgICBhdGNiX2RlYm91bmNlX2xlYWRpbmcoKCkgPT4gKGZpbmdlck1vdmVkID0gZmFsc2UpKSxcbiAgICB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgIH1cbiAgKTtcbiAgYmdPdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ3RvdWNobW92ZScsXG4gICAgYXRjYl9kZWJvdW5jZV9sZWFkaW5nKCgpID0+IChmaW5nZXJNb3ZlZCA9IHRydWUpKSxcbiAgICB7IHBhc3NpdmU6IHRydWUgfVxuICApO1xuICBiZ092ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAndG91Y2hlbmQnLFxuICAgIGF0Y2JfZGVib3VuY2UoKGUpID0+IHtcbiAgICAgIGlmIChmaW5nZXJNb3ZlZCAhPT0gZmFsc2UgfHwgZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuO1xuICAgICAgYXRjYl9jbG9zZSh0cnVlKTtcbiAgICB9KSxcbiAgICB7IHBhc3NpdmU6IHRydWUgfVxuICApO1xuICBiZ092ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAnZm9jdXMnLFxuICAgIGF0Y2JfZGVib3VuY2VfbGVhZGluZygoZSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQpIHJldHVybjtcbiAgICAgIGF0Y2JfY2xvc2UoKTtcbiAgICB9KVxuICApO1xuICBpZiAodHJpZ2dlciAhPT0gJ2NsaWNrJykge1xuICAgIGJnT3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ21vdXNlbW92ZScsXG4gICAgICBhdGNiX2RlYm91bmNlX2xlYWRpbmcoKGUpID0+IHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQpIHJldHVybjtcbiAgICAgICAgYXRjYl9jbG9zZSh0cnVlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB0cmlnZ2VyIGlzIG5vdCBzZXQgdG8gJ2NsaWNrJywgd2UgcmVuZGVyIGEgY2xvc2UgaWNvbiwgd2hlbiBob3ZlcmluZyBvdmVyIHRoZSBiYWNrZ3JvdW5kXG4gICAgYmdPdmVybGF5LmNsYXNzTGlzdC5hZGQoJ2F0Y2ItY2xpY2snKTtcbiAgfVxuICByZXR1cm4gYmdPdmVybGF5O1xufVxuXG4vLyBGVU5DVElPTlMgVE8gQ09OVFJPTCBUSEUgSU5URVJBQ1RJT05cbmZ1bmN0aW9uIGF0Y2JfdG9nZ2xlKGRhdGEsIGJ1dHRvbiwga2V5Ym9hcmRUcmlnZ2VyID0gZmFsc2UsIGdlbmVyYXRlZEJ1dHRvbiA9IGZhbHNlKSB7XG4gIC8vIGNoZWNrIGZvciBzdGF0ZSBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gIGlmIChidXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKCdhdGNiLWFjdGl2ZScpIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdGNiLWFjdGl2ZS1tb2RhbCcpKSB7XG4gICAgYXRjYl9jbG9zZSgpO1xuICB9IGVsc2Uge1xuICAgIGF0Y2Jfb3BlbihkYXRhLCBidXR0b24sIGtleWJvYXJkVHJpZ2dlciwgZ2VuZXJhdGVkQnV0dG9uKTtcbiAgfVxufVxuXG4vLyBzaG93IHRoZSBkcm9wZG93biBsaXN0ICsgYmFja2dyb3VuZCBvdmVybGF5XG5mdW5jdGlvbiBhdGNiX29wZW4oZGF0YSwgYnV0dG9uLCBrZXlib2FyZFRyaWdnZXIgPSBmYWxzZSwgZ2VuZXJhdGVkQnV0dG9uID0gZmFsc2UpIHtcbiAgLy8gYWJvcnQgZWFybHkgaWYgYW4gYWRkLXRvLWNhbGVuZGFyIGRyb3Bkb3duIG9yIG1vZGFsIGFscmVhZHkgb3BlbmVkXG4gIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXRjYi1saXN0JykgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmF0Y2ItbW9kYWwnKSkgcmV0dXJuO1xuICAvLyBnZW5lcmF0ZSBsaXN0XG4gIGNvbnN0IGxpc3QgPSBhdGNiX2dlbmVyYXRlX2Ryb3Bkb3duX2xpc3QoZGF0YSk7XG4gIC8vIHNldCBsaXN0IHN0eWxlcywgc2V0IGJ1dHRvbiB0byBhdGNiLWFjdGl2ZSBhbmQgZm9yY2UgbW9kYWwgbGlzdFN0eWxlIGlmIG5vIGJ1dHRvbiBpcyBzZXRcbiAgaWYgKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdhdGNiLWFjdGl2ZScpO1xuICAgIGlmIChkYXRhLmxpc3RTdHlsZSA9PT0gJ21vZGFsJykge1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2F0Y2ItbW9kYWwtc3R5bGUnKTtcbiAgICAgIGxpc3QuY2xhc3NMaXN0LmFkZCgnYXRjYi1tb2RhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdGNiX3Bvc2l0aW9uX2xpc3QoYnV0dG9uLCBsaXN0KTtcbiAgICAgIGxpc3QuY2xhc3NMaXN0LmFkZCgnYXRjYi1kcm9wZG93bicpO1xuICAgICAgaWYgKGdlbmVyYXRlZEJ1dHRvbikge1xuICAgICAgICBsaXN0LmNsYXNzTGlzdC5hZGQoJ2F0Y2ItZ2VuZXJhdGVkLWJ1dHRvbicpOyAvLyBpZiB0aGUgYnV0dG9uIGhhcyBiZWVuIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0LCB3ZSBhZGQgc29tZSBtb3JlIHNwZWNpZmljc1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsaXN0LmNsYXNzTGlzdC5hZGQoJ2F0Y2ItbW9kYWwnKTtcbiAgfVxuICAvLyBkZWZpbmUgYmFja2dyb3VuZCBvdmVybGF5XG4gIGNvbnN0IGJnT3ZlcmxheSA9IGF0Y2JfZ2VuZXJhdGVfYmdfb3ZlcmxheShkYXRhLmxpc3RTdHlsZSwgZGF0YS50cmlnZ2VyLCBkYXRhLmJhY2tncm91bmQpO1xuICAvLyByZW5kZXIgdGhlIGl0ZW1zIGRlcGVuZGluZyBvbiB0aGUgbGlzdHN0eWxlXG4gIGlmIChkYXRhLmxpc3RTdHlsZSA9PT0gJ21vZGFsJykge1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmdPdmVybGF5KTtcbiAgICBiZ092ZXJsYXkuYXBwZW5kQ2hpbGQobGlzdCk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdhdGNiLW1vZGFsLW5vLXNjcm9sbCcpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGlzdCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiZ092ZXJsYXkpO1xuICB9XG4gIC8vIHNldCBvdmVybGF5IHNpemUganVzdCB0byBiZSBzdXJlXG4gIGF0Y2Jfc2V0X2Z1bGxzaXplKGJnT3ZlcmxheSk7XG4gIC8vIGdpdmUga2V5Ym9hcmQgZm9jdXMgdG8gZmlyc3QgaXRlbSBpbiBsaXN0LCBpZiBub3QgYmxvY2tlZCwgYmVjYXVzZSB0aGVyZSBpcyBkZWZpbml0ZWx5IG5vIGtleWJvYXJkIHRyaWdnZXJcbiAgaWYgKGtleWJvYXJkVHJpZ2dlcikge1xuICAgIGxpc3QuZmlyc3RDaGlsZC5mb2N1cygpO1xuICB9IGVsc2Uge1xuICAgIC8vIGZvciBldmVyeXRoaW5nIGVsc2UsIHdlIGZvY3VzIGFzIHdlbGwsIGJ1dCBibHVyIGltbWVkaWF0ZWx5IHRvIG9ubHkgc2V0IHRoZSBwb2ludGVyXG4gICAgbGlzdC5maXJzdENoaWxkLmZvY3VzKCk7XG4gICAgbGlzdC5maXJzdENoaWxkLmJsdXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdGNiX2Nsb3NlKGJsb2NrRm9jdXMgPSBmYWxzZSkge1xuICAvLyBmb2N1cyB0cmlnZ2VyaW5nIGJ1dHRvbiAtIGVzcGVjaWFsbHkgcmVsZXZhbnQgZm9yIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgaWYgKCFibG9ja0ZvY3VzKSB7XG4gICAgbGV0IG5ld0ZvY3VzRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXRjYi1hY3RpdmUsIC5hdGNiLWFjdGl2ZS1tb2RhbCcpO1xuICAgIGlmIChuZXdGb2N1c0VsKSB7XG4gICAgICBuZXdGb2N1c0VsLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8vIGluYWN0aXZhdGUgYWxsIGJ1dHRvbnNcbiAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXRjYi1hY3RpdmUnKSkuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2F0Y2ItYWN0aXZlJyk7XG4gIH0pO1xuICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hdGNiLWFjdGl2ZS1tb2RhbCcpKS5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnYXRjYi1hY3RpdmUtbW9kYWwnKTtcbiAgfSk7XG4gIC8vIG1ha2UgYm9keSBzY3JvbGxhYmxlIGFnYWluXG4gIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnYXRjYi1tb2RhbC1uby1zY3JvbGwnKTtcbiAgLy8gcmVtb3ZlIGRyb3Bkb3ducywgbW9kYWxzLCBhbmQgYmcgb3ZlcmxheXMgKHNob3VsZCBvbmx5IGJlIG9uZSBvZiBlYWNoIGF0IG1heClcbiAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXRjYi1saXN0JykpXG4gICAgLmNvbmNhdChBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hdGNiLWluZm8tbW9kYWwnKSkpXG4gICAgLmNvbmNhdChBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNhdGNiLWJnb3ZlcmxheScpKSlcbiAgICAuZm9yRWFjaCgoZWwpID0+IGVsLnJlbW92ZSgpKTtcbn1cblxuLy8gcHJlcGFyZSBkYXRhIHdoZW4gbm90IHVzaW5nIHRoZSBpbml0IGZ1bmN0aW9uXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBhdGNiX2FjdGlvbihkYXRhLCB0cmlnZ2VyRWxlbWVudCwga2V5Ym9hcmRUcmlnZ2VyID0gdHJ1ZSkge1xuICAvLyB2YWxpZGF0ZSAmIGRlY29yYXRlIGRhdGFcbiAgaWYgKCFhdGNiX2NoZWNrX3JlcXVpcmVkKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIG1pc3Npbmc7IHNlZSBsb2dzJyk7XG4gIH1cbiAgZGF0YSA9IGF0Y2JfZGVjb3JhdGVfZGF0YShkYXRhKTtcbiAgaWYgKCFhdGNiX3ZhbGlkYXRlKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGE7IHNlZSBsb2dzJyk7XG4gIH1cbiAgaWYgKHRyaWdnZXJFbGVtZW50KSB7XG4gICAgZGF0YS5pZGVudGlmaWVyID0gdHJpZ2dlckVsZW1lbnQuaWQ7XG4gIH0gZWxzZSB7XG4gICAgZGF0YS5pZGVudGlmaWVyID0gJ2F0Y2ItYnRuLWN1c3RvbSc7XG4gICAgLy8gaWYgbm8gYnV0dG9uIGlzIGRlZmluZWQsIGZhbGxiYWNrIHRvIGxpc3RTdHlsZSBcIm1vZGFsXCIgYW5kIFwiY2xpY2tcIiB0cmlnZ2VyXG4gICAgZGF0YS5saXN0U3R5bGUgPSAnbW9kYWwnO1xuICAgIGRhdGEudHJpZ2dlciA9ICdjbGljayc7XG4gIH1cbiAgYXRjYl9vcGVuKGRhdGEsIHRyaWdnZXJFbGVtZW50LCBrZXlib2FyZFRyaWdnZXIpO1xufVxuXG4vLyBGVU5DVElPTiBUTyBHRU5FUkFURSBUSEUgR09PR0xFIFVSTFxuZnVuY3Rpb24gYXRjYl9nZW5lcmF0ZV9nb29nbGUoZGF0YSkge1xuICAvLyBiYXNlIHVybFxuICBsZXQgdXJsID0gJ2h0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhci9yZW5kZXI/YWN0aW9uPVRFTVBMQVRFJztcbiAgLy8gZ2VuZXJhdGUgYW5kIGFkZCBkYXRlXG4gIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBhdGNiX2dlbmVyYXRlX3RpbWUoZGF0YSwgJ2NsZWFuJywgJ2dvb2dsZScpO1xuICB1cmwgKz0gJyZkYXRlcz0nICsgZm9ybWF0dGVkRGF0ZS5zdGFydCArICclMkYnICsgZm9ybWF0dGVkRGF0ZS5lbmQ7XG4gIC8vIGFkZCBkZXRhaWxzIChpZiBzZXQpXG4gIGlmIChkYXRhLm5hbWUgIT0gbnVsbCAmJiBkYXRhLm5hbWUgIT0gJycpIHtcbiAgICB1cmwgKz0gJyZ0ZXh0PScgKyBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5uYW1lKTtcbiAgfVxuICBsZXQgdG1wRGF0YURlc2NyaXB0aW9uID0gJyc7XG4gIGlmIChkYXRhLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgZGF0YS5kZXNjcmlwdGlvbiAhPSAnJykge1xuICAgIHRtcERhdGFEZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XG4gIH1cbiAgaWYgKGRhdGEubG9jYXRpb24gIT0gbnVsbCAmJiBkYXRhLmxvY2F0aW9uICE9ICcnKSB7XG4gICAgdXJsICs9ICcmbG9jYXRpb249JyArIGVuY29kZVVSSUNvbXBvbmVudChkYXRhLmxvY2F0aW9uKTtcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHNvbHV0aW9uIGZvciB0aGUgbmV4dCB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC5cbiAgICBpZiAoaXNpT1MoKSkge1xuICAgICAgLy8gd29ya2Fyb3VuZCB0byBjb3ZlciBhIGJ1Zywgd2hlcmUsIHdoZW4gdXNpbmcgR29vZ2xlIENhbGVuZGFyIG9uIGFuIGlQaG9uZSwgdGhlIGxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkLiBTbywgZm9yIHRoZSBtb21lbnQsIHdlIHNpbXBseSBhZGQgaXQgdG8gdGhlIGRlc2NyaXB0aW9uLlxuICAgICAgaWYgKHRtcERhdGFEZXNjcmlwdGlvbiAhPSAnJykge1xuICAgICAgICB0bXBEYXRhRGVzY3JpcHRpb24gKz0gJzxicj48YnI+JztcbiAgICAgIH1cbiAgICAgIHRtcERhdGFEZXNjcmlwdGlvbiArPSAnJiMxMjgyMDU7OiAnICsgZGF0YS5sb2NhdGlvbjtcbiAgICB9XG4gIH1cbiAgaWYgKHRtcERhdGFEZXNjcmlwdGlvbiAhPSAnJykge1xuICAgIHVybCArPSAnJmRldGFpbHM9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0bXBEYXRhRGVzY3JpcHRpb24pO1xuICB9XG4gIGlmIChkYXRhLnJlY3VycmVuY2UgIT0gbnVsbCAmJiBkYXRhLnJlY3VycmVuY2UgIT0gJycpIHtcbiAgICB1cmwgKz0gJyZyZWN1cj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhdGEucmVjdXJyZW5jZSk7XG4gIH1cbiAgaWYgKGF0Y2Jfc2VjdXJlX3VybCh1cmwpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1ub24tbGl0ZXJhbC1mcy1maWxlbmFtZVxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpLmZvY3VzKCk7XG4gIH1cbn1cblxuLy8gRlVOQ1RJT04gVE8gR0VORVJBVEUgVEhFIFlBSE9PIFVSTFxuZnVuY3Rpb24gYXRjYl9nZW5lcmF0ZV95YWhvbyhkYXRhKSB7XG4gIC8vIGJhc2UgdXJsXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9jYWxlbmRhci55YWhvby5jb20vP3Y9NjAnO1xuICAvLyBnZW5lcmF0ZSBhbmQgYWRkIGRhdGVcbiAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGF0Y2JfZ2VuZXJhdGVfdGltZShkYXRhLCAnY2xlYW4nKTtcbiAgdXJsICs9ICcmc3Q9JyArIGZvcm1hdHRlZERhdGUuc3RhcnQgKyAnJmV0PScgKyBmb3JtYXR0ZWREYXRlLmVuZDtcbiAgaWYgKGZvcm1hdHRlZERhdGUuYWxsZGF5KSB7XG4gICAgdXJsICs9ICcmZHVyPWFsbGRheSc7XG4gIH1cbiAgLy8gYWRkIGRldGFpbHMgKGlmIHNldClcbiAgaWYgKGRhdGEubmFtZSAhPSBudWxsICYmIGRhdGEubmFtZSAhPSAnJykge1xuICAgIHVybCArPSAnJnRpdGxlPScgKyBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5uYW1lKTtcbiAgfVxuICBpZiAoZGF0YS5sb2NhdGlvbiAhPSBudWxsICYmIGRhdGEubG9jYXRpb24gIT0gJycpIHtcbiAgICB1cmwgKz0gJyZpbl9sb2M9JyArIGVuY29kZVVSSUNvbXBvbmVudChkYXRhLmxvY2F0aW9uKTtcbiAgfVxuICBpZiAoZGF0YS5kZXNjcmlwdGlvbkh0bWxGcmVlICE9IG51bGwgJiYgZGF0YS5kZXNjcmlwdGlvbkh0bWxGcmVlICE9ICcnKSB7XG4gICAgLy8gdXNpbmcgZGVzY3JpcHRpb25IdG1sRnJlZSBpbnN0ZWFkIG9mIGRlc2NyaXB0aW9uLCBzaW5jZSBZYWhvbyBkb2VzIG5vdCBzdXBwb3J0IGh0bWwgdGFncyBpbiBhIHN0YWJsZSB3YXlcbiAgICB1cmwgKz0gJyZkZXNjPScgKyBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5kZXNjcmlwdGlvbkh0bWxGcmVlKTtcbiAgfVxuICBpZiAoYXRjYl9zZWN1cmVfdXJsKHVybCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW5vbi1saXRlcmFsLWZzLWZpbGVuYW1lXG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJykuZm9jdXMoKTtcbiAgfVxufVxuXG4vLyBGVU5DVElPTiBUTyBHRU5FUkFURSBUSEUgTUlDUk9TT0ZUIDM2NSBPUiBPVVRMT09LIFdFQiBVUkxcbmZ1bmN0aW9uIGF0Y2JfZ2VuZXJhdGVfbWljcm9zb2Z0KGRhdGEsIHR5cGUgPSAnMzY1Jykge1xuICAvLyBiYXNlIHVybFxuICBsZXQgdXJsID0gJ2h0dHBzOi8vJztcbiAgaWYgKHR5cGUgPT0gJ291dGxvb2snKSB7XG4gICAgdXJsICs9ICdvdXRsb29rLmxpdmUuY29tJztcbiAgfSBlbHNlIHtcbiAgICB1cmwgKz0gJ291dGxvb2sub2ZmaWNlLmNvbSc7XG4gIH1cbiAgdXJsICs9ICcvY2FsZW5kYXIvMC9kZWVwbGluay9jb21wb3NlP3BhdGg9JTJGY2FsZW5kYXIlMkZhY3Rpb24lMkZjb21wb3NlJnJydT1hZGRldmVudCc7XG4gIC8vIGdlbmVyYXRlIGFuZCBhZGQgZGF0ZVxuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gYXRjYl9nZW5lcmF0ZV90aW1lKGRhdGEsICdkZWxpbWl0ZXJzJywgJ21pY3Jvc29mdCcpO1xuICB1cmwgKz0gJyZzdGFydGR0PScgKyBmb3JtYXR0ZWREYXRlLnN0YXJ0ICsgJyZlbmRkdD0nICsgZm9ybWF0dGVkRGF0ZS5lbmQ7XG4gIGlmIChmb3JtYXR0ZWREYXRlLmFsbGRheSkge1xuICAgIHVybCArPSAnJmFsbGRheT10cnVlJztcbiAgfVxuICAvLyBhZGQgZGV0YWlscyAoaWYgc2V0KVxuICBpZiAoZGF0YS5uYW1lICE9IG51bGwgJiYgZGF0YS5uYW1lICE9ICcnKSB7XG4gICAgdXJsICs9ICcmc3ViamVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhdGEubmFtZSk7XG4gIH1cbiAgaWYgKGRhdGEubG9jYXRpb24gIT0gbnVsbCAmJiBkYXRhLmxvY2F0aW9uICE9ICcnKSB7XG4gICAgdXJsICs9ICcmbG9jYXRpb249JyArIGVuY29kZVVSSUNvbXBvbmVudChkYXRhLmxvY2F0aW9uKTtcbiAgfVxuICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAhPSBudWxsICYmIGRhdGEuZGVzY3JpcHRpb24gIT0gJycpIHtcbiAgICB1cmwgKz0gJyZib2R5PScgKyBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5kZXNjcmlwdGlvbi5yZXBsYWNlKC9cXG4vZywgJzxicj4nKSk7XG4gIH1cbiAgaWYgKGF0Y2Jfc2VjdXJlX3VybCh1cmwpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1ub24tbGl0ZXJhbC1mcy1maWxlbmFtZVxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpLmZvY3VzKCk7XG4gIH1cbn1cblxuLy8gRlVOQ1RJT04gVE8gR0VORVJBVEUgVEhFIE1JQ1JPU09GVCBURUFNUyBVUkxcbi8vIE1pbmQgdGhhdCB0aGlzIGlzIHN0aWxsIGluIGRldmVsb3BtZW50IG1vZGUgYnkgTWljcm9zb2Z0ISAoaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0dGVhbXMvcGxhdGZvcm0vY29uY2VwdHMvYnVpbGQtYW5kLXRlc3QvZGVlcC1saW5rcyNkZWVwLWxpbmtpbmctdG8tdGhlLXNjaGVkdWxpbmctZGlhbG9nKVxuLy8gTG9jYXRpb24sIGh0bWwgdGFncyBhbmQgbGluZWJyZWFrcyBpbiB0aGUgZGVzY3JpcHRpb24gYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LlxuZnVuY3Rpb24gYXRjYl9nZW5lcmF0ZV90ZWFtcyhkYXRhKSB7XG4gIC8vIGJhc2UgdXJsXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly90ZWFtcy5taWNyb3NvZnQuY29tL2wvbWVldGluZy9uZXc/JztcbiAgLy8gZ2VuZXJhdGUgYW5kIGFkZCBkYXRlXG4gIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBhdGNiX2dlbmVyYXRlX3RpbWUoZGF0YSwgJ2RlbGltaXRlcnMnLCAnbWljcm9zb2Z0Jyk7XG4gIHVybCArPSAnJnN0YXJ0VGltZT0nICsgZm9ybWF0dGVkRGF0ZS5zdGFydCArICcmZW5kVGltZT0nICsgZm9ybWF0dGVkRGF0ZS5lbmQ7XG4gIC8vIGFkZCBkZXRhaWxzIChpZiBzZXQpXG4gIGxldCBsb2NhdGlvblN0cmluZyA9ICcnO1xuICBpZiAoZGF0YS5uYW1lICE9IG51bGwgJiYgZGF0YS5uYW1lICE9ICcnKSB7XG4gICAgdXJsICs9ICcmc3ViamVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhdGEubmFtZSk7XG4gIH1cbiAgaWYgKGRhdGEubG9jYXRpb24gIT0gbnVsbCAmJiBkYXRhLmxvY2F0aW9uICE9ICcnKSB7XG4gICAgbG9jYXRpb25TdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5sb2NhdGlvbik7XG4gICAgdXJsICs9ICcmbG9jYXRpb249JyArIGxvY2F0aW9uU3RyaW5nO1xuICAgIGxvY2F0aW9uU3RyaW5nICs9ICcgLy8gJzsgLy8gcHJlcGFyaW5nIHRoZSB3b3JrYXJvdW5kIHB1dHRpbmcgdGhlIGxvY2F0aW9uIGludG8gdGhlIGRlc2NyaXB0aW9uLCBzaW5jZSB0aGUgbmF0aXZlIGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XG4gIH1cbiAgaWYgKGRhdGEuZGVzY3JpcHRpb25IdG1sRnJlZSAhPSBudWxsICYmIGRhdGEuZGVzY3JpcHRpb25IdG1sRnJlZSAhPSAnJykge1xuICAgIC8vIHVzaW5nIGRlc2NyaXB0aW9uSHRtbEZyZWUgaW5zdGVhZCBvZiBkZXNjcmlwdGlvbiwgc2luY2UgVGVhbXMgZG9lcyBub3Qgc3VwcG9ydCBodG1sIHRhZ3NcbiAgICB1cmwgKz0gJyZjb250ZW50PScgKyBsb2NhdGlvblN0cmluZyArIGVuY29kZVVSSUNvbXBvbmVudChkYXRhLmRlc2NyaXB0aW9uSHRtbEZyZWUpO1xuICB9XG4gIGlmIChhdGNiX3NlY3VyZV91cmwodXJsKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtZnMtZmlsZW5hbWVcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKS5mb2N1cygpO1xuICB9XG59XG5cbi8vIEZVTkNUSU9OIFRPIEdFTkVSQVRFIFRIRSBpQ0FMIEZJTEUgKGFsc28gZm9yIHRoZSBBcHBsZSBvcHRpb24pXG5mdW5jdGlvbiBhdGNiX2dlbmVyYXRlX2ljYWwoZGF0YSkge1xuICAvLyBjaGVjayBmb3IgYSBnaXZlbiBleHBsaWNpdCBmaWxlXG4gIGlmIChkYXRhLmljc0ZpbGUgIT0gbnVsbCAmJiBkYXRhLmljc0ZpbGUgIT0gJycpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW5vbi1saXRlcmFsLWZzLWZpbGVuYW1lXG4gICAgd2luZG93Lm9wZW4oZGF0YS5pY3NGaWxlLCAnX3NlbGYnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gb3RoZXJ3aXNlLCBnZW5lcmF0ZSBvbmUgb24gdGhlIGZseVxuICBsZXQgbm93ID0gbmV3IERhdGUoKTtcbiAgbm93ID0gbm93LnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBhdGNiX2dlbmVyYXRlX3RpbWUoZGF0YSwgJ2NsZWFuJywgJ2ljYWwnKTtcbiAgbGV0IHRpbWVzbG90ID0gJyc7XG4gIGlmIChmb3JtYXR0ZWREYXRlLmFsbGRheSkge1xuICAgIHRpbWVzbG90ID0gJztWQUxVRT1EQVRFJztcbiAgfVxuICBjb25zdCBpY3NfbGluZXMgPSBbJ0JFR0lOOlZDQUxFTkRBUicsICdWRVJTSU9OOjIuMCddO1xuICBjb25zdCBjb3JwID0gJ2dpdGh1Yi5jb20vamVrdWVyL2FkZC10by1jYWxlbmRhci1idXR0b24nO1xuICBpY3NfbGluZXMucHVzaCgnUFJPRElEOi0vLyAnICsgY29ycCArICcgLy8gYXRjYiB2JyArIGF0Y2JWZXJzaW9uICsgJyAvL0VOJyk7XG4gIGljc19saW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKTtcbiAgaWNzX2xpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpO1xuICBpY3NfbGluZXMucHVzaCgnVUlEOicgKyBub3cgKyAnQGFkZC10by1jYWxlbmRhci1idXR0b24nKTtcbiAgaWNzX2xpbmVzLnB1c2goXG4gICAgJ0RUU1RBTVA6JyArIGZvcm1hdHRlZERhdGUuc3RhcnQsXG4gICAgJ0RUU1RBUlQnICsgdGltZXNsb3QgKyAnOicgKyBmb3JtYXR0ZWREYXRlLnN0YXJ0LFxuICAgICdEVEVORCcgKyB0aW1lc2xvdCArICc6JyArIGZvcm1hdHRlZERhdGUuZW5kLFxuICAgICdTVU1NQVJZOicgKyBkYXRhLm5hbWUucmVwbGFjZSgvLns2NX0vZywgJyQmJyArICdcXHJcXG4gJykgLy8gbWFraW5nIHN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIDc1IGNoYXJhY3RlcnMgcGVyIGxpbmVcbiAgKTtcbiAgaWYgKGRhdGEuZGVzY3JpcHRpb25IdG1sRnJlZSAhPSBudWxsICYmIGRhdGEuZGVzY3JpcHRpb25IdG1sRnJlZSAhPSAnJykge1xuICAgIGljc19saW5lcy5wdXNoKFxuICAgICAgJ0RFU0NSSVBUSU9OOicgKyBkYXRhLmRlc2NyaXB0aW9uSHRtbEZyZWUucmVwbGFjZSgvXFxuL2csICdcXFxcbicpLnJlcGxhY2UoLy57NjB9L2csICckJicgKyAnXFxyXFxuICcpIC8vIGFkanVzdGluZyBmb3IgaW50ZW5kZWQgbGluZSBicmVha3MgKyBtYWtpbmcgc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgNzUgY2hhcmFjdGVycyBwZXIgbGluZVxuICAgICk7XG4gIH1cbiAgaWYgKGRhdGEubG9jYXRpb24gIT0gbnVsbCAmJiBkYXRhLmxvY2F0aW9uICE9ICcnKSB7XG4gICAgaWNzX2xpbmVzLnB1c2goJ0xPQ0FUSU9OOicgKyBkYXRhLmxvY2F0aW9uKTtcbiAgfVxuICBpZiAoZGF0YS5yZWN1cnJlbmNlICE9IG51bGwgJiYgZGF0YS5yZWN1cnJlbmNlICE9ICcnKSB7XG4gICAgaWNzX2xpbmVzLnB1c2goZGF0YS5yZWN1cnJlbmNlKTtcbiAgfVxuICBub3cgPSBub3cucmVwbGFjZSgvXFwuXFxkezN9L2csICcnKS5yZXBsYWNlKC9bXmEtelxcZF0vZ2ksICcnKTtcbiAgaWNzX2xpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnLCAnTEFTVC1NT0RJRklFRDonICsgbm93LCAnU0VRVUVOQ0U6MCcsICdFTkQ6VkVWRU5UJywgJ0VORDpWQ0FMRU5EQVInKTtcbiAgY29uc3QgZGx1cmwgPSAnZGF0YTp0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudChpY3NfbGluZXMuam9pbignXFxyXFxuJykpO1xuICBjb25zdCBmaWxlbmFtZSA9IGRhdGEuaUNhbEZpbGVOYW1lIHx8ICdldmVudC10by1zYXZlLWluLW15LWNhbGVuZGFyJztcbiAgLy8gaW4gdGhlIEluc3RhZ3JhbSBpbi1hcHAgYnJvd3NlciBjYXNlLCB3ZSBvZmZlciBhIGNvcHkgb3B0aW9uLCBzaW5jZSB0aGUgb24tdGhlLWZseSBjbGllbnQgc2lkZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudFxuICBpZiAoaXNJbnN0YWdyYW0oKSkge1xuICAgIC8vIHB1dHRpbmcgdGhlIGRvd25sb2FkIHVybCB0byB0aGUgY2xpcGJvYXJkXG4gICAgY29uc3QgdG1wSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodG1wSW5wdXQpO1xuICAgIHZhciBlZGl0YWJsZSA9IHRtcElucHV0LmNvbnRlbnRFZGl0YWJsZTtcbiAgICB2YXIgcmVhZE9ubHkgPSB0bXBJbnB1dC5yZWFkT25seTtcbiAgICB0bXBJbnB1dC52YWx1ZSA9IGRsdXJsO1xuICAgIHRtcElucHV0LmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7XG4gICAgdG1wSW5wdXQucmVhZE9ubHkgPSBmYWxzZTtcbiAgICBpZiAoaXNpT1MoKSkge1xuICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0bXBJbnB1dCk7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHRtcElucHV0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5OSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGRsdXJsKTtcbiAgICAgIHRtcElucHV0LnNlbGVjdCgpO1xuICAgIH1cbiAgICB0bXBJbnB1dC5jb250ZW50RWRpdGFibGUgPSBlZGl0YWJsZTtcbiAgICB0bXBJbnB1dC5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgdG1wSW5wdXQucmVtb3ZlKCk7XG4gICAgLy8gY3JlYXRpbmcgdGhlIG1vZGFsXG4gICAgY29uc3QgYnV0dG9ucyA9IFt7IGxhYmVsOiBhdGNiX3RyYW5zbGF0ZSgnQ2xvc2Ugbm90ZScsIGRhdGEubGFuZ3VhZ2UpLCB0eXBlOiAnY2xvc2UnIH1dO1xuICAgIGF0Y2JfY3JlYXRlX21vZGFsKFxuICAgICAgZGF0YSxcbiAgICAgIGF0Y2JfdHJhbnNsYXRlKCdJbnN0YWdyYW0gaUNhbCcsIGRhdGEubGFuZ3VhZ2UpLFxuICAgICAgYXRjYl90cmFuc2xhdGUoJ0luc3RhZ3JhbSBpbmZvIGRlc2NyaXB0aW9uJywgZGF0YS5sYW5ndWFnZSksXG4gICAgICBidXR0b25zLFxuICAgICAgJ2luc3RhZ3JhbSdcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXdpbmRvdy5BY3RpdmVYT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHNhdmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIHNhdmUuaHJlZiA9IGRsdXJsO1xuICAgICAgICBzYXZlLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICBzYXZlLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICB2aWV3OiB3aW5kb3csXG4gICAgICAgICAgYnV0dG9uOiAwLFxuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBzYXZlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgKHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTCkucmV2b2tlT2JqZWN0VVJMKHNhdmUuaHJlZik7XG4gICAgICB9XG4gICAgICAvLyBmb3IgSUUgPCAxMSAoZXZlbiBubyBsb25nZXIgb2ZmaWNpYWxseSBzdXBwb3J0ZWQpXG4gICAgICBlbHNlIGlmICghIXdpbmRvdy5BY3RpdmVYT2JqZWN0ICYmIGRvY3VtZW50LmV4ZWNDb21tYW5kKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtZnMtZmlsZW5hbWVcbiAgICAgICAgY29uc3QgX3dpbmRvdyA9IHdpbmRvdy5vcGVuKGRsdXJsLCAnX2JsYW5rJyk7XG4gICAgICAgIF93aW5kb3cuZG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgICAgX3dpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgnU2F2ZUFzJywgdHJ1ZSwgZmlsZW5hbWUgfHwgZGx1cmwpO1xuICAgICAgICBfd2luZG93LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gU0hBUkVEIEZVTkNUSU9OIFRPIEdFTkVSQVRFIEEgVElNRSBTVFJJTkdcbmZ1bmN0aW9uIGF0Y2JfZ2VuZXJhdGVfdGltZShkYXRhLCBzdHlsZSA9ICdkZWxpbWl0ZXJzJywgdGFyZ2V0Q2FsID0gJ2dlbmVyYWwnLCBhZGRUaW1lWm9uZU9mZnNldCA9IGZhbHNlKSB7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGEuc3RhcnREYXRlLnNwbGl0KCctJyk7XG4gIGNvbnN0IGVuZERhdGUgPSBkYXRhLmVuZERhdGUuc3BsaXQoJy0nKTtcbiAgbGV0IHN0YXJ0ID0gJyc7XG4gIGxldCBlbmQgPSAnJztcbiAgbGV0IGFsbGRheSA9IGZhbHNlO1xuICBpZiAoZGF0YS5zdGFydFRpbWUgIT0gbnVsbCAmJiBkYXRhLmVuZFRpbWUgIT0gbnVsbCkge1xuICAgIC8vIEFkanVzdCBmb3IgdGltZXpvbmUsIGlmIHNldCAoc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfdHpfZGF0YWJhc2VfdGltZV96b25lcyBmb3IgZWl0aGVyIHRoZSBUWiBuYW1lIG9yIHRoZSBvZmZzZXQpXG4gICAgaWYgKGRhdGEudGltZVpvbmVPZmZzZXQgIT0gbnVsbCAmJiBkYXRhLnRpbWVab25lT2Zmc2V0ICE9ICcnKSB7XG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgdGltZXpvbmUgb2Zmc2V0IGdpdmVuLCBjb25zaWRlciBpdFxuICAgICAgc3RhcnQgPSBuZXcgRGF0ZShcbiAgICAgICAgc3RhcnREYXRlWzBdICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIHN0YXJ0RGF0ZVsxXSArXG4gICAgICAgICAgJy0nICtcbiAgICAgICAgICBzdGFydERhdGVbMl0gK1xuICAgICAgICAgICdUJyArXG4gICAgICAgICAgZGF0YS5zdGFydFRpbWUgK1xuICAgICAgICAgICc6MDAuMDAwJyArXG4gICAgICAgICAgZGF0YS50aW1lWm9uZU9mZnNldFxuICAgICAgKTtcbiAgICAgIGVuZCA9IG5ldyBEYXRlKFxuICAgICAgICBlbmREYXRlWzBdICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIGVuZERhdGVbMV0gK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgZW5kRGF0ZVsyXSArXG4gICAgICAgICAgJ1QnICtcbiAgICAgICAgICBkYXRhLmVuZFRpbWUgK1xuICAgICAgICAgICc6MDAuMDAwJyArXG4gICAgICAgICAgZGF0YS50aW1lWm9uZU9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gb2Zmc2V0LCB3ZSBwcmVwYXJlIHRoZSB0aW1lLCBhc3N1bWluZyBpdCBpcyBVVEMgZm9ybWF0dGVkXG4gICAgICBzdGFydCA9IG5ldyBEYXRlKFxuICAgICAgICBzdGFydERhdGVbMF0gKyAnLScgKyBzdGFydERhdGVbMV0gKyAnLScgKyBzdGFydERhdGVbMl0gKyAnVCcgKyBkYXRhLnN0YXJ0VGltZSArICc6MDAuMDAwKzAwOjAwJ1xuICAgICAgKTtcbiAgICAgIGVuZCA9IG5ldyBEYXRlKGVuZERhdGVbMF0gKyAnLScgKyBlbmREYXRlWzFdICsgJy0nICsgZW5kRGF0ZVsyXSArICdUJyArIGRhdGEuZW5kVGltZSArICc6MDAuMDAwKzAwOjAwJyk7XG4gICAgICBpZiAoZGF0YS50aW1lWm9uZSAhPSBudWxsICYmIGRhdGEudGltZVpvbmUgIT0gJycpIHtcbiAgICAgICAgLy8gaWYgYSB0aW1lem9uZSBpcyBnaXZlbiwgd2UgYWRqdXN0IGR5bmFtaWNhbGx5IHdpdGggdGhlIG1vZGVybiB0b0xvY2FsZVN0cmluZyBmdW5jdGlvblxuICAgICAgICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoc3RhcnQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyB0aW1lWm9uZTogJ1VUQycgfSkpO1xuICAgICAgICBpZiAoZGF0YS50aW1lWm9uZSA9PSAnY3VycmVudEJyb3dzZXInKSB7XG4gICAgICAgICAgZGF0YS50aW1lWm9uZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ekRhdGUgPSBuZXcgRGF0ZShzdGFydC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IHRpbWVab25lOiBkYXRhLnRpbWVab25lIH0pKTtcbiAgICAgICAgY29uc3QgY2FsY09mZnNldCA9IHV0Y0RhdGUuZ2V0VGltZSgpIC0gdHpEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgc3RhcnQuc2V0VGltZShzdGFydC5nZXRUaW1lKCkgKyBjYWxjT2Zmc2V0KTtcbiAgICAgICAgZW5kLnNldFRpbWUoZW5kLmdldFRpbWUoKSArIGNhbGNPZmZzZXQpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGFydCA9IHN0YXJ0LnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnLjAwMCcsICcnKTtcbiAgICBlbmQgPSBlbmQudG9JU09TdHJpbmcoKS5yZXBsYWNlKCcuMDAwJywgJycpO1xuICAgIGlmIChzdHlsZSA9PSAnY2xlYW4nKSB7XG4gICAgICBzdGFydCA9IHN0YXJ0LnJlcGxhY2UoLy0vZywgJycpLnJlcGxhY2UoLzovZywgJycpO1xuICAgICAgZW5kID0gZW5kLnJlcGxhY2UoLy0vZywgJycpLnJlcGxhY2UoLzovZywgJycpO1xuICAgIH1cbiAgICBpZiAoYWRkVGltZVpvbmVPZmZzZXQpIHtcbiAgICAgIGxldCB0ek9mZnNldFN0YXJ0ID0gJyc7XG4gICAgICBsZXQgdHpPZmZzZXRFbmQgPSAnJztcbiAgICAgIGlmIChkYXRhLnRpbWVab25lT2Zmc2V0ICE9IG51bGwgJiYgZGF0YS50aW1lWm9uZU9mZnNldCAhPSAnJykge1xuICAgICAgICB0ek9mZnNldFN0YXJ0ID0gZGF0YS50aW1lWm9uZU9mZnNldDtcbiAgICAgICAgdHpPZmZzZXRFbmQgPSBkYXRhLnRpbWVab25lT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnRpbWVab25lICE9IG51bGwgJiYgZGF0YS50aW1lWm9uZSAhPSAnJykge1xuICAgICAgICBsZXQgdHpPZmZzZXREYXRlU3RhcnQgPSBuZXcgRGF0ZShzdGFydC50b0xvY2FsZVN0cmluZygnc3YnLCB7IHRpbWVab25lOiBkYXRhLnRpbWVab25lIH0pKTtcbiAgICAgICAgbGV0IHR6T2Zmc2V0U3RhcnRTZWFyY2ggPSB0ek9mZnNldERhdGVTdGFydC50b1N0cmluZygpLm1hdGNoKC9HTVQoLns1fSkvZyk7XG4gICAgICAgIHR6T2Zmc2V0U3RhcnQgPSB0ek9mZnNldFN0YXJ0U2VhcmNoWzBdLnJlcGxhY2UoL0dNVCguezN9KSguezJ9KS9nLCAnJDE6JDInKTtcbiAgICAgICAgbGV0IHR6T2Zmc2V0RGF0ZUVuZCA9IG5ldyBEYXRlKGVuZC50b0xvY2FsZVN0cmluZygnc3YnLCB7IHRpbWVab25lOiBkYXRhLnRpbWVab25lIH0pKTtcbiAgICAgICAgbGV0IHR6T2Zmc2V0RW5kU2VhcmNoID0gdHpPZmZzZXREYXRlRW5kLnRvU3RyaW5nKCkubWF0Y2goL0dNVCguezV9KS9nKTtcbiAgICAgICAgdHpPZmZzZXRFbmQgPSB0ek9mZnNldEVuZFNlYXJjaFswXS5yZXBsYWNlKC9HTVQoLnszfSkoLnsyfSkvZywgJyQxOiQyJyk7XG4gICAgICB9XG4gICAgICBzdGFydCA9IHN0YXJ0LnNsaWNlKDAsIC0xKSArIHR6T2Zmc2V0U3RhcnQ7XG4gICAgICBlbmQgPSBlbmQuc2xpY2UoMCwgLTEpICsgdHpPZmZzZXRFbmQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHdvdWxkIGJlIGFuIGFsbGRheSBldmVudCB0aGVuXG4gICAgYWxsZGF5ID0gdHJ1ZTtcbiAgICBzdGFydCA9IG5ldyBEYXRlKERhdGUuVVRDKHN0YXJ0RGF0ZVswXSwgc3RhcnREYXRlWzFdIC0gMSwgc3RhcnREYXRlWzJdKSk7XG4gICAgbGV0IGJyZWFrU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpLnJlcGxhY2UoL1QoLispWi9nLCAnJyk7XG4gICAgZW5kID0gbmV3IERhdGUoRGF0ZS5VVEMoZW5kRGF0ZVswXSwgZW5kRGF0ZVsxXSAtIDEsIGVuZERhdGVbMl0pKTtcbiAgICBpZiAodGFyZ2V0Q2FsID09ICdnb29nbGUnIHx8IHRhcmdldENhbCA9PSAnbWljcm9zb2Z0JyB8fCB0YXJnZXRDYWwgPT0gJ2ljYWwnKSB7XG4gICAgICBlbmQuc2V0RGF0ZShlbmQuZ2V0RGF0ZSgpICsgMSk7IC8vIGluY3JlbWVudCB0aGUgZGF5IGJ5IDEgZm9yIEdvb2dsZSBDYWxlbmRhciwgaUNhbCBhbmQgT3V0bG9va1xuICAgIH1cbiAgICBsZXQgYnJlYWtFbmQgPSBlbmQudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9UKC4rKVovZywgJycpO1xuICAgIGlmIChzdHlsZSA9PSAnY2xlYW4nKSB7XG4gICAgICBicmVha1N0YXJ0ID0gYnJlYWtTdGFydC5yZXBsYWNlKC8tL2csICcnKTtcbiAgICAgIGJyZWFrRW5kID0gYnJlYWtFbmQucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgfVxuICAgIHN0YXJ0ID0gYnJlYWtTdGFydDtcbiAgICBlbmQgPSBicmVha0VuZDtcbiAgfVxuICBjb25zdCByZXR1cm5PYmplY3QgPSB7IHN0YXJ0LCBlbmQsIGFsbGRheSB9O1xuICByZXR1cm4gcmV0dXJuT2JqZWN0O1xufVxuXG4vLyBTSEFSRUQgRlVOQ1RJT04gVE8gU0VDVVJFIFVSTFNcbmZ1bmN0aW9uIGF0Y2Jfc2VjdXJlX3VybCh1cmwsIHRocm93RXJyb3IgPSB0cnVlKSB7XG4gIGlmIChcbiAgICB1cmwubWF0Y2goXG4gICAgICAvKChcXC5cXC5cXC8pfChcXC5cXC5cXFxcKXwoJTJlJTJlJTJmKXwoJTI1MmUlMjUyZSUyNTJmKXwoJTJlJTJlXFwvKXwoJTI1MmUlMjUyZVxcLyl8KFxcLlxcLiUyZil8KFxcLlxcLiUyNTJmKXwoJTJlJTJlJTVjKXwoJTI1MmUlMjUyZSUyNTVjKXwoJTJlJTJlXFxcXCl8KCUyNTJlJTI1MmVcXFxcKXwoXFwuXFwuJTVjKXwoXFwuXFwuJTI1NWMpfChcXC5cXC4lYzAlYWYpfChcXC5cXC4lMjVjMCUyNWFmKXwoXFwuXFwuJWMxJTljKXwoXFwuXFwuJTI1YzElMjU5YykpL2dpXG4gICAgKVxuICApIHtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1NlZW1zIGxpa2UgdGhlIGdlbmVyYXRlZCBVUkwgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHNlY3VyaXR5IGlzc3VlIGFuZCBnb3QgYmxvY2tlZC4gUGxlYXNlIGNoZWNrIHRoZSBjYWxlbmRhciBidXR0b24gcGFyYW1ldGVycyEnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gU0hBUkVEIEZVTkNUSU9OIFRPIENSRUFURSBJTkZPIE1PREFMU1xuZnVuY3Rpb24gYXRjYl9jcmVhdGVfbW9kYWwoZGF0YSwgaGVhZGxpbmUsIGNvbnRlbnQsIGJ1dHRvbnMsIHR5cGUgPSAnJykge1xuICAvLyBzZXR0aW5nIHRoZSBzdGFnZVxuICBjb25zdCBiZ092ZXJsYXkgPSBhdGNiX2dlbmVyYXRlX2JnX292ZXJsYXkoJ21vZGFsJywgJ2NsaWNrJywgZGF0YS5iYWNrZ3JvdW5kKTtcbiAgY29uc3QgaW5mb01vZGFsV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBpbmZvTW9kYWxXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2F0Y2ItbW9kYWwnLCAnYXRjYi1pbmZvLW1vZGFsJyk7XG4gIGluZm9Nb2RhbFdyYXBwZXIudGFiSW5kZXggPSAwO1xuICBiZ092ZXJsYXkuYXBwZW5kQ2hpbGQoaW5mb01vZGFsV3JhcHBlcik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmdPdmVybGF5KTtcbiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdhdGNiLW1vZGFsLW5vLXNjcm9sbCcpO1xuICBjb25zdCBwYXJlbnRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkYXRhLmlkZW50aWZpZXIpO1xuICBpZiAocGFyZW50QnV0dG9uICE9IG51bGwpIHtcbiAgICBwYXJlbnRCdXR0b24uY2xhc3NMaXN0LmFkZCgnYXRjYi1hY3RpdmUtbW9kYWwnKTtcbiAgfVxuICBjb25zdCBpbmZvTW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgaW5mb01vZGFsLmNsYXNzTGlzdC5hZGQoJ2F0Y2ItbW9kYWwtYm94Jyk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2luc3RhZ3JhbSc6XG4gICAgICBpbmZvTW9kYWwuY2xhc3NMaXN0LmFkZCgnYXRjYi1tb2RhbC1pbnN0YWdyYW0nKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGluZm9Nb2RhbFdyYXBwZXIuYXBwZW5kQ2hpbGQoaW5mb01vZGFsKTtcbiAgLy8gc2V0IG92ZXJsYXkgc2l6ZSBqdXN0IHRvIGJlIHN1cmVcbiAgYXRjYl9zZXRfZnVsbHNpemUoYmdPdmVybGF5KTtcbiAgLy8gYWRkaW5nIGhlYWRsaW5lXG4gIGNvbnN0IGluZm9Nb2RhbEhlYWRsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGluZm9Nb2RhbEhlYWRsaW5lLmNsYXNzTGlzdC5hZGQoJ2F0Y2ItbW9kYWwtaGVhZGxpbmUnKTtcbiAgaW5mb01vZGFsSGVhZGxpbmUudGV4dENvbnRlbnQgPSBoZWFkbGluZTtcbiAgaW5mb01vZGFsLmFwcGVuZENoaWxkKGluZm9Nb2RhbEhlYWRsaW5lKTtcbiAgLy8gYW5kIHRleHQgY29udGVudFxuICBjb25zdCBpbmZvTW9kYWxDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGluZm9Nb2RhbENvbnRlbnQuY2xhc3NMaXN0LmFkZCgnYXRjYi1tb2RhbC1jb250ZW50Jyk7XG4gIGluZm9Nb2RhbENvbnRlbnQuaW5uZXJIVE1MID0gY29udGVudDtcbiAgaW5mb01vZGFsLmFwcGVuZENoaWxkKGluZm9Nb2RhbENvbnRlbnQpO1xuICAvLyBhbmQgYSBidXR0b25zXG4gIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uLCBpbmRleCkgPT4ge1xuICAgIGxldCBpbmZvTW9kYWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICBpbmZvTW9kYWxCdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuICAgIGluZm9Nb2RhbEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdhdGNiLW1vZGFsLWJ0bicpO1xuICAgIGluZm9Nb2RhbEJ1dHRvbi50ZXh0Q29udGVudCA9IGJ1dHRvbi5sYWJlbDtcbiAgICBpbmZvTW9kYWwuYXBwZW5kQ2hpbGQoaW5mb01vZGFsQnV0dG9uKTtcbiAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgaW5mb01vZGFsQnV0dG9uLmZvY3VzKCk7XG4gICAgfVxuICAgIHN3aXRjaCAoYnV0dG9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluZm9Nb2RhbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgYXRjYl9kZWJvdW5jZSgoKSA9PiBhdGNiX2Nsb3NlKCkpXG4gICAgICAgICk7XG4gICAgICAgIGluZm9Nb2RhbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdrZXlkb3duJyxcbiAgICAgICAgICBhdGNiX2RlYm91bmNlX2xlYWRpbmcoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgYXRjYl9jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIFNIQVJFRCBGVU5DVElPTiBUTyBDQUxDVUxBVEUgVEhFIFBPU0lUSU9OIE9GIFRIRSBEUk9QRE9XTiBMSVNUXG5mdW5jdGlvbiBhdGNiX3Bvc2l0aW9uX2xpc3QodHJpZ2dlciwgbGlzdCkge1xuICBsZXQgYW5jaG9yU2V0ID0gZmFsc2U7XG4gIGlmICh0cmlnZ2VyLm5leHRFbGVtZW50U2libGluZyAhPT0gbnVsbCkge1xuICAgIGlmICh0cmlnZ2VyLm5leHRFbGVtZW50U2libGluZy5jbGFzc0xpc3QuY29udGFpbnMoJ2F0Y2ItZHJvcGRvd24tYW5jaG9yJykpIHtcbiAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyLm5leHRTaWJsaW5nO1xuICAgICAgYW5jaG9yU2V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVjdCA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxpc3Quc3R5bGUud2lkdGggPSByZWN0LndpZHRoICsgJ3B4JztcbiAgaWYgKGFuY2hvclNldCA9PT0gdHJ1ZSkge1xuICAgIGxpc3Quc3R5bGUudG9wID0gcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSArICdweCc7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC5zdHlsZS50b3AgPSByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZICsgJ3B4JztcbiAgfVxuICBsaXN0LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyAncHgnO1xufVxuXG4vLyBTSEFSRUQgRlVOQ1RJT04gVE8gREVGSU5FIFdJRFRIIEFORCBIRUlHSFQgRk9SIFwiRlVMTFNDUkVFTlwiIEZVTExTSVpFIEVMRU1FTlRTXG5mdW5jdGlvbiBhdGNiX3NldF9mdWxsc2l6ZShlbCkge1xuICBlbC5zdHlsZS53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoICsgJ3B4JztcbiAgZWwuc3R5bGUuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0ICsgMTAwICsgJ3B4Jztcbn1cblxuLy8gU0hBUkVEIERFQk9VTkNFIEFORCBUSFJPVFRMRSBGVU5DVElPTlNcbi8vIGdvaW5nIGZvciBsYXN0IGNhbGwgZGVib3VuY2VcbmZ1bmN0aW9uIGF0Y2JfZGVib3VuY2UoZnVuYywgdGltZW91dCA9IDIwMCkge1xuICBsZXQgdGltZXI7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG59XG4vLyBkcm9wcGluZyBzdWJzZXF1ZW50IGNhbGxzIGRlYm91bmNlXG5mdW5jdGlvbiBhdGNiX2RlYm91bmNlX2xlYWRpbmcoZnVuYywgdGltZW91dCA9IDIwMCkge1xuICBsZXQgdGltZXI7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGlmICghdGltZXIpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xufVxuLy8gdGhyb3R0bGVcbmZ1bmN0aW9uIGF0Y2JfdGhyb3R0bGUoZnVuYywgZGVsYXkgPSAxMCkge1xuICBsZXQgcmVzdWx0O1xuICBsZXQgdGltZW91dCA9IG51bGw7XG4gIGxldCBwcmV2aW91cyA9IDA7XG4gIGxldCBsYXRlciA9ICguLi5hcmdzKSA9PiB7XG4gICAgcHJldmlvdXMgPSBEYXRlLm5vdygpO1xuICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCByZW1haW5pbmcgPSBkZWxheSAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IGRlbGF5KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vLyBHTE9CQUwgTElTVEVORVJTXG5pZiAoaXNCcm93c2VyKCkpIHtcbiAgLy8gR2xvYmFsIGxpc3RlbmVyIHRvIEVTQyBrZXkgdG8gY2xvc2UgZHJvcGRvd25cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAna2V5ZG93bicsXG4gICAgYXRjYl9kZWJvdW5jZV9sZWFkaW5nKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgYXRjYl9jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG4gIC8vIEdsb2JhbCBsaXN0ZW5lciB0byBhbnkgc2NyZWVuIGNoYW5nZXNcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ3Jlc2l6ZScsXG4gICAgYXRjYl90aHJvdHRsZSgoKSA9PiB7XG4gICAgICBsZXQgYWN0aXZlT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdGNiLWJnb3ZlcmxheScpO1xuICAgICAgaWYgKGFjdGl2ZU92ZXJsYXkgIT0gbnVsbCkge1xuICAgICAgICBhdGNiX3NldF9mdWxsc2l6ZShhY3RpdmVPdmVybGF5KTtcbiAgICAgIH1cbiAgICAgIGxldCBhY3RpdmVCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXRjYi1hY3RpdmUnKTtcbiAgICAgIGxldCBhY3RpdmVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmF0Y2ItZHJvcGRvd24nKTtcbiAgICAgIGlmIChhY3RpdmVCdXR0b24gIT0gbnVsbCAmJiBhY3RpdmVMaXN0ICE9IG51bGwpIHtcbiAgICAgICAgYXRjYl9wb3NpdGlvbl9saXN0KGFjdGl2ZUJ1dHRvbiwgYWN0aXZlTGlzdCk7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn1cblxuLy8gVFJBTlNMQVRJT05TXG5mdW5jdGlvbiBhdGNiX3RyYW5zbGF0ZShpZGVudGlmaWVyLCBsYW5ndWFnZSkge1xuICBzd2l0Y2ggKGxhbmd1YWdlKSB7XG4gICAgY2FzZSAnZW4nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBzd2l0Y2ggKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY2FzZSAnQWRkIHRvIENhbGVuZGFyJzpcbiAgICAgICAgICByZXR1cm4gJ0FkZCB0byBDYWxlbmRhcic7XG4gICAgICAgIGNhc2UgJ2lDYWwgRmlsZSc6XG4gICAgICAgICAgcmV0dXJuICdpQ2FsIEZpbGUnO1xuICAgICAgICBjYXNlICdDbG9zZSc6XG4gICAgICAgICAgcmV0dXJuICdDbG9zZSc7XG4gICAgICAgIGNhc2UgJ0Nsb3NlIFNlbGVjdGlvbic6XG4gICAgICAgICAgcmV0dXJuICdDbG9zZSBTZWxlY3Rpb24nO1xuICAgICAgICBjYXNlICdDbG9zZSBub3RlJzpcbiAgICAgICAgICByZXR1cm4gJ0Nsb3NlIG5vdGUnO1xuICAgICAgICBjYXNlICdJbnN0YWdyYW0gaUNhbCc6XG4gICAgICAgICAgcmV0dXJuICdJbnN0YWdyYW0gaUNhbCc7XG4gICAgICAgIGNhc2UgJ0luc3RhZ3JhbSBpbmZvIGRlc2NyaXB0aW9uJzpcbiAgICAgICAgICByZXR1cm4gXCJVbmZvcnR1bmF0ZWx5LCB0aGUgSW5zdGFncmFtIGJyb3dzZXIgaGFzIGl0cyBwcm9ibGVtcyB3aXRoIHRoZSB3YXkgd2UgZ2VuZXJhdGUgdGhlIGNhbGVuZGFyIGZpbGUuPGJyPldlIGF1dG9tYXRpY2FsbHkgcHV0IGEgbWFnaWNhbCBVUkwgaW50byB5b3VyIHBob25lJ3MgY2xpcGJvYXJkLjxicj48b2w+PGxpPkNsb3NlIHRoaXMgbm90ZSwgLi4uPC9saT48bGk+PHN0cm9uZz5PcGVuIGFueSBvdGhlciBicm93c2VyPC9zdHJvbmc+IG9uIHlvdXIgcGhvbmUsIC4uLjwvbGk+PGxpPjxzdHJvbmc+UGFzdGU8L3N0cm9uZz4gdGhlIGNsaXBib2FyZCBjb250ZW50IGFuZCBnby5cIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RlJzpcbiAgICAgIHN3aXRjaCAoaWRlbnRpZmllcikge1xuICAgICAgICBjYXNlICdBZGQgdG8gQ2FsZW5kYXInOlxuICAgICAgICAgIHJldHVybiAnSW0gS2FsZW5kZXIgc3BlaWNoZXJuJztcbiAgICAgICAgY2FzZSAnaUNhbCBGaWxlJzpcbiAgICAgICAgICByZXR1cm4gJ2lDYWwtRGF0ZWknO1xuICAgICAgICBjYXNlICdDbG9zZSc6XG4gICAgICAgICAgcmV0dXJuICdTY2hsaWXDn2VuJztcbiAgICAgICAgY2FzZSAnQ2xvc2UgU2VsZWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gJ0F1c3dhaGwgc2NobGllw59lbic7XG4gICAgICAgIGNhc2UgJ0Nsb3NlIG5vdGUnOlxuICAgICAgICAgIHJldHVybiAnRmVuc3RlciBzY2hsaWXDn2VuJztcbiAgICAgICAgY2FzZSAnSW5zdGFncmFtIGlDYWwnOlxuICAgICAgICAgIHJldHVybiAnSW5zdGFncmFtIGlDYWwnO1xuICAgICAgICBjYXNlICdJbnN0YWdyYW0gaW5mbyBkZXNjcmlwdGlvbic6XG4gICAgICAgICAgcmV0dXJuICdMZWlkZXIgaGF0IGRlciBJbnN0YWdyYW0tQnJvd3NlciBzbyBzZWluZSBQcm9ibGVtZSBtaXQgZGVyIEFydCwgd2llIHdpciBLYWxlbmRlci1EYXRlaWVuIGVyemV1Z2VuLjxicj5XaXIgaGFiZW4gYXV0b21hdGlzY2ggZWluZSBtYWdpc2NoZSBVUkwgaW4gZGllIFp3aXNjaGVuYWJsYWdlIGRlaW5lcyBTbWFydHBob25lcyBrb3BpZXJ0Ljxicj48b2w+PGxpPlNjaGxpZcOfZSBkaWVzZXMgRmVuc3RlciwgLi4uPC9saT48bGk+PHN0cm9uZz7DlmZmbmUgZWluZW4gYW5kZXJlbiBCcm93c2VyPC9zdHJvbmc+IGF1ZiBkZWluZW0gU21hcnRwaG9uZSwgLi4uPC9saT48bGk+TnV0emUgZGllIDxzdHJvbmc+RWluZsO8Z2VuPC9zdHJvbmc+LUZ1bmt0aW9uLCB1bSBmb3J0enVmYWhyZW4uJztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG4gIC8vIGlmIG5vdGhpbmcgZm91bmQsIHJldHVybiB0aGUgb3JpZ2luYWwgaWRlbnRpZmllclxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGF0Y2JfYWN0aW9uLCBhdGNiX2luaXQgfTtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi90cmFuc2xhdGlvbnMuanNcIik7XG5cbmNvbnN0IGFkZFRvQ2FsZW5kYXIgPSAoc2Vzc2lvbiwgdGltZXpvbmUpID0+IHtcbiAgLy9jb25zb2xlLmxvZyhzZXNzaW9uKTtcbiAgY29uc3QgaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTsgLy90aGlzIHdpbGwgYmUgcmV0dXJuZWQgW2VsXVxuICBob2xkZXIuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTsgLy90aGlzIHdpbGwgYmUgcmV0dXJuZWQgW2VsXVxuICBlbC5jbGFzc0xpc3QuYWRkKFwiYXRjYlwiKTtcbiAgZWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB2YXIgZGF0ZSA9IDA7XG4gIGlmIChcbiAgICBzZXNzaW9uLmNhdHMubTM2MF9zZXNzaW9uc19kYXlbMF0gJiZcbiAgICBzZXNzaW9uLmNhdHMubTM2MF9zZXNzaW9uc19kYXlbMF0ubWV0YWZpZWxkcyAmJlxuICAgIHNlc3Npb24uY2F0cy5tMzYwX3Nlc3Npb25zX2RheVswXS5tZXRhZmllbGRzLmRheV9mdWxsXG4gICkge1xuICAgIGRhdGUgPSBzZXNzaW9uLmNhdHMubTM2MF9zZXNzaW9uc19kYXlbMF0ubWV0YWZpZWxkcy5kYXlfZnVsbDtcbiAgfVxuICBjb25zdCBzdGFydCA9IHNlc3Npb24ubWV0YWZpZWxkcy50aW1lX3N0YXJ0IHx8IFwiMDA6MDBcIjtcbiAgY29uc3QgZW5kID0gc2Vzc2lvbi5tZXRhZmllbGRzLnRpbWVfZW5kIHx8IFwiMDA6MDBcIjtcbiAgaWYgKCF0aW1lem9uZSkgdGltZXpvbmUgPSBcIkV1cm9wZS9Mb25kb25cIjtcbiAgY29uc3QgcGF0dGVybl9yZXBsYWNlID0gL1wiL2dpO1xuICBlbC5pbm5lckhUTUwgPVxuICAgIGB7XG4gICBcIm5hbWVcIjpcImAgK1xuICAgIHNlc3Npb24ucG9zdF90aXRsZSArXG4gICAgYFwiLFxuICAgIFwiZGVzY3JpcHRpb25cIjpcImAgK1xuICAgIHN0cmlwVGFncyhzZXNzaW9uLnBvc3RfY29udGVudCkucmVwbGFjZShwYXR0ZXJuX3JlcGxhY2UsIFwiJ1wiKSArXG4gICAgYFwiLFxuXG4gICAgXCJzdGFydERhdGVcIjpcImAgK1xuICAgIGRhdGUgK1xuICAgIGBcIixcbiAgICBcImVuZERhdGVcIjpcImAgK1xuICAgIGRhdGUgK1xuICAgIGBcIixcbiAgICBcInN0YXJ0VGltZVwiOlwiYCArXG4gICAgc3RhcnQgK1xuICAgIGBcIixcbiAgICBcImVuZFRpbWVcIjpcImAgK1xuICAgIGVuZCArXG4gICAgYFwiLFxuICAgIFwibG9jYXRpb25cIjpcIlwiLFxuICAgIFwibGFiZWxcIjpcImAgK1xuICAgIHRyYW5zbGF0aW9ucyhcIkFkZCB0byBDYWxlbmRhclwiKSArXG4gICAgYFwiLFxuICAgIFwib3B0aW9uc1wiOltcbiAgICAgIFwiQXBwbGVcIixcbiAgICAgIFwiR29vZ2xlXCIsXG4gICAgICBcImlDYWxcIixcbiAgICAgIFwiTWljcm9zb2Z0MzY1XCIsXG4gICAgICBcIk1pY3Jvc29mdFRlYW1zXCIsXG4gICAgICBcIk91dGxvb2suY29tXCIsXG4gICAgICBcIllhaG9vXCJcbiAgICBdLFxuICAgIFwidHJpZ2dlclwiOlwiY2xpY2tcIixcbiAgICBcInRpbWVab25lXCI6XCJgICtcbiAgICB0aW1lem9uZSArXG4gICAgYFwiLFxuICAgIFwiaUNhbEZpbGVOYW1lXCI6XCJSZW1pbmRlci1FdmVudFwiXG59YDtcbiAgLy9jb25zb2xlLmxvZyhlbC5pbm5lckhUTUwpO1xuICAvKlxuPGRpdiBjbGFzcz1cImF0Y2JcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbntcbiAgXCJuYW1lXCI6XCJSZW1pbmRlciB0byBjaGVjayB0aGUgYWRkLXRvLWNhbGVuZGFyLWJ1dHRvbiByZXBvXCIsXG4gIFwiZGVzY3JpcHRpb25cIjpcIkNoZWNrIG91dCB0aGUgbWF5YmUgZWFzaWVzdCB3YXkgdG8gaW5jbHVkZSBhZGQtdG8tY2FsZW5kYXItYnV0dG9ucyB0byB5b3VyIHdlYnNpdGUgYXQ6PGJyPuKGkiBbdXJsXWh0dHBzOi8vZ2l0aHViLmNvbS9qZWt1ZXIvYWRkLXRvLWNhbGVuZGFyLWJ1dHRvblsvdXJsXVwiLFxuICBcInN0YXJ0RGF0ZVwiOlwiMjAyMi0wMS0xNFwiLFxuICBcImVuZERhdGVcIjpcIjIwMjItMDEtMThcIixcbiAgXCJzdGFydFRpbWVcIjpcIjEwOjE1XCIsXG4gIFwiZW5kVGltZVwiOlwiMjM6MzBcIixcbiAgXCJsb2NhdGlvblwiOlwiV29ybGQgV2lkZSBXZWJcIixcbiAgXCJvcHRpb25zXCI6W1xuICAgIFwiQXBwbGVcIixcbiAgICBcIkdvb2dsZVwiLFxuICAgIFwiaUNhbFwiLFxuICAgIFwiTWljcm9zb2Z0MzY1XCIsXG4gICAgXCJNaWNyb3NvZnRUZWFtc1wiLFxuICAgIFwiT3V0bG9vay5jb21cIixcbiAgICBcIllhaG9vXCJcbiAgXSxcbiAgXCJ0aW1lWm9uZVwiOlwiRXVyb3BlL0JlcmxpblwiLFxuICBcImlDYWxGaWxlTmFtZVwiOlwiUmVtaW5kZXItRXZlbnRcIlxufVxuPC9kaXY+XG4qL1xuICBob2xkZXIuYXBwZW5kQ2hpbGQoZWwpO1xuICBjb25zdCB0aW1lX25vdyA9IG5ldyBEYXRlKCk7XG4gIC8vY29uc29sZS5sb2coZGF0ZSwgdGltZV9ub3csIGR0X2RhdGUsIFwiZHRcIiwgRGF0ZS5wYXJzZShkYXRlKSwgbmV3IERhdGUoZGF0ZSkpO1xuICBjb25zdCB0aW1lX2V2ZW50ID0gbmV3IERhdGUoZGF0ZSk7XG4gIGNvbnN0IGR0X2RhdGUgPSB0aW1lX25vdy5nZXRUaW1lKCkgLSB0aW1lX2V2ZW50LmdldFRpbWUoKTtcbiAgLy9jb25zb2xlLmxvZyhkYXRlLCB0aW1lX25vdy5nZXRUaW1lKCksIGR0X2RhdGUsIFwiZHRcIiwgKG5ldyBEYXRlKGRhdGUpKS5nZXRUaW1lKCkpO1xuICBpZiAoZGF0ZSAmJiBkdF9kYXRlIDwgMCkgcmV0dXJuIGhvbGRlcjtcblxuICByZXR1cm4gZmFsc2U7XG59OyAvL1xuXG5jb25zdCBzdHJpcFRhZ3MgPSAoaHRtbCkgPT4ge1xuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgY29uc3QgdGV4dCA9IGRpdi50ZXh0Q29udGVudCB8fCBkaXYuaW5uZXJUZXh0IHx8IFwiXCI7XG4gIGNvbnN0IHN0ciA9IHRleHRcbiAgICAvLy5yZXBsYWNlKC9bXlxcdTAwMDAtXFx1MDA3Rl0rL2csIFwiXCIpXG4gICAgLnJlcGxhY2UoL1xcdC9nLCBcIlwiKTtcbiAgcmV0dXJuIHN0cjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYWRkVG9DYWxlbmRhcjtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi90cmFuc2xhdGlvbnMuanNcIik7XG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCBmaWx0ZXJhYmxlID0gW1xuICBjb25zdGFudHMubG9jYXRpb25fdGFnLFxuICBjb25zdGFudHMudGFnLFxuICBjb25zdGFudHMudHJhY2ssXG4gIGNvbnN0YW50cy5wYXNzX3R5cGUsXG5dO1xuXG5jb25zdCBjYXRlZ29yaWVzRmlsdGVyID0gKGNhdHMpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVsZW1lbnQuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiRklMVEVSIEJZXCIpO1xuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuICBjb25zb2xlLmxvZyhjYXRzLCBcImNhdHNcIik7XG4gIGZvciAodmFyIGkgaW4gY2F0cykge1xuICAgIGNvbnNvbGUubG9nKGksIGNhdHNbaV0pO1xuICAgIGlmIChmaWx0ZXJhYmxlLmluZGV4T2YoaSkgIT09IC0xICYmIGNhdHNbaV0ubGVuZ3RoKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiQUREIElUIElOXCIsIGkpO1xuICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICAgIGNvbnN0IG9wdGlvbl9pbml0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbl9pbml0LmlubmVySFRNTCA9IFwiXCIgKyBjb25zdGFudHMuY2F0c190aXRsZXNbaV07XG4gICAgICBvcHRpb25faW5pdC52YWx1ZSA9IFwiXCI7XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uX2luaXQpO1xuICAgICAgc2VsZWN0LmlkID0gaTtcbiAgICAgIGZvciAodmFyIGlpIGluIGNhdHNbaV0pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgICAgb3B0aW9uLmlubmVySFRNTCA9IGNhdHNbaV1baWldW1wibmFtZVwiXTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gY2F0c1tpXVtpaV1bXCJzbHVnXCJdO1xuICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICAgIH1cbiAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHdpbmRvdy5zZXNzaW9uRmlsdGVyQnlTZWFyY2gpO1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiQUREIElUIE5PVFwiLCBpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNhdGVnb3JpZXNGaWx0ZXI7XG4iLCJjb25zdCBjb25zdGFudHMgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgdHJhbnNsYXRpb25zID0gcmVxdWlyZShcIi4uL3RyYW5zbGF0aW9ucy5qc1wiKTtcbmNvbnN0IGNvdW50ZXJDaGVjayA9IChkYXRhLCBjdXJyZW50X3RpbWV6b25lX2RhdGUsIGNvdW50X2lmcmFtZV9idXR0b24pID0+IHtcbiAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICB2YXIgc2Vzc2lvbl9kYXRlID0gMDsgLy9vZiBkYXkgY2F0XG4gIGlmIChcbiAgICBkYXRhLmNhdHNbY29uc3RhbnRzLmRheV1bMF0gJiZcbiAgICBkYXRhLmNhdHNbY29uc3RhbnRzLmRheV1bMF0ubWV0YWZpZWxkcyAmJlxuICAgIGRhdGEuY2F0c1tjb25zdGFudHMuZGF5XVswXS5tZXRhZmllbGRzLmRheV9mdWxsXG4gICkge1xuICAgIHNlc3Npb25fZGF0ZSA9IGRhdGEuY2F0c1tjb25zdGFudHMuZGF5XVswXS5tZXRhZmllbGRzLmRheV9mdWxsO1xuICB9XG4gIHZhciBmdWxsX2RhdGVfc3RhcnQgPVxuICAgIHNlc3Npb25fZGF0ZSArIFwiIFwiICsgZGF0YVtcIm1ldGFmaWVsZHNcIl1bY29uc3RhbnRzLnRpbWVfc3RhcnRdO1xuICB2YXIgZnVsbF9kYXRlX2VuZCA9XG4gICAgc2Vzc2lvbl9kYXRlICsgXCIgXCIgKyBkYXRhW1wibWV0YWZpZWxkc1wiXVtjb25zdGFudHMudGltZV9lbmRdO1xuICAvL2NvbnNvbGUubG9nKFwiWUFZXCIsZGF0YS5wb3N0X3RpdGxlLCBzZXNzaW9uX2RhdGUsIGN1cnJlbnRfdGltZXpvbmVfZGF0ZSAsIGZ1bGxfZGF0ZV9zdGFydCwgZnVsbF9kYXRlX2VuZCwgY291bnRfaWZyYW1lX2J1dHRvbik7XG4gIC8vY29uc3QgcHJlZml4ID0gZnJvbnRfY29yZV92YXIuc2l0ZV91cmw7XG4gIC8vdmFyIGxpbmsgPSBwcmVmaXgrXCIvc2Vzc2lvbi9cIitkYXRhLnBvc3RfbmFtZTsvL2RhdGFbJ21ldGFmaWVsZHMnXVsndXJsJ107XG4gIGlmIChcbiAgICBjdXJyZW50X3RpbWV6b25lX2RhdGUgPCBmdWxsX2RhdGVfc3RhcnRcbiAgICAvLyYmXG4gICAgLy9zZXNzaW9uX2RhdGUgPT09IGN1cnJlbnRfdGltZXpvbmVfZGF0ZS5zcGxpdChcIiBcIilbMF1cbiAgKSB7XG4gICAgLy93YXRjaF9ub3dfYnV0dG9uLmlubmVySFRNTCA9IFwidGhlcmUgd2lsbCBiZSBhIFN0cmVhbSBvbiBzaW5nbGUgcGFnZVwiO1xuICAgIGlmIChcbiAgICAgIC8vIWNvdW50X2lmcmFtZV9idXR0b24udXBjb21taW5nXG4gICAgICAvL3x8XG4gICAgICAvL2NvdW50X2lmcmFtZV9idXR0b24uZnVsbF9kYXRlX3N0YXJ0ID09PSBmdWxsX2RhdGVfc3RhcnRcbiAgICAgIHRydWVcbiAgICApIHtcbiAgICAgIGlmICghY291bnRfaWZyYW1lX2J1dHRvbi5mdWxsX2RhdGVfc3RhcnQpXG4gICAgICAgIGNvdW50X2lmcmFtZV9idXR0b24uZnVsbF9kYXRlX3N0YXJ0ID0gZnVsbF9kYXRlX3N0YXJ0O1xuXG4gICAgICBjb3VudF9pZnJhbWVfYnV0dG9uLnVwY29tbWluZyA9IHRydWU7XG4gICAgICByZXN1bHQgPSB0cmFuc2xhdGlvbnMoXCJVcGNvbWluZ1wiKTtcbiAgICAgIGlmIChcbiAgICAgICAgIWNvdW50X2lmcmFtZV9idXR0b24ud2F0Y2hpbmcgJiZcbiAgICAgICAgIWNvdW50X2lmcmFtZV9idXR0b24uZmlyc3QgJiZcbiAgICAgICAgc2Vzc2lvbl9kYXRlID09PSBjdXJyZW50X3RpbWV6b25lX2RhdGUuc3BsaXQoXCIgXCIpWzBdXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRpbWVfbGVmdCA9XG4gICAgICAgICAgbmV3IERhdGUoZnVsbF9kYXRlX3N0YXJ0LnJlcGxhY2UoL1xcLS9nLCBcIi9cIikpLmdldFRpbWUoKSAtXG4gICAgICAgICAgbmV3IERhdGUoY3VycmVudF90aW1lem9uZV9kYXRlLnJlcGxhY2UoL1xcLS9nLCBcIi9cIikpLmdldFRpbWUoKTtcbiAgICAgICAgdGltZV9sZWZ0ID0gdGltZV9sZWZ0IC8gMTAwMDtcbiAgICAgICAgdmFyIGhvdXJzID0gcGFyc2VJbnQodGltZV9sZWZ0IC8gMzYwMCk7XG4gICAgICAgIHRpbWVfbGVmdCA9IHRpbWVfbGVmdCAlIDM2MDA7XG4gICAgICAgIHZhciBtaW5zID0gcGFyc2VJbnQodGltZV9sZWZ0IC8gNjApO1xuXG4gICAgICAgIG1pbnMgPSAoXCIwXCIgKyBtaW5zKS5zbGljZSgtMik7XG4gICAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSBcIlwiO1xuICAgICAgICByZXN1bHQgPSB0cmFuc2xhdGlvbnMoXCJMaXZlIGluIHt7aH19IGhvdXJzIHt7bX19IG1pbnV0ZXNcIilcbiAgICAgICAgICAucmVwbGFjZShcInt7aH19XCIsIGhvdXJzKVxuICAgICAgICAgIC5yZXBsYWNlKFwie3ttfX1cIiwgbWlucyk7XG4gICAgICAgIC8vd2F0Y2hfbm93X2J1dHRvbl9idXR0b25zLmlkID0gXCJjb3VudGVyX29uXCI7XG4gICAgICAgIHdpbmRvdy50aW1lX2xlZnRfc2V0dGluZ3MgPSB7XG4gICAgICAgICAgZnVsbF9kYXRlX3N0YXJ0OiBmdWxsX2RhdGVfc3RhcnQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvL2NvbnN0IHdhdGNoX25vd19idXR0b25zX2J1dHRvbnMgPSB3cEJ1dHRvbihcIldhdGNoIEFnYWluXCIsIGxpbmspO1xuICAgICAgLy9lbC5hcHBlbmRDaGlsZCh3YXRjaF9ub3dfYnV0dG9uc19idXR0b25zKTtcbiAgICAgIC8vcmVzdWx0ID0gd2F0Y2hfbm93X2J1dHRvbnNfYnV0dG9ucztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIWNvdW50X2lmcmFtZV9idXR0b24uZmlyc3QgJiZcbiAgICAgIHNlc3Npb25fZGF0ZSA9PT0gY3VycmVudF90aW1lem9uZV9kYXRlLnNwbGl0KFwiIFwiKVswXVxuICAgIClcbiAgICAgIGNvdW50X2lmcmFtZV9idXR0b24uZmlyc3QgPSB0cnVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGN1cnJlbnRfdGltZXpvbmVfZGF0ZSA+PSBmdWxsX2RhdGVfc3RhcnQgJiZcbiAgICBjdXJyZW50X3RpbWV6b25lX2RhdGUgPCBmdWxsX2RhdGVfZW5kXG4gICkge1xuICAgIGNvdW50X2lmcmFtZV9idXR0b24ud2F0Y2hpbmcgPSB0cnVlO1xuICAgIC8vd2F0Y2hfbm93X2J1dHRvbi5pbm5lckhUTUwgPSBcInRoZXJlIGlzIGEgU3RyZWFtIG9uIHNpbmdsZSBwYWdlIHJpZ2h0IG5vdyFcIjtcbiAgICByZXN1bHQgPSB0cmFuc2xhdGlvbnMoXCJXYXRjaCBOb3dcIik7XG4gICAgaWYgKFxuICAgICAgIWNvdW50X2lmcmFtZV9idXR0b24uZmlyc3QgJiZcbiAgICAgIHNlc3Npb25fZGF0ZSA9PT0gY3VycmVudF90aW1lem9uZV9kYXRlLnNwbGl0KFwiIFwiKVswXVxuICAgIClcbiAgICAgIGNvdW50X2lmcmFtZV9idXR0b24uZmlyc3QgPSB0cnVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGN1cnJlbnRfdGltZXpvbmVfZGF0ZSA+PSBmdWxsX2RhdGVfZW5kICYmXG4gICAgc2Vzc2lvbl9kYXRlID09PSBjdXJyZW50X3RpbWV6b25lX2RhdGUuc3BsaXQoXCIgXCIpWzBdXG4gICkge1xuICAgIC8vd2F0Y2hfbm93X2J1dHRvbi5pbm5lckhUTUwgPSBcInRoZXJlIHdhcyBhIFN0cmVhbSBvbiBzaW5nbGUgcGFnZSBiZWZvcmVcIjtcbiAgICByZXN1bHQgPSBcIlwiO1xuICAgIGlmIChcbiAgICAgICFjb3VudF9pZnJhbWVfYnV0dG9uLmZpcnN0ICYmXG4gICAgICBzZXNzaW9uX2RhdGUgPT09IGN1cnJlbnRfdGltZXpvbmVfZGF0ZS5zcGxpdChcIiBcIilbMF1cbiAgICApXG4gICAgICBjb3VudF9pZnJhbWVfYnV0dG9uLmZpcnN0ID0gdHJ1ZTtcbiAgfVxuICAvL2NvbnNvbGUubG9nKFwiY2hlY2sgcmVzdWx0IFwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3VudGVyQ2hlY2s7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vdHJhbnNsYXRpb25zLmpzXCIpO1xuY29uc3QgZnVuY3Rpb25fcnVuID0gcmVxdWlyZShcIi4uL3V0aWxzLmpzXCIpO1xuY29uc3QgeyBhdGNiX2FjdGlvbiwgYXRjYl9pbml0IH0gPSByZXF1aXJlKFwiYWRkLXRvLWNhbGVuZGFyLWJ1dHRvblwiKTtcblxudmFyIGNvdW50ZXJfaWQgPSBcIlwiO1xudmFyIHNhdmVkX3RpbWUgPSBcIlwiO1xudmFyIGxhc3RfY291bnRlcl9kaWdpdCA9IFwiXCI7XG52YXIgc2VydmVyX3RpbWUgPSB7fTtcblxuY29uc3QgY291bnRlclRvTGl2ZSA9ICh0aHJpdmVfZGF0YSwgaSwgc2VydmVyX3RpbWVfKSA9PiB7XG4gIHNlcnZlcl90aW1lID0gc2VydmVyX3RpbWVfO1xuICBjb3VudGVyX2lkID0gaTtcbiAgaWYgKFxuICAgIC8vZmFsc2VcbiAgICB3aW5kb3cudGhyaXZlX2RhdGFbaV0uY3VycmVudF90aW1lem9uZV90aW1lICYmXG4gICAgd2luZG93LnRocml2ZV9kYXRhW2ldLmlkID09PSBcInNlc3Npb25fdGVtcGxhdGVcIlxuICApIHtcbiAgICB3aW5kb3cudGhyaXZlX2RhdGFbaV0uY3VycmVudF90aW1lem9uZV90aW1lID1cbiAgICAgIHNlcnZlcl90aW1lLmN1cnJlbnRfdGltZXpvbmVfdGltZTtcbiAgICB3aW5kb3cudGhyaXZlX2RhdGFbaV0uY3VycmVudF90aW1lem9uZV9kYXRlID1cbiAgICAgIHNlcnZlcl90aW1lLmN1cnJlbnRfdGltZXpvbmVfZGF0ZTtcbiAgICBzYXZlZF90aW1lID0gd2luZG93LnRocml2ZV9kYXRhW2ldLmN1cnJlbnRfdGltZXpvbmVfZGF0ZTtcblxuICAgIHdpbmRvdy50aHJpdmVfZGF0YVtpXS5sb2NhbF90aW1lem9uZV90aW1lID0gcGFyc2VJbnQoXG4gICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDBcbiAgICApO1xuXG4gICAgLy9JTlRFUlZBTCBPRiBUSU1FXG4gICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgLy9lbGVtZW50LmlubmVySFRNTCArPSBcIkhlbGxvXCJcbiAgICAgIHdpbmRvdy50aHJpdmVfZGF0YVtjb3VudGVyX2lkXS5sb2NhbF90aW1lem9uZV90aW1lX25vdyA9IHBhcnNlSW50KFxuICAgICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICk7XG4gICAgICB2YXIgZHQgPVxuICAgICAgICB3aW5kb3cudGhyaXZlX2RhdGFbY291bnRlcl9pZF0ubG9jYWxfdGltZXpvbmVfdGltZV9ub3cgLVxuICAgICAgICB3aW5kb3cudGhyaXZlX2RhdGFbY291bnRlcl9pZF0ubG9jYWxfdGltZXpvbmVfdGltZTtcbiAgICAgIHdpbmRvdy50aHJpdmVfZGF0YVtjb3VudGVyX2lkXS5sb2NhbF90aW1lem9uZV90aW1lX2R0ID0gZHQ7XG5cbiAgICAgIGNvbnN0IGRkID0gbmV3IERhdGUoc2F2ZWRfdGltZS5yZXBsYWNlKC9cXC0vZywgXCIvXCIpKTtcbiAgICAgIGRkLnNldFRpbWUoXG4gICAgICAgIGRkLmdldFRpbWUoKSArXG4gICAgICAgICAgLy8tICgzNjAwKjEwMDApXG4gICAgICAgICAgZHQgKiAxMDAwXG4gICAgICApO1xuICAgICAgLypcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcImFhYVwiLFxuICAgICAgICBzYXZlZF90aW1lLFxuICAgICAgICBkZCxcbiAgICAgICAgKFwiMFwiICsgZGQuZ2V0SG91cnMoKSkuc2xpY2UoLTIpLFxuICAgICAgICBkZC5nZXRNaW51dGVzKCksXG4gICAgICAgIGRkLmdldE1pbnV0ZXMoKSAlIDEwXG4gICAgICApO1xuICAgICAgKi9cbiAgICAgIHdpbmRvdy50aHJpdmVfZGF0YVtjb3VudGVyX2lkXS5jdXJyZW50X3RpbWV6b25lX2RhdGUgPVxuICAgICAgICBzYXZlZF90aW1lLnNwbGl0KFwiIFwiKVswXSArXG4gICAgICAgIFwiIFwiICtcbiAgICAgICAgLy9kZC5nZXRIb3VycygpLmxlbmd0aCA9PSAxID8gXCIwXCIrZGQuZ2V0SG91cnMoKSA6IGRkLmdldEhvdXJzKClcbiAgICAgICAgKFwiMFwiICsgZGQuZ2V0SG91cnMoKSkuc2xpY2UoLTIpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICAvL2RkLmdldE1pbnV0ZXMoKS5sZW5ndGggPT0gMSA/IFwiMFwiK2RkLmdldE1pbnV0ZXMoKSA6IGRkLmdldE1pbnV0ZXMoKVxuICAgICAgICAoXCIwXCIgKyBkZC5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKTtcbiAgICAgIGlmIChkZC5nZXRNaW51dGVzKCkgJSAxMCA9PSAwIHx8IGRkLmdldE1pbnV0ZXMoKSAlIDEwID09IDUpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInJlcGFpbnRcIixsYXN0X2NvdW50ZXJfZGlnaXQsZGQuZ2V0TWludXRlcygpICUgMTAsIGR0LCApO1xuICAgICAgICBpZiAobGFzdF9jb3VudGVyX2RpZ2l0ICE9PSBkZC5nZXRNaW51dGVzKCkgJSAxMCkge1xuICAgICAgICAgIGxhc3RfY291bnRlcl9kaWdpdCA9IGRkLmdldE1pbnV0ZXMoKSAlIDEwO1xuICAgICAgICAgIHZhciByb290XyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgd2luZG93LnRocml2ZV9kYXRhW2NvdW50ZXJfaWRdLmlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICByb290Xy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgIHJvb3RfLmFwcGVuZENoaWxkKGZ1bmN0aW9uX3J1bih3aW5kb3cudGhyaXZlX2RhdGFbY291bnRlcl9pZF0pKTtcbiAgICAgICAgICBhdGNiX2luaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHdpbmRvdy50aW1lX2xlZnRfc2V0dGluZ3MpIHtcbiAgICAgICAgdmFyIHRpbWVfbGVmdCA9XG4gICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICB3aW5kb3cudGltZV9sZWZ0X3NldHRpbmdzLmZ1bGxfZGF0ZV9zdGFydC5yZXBsYWNlKC9cXHMrL2csIFwiVFwiKSArXG4gICAgICAgICAgICAgIFwiOjAwLjAwMFpcIlxuICAgICAgICAgICkuZ2V0VGltZSgpIC1cbiAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgIHdpbmRvdy50aHJpdmVfZGF0YVtjb3VudGVyX2lkXS5jdXJyZW50X3RpbWV6b25lX2RhdGUucmVwbGFjZShcbiAgICAgICAgICAgICAgL1xccysvZyxcbiAgICAgICAgICAgICAgXCJUXCJcbiAgICAgICAgICAgICkgKyBcIjowMC4wMDBaXCJcbiAgICAgICAgICApLmdldFRpbWUoKTtcbiAgICAgICAgdGltZV9sZWZ0ID0gdGltZV9sZWZ0IC8gMTAwMDtcbiAgICAgICAgdmFyIGhvdXJzID0gcGFyc2VJbnQodGltZV9sZWZ0IC8gMzYwMCk7XG4gICAgICAgIHRpbWVfbGVmdCA9IHRpbWVfbGVmdCAlIDM2MDA7XG4gICAgICAgIHZhciBtaW5zID0gcGFyc2VJbnQodGltZV9sZWZ0IC8gNjApO1xuICAgICAgICB2YXIgd2F0Y2hfbm93X2J1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY291bnRlcl9vblwiKTtcblxuICAgICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gXCJcIjtcbiAgICAgICAgbWlucyA9IChcIjBcIiArIG1pbnMpLnNsaWNlKC0yKTtcblxuICAgICAgICB2YXIgc3RycmVzdWx0ID0gdHJhbnNsYXRpb25zKFwiTGl2ZSBpbiB7e2h9fSBob3VycyB7e219fSBtaW51dGVzXCIpXG4gICAgICAgICAgLnJlcGxhY2UoXCJ7e2h9fVwiLCBob3VycylcbiAgICAgICAgICAucmVwbGFjZShcInt7bX19XCIsIG1pbnMpO1xuICAgICAgICAvKlxuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBcInllYWggXCIsXG4gICAgICAgICAgW3dhdGNoX25vd19idXR0b25dLFxuICAgICAgICAgIHN0cnJlc3VsdCxcbiAgICAgICAgICB0aW1lX2xlZnQsXG4gICAgICAgICAgbWlucyxcbiAgICAgICAgICB3aW5kb3cudGhyaXZlX2RhdGFbY291bnRlcl9pZF0uY3VycmVudF90aW1lem9uZV9kYXRlXG4gICAgICAgICk7XG5cdCovXG4gICAgICAgIHdhdGNoX25vd19idXR0b24uY2hpbGRyZW5bMF0uaW5uZXJIVE1MID0gc3RycmVzdWx0O1xuICAgICAgfVxuICAgIH0sIDEwICogMTAwMCk7XG4gICAgY29uc29sZS5sb2coXCJUaW1lIHRyYWNraW5nIGludGVydmFsIHN0YXJ0ZWRcIik7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY291bnRlclRvTGl2ZTtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi90cmFuc2xhdGlvbnMuanNcIik7XG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCBmaWx0ZXJhYmxlID0gW1xuICBjb25zdGFudHMubG9jYXRpb25fdGFnLFxuICBjb25zdGFudHMudGFnLFxuICBjb25zdGFudHMudHJhY2ssXG4gIGNvbnN0YW50cy5wYXNzX3R5cGUsXG5cbiAgY29uc3RhbnRzLmV4aGliaXRvcl9sb2NhdGlvbixcbiAgY29uc3RhbnRzLmV4aGliaXRvcl9wcm9kdWN0LFxuXG5dO1xuXG5jb25zdCBleGhpYml0b3JDYXRlZ29yaWVzRmlsdGVyID0gKGNhdHMpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gIGNvbnNvbGUubG9nKGNhdHMsIFwiY2F0c1wiLCBmaWx0ZXJhYmxlKTtcbiAgZm9yICh2YXIgaSBpbiBjYXRzKSB7XG4gICAgLy9jb25zb2xlLmxvZyhpLCBjYXRzW2ldLCBmaWx0ZXJhYmxlLmluZGV4T2YoaSkgLCBPYmplY3Qua2V5cyhjYXRzW2ldKS5sZW5ndGgsIFwiQUFBQVwiKTtcbiAgICBpZiAoZmlsdGVyYWJsZS5pbmRleE9mKGkpID4gLTEgJiYgT2JqZWN0LmtleXMoY2F0c1tpXSkubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aXRsZS5pbm5lckhUTUwgPSB0cmFuc2xhdGlvbnMoXCJGSUxURVIgQlkgXCIrY29uc3RhbnRzLmNhdHNfdGl0bGVzW2ldKTtcbiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gICAgICBjb25zb2xlLmxvZyhcIkFERCBJVCBJTlwiLCBpKTtcbiAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBzZWxlY3QuY2xhc3NMaXN0LmFkZChcInNlbGVjdFwiKTtcbiAgICAgIGNvbnN0IG9wdGlvbl9pbml0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIG9wdGlvbl9pbml0LmNsYXNzTGlzdC5hZGQoXCJvcHRpb25cIik7XG4gICAgICBvcHRpb25faW5pdC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgb3B0aW9uX2luaXQuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiQWxsXCIpOy8vICsgY29uc3RhbnRzLmNhdHNfdGl0bGVzW2ldO1xuICAgICAgb3B0aW9uX2luaXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9wdGlvbkNsaWNrKTtcbiAgICAgIG9wdGlvbl9pbml0LnZhbHVlID0gXCJBbGxcIjtcbiAgICAgIFxuICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbl9pbml0KTtcbiAgICAgIHNlbGVjdC5tdWx0aXBsZSA9IHRydWU7XG4gICAgICBzZWxlY3QuaWQgPSBpO1xuICAgICAgZm9yICh2YXIgaWkgaW4gY2F0c1tpXSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZChcIm9wdGlvblwiKTtcbiAgICAgICAgb3B0aW9uLmlubmVySFRNTCA9IGNhdHNbaV1baWldW1wibmFtZVwiXTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gY2F0c1tpXVtpaV1bXCJzbHVnXCJdO1xuXHRvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9wdGlvbkNsaWNrKTtcbiAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7XG4gICAgICB9XG4gICAgICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB3aW5kb3cuc2Vzc2lvbkZpbHRlckJ5U2VhcmNoKTtcbiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJBREQgSVQgTk9UXCIsIGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmNvbnN0IG9wdGlvbkNsaWNrID0gKGUpID0+IHtcbiAgdmFyIGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIjXCIrZS50YXJnZXQucGFyZW50Tm9kZS5pZCtcIiAuYWN0aXZlXCIpO1xuICBjb25zb2xlLmxvZyhhY3RpdmUsIFwiI1wiK2UudGFyZ2V0LnBhcmVudE5vZGUuaWQrXCIgYWN0aXZlXCIpO1xuICBhY3RpdmUuZm9yRWFjaChlZSA9PiBlZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpKTtcbiAgY29uc29sZS5sb2coZS50YXJnZXQuaW5uZXJIVE1MICwgZSk7XG4gIC8vdmFyIGtleSA9ICBlLnRhcmdldC5pbm5lckhUTUwuc3BsaXQoJyAnKS5qb2luKCctJykgO1xuICB2YXIga2V5ID0gIGUudGFyZ2V0LnZhbHVlIDtcbiAgaWYoa2V5ID09PSBcIkFsbFwiKVxuICAgIGUudGFyZ2V0LnBhcmVudE5vZGUudmFsdWUgPSBcIlwiO1xuICBlbHNlXG4gICAgZS50YXJnZXQucGFyZW50Tm9kZS52YWx1ZSA9IGtleTtcbiAgZS50YXJnZXQuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgd2luZG93LmV4aGliaXRvckZpbHRlckJ5U2VhcmNoKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhoaWJpdG9yQ2F0ZWdvcmllc0ZpbHRlcjtcbiIsImNvbnN0IHBsYXlZb3NwYWNlVmlkZW9JZCA9IHJlcXVpcmUoXCIuL3BsYXlZb3NwYWNlVmlkZW9JZC5qc1wiKTtcbmNvbnN0IHRyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi90cmFuc2xhdGlvbnMuanNcIik7XG5cbmNvbnN0IGV4dHJhY3RWaWRlb0lkID0gKGRhdGEsIGNvbnRlbnQpID0+IHtcbiAgLy8vLy8vLy9zaG9ydGNvZGVzIGV4dHJhY3RcbiAgc2VhcmNoID0gcG9zdF9jb250ZW50ID0gZGF0YS5wb3N0X2NvbnRlbnQ7IC8vJzxpdGVtIGlkPVwiaXRlbTFcIj5maXJzdEl0ZW08L2l0ZW0+W3ZpZCBpZD1cIjMzNDM0XCJdPGl0ZW0gaWQ9XCJpdGVtMlwiPnNlY29uZEl0ZW08L2l0ZW0+W3ZpZCBpZD1cImFhc2RcIl0gYXNkJztcbiAgcmVnZXggPSBuZXcgUmVnRXhwKC9cXFt2aWQoXFxzLio/KT9cXF0oPzooW15cXFtdKyk/XFxbXFwvdmlkXFxdKT8vZ2kpO1xuICBtYXRjaGVzID0gc2VhcmNoLm1hdGNoKHJlZ2V4KTtcbiAgLy9jb25zb2xlLmxvZygnbWF0Y2hlcycsIG1hdGNoZXMpO1xuICAvL2V4ZWNlcyA9IHNlYXJjaC5tYXRjaChyZWdleCk7XG4gIC8vY29uc29sZS5sb2coJ2V4ZWNzJywgZXhlY2VzKTtcbiAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0ID0gW107XG4gICAgZW5kcmVzdWx0ID0gW107XG4gICAgdmFyIHRleHQgPSBkYXRhLnBvc3RfY29udGVudDsgLy9cIiBhc2Zkc2YgIFt2aWQgaWQ9XFxcIjUxMjMxMjNcXFwiXSBmZXdmZnMgW3ZpZCBpZD1cXFwiMTI0MjM0M1xcXCJdIHNkZnNkZlwiO1xuICAgIHdoaWxlICgocmVzdWx0ID0gcmVnZXguZXhlYyh0ZXh0KSkpIHtcbiAgICAgIC8vY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgIC8vdGV4dC5yZXBsYWNlKHJlc3VsdFsxXSwgXCI8YnV0dG9uPmFhYWE8L2J1dHRvbj5cIik7XG4gICAgICBjb25zdCB3YXRjaF9ub3dfYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgIGNvbnN0IHZpZGVvX2lkID0gcmVzdWx0WzFdLnNwbGl0KCdcIicpWzFdICsgXCJcIjtcbiAgICAgIHdhdGNoX25vd19idXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgICAgIHBsYXlZb3NwYWNlVmlkZW9JZCh2aWRlb19pZClcbiAgICAgICk7XG4gICAgICB3YXRjaF9ub3dfYnV0dG9uLmlubmVySFRNTCA9IHRyYW5zbGF0aW9ucyhcIldhdGNoIEFnYWluXCIpOyAvLytyZXN1bHRbMV0uc3BsaXQoJ1wiJylbMV07XG4gICAgICBlbmRyZXN1bHRbZW5kcmVzdWx0Lmxlbmd0aF0gPSB3YXRjaF9ub3dfYnV0dG9uO1xuICAgICAgLy9jb250ZW50LmFwcGVuZENoaWxkKHdhdGNoX25vd19idXR0b24pO1xuICAgIH1cbiAgICB2YXIgYWxsX3BhcnRzID0gW107XG4gICAgZm9yICh2YXIgbm8gaW4gbWF0Y2hlcykge1xuICAgICAgdmFyIHNwbGl0dGVkID0gc2VhcmNoLnNwbGl0KG1hdGNoZXNbbm9dKTtcbiAgICAgIHNlYXJjaCA9IHNwbGl0dGVkWzFdO1xuICAgICAgYWxsX3BhcnRzW2FsbF9wYXJ0cy5sZW5ndGhdID0gc3BsaXR0ZWRbMF07XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IG5vICsgMSkgYWxsX3BhcnRzW2FsbF9wYXJ0cy5sZW5ndGhdID0gc3BsaXR0ZWRbMV07XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coYWxsX3BhcnRzKTtcbiAgICBmb3IgKHZhciBubyBpbiBhbGxfcGFydHMpIHtcbiAgICAgIC8vY29uc29sZS5sb2coYWxsX3BhcnRzW25vXSk7XG4gICAgICBjb25zdCBzdGFydF90ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgICBzdGFydF90ZXh0LmlubmVySFRNTCA9IGFsbF9wYXJ0c1tub107XG4gICAgICBjb250ZW50LmFwcGVuZENoaWxkKHN0YXJ0X3RleHQpO1xuICAgICAgaWYgKG5vIDwgZW5kcmVzdWx0Lmxlbmd0aCkgY29udGVudC5hcHBlbmRDaGlsZChlbmRyZXN1bHRbbm9dKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSBwb3N0X2NvbnRlbnQ7IC8vLnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+Jyk7LyorSlNPTi5zdHJpbmdpZnkoZGF0YSkqLztcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdFZpZGVvSWQ7XG4iLCJjb25zdCBnZXRNZWRpYWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50VG9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZWxlbWVudFRvcC5jbGFzc0xpc3QuYWRkKFwiZ3JvdXBfcGFydG5lcnNcIik7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBlbGVtZW50X3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAvL2NvbnNvbGUubG9nKFwibW0gZGF0YVwiLCBkYXRhLCBkYXRhW1widGl0bGVcIl0pO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZXNzaW9uX3BhcnRuZXJzXCIpO1xuICBlbGVtZW50X3QudGV4dENvbnRlbnQgPSBkYXRhW1widGl0bGVcIl07XG4gIGVsZW1lbnRfdC5jbGFzc0xpc3QuYWRkKFwic3BvbnNvcl90eXBlXCIpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnRfdCk7XG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInNwb25zb3JfdHlwZVwiPicrZGF0YVsndGl0bGUnXStcIjwvZGl2PlwiO1xuICBmb3IgKHZhciBpIGluIGRhdGFbXCJpbWdcIl0pIHtcbiAgICBpZiAoIWRhdGFbXCJpbWdcIl1baV0pIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJOT09PXCIsZGF0YVsnaW1nJ11baV0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKFwicGFydG5lcl9pbWdcIik7IC8vLnN0eWxlLmhlaWdodCA9IFwiNTBweFwiO1xuICAgIGVsLnNyYyA9IGRhdGFbXCJpbWdcIl1baV07XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gICAgLy9jb25zb2xlLmxvZyhcIllZWUVTU1NTXCIsZGF0YVsnaW1nJ11baV0sIGVsLCBlbGVtZW50KTtcbiAgfVxuICAvL2NvbnNvbGUubG9nKFwiZWxlbWVudFwiLCBlbGVtZW50KTtcbiAgZWxlbWVudFRvcC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgLy9jb25zb2xlLmxvZyhcImVsZW1lbnRUb3BcIiwgZWxlbWVudFRvcCk7XG4gIHJldHVybiBbZWxlbWVudFRvcF07XG59O1xubW9kdWxlLmV4cG9ydHMgPSBnZXRNZWRpYWRhdGE7XG4iLCJjb25zdCBnZXRTZXNzRGF0ZXMgPSAoZGF0YSwgYWN0aXZlX2RheSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBcIk5vdCBmb3VuZFwiO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIGRheXMgPSBkYXRhLnNvcnQoXG4gICAgKGEsIGIpID0+IGFbXCJtZXRhZmllbGRzXCJdW1wiZGF5X29yZGVyXCJdIC0gYltcIm1ldGFmaWVsZHNcIl1bXCJkYXlfb3JkZXJcIl1cbiAgKTtcbiAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiYWdlbmRhX2RheXNcIik7XG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSAndGVzdCBkYXRlcycrSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgIGlmICghYWN0aXZlX2RheSkge1xuICAgICAgd2luZG93LmFjdGl2ZV9kYXkgPSBhY3RpdmVfZGF5ID0gZGF0YVtpXVtcInRlcm1faWRcIl07XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlX2FnZW5kYV9kYXlcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJzZUludChkYXRhW2ldW1widGVybV9pZFwiXSkgPT09IHBhcnNlSW50KGFjdGl2ZV9kYXkpKSB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVfYWdlbmRhX2RheVwiKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSVRTIEVRVUFMICAnICk7XG4gICAgICB9XG4gICAgICAvL2NvbnNvbGUubG9nKCdJVFMgU0VUICAnICk7XG4gICAgfVxuXG4gICAgLy9jb25zb2xlLmxvZyhbYWN0aXZlX2RheSwgd2luZG93LmFjdGl2ZV9kYXksZGF0YVtpXVsndGVybV9pZCddICBdKTtcbiAgICBlbC5pZCA9IGRhdGFbaV1bXCJ0ZXJtX2lkXCJdO1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJhZ2VuZGFfZGF5XCIpO1xuICAgIGVsLmlubmVySFRNTCA9XG4gICAgICBcIjxzcGFuIGNsYXNzPSdhYm92ZSc+XCIgK1xuICAgICAgZGF0YVtpXVtcImRlc2NyaXB0aW9uXCJdICtcbiAgICAgIFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdkYXRlJz5cIiArXG4gICAgICBkYXRhW2ldW1wibmFtZVwiXSArXG4gICAgICBcIjwvc3Bhbj5cIjtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgc2V0X2FjdGl2ZV9kYXkpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9IC8vZW5kIGZvclxuICByZXR1cm4gZWxlbWVudDtcbn07IC8vZW5kIGdldFNlc3NEYXRlc1xuXG5jb25zdCBzZXRfYWN0aXZlX2RheSA9IChlKSA9PiB7XG4gIHZhciBkYXkgPSBlLnRhcmdldDtcbiAgLy9cdGNvbnNvbGUubG9nKFtkYXksZGF5LmlkXSk7XG4gIGlmIChkYXkuaWQgPT09IFwiXCIpIHtcbiAgICBkYXkgPSBkYXkucGFyZW50Tm9kZTtcbiAgfVxuICAvL2NvbnNvbGUubG9nKFtkYXksZGF5LmlkXSk7XG4gIGFjdGl2ZV9kYXkgPSBkYXkuaWQ7XG4gIC8vY29uc29sZS5sb2coYWN0aXZlX2RheSlcbiAgdmFyIGFjdGl2YXRlX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFjdGl2ZV9hZ2VuZGFfZGF5XCIpWzBdO1xuICBpZiAoYWN0aXZhdGVfZWwgJiYgYWN0aXZhdGVfZWwuY2xhc3NMaXN0KVxuICAgIGFjdGl2YXRlX2VsLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVfYWdlbmRhX2RheVwiKTtcbiAgZGF5LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVfYWdlbmRhX2RheVwiKTtcbiAgLypcblx0QXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzaW5nbGVfc2Vzc2lvbicpKS5mb3JFYWNoKChlbCkgPT4ge1xuXHRcdGVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0fSk7XG5cdEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWdlbmRhX2RheV8nICsgYWN0aXZlX2RheSkpLmZvckVhY2goKGVsKSA9PiB7IGVsLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7IH0pO1xuICBcbiovXG4gIC8vY29uc3Qgc2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXNzaW9uc19zZWFyY2hcIik7XG4gIC8vaWYoc2VhcmNoLnZhbHVlICE9PSBcIlwiKVxuICB3aW5kb3cuc2Vzc2lvbkZpbHRlckJ5U2VhcmNoKHt9KTtcbn07IC8vZW5kIHNldF9hY3RpdmVfZGF5XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U2Vzc0RhdGVzO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0gcmVxdWlyZShcIi4uL3RyYW5zbGF0aW9ucy5qc1wiKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCBnZXRSZWxhdGVkU3BlYWtlcnMgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGVfZXhwYW5kLmpzXCIpO1xuY29uc3QgZ2V0UmVsYXRlZFNwb25zb3JzID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9zcG9uc29yX3RlbXBsYXRlX2V4cGFuZC5qc1wiKTtcbmNvbnN0IGdldE1lZGlhZGF0YSA9IHJlcXVpcmUoXCIuL2dldE1lZGlhZGF0YS5qc1wiKTtcbmNvbnN0IGFkZFRvQ2FsZW5kYXIgPSByZXF1aXJlKFwiLi9hZGRUb0NhbGVuZGFyLmpzXCIpO1xuY29uc3QgcGxheVlvc3BhY2VWaWRlb0lkID0gcmVxdWlyZShcIi4vcGxheVlvc3BhY2VWaWRlb0lkLmpzXCIpO1xuY29uc3QgcGxheVlvc3BhY2VWaWRlb1VybCA9IHJlcXVpcmUoXCIuL3BsYXlZb3NwYWNlVmlkZW9VcmwuanNcIik7XG5jb25zdCBwbGF5SWZyYW1lVXJsID0gcmVxdWlyZShcIi4vcGxheUlmcmFtZVVybC5qc1wiKTtcbmNvbnN0IGV4dHJhY3RWaWRlb0lkID0gcmVxdWlyZShcIi4vZXh0cmFjdFZpZGVvSWQuanNcIik7XG5jb25zdCB3cEJ1dHRvbiA9IHJlcXVpcmUoXCIuL3dwQnV0dG9uLmpzXCIpO1xuY29uc3QgY291bnRlckNoZWNrID0gcmVxdWlyZShcIi4vY291bnRlckNoZWNrLmpzXCIpO1xuXG5jb25zdCBnZXRTaW5nbGVTZXNzaW9uID0gKFxuICBkYXRhLFxuICBhY3RpdmVfZGF5LFxuICBjb25maWcsXG4gIGxpbmtzX2xpdmUsXG4gIHRpbWV6b25lLFxuICBjdXJyZW50X3RpbWV6b25lX2RhdGUsXG4gIGxvY2F0aW9uX3RvX3N0cmVhbV9saW5rLFxuICBjb3VudF9pZnJhbWVfYnV0dG9uLFxuICB2aWRlb19hYm92ZV9hZ2VuZGEsXG4gIHZpZGVvX3N0cmVhbV9jb3VudGVyLFxuICBjYXRfY29sb3JfdG9fYmcsXG4gIG5vQ2xpY2tzID0gZmFsc2VcbikgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IC8vdGhpcyB3aWxsIGJlIHJldHVybmVkIFtlbF1cblxuICBjb25zdCB0aW1lc2xvdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IC8vc2xvdHMgYnkgcm91bmQgaG91clxuXG4gIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3QgZWxlbWVudHNfc3BvbnNvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IGVsZW1lbnRzX3NwZWFrZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3QgZWxlbWVudHNfYWdlbmRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTsgLy9mZWF0dXJlZCBpbWcgbm90IHVzZWRcbiAgY29uc3QgdGltZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNlc3Npb25fbG9jYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzZXNzaW9uX3Bhc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCB0cmFjayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IGNhdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IGhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IGV4cGFuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgZWxlbWVudHMuYXBwZW5kQ2hpbGQoaG9sZGVyKTtcbiAgLy9kZWZhdWx0IHdwIGRhdGFcbiAgbmFtZS5pbm5lckhUTUwgPSBkYXRhLnBvc3RfdGl0bGU7XG4gIG5hbWUuY2xhc3NMaXN0LmFkZChcImFnZW5kYV90aXRsZVwiKTtcblxuICBleHRyYWN0VmlkZW9JZChkYXRhLCBjb250ZW50KTtcblxuICAvL21ldGFmaWVsZHNcbiAgLy9jb25zb2xlLmxvZyhjb25maWcpO1xuICAvKlxuXHR2YXIgbWV0YV9jb25maWcgPSBjb25maWcubWV0YWZpZWxkcztcblx0dmFyIGMgPSAwO1xuXHRmb3IodmFyIHMgaW4gbWV0YV9jb25maWcpe1xuXHRcdCBjKys7XG4gICAgIGlmKHMuaW5kZXhPZihcInRpbWVfXCIpID09PSAwKXtcblx0XHQgICBcblx0XHRcdCBjb25zdCBmaWVsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0IGZpZWxkLmlubmVySFRNTCA9IGMrXCIgXCIrcytcIjogXCIrZGF0YS5tZXRhZmllbGRzW3NdO1xuXHRcdFx0IC8vaG9sZGVyLmFwcGVuZENoaWxkKGZpZWxkKTtcblx0XHRcdCAvL2NvbnNvbGUubG9nKHMsIG1ldGFfY29uZmlnW3NdKTtcblx0XHQgfWVsc2UgaWYoZGF0YS5tZXRhZmllbGRzW3NdICE9PSBcIlwiKXtcblx0XHRcdCBjb25zdCBmaWVsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0IGZpZWxkLmlubmVySFRNTCA9IGMrXCIgXCIrcytcIjogXCIrZGF0YS5tZXRhZmllbGRzW3NdO1xuXHRcdFx0IGV4cGFuZC5hcHBlbmRDaGlsZChmaWVsZCk7XG5cdFx0XHQgLy9jb25zb2xlLmxvZyhzLCBtZXRhX2NvbmZpZ1tzXSk7XG5cdFx0IH1cblx0fVxuKi9cbiAgLy9DYXRlZ29yeSBUcmFjayBUYWcgV2l0aCBDb2xvdXJzXG4gIGlmIChcbiAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudHJhY2tdICYmXG4gICAgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRyYWNrXVswXSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHRyYWNrLmlubmVySFRNTCA9IGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50cmFja11bMF1bXCJuYW1lXCJdO1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRyYWNrXVswXVtcInNsdWdcIl0pO1xuICAgIGlmIChcbiAgICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50cmFja11bMF1bXCJtZXRhZmllbGRzXCJdICYmXG4gICAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudHJhY2tdWzBdW1wibWV0YWZpZWxkc1wiXVtcImNvbG9yXCJdXG4gICAgKVxuICAgICAgaWYoXG5cdCAgY2F0X2NvbG9yX3RvX2JnID09PSBcInRydWVcIlxuICAgICAgKVxuXHR0cmFjay5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcbiAgICAgICAgXCIjXCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudHJhY2tdWzBdW1wibWV0YWZpZWxkc1wiXVtcImNvbG9yXCJdO1xuICAgICAgZWxzZVxuICAgICAgICB0cmFjay5zdHlsZS5jb2xvciA9XG4gICAgICAgIFwiI1wiICsgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRyYWNrXVswXVtcIm1ldGFmaWVsZHNcIl1bXCJjb2xvclwiXTtcbiAgICAgIC8vdHJhY2suY2xhc3NMaXN0LmFkZChcInRyYWNrX2NvbG9yX1wiK2RhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50cmFja11bMF1bXCJtZXRhZmllbGRzXCJdW1wiY29sb3JcIl0pO1xuICB9XG4gIC8vQ2F0ZWdvcnkgVGhlbWUgVGFnIFdpdGggQ29sb3Vyc1xuICBpZiAoXG4gICAgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRhZ10gJiZcbiAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGNhdC5pbm5lckhUTUwgPSBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcIm5hbWVcIl07XG4gICAgZWwuY2xhc3NMaXN0LmFkZChkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcInNsdWdcIl0pO1xuICAgIGlmIChcbiAgICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50YWddWzBdW1wibWV0YWZpZWxkc1wiXSAmJlxuICAgICAgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRhZ11bMF1bXCJtZXRhZmllbGRzXCJdW1wiY29sb3JcIl1cbiAgICApXG4gICAgICBpZihcblx0ICBjYXRfY29sb3JfdG9fYmcgPT09IFwidHJ1ZVwiXG4gICAgICApXG5cdGNhdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcbiAgICAgICAgXCIjXCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcIm1ldGFmaWVsZHNcIl1bXCJjb2xvclwiXTtcbiAgICAgIGVsc2VcbiAgICAgICAgY2F0LnN0eWxlLmNvbG9yID1cbiAgICAgICAgXCIjXCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcIm1ldGFmaWVsZHNcIl1bXCJjb2xvclwiXTtcbiAgICAgIC8vY2F0LmNsYXNzTGlzdC5hZGQoXCJjYXRfY29sb3JfXCIrZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRhZ11bMF1bXCJtZXRhZmllbGRzXCJdW1wiY29sb3JcIl0pO1xuICAgIC8vaG9sZGVyLmNsYXNzTGlzdC5hZGQoJycgKyBkYXRhWydjYXRzJ11bY29uc3RhbnRzLnRhZ11bMF1bJ21ldGFmaWVsZHMnXVsnY29sb3InXSk7XG4gIH1cbiAgLy9Mb2NhdGlvbiBjYXRcbiAgaWYgKFxuICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy5sb2NhdGlvbl90YWddICYmXG4gICAgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLmxvY2F0aW9uX3RhZ11bMF0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBzZXNzaW9uX2xvY2F0aW9uLmlubmVySFRNTCA9XG4gICAgICBcIjxkaXY+XCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMubG9jYXRpb25fdGFnXVswXVtcIm5hbWVcIl0gKyBcIjwvZGl2PlwiO1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLmxvY2F0aW9uX3RhZ11bMF1bXCJzbHVnXCJdKTtcbiAgICAvL2NvbnNvbGUubG9nKHNlc3Npb25fbG9jYXRpb24pO1xuICB9XG5cbiAgLy9QYXNzIFR5cGUgY2F0XG4gIGlmIChcbiAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMucGFzc190eXBlXSAmJlxuICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy5wYXNzX3R5cGVdWzBdICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgc2Vzc2lvbl9wYXNzLmlubmVySFRNTCA9XG4gICAgICBcIjxkaXY+XCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMucGFzc190eXBlXVswXVtcIm5hbWVcIl0gKyBcIjwvZGl2PlwiO1xuICAgIGZvcih2YXIgcF9pIGluIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy5wYXNzX3R5cGVdKXtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnBhc3NfdHlwZV1bcF9pXVtcInNsdWdcIl0pO1xuICAgIH1cbiAgICAvL2NvbnNvbGUubG9nKFwicGFzc1wiLCBzZXNzaW9uX3Bhc3MpO1xuICB9IGVsc2Uge1xuICAgIC8vY29uc29sZS5sb2coXCJOT09PT09cIiwgZGF0YVtcImNhdHNcIl0pO1xuICB9XG5cbiAgdHJhY2suY2xhc3NMaXN0LmFkZChcImFnZW5kYV90cmFja1wiKTtcbiAgc2Vzc2lvbl9wYXNzLmNsYXNzTGlzdC5hZGQoXCJhZ2VuZGFfY2F0XCIpO1xuICBjYXQuY2xhc3NMaXN0LmFkZChcImFnZW5kYV9jYXRcIik7XG4gIGlmIChkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXSAmJiBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXSlcbiAgICBjYXQuY2xhc3NMaXN0LmFkZChcImRpc3BsYXlfXCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcInBhcmVudFwiXSk7XG5cbiAgaWYgKGRhdGEudGh1bWJuYWlsKSB7XG4gICAgaW1nLnNyYyA9IGRhdGEudGh1bWJuYWlsO1xuICAgIGltZy5jbGFzc0xpc3QuYWRkKFwiYWdlbmRhX2ltZ1wiKTsgLy8uc3R5bGUuaGVpZ2h0ID0gXCI1MHB4XCI7XG4gICAgZWwuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgfVxuICAvL3RpbWVzbG90LmlubmVySFRNTCA9IGRhdGFbJ21ldGFmaWVsZHMnXVtjb25zdGFudHMudGltZV9zdGFydF0uc3BsaXQoJzonKVswXStcIjowMFwiO1xuICAvL3RpbWVzbG90LmNsYXNzTGlzdC5hZGQoJ3RpbWVzbG90Jyk7XG4gIHRpbWUuaW5uZXJIVE1MID1cbiAgICBcIjxkaXY+XCIgK1xuICAgIGRhdGFbXCJtZXRhZmllbGRzXCJdW2NvbnN0YW50cy50aW1lX3N0YXJ0XSArXG4gICAgXCIgLSBcIiArXG4gICAgZGF0YVtcIm1ldGFmaWVsZHNcIl1bY29uc3RhbnRzLnRpbWVfZW5kXSArXG4gICAgXCI8L2Rpdj5cIjtcbiAgdGltZS5jbGFzc0xpc3QuYWRkKFwiYWdlbmRhX3RpbWVcIik7XG4gIHNlc3Npb25fbG9jYXRpb24uY2xhc3NMaXN0LmFkZChcImFnZW5kYV9sb2NhdGlvblwiKTtcbiAgaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJhZ2VuZGFfaG9sZGVyXCIpO1xuXG4gIGhvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX2J1dHRvblwiKTtcbiAgZXhwYW5kLmNsYXNzTGlzdC5hZGQoXCJhZ2VuZGFfZXhwYW5kZXJcIik7XG5cbiAgZWxlbWVudHMuY2xhc3NMaXN0LmFkZChcInNlc3Npb25faG9sZGVyXCIpO1xuXG4gIGVsZW1lbnRzX3Nwb25zb3IuY2xhc3NMaXN0LmFkZChcInNlc3Npb25fc3BvbnNvcnNcIik7XG4gIGVsZW1lbnRzX3NwZWFrZXJzLmNsYXNzTGlzdC5hZGQoXCJzZXNzaW9uX3NwZWFrZXJzXCIpO1xuICBlbGVtZW50c19hZ2VuZGEuY2xhc3NMaXN0LmFkZChcInNlc3Npb25fYWdlbmRhaW5mb1wiKTtcblxuICB2YXIgbWVkaWEgPSBmYWxzZTtcbiAgLy9jb25zb2xlLmxvZyhcIm1cIixkYXRhLnBvc3RfdGl0bGUsZGF0YVsnbWVkaWFmaWVsZHMnXSk7XG4gIGZvciAodmFyIGkgaW4gZGF0YVtcIm1lZGlhZmllbGRzXCJdKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcIk1FRElBXCIsIGRhdGFbJ21lZGlhZmllbGRzJ11baV0pO1xuICAgIGlmIChpLmluZGV4T2YoXCJncm91cF9cIikgIT09IGZhbHNlKSB7XG4gICAgICBtZWRpYSA9IGdldE1lZGlhZGF0YShkYXRhW1wibWVkaWFmaWVsZHNcIl1baV0pO1xuICAgICAgLy9jb25zb2xlLmxvZygnUmV0dXJuIG1lZGlhJyxtZWRpYSk7XG4gICAgICBpZiAobWVkaWFbMF0pIHtcbiAgICAgICAgLy9pZiAodHlwZW9mIG1lZGlhID09PSAnTm9kZScpXG4gICAgICAgIGV4cGFuZC5hcHBlbmRDaGlsZChtZWRpYVswXSk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2FwcGVuZGVkIG1lZGlhJyxtZWRpYSlcbiAgICAgIH1cbiAgICB9IC8vaWZcbiAgICBlbHNlIHtcbiAgICAgIC8vbWVkaWEgPVx0Z2V0TWVkaWFkYXRhKGRhdGFbJ21lZGlhZmllbGRzJ10pO1xuICAgIH1cbiAgfSAvL2VuZCBmb3JcblxuICB0cnkge1xuICAgIC8vY29uc29sZS5sb2coXCJtaWFhYVwiLGRhdGEucG9zdF90aXRsZSxkYXRhWydyZWxhdGlvbnMnXSwgIGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwZWFrZXJzKycwJ10pO1xuICAgIHZhciBtb2RlcmF0b3IgPSBudWxsO1xuICAgIGlmIChcbiAgICAgIGRhdGFbXCJyZWxhdGlvbnNcIl0gJiZcbiAgICAgIGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwZWFrZXJzICsgXCIwXCJdICYmXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcGVha2VycyArIFwiMFwiXS5kYXRhICYmXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcGVha2VycyArIFwiMFwiXS5kYXRhLmxlbmd0aFxuICAgIClcbiAgICAgIG1vZGVyYXRvciA9IGdldFJlbGF0ZWRTcGVha2Vycyh7XG4gICAgICAgIGRhdGE6IGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwZWFrZXJzICsgXCIwXCJdLmRhdGEsXG4gICAgICB9KTtcblxuICAgIHZhciBzcGVha2VyID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdICYmXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcGVha2VycyArIFwiMVwiXSAmJlxuICAgICAgZGF0YVtcInJlbGF0aW9uc1wiXVtjb25zdGFudHMuc3BlYWtlcnMgKyBcIjFcIl0uZGF0YSAmJlxuICAgICAgZGF0YVtcInJlbGF0aW9uc1wiXVtjb25zdGFudHMuc3BlYWtlcnMgKyBcIjFcIl0uZGF0YS5sZW5ndGhcbiAgICApXG4gICAgICBzcGVha2VyID0gZ2V0UmVsYXRlZFNwZWFrZXJzKHtcbiAgICAgICAgZGF0YTogZGF0YVtcInJlbGF0aW9uc1wiXVtjb25zdGFudHMuc3BlYWtlcnMgKyBcIjFcIl0uZGF0YSxcbiAgICAgIH0pO1xuXG4gICAgdmFyIHNwb25zb3IgPSBudWxsO1xuICAgIHZhciBzX3RpdGxlID0gW107XG4gICAgdmFyIHNfZGF0YSA9IFtdO1xuICAgIGlmIChcbiAgICAgIGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwb25zb3IgKyBcIjNcIl0gJiZcbiAgICAgIGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwb25zb3IgKyBcIjNcIl1bXCJtZXRhZmllbGRzXCJdICYmXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcG9uc29yICsgXCIzXCJdW1wibWV0YWZpZWxkc1wiXVtcbiAgICAgICAgXCJzcG9uc29yX3RpdGxlXCJcbiAgICAgIF1bMF1cbiAgICApIHtcbiAgICAgIHNfdGl0bGUgPVxuICAgICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcG9uc29yICsgXCIzXCJdW1wibWV0YWZpZWxkc1wiXVtcbiAgICAgICAgICBcInNwb25zb3JfdGl0bGVcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcG9uc29yICsgXCIzXCJdICYmXG4gICAgICBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcG9uc29yICsgXCIzXCJdLmRhdGEgJiZcbiAgICAgIGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwb25zb3IgKyBcIjNcIl0uZGF0YS5sZW5ndGhcbiAgICApIHtcbiAgICAgIHNfZGF0YSA9IGRhdGFbXCJyZWxhdGlvbnNcIl1bY29uc3RhbnRzLnNwb25zb3IgKyBcIjNcIl0uZGF0YTtcbiAgICB9XG4gICAgc3BvbnNvciA9IGdldFJlbGF0ZWRTcG9uc29ycyh7XG4gICAgICBkYXRhOiBzX2RhdGEsXG4gICAgICBtZXRhOiBzX3RpdGxlLFxuICAgIH0pO1xuXG4gICAgdmFyIHJlbGF0aW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICBpZiAobW9kZXJhdG9yICE9PSBudWxsKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwibVwiLGRhdGEucG9zdF90aXRsZSxkYXRhWydyZWxhdGlvbnMnXSwgbW9kZXJhdG9yLCBkYXRhW1wicmVsYXRpb25zXCJdW2NvbnN0YW50cy5zcGVha2VycysnMCddKTtcbiAgICAgIHZhciBtb2RlcmF0b3JfdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgbW9kZXJhdG9yX3RpdGxlLmlubmVySFRNTCA9IHRyYW5zbGF0aW9ucyhcIk1vZGVyYXRvclwiKTtcbiAgICAgIHJlbGF0aW9ucy5hcHBlbmRDaGlsZChtb2RlcmF0b3JfdGl0bGUpO1xuICAgICAgcmVsYXRpb25zLmFwcGVuZENoaWxkKG1vZGVyYXRvcik7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiTW9kZXJhdG9yXCIsbW9kZXJhdG9yKTtcbiAgICB9XG4gICAgaWYgKHNwZWFrZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciBzcGVha2VyX3RpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHNwZWFrZXJfdGl0bGUuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiU3BlYWtlcnNcIik7XG4gICAgICByZWxhdGlvbnMuYXBwZW5kQ2hpbGQoc3BlYWtlcl90aXRsZSk7XG4gICAgICByZWxhdGlvbnMuYXBwZW5kQ2hpbGQoc3BlYWtlcik7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiU3BlYWtlclwiLHNwZWFrZXIpO1xuICAgIH1cbiAgICBpZiAoc3BvbnNvciAhPT0gbnVsbCkge1xuICAgICAgLy9TUE9OU09SUyBBUkUgSU4gVEhFIEVYUEFORFxuICAgICAgLy92YXIgc3BvbnNvcl90aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgLy9zcG9uc29yX3RpdGxlLmlubmVySFRNTCA9IFwiU3BvbnNvcnNcIjtcbiAgICAgIC8vcmVsYXRpb25zLmFwcGVuZENoaWxkKHNwb25zb3JfdGl0bGUpO1xuICAgICAgLy9yZWxhdGlvbnMuYXBwZW5kQ2hpbGQoc3BvbnNvcik7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiU3BvbnNvclwiLHNwb25zb3IpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpO1xuICB9XG5cbiAgdGltZS5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcbiAgaG9sZGVyLmFwcGVuZENoaWxkKHRpbWUpO1xuXG4gIGlmIChzZXNzaW9uX2xvY2F0aW9uLmlubmVySFRNTCkge1xuICAgIGhvbGRlci5hcHBlbmRDaGlsZChzZXNzaW9uX2xvY2F0aW9uKTtcbiAgfVxuICBpZiAodHJhY2suaW5uZXJIVE1MKSB7XG4gICAgaG9sZGVyLmFwcGVuZENoaWxkKHRyYWNrKTtcbiAgfVxuICBpZiAoY2F0LmlubmVySFRNTCkge1xuICAgIGhvbGRlci5hcHBlbmRDaGlsZChjYXQpO1xuICB9XG5cbiAgaWYgKHNlc3Npb25fcGFzcy5pbm5lckhUTUwpIHtcbiAgICBob2xkZXIuYXBwZW5kQ2hpbGQoc2Vzc2lvbl9wYXNzKTtcbiAgfVxuXG4gIGNvbnN0IGNhbGVuZGFyID0gYWRkVG9DYWxlbmRhcihkYXRhLCB0aW1lem9uZSk7XG4gIGlmIChjYWxlbmRhcikgaG9sZGVyLmFwcGVuZENoaWxkKGNhbGVuZGFyKTtcblxuICBjb25zdCBwcmVmaXggPSBmcm9udF9jb3JlX3Zhci5zaXRlX3VybDtcbiAgdmFyIGxhbmcgPSBcIlwiO1xuICBpZiAoZnJvbnRfY29yZV92YXIuY3VycmVudF9sYW5nICE9PSBmcm9udF9jb3JlX3Zhci5kZWZhdWx0X2xhbmcpIHtcbiAgICBsYW5nID0gXCIvXCIgKyBmcm9udF9jb3JlX3Zhci5jdXJyZW50X2xhbmc7XG4gIH1cbiAgdmFyIGxpbmsgPSBwcmVmaXggKyBsYW5nICsgXCIvc2Vzc2lvbi9cIiArIGRhdGEucG9zdF9uYW1lICsgXCIvXCI7IC8vZGF0YVsnbWV0YWZpZWxkcyddWyd1cmwnXTtcblxuICBpZiAobGlua3NfbGl2ZSkge1xuICAgIC8vZG9udCBhZGQgZXhvYW5kZWQgY29udGVudFxuICAgIC8vY29uc29sZS5sb2coJ2xpbmtzIGVuYWJsZWQnLCBkYXRhKTtcbiAgICBpZiAoISFsaW5rKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdsaW5rIGhlcmUnLGxpbmspO1xuICAgICAgY29uc3QgbGlua19lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgY29uc3QgbGlua19lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGxpbmtfZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2Vzc2lvbl91cmxcIik7XG4gICAgICAvL2xpbmtfZWwuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICAvL2xpbmtfZWwuaW5uZXJIVE1MID0gXCJHbyB0byBzZXNzaW9uXCI7XG4gICAgICBsaW5rX2VsLmhyZWYgPSBsaW5rO1xuICAgICAgbGlua19lbGVtZW50LmFwcGVuZENoaWxkKGxpbmtfZWwpO1xuICAgICAgLy9yZWxhdGlvbnMuYXBwZW5kQ2hpbGQobGlua19lbGVtZW50KTtcblxuICAgICAgLy9zaW5nbGVzZXNzaW9uWzBdLmFwcGVuZENoaWxkKGxpbmtfZWxlbWVudCk7XG4gICAgICBsaW5rX2VsLmFwcGVuZENoaWxkKG5hbWUpO1xuICAgICAgaG9sZGVyLmFwcGVuZENoaWxkKGxpbmtfZWwpO1xuICAgICAgLy9jb25zb2xlLmxvZygnbGluayBoZXJlJyxsaW5rX2VsZW1lbnQpO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQoaG9sZGVyKTtcbiAgICB9IC8vZW5kIGlmXG4gICAgZWxzZSB7XG4gICAgfVxuICB9IC8vZW5kIGlmIGxpbmtzX2xpdmVcbiAgZWxzZSB7XG4gICAgY29uc3Qgc2Vzc2lvbl9zaW5nbGVfbGlua19idXR0b25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBzZXNzaW9uX3NpbmdsZV9saW5rX2J1dHRvbnMuY2xhc3NMaXN0LmFkZChcIndwLWJsb2NrLWJ1dHRvbnNcIik7XG4gICAgY29uc3Qgc2Vzc2lvbl9zaW5nbGVfbGlua19idXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHNlc3Npb25fc2luZ2xlX2xpbmtfYnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJ3cC1ibG9jay1idXR0b25cIik7XG5cbiAgICBjb25zdCBzZXNzaW9uX3NpbmdsZV9saW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgc2Vzc2lvbl9zaW5nbGVfbGluay5jbGFzc0xpc3QuYWRkKFwiYnV0dG9uXCIpO1xuICAgIHNlc3Npb25fc2luZ2xlX2xpbmsuY2xhc3NMaXN0LmFkZChcIndwLWJsb2NrLWJ1dHRvbl9fbGlua1wiKTtcbiAgICBzZXNzaW9uX3NpbmdsZV9saW5rLmhyZWYgPSBsaW5rO1xuICAgIHNlc3Npb25fc2luZ2xlX2xpbmsuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiVmlldyBTZXNzaW9uIERldGFpbHNcIik7XG5cbiAgICAvL2VsLmFwcGVuZENoaWxkKGltZyk7XG4gICAgZXhwYW5kLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIC8vZWwuYXBwZW5kQ2hpbGQobWVkaWEpO1xuICAgIGlmIChyZWxhdGlvbnMpIGV4cGFuZC5hcHBlbmRDaGlsZChyZWxhdGlvbnMpO1xuICAgIC8vZXhwYW5kLmFwcGVuZENoaWxkKGVsZW1lbnRzKTtcblxuICAgIHNlc3Npb25fc2luZ2xlX2xpbmtfYnV0dG9uLmFwcGVuZENoaWxkKHNlc3Npb25fc2luZ2xlX2xpbmspO1xuICAgIHNlc3Npb25fc2luZ2xlX2xpbmtfYnV0dG9ucy5hcHBlbmRDaGlsZChzZXNzaW9uX3NpbmdsZV9saW5rX2J1dHRvbik7XG4gICAgZXhwYW5kLmFwcGVuZENoaWxkKHNlc3Npb25fc2luZ2xlX2xpbmtfYnV0dG9ucyk7XG4gICAgLy9leHBhbmQuYXBwZW5kQ2hpbGQoc2Vzc2lvbl9zaW5nbGVfbGluayk7XG5cbiAgICBob2xkZXIuYXBwZW5kQ2hpbGQobmFtZSk7XG4gICAgaWYgKCFub0NsaWNrcykge1xuICAgICAgaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJwb2ludGVyXCIpO1xuICAgIGVsLmFwcGVuZENoaWxkKGhvbGRlcik7XG4gICAgZWwuYXBwZW5kQ2hpbGQoZXhwYW5kKTtcblxuICAgIC8vZWxzZVxuICAgIC8vOlRPRE8gQ0hBTkdFIFRPIHZpZGVvX3N0cmVhbV9jb3VudGVyIFNIT1JUQ09ERSBBVFRSXG4gICAgLy9pZiAodmlkZW9fYWJvdmVfYWdlbmRhICE9PSBcImZhbHNlXCIpIHtcbiAgICBpZiAodmlkZW9fc3RyZWFtX2NvdW50ZXIgIT09IFwiZmFsc2VcIikge1xuICAgICAgLy9jb25zb2xlLmxvZyhcInZpZGVvX3N0cmVhbV9jb3VudGVyIERFVEVDVEVEXCIpO1xuICAgICAgY29uc3QgY2hlY2sgPSBjb3VudGVyQ2hlY2soXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGN1cnJlbnRfdGltZXpvbmVfZGF0ZSxcbiAgICAgICAgY291bnRfaWZyYW1lX2J1dHRvblxuICAgICAgKTtcbiAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwieWVlZWVcIiwgY2hlY2spO1xuXG4gICAgICAgIGNvbnN0IGJ1dHRvbl9saW5rX3N0cmVhbSA9IHdwQnV0dG9uKGNoZWNrLCBmYWxzZSwgdHJ1ZSk7IC8vIHRleHQsIG5vIGxpbmssIG91dGxpbmVcbiAgICAgICAgLy9jb25zb2xlLmxvZyhidXR0b25fbGlua19zdHJlYW0pO1xuICAgICAgICBidXR0b25fbGlua19zdHJlYW0uY2hpbGRyZW5bMF0uaWQgPSBcImNvdW50ZXJfb25cIjtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoYnV0dG9uX2xpbmtfc3RyZWFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJub29vb1wiLCBjaGVjayk7XG4gICAgICB9XG5cbiAgICAgIC8vY29uc29sZS5sb2coY291bnRfaWZyYW1lX2J1dHRvbiwgZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkYXRhLm1ldGFmaWVsZHMudmlkZW9fZXh0ZXJuYWxfbGluaykge1xuICAgICAgICAvL2NvbnN0IHdhdGNoX25vd19idXR0b25zX2J1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb25zdCBidXR0b25fbGluayA9IHdwQnV0dG9uKFxuICAgICAgICAgIHRyYW5zbGF0aW9ucyhcIlJlZ2lzdGVyXCIpLFxuICAgICAgICAgIGRhdGEubWV0YWZpZWxkcy52aWRlb19leHRlcm5hbF9saW5rXG4gICAgICAgICk7XG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGJ1dHRvbl9saW5rKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLm1ldGFmaWVsZHMudmlkZW9faWQpIHtcbiAgICAgICAgLy9jb25zdCB3YXRjaF9ub3dfYnV0dG9uc19idXR0b25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgY29uc3QgYnV0dG9uX2xpbmsxID0gd3BCdXR0b24odHJhbnNsYXRpb25zKFwiV2F0Y2ggQWdhaW5cIiksIGxpbmspO1xuICAgICAgICBlbC5hcHBlbmRDaGlsZChidXR0b25fbGluazEpO1xuICAgICAgICBpZiAodmlkZW9fYWJvdmVfYWdlbmRhICE9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICBidXR0b25fbGluazEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBwbGF5WW9zcGFjZVZpZGVvSWQoZGF0YS5tZXRhZmllbGRzLnZpZGVvX2lkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRhdGEubWV0YWZpZWxkcy52aWRlb191cmwpIHtcbiAgICAgICAgY29uc3QgYnV0dG9uX2xpbmsyID0gd3BCdXR0b24odHJhbnNsYXRpb25zKFwiV2F0Y2ggQWdhaW5cIiksIGxpbmspO1xuICAgICAgICBpZiAodmlkZW9fYWJvdmVfYWdlbmRhICE9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICBidXR0b25fbGluazIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBwbGF5WW9zcGFjZVZpZGVvVXJsKGRhdGEubWV0YWZpZWxkcy52aWRlb191cmwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGJ1dHRvbl9saW5rMik7XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5tZXRhZmllbGRzLnZpZGVvX2lmcmFtZSkge1xuICAgICAgICBjb25zdCBidXR0b25fbGluazMgPSB3cEJ1dHRvbih0cmFuc2xhdGlvbnMoXCJXYXRjaCBBZ2FpblwiKSwgbGluayk7XG4gICAgICAgIGlmICh2aWRlb19hYm92ZV9hZ2VuZGEgIT09IFwiZmFsc2VcIikge1xuICAgICAgICAgIGJ1dHRvbl9saW5rMy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHBsYXlJZnJhbWVVcmwoZGF0YS5tZXRhZmllbGRzLnZpZGVvX2lmcmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoYnV0dG9uX2xpbmszKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9OT1QgSU4gVVNFXG4gICAgLypcbiAgICBpZihcbiAgICAgIGxvY2F0aW9uX3RvX3N0cmVhbV9saW5rICE9PSBcIlwiXG4gICAgICAmJlxuICAgICAgZGF0YVsnY2F0cyddW2NvbnN0YW50cy5sb2NhdGlvbl90YWddXG4gICAgICAmJlxuICAgICAgZGF0YVsnY2F0cyddW2NvbnN0YW50cy5sb2NhdGlvbl90YWddWzBdXG4gICAgICAmJlxuICAgICAgZGF0YVsnY2F0cyddW2NvbnN0YW50cy5sb2NhdGlvbl90YWddWzBdW1wic2x1Z1wiXVxuICAgICl7XG4gICAgICB2YXIgbG9jX3RvX2xpbmtfYXJyID1sb2NhdGlvbl90b19zdHJlYW1fbGluay5zcGxpdChcIjtcIik7XG4gICAgICBjb25zb2xlLmxvZyhsb2NfdG9fbGlua19hcnIsJ2xvY190b19saW5rX2FycicpO1xuICAgICAgZm9yKHZhciBsIGluIGxvY190b19saW5rX2Fycil7XG4gICAgICAgIHZhciBsb2NfdG9fbGluayA9IGxvY190b19saW5rX2FycltsXS5zcGxpdChcIjpcIik7XG5cbiAgICAgICAgY29uc29sZS5sb2cobG9jX3RvX2xpbmssJ2xvY190b19saW5rJyxkYXRhWydjYXRzJ11bY29uc3RhbnRzLmxvY2F0aW9uX3RhZ11bMF1bJ3NsdWcnXSk7XG4gICAgICAgIGlmKGRhdGFbJ2NhdHMnXVtjb25zdGFudHMubG9jYXRpb25fdGFnXVswXVsnc2x1ZyddID09PSBsb2NfdG9fbGlua1swXSl7XG5cbiAgICAgICAgICBjb25zdCB3YXRjaF9ub3dfYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgIC8vd2F0Y2hfbm93X2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCk9PnBsYXlZb3NwYWNlVmlkZW9JZChkYXRhLm1ldGFmaWVsZHMudmlkZW9faWQpICk7XG4gICAgICAgICAgd2F0Y2hfbm93X2J1dHRvbi5pbm5lckhUTUwgPSBcIldhdGNoIFN0cmVhbVwiO1xuICAgICAgICAgIHdhdGNoX25vd19idXR0b24uaHJlZiA9IGxvY190b19saW5rWzFdO1xuICAgICAgICAgIGVsLmFwcGVuZENoaWxkKHdhdGNoX25vd19idXR0b24pO1xuICAgICAgICB9XG5cblxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coY3VycmVudF90aW1lem9uZV9kYXRlLCdjdXJyZW50X3RpbWV6b25lX2RhdGUnKTtcbiAgICAgIGNvbnNvbGUubG9nKGxvY2F0aW9uX3RvX3N0cmVhbV9saW5rLCdsb2NhdGlvbl90b19zdHJlYW1fbGluaycpO1xuXG4gICAgfVxuICAgICovXG4gICAgLy9FTkQgTk9UIElOIFVTRVxuICB9IC8vZW5kIGVsc2UgbGlua3NfbGl2ZVxuICBpZiAoc3BvbnNvciAhPT0gbnVsbCkge1xuICAgIGhvbGRlci5hcHBlbmRDaGlsZChzcG9uc29yKTtcbiAgfVxuICAvL2VsZW1lbnRzLmFwcGVuZENoaWxkKGVsZW1lbnRzX2FnZW5kYSk7XG4gIGVsZW1lbnRzX2FnZW5kYS5hcHBlbmRDaGlsZCh0aW1lc2xvdCk7XG5cbiAgdmFyIGhpZGRlbiA9IHRydWU7XG4gIGZvciAodmFyIGQgaW4gZGF0YS5jYXRzW1wibTM2MF9zZXNzaW9uc19kYXlcIl0pIHtcbiAgICB2YXIgZGF5ID0gZGF0YS5jYXRzW1wibTM2MF9zZXNzaW9uc19kYXlcIl1bZF07XG4gICAgZWwuY2xhc3NMaXN0LmFkZChcImFnZW5kYV9kYXlfXCIgKyBkYXkudGVybV9pZCk7XG4gICAgaWYgKHBhcnNlSW50KGFjdGl2ZV9kYXkpID09PSBkYXkudGVybV9pZCkge1xuICAgICAgaGlkZGVuID0gZmFsc2U7XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coXCJEQVlcIiwgYWN0aXZlX2RheSwgZGF5LnRlcm1faWQpO1xuICB9XG4gIGlmIChkYXkgPT0gdW5kZWZpbmVkIHx8IGhpZGRlbikge1xuICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfSAvL2VuZCBpZlxuICBlbHNlIHtcbiAgICAvL2NvbnNvbGUubG9nKCdzaG93JyxlbCxkYXksYWN0aXZlX2RheSk7XG4gIH1cbiAgZWwuY2xhc3NMaXN0LmFkZChcInNpbmdsZV9zZXNzaW9uXCIpO1xuICBpZiAoXG4gICAgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRhZ10gJiZcbiAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXSAmJlxuICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50YWddWzBdW1wibWV0YWZpZWxkc1wiXVtcImNvbG9yXCJdXG4gICkge1xuICAgIC8vZWwuY2xhc3NMaXN0LmFkZCgnJyArIGRhdGFbJ2NhdHMnXVtjb25zdGFudHMudGFnXVswXVsnbWV0YWZpZWxkcyddWydjb2xvciddKTtcbiAgICBleHBhbmQuc3R5bGVbXCJib3JkZXItbGVmdFwiXSA9XG4gICAgICBcInNvbGlkIDNweCAjXCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcIm1ldGFmaWVsZHNcIl1bXCJjb2xvclwiXTtcbiAgICBob2xkZXIuc3R5bGVbXCJib3JkZXItbGVmdFwiXSA9XG4gICAgICBcInNvbGlkIDNweCAjXCIgKyBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudGFnXVswXVtcIm1ldGFmaWVsZHNcIl1bXCJjb2xvclwiXTtcbiAgfVxuICBpZiAoXG4gICAgZGF0YVtcImNhdHNcIl1bY29uc3RhbnRzLnRyYWNrXSAmJlxuICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50cmFja11bMF0gJiZcbiAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudHJhY2tdWzBdW1wibWV0YWZpZWxkc1wiXVtcImNvbG9yXCJdXG4gICkge1xuICAgIC8vZWwuY2xhc3NMaXN0LmFkZCgnJyArIGRhdGFbJ2NhdHMnXVtjb25zdGFudHMudGFnXVswXVsnbWV0YWZpZWxkcyddWydjb2xvciddKTtcbiAgICBlbC5kYXRhc2V0W1wiYm9yZGVyYm90dG9tXCJdID1cbiAgICAgIFwiQUFBXCIgK1xuICAgICAgXCJzb2xpZCAzcHggI1wiICtcbiAgICAgIGRhdGFbXCJjYXRzXCJdW2NvbnN0YW50cy50cmFja11bMF1bXCJtZXRhZmllbGRzXCJdW1wiY29sb3JcIl07XG4gICAgZWwuc3R5bGVbXCJib3JkZXItYm90dG9tXCJdID1cbiAgICAgIFwic29saWQgM3B4ICNcIiArXG4gICAgICBkYXRhW1wiY2F0c1wiXVtjb25zdGFudHMudHJhY2tdWzBdW1wibWV0YWZpZWxkc1wiXVtcImNvbG9yXCJdLnJlcGxhY2UoXCIjXCIsIFwiXCIpO1xuICAgIC8vY29uc29sZS5sb2coXCJib3JkZXItYm90dG9tIFwiLGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIC8vY29uc29sZS5sb2coXCIgTk8gYm9yZGVyLWJvdHRvbSBcIixkYXRhKTtcbiAgfVxuICByZXR1cm4gW2VsXTtcbn07IC8vXG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U2luZ2xlU2Vzc2lvbjtcbiIsImNvbnN0IGdldFRvZGF5U3RyaW5nID0gKCkgPT4ge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgLy93ZWVrZGF5TmFtZXMgPSBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddO1xuICAvL21vbnRoTmFtZXMgPSBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl07XG4gIHZhciBkYXRlU3RyaW5nID1cbiAgICBkYXRlLmdldEZ1bGxZZWFyKCkgK1xuICAgIFwiLVwiICtcbiAgICBkYXRlLmdldE1vbnRoKCkgK1xuICAgIFwiLVwiICtcbiAgICBkYXRlLmdldERhdGUoKSArXG4gICAgXCJ8XCIgK1xuICAgIGRhdGUuZ2V0SG91cnMoKSArXG4gICAgXCI6XCIgK1xuICAgIChcIjBcIiArIGRhdGUuZ2V0TWludXRlcygpKS5zbGljZSgtMikgK1xuICAgIFwiIFwiO1xuICByZXR1cm4gZGF0ZVN0cmluZztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGdldFRvZGF5U3RyaW5nO1xuIiwiY29uc3QgcGxheUlmcmFtZVVybCA9IChpZnJhbWVfdXJsKSA9PiB7XG4gIGNvbnN0IHZpZGVvX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGxheV92aWRlb19jb250YWluZXJcIik7XG4gIC8vaWYodmlkZW9fY29udGFpbmVyKSB2aWRlb19jb250YWluZXIuaW5uZXJIVE1MID0gdmlkZW9faWQ7XG4gIC8vdmFyIHlvc3BhY2VfdXJsID0gXCJodHRwOi8vY3NtLWUuY2RzMS55b3NwYWNlLmNvbS9jc20vXCIrdmlkZW9faWQrXCIvMDAwMDExNjIzNDEzMC5tM3U4P3lvLm5zPXRydWVcIjtcbiAgY29uc3QgdmlkZW9fdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgdmlkZW9fdGFnLmlubmVySFRNTCA9XG4gICAgJzxpZnJhbWUgc3JjPVwiJyArXG4gICAgaWZyYW1lX3VybCArXG4gICAgJ1wiIGFsbG93ZnVsbHNjcmVlbj1cIlwiIGFsbG93PVwiZW5jcnlwdGVkLW1lZGlhXCIgd2lkdGg9XCI5NjBcIiBoZWlnaHQ9XCI1NDBcIiBzdHlsZT1cImJvcmRlcjowO1wiPjwvaWZyYW1lPic7XG4gIGlmICh2aWRlb19jb250YWluZXIpIHtcbiAgICBpZiAodHlwZW9mIEdTTUFWaWRlbyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgR1NNQVZpZGVvLnN0b3AoKTtcbiAgICB9XG4gICAgdmlkZW9fY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgdmlkZW9fY29udGFpbmVyLmFwcGVuZENoaWxkKHZpZGVvX3RhZyk7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBsYXlJZnJhbWVVcmw7XG4iLCJjb25zdCBwbGF5WW9zcGFjZVZpZGVvSWQgPSAodmlkZW9faWQpID0+IHtcbiAgY29uc3QgdmlkZW9fY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwbGF5X3ZpZGVvX2NvbnRhaW5lclwiKTtcbiAgaWYgKHR5cGVvZiBHU01BVmlkZW8gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBHU01BVmlkZW8uc3RvcCgpO1xuICB9XG4gIHZpZGVvX2NvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAvL2lmKHZpZGVvX2NvbnRhaW5lcikgdmlkZW9fY29udGFpbmVyLmlubmVySFRNTCA9IHZpZGVvX2lkO1xuICAvL3ZhciB5b3NwYWNlX3VybCA9IFwiaHR0cDovL2NzbS1lLmNkczEueW9zcGFjZS5jb20vY3NtL1wiK3ZpZGVvX2lkK1wiLzAwMDAxMTYyMzQxMzAubTN1OD95by5ucz10cnVlXCI7XG4gIHZhciB5b3NwYWNlX3VybCA9XG4gICAgXCJodHRwczovL2NzbS1lLnRsczEueW9zcGFjZS5jb20vY3NtL1wiICtcbiAgICB2aWRlb19pZCArXG4gICAgXCIvMDAwMDEyMDM1NzQ5NC5tM3U4P3lvLm5zPXRydWVcIjtcbiAgLy9pZih2aWRlb19jb250YWluZXIpIHZpZGVvX2NvbnRhaW5lci5pbm5lckhUTUwgPSB2aWRlb19pZCArIHlvc3BhY2VfdXJsO1xuICAvL2h0dHBzOi8vY3NtLWUudGxzMS55b3NwYWNlLmNvbS9jc20vNDk0NDc2NTE5LzAwMDAxMjAzNTc0OTQubTN1OFxuICBjb25zdCB2aWRlb190YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICB2aWRlb190YWcuY2xhc3NMaXN0LmFkZChcImdzbWF2aWRlb1wiKTtcbiAgdmlkZW9fdGFnLmRhdGFzZXRbXCJsaW5rXCJdID0geW9zcGFjZV91cmw7XG4gIHZpZGVvX3RhZy5kYXRhc2V0W1wicG9zdGVyXCJdID1cbiAgICBmcm9udF9jb3JlX3Zhci5wbHVnaW5fdXJsICsgXCIuLi9wbHVnaW5fZ3NtYV92aWRlb3MvZ3NtYV9zdGluZ2VyLmpwZ1wiO1xuICB2aWRlb190YWcuZGF0YXNldFtcImF1dG9wbGF5XCJdID0gXCJ0cnVlXCI7XG4gIGlmICh2aWRlb19jb250YWluZXIpIHZpZGVvX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh2aWRlb190YWcpO1xuICBpZiAodHlwZW9mIEdTTUFWaWRlbyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vR1NNQVZpZGVvLnN0b3AoKTtcbiAgICAvL0dTTUFWaWRlby5zdGFydCgpO1xuICAgIEdTTUFWaWRlby52aWRlb1J1bigpO1xuICB9IGVsc2Uge1xuICAgIHZhciBHU01BVmlkZV91cmwgPVxuICAgICAgZnJvbnRfY29yZV92YXIucGx1Z2luX3VybCArXG4gICAgICBcIi4uL3BsdWdpbl9nc21hX3ZpZGVvcy90aGVvcGxheWVyL2dzbWF2aWRlby5jbGFzcy5qcz92ZXI9Ni4wXCI7XG4gICAgY29uc3QgR1NNQVZpZGVvX3RhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgR1NNQVZpZGVvX3RhZy5zcmMgPSBHU01BVmlkZV91cmw7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChHU01BVmlkZW9fdGFnKTtcblxuICAgIC8vR1NNQVZpZGVvLnN0YXJ0KCk7XG4gIH1cbiAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwbGF5WW9zcGFjZVZpZGVvSWQ7XG4iLCJjb25zdCBwbGF5WW9zcGFjZVZpZGVvVXJsID0gKHZpZGVvX3VybCkgPT4ge1xuICBjb25zdCB2aWRlb19jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBsYXlfdmlkZW9fY29udGFpbmVyXCIpO1xuICBpZiAodHlwZW9mIEdTTUFWaWRlbyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIEdTTUFWaWRlby5zdG9wKCk7XG4gIH1cbiAgdmlkZW9fY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gIHZhciB5b3NwYWNlX3VybCA9IHZpZGVvX3VybDtcblxuICBjb25zdCB2aWRlb190YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICB2aWRlb190YWcuY2xhc3NMaXN0LmFkZChcImdzbWF2aWRlb1wiKTtcbiAgdmlkZW9fdGFnLmRhdGFzZXRbXCJsaW5rXCJdID0geW9zcGFjZV91cmw7XG4gIHZpZGVvX3RhZy5kYXRhc2V0W1wicG9zdGVyXCJdID1cbiAgICBmcm9udF9jb3JlX3Zhci5wbHVnaW5fdXJsICsgXCIuLi9wbHVnaW5fZ3NtYV92aWRlb3MvZ3NtYV9zdGluZ2VyLmpwZ1wiO1xuICB2aWRlb190YWcuZGF0YXNldFtcImF1dG9wbGF5XCJdID0gXCJ0cnVlXCI7XG4gIGlmICh2aWRlb19jb250YWluZXIpIHZpZGVvX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh2aWRlb190YWcpO1xuICBpZiAodHlwZW9mIEdTTUFWaWRlbyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vR1NNQVZpZGVvLnN0b3AoKTtcbiAgICAvL0dTTUFWaWRlby5zdGFydCgpO1xuICAgIEdTTUFWaWRlby52aWRlb1J1bigpO1xuICB9IGVsc2Uge1xuICAgIHZhciBHU01BVmlkZV91cmwgPVxuICAgICAgZnJvbnRfY29yZV92YXIucGx1Z2luX3VybCArXG4gICAgICBcIi4uL3BsdWdpbl9nc21hX3ZpZGVvcy90aGVvcGxheWVyL2dzbWF2aWRlby5jbGFzcy5qcz92ZXI9Ni4wXCI7XG4gICAgY29uc3QgR1NNQVZpZGVvX3RhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgR1NNQVZpZGVvX3RhZy5zcmMgPSBHU01BVmlkZV91cmw7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChHU01BVmlkZW9fdGFnKTtcblxuICAgIC8vR1NNQVZpZGVvLnN0YXJ0KCk7XG4gIH1cbiAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwbGF5WW9zcGFjZVZpZGVvVXJsO1xuIiwiY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHRyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi90cmFuc2xhdGlvbnMuanNcIik7XG5cbmNvbnN0IHNlYXJjaEZpbHRlckV4aGliaXRvcnMgPSAoKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgY29uc3QgY2xlYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICBjb25zdCBjbGVhckZpbHRlcnMgPSAoKSA9PiB7XG4gICAgaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgIHZhciB0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdGFudHMuZXhoaWJpdG9yX2xvY2F0aW9uKTtcbiAgICBpZiAodGFnPy52YWx1ZSkgdGFnLnZhbHVlID0gXCJcIjtcbiAgICB0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdGFudHMuZXhoaWJpdG9yX3Byb2R1Y3QpO1xuICAgIGlmICh0YWc/LnZhbHVlKSB0YWcudmFsdWUgPSBcIlwiO1xuICAgIHdpbmRvdy5leGhpYml0b3JGaWx0ZXJCeVNlYXJjaCh7IHRhcmdldDogeyB2YWx1ZTogXCJcIiB9IH0pO1xuICAgIHZhciBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLm9wdGlvbi5hY3RpdmVcIik7XG4gICAgY29uc29sZS5sb2coYWN0aXZlLCBcIiBhY3RpdmVcIik7XG4gICAgYWN0aXZlLmZvckVhY2goZWUgPT4geyBpZihlZS5pbm5lckhUTUwgIT09IFwiQWxsXCIpIGVlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIil9KTtcbiAgICB2YXIgYWxsYWN0aXZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5vcHRpb25cIik7XG4gICAgYWxsYWN0aXZlLmZvckVhY2goZWUgPT4geyBpZihlZS5pbm5lckhUTUwgPT09IFwiQWxsXCIpZWUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKX0pO1xuXG4gIH07XG4gIHdpbmRvdy5jbGVhckFsbEZpbHRlcnMgPSBjbGVhckZpbHRlcnM7XG4gIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB3aW5kb3cuZXhoaWJpdG9yRmlsdGVyQnlTZWFyY2gpO1xuICBpbnB1dC5wbGFjZWhvbGRlciA9IHRyYW5zbGF0aW9ucyhcIlNlYXJjaCBoZXJlLi4uXCIpO1xuICBpbnB1dC5pZCA9IFwiZXhoaWJpdG9yc19zZWFyY2hcIjtcbiAgY2xlYXIuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiQ2xlYXJcIik7XG4gIGNsZWFyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgY2xlYXIuaWQgPSBcImV4aGliaXRvcl9jbGVhcl9zZWFyY2hcIjtcbiAgY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsZWFyRmlsdGVycyk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGNsZWFyKTtcbiAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG53aW5kb3cuZXhoaWJpdG9yRmlsdGVyQnlTZWFyY2ggPSAoZSkgPT4ge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmxldHRlcl9maWx0ZXIuYWN0aXZlXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7O1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmxldHRlcl9jbGVhclwiKS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpOztcbiAgLy9jb25zdCBzZWFyY2ggPSBlLnRhcmdldC52YWx1ZTtcbiAgY29uc3Qgc2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleGhpYml0b3JzX3NlYXJjaFwiKVxuICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleGhpYml0b3JzX3NlYXJjaFwiKS52YWx1ZVxuICAgIDogXCJcIjtcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBjb25zdCBmaWx0ZXJfbG9jYXRpb24gPVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN0YW50cy5leGhpYml0b3JfbG9jYXRpb24pPy52YWx1ZSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXJfcHJvZHVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN0YW50cy5leGhpYml0b3JfcHJvZHVjdCk/LnZhbHVlIHx8IFwiXCI7XG4gIHZhciBmaWx0ZXJfdmFsdWUgPSBmaWx0ZXJfbG9jYXRpb24gKyBmaWx0ZXJfcHJvZHVjdCArIHNlYXJjaDtcbiAgY29uc29sZS5sb2coXCJmaWx0ZXJcIiwgZmlsdGVyX3ZhbHVlKTtcbiAgY29uc3QgYWxsX2V4aGliaXRvcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW1fc2luZ2xlXCIpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsX2V4aGliaXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAvL2NvbnNvbGUubG9nKFwiYWFcIiAsYWxsX2V4aGliaXRvcnNbaV0uY2xhc3NMaXN0ICk7XG4gICAgLy9jb25zb2xlLmxvZyhcImFhXCIgLGZpbHRlcl90aGVtZSAmJiBhbGxfZXhoaWJpdG9yc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoZmlsdGVyX3RoZW1lKSAgKTtcbiAgICAvL2NvbnNvbGUubG9nKFwiYWFcIiAsZmlsdGVyX2xvY2F0aW9uICYmIGFsbF9leGhpYml0b3JzW2ldLmNsYXNzTGlzdC5jb250YWlucyhmaWx0ZXJfbG9jYXRpb24pICApO1xuICAgIC8vY29uc29sZS5sb2coXCJhYVwiICxmaWx0ZXJfdHJhY2sgJiYgYWxsX2V4aGliaXRvcnNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKGZpbHRlcl90cmFjaykgICk7XG4gICAgdmFyIHNob3cgPSB0cnVlO1xuICAgIGlmIChhbGxfZXhoaWJpdG9yc1tpXS50ZXh0Q29udGVudCAmJiBzZWFyY2ggIT09IFwiXCIpXG4gICAgICBpZiAoXG4gICAgICAgIGFsbF9leGhpYml0b3JzW2ldLnRleHRDb250ZW50XG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSkgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgaWYgKGFsbF9leGhpYml0b3JzW2ldLmNsYXNzTGlzdClcblxuICAgIGlmIChcbiAgICAgIGZpbHRlcl9sb2NhdGlvbiAhPT0gXCJcIiAmJlxuICAgICAgIWFsbF9leGhpYml0b3JzW2ldLmNsYXNzTGlzdC5jb250YWlucyhmaWx0ZXJfbG9jYXRpb24pXG4gICAgKSB7XG4gICAgICBzaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpbHRlcl9wcm9kdWN0ICE9PSBcIlwiICYmXG4gICAgICAhYWxsX2V4aGliaXRvcnNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKGZpbHRlcl9wcm9kdWN0KVxuICAgICkge1xuICAgICAgc2hvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG93KSB7XG4gICAgICBhbGxfZXhoaWJpdG9yc1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxfZXhoaWJpdG9yc1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuICB9XG4gIC8vY29uc29sZS5sb2coXCJhYVwiICxhbGxfZXhoaWJpdG9yc1tpXS5jbGFzc0xpc3QsIFtcImFhXCIsXCJsZXR0ZXJfXCJdLmluZGV4T2YoXCJsZXR0ZXJfXCIpKTtcblxuICBpZiAoZmlsdGVyX3ZhbHVlICE9PSBcIlwiKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleGhpYml0b3JfY2xlYXJfc2VhcmNoXCIpLnN0eWxlLmRpc3BsYXkgPSBcImluaXRpYWxcIjtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleGhpYml0b3JfY2xlYXJfc2VhcmNoXCIpKVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleGhpYml0b3JfY2xlYXJfc2VhcmNoXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZWFyY2hGaWx0ZXJFeGhpYml0b3JzO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0gcmVxdWlyZShcIi4uL3RyYW5zbGF0aW9ucy5qc1wiKTtcbmNvbnN0IEFaID0gW1xuICBcIipcIixcbiAgXCIjXCIsXG4gIFwiQVwiLFxuICBcIkJcIixcbiAgXCJDXCIsXG4gIFwiRFwiLFxuICBcIkVcIixcbiAgXCJGXCIsXG4gIFwiR1wiLFxuICBcIkhcIixcbiAgXCJJXCIsXG4gIFwiSlwiLFxuICBcIktcIixcbiAgXCJMXCIsXG4gIFwiTVwiLFxuICBcIk5cIixcbiAgXCJPXCIsXG4gIFwiUFwiLFxuICBcIlFcIixcbiAgXCJSXCIsXG4gIFwiU1wiLFxuICBcIlRcIixcbiAgXCJVXCIsXG4gIFwiVlwiLFxuICBcIldcIixcbiAgXCJYXCIsXG4gIFwiWVwiLFxuICBcIlpcIixcbl07XG5jb25zdCBsZXR0ZXJGaWx0ZXJJdGVtcyA9ICgpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGZvciAodmFyIGkgaW4gQVopIHtcbiAgICBjb25zdCBsZXR0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGxldHRlci5pbm5lckhUTUwgPSBBWltpXTtcbiAgICBsZXR0ZXIuY2xhc3NMaXN0LmFkZChcImxldHRlcl9maWx0ZXJcIik7XG4gICAgbGV0dGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmaWx0ZXJCeUxldHRlcik7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChsZXR0ZXIpO1xuICB9XG5cbiAgY29uc3QgY2xlYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjbGVhci5pbm5lckhUTUwgPSB0cmFuc2xhdGlvbnMoXCJDbGVhclwiKTtcbiAgY2xlYXIuY2xhc3NMaXN0LmFkZChcImxldHRlcl9maWx0ZXJcIik7XG4gIGNsZWFyLmNsYXNzTGlzdC5hZGQoXCJsZXR0ZXJfY2xlYXJcIik7XG4gIGNsZWFyLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG4gIGNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmaWx0ZXJCeUxldHRlcik7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2xlYXIpO1xuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmNvbnN0IGZpbHRlckJ5TGV0dGVyID0gKGUpID0+IHtcbiAgaWYod2luZG93LmNsZWFyQWxsRmlsdGVycylcbiAgICB3aW5kb3cuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gIC8vY29uc29sZS5sb2coZS50YXJnZXQpO1xuICB2YXIgbGV0dGVyID0gZS50YXJnZXQudGV4dENvbnRlbnQ7XG4gIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGV0dGVyX2ZpbHRlci5hY3RpdmVcIik7XG4gIGlmIChhY3RpdmUpIGFjdGl2ZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICBlLnRhcmdldC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICBjb25zdCBhbGxfbGV0dGVyX2Jsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaXRlbV9saXN0XCIpO1xuICAvL2NvbnNvbGUubG9nKGFsbF9sZXR0ZXJfYmxvY2tzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxfbGV0dGVyX2Jsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgIC8vY29uc29sZS5sb2coXCJhYVwiICxhbGxfbGV0dGVyX2Jsb2Nrc1tpXS5jbGFzc0xpc3QsIFtcImFhXCIsXCJsZXR0ZXJfXCJdLmluZGV4T2YoXCJsZXR0ZXJfXCIpKTtcbiAgICBpZiAoYWxsX2xldHRlcl9ibG9ja3NbaV0uY2xhc3NMaXN0KVxuICAgICAgaWYgKFxuICAgICAgICBhbGxfbGV0dGVyX2Jsb2Nrc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoXG4gICAgICAgICAgXCJsZXR0ZXJfXCIgKyBlLnRhcmdldC50ZXh0Q29udGVudFxuICAgICAgICApIHx8XG4gICAgICAgIGxldHRlciA9PT0gdHJhbnNsYXRpb25zKFwiQ2xlYXJcIilcbiAgICAgICkge1xuICAgICAgICBhbGxfbGV0dGVyX2Jsb2Nrc1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGxfbGV0dGVyX2Jsb2Nrc1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHNlYXJjaEZpbHRlckl0ZW1zID0gKCkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VhcmNoX2JveFwiKTtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGNvbnN0IGNsZWFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGZpbHRlckJ5U2VhcmNoKTtcbiAgaW5wdXQuY2xhc3NMaXN0LmFkZChcImhhcy1pY29uLXNlYXJjaFwiKTtcbiAgaW5wdXQucGxhY2Vob2xkZXIgPSB0cmFuc2xhdGlvbnMoXCJTZWFyY2ggaGVyZS4uLlwiKTtcbiAgY2xlYXIuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiQ2xlYXJcIik7XG4gIGNsZWFyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgY2xlYXIuaWQgPSBcImNsZWFyX3NlYXJjaFwiO1xuICBjbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICBpbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgZmlsdGVyQnlTZWFyY2goeyB0YXJnZXQ6IHsgdmFsdWU6IFwiXCIgfSB9KTtcbiAgfSk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGNsZWFyKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5jb25zdCBmaWx0ZXJCeVNlYXJjaCA9IChlKSA9PiB7XG4gIGNvbnN0IHNlYXJjaCA9IGUudGFyZ2V0LnZhbHVlO1xuXG4gIHZhciBjb3VudCA9IDA7XG4gIGNvbnN0IGFsbF9sZXR0ZXJfYmxvY2tzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtX3NpbmdsZVwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxfbGV0dGVyX2Jsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgIC8vY29uc29sZS5sb2coXCJhYVwiICxhbGxfbGV0dGVyX2Jsb2Nrc1tpXS5jbGFzc0xpc3QsIFtcImFhXCIsXCJsZXR0ZXJfXCJdLmluZGV4T2YoXCJsZXR0ZXJfXCIpKTtcbiAgICBpZiAoYWxsX2xldHRlcl9ibG9ja3NbaV0udGV4dENvbnRlbnQpXG4gICAgICBpZiAoXG4gICAgICAgIGFsbF9sZXR0ZXJfYmxvY2tzW2ldLnRleHRDb250ZW50XG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSkgIT09IC0xIHx8XG4gICAgICAgIHNlYXJjaCA9PT0gXCJcIlxuICAgICAgKSB7XG4gICAgICAgIGFsbF9sZXR0ZXJfYmxvY2tzW2ldLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbF9sZXR0ZXJfYmxvY2tzW2ldLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH1cbiAgfVxuICBpZiAoc2VhcmNoICE9PSBcIlwiKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjbGVhcl9zZWFyY2hcIikuc3R5bGUuZGlzcGxheSA9IFwiaW5pdGlhbFwiO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2xlYXJfc2VhcmNoXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNlYXJjaEZpbHRlckl0ZW1zOiBzZWFyY2hGaWx0ZXJJdGVtcyxcbiAgbGV0dGVyRmlsdGVySXRlbXM6IGxldHRlckZpbHRlckl0ZW1zLFxufTtcbiIsImNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCB0cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vdHJhbnNsYXRpb25zLmpzXCIpO1xuXG5jb25zdCBzZWFyY2hGaWx0ZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgY29uc3QgY2xlYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICBjb25zdCBjbGVhckZpbHRlcnMgPSAoKSA9PiB7XG4gICAgaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgIHZhciB0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdGFudHMudGFnKTtcbiAgICBpZiAodGFnPy52YWx1ZSkgdGFnLnZhbHVlID0gXCJcIjtcbiAgICB0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdGFudHMubG9jYXRpb25fdGFnKTtcbiAgICBpZiAodGFnPy52YWx1ZSkgdGFnLnZhbHVlID0gXCJcIjtcbiAgICB0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdGFudHMudHJhY2spO1xuICAgIGlmICh0YWc/LnZhbHVlKSB0YWcudmFsdWUgPSBcIlwiO1xuICAgIHRhZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN0YW50cy5wYXNzX3R5cGUpO1xuICAgIGlmICh0YWc/LnZhbHVlKSB0YWcudmFsdWUgPSBcIlwiO1xuICAgIHdpbmRvdy5zZXNzaW9uRmlsdGVyQnlTZWFyY2goeyB0YXJnZXQ6IHsgdmFsdWU6IFwiXCIgfSB9KTtcbiAgfTtcbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHdpbmRvdy5zZXNzaW9uRmlsdGVyQnlTZWFyY2gpO1xuICAvL2lucHV0LnBsYWNlaG9sZGVyID0gdHJhbnNsYXRpb25zKFwiU2VhcmNoIFRoZSBTZXNzaW9uc1wiKTtcbiAgaW5wdXQucGxhY2Vob2xkZXIgPSB0cmFuc2xhdGlvbnMoXCJTZWFyY2ggaGVyZS4uLlwiKTtcbiAgaW5wdXQuaWQgPSBcInNlc3Npb25zX3NlYXJjaFwiO1xuICBjbGVhci5pbm5lckhUTUwgPSB0cmFuc2xhdGlvbnMoXCJDbGVhclwiKTtcbiAgY2xlYXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBjbGVhci5pZCA9IFwic2Vzc2lvbl9jbGVhcl9zZWFyY2hcIjtcbiAgY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsZWFyRmlsdGVycyk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGNsZWFyKTtcbiAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG53aW5kb3cuc2Vzc2lvbkZpbHRlckJ5U2VhcmNoID0gKGUpID0+IHtcbiAgLy9jb25zdCBzZWFyY2ggPSBlLnRhcmdldC52YWx1ZTtcbiAgY29uc3Qgc2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXNzaW9uc19zZWFyY2hcIilcbiAgICA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2Vzc2lvbnNfc2VhcmNoXCIpLnZhbHVlXG4gICAgOiBcIlwiO1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIGNvbnN0IGZpbHRlcl90aGVtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN0YW50cy50YWcpPy52YWx1ZSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXJfbG9jYXRpb24gPVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN0YW50cy5sb2NhdGlvbl90YWcpPy52YWx1ZSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXJfdHJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdGFudHMudHJhY2spPy52YWx1ZSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXJfcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN0YW50cy5wYXNzX3R5cGUpPy52YWx1ZSB8fCBcIlwiO1xuICB2YXIgZmlsdGVyX3ZhbHVlID0gZmlsdGVyX3Bhc3MrZmlsdGVyX3RoZW1lICsgZmlsdGVyX2xvY2F0aW9uICsgZmlsdGVyX3RyYWNrICsgc2VhcmNoO1xuICBjb25zb2xlLmxvZyhcImZpbHRlclwiLCBmaWx0ZXJfdmFsdWUpO1xuICBjb25zdCBhbGxfc2Vzc2lvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnNpbmdsZV9zZXNzaW9uXCIpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsX3Nlc3Npb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcImFhXCIgLGFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QgKTtcbiAgICAvL2NvbnNvbGUubG9nKFwiYWFcIiAsZmlsdGVyX3RoZW1lICYmIGFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoZmlsdGVyX3RoZW1lKSAgKTtcbiAgICAvL2NvbnNvbGUubG9nKFwiYWFcIiAsZmlsdGVyX2xvY2F0aW9uICYmIGFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoZmlsdGVyX2xvY2F0aW9uKSAgKTtcbiAgICAvL2NvbnNvbGUubG9nKFwiYWFcIiAsZmlsdGVyX3RyYWNrICYmIGFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoZmlsdGVyX3RyYWNrKSAgKTtcbiAgICB2YXIgc2hvdyA9IHRydWU7XG4gICAgaWYgKGFsbF9zZXNzaW9uc1tpXS50ZXh0Q29udGVudCAmJiBzZWFyY2ggIT09IFwiXCIpXG4gICAgICBpZiAoXG4gICAgICAgIGFsbF9zZXNzaW9uc1tpXS50ZXh0Q29udGVudFxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluZGV4T2Yoc2VhcmNoLnRvTG93ZXJDYXNlKCkpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgIGlmIChhbGxfc2Vzc2lvbnNbaV0uY2xhc3NMaXN0KVxuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXJfdGhlbWUgIT09IFwiXCIgJiZcbiAgICAgICAgIWFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoZmlsdGVyX3RoZW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICApIHtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmlsdGVyX2xvY2F0aW9uICE9PSBcIlwiICYmXG4gICAgICAhYWxsX3Nlc3Npb25zW2ldLmNsYXNzTGlzdC5jb250YWlucyhmaWx0ZXJfbG9jYXRpb24udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHNob3cgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZmlsdGVyX3Bhc3MgIT09IFwiXCIgJiZcbiAgICAgICFhbGxfc2Vzc2lvbnNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKGZpbHRlcl9wYXNzLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBzaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpbHRlcl90cmFjayAhPT0gXCJcIiAmJlxuICAgICAgIWFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoZmlsdGVyX3RyYWNrLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBzaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhZ2VuZGFfZGF5X1wiICsgd2luZG93LmFjdGl2ZV9kYXkpXG4gICAgKSB7XG4gICAgICBzaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzaG93KSB7XG4gICAgICBhbGxfc2Vzc2lvbnNbaV0uc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsX3Nlc3Npb25zW2ldLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG4gIH1cbiAgLy9jb25zb2xlLmxvZyhcImFhXCIgLGFsbF9zZXNzaW9uc1tpXS5jbGFzc0xpc3QsIFtcImFhXCIsXCJsZXR0ZXJfXCJdLmluZGV4T2YoXCJsZXR0ZXJfXCIpKTtcbiAgLy9jb25zb2xlLmxvZyhcImNsZWFuIHRpbWVzbG90IHdpbGwgYmVcIik7XG4gIGNvbnN0IHNsb3RzX2FsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIjc2Vzc2lvbl90ZW1wbGF0ZSBkaXYudGltZXNsb3RcIik7XG4gIGZvciAodmFyIGlfcyA9IDA7IGlfcyA8IHNsb3RzX2FsbC5sZW5ndGg7IGlfcysrKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcIkNISUxEUkVOPj5cIixzbG90c19hbGxbaV9zXS5jaGlsZHJlblsxXS5jaGlsZHJlbik7XG4gICAgdmFyIGlzX2hpZGRlbiA9IHRydWU7XG4gICAgZm9yKHZhciBpaV9zID0gMDsgaWlfcyA8IHNsb3RzX2FsbFtpX3NdLmNoaWxkcmVuWzFdLmNoaWxkcmVuLmxlbmd0aDsgaWlfcysrKXtcbiAgICAgIC8vY29uc29sZS5sb2coXCJlZWVlXCIsc2xvdHNfYWxsW2lfc10uY2hpbGRyZW5bMV0uY2hpbGRyZW5baWlfc10pXG4gICAgICBpZihzbG90c19hbGxbaV9zXS5jaGlsZHJlblsxXS5jaGlsZHJlbltpaV9zXS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIil7XG5cdC8vaGlkZVxuICAgICAgfWVsc2V7XG5cdC8vZG9udGhpZGVcblx0aXNfaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coXCJPVVRDT01FPj5cIixpc19oaWRkZW4sIHNsb3RzX2FsbFtpX3NdLCBpX3MpO1xuICAgIGlmKGlzX2hpZGRlbil7XG4gICAgICBzbG90c19hbGxbaV9zXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfWVsc2V7XG4gICAgICBzbG90c19hbGxbaV9zXS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIH1cbiAgfVxuICAvL2NvbnNvbGUubG9nKFwiY2xlYW4gdGltZXNsb3QgaXQgaXNcIik7XG5cblxuICBpZiAoZmlsdGVyX3ZhbHVlICE9PSBcIlwiKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXNzaW9uX2NsZWFyX3NlYXJjaFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJpbml0aWFsXCI7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2Vzc2lvbl9jbGVhcl9zZWFyY2hcIikpXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlc3Npb25fY2xlYXJfc2VhcmNoXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZWFyY2hGaWx0ZXI7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vdHJhbnNsYXRpb25zLmpzXCIpO1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgZmlsdGVyYWJsZSA9IFtcbiAgY29uc3RhbnRzLmxvY2F0aW9uX3RhZyxcbiAgY29uc3RhbnRzLnRhZyxcbiAgY29uc3RhbnRzLnRyYWNrLFxuICBjb25zdGFudHMucGFzc190eXBlLFxuXTtcblxuY29uc3Qgc2Vzc2lvbkNhdGVnb3JpZXNGaWx0ZXJNV0NTID0gKGNhdHMpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gIGNvbnNvbGUubG9nKGNhdHMsIFwiY2F0c1wiKTtcbiAgZm9yICh2YXIgaSBpbiBjYXRzKSB7XG4gICAgY29uc29sZS5sb2coaSwgY2F0c1tpXSk7XG4gICAgaWYgKGZpbHRlcmFibGUuaW5kZXhPZihpKSAhPT0gLTEgJiYgY2F0c1tpXS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRpdGxlLmlubmVySFRNTCA9IHRyYW5zbGF0aW9ucyhcIkZJTFRFUiBCWSBcIitjb25zdGFudHMuY2F0c190aXRsZXNbaV0udG9VcHBlckNhc2UoKSk7XG4gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlKTtcblxuICAgICAgLy9jb25zb2xlLmxvZyhcIkFERCBJVCBJTlwiLCBpKTtcbiAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBzZWxlY3QuY2xhc3NMaXN0LmFkZChcInNlbGVjdFwiKTtcbiAgICAgIGNvbnN0IG9wdGlvbl9pbml0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIG9wdGlvbl9pbml0LnZhbHVlID0gXCJBbGxcIjtcbiAgICAgIG9wdGlvbl9pbml0LmNsYXNzTGlzdC5hZGQoXCJvcHRpb25cIik7XG4gICAgICBvcHRpb25faW5pdC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgb3B0aW9uX2luaXQuaW5uZXJIVE1MID0gdHJhbnNsYXRpb25zKFwiQWxsXCIpOy8vICsgY29uc3RhbnRzLmNhdHNfdGl0bGVzW2ldO1xuICAgICAgb3B0aW9uX2luaXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9wdGlvbkNsaWNrKTtcblxuICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbl9pbml0KTtcbiAgICAgIHNlbGVjdC5tdWx0aXBsZSA9IHRydWU7XG4gICAgICBzZWxlY3QuaWQgPSBpO1xuICAgICAgXG4gICAgICBmb3IgKHZhciBpaSBpbiBjYXRzW2ldKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIG9wdGlvbi5jbGFzc0xpc3QuYWRkKFwib3B0aW9uXCIpO1xuICAgICAgICBvcHRpb24uaW5uZXJIVE1MID0gY2F0c1tpXVtpaV1bXCJuYW1lXCJdO1xuICAgICAgICBvcHRpb24udmFsdWUgPSBjYXRzW2ldW2lpXVtcInNsdWdcIl07XG5cdG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb3B0aW9uQ2xpY2spO1xuICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICAgIH1cbiAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHdpbmRvdy5zZXNzaW9uRmlsdGVyQnlTZWFyY2gpO1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiQUREIElUIE5PVFwiLCBpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5jb25zdCBvcHRpb25DbGljayA9IChlKSA9PiB7XG4gIHZhciBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiI1wiK2UudGFyZ2V0LnBhcmVudE5vZGUuaWQrXCIgLmFjdGl2ZVwiKTtcbiAgY29uc29sZS5sb2coYWN0aXZlLCBcIiNcIitlLnRhcmdldC5wYXJlbnROb2RlLmlkK1wiIGFjdGl2ZVwiKTtcbiAgYWN0aXZlLmZvckVhY2goZWUgPT4gZWUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSk7XG4gIGNvbnNvbGUubG9nKGUudGFyZ2V0LmlubmVySFRNTCAsIGUpO1xuICAvL3ZhciBrZXkgPSAgZS50YXJnZXQuaW5uZXJIVE1MLnNwbGl0KCcgJykuam9pbignLScpIDtcbiAgdmFyIGtleSA9ICBlLnRhcmdldC52YWx1ZTtcbiAgaWYoa2V5ID09PSBcIkFsbFwiKVxuICAgIGUudGFyZ2V0LnBhcmVudE5vZGUudmFsdWUgPSBcIlwiO1xuICBlbHNlXG4gICAgZS50YXJnZXQucGFyZW50Tm9kZS52YWx1ZSA9IGtleTtcbiAgZS50YXJnZXQuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgd2luZG93LnNlc3Npb25GaWx0ZXJCeVNlYXJjaCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlc3Npb25DYXRlZ29yaWVzRmlsdGVyTVdDUztcbiIsImNvbnN0IHdwQnV0dG9uID0gKHRpdGxlLCBocmVmLCBvdXRsaW5lID0gZmFsc2UpID0+IHtcbiAgY29uc3QgYnV0dG9uX2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgaWYgKGhyZWYpIHtcbiAgICBidXR0b25fbGluay5ocmVmID0gaHJlZjtcbiAgfVxuICBidXR0b25fbGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xuICBidXR0b25fbGluay5jbGFzc0xpc3QuYWRkKFwid3AtYmxvY2stYnV0dG9uc1wiKTtcblxuICBjb25zdCBidXR0b25fZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgYnV0dG9uX2Rpdi5jbGFzc0xpc3QuYWRkKFwid3AtYmxvY2stYnV0dG9uXCIpO1xuXG4gIGNvbnN0IGV4dGVybmFsX2J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGV4dGVybmFsX2J1dHRvbi5jbGFzc0xpc3QuYWRkKFwid3AtYmxvY2stYnV0dG9uX19saW5rXCIpO1xuICBleHRlcm5hbF9idXR0b24uaW5uZXJIVE1MID0gdGl0bGU7XG4gIGJ1dHRvbl9kaXYuYXBwZW5kQ2hpbGQoZXh0ZXJuYWxfYnV0dG9uKTtcbiAgaWYgKG91dGxpbmUpIHtcbiAgICBidXR0b25fZGl2LmNsYXNzTGlzdC5hZGQoXCJvdXRsaW5lXCIpO1xuICB9XG4gIGlmICh0aXRsZS5pbmRleE9mKFwiTGl2ZSBpblwiKSAhPT0gLTEpIHtcbiAgICBidXR0b25fZGl2LmlkID0gXCJjb3VudGVyX29uXCI7XG4gIH1cblxuICBidXR0b25fbGluay5hcHBlbmRDaGlsZChidXR0b25fZGl2KTtcbiAgcmV0dXJuIGJ1dHRvbl9saW5rO1xufTtcbm1vZHVsZS5leHBvcnRzID0gd3BCdXR0b247XG4iLCJ2YXIgY29uZmlnID0ge307XG5pZiAod2luZG93LnRocml2ZV9kYXRhKSB7XG4gIGNvbmZpZyA9IHdpbmRvdy50aHJpdmVfZGF0YVswXT8uY29uZmlnPy50eXBlcz8uc2Vzc2lvbjtcbn1cbmNvbnN0IGNvbnN0YW50cyA9IHtcbiAgZXhoaWJpdG9yX2xvY2F0aW9uOiBcIm0zNjBfZXhoaWJpdG9yc19sb2NhdGlvbnNcIixcbiAgZXhoaWJpdG9yX3Byb2R1Y3Q6IFwibTM2MF9leGhpYml0b3JzX3Byb2R1Y3RzXCIsXG4gIGxvY2F0aW9uX3RhZzogXCJtMzYwX3Nlc3Npb25zX2xvY2F0aW9uc1wiLFxuICB0YWc6IFwibTM2MF9zZXNzaW9uc190YWdcIixcbiAgdHJhY2s6IFwibTM2MF9zZXNzaW9uc190cmFja1wiLFxuICBkYXk6IFwibTM2MF9zZXNzaW9uc19kYXlcIixcbiAgdmlkZW9fY2F0OiBcIm0zNjBfdmlkZW9fY2F0XCIsXG4gIHNwb25zb3JfY2F0OiBcIm0zNjBfc3BvbnNvcl9jYXRcIixcbiAgcGFzc190eXBlOiBcIm0zNjBfc2Vzc2lvbnNfcGFzc1wiLFxuICBzcGVha2VyczogXCJtMzYwX3NwZWFrZXJzXCIsXG4gIHNwb25zb3I6IFwibTM2MF9zcG9uc29yXCIsXG4gIHRpbWVfc3RhcnQ6IFwidGltZV9zdGFydFwiLFxuICB0aW1lX2VuZDogXCJ0aW1lX2VuZFwiLFxuICBjYXRzX3RpdGxlczoge1xuICAgIG0zNjBfc2Vzc2lvbnNfbG9jYXRpb25zOiBcIkxvY2F0aW9uXCIsXG4gICAgbTM2MF9zZXNzaW9uc190YWc6IFwiVGhlbWVcIixcbiAgICBtMzYwX3Nlc3Npb25zX3RyYWNrOiBcIlRyYWNrXCIsXG4gICAgbTM2MF9zZXNzaW9uc19wYXNzOiBcIlBhc3NcIixcbiAgICBtMzYwX2V4aGliaXRvcnNfbG9jYXRpb25zOiBcIkxPQ0FUSU9OXCIsXG4gICAgbTM2MF9leGhpYml0b3JzX3Byb2R1Y3RzOiBcIlBST0RVQ1RcIixcbiAgfSxcbiAgY29uZmlnOiBjb25maWcsXG59O1xubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudHM7XG4iLCJjb25zdCBleGhpYml0b3JfdGVtcGxhdGUgPSAoZGF0YUluKSA9PiB7XG4gIGNvbnNvbGUubG9nKFwiZGF0YVwiLCBkYXRhKTtcbiAgdmFyIGRhdGEgPSBkYXRhSW4uZGF0YTtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImg0XCIpO1xuICAgIGNvbnN0IGNvbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5hbWUuaW5uZXJIVE1MID0gZGF0YVtpXS5wb3N0X3RpdGxlO1xuICAgIGNvbnQuaW5uZXJIVE1MID0gZGF0YVtpXS5wb3N0X2NvbnRlbnQgLyorSlNPTi5zdHJpbmdpZnkoZGF0YSkqLztcbiAgICBpbWcuc3JjID0gZGF0YVtpXS50aHVtYm5haWw7XG5cbiAgICB2YXIgbWV0YSA9IGdldE1ldGFkYXRhKGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdKTtcblxuICAgIGVsLmFwcGVuZENoaWxkKG5hbWUpO1xuICAgIGVsLmFwcGVuZENoaWxkKGltZyk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoY29udCk7XG4gICAgZWwuYXBwZW5kQ2hpbGQobWV0YSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gIH0gLy9lbmQgZm9yXG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSBgZXhoaWJpdG9yX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcbm1vZHVsZS5leHBvcnRzID0gZXhoaWJpdG9yX3RlbXBsYXRlO1xuIiwiY29uc3QgZXhoaWJpdG9yX3RlbXBsYXRlX2NvcmUgPSAoZGF0YUluKSA9PiB7XG4gIGNvbnNvbGUubG9nKFwiZGF0YVwiLCBkYXRhSW4pO1xuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDRcIik7XG4gICAgY29uc3QgY29udCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgbmFtZS5pbm5lckhUTUwgPSBkYXRhW2ldLnBvc3RfdGl0bGU7XG4gICAgY29udC5pbm5lckhUTUwgPSBkYXRhW2ldLnBvc3RfY29udGVudCAvKitKU09OLnN0cmluZ2lmeShkYXRhKSovO1xuICAgIGltZy5zcmMgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcIkxvZ29fVVJMXCJdO1xuXG4gICAgdmFyIG1ldGEgPSBnZXRNZXRhZGF0YShkYXRhW2ldW1wibWV0YWZpZWxkc1wiXSk7XG5cbiAgICBlbC5hcHBlbmRDaGlsZChuYW1lKTtcbiAgICBlbC5hcHBlbmRDaGlsZChpbWcpO1xuICAgIGVsLmFwcGVuZENoaWxkKGNvbnQpO1xuICAgIGVsLmFwcGVuZENoaWxkKG1ldGEpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9IC8vZW5kIGZvclxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYGV4aGliaXRvcl90ZW1wbGF0ZSAke0pTT04uc3RyaW5naWZ5KGRhdGEpfS5gO1xuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmNvbnN0IGdldE1ldGFkYXRhID0gKGRhdGEpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBlbC5pbm5lckhUTUwgPSBpICsgXCI6IFwiICsgZGF0YVtpXTtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhoaWJpdG9yX3RlbXBsYXRlX2NvcmU7XG4iLCJjb25zdCB7XG4gIHNlYXJjaEZpbHRlckl0ZW1zLFxuICBsZXR0ZXJGaWx0ZXJJdGVtcyxcbn0gPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9zZWFyY2hGaWx0ZXJJdGVtcy5qc1wiKTtcbmNvbnN0IHNlYXJjaEZpbHRlckV4aGliaXRvcnMgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9zZWFyY2hGaWx0ZXJFeGhpYml0b3JzLmpzXCIpO1xuY29uc3QgZXhoaWJpdG9yQ2F0ZWdvcmllc0ZpbHRlciA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2V4aGliaXRvckNhdGVnb3JpZXNGaWx0ZXIuanNcIik7XG5jb25zdCB0cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vdHJhbnNsYXRpb25zLmpzXCIpO1xuXG5jb25zdCBleGhpYml0b3JfdGVtcGxhdGVfbXdjcyA9IChkYXRhSW4pID0+IHtcbiAgY29uc29sZS5sb2coXCJtd2NzIGRhdGFcIiwgZGF0YUluKTtcbiAgdmFyIGRhdGEgPSBkYXRhSW4uZGF0YTtcblxuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZXhoaWJpdG9yc19ob2xkZXJcIik7XG5cbiAgY29uc3QgZXhfcmVzdWx0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGV4X3Jlc3VsdHMuY2xhc3NMaXN0LmFkZChcImV4aGliaXRvcnNfcmVzdWx0c1wiKTtcbiAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHJlc3RiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBzaWRlYmFyLmNsYXNzTGlzdC5hZGQoXCJleF9zaWRlYmFyXCIpO1xuICByZXN0YmFyLmNsYXNzTGlzdC5hZGQoXCJleF9yZXN0YmFyXCIpO1xuICAvL3NpZGViYXIuaW5uZXJIVE1MID1cIkhFUkUgV0lMTCBCRSBGSUxURVJTXCI7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc2lkZWJhcik7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzdGJhcik7XG5cblxuICBjb25zdCBmaWx0ZXJib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmaWx0ZXJib3guY2xhc3NMaXN0LmFkZChcImZpbHRlcl9ib3hcIik7XG5cbiAgc2lkZWJhci5hcHBlbmRDaGlsZChzZWFyY2hGaWx0ZXJFeGhpYml0b3JzKCkpO1xuICBzaWRlYmFyLmFwcGVuZENoaWxkKGV4aGliaXRvckNhdGVnb3JpZXNGaWx0ZXIoZGF0YUluLmNhdHMpKTtcbiAgLy9maWx0ZXJib3guYXBwZW5kQ2hpbGQoc2VhcmNoRmlsdGVySXRlbXMoKSk7XG4gIGZpbHRlcmJveC5hcHBlbmRDaGlsZChsZXR0ZXJGaWx0ZXJJdGVtcygpKTtcbiAgcmVzdGJhci5hcHBlbmRDaGlsZChmaWx0ZXJib3gpO1xuICBcbiAgcmVzdGJhci5hcHBlbmRDaGlsZChleF9yZXN1bHRzKTtcblxuICB2YXIgY3VycmVudExldHRlciA9IFwiKlwiO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICB2YXIgZmlyc3RMZXR0ZXIgPSBcIlwiO1xuICAgIGZpcnN0TGV0dGVyID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJDb21wYW55TmFtZVwiXVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgIC5zbGljZSgwLCAxKTtcbiAgICBpZiAoaXNOYU4oZmlyc3RMZXR0ZXIpID09PSBmYWxzZSkgZmlyc3RMZXR0ZXIgPSBcIiNcIjtcbiAgICBpZiAoL1thLXpBLVowLTldLy50ZXN0KGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIqXCI7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZyhcImZsOlwiLCBmaXJzdExldHRlcik7XG4gICAgaWYgKGZpcnN0TGV0dGVyICE9PSBjdXJyZW50TGV0dGVyKSB7XG4gICAgICBjdXJyZW50TGV0dGVyID0gZmlyc3RMZXR0ZXI7XG4gICAgfVxuXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIGEuY2xhc3NMaXN0LmFkZChcImxldHRlcl9cIiArIGN1cnJlbnRMZXR0ZXIpO1xuICAgIGEuY2xhc3NMaXN0LmFkZChcIml0ZW1fbGlzdFwiKTsvL2xldHRlciBmaWx0ZXJcbiAgICBhLmNsYXNzTGlzdC5hZGQoXCJpdGVtX3NpbmdsZVwiKTsvL2xldHRlciBmaWx0ZXJcbiAgICBmb3IodmFyIGNpIGluIGRhdGFbaV0uY2F0cyl7XG4gICAgICBjb25zb2xlLmxvZyhjaSk7XG4gICAgICBmb3IodmFyIGNpcyBpbiBkYXRhW2ldLmNhdHNbY2ldKXtcbiAgICAgICAgY29uc29sZS5sb2coY2lzKTtcblx0YS5jbGFzc0xpc3QuYWRkKGNpcy5zcGxpdCgnICcpLmpvaW4oJy0nKSApOy8vbGV0dGVyIGZpbHRlclxuICAgICAgYS5jbGFzc0xpc3QuYWRkKGRhdGFbaV0uY2F0c1tjaV1bY2lzXVtcInNsdWdcIl0pO1xuICAgICAgfVxuICAgIH1cbiAgICBhLmhyZWYgPSBmcm9udF9jb3JlX3Zhci5zaXRlX3VybCtcIi9leGhpYml0b3IvXCIrZGF0YVtpXVtcInBvc3RfbmFtZVwiXTtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoNFwiKTtcbiAgICBjb25zdCBzdGFuZHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBjb250ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBjb25zdCBpbWdfZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpbWdfZGl2LmNsYXNzTGlzdC5hZGQoXCJleF9sb2dvXCIpO1xuICAgIGltZ19kaXYuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICBzdGFuZHMuY2xhc3NMaXN0LmFkZChcInN0YW5kc1wiKTtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKFwiZXhoaWJpdG9yX3NpbmdsZVwiKTtcbiAgICBuYW1lLmlubmVySFRNTCA9IGRhdGFbaV0ucG9zdF90aXRsZTtcbiAgICBjb250LmlubmVySFRNTCA9IGRhdGFbaV0ucG9zdF9jb250ZW50IC8qK0pTT04uc3RyaW5naWZ5KGRhdGEpKi87XG4gICAgaWYoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJMb2dvX1VSTFwiXSlcbiAgICAgIGltZy5zcmMgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcIkxvZ29fVVJMXCJdO1xuICAgIGVsc2VcbiAgICAgIGltZy5zcmM9IGZyb250X2NvcmVfdmFyLnBsdWdpbl91cmwrXCJpbWcvUGxhY2Vob2xkZXIucG5nXCI7XG4gICAgdmFyIG1ldGEgPSBnZXRNZXRhZGF0YShkYXRhW2ldW1wibWV0YWZpZWxkc1wiXSk7XG5cbiAgICBlbC5hcHBlbmRDaGlsZChpbWdfZGl2KTtcbiAgICBlbC5hcHBlbmRDaGlsZChuYW1lKTtcbiAgICBcbiAgICBjb25zdCBrZXlzX3N0YW5kID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJTdGFuZERldGFpbHNcIl1bXCJTdGFuZERldGFpbFwiXTtcbiAgICBsZXQgc3RhbmRDb3VudCA9IE9iamVjdC5rZXlzKGtleXNfc3RhbmQpLmxlbmd0aDtcbiAgICBzdGFuZHMuaW5uZXJIVE1MID0gc3RhbmRDb3VudCtcIiBcIit0cmFuc2xhdGlvbnMoXCJTdGFuZHNcIik7XG4gICAgaWYoa2V5c19zdGFuZFtcIkhpZGRlblwiXSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIHN0YW5kQ291bnQgPSAxO1xuICAgICAgc3RhbmRzLmlubmVySFRNTCA9IHN0YW5kQ291bnQrXCIgXCIrdHJhbnNsYXRpb25zKFwiU3RhbmRcIik7XG4gICAgfVxuICAgIC8vXCJQcm9tb3RlZEV4aGliaXRvcnNMZXZlbFwiXG4gICAgZWwuYXBwZW5kQ2hpbGQoc3RhbmRzKTtcbiAgICAvL2VsLmFwcGVuZENoaWxkKGNvbnQpO1xuICAgIC8vZWwuYXBwZW5kQ2hpbGQobWV0YSk7XG4gICAgYS5hcHBlbmRDaGlsZChlbCk7XG4gICAgZXhfcmVzdWx0cy5hcHBlbmRDaGlsZChhKTtcbiAgfSAvL2VuZCBmb3JcbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBleGhpYml0b3JfdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5jb25zdCBnZXRNZXRhZGF0YSA9IChkYXRhKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZWwuaW5uZXJIVE1MID0gaSArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleGhpYml0b3JfdGVtcGxhdGVfbXdjcztcbiIsIi8qXG4gKiBzZXNzaW9uX3RlbXBsYXRlX2NvcmUuanNcbiAqXG4gKi9cblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IGdldFNpbmdsZVNlc3Npb24gPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9nZXRTaW5nbGVTZXNzaW9uLmpzXCIpO1xuY29uc3QgZ2V0U2Vzc0RhdGVzID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvZ2V0U2Vzc0RhdGVzLmpzXCIpO1xuY29uc3QgZ2V0TWVkaWFkYXRhID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvZ2V0TWVkaWFkYXRhLmpzXCIpO1xuY29uc3Qgc2VhcmNoRmlsdGVyID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvc2VhcmNoRmlsdGVyU2Vzc2lvbnMuanNcIik7XG5jb25zdCBjYXRlZ29yaWVzRmlsdGVyID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvY2F0ZWdvcmllc0ZpbHRlci5qc1wiKTtcbmNvbnN0IGNvdW50ZXJDaGVjayA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2NvdW50ZXJDaGVjay5qc1wiKTtcbi8vIGNvbnN0IGdldFJlbGF0aW9ucyA9IHJlcXVpcmUoJy4vc3BlYWtlcl90ZW1wbGF0ZV9leHBhbmQuanMnKTtcbndpbmRvdy5hY3RpdmVfZGF5ID0gZmFsc2U7XG52YXIgZGF5cyA9IFtdO1xud2luZG93LmxpbmtzX2xpdmUgPSBmYWxzZTtcblxuY29uc3Qgc2Vzc2lvbl90ZW1wbGF0ZV9jb3JlID0gKGRhdGFJbikgPT4ge1xuICBpZiAoZGF0YUluLmxpbmtzKSB7XG4gICAgaWYgKCF3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSBmYWxzZTtcbiAgfVxuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAvL2NvbnN0IHZpZGVvX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAvL3ZpZGVvX2VsZW1lbnQuaWQgPSBcInBsYXlfdmlkZW9fY29udGFpbmVyXCI7XG4gIC8vZWxlbWVudC5hcHBlbmRDaGlsZCh2aWRlb19lbGVtZW50KTtcblxuICBpZiAoZGF0YUluLmZpbHRlcnMpIHtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNhdGVnb3JpZXNGaWx0ZXIoZGF0YUluLmNhdHMpKTtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKHNlYXJjaEZpbHRlcigpKTtcbiAgfVxuICBjb25zdCBzZXNzRGF0ZXMgPSBnZXRTZXNzRGF0ZXMoZGF0YUluLmNhdHNbY29uc3RhbnRzLmRheV0sIGFjdGl2ZV9kYXkpO1xuICBpZiAoZGF0YUluLnVwY29tbWluZ19vbmx5ICE9PSBcInRydWVcIikge1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc2Vzc0RhdGVzKTtcbiAgfVxuICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKGEsYiwpO1xuICAgIHZhciBkYXkgPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBkYXkgPSBhLmNhdHNbY29uc3RhbnRzLmRheV1bMF1bXCJtZXRhZmllbGRzXCJdW1wiZGF5X2Z1bGxcIl0gKyBcIiBcIjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKGEsYixlKTtcbiAgICB9XG4gICAgZGF5ID0gXCJcIjtcbiAgICB2YXIgYWEgPSBkYXkgKyBcIlwiICsgYS5tZXRhZmllbGRzW2NvbnN0YW50cy50aW1lX3N0YXJ0XTtcbiAgICB0cnkge1xuICAgICAgZGF5ID0gYi5jYXRzW2NvbnN0YW50cy5kYXldWzBdW1wibWV0YWZpZWxkc1wiXVtcImRheV9mdWxsXCJdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vY29uc29sZS5sb2coYSxiLGUpO1xuICAgIH1cbiAgICBkYXkgPSBcIlwiO1xuICAgIHZhciBiYiA9IGRheSArIFwiXCIgKyBiLm1ldGFmaWVsZHNbY29uc3RhbnRzLnRpbWVfc3RhcnRdO1xuICAgIC8vaWYgKCFhYSkgYWEgPSBcIjAwOjAwXCI7XG4gICAgLy9pZiAoIWJiKSBiYiA9IFwiMDA6MDBcIjtcbiAgICBjb25zb2xlLmxvZyhhYSwgYmIsIGFhLmxvY2FsZUNvbXBhcmUoYmIpKTtcbiAgICBpZiAoYWEubG9jYWxlQ29tcGFyZSkgcmV0dXJuIGFhLmxvY2FsZUNvbXBhcmUoYmIpO1xuICAgIC8vZWxzZSByZXR1cm4gYWEgPD0gYmI7XG4gIH0pO1xuICBjb25zb2xlLmxvZyhcImRhdGEgaW4gc29ydGVkXCIsIGRhdGFJbiwgZGF0YSk7XG4gIHZhciBjdXJyZW50dGltZSA9IFtdO1xuICB2YXIgc2xvdGNvbnRhaW5lciA9IHt9O1xuICB2YXIgY291bnRfaWZyYW1lX2J1dHRvbiA9IHt9O1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICB2YXIgc2xvdHRpbWUgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtjb25zdGFudHMudGltZV9zdGFydF0/LnNwbGl0KFwiOlwiKVswXTtcbiAgICBpZiAoIXNsb3R0aW1lKSBzbG90dGltZSA9IFwiMDBcIjtcbiAgICAvL2NvbnNvbGUubG9nKGRhdGFbaV0ucG9zdF90aXRsZSxcInNsb3Q9XCIsc2xvdHRpbWUsIGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW2NvbnN0YW50cy50aW1lX3N0YXJ0XSk7XG4gICAgLy9jb25zb2xlLmxvZygnc2xvdCBleGlzdHM/JyxzbG90dGltZSwgc2xvdGNvbnRhaW5lcltzbG90dGltZV0pO1xuICAgIHZhciB0aW1lc2xvdDtcbiAgICB2YXIgdGltZXNlc3Npb25zO1xuICAgIHZhciBzaW5nbGVzZXNzaW9uID0gXCJcIjtcbiAgICBpZiAoY3VycmVudHRpbWUuaW5kZXhPZihzbG90dGltZSkgIT09IC0xKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdzbG90IGV4aXN0cyEhISEnLHNsb3R0aW1lLCBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXSk7XG4gICAgICAvL3RpbWVzZXNzaW9ucyA9IHNsb3Rjb250YWluZXJbc2xvdHRpbWVdOyAvLy5maXJzdENoaWxkO1xuICAgICAgdGltZXNlc3Npb25zID0gc2xvdGNvbnRhaW5lcltzbG90dGltZV0uY2hpbGRyZW5bMV07IC8vLmZpcnN0Q2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJhZGRpbmcgbmV3IHNsb3RcIixzbG90dGltZSk7XG4gICAgICBjdXJyZW50dGltZS5wdXNoKHNsb3R0aW1lKTtcbiAgICAgIHRpbWVzbG90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRpbWVzbG90LmlubmVySFRNTCA9XG4gICAgICAgIFwiPGRpdiBjbGFzcz0nc2xvdGNvbnRhaW5lcic+XCIgKyBzbG90dGltZSArIFwiOjAwIDwvZGl2PlwiO1xuICAgICAgdGltZXNsb3QuY2xhc3NMaXN0LmFkZChcInRpbWVzbG90XCIpO1xuICAgICAgdGltZXNsb3QuY2xhc3NMaXN0LmFkZChcInRpbWVzbG90X1wiICsgc2xvdHRpbWUpO1xuICAgICAgc2xvdGNvbnRhaW5lcltzbG90dGltZV0gPSB0aW1lc2xvdDtcbiAgICAgIHRpbWVzZXNzaW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aW1lc2Vzc2lvbnMuY2xhc3NMaXN0LmFkZChcInRpbWVzZXNzaW9uc1wiKTtcbiAgICAgIHNsb3Rjb250YWluZXJbc2xvdHRpbWVdLmFwcGVuZENoaWxkKHRpbWVzZXNzaW9ucyk7XG4gICAgfVxuXG4gICAgLy9jb25zb2xlLmxvZyhkYXRhSW4udXBjb21taW5nX29ubHkpO1xuICAgIGlmIChkYXRhSW4udXBjb21taW5nX29ubHkgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAvL2RhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUgPCBkYXRhW2ldXG4gICAgICBjb25zdCBjaGVjayA9IGNvdW50ZXJDaGVjayhcbiAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgZGF0YUluLmN1cnJlbnRfdGltZXpvbmVfZGF0ZSxcbiAgICAgICAgY291bnRfaWZyYW1lX2J1dHRvblxuICAgICAgKTtcbiAgICAgIGlmIChjaGVjayAhPT0gZmFsc2UgJiYgY2hlY2sgIT09IFwiXCIpIHtcbiAgICAgICAgc2luZ2xlc2Vzc2lvbiA9IGdldFNpbmdsZVNlc3Npb24oXG4gICAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgICBhY3RpdmVfZGF5LFxuICAgICAgICAgIGRhdGFJbi5jb25maWcudHlwZXMuc2Vzc2lvbixcbiAgICAgICAgICBsaW5rc19saXZlLFxuICAgICAgICAgIGRhdGFJbi50aW1lem9uZSxcbiAgICAgICAgICBkYXRhSW4uY3VycmVudF90aW1lem9uZV9kYXRlLFxuICAgICAgICAgIGRhdGFJbi5sb2NhdGlvbl90b19zdHJlYW1fbGluayxcbiAgICAgICAgICBjb3VudF9pZnJhbWVfYnV0dG9uLFxuICAgICAgICAgIGRhdGFJbi52aWRlb19hYm92ZV9hZ2VuZGEsXG4gICAgICAgICAgZGF0YUluLnZpZGVvX3N0cmVhbV9jb3VudGVyLFxuXHQgIGRhdGFJbi5jYXRfY29sb3JfdG9fYmcsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHNpbmdsZXNlc3Npb25bMF0pO1xuICAgICAgICB0aW1lc2Vzc2lvbnMuYXBwZW5kQ2hpbGQoc2luZ2xlc2Vzc2lvblswXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhjaGVjayAsIHNpbmdsZXNlc3Npb25bMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaW5nbGVzZXNzaW9uID0gZ2V0U2luZ2xlU2Vzc2lvbihcbiAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgYWN0aXZlX2RheSxcbiAgICAgICAgZGF0YUluLmNvbmZpZy50eXBlcy5zZXNzaW9uLFxuICAgICAgICBsaW5rc19saXZlLFxuICAgICAgICBkYXRhSW4udGltZXpvbmUsXG4gICAgICAgIGRhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUsXG4gICAgICAgIGRhdGFJbi5sb2NhdGlvbl90b19zdHJlYW1fbGluayxcbiAgICAgICAgY291bnRfaWZyYW1lX2J1dHRvbixcbiAgICAgICAgZGF0YUluLnZpZGVvX2Fib3ZlX2FnZW5kYSxcbiAgICAgICAgZGF0YUluLnZpZGVvX3N0cmVhbV9jb3VudGVyLFxuXHRkYXRhSW4uY2F0X2NvbG9yX3RvX2JnLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRpbWVzZXNzaW9ucy5hcHBlbmRDaGlsZChzaW5nbGVzZXNzaW9uWzBdKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyhcIm5vZGUgc2Vzc2lvblwiLCBzbG90dGltZSwgc2luZ2xlc2Vzc2lvbik7XG4gIH0gLy9lbmQgZm9yXG4gIC8vY29uc29sZS5sb2coc2xvdGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJrZXlzID0gT2JqZWN0LmtleXMoc2xvdGNvbnRhaW5lcik7XG4gIGNvbnRhaW5lcmtleXMuc29ydCgpO1xuICBmb3IgKHZhciBpbmRleCBpbiBjb250YWluZXJrZXlzKSB7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChzbG90Y29udGFpbmVyW2NvbnRhaW5lcmtleXNbaW5kZXhdXSk7XG4gIH1cbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBzZXNzaW9uX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTsgLy9lbmQgc2Vzc2lvbl90ZW1wbGF0ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlc3Npb25fdGVtcGxhdGVfY29yZTtcbiIsIi8qXG4gKiBzZXNzaW9uX3RlbXBsYXRlX2ZvdXJfeWZuLmpzXG4gKlxuICovXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCBnZXRTaW5nbGVTZXNzaW9uID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvZ2V0U2luZ2xlU2Vzc2lvbi5qc1wiKTtcbmNvbnN0IGdldFNlc3NEYXRlcyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2dldFNlc3NEYXRlcy5qc1wiKTtcbmNvbnN0IGdldE1lZGlhZGF0YSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2dldE1lZGlhZGF0YS5qc1wiKTtcbmNvbnN0IHNlYXJjaEZpbHRlciA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL3NlYXJjaEZpbHRlclNlc3Npb25zLmpzXCIpO1xuY29uc3QgY2F0ZWdvcmllc0ZpbHRlciA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2NhdGVnb3JpZXNGaWx0ZXIuanNcIik7XG5jb25zdCBjb3VudGVyQ2hlY2sgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9jb3VudGVyQ2hlY2suanNcIik7XG4vLyBjb25zdCBnZXRSZWxhdGlvbnMgPSByZXF1aXJlKCcuL3NwZWFrZXJfdGVtcGxhdGVfZXhwYW5kLmpzJyk7XG53aW5kb3cuYWN0aXZlX2RheSA9IGZhbHNlO1xudmFyIGRheXMgPSBbXTtcbndpbmRvdy5saW5rc19saXZlID0gZmFsc2U7XG5cbmNvbnN0IHNlc3Npb25fdGVtcGxhdGVfZm91cl95Zm4gPSAoZGF0YUluKSA9PiB7XG4gIGlmIChkYXRhSW4ubGlua3MpIHtcbiAgICBpZiAoIXdpbmRvdy5saW5rc19saXZlKSB3aW5kb3cubGlua3NfbGl2ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHdpbmRvdy5saW5rc19saXZlKSB3aW5kb3cubGlua3NfbGl2ZSA9IGZhbHNlO1xuICB9XG4gIHZhciBkYXRhID0gZGF0YUluLmRhdGE7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIC8vY29uc3QgdmlkZW9fZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIC8vdmlkZW9fZWxlbWVudC5pZCA9IFwicGxheV92aWRlb19jb250YWluZXJcIjtcbiAgLy9lbGVtZW50LmFwcGVuZENoaWxkKHZpZGVvX2VsZW1lbnQpO1xuXG4gIGlmIChkYXRhSW4uZmlsdGVycykge1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2F0ZWdvcmllc0ZpbHRlcihkYXRhSW4uY2F0cykpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VhcmNoRmlsdGVyKCkpO1xuICB9XG4gIGNvbnN0IHNlc3NEYXRlcyA9IGdldFNlc3NEYXRlcyhkYXRhSW4uY2F0c1tjb25zdGFudHMuZGF5XSwgYWN0aXZlX2RheSk7XG4gIGlmIChkYXRhSW4udXBjb21taW5nX29ubHkgIT09IFwidHJ1ZVwiKSB7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChzZXNzRGF0ZXMpO1xuICB9XG4gIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIC8vY29uc29sZS5sb2coYSxiLCk7XG4gICAgdmFyIGRheSA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGRheSA9IGEuY2F0c1tjb25zdGFudHMuZGF5XVswXVtcIm1ldGFmaWVsZHNcIl1bXCJkYXlfZnVsbFwiXSArIFwiIFwiO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vY29uc29sZS5sb2coYSxiLGUpO1xuICAgIH1cbiAgICBkYXkgPSBcIlwiO1xuICAgIHZhciBhYSA9IGRheSArIFwiXCIgKyBhLm1ldGFmaWVsZHNbY29uc3RhbnRzLnRpbWVfc3RhcnRdO1xuICAgIHRyeSB7XG4gICAgICBkYXkgPSBiLmNhdHNbY29uc3RhbnRzLmRheV1bMF1bXCJtZXRhZmllbGRzXCJdW1wiZGF5X2Z1bGxcIl07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy9jb25zb2xlLmxvZyhhLGIsZSk7XG4gICAgfVxuICAgIGRheSA9IFwiXCI7XG4gICAgdmFyIGJiID0gZGF5ICsgXCJcIiArIGIubWV0YWZpZWxkc1tjb25zdGFudHMudGltZV9zdGFydF07XG4gICAgLy9pZiAoIWFhKSBhYSA9IFwiMDA6MDBcIjtcbiAgICAvL2lmICghYmIpIGJiID0gXCIwMDowMFwiO1xuICAgIGNvbnNvbGUubG9nKGFhLCBiYiwgYWEubG9jYWxlQ29tcGFyZShiYikpO1xuICAgIGlmIChhYS5sb2NhbGVDb21wYXJlKSByZXR1cm4gYWEubG9jYWxlQ29tcGFyZShiYik7XG4gICAgLy9lbHNlIHJldHVybiBhYSA8PSBiYjtcbiAgfSk7XG4gIGNvbnNvbGUubG9nKFwiZGF0YSBpbiBzb3J0ZWRcIiwgZGF0YUluLCBkYXRhKTtcbiAgdmFyIGN1cnJlbnR0aW1lID0gW107XG4gIHZhciBzbG90Y29udGFpbmVyID0ge307XG4gIHZhciBjb3VudF9pZnJhbWVfYnV0dG9uID0ge307XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIHZhciBzbG90dGltZSA9IGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW2NvbnN0YW50cy50aW1lX3N0YXJ0XT8uc3BsaXQoXCI6XCIpWzBdO1xuICAgIGlmICghc2xvdHRpbWUpIHNsb3R0aW1lID0gXCIwMFwiO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXS5wb3N0X3RpdGxlLFwic2xvdD1cIixzbG90dGltZSwgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bY29uc3RhbnRzLnRpbWVfc3RhcnRdKTtcbiAgICAvL2NvbnNvbGUubG9nKCdzbG90IGV4aXN0cz8nLHNsb3R0aW1lLCBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXSk7XG4gICAgdmFyIHRpbWVzbG90O1xuICAgIHZhciB0aW1lc2Vzc2lvbnM7XG4gICAgdmFyIHNpbmdsZXNlc3Npb24gPSBcIlwiO1xuICAgIGlmIChjdXJyZW50dGltZS5pbmRleE9mKHNsb3R0aW1lKSAhPT0gLTEpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ3Nsb3QgZXhpc3RzISEhIScsc2xvdHRpbWUsIHNsb3Rjb250YWluZXJbc2xvdHRpbWVdKTtcbiAgICAgIC8vdGltZXNlc3Npb25zID0gc2xvdGNvbnRhaW5lcltzbG90dGltZV07IC8vLmZpcnN0Q2hpbGQ7XG4gICAgICB0aW1lc2Vzc2lvbnMgPSBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXS5jaGlsZHJlblsxXTsgLy8uZmlyc3RDaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmxvZyhcImFkZGluZyBuZXcgc2xvdFwiLHNsb3R0aW1lKTtcbiAgICAgIGN1cnJlbnR0aW1lLnB1c2goc2xvdHRpbWUpO1xuICAgICAgdGltZXNsb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGltZXNsb3QuaW5uZXJIVE1MID1cbiAgICAgICAgXCI8ZGl2IGNsYXNzPSdzbG90Y29udGFpbmVyJz5cIiArIHNsb3R0aW1lICsgXCI6MDAgPC9kaXY+XCI7XG4gICAgICB0aW1lc2xvdC5jbGFzc0xpc3QuYWRkKFwidGltZXNsb3RcIik7XG4gICAgICB0aW1lc2xvdC5jbGFzc0xpc3QuYWRkKFwidGltZXNsb3RfXCIgKyBzbG90dGltZSk7XG4gICAgICBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXSA9IHRpbWVzbG90O1xuICAgICAgdGltZXNlc3Npb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRpbWVzZXNzaW9ucy5jbGFzc0xpc3QuYWRkKFwidGltZXNlc3Npb25zXCIpO1xuICAgICAgc2xvdGNvbnRhaW5lcltzbG90dGltZV0uYXBwZW5kQ2hpbGQodGltZXNlc3Npb25zKTtcbiAgICB9XG5cbiAgICAvL2NvbnNvbGUubG9nKGRhdGFJbi51cGNvbW1pbmdfb25seSk7XG4gICAgaWYgKGRhdGFJbi51cGNvbW1pbmdfb25seSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIC8vZGF0YUluLmN1cnJlbnRfdGltZXpvbmVfZGF0ZSA8IGRhdGFbaV1cbiAgICAgIGNvbnN0IGNoZWNrID0gY291bnRlckNoZWNrKFxuICAgICAgICBkYXRhW2ldLFxuICAgICAgICBkYXRhSW4uY3VycmVudF90aW1lem9uZV9kYXRlLFxuICAgICAgICBjb3VudF9pZnJhbWVfYnV0dG9uXG4gICAgICApO1xuICAgICAgaWYgKGNoZWNrICE9PSBmYWxzZSAmJiBjaGVjayAhPT0gXCJcIikge1xuICAgICAgICBzaW5nbGVzZXNzaW9uID0gZ2V0U2luZ2xlU2Vzc2lvbihcbiAgICAgICAgICBkYXRhW2ldLFxuICAgICAgICAgIGFjdGl2ZV9kYXksXG4gICAgICAgICAgZGF0YUluLmNvbmZpZy50eXBlcy5zZXNzaW9uLFxuICAgICAgICAgIGxpbmtzX2xpdmUsXG4gICAgICAgICAgZGF0YUluLnRpbWV6b25lLFxuICAgICAgICAgIGRhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUsXG4gICAgICAgICAgZGF0YUluLmxvY2F0aW9uX3RvX3N0cmVhbV9saW5rLFxuICAgICAgICAgIGNvdW50X2lmcmFtZV9idXR0b24sXG4gICAgICAgICAgZGF0YUluLnZpZGVvX2Fib3ZlX2FnZW5kYSxcbiAgICAgICAgICBkYXRhSW4udmlkZW9fc3RyZWFtX2NvdW50ZXIsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHNpbmdsZXNlc3Npb25bMF0pO1xuICAgICAgICB0aW1lc2Vzc2lvbnMuYXBwZW5kQ2hpbGQoc2luZ2xlc2Vzc2lvblswXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhjaGVjayAsIHNpbmdsZXNlc3Npb25bMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaW5nbGVzZXNzaW9uID0gZ2V0U2luZ2xlU2Vzc2lvbihcbiAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgYWN0aXZlX2RheSxcbiAgICAgICAgZGF0YUluLmNvbmZpZy50eXBlcy5zZXNzaW9uLFxuICAgICAgICBsaW5rc19saXZlLFxuICAgICAgICBkYXRhSW4udGltZXpvbmUsXG4gICAgICAgIGRhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUsXG4gICAgICAgIGRhdGFJbi5sb2NhdGlvbl90b19zdHJlYW1fbGluayxcbiAgICAgICAgY291bnRfaWZyYW1lX2J1dHRvbixcbiAgICAgICAgZGF0YUluLnZpZGVvX2Fib3ZlX2FnZW5kYSxcbiAgICAgICAgZGF0YUluLnZpZGVvX3N0cmVhbV9jb3VudGVyLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRpbWVzZXNzaW9ucy5hcHBlbmRDaGlsZChzaW5nbGVzZXNzaW9uWzBdKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyhcIm5vZGUgc2Vzc2lvblwiLCBzbG90dGltZSwgc2luZ2xlc2Vzc2lvbik7XG4gIH0gLy9lbmQgZm9yXG4gIC8vY29uc29sZS5sb2coc2xvdGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJrZXlzID0gT2JqZWN0LmtleXMoc2xvdGNvbnRhaW5lcik7XG4gIGNvbnRhaW5lcmtleXMuc29ydCgpO1xuICBmb3IgKHZhciBpbmRleCBpbiBjb250YWluZXJrZXlzKSB7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChzbG90Y29udGFpbmVyW2NvbnRhaW5lcmtleXNbaW5kZXhdXSk7XG4gIH1cbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBzZXNzaW9uX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTsgLy9lbmQgc2Vzc2lvbl90ZW1wbGF0ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlc3Npb25fdGVtcGxhdGVfZm91cl95Zm47XG4iLCIvKlxuICogc2Vzc2lvbl90ZW1wbGF0ZV9td2NzLmpzXG4gKlxuICovXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCBnZXRTaW5nbGVTZXNzaW9uID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvZ2V0U2luZ2xlU2Vzc2lvbi5qc1wiKTtcbmNvbnN0IGdldFNlc3NEYXRlcyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2dldFNlc3NEYXRlcy5qc1wiKTtcbmNvbnN0IGdldE1lZGlhZGF0YSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2dldE1lZGlhZGF0YS5qc1wiKTtcbmNvbnN0IHNlYXJjaEZpbHRlciA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL3NlYXJjaEZpbHRlclNlc3Npb25zLmpzXCIpO1xuY29uc3QgY2F0ZWdvcmllc0ZpbHRlciA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL3Nlc3Npb25DYXRlZ29yaWVzRmlsdGVyTVdDUy5qc1wiKTtcbmNvbnN0IGNvdW50ZXJDaGVjayA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2NvdW50ZXJDaGVjay5qc1wiKTtcbi8vIGNvbnN0IGdldFJlbGF0aW9ucyA9IHJlcXVpcmUoJy4vc3BlYWtlcl90ZW1wbGF0ZV9leHBhbmQuanMnKTtcbndpbmRvdy5hY3RpdmVfZGF5ID0gZmFsc2U7XG52YXIgZGF5cyA9IFtdO1xud2luZG93LmxpbmtzX2xpdmUgPSBmYWxzZTtcblxuY29uc3Qgc2Vzc2lvbl90ZW1wbGF0ZV9td2NzID0gKGRhdGFJbikgPT4ge1xuICBpZiAoZGF0YUluLmxpbmtzKSB7XG4gICAgaWYgKCF3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSBmYWxzZTtcbiAgfVxuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAvL2NvbnN0IHZpZGVvX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAvL3ZpZGVvX2VsZW1lbnQuaWQgPSBcInBsYXlfdmlkZW9fY29udGFpbmVyXCI7XG4gIC8vZWxlbWVudC5hcHBlbmRDaGlsZCh2aWRlb19lbGVtZW50KTtcbiAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHJlc3RiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBzaWRlYmFyLmNsYXNzTGlzdC5hZGQoXCJleF9zaWRlYmFyXCIpO1xuICByZXN0YmFyLmNsYXNzTGlzdC5hZGQoXCJleF9yZXN0YmFyXCIpO1xuICAvL3NpZGViYXIuaW5uZXJIVE1MID1cIkhFUkUgV0lMTCBCRSBGSUxURVJTXCI7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc2lkZWJhcik7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzdGJhcik7XG5cblxuICBjb25zdCBmaWx0ZXJib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmaWx0ZXJib3guY2xhc3NMaXN0LmFkZChcImZpbHRlcl9ib3hcIik7XG5cblxuICAvL2lmIChkYXRhSW4uZmlsdGVycykge1xuICAgIHNpZGViYXIuYXBwZW5kQ2hpbGQoc2VhcmNoRmlsdGVyKCkpO1xuICAgIHNpZGViYXIuYXBwZW5kQ2hpbGQoY2F0ZWdvcmllc0ZpbHRlcihkYXRhSW4uY2F0cykpO1xuICAvL31cbiAgY29uc3Qgc2Vzc0RhdGVzID0gZ2V0U2Vzc0RhdGVzKGRhdGFJbi5jYXRzW2NvbnN0YW50cy5kYXldLCBhY3RpdmVfZGF5KTtcbiAgaWYgKGRhdGFJbi51cGNvbW1pbmdfb25seSAhPT0gXCJ0cnVlXCIpIHtcbiAgICByZXN0YmFyLmFwcGVuZENoaWxkKHNlc3NEYXRlcyk7XG4gIH1cbiAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZyhhLGIsKTtcbiAgICB2YXIgZGF5ID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgZGF5ID0gYS5jYXRzW2NvbnN0YW50cy5kYXldWzBdW1wibWV0YWZpZWxkc1wiXVtcImRheV9mdWxsXCJdICsgXCIgXCI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy9jb25zb2xlLmxvZyhhLGIsZSk7XG4gICAgfVxuICAgIGRheSA9IFwiXCI7XG4gICAgdmFyIGFhID0gZGF5ICsgXCJcIiArIGEubWV0YWZpZWxkc1tjb25zdGFudHMudGltZV9zdGFydF07XG4gICAgdHJ5IHtcbiAgICAgIGRheSA9IGIuY2F0c1tjb25zdGFudHMuZGF5XVswXVtcIm1ldGFmaWVsZHNcIl1bXCJkYXlfZnVsbFwiXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKGEsYixlKTtcbiAgICB9XG4gICAgZGF5ID0gXCJcIjtcbiAgICB2YXIgYmIgPSBkYXkgKyBcIlwiICsgYi5tZXRhZmllbGRzW2NvbnN0YW50cy50aW1lX3N0YXJ0XTtcbiAgICAvL2lmICghYWEpIGFhID0gXCIwMDowMFwiO1xuICAgIC8vaWYgKCFiYikgYmIgPSBcIjAwOjAwXCI7XG4gICAgY29uc29sZS5sb2coYWEsIGJiLCBhYS5sb2NhbGVDb21wYXJlKGJiKSk7XG4gICAgaWYgKGFhLmxvY2FsZUNvbXBhcmUpIHJldHVybiBhYS5sb2NhbGVDb21wYXJlKGJiKTtcbiAgICAvL2Vsc2UgcmV0dXJuIGFhIDw9IGJiO1xuICB9KTtcbiAgY29uc29sZS5sb2coXCJkYXRhIGluIHNvcnRlZFwiLCBkYXRhSW4sIGRhdGEpO1xuICB2YXIgY3VycmVudHRpbWUgPSBbXTtcbiAgdmFyIHNsb3Rjb250YWluZXIgPSB7fTtcbiAgdmFyIGNvdW50X2lmcmFtZV9idXR0b24gPSB7fTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgdmFyIHNsb3R0aW1lID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bY29uc3RhbnRzLnRpbWVfc3RhcnRdPy5zcGxpdChcIjpcIilbMF07XG4gICAgaWYgKCFzbG90dGltZSkgc2xvdHRpbWUgPSBcIjAwXCI7XG4gICAgLy9jb25zb2xlLmxvZyhkYXRhW2ldLnBvc3RfdGl0bGUsXCJzbG90PVwiLHNsb3R0aW1lLCBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtjb25zdGFudHMudGltZV9zdGFydF0pO1xuICAgIC8vY29uc29sZS5sb2coJ3Nsb3QgZXhpc3RzPycsc2xvdHRpbWUsIHNsb3Rjb250YWluZXJbc2xvdHRpbWVdKTtcbiAgICB2YXIgdGltZXNsb3Q7XG4gICAgdmFyIHRpbWVzZXNzaW9ucztcbiAgICB2YXIgc2luZ2xlc2Vzc2lvbiA9IFwiXCI7XG4gICAgaWYgKGN1cnJlbnR0aW1lLmluZGV4T2Yoc2xvdHRpbWUpICE9PSAtMSkge1xuICAgICAgLy9jb25zb2xlLmxvZygnc2xvdCBleGlzdHMhISEhJyxzbG90dGltZSwgc2xvdGNvbnRhaW5lcltzbG90dGltZV0pO1xuICAgICAgdGltZXNlc3Npb25zID0gc2xvdGNvbnRhaW5lcltzbG90dGltZV0uY2hpbGRyZW5bMV07IC8vLmZpcnN0Q2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJhZGRpbmcgbmV3IHNsb3RcIixzbG90dGltZSk7XG4gICAgICBjdXJyZW50dGltZS5wdXNoKHNsb3R0aW1lKTtcbiAgICAgIHRpbWVzbG90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRpbWVzbG90LmlubmVySFRNTCA9XG4gICAgICAgIFwiPGRpdiBjbGFzcz0nc2xvdGNvbnRhaW5lcic+XCIgKyBzbG90dGltZSArIFwiOjAwIDwvZGl2PlwiO1xuICAgICAgdGltZXNsb3QuY2xhc3NMaXN0LmFkZChcInRpbWVzbG90XCIpO1xuICAgICAgdGltZXNsb3QuY2xhc3NMaXN0LmFkZChcInRpbWVzbG90X1wiICsgc2xvdHRpbWUpO1xuICAgICAgc2xvdGNvbnRhaW5lcltzbG90dGltZV0gPSB0aW1lc2xvdDtcbiAgICAgIHRpbWVzZXNzaW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aW1lc2Vzc2lvbnMuY2xhc3NMaXN0LmFkZChcInRpbWVzZXNzaW9uc1wiKTtcbiAgICAgIHNsb3Rjb250YWluZXJbc2xvdHRpbWVdLmFwcGVuZENoaWxkKHRpbWVzZXNzaW9ucyk7XG4gICAgfVxuXG4gICAgLy9jb25zb2xlLmxvZyhkYXRhSW4udXBjb21taW5nX29ubHkpO1xuICAgIGlmIChkYXRhSW4udXBjb21taW5nX29ubHkgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAvL2RhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUgPCBkYXRhW2ldXG4gICAgICBjb25zdCBjaGVjayA9IGNvdW50ZXJDaGVjayhcbiAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgZGF0YUluLmN1cnJlbnRfdGltZXpvbmVfZGF0ZSxcbiAgICAgICAgY291bnRfaWZyYW1lX2J1dHRvblxuICAgICAgKTtcbiAgICAgIGlmIChjaGVjayAhPT0gZmFsc2UgJiYgY2hlY2sgIT09IFwiXCIpIHtcbiAgICAgICAgc2luZ2xlc2Vzc2lvbiA9IGdldFNpbmdsZVNlc3Npb24oXG4gICAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgICBhY3RpdmVfZGF5LFxuICAgICAgICAgIGRhdGFJbi5jb25maWcudHlwZXMuc2Vzc2lvbixcbiAgICAgICAgICBsaW5rc19saXZlLFxuICAgICAgICAgIGRhdGFJbi50aW1lem9uZSxcbiAgICAgICAgICBkYXRhSW4uY3VycmVudF90aW1lem9uZV9kYXRlLFxuICAgICAgICAgIGRhdGFJbi5sb2NhdGlvbl90b19zdHJlYW1fbGluayxcbiAgICAgICAgICBjb3VudF9pZnJhbWVfYnV0dG9uLFxuICAgICAgICAgIGRhdGFJbi52aWRlb19hYm92ZV9hZ2VuZGEsXG4gICAgICAgICAgZGF0YUluLnZpZGVvX3N0cmVhbV9jb3VudGVyLFxuXHQgIGRhdGFJbi5jYXRfY29sb3JfdG9fYmcsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHNpbmdsZXNlc3Npb25bMF0pO1xuICAgICAgICB0aW1lc2Vzc2lvbnMuYXBwZW5kQ2hpbGQoc2luZ2xlc2Vzc2lvblswXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhjaGVjayAsIHNpbmdsZXNlc3Npb25bMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaW5nbGVzZXNzaW9uID0gZ2V0U2luZ2xlU2Vzc2lvbihcbiAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgYWN0aXZlX2RheSxcbiAgICAgICAgZGF0YUluLmNvbmZpZy50eXBlcy5zZXNzaW9uLFxuICAgICAgICBsaW5rc19saXZlLFxuICAgICAgICBkYXRhSW4udGltZXpvbmUsXG4gICAgICAgIGRhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUsXG4gICAgICAgIGRhdGFJbi5sb2NhdGlvbl90b19zdHJlYW1fbGluayxcbiAgICAgICAgY291bnRfaWZyYW1lX2J1dHRvbixcbiAgICAgICAgZGF0YUluLnZpZGVvX2Fib3ZlX2FnZW5kYSxcbiAgICAgICAgZGF0YUluLnZpZGVvX3N0cmVhbV9jb3VudGVyLFxuXHRkYXRhSW4uY2F0X2NvbG9yX3RvX2JnLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRpbWVzZXNzaW9ucy5hcHBlbmRDaGlsZChzaW5nbGVzZXNzaW9uWzBdKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyhcIm5vZGUgc2Vzc2lvblwiLCBzbG90dGltZSwgc2luZ2xlc2Vzc2lvbik7XG4gIH0gLy9lbmQgZm9yXG4gIC8vY29uc29sZS5sb2coc2xvdGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJrZXlzID0gT2JqZWN0LmtleXMoc2xvdGNvbnRhaW5lcik7XG4gIGNvbnRhaW5lcmtleXMuc29ydCgpO1xuICBmb3IgKHZhciBpbmRleCBpbiBjb250YWluZXJrZXlzKSB7XG4gICAgcmVzdGJhci5hcHBlbmRDaGlsZChzbG90Y29udGFpbmVyW2NvbnRhaW5lcmtleXNbaW5kZXhdXSk7XG4gIH1cbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBzZXNzaW9uX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTsgLy9lbmQgc2Vzc2lvbl90ZW1wbGF0ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlc3Npb25fdGVtcGxhdGVfbXdjcztcbiIsIi8qXG4gKiBzZXNzaW9uX3RlbXBsYXRlX213bC5qc1xuICpcbiAqL1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgZ2V0U2luZ2xlU2Vzc2lvbiA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL2dldFNpbmdsZVNlc3Npb24uanNcIik7XG5jb25zdCBnZXRTZXNzRGF0ZXMgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9nZXRTZXNzRGF0ZXMuanNcIik7XG5jb25zdCBnZXRNZWRpYWRhdGEgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9nZXRNZWRpYWRhdGEuanNcIik7XG5jb25zdCBzZWFyY2hGaWx0ZXIgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9zZWFyY2hGaWx0ZXJTZXNzaW9ucy5qc1wiKTtcbmNvbnN0IGNhdGVnb3JpZXNGaWx0ZXIgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9jYXRlZ29yaWVzRmlsdGVyLmpzXCIpO1xuY29uc3QgY291bnRlckNoZWNrID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvY291bnRlckNoZWNrLmpzXCIpO1xuLy8gY29uc3QgZ2V0UmVsYXRpb25zID0gcmVxdWlyZSgnLi9zcGVha2VyX3RlbXBsYXRlX2V4cGFuZC5qcycpO1xud2luZG93LmFjdGl2ZV9kYXkgPSBmYWxzZTtcbnZhciBkYXlzID0gW107XG53aW5kb3cubGlua3NfbGl2ZSA9IGZhbHNlO1xuXG5jb25zdCBzZXNzaW9uX3RlbXBsYXRlX213bCA9IChkYXRhSW4pID0+IHtcbiAgaWYgKGRhdGFJbi5saW5rcykge1xuICAgIGlmICghd2luZG93LmxpbmtzX2xpdmUpIHdpbmRvdy5saW5rc19saXZlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAod2luZG93LmxpbmtzX2xpdmUpIHdpbmRvdy5saW5rc19saXZlID0gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGEgPSBkYXRhSW4uZGF0YTtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNlc3Npb25Ib2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBzZXNzaW9uSG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJzZXNzaW9uSG9sZGVyXCIpO1xuXG4gIC8vY29uc3QgdmlkZW9fZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIC8vdmlkZW9fZWxlbWVudC5pZCA9IFwicGxheV92aWRlb19jb250YWluZXJcIjtcbiAgLy9lbGVtZW50LmFwcGVuZENoaWxkKHZpZGVvX2VsZW1lbnQpO1xuXG4gIGlmIChkYXRhSW4uZmlsdGVycykge1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2F0ZWdvcmllc0ZpbHRlcihkYXRhSW4uY2F0cykpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VhcmNoRmlsdGVyKCkpO1xuICB9XG4gIGNvbnN0IHNlc3NEYXRlcyA9IGdldFNlc3NEYXRlcyhkYXRhSW4uY2F0c1tjb25zdGFudHMuZGF5XSwgYWN0aXZlX2RheSk7XG4gIGlmIChkYXRhSW4udXBjb21taW5nX29ubHkgIT09IFwidHJ1ZVwiKSB7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChzZXNzRGF0ZXMpO1xuICB9XG4gIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIC8vY29uc29sZS5sb2coYSxiLCk7XG4gICAgdmFyIGRheSA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGRheSA9IGEuY2F0c1tjb25zdGFudHMuZGF5XVswXVtcIm1ldGFmaWVsZHNcIl1bXCJkYXlfZnVsbFwiXSArIFwiIFwiO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vY29uc29sZS5sb2coYSxiLGUpO1xuICAgIH1cbiAgICBkYXkgPSBcIlwiO1xuICAgIHZhciBhYSA9IGRheSArIFwiXCIgKyBhLm1ldGFmaWVsZHNbY29uc3RhbnRzLnRpbWVfc3RhcnRdO1xuICAgIHRyeSB7XG4gICAgICBkYXkgPSBiLmNhdHNbY29uc3RhbnRzLmRheV1bMF1bXCJtZXRhZmllbGRzXCJdW1wiZGF5X2Z1bGxcIl07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy9jb25zb2xlLmxvZyhhLGIsZSk7XG4gICAgfVxuICAgIGRheSA9IFwiXCI7XG4gICAgdmFyIGJiID0gZGF5ICsgXCJcIiArIGIubWV0YWZpZWxkc1tjb25zdGFudHMudGltZV9zdGFydF07XG4gICAgLy9pZiAoIWFhKSBhYSA9IFwiMDA6MDBcIjtcbiAgICAvL2lmICghYmIpIGJiID0gXCIwMDowMFwiO1xuICAgIGNvbnNvbGUubG9nKGFhLCBiYiwgYWEubG9jYWxlQ29tcGFyZShiYikpO1xuICAgIGlmIChhYS5sb2NhbGVDb21wYXJlKSByZXR1cm4gYWEubG9jYWxlQ29tcGFyZShiYik7XG4gICAgLy9lbHNlIHJldHVybiBhYSA8PSBiYjtcbiAgfSk7XG4gIGNvbnNvbGUubG9nKFwiZGF0YSBpbiBzb3J0ZWRcIiwgZGF0YUluLCBkYXRhKTtcbiAgdmFyIGN1cnJlbnR0aW1lID0gW107XG4gIHZhciBzbG90Y29udGFpbmVyID0ge307XG4gIHZhciBjb3VudF9pZnJhbWVfYnV0dG9uID0ge307XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIHZhciBzbG90dGltZSA9IGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW2NvbnN0YW50cy50aW1lX3N0YXJ0XT8uc3BsaXQoXCI6XCIpWzBdO1xuICAgIGlmICghc2xvdHRpbWUpIHNsb3R0aW1lID0gXCIwMFwiO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXS5wb3N0X3RpdGxlLFwic2xvdD1cIixzbG90dGltZSwgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bY29uc3RhbnRzLnRpbWVfc3RhcnRdKTtcbiAgICAvL2NvbnNvbGUubG9nKCdzbG90IGV4aXN0cz8nLHNsb3R0aW1lLCBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXSk7XG4gICAgdmFyIHRpbWVzbG90O1xuICAgIHZhciB0aW1lc2Vzc2lvbnM7XG4gICAgdmFyIHNpbmdsZXNlc3Npb24gPSBcIlwiO1xuICAgIGlmIChjdXJyZW50dGltZS5pbmRleE9mKHNsb3R0aW1lKSAhPT0gLTEpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ3Nsb3QgZXhpc3RzISEhIScsc2xvdHRpbWUsIHNsb3Rjb250YWluZXJbc2xvdHRpbWVdKTtcbiAgICAgIC8vdGltZXNlc3Npb25zID0gc2xvdGNvbnRhaW5lcltzbG90dGltZV07IC8vLmZpcnN0Q2hpbGQ7XG4gICAgICB0aW1lc2Vzc2lvbnMgPSBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXS5jaGlsZHJlblsxXTsgLy8uZmlyc3RDaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmxvZyhcImFkZGluZyBuZXcgc2xvdFwiLHNsb3R0aW1lKTtcbiAgICAgIGN1cnJlbnR0aW1lLnB1c2goc2xvdHRpbWUpO1xuICAgICAgdGltZXNsb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGltZXNsb3QuaW5uZXJIVE1MID1cbiAgICAgICAgXCI8ZGl2IGNsYXNzPSdzbG90Y29udGFpbmVyJz5cIiArIHNsb3R0aW1lICsgXCI6MDAgPC9kaXY+XCI7XG4gICAgICB0aW1lc2xvdC5jbGFzc0xpc3QuYWRkKFwidGltZXNsb3RcIik7XG4gICAgICB0aW1lc2xvdC5jbGFzc0xpc3QuYWRkKFwidGltZXNsb3RfXCIgKyBzbG90dGltZSk7XG4gICAgICBzbG90Y29udGFpbmVyW3Nsb3R0aW1lXSA9IHRpbWVzbG90O1xuICAgICAgdGltZXNlc3Npb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRpbWVzZXNzaW9ucy5jbGFzc0xpc3QuYWRkKFwidGltZXNlc3Npb25zXCIpO1xuICAgICAgc2xvdGNvbnRhaW5lcltzbG90dGltZV0uYXBwZW5kQ2hpbGQodGltZXNlc3Npb25zKTtcbiAgICB9XG5cbiAgICAvL2NvbnNvbGUubG9nKGRhdGFJbi51cGNvbW1pbmdfb25seSk7XG4gICAgaWYgKGRhdGFJbi51cGNvbW1pbmdfb25seSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIC8vZGF0YUluLmN1cnJlbnRfdGltZXpvbmVfZGF0ZSA8IGRhdGFbaV1cbiAgICAgIGNvbnN0IGNoZWNrID0gY291bnRlckNoZWNrKFxuICAgICAgICBkYXRhW2ldLFxuICAgICAgICBkYXRhSW4uY3VycmVudF90aW1lem9uZV9kYXRlLFxuICAgICAgICBjb3VudF9pZnJhbWVfYnV0dG9uXG4gICAgICApO1xuICAgICAgaWYgKGNoZWNrICE9PSBmYWxzZSAmJiBjaGVjayAhPT0gXCJcIikge1xuICAgICAgICBzaW5nbGVzZXNzaW9uID0gZ2V0U2luZ2xlU2Vzc2lvbihcbiAgICAgICAgICBkYXRhW2ldLFxuICAgICAgICAgIGFjdGl2ZV9kYXksXG4gICAgICAgICAgZGF0YUluLmNvbmZpZy50eXBlcy5zZXNzaW9uLFxuICAgICAgICAgIGxpbmtzX2xpdmUsXG4gICAgICAgICAgZGF0YUluLnRpbWV6b25lLFxuICAgICAgICAgIGRhdGFJbi5jdXJyZW50X3RpbWV6b25lX2RhdGUsXG4gICAgICAgICAgZGF0YUluLmxvY2F0aW9uX3RvX3N0cmVhbV9saW5rLFxuICAgICAgICAgIGNvdW50X2lmcmFtZV9idXR0b24sXG4gICAgICAgICAgZGF0YUluLnZpZGVvX2Fib3ZlX2FnZW5kYSxcbiAgICAgICAgICBkYXRhSW4udmlkZW9fc3RyZWFtX2NvdW50ZXIsXG5cdCAgZGF0YUluLmNhdF9jb2xvcl90b19iZyxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIC8vY29uc29sZS5sb2coc2luZ2xlc2Vzc2lvblswXSk7XG4gICAgICAgIHRpbWVzZXNzaW9ucy5hcHBlbmRDaGlsZChzaW5nbGVzZXNzaW9uWzBdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGNoZWNrICwgc2luZ2xlc2Vzc2lvblswXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpbmdsZXNlc3Npb24gPSBnZXRTaW5nbGVTZXNzaW9uKFxuICAgICAgICBkYXRhW2ldLFxuICAgICAgICBhY3RpdmVfZGF5LFxuICAgICAgICBkYXRhSW4uY29uZmlnLnR5cGVzLnNlc3Npb24sXG4gICAgICAgIGxpbmtzX2xpdmUsXG4gICAgICAgIGRhdGFJbi50aW1lem9uZSxcbiAgICAgICAgZGF0YUluLmN1cnJlbnRfdGltZXpvbmVfZGF0ZSxcbiAgICAgICAgZGF0YUluLmxvY2F0aW9uX3RvX3N0cmVhbV9saW5rLFxuICAgICAgICBjb3VudF9pZnJhbWVfYnV0dG9uLFxuICAgICAgICBkYXRhSW4udmlkZW9fYWJvdmVfYWdlbmRhLFxuICAgICAgICBkYXRhSW4udmlkZW9fc3RyZWFtX2NvdW50ZXIsXG5cdGRhdGFJbi5jYXRfY29sb3JfdG9fYmcsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgdGltZXNlc3Npb25zLmFwcGVuZENoaWxkKHNpbmdsZXNlc3Npb25bMF0pO1xuICAgIH1cbiAgICAvL2NvbnNvbGUubG9nKFwibm9kZSBzZXNzaW9uXCIsIHNsb3R0aW1lLCBzaW5nbGVzZXNzaW9uKTtcbiAgfSAvL2VuZCBmb3JcbiAgLy9jb25zb2xlLmxvZyhzbG90Y29udGFpbmVyKTtcbiAgdmFyIGNvbnRhaW5lcmtleXMgPSBPYmplY3Qua2V5cyhzbG90Y29udGFpbmVyKTtcbiAgY29udGFpbmVya2V5cy5zb3J0KCk7XG4gIGZvciAodmFyIGluZGV4IGluIGNvbnRhaW5lcmtleXMpIHtcbiAgICBzZXNzaW9uSG9sZGVyLmFwcGVuZENoaWxkKHNsb3Rjb250YWluZXJbY29udGFpbmVya2V5c1tpbmRleF1dKTtcbiAgfVxuICBlbGVtZW50LmFwcGVuZENoaWxkKHNlc3Npb25Ib2xkZXIpO1xuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHNlc3Npb25fdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59OyAvL2VuZCBzZXNzaW9uX3RlbXBsYXRlXG5cbm1vZHVsZS5leHBvcnRzID0gc2Vzc2lvbl90ZW1wbGF0ZV9td2w7XG4iLCJjb25zdCBzcGVha2VyX3RlbXBsYXRlID0gKGRhdGFJbikgPT4ge1xuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICB2YXIgcGVyX2xpbmUgPSA1O1xuICBpZiAod2luZG93LmlubmVyV2lkdGggPCA3MDApIHtcbiAgICBwZXJfbGluZSA9IDI7XG4gIH1cbiAgdmFyIGNvdW50ZXIgPSAwO1xuICAvL2NvbnNvbGUubG9nKGRhdGEpO1xuICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdhJyxhLCdiJyxiLCBhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpO1xuICAgIGlmIChhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEucG9zdF90aXRsZSA+IGIucG9zdF90aXRsZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICAgIC8vYS5wb3N0X3RpdGxlXG4gICAgLy88XG4gICAgLy9iLnBvc3RfdGl0bGVcbiAgfSk7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19saXN0XCIpO1xuXG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSAnPGg0PkZ1bGwgU3BlYWtlciBMaW5lLXVwPC9oND4nO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoNlwiKTtcbiAgICBjb25zdCBjb21wYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3Qgam9iVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBmaWd1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmlndXJlXCIpO1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgY29uc3QgZXhwYW5kX2hvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICBuYW1lLmlubmVySFRNTCA9IGRhdGFbaV0ucG9zdF90aXRsZTtcbiAgICBuYW1lLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX25hbWVcIik7XG4gICAgY29tcGFueS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdO1xuICAgIGNvbXBhbnkuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfY29tcGFueVwiKTtcbiAgICBqb2JUaXRsZS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImpvYlRpdGxlXCJdO1xuICAgIGpvYlRpdGxlLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3RpdGxlXCIpO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXVsnbWV0YWZpZWxkcyddWydqb2JfdGl0bGUnXSlcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXSkge1xuICAgICAgaW1nLnNyYyA9XG4gICAgICAgIFwiaHR0cHM6Ly9hcHAubW9iaWxlMzYwc2VyaWVzLmNvbS9NMzYwL1wiICtcbiAgICAgICAgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1nLnNyYyA9IGZyb250X2NvcmVfdmFyLnBsdWdpbl91cmwgKyBcImltZy9zcGVha2VyLXRodW1ibmFpbC5wbmdcIjtcbiAgICB9XG4gICAgZWwuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuXG4gICAgaWYgKGRhdGFbaV1bXCJ0aHVtYm5haWxcIl0pIHtcbiAgICAgIGltZy5zcmMgPSBkYXRhW2ldW1widGh1bWJuYWlsXCJdO1xuICAgIH1cbiAgICBmaWd1cmUuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICBlbC5hcHBlbmRDaGlsZChmaWd1cmUpO1xuICAgIGVsLmFwcGVuZENoaWxkKG5hbWUpO1xuICAgIGVsLmFwcGVuZENoaWxkKGNvbXBhbnkpO1xuICAgIGVsLmFwcGVuZENoaWxkKGpvYlRpdGxlKTtcblxuICAgIGNvbnN0IGV4cGFuZF9pID0gTWF0aC5mbG9vcihpIC8gcGVyX2xpbmUpO1xuICAgIGVsLmV4cGFuZF9pID0gZXhwYW5kX2k7XG4gICAgZWwuYWxsX2RhdGEgPSBkYXRhW2ldO1xuXG4gICAgZXhwYW5kX2hvbGRlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdmFyIGFjdGl2ZV9leHBhbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBcImV4cGFuZF9ob2xkZXIgYWN0aXZlXCJcbiAgICAgICk7XG4gICAgICBpZiAoYWN0aXZlX2V4cGFuZC5sZW5ndGggPiAwKSBhY3RpdmVfZXhwYW5kWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3RlZF9zcGVha2VyXCIpO1xuICAgICAgZXhwYW5kX2hvbGRlci5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZF9zcGVha2VyXCIpO1xuICAgICAgdmFyIGFjdGl2ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzcGVha2VyX3NpbmdsZSBhY3RpdmVcIik7XG4gICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApIGFjdGl2ZVswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXG4gICAgICB2YXIgYWN0aXZlX2V4cGFuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIFwiZXhwYW5kX2hvbGRlciBhY3RpdmVcIlxuICAgICAgKTtcbiAgICAgIGlmIChhY3RpdmVfZXhwYW5kLmxlbmd0aCA+IDApIGFjdGl2ZV9leHBhbmRbMF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblxuICAgICAgdmFyIGFsbF9ob2xkZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImV4cGFuZF9ob2xkZXJcIik7XG4gICAgICBmb3IgKHZhciBpaCBpbiBhbGxfaG9sZGVycykge1xuICAgICAgICBhbGxfaG9sZGVyc1tpaF0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XG4gICAgICB2YXIgZXhwYW5kX3RvID0gXCJleHBhbmRfXCIgKyBlbC5leHBhbmRfaTtcblxuICAgICAgdmFyIHRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShleHBhbmRfdG8pO1xuICAgICAgdG9bMF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuICAgICAgLy9jb25zb2xlLmxvZyhcImV4cGFuZCB0b1wiLCB0byk7XG4gICAgICAvL3RvWzBdLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGVsLmFsbF9kYXRhKTtcbiAgICAgIHRvWzBdLmlubmVySFRNTCArPVxuICAgICAgICBcIjxoMj5cIiArXG4gICAgICAgIC8qZWwuYWxsX2RhdGEubWV0YWZpZWxkc1sndGl0bGUnXSArKi8gXCIgXCIgK1xuICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wiZmlyc3RuYW1lXCJdICtcbiAgICAgICAgXCIgXCIgK1xuICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wibGFzdG5hbWVcIl0gK1xuICAgICAgICBcIjwvaDI+PGg0PlwiICtcbiAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImNvbXBhbnlOYW1lXCJdICtcbiAgICAgICAgXCI8L2g0PjxoND5cIiArXG4gICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJqb2JUaXRsZVwiXSArXG4gICAgICAgIFwiPC9oND48ZGl2IGNsYXNzPSdzX2Rlc2NyaXB0aW9uJz48cD5cIiArXG4gICAgICAgIGVsLmFsbF9kYXRhLnBvc3RfY29udGVudCArXG4gICAgICAgIFwiPC9wPjwvZGl2PlwiO1xuXG4gICAgICAvL3RvWzBdLmlubmVySFRNTCArPSBcIjxoMj5TcGVha2VyIFNlc3Npb248L2gyPlwiO1xuICAgIH0pO1xuXG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gICAgY291bnRlcisrO1xuICAgIC8vY29uc29sZS5sb2coXCJhbGxcIixpLGNvdW50ZXIsKGRhdGEubGVuZ3RoLTEpLGV4cGFuZF9pKTtcbiAgICBpZiAoY291bnRlciA9PT0gcGVyX2xpbmUgfHwgcGFyc2VJbnQoaSkgPT09IGRhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIklOXCIscGFyc2VJbnQoaSksY291bnRlcixkYXRhLmxlbmd0aCxleHBhbmRfaSk7XG4gICAgICBleHBhbmRfaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJleHBhbmRfXCIgKyBleHBhbmRfaSk7XG4gICAgICBleHBhbmRfaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJleHBhbmRfaG9sZGVyXCIpO1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChleHBhbmRfaG9sZGVyKTtcbiAgICAgIGNvdW50ZXIgPSAwO1xuICAgIH1cbiAgfSAvL2VuZCBmb3JcbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBzcGVha2VyX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcbm1vZHVsZS5leHBvcnRzID0gc3BlYWtlcl90ZW1wbGF0ZTtcbiIsImNvbnN0IHtcbiAgc2VhcmNoRmlsdGVySXRlbXMsXG4gIGxldHRlckZpbHRlckl0ZW1zLFxufSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL3NlYXJjaEZpbHRlckl0ZW1zLmpzXCIpO1xuXG5jb25zdCBzcGVha2VyX3RlbXBsYXRlX2NvcmUgPSAoZGF0YUluKSA9PiB7XG4gIGlmIChkYXRhSW4ubGlua3MpIHtcbiAgICBpZiAoIXdpbmRvdy5saW5rc19saXZlKSB3aW5kb3cubGlua3NfbGl2ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHdpbmRvdy5saW5rc19saXZlKSB3aW5kb3cubGlua3NfbGl2ZSA9IGZhbHNlO1xuICB9XG4gIHZhciBkYXRhID0gZGF0YUluLmRhdGE7XG4gIHZhciBwZXJfbGluZSA9IDU7XG4gIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDcwMCkge1xuICAgIHBlcl9saW5lID0gMjtcbiAgfVxuICB2YXIgY291bnRlciA9IDA7XG4gIC8vY29uc29sZS5sb2coZGF0YSk7XG4gIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2EnLGEsJ2InLGIsIGEucG9zdF90aXRsZSA8IGIucG9zdF90aXRsZSk7XG4gICAgLy9pZihhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpIHsgcmV0dXJuIC0xOyB9XG4gICAgLy9pZihhLnBvc3RfdGl0bGUgPiBiLnBvc3RfdGl0bGUpIHsgcmV0dXJuIDE7IH1cbiAgICBpZiAoYS5tZXRhZmllbGRzLmNvbXBhbnlOYW1lLnRvVXBwZXJDYXNlKCkgPCBiLm1ldGFmaWVsZHMuY29tcGFueU5hbWUudG9VcHBlckNhc2UoKSApIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEubWV0YWZpZWxkcy5jb21wYW55TmFtZS50b1VwcGVyQ2FzZSgpID4gYi5tZXRhZmllbGRzLmNvbXBhbnlOYW1lLnRvVXBwZXJDYXNlKCkgKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICB2YXIgY3VycmVudExldHRlciA9IFwiKlwiO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcGVrZXJzX1wiKTtcbiAgY29uc3QgZmlsdGVyYm94aW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmaWx0ZXJib3hpbm5lci5jbGFzc0xpc3QuYWRkKFwiaW5uZXJfYm94XCIpO1xuICBjb25zdCBmaWx0ZXJib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmaWx0ZXJib3guY2xhc3NMaXN0LmFkZChcImZpbHRlcl9ib3hcIik7XG5cbiAgZmlsdGVyYm94aW5uZXIuYXBwZW5kQ2hpbGQoc2VhcmNoRmlsdGVySXRlbXMoKSk7XG4gIGZpbHRlcmJveGlubmVyLmFwcGVuZENoaWxkKGxldHRlckZpbHRlckl0ZW1zKCkpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGZpbHRlcmJveCk7XG4gIGZpbHRlcmJveC5hcHBlbmRDaGlsZChmaWx0ZXJib3hpbm5lcik7XG5cbiAgdmFyIGVsZW1lbnRfYnlfbGV0dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZWxlbWVudF9ieV9sZXR0ZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPio8L2Rpdj4nO1xuICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcnNfbGlzdFwiKTtcbiAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcIml0ZW1fbGlzdFwiKTsvL2xldHRlciBmaWx0ZXJcbiAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcImxldHRlcl9cIiArIGN1cnJlbnRMZXR0ZXIpO1xuXG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSAnPGg0PkZ1bGwgU3BlYWtlciBMaW5lLXVwPC9oND4nO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoNlwiKTtcbiAgICBjb25zdCBjb21wYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3Qgam9iVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIGNvbnN0IGZpZ3VyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWd1cmVcIik7XG4gICAgY29uc3QgZXhwYW5kX2hvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdmFyIGZpcnN0TGV0dGVyID0gXCJcIjtcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXSkge1xuICAgICAgZmlyc3RMZXR0ZXIgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgLnNsaWNlKDAsIDEpO1xuICAgICAgaWYgKGlzTmFOKGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIjXCI7XG4gICAgICBpZiAoL1thLXpBLVowLTldLy50ZXN0KGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIqXCI7XG5cbiAgICAgIGlmIChmaXJzdExldHRlciAhPT0gY3VycmVudExldHRlcikge1xuICAgICAgICBjdXJyZW50TGV0dGVyID0gZmlyc3RMZXR0ZXI7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudF9ieV9sZXR0ZXIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19saXN0XCIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwiaXRlbV9saXN0XCIpOy8vbGV0dGVyIGZpbHRlclxuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwibGV0dGVyX1wiICsgY3VycmVudExldHRlcik7XG4gICAgICAgIGNvbnN0IGxldHRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIC8vY29uc3QgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdocicpO1xuICAgICAgICBsZXR0ZXIuaW5uZXJIVE1MID0gY3VycmVudExldHRlcjtcbiAgICAgICAgbGV0dGVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIC8vZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoYnIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChsZXR0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBuYW1lLmlubmVySFRNTCA9IGRhdGFbaV0ucG9zdF90aXRsZTtcbiAgICBuYW1lLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX25hbWVcIik7XG4gICAgY29tcGFueS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdO1xuICAgIGNvbXBhbnkuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfY29tcGFueVwiKTtcbiAgICBqb2JUaXRsZS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImpvYlRpdGxlXCJdO1xuICAgIGpvYlRpdGxlLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3RpdGxlXCIpO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXVsnbWV0YWZpZWxkcyddWydqb2JfdGl0bGUnXSlcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXSkge1xuICAgICAgaW1nLnNyYyA9XG4gICAgICAgIFwiaHR0cHM6Ly9hcHAubW9iaWxlMzYwc2VyaWVzLmNvbS9NMzYwL1wiICtcbiAgICAgICAgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1nLnNyYyA9IGZyb250X2NvcmVfdmFyLnBsdWdpbl91cmwgKyBcImltZy9zcGVha2VyLXRodW1ibmFpbC5wbmdcIjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVtpXVtcInRodW1ibmFpbFwiXSkge1xuICAgICAgaW1nLnNyYyA9IGRhdGFbaV1bXCJ0aHVtYm5haWxcIl07XG4gICAgfVxuXG4gICAgZmlndXJlLmFwcGVuZENoaWxkKGltZyk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoZmlndXJlKTtcbiAgICBlbC5hcHBlbmRDaGlsZChuYW1lKTtcbiAgICBlbC5hcHBlbmRDaGlsZChqb2JUaXRsZSk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoY29tcGFueSk7XG5cbiAgICBjb25zdCBleHBhbmRfaSA9IE1hdGguZmxvb3IoaSAvIHBlcl9saW5lKTtcbiAgICBlbC5leHBhbmRfaSA9IGV4cGFuZF9pO1xuICAgIGVsLmFsbF9kYXRhID0gZGF0YVtpXTtcblxuICAgIGV4cGFuZF9ob2xkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHZhciBhY3RpdmVfZXhwYW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgXCJleHBhbmRfaG9sZGVyIGFjdGl2ZVwiXG4gICAgICApO1xuICAgICAgaWYgKGFjdGl2ZV9leHBhbmQubGVuZ3RoID4gMCkgYWN0aXZlX2V4cGFuZFswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdGVkX3NwZWFrZXJcIik7XG4gICAgICBleHBhbmRfaG9sZGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVmaXggPSBmcm9udF9jb3JlX3Zhci5zaXRlX3VybDtcbiAgICB2YXIgbGFuZyA9IFwiXCI7XG4gICAgaWYgKGZyb250X2NvcmVfdmFyLmN1cnJlbnRfbGFuZyAhPT0gZnJvbnRfY29yZV92YXIuZGVmYXVsdF9sYW5nKSB7XG4gICAgICBsYW5nID0gXCIvXCIgKyBmcm9udF9jb3JlX3Zhci5jdXJyZW50X2xhbmc7XG4gICAgfVxuICAgIHZhciBsaW5rID0gcHJlZml4ICsgbGFuZyArIFwiL3NwZWFrZXIvXCIgKyBkYXRhW2ldLnBvc3RfbmFtZTsgLy9kYXRhWydtZXRhZmllbGRzJ11bJ3VybCddO1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkge1xuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgYS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICBpZiAoISFsaW5rKSB7XG4gICAgICAgIGEuaHJlZiA9IGxpbms7XG4gICAgICAgIC8vYS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgIH1cbiAgICAgIGEuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuICAgICAgYS5jbGFzc0xpc3QuYWRkKFwiaXRlbV9zaW5nbGVcIik7XG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChcIml0ZW1fc2luZ2xlXCIpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkX3NwZWFrZXJcIik7XG4gICAgICAgIHZhciBhY3RpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic3BlYWtlcl9zaW5nbGUgYWN0aXZlXCIpO1xuICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApIGFjdGl2ZVswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIHZhciBhY3RpdmVfZXhwYW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICBcImV4cGFuZF9ob2xkZXIgYWN0aXZlXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFjdGl2ZV9leHBhbmQubGVuZ3RoID4gMClcbiAgICAgICAgICBhY3RpdmVfZXhwYW5kWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgdmFyIGFsbF9ob2xkZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImV4cGFuZF9ob2xkZXJcIik7XG4gICAgICAgIGZvciAodmFyIGloIGluIGFsbF9ob2xkZXJzKSB7XG4gICAgICAgICAgYWxsX2hvbGRlcnNbaWhdLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICAgICAgdmFyIGV4cGFuZF90byA9IFwiZXhwYW5kX1wiICsgZWwuZXhwYW5kX2k7XG5cbiAgICAgICAgdmFyIHRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShleHBhbmRfdG8pO1xuICAgICAgICB0b1swXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJleHBhbmQgdG9cIiwgdG8pO1xuICAgICAgICAvL3RvWzBdLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGVsLmFsbF9kYXRhKTtcbiAgICAgICAgdG9bMF0uaW5uZXJIVE1MICs9XG4gICAgICAgICAgXCI8aDI+XCIgK1xuICAgICAgICAgIC8qZWwuYWxsX2RhdGEubWV0YWZpZWxkc1sndGl0bGUnXSArKi8gXCIgXCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJmaXJzdG5hbWVcIl0gK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wibGFzdG5hbWVcIl0gK1xuICAgICAgICAgIFwiPC9oMj48aDQ+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJjb21wYW55TmFtZVwiXSArXG4gICAgICAgICAgXCI8L2g0PjxoND5cIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImpvYlRpdGxlXCJdICtcbiAgICAgICAgICBcIjwvaDQ+PGRpdiBjbGFzcz0nc19kZXNjcmlwdGlvbic+PHA+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLnBvc3RfY29udGVudCArXG4gICAgICAgICAgXCI8L3A+PC9kaXY+XCI7XG5cbiAgICAgICAgLy90b1swXS5pbm5lckhUTUwgKz0gXCI8aDI+U3BlYWtlciBTZXNzaW9uPC9oMj5cIjtcbiAgICAgIH0pO1xuXG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICAgIGNvdW50ZXIrKztcbiAgICAvL2NvbnNvbGUubG9nKFwiYWxsXCIsaSxjb3VudGVyLChkYXRhLmxlbmd0aC0xKSxleHBhbmRfaSk7XG4gICAgaWYgKGNvdW50ZXIgPT09IHBlcl9saW5lIHx8IHBhcnNlSW50KGkpID09PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJJTlwiLHBhcnNlSW50KGkpLGNvdW50ZXIsZGF0YS5sZW5ndGgsZXhwYW5kX2kpO1xuICAgICAgZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX1wiICsgZXhwYW5kX2kpO1xuICAgICAgZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX2hvbGRlclwiKTtcbiAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmFwcGVuZENoaWxkKGV4cGFuZF9ob2xkZXIpO1xuICAgICAgY291bnRlciA9IDA7XG4gICAgfVxuICB9IC8vZW5kIGZvclxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHNwZWFrZXJfdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50X2J5X2xldHRlcik7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzcGVha2VyX3RlbXBsYXRlX2NvcmU7XG4iLCJjb25zdCBzcGVha2VyX3RlbXBsYXRlX2V4cGFuZCA9IChkYXRhSW4pID0+IHtcbiAgdmFyIGRhdGEgPSBkYXRhSW4uZGF0YTtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJzX2xpc3RcIik7XG4gIGNvbnNvbGUubG9nKFwiIHNwZWFrZXJfdGVtcGxhdGVfZXhwYW5kXCIsZGF0YSk7XG4gIC8vY29uc29sZS5sb2coZGF0YSk7XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImg2XCIpO1xuICAgIGNvbnN0IGNvbXBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBqb2JUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgY29uc3QgY29udExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IGNvbnRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgbmFtZS5pbm5lckhUTUwgPSBkYXRhW2ldLnBvc3RfdGl0bGU7XG4gICAgbmFtZS5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl9uYW1lXCIpO1xuICAgIGNvbXBhbnkuaW5uZXJIVE1MID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXTtcbiAgICBjb21wYW55LmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX2NvbXBhbnlcIik7XG4gICAgam9iVGl0bGUuaW5uZXJIVE1MID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJqb2JUaXRsZVwiXTtcbiAgICBqb2JUaXRsZS5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl90aXRsZVwiKTtcbiAgICAvL2NvbnNvbGUubG9nKGRhdGFbaV1bJ2pvYlRpdGxlJ10pXG4gICAgaWYgKGRhdGFbaV0udGh1bWJuYWlsKSB7XG4gICAgICBpbWcuc3JjID0gZGF0YVtpXS50aHVtYm5haWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltZy5zcmMgPSBmcm9udF9jb3JlX3Zhci5wbHVnaW5fdXJsICsgXCJpbWcvc3BlYWtlci10aHVtYm5haWwucG5nXCI7XG4gICAgfVxuICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3NpbmdsZVwiKTtcbiAgICBjb250TGVmdC5jbGFzc0xpc3QuYWRkKFwiY29udF9sZWZ0XCIpO1xuICAgIGNvbnRSaWdodC5jbGFzc0xpc3QuYWRkKFwiY29udF9yaWdodFwiKTtcblxuICAgIGNvbnRMZWZ0LmFwcGVuZENoaWxkKGltZyk7XG4gICAgY29udFJpZ2h0LmFwcGVuZENoaWxkKG5hbWUpO1xuICAgIGNvbnRSaWdodC5hcHBlbmRDaGlsZChjb21wYW55KTtcbiAgICBjb250UmlnaHQuYXBwZW5kQ2hpbGQoam9iVGl0bGUpO1xuICAgIGVsLmFwcGVuZENoaWxkKGNvbnRMZWZ0KTtcbiAgICBlbC5hcHBlbmRDaGlsZChjb250UmlnaHQpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9IC8vZW5kIGZvclxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHNwZWFrZXJfdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5jb25zdCBnZXRNZXRhZGF0YSA9IChkYXRhKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZWwuaW5uZXJIVE1MID0gaSArIFwiOiBcIiArIGRhdGFbaV07XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBzcGVha2VyX3RlbXBsYXRlX2V4cGFuZDtcbiIsImNvbnN0IHtcbiAgc2VhcmNoRmlsdGVySXRlbXMsXG4gIGxldHRlckZpbHRlckl0ZW1zLFxufSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL3NlYXJjaEZpbHRlckl0ZW1zLmpzXCIpO1xuXG5jb25zdCBzcGVha2VyX3RlbXBsYXRlX2ZvdXJfeWZuID0gKGRhdGFJbikgPT4ge1xuICBpZiAoZGF0YUluLmxpbmtzKSB7XG4gICAgaWYgKCF3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSBmYWxzZTtcbiAgfVxuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICB2YXIgcGVyX2xpbmUgPSA1O1xuICBpZiAod2luZG93LmlubmVyV2lkdGggPCA3MDApIHtcbiAgICBwZXJfbGluZSA9IDI7XG4gIH1cbiAgdmFyIGNvdW50ZXIgPSAwO1xuICAvL2NvbnNvbGUubG9nKGRhdGEpO1xuICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdhJyxhLCdiJyxiLCBhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpO1xuICAgIC8vaWYoYS5wb3N0X3RpdGxlIDwgYi5wb3N0X3RpdGxlKSB7IHJldHVybiAtMTsgfVxuICAgIC8vaWYoYS5wb3N0X3RpdGxlID4gYi5wb3N0X3RpdGxlKSB7IHJldHVybiAxOyB9XG4gICAgaWYgKGEubWV0YWZpZWxkcy5jb21wYW55TmFtZSA8IGIubWV0YWZpZWxkcy5jb21wYW55TmFtZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYS5tZXRhZmllbGRzLmNvbXBhbnlOYW1lID4gYi5tZXRhZmllbGRzLmNvbXBhbnlOYW1lKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICB2YXIgY3VycmVudExldHRlciA9IFwiKlwiO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcGVrZXJzX1wiKTtcbiAgY29uc3QgZmlsdGVyYm94aW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmaWx0ZXJib3hpbm5lci5jbGFzc0xpc3QuYWRkKFwiaW5uZXJfYm94XCIpO1xuICBjb25zdCBmaWx0ZXJib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmaWx0ZXJib3guY2xhc3NMaXN0LmFkZChcImZpbHRlcl9ib3hcIik7XG5cbiAgZmlsdGVyYm94aW5uZXIuYXBwZW5kQ2hpbGQoc2VhcmNoRmlsdGVySXRlbXMoKSk7XG4gIGZpbHRlcmJveGlubmVyLmFwcGVuZENoaWxkKGxldHRlckZpbHRlckl0ZW1zKCkpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGZpbHRlcmJveCk7XG4gIGZpbHRlcmJveC5hcHBlbmRDaGlsZChmaWx0ZXJib3hpbm5lcik7XG5cbiAgdmFyIGVsZW1lbnRfYnlfbGV0dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZWxlbWVudF9ieV9sZXR0ZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPio8L2Rpdj4nO1xuICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcnNfbGlzdFwiKTtcbiAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcIml0ZW1fbGlzdFwiKTsvL2xldHRlciBmaWx0ZXJcbiAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcImxldHRlcl9cIiArIGN1cnJlbnRMZXR0ZXIpO1xuXG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSAnPGg0PkZ1bGwgU3BlYWtlciBMaW5lLXVwPC9oND4nO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoNlwiKTtcbiAgICBjb25zdCBjb21wYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3Qgam9iVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIGNvbnN0IGZpZ3VyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWd1cmVcIik7XG4gICAgY29uc3QgZXhwYW5kX2hvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdmFyIGZpcnN0TGV0dGVyID0gXCJcIjtcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXSkge1xuICAgICAgZmlyc3RMZXR0ZXIgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgLnNsaWNlKDAsIDEpO1xuICAgICAgaWYgKGlzTmFOKGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIjXCI7XG4gICAgICBpZiAoL1thLXpBLVowLTldLy50ZXN0KGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIqXCI7XG5cbiAgICAgIGlmIChmaXJzdExldHRlciAhPT0gY3VycmVudExldHRlcikge1xuICAgICAgICBjdXJyZW50TGV0dGVyID0gZmlyc3RMZXR0ZXI7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudF9ieV9sZXR0ZXIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19saXN0XCIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwiaXRlbV9saXN0XCIpOy8vbGV0dGVyIGZpbHRlclxuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwibGV0dGVyX1wiICsgY3VycmVudExldHRlcik7XG4gICAgICAgIGNvbnN0IGxldHRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIC8vY29uc3QgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdocicpO1xuICAgICAgICBsZXR0ZXIuaW5uZXJIVE1MID0gY3VycmVudExldHRlcjtcbiAgICAgICAgbGV0dGVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIC8vZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoYnIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChsZXR0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBuYW1lLmlubmVySFRNTCA9IGRhdGFbaV0ucG9zdF90aXRsZTtcbiAgICBuYW1lLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX25hbWVcIik7XG4gICAgY29tcGFueS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdO1xuICAgIGNvbXBhbnkuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfY29tcGFueVwiKTtcbiAgICBqb2JUaXRsZS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImpvYlRpdGxlXCJdO1xuICAgIGpvYlRpdGxlLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3RpdGxlXCIpO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXVsnbWV0YWZpZWxkcyddWydqb2JfdGl0bGUnXSlcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXSkge1xuICAgICAgaW1nLnNyYyA9XG4gICAgICAgIFwiaHR0cHM6Ly9hcHAubW9iaWxlMzYwc2VyaWVzLmNvbS9NMzYwL1wiICtcbiAgICAgICAgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1nLnNyYyA9IGZyb250X2NvcmVfdmFyLnBsdWdpbl91cmwgKyBcImltZy9zcGVha2VyLXRodW1ibmFpbC5wbmdcIjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVtpXVtcInRodW1ibmFpbFwiXSkge1xuICAgICAgaW1nLnNyYyA9IGRhdGFbaV1bXCJ0aHVtYm5haWxcIl07XG4gICAgfVxuXG4gICAgZmlndXJlLmFwcGVuZENoaWxkKGltZyk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoZmlndXJlKTtcbiAgICBlbC5hcHBlbmRDaGlsZChuYW1lKTtcbiAgICBlbC5hcHBlbmRDaGlsZChqb2JUaXRsZSk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoY29tcGFueSk7XG5cbiAgICBjb25zdCBleHBhbmRfaSA9IE1hdGguZmxvb3IoaSAvIHBlcl9saW5lKTtcbiAgICBlbC5leHBhbmRfaSA9IGV4cGFuZF9pO1xuICAgIGVsLmFsbF9kYXRhID0gZGF0YVtpXTtcblxuICAgIGV4cGFuZF9ob2xkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHZhciBhY3RpdmVfZXhwYW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgXCJleHBhbmRfaG9sZGVyIGFjdGl2ZVwiXG4gICAgICApO1xuICAgICAgaWYgKGFjdGl2ZV9leHBhbmQubGVuZ3RoID4gMCkgYWN0aXZlX2V4cGFuZFswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdGVkX3NwZWFrZXJcIik7XG4gICAgICBleHBhbmRfaG9sZGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVmaXggPSBmcm9udF9jb3JlX3Zhci5zaXRlX3VybDtcbiAgICB2YXIgbGFuZyA9IFwiXCI7XG4gICAgaWYgKGZyb250X2NvcmVfdmFyLmN1cnJlbnRfbGFuZyAhPT0gZnJvbnRfY29yZV92YXIuZGVmYXVsdF9sYW5nKSB7XG4gICAgICBsYW5nID0gXCIvXCIgKyBmcm9udF9jb3JlX3Zhci5jdXJyZW50X2xhbmc7XG4gICAgfVxuICAgIHZhciBsaW5rID0gcHJlZml4ICsgbGFuZyArIFwiL3NwZWFrZXIvXCIgKyBkYXRhW2ldLnBvc3RfbmFtZTsgLy9kYXRhWydtZXRhZmllbGRzJ11bJ3VybCddO1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkge1xuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgYS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICBpZiAoISFsaW5rKSB7XG4gICAgICAgIGEuaHJlZiA9IGxpbms7XG4gICAgICAgIC8vYS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgIH1cbiAgICAgIGEuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuICAgICAgYS5jbGFzc0xpc3QuYWRkKFwiaXRlbV9zaW5nbGVcIik7XG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChcIml0ZW1fc2luZ2xlXCIpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkX3NwZWFrZXJcIik7XG4gICAgICAgIHZhciBhY3RpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic3BlYWtlcl9zaW5nbGUgYWN0aXZlXCIpO1xuICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApIGFjdGl2ZVswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIHZhciBhY3RpdmVfZXhwYW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICBcImV4cGFuZF9ob2xkZXIgYWN0aXZlXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFjdGl2ZV9leHBhbmQubGVuZ3RoID4gMClcbiAgICAgICAgICBhY3RpdmVfZXhwYW5kWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgdmFyIGFsbF9ob2xkZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImV4cGFuZF9ob2xkZXJcIik7XG4gICAgICAgIGZvciAodmFyIGloIGluIGFsbF9ob2xkZXJzKSB7XG4gICAgICAgICAgYWxsX2hvbGRlcnNbaWhdLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICAgICAgdmFyIGV4cGFuZF90byA9IFwiZXhwYW5kX1wiICsgZWwuZXhwYW5kX2k7XG5cbiAgICAgICAgdmFyIHRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShleHBhbmRfdG8pO1xuICAgICAgICB0b1swXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJleHBhbmQgdG9cIiwgdG8pO1xuICAgICAgICAvL3RvWzBdLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGVsLmFsbF9kYXRhKTtcbiAgICAgICAgdG9bMF0uaW5uZXJIVE1MICs9XG4gICAgICAgICAgXCI8aDI+XCIgK1xuICAgICAgICAgIC8qZWwuYWxsX2RhdGEubWV0YWZpZWxkc1sndGl0bGUnXSArKi8gXCIgXCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJmaXJzdG5hbWVcIl0gK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wibGFzdG5hbWVcIl0gK1xuICAgICAgICAgIFwiPC9oMj48aDQ+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJjb21wYW55TmFtZVwiXSArXG4gICAgICAgICAgXCI8L2g0PjxoND5cIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImpvYlRpdGxlXCJdICtcbiAgICAgICAgICBcIjwvaDQ+PGRpdiBjbGFzcz0nc19kZXNjcmlwdGlvbic+PHA+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLnBvc3RfY29udGVudCArXG4gICAgICAgICAgXCI8L3A+PC9kaXY+XCI7XG5cbiAgICAgICAgLy90b1swXS5pbm5lckhUTUwgKz0gXCI8aDI+U3BlYWtlciBTZXNzaW9uPC9oMj5cIjtcbiAgICAgIH0pO1xuXG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICAgIGNvdW50ZXIrKztcbiAgICAvL2NvbnNvbGUubG9nKFwiYWxsXCIsaSxjb3VudGVyLChkYXRhLmxlbmd0aC0xKSxleHBhbmRfaSk7XG4gICAgaWYgKGNvdW50ZXIgPT09IHBlcl9saW5lIHx8IHBhcnNlSW50KGkpID09PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJJTlwiLHBhcnNlSW50KGkpLGNvdW50ZXIsZGF0YS5sZW5ndGgsZXhwYW5kX2kpO1xuICAgICAgZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX1wiICsgZXhwYW5kX2kpO1xuICAgICAgZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX2hvbGRlclwiKTtcbiAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmFwcGVuZENoaWxkKGV4cGFuZF9ob2xkZXIpO1xuICAgICAgY291bnRlciA9IDA7XG4gICAgfVxuICB9IC8vZW5kIGZvclxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHNwZWFrZXJfdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50X2J5X2xldHRlcik7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzcGVha2VyX3RlbXBsYXRlX2ZvdXJfeWZuO1xuIiwiY29uc3Qge1xuICBzZWFyY2hGaWx0ZXJJdGVtcyxcbiAgbGV0dGVyRmlsdGVySXRlbXMsXG59ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvc2VhcmNoRmlsdGVySXRlbXMuanNcIik7XG5cbmNvbnN0IHNwZWFrZXJfdGVtcGxhdGVfbTM2MCA9IChkYXRhSW4pID0+IHtcbiAgaWYgKGRhdGFJbi5saW5rcykge1xuICAgIGlmICghd2luZG93LmxpbmtzX2xpdmUpIHdpbmRvdy5saW5rc19saXZlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAod2luZG93LmxpbmtzX2xpdmUpIHdpbmRvdy5saW5rc19saXZlID0gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGEgPSBkYXRhSW4uZGF0YTtcbiAgdmFyIHBlcl9saW5lID0gNTtcbiAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzAwKSB7XG4gICAgcGVyX2xpbmUgPSAyO1xuICB9XG4gIHZhciBjb3VudGVyID0gMDtcbiAgLy9jb25zb2xlLmxvZyhkYXRhKTtcbiAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnYScsYSwnYicsYiwgYS5wb3N0X3RpdGxlIDwgYi5wb3N0X3RpdGxlKTtcbiAgICAvL2lmKGEucG9zdF90aXRsZSA8IGIucG9zdF90aXRsZSkgeyByZXR1cm4gLTE7IH1cbiAgICAvL2lmKGEucG9zdF90aXRsZSA+IGIucG9zdF90aXRsZSkgeyByZXR1cm4gMTsgfVxuICAgIGlmIChhLm1ldGFmaWVsZHMuY29tcGFueU5hbWUudG9VcHBlckNhc2UoKSA8IGIubWV0YWZpZWxkcy5jb21wYW55TmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhLm1ldGFmaWVsZHMuY29tcGFueU5hbWUudG9VcHBlckNhc2UoKSA+IGIubWV0YWZpZWxkcy5jb21wYW55TmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICB2YXIgY3VycmVudExldHRlciA9IFwiKlwiO1xuXG4gIFxuXG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19cIik7XG4gIGNvbnN0IGZpbHRlcmJveGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZmlsdGVyYm94aW5uZXIuY2xhc3NMaXN0LmFkZChcImlubmVyX2JveFwiKTtcbiAgY29uc3QgZmlsdGVyYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZmlsdGVyYm94LmNsYXNzTGlzdC5hZGQoXCJmaWx0ZXJfYm94XCIpO1xuXG4gIGZpbHRlcmJveGlubmVyLmFwcGVuZENoaWxkKHNlYXJjaEZpbHRlckl0ZW1zKCkpO1xuICBmaWx0ZXJib3hpbm5lci5hcHBlbmRDaGlsZChsZXR0ZXJGaWx0ZXJJdGVtcygpKTtcbiAgXG4gIGZpbHRlcmJveC5hcHBlbmRDaGlsZChmaWx0ZXJib3hpbm5lcik7XG5cbiAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHdyYXBwZXIuY2xhc3NMaXN0LmFkZChcIndyYXBwZXJcIik7XG5cbiAgd3JhcHBlci5hcHBlbmRDaGlsZChmaWx0ZXJib3gpO1xuICB3cmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICBcblxuICB2YXIgZWxlbWVudF9ieV9sZXR0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAvL2VsZW1lbnRfYnlfbGV0dGVyLmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJTtcIj4qPC9kaXY+JztcbiAgLy9lbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcnNfbGlzdFwiKTtcbiAgLy9lbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwiaXRlbV9saXN0XCIpOy8vbGV0dGVyIGZpbHRlclxuICAvL2VsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJsZXR0ZXJfXCIgKyBjdXJyZW50TGV0dGVyKTtcblxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gJzxoND5GdWxsIFNwZWFrZXIgTGluZS11cDwvaDQ+JztcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDZcIik7XG4gICAgY29uc3QgY29tcGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIGNvbnN0IGpvYlRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBjb25zdCBmaWd1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmlndXJlXCIpO1xuICAgIGNvbnN0IGV4cGFuZF9ob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhciBmaXJzdExldHRlciA9IFwiXCI7XG4gICAgaWYgKGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wiY29tcGFueU5hbWVcIl0pIHtcbiAgICAgIGZpcnN0TGV0dGVyID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIC5zbGljZSgwLCAxKTtcbiAgICAgIGlmIChpc05hTihmaXJzdExldHRlcikgPT09IGZhbHNlKSBmaXJzdExldHRlciA9IFwiI1wiO1xuICAgICAgaWYgKC9bYS16QS1aMC05XS8udGVzdChmaXJzdExldHRlcikgPT09IGZhbHNlKSBmaXJzdExldHRlciA9IFwiKlwiO1xuXG4gICAgICAvL2lmIChmaXJzdExldHRlciAhPT0gY3VycmVudExldHRlcikge1xuICAgICAgICBjdXJyZW50TGV0dGVyID0gZmlyc3RMZXR0ZXI7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudF9ieV9sZXR0ZXIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19saXN0XCIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwiaXRlbV9saXN0XCIpOy8vbGV0dGVyIGZpbHRlclxuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwibGV0dGVyX1wiICsgY3VycmVudExldHRlcik7XG4gICAgICAgIC8vY29uc3QgbGV0dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgLy9jb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgIC8vbGV0dGVyLmlubmVySFRNTCA9IGN1cnJlbnRMZXR0ZXI7XG4gICAgICAgIC8vbGV0dGVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIC8vZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoYnIpO1xuICAgICAgICAvL2VsZW1lbnRfYnlfbGV0dGVyLmFwcGVuZENoaWxkKGxldHRlcik7XG4gICAgICAvL31cbiAgICB9XG4gICAgbmFtZS5pbm5lckhUTUwgPSBkYXRhW2ldLnBvc3RfdGl0bGU7XG4gICAgbmFtZS5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl9uYW1lXCIpO1xuICAgIGNvbXBhbnkuaW5uZXJIVE1MID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXTtcbiAgICBjb21wYW55LmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX2NvbXBhbnlcIik7XG4gICAgam9iVGl0bGUuaW5uZXJIVE1MID0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJqb2JUaXRsZVwiXTtcbiAgICBqb2JUaXRsZS5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl90aXRsZVwiKTtcbiAgICAvL2NvbnNvbGUubG9nKGRhdGFbaV1bJ21ldGFmaWVsZHMnXVsnam9iX3RpdGxlJ10pXG4gICAgaWYgKGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wicGhvdG9cIl0pIHtcbiAgICAgIGltZy5zcmMgPVxuICAgICAgICBcImh0dHBzOi8vYXBwLm1vYmlsZTM2MHNlcmllcy5jb20vTTM2MC9cIiArXG4gICAgICAgIGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wicGhvdG9cIl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGltZy5zcmMgPSBmcm9udF9jb3JlX3Zhci5wbHVnaW5fdXJsICsgXCJpbWcvc3BlYWtlci10aHVtYm5haWwucG5nXCI7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFbaV1bXCJ0aHVtYm5haWxcIl0pIHtcbiAgICAgIGltZy5zcmMgPSBkYXRhW2ldW1widGh1bWJuYWlsXCJdO1xuICAgIH1cblxuICAgIGZpZ3VyZS5hcHBlbmRDaGlsZChpbWcpO1xuICAgIGVsLmFwcGVuZENoaWxkKGZpZ3VyZSk7XG4gICAgZWwuYXBwZW5kQ2hpbGQobmFtZSk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoam9iVGl0bGUpO1xuICAgIGVsLmFwcGVuZENoaWxkKGNvbXBhbnkpO1xuXG4gICAgY29uc3QgZXhwYW5kX2kgPSBNYXRoLmZsb29yKGkgLyBwZXJfbGluZSk7XG4gICAgZWwuZXhwYW5kX2kgPSBleHBhbmRfaTtcbiAgICBlbC5hbGxfZGF0YSA9IGRhdGFbaV07XG5cbiAgICBleHBhbmRfaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICB2YXIgYWN0aXZlX2V4cGFuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIFwiZXhwYW5kX2hvbGRlciBhY3RpdmVcIlxuICAgICAgKTtcbiAgICAgIGlmIChhY3RpdmVfZXhwYW5kLmxlbmd0aCA+IDApIGFjdGl2ZV9leHBhbmRbMF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3RlZF9zcGVha2VyXCIpO1xuICAgICAgZXhwYW5kX2hvbGRlci5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJlZml4ID0gZnJvbnRfY29yZV92YXIuc2l0ZV91cmw7XG4gICAgdmFyIGxhbmcgPSBcIlwiO1xuICAgIGlmIChmcm9udF9jb3JlX3Zhci5jdXJyZW50X2xhbmcgIT09IGZyb250X2NvcmVfdmFyLmRlZmF1bHRfbGFuZykge1xuICAgICAgbGFuZyA9IFwiL1wiICsgZnJvbnRfY29yZV92YXIuY3VycmVudF9sYW5nO1xuICAgIH1cbiAgICB2YXIgbGluayA9IHByZWZpeCArIGxhbmcgKyBcIi9zcGVha2VyL1wiICsgZGF0YVtpXS5wb3N0X25hbWU7IC8vZGF0YVsnbWV0YWZpZWxkcyddWyd1cmwnXTtcbiAgICBpZiAod2luZG93LmxpbmtzX2xpdmUpIHtcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgIGEuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgaWYgKCEhbGluaykge1xuICAgICAgICBhLmhyZWYgPSBsaW5rO1xuICAgICAgICAvL2Euc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICB9XG4gICAgICBhLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3NpbmdsZVwiKTtcbiAgICAgIGEuY2xhc3NMaXN0LmFkZChcIml0ZW1fc2luZ2xlXCIpO1xuICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3NpbmdsZVwiKTtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJpdGVtX3NpbmdsZVwiKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZF9zcGVha2VyXCIpO1xuICAgICAgICB2YXIgYWN0aXZlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNwZWFrZXJfc2luZ2xlIGFjdGl2ZVwiKTtcbiAgICAgICAgaWYgKGFjdGl2ZS5sZW5ndGggPiAwKSBhY3RpdmVbMF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblxuICAgICAgICB2YXIgYWN0aXZlX2V4cGFuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgXCJleHBhbmRfaG9sZGVyIGFjdGl2ZVwiXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhY3RpdmVfZXhwYW5kLmxlbmd0aCA+IDApXG4gICAgICAgICAgYWN0aXZlX2V4cGFuZFswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIHZhciBhbGxfaG9sZGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJleHBhbmRfaG9sZGVyXCIpO1xuICAgICAgICBmb3IgKHZhciBpaCBpbiBhbGxfaG9sZGVycykge1xuICAgICAgICAgIGFsbF9ob2xkZXJzW2loXS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XG4gICAgICAgIHZhciBleHBhbmRfdG8gPSBcImV4cGFuZF9cIiArIGVsLmV4cGFuZF9pO1xuXG4gICAgICAgIHZhciB0byA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZXhwYW5kX3RvKTtcbiAgICAgICAgdG9bMF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiZXhwYW5kIHRvXCIsIHRvKTtcbiAgICAgICAgLy90b1swXS5pbm5lckhUTUwgPSBKU09OLnN0cmluZ2lmeShlbC5hbGxfZGF0YSk7XG4gICAgICAgIHRvWzBdLmlubmVySFRNTCArPVxuICAgICAgICAgIFwiPGgyPlwiICtcbiAgICAgICAgICAvKmVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbJ3RpdGxlJ10gKyovIFwiIFwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wiZmlyc3RuYW1lXCJdICtcbiAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImxhc3RuYW1lXCJdICtcbiAgICAgICAgICBcIjwvaDI+PGg0PlwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wiY29tcGFueU5hbWVcIl0gK1xuICAgICAgICAgIFwiPC9oND48aDQ+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJqb2JUaXRsZVwiXSArXG4gICAgICAgICAgXCI8L2g0PjxkaXYgY2xhc3M9J3NfZGVzY3JpcHRpb24nPjxwPlwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5wb3N0X2NvbnRlbnQgK1xuICAgICAgICAgIFwiPC9wPjwvZGl2PlwiO1xuXG4gICAgICAgIC8vdG9bMF0uaW5uZXJIVE1MICs9IFwiPGgyPlNwZWFrZXIgU2Vzc2lvbjwvaDI+XCI7XG4gICAgICB9KTtcblxuICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cbiAgICBjb3VudGVyKys7XG4gICAgLy9jb25zb2xlLmxvZyhcImFsbFwiLGksY291bnRlciwoZGF0YS5sZW5ndGgtMSksZXhwYW5kX2kpO1xuICAgIGlmIChjb3VudGVyID09PSBwZXJfbGluZSB8fCBwYXJzZUludChpKSA9PT0gZGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiSU5cIixwYXJzZUludChpKSxjb3VudGVyLGRhdGEubGVuZ3RoLGV4cGFuZF9pKTtcbiAgICAgIGV4cGFuZF9ob2xkZXIuY2xhc3NMaXN0LmFkZChcImV4cGFuZF9cIiArIGV4cGFuZF9pKTtcbiAgICAgIGV4cGFuZF9ob2xkZXIuY2xhc3NMaXN0LmFkZChcImV4cGFuZF9ob2xkZXJcIik7XG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChleHBhbmRfaG9sZGVyKTtcbiAgICAgIGNvdW50ZXIgPSAwO1xuICAgIH1cbiAgfSAvL2VuZCBmb3JcbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBzcGVha2VyX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudF9ieV9sZXR0ZXIpO1xuICByZXR1cm4gd3JhcHBlcjtcbn07XG5cbmNvbnN0IGdldE1ldGFkYXRhID0gKGRhdGEpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBlbC5pbm5lckhUTUwgPSBpICsgXCI6IFwiICsgZGF0YVtpXTtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3BlYWtlcl90ZW1wbGF0ZV9tMzYwO1xuIiwiY29uc3Qge1xuICBzZWFyY2hGaWx0ZXJJdGVtcyxcbiAgbGV0dGVyRmlsdGVySXRlbXMsXG59ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvc2VhcmNoRmlsdGVySXRlbXMuanNcIik7XG5cbmNvbnN0IHNwZWFrZXJfdGVtcGxhdGVfbXdjcyA9IChkYXRhSW4pID0+IHtcbiAgLy9jb25zb2xlLmxvZyhcInNwZWFrZXJfdGVtcGxhdGVfbXdjc1wiLCBkYXRhSW4pO1xuICBpZiAoZGF0YUluLmxpbmtzKSB7XG4gICAgaWYgKCF3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkgd2luZG93LmxpbmtzX2xpdmUgPSBmYWxzZTtcbiAgfVxuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICB2YXIgcGVyX2xpbmUgPSA1O1xuICBpZiAod2luZG93LmlubmVyV2lkdGggPCA3MDApIHtcbiAgICBwZXJfbGluZSA9IDI7XG4gIH1cbiAgdmFyIGNvdW50ZXIgPSAwO1xuICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnYScsYSwnYicsYiwgYS5wb3N0X3RpdGxlIDwgYi5wb3N0X3RpdGxlKTtcbiAgICAvL2lmKGEucG9zdF90aXRsZSA8IGIucG9zdF90aXRsZSkgeyByZXR1cm4gLTE7IH1cbiAgICAvL2lmKGEucG9zdF90aXRsZSA+IGIucG9zdF90aXRsZSkgeyByZXR1cm4gMTsgfVxuICAgIGlmIChhLm1ldGFmaWVsZHMub3JkZXJfY29tcGFueU5hbWUgPCBiLm1ldGFmaWVsZHMub3JkZXJfY29tcGFueU5hbWUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEubWV0YWZpZWxkcy5vcmRlcl9jb21wYW55TmFtZSA+IGIubWV0YWZpZWxkcy5vcmRlcl9jb21wYW55TmFtZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChhLm1ldGFmaWVsZHMub3JkZXJfY29tcGFueU5hbWUgPT0gYi5tZXRhZmllbGRzLm9yZGVyX2NvbXBhbnlOYW1lKSB7XG4gICAgICBpZihhLm1ldGFmaWVsZHMubGFzdG5hbWUgPCBiLm1ldGFmaWVsZHMubGFzdG5hbWUpIHsgcmV0dXJuIC0xOyB9XG4gICAgICBpZihhLm1ldGFmaWVsZHMubGFzdG5hbWUgPiBiLm1ldGFmaWVsZHMubGFzdG5hbWUpIHsgcmV0dXJuIDE7IH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICB2YXIgY3VycmVudExldHRlciA9IFwiKlwiO1xuXG4gIFxuXG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19cIik7XG4gIGNvbnN0IGZpbHRlcmJveGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZmlsdGVyYm94aW5uZXIuY2xhc3NMaXN0LmFkZChcImlubmVyX2JveFwiKTtcbiAgY29uc3QgZmlsdGVyYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZmlsdGVyYm94LmNsYXNzTGlzdC5hZGQoXCJmaWx0ZXJfYm94XCIpO1xuXG4gIGZpbHRlcmJveGlubmVyLmFwcGVuZENoaWxkKHNlYXJjaEZpbHRlckl0ZW1zKCkpO1xuICBmaWx0ZXJib3hpbm5lci5hcHBlbmRDaGlsZChsZXR0ZXJGaWx0ZXJJdGVtcygpKTtcbiAgXG4gIGZpbHRlcmJveC5hcHBlbmRDaGlsZChmaWx0ZXJib3hpbm5lcik7XG5cbiAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHdyYXBwZXIuY2xhc3NMaXN0LmFkZChcIndyYXBwZXJcIik7XG5cbiAgd3JhcHBlci5hcHBlbmRDaGlsZChmaWx0ZXJib3gpO1xuICB3cmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICBcblxuICB2YXIgZWxlbWVudF9ieV9sZXR0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAvL2VsZW1lbnRfYnlfbGV0dGVyLmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJTtcIj4qPC9kaXY+JztcbiAgLy9lbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcnNfbGlzdFwiKTtcbiAgLy9lbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwiaXRlbV9saXN0XCIpOy8vbGV0dGVyIGZpbHRlclxuICAvL2VsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJsZXR0ZXJfXCIgKyBjdXJyZW50TGV0dGVyKTtcblxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gJzxoND5GdWxsIFNwZWFrZXIgTGluZS11cDwvaDQ+JztcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDZcIik7XG4gICAgY29uc3QgY29tcGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIGNvbnN0IGpvYlRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBjb25zdCBmaWd1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmlndXJlXCIpO1xuICAgIGNvbnN0IGV4cGFuZF9ob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhciBmaXJzdExldHRlciA9IFwiXCI7XG4gICAgLy9jb25zb2xlLmxvZyhkYXRhW2ldW1wibWV0YWZpZWxkc1wiXSk7XG4gICAgaWYoIWRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wib3JkZXJfY29tcGFueU5hbWVcIl0gJiYgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXSlcbiAgICAgIGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wib3JkZXJfY29tcGFueU5hbWVcIl0gPT0gZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXTtcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJvcmRlcl9jb21wYW55TmFtZVwiXSkge1xuICAgICAgZmlyc3RMZXR0ZXIgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcIm9yZGVyX2NvbXBhbnlOYW1lXCJdXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgLnNsaWNlKDAsIDEpO1xuICAgICAgaWYgKGlzTmFOKGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIjXCI7XG4gICAgICBpZiAoL1thLXpBLVowLTldLy50ZXN0KGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIqXCI7XG4vL2NvbnNvbGUubG9nKGZpcnN0TGV0dGVyLCBkYXRhW2ldKTtcbiAgICAgIC8vaWYgKGZpcnN0TGV0dGVyICE9PSBjdXJyZW50TGV0dGVyKSB7XG4gICAgICAgIGN1cnJlbnRMZXR0ZXIgPSBmaXJzdExldHRlcjtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50X2J5X2xldHRlcik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJzX2xpc3RcIik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJpdGVtX2xpc3RcIik7Ly9sZXR0ZXIgZmlsdGVyXG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJsZXR0ZXJfXCIgKyBjdXJyZW50TGV0dGVyKTtcbiAgICAgICAgLy9jb25zdCBsZXR0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAvL2NvbnN0IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaHInKTtcbiAgICAgICAgLy9sZXR0ZXIuaW5uZXJIVE1MID0gY3VycmVudExldHRlcjtcbiAgICAgICAgLy9sZXR0ZXIuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgICAgLy9lbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChicik7XG4gICAgICAgIC8vZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQobGV0dGVyKTtcbiAgICAgIC8vfVxuICAgIH1cbiAgICBuYW1lLmlubmVySFRNTCA9IGRhdGFbaV0ucG9zdF90aXRsZTtcbiAgICBuYW1lLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX25hbWVcIik7XG4gICAgY29tcGFueS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdO1xuICAgIGNvbXBhbnkuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfY29tcGFueVwiKTtcbiAgICBqb2JUaXRsZS5pbm5lckhUTUwgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImpvYlRpdGxlXCJdO1xuICAgIGpvYlRpdGxlLmNsYXNzTGlzdC5hZGQoXCJzcGVha2VyX3RpdGxlXCIpO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXVsnbWV0YWZpZWxkcyddWydqb2JfdGl0bGUnXSlcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXSkge1xuICAgICAgaW1nLnNyYyA9XG4gICAgICAgIFwiaHR0cHM6Ly9hcHAubW9iaWxlMzYwc2VyaWVzLmNvbS9NMzYwL1wiICtcbiAgICAgICAgZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJwaG90b1wiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1nLnNyYyA9IGZyb250X2NvcmVfdmFyLnBsdWdpbl91cmwgKyBcImltZy9zcGVha2VyLXRodW1ibmFpbC5wbmdcIjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVtpXVtcInRodW1ibmFpbFwiXSkge1xuICAgICAgaW1nLnNyYyA9IGRhdGFbaV1bXCJ0aHVtYm5haWxcIl07XG4gICAgfVxuXG4gICAgZmlndXJlLmFwcGVuZENoaWxkKGltZyk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoZmlndXJlKTtcbiAgICBlbC5hcHBlbmRDaGlsZChuYW1lKTtcbiAgICBlbC5hcHBlbmRDaGlsZChqb2JUaXRsZSk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoY29tcGFueSk7XG5cbiAgICBjb25zdCBleHBhbmRfaSA9IE1hdGguZmxvb3IoaSAvIHBlcl9saW5lKTtcbiAgICBlbC5leHBhbmRfaSA9IGV4cGFuZF9pO1xuICAgIGVsLmFsbF9kYXRhID0gZGF0YVtpXTtcblxuICAgIGV4cGFuZF9ob2xkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHZhciBhY3RpdmVfZXhwYW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgXCJleHBhbmRfaG9sZGVyIGFjdGl2ZVwiXG4gICAgICApO1xuICAgICAgaWYgKGFjdGl2ZV9leHBhbmQubGVuZ3RoID4gMCkgYWN0aXZlX2V4cGFuZFswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdGVkX3NwZWFrZXJcIik7XG4gICAgICBleHBhbmRfaG9sZGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVmaXggPSBmcm9udF9jb3JlX3Zhci5zaXRlX3VybDtcbiAgICB2YXIgbGFuZyA9IFwiXCI7XG4gICAgaWYgKGZyb250X2NvcmVfdmFyLmN1cnJlbnRfbGFuZyAhPT0gZnJvbnRfY29yZV92YXIuZGVmYXVsdF9sYW5nKSB7XG4gICAgICBsYW5nID0gXCIvXCIgKyBmcm9udF9jb3JlX3Zhci5jdXJyZW50X2xhbmc7XG4gICAgfVxuICAgIHZhciBsaW5rID0gcHJlZml4ICsgbGFuZyArIFwiL3NwZWFrZXIvXCIgKyBkYXRhW2ldLnBvc3RfbmFtZTsgLy9kYXRhWydtZXRhZmllbGRzJ11bJ3VybCddO1xuICAgIGlmICh3aW5kb3cubGlua3NfbGl2ZSkge1xuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgYS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICBpZiAoISFsaW5rKSB7XG4gICAgICAgIGEuaHJlZiA9IGxpbms7XG4gICAgICAgIC8vYS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgIH1cbiAgICAgIGEuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuICAgICAgYS5jbGFzc0xpc3QuYWRkKFwiaXRlbV9zaW5nbGVcIik7XG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfc2luZ2xlXCIpO1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChcIml0ZW1fc2luZ2xlXCIpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkX3NwZWFrZXJcIik7XG4gICAgICAgIHZhciBhY3RpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic3BlYWtlcl9zaW5nbGUgYWN0aXZlXCIpO1xuICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApIGFjdGl2ZVswXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIHZhciBhY3RpdmVfZXhwYW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICBcImV4cGFuZF9ob2xkZXIgYWN0aXZlXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFjdGl2ZV9leHBhbmQubGVuZ3RoID4gMClcbiAgICAgICAgICBhY3RpdmVfZXhwYW5kWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgdmFyIGFsbF9ob2xkZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImV4cGFuZF9ob2xkZXJcIik7XG4gICAgICAgIGZvciAodmFyIGloIGluIGFsbF9ob2xkZXJzKSB7XG4gICAgICAgICAgYWxsX2hvbGRlcnNbaWhdLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICAgICAgdmFyIGV4cGFuZF90byA9IFwiZXhwYW5kX1wiICsgZWwuZXhwYW5kX2k7XG5cbiAgICAgICAgdmFyIHRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShleHBhbmRfdG8pO1xuICAgICAgICB0b1swXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJleHBhbmQgdG9cIiwgdG8pO1xuICAgICAgICAvL3RvWzBdLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGVsLmFsbF9kYXRhKTtcbiAgICAgICAgdG9bMF0uaW5uZXJIVE1MICs9XG4gICAgICAgICAgXCI8aDI+XCIgK1xuICAgICAgICAgIC8qZWwuYWxsX2RhdGEubWV0YWZpZWxkc1sndGl0bGUnXSArKi8gXCIgXCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJmaXJzdG5hbWVcIl0gK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wibGFzdG5hbWVcIl0gK1xuICAgICAgICAgIFwiPC9oMj48aDQ+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJjb21wYW55TmFtZVwiXSArXG4gICAgICAgICAgXCI8L2g0PjxoND5cIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImpvYlRpdGxlXCJdICtcbiAgICAgICAgICBcIjwvaDQ+PGRpdiBjbGFzcz0nc19kZXNjcmlwdGlvbic+PHA+XCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLnBvc3RfY29udGVudCArXG4gICAgICAgICAgXCI8L3A+PC9kaXY+XCI7XG5cbiAgICAgICAgLy90b1swXS5pbm5lckhUTUwgKz0gXCI8aDI+U3BlYWtlciBTZXNzaW9uPC9oMj5cIjtcbiAgICAgIH0pO1xuXG4gICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICAgIGNvdW50ZXIrKztcbiAgICAvL2NvbnNvbGUubG9nKFwiYWxsXCIsaSxjb3VudGVyLChkYXRhLmxlbmd0aC0xKSxleHBhbmRfaSk7XG4gICAgaWYgKGNvdW50ZXIgPT09IHBlcl9saW5lIHx8IHBhcnNlSW50KGkpID09PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJJTlwiLHBhcnNlSW50KGkpLGNvdW50ZXIsZGF0YS5sZW5ndGgsZXhwYW5kX2kpO1xuICAgICAgZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX1wiICsgZXhwYW5kX2kpO1xuICAgICAgZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX2hvbGRlclwiKTtcbiAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmFwcGVuZENoaWxkKGV4cGFuZF9ob2xkZXIpO1xuICAgICAgY291bnRlciA9IDA7XG4gICAgfVxuICB9IC8vZW5kIGZvclxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHNwZWFrZXJfdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50X2J5X2xldHRlcik7XG4gIHJldHVybiB3cmFwcGVyO1xufTtcblxuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzcGVha2VyX3RlbXBsYXRlX213Y3M7XG4iLCJjb25zdCB7XG4gIHNlYXJjaEZpbHRlckl0ZW1zLFxuICBsZXR0ZXJGaWx0ZXJJdGVtcyxcbn0gPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9zZWFyY2hGaWx0ZXJJdGVtcy5qc1wiKTtcblxuY29uc3Qgc3BlYWtlcl90ZW1wbGF0ZV9td2wgPSAoZGF0YUluKSA9PiB7XG4gIGlmIChkYXRhSW4ubGlua3MpIHtcbiAgICBpZiAoIXdpbmRvdy5saW5rc19saXZlKSB3aW5kb3cubGlua3NfbGl2ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHdpbmRvdy5saW5rc19saXZlKSB3aW5kb3cubGlua3NfbGl2ZSA9IGZhbHNlO1xuICB9XG4gIHZhciBkYXRhID0gZGF0YUluLmRhdGE7XG4gIHZhciBwZXJfbGluZSA9IDU7XG4gIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDcwMCkge1xuICAgIHBlcl9saW5lID0gMjtcbiAgfVxuICB2YXIgY291bnRlciA9IDA7XG4gIC8vY29uc29sZS5sb2coZGF0YSk7XG4gIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2EnLGEsJ2InLGIsIGEucG9zdF90aXRsZSA8IGIucG9zdF90aXRsZSk7XG4gICAgLy9pZihhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpIHsgcmV0dXJuIC0xOyB9XG4gICAgLy9pZihhLnBvc3RfdGl0bGUgPiBiLnBvc3RfdGl0bGUpIHsgcmV0dXJuIDE7IH1cbiAgICBpZiAoYS5tZXRhZmllbGRzLmNvbXBhbnlOYW1lLnRvVXBwZXJDYXNlKCkgPCBiLm1ldGFmaWVsZHMuY29tcGFueU5hbWUudG9VcHBlckNhc2UoKSApIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEubWV0YWZpZWxkcy5jb21wYW55TmFtZS50b1VwcGVyQ2FzZSgpID4gYi5tZXRhZmllbGRzLmNvbXBhbnlOYW1lLnRvVXBwZXJDYXNlKCkgKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICB2YXIgY3VycmVudExldHRlciA9IFwiKlwiO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19cIik7XG4gIGNvbnN0IGZpbHRlcmJveGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZmlsdGVyYm94aW5uZXIuY2xhc3NMaXN0LmFkZChcImlubmVyX2JveFwiKTtcbiAgY29uc3QgZmlsdGVyYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZmlsdGVyYm94LmNsYXNzTGlzdC5hZGQoXCJmaWx0ZXJfYm94XCIpO1xuXG4gIGZpbHRlcmJveGlubmVyLmFwcGVuZENoaWxkKHNlYXJjaEZpbHRlckl0ZW1zKCkpO1xuICBmaWx0ZXJib3hpbm5lci5hcHBlbmRDaGlsZChsZXR0ZXJGaWx0ZXJJdGVtcygpKTtcbiAgLy9lbGVtZW50LmFwcGVuZENoaWxkKGZpbHRlcmJveCk7XG4gIGZpbHRlcmJveC5hcHBlbmRDaGlsZChmaWx0ZXJib3hpbm5lcik7XG5cbiAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHdyYXBwZXIuY2xhc3NMaXN0LmFkZChcIndyYXBwZXJcIik7XG5cbiAgd3JhcHBlci5hcHBlbmRDaGlsZChmaWx0ZXJib3gpO1xuICB3cmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gIHZhciBlbGVtZW50X2J5X2xldHRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIC8vZWxlbWVudF9ieV9sZXR0ZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPio8L2Rpdj4nO1xuICAvL2VsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJzcGVha2Vyc19saXN0XCIpO1xuICAvL2VsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJpdGVtX2xpc3RcIik7Ly9sZXR0ZXIgZmlsdGVyXG4gIC8vZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcImxldHRlcl9cIiArIGN1cnJlbnRMZXR0ZXIpO1xuXG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSAnPGg0PkZ1bGwgU3BlYWtlciBMaW5lLXVwPC9oND4nO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoNlwiKTtcbiAgICBjb25zdCBjb21wYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgY29uc3Qgam9iVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIGNvbnN0IGZpZ3VyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWd1cmVcIik7XG4gICAgY29uc3QgZXhwYW5kX2hvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdmFyIGZpcnN0TGV0dGVyID0gXCJcIjtcbiAgICBpZiAoZGF0YVtpXVtcIm1ldGFmaWVsZHNcIl1bXCJjb21wYW55TmFtZVwiXSkge1xuICAgICAgZmlyc3RMZXR0ZXIgPSBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcImNvbXBhbnlOYW1lXCJdXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgLnNsaWNlKDAsIDEpO1xuICAgICAgaWYgKGlzTmFOKGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIjXCI7XG4gICAgICBpZiAoL1thLXpBLVowLTldLy50ZXN0KGZpcnN0TGV0dGVyKSA9PT0gZmFsc2UpIGZpcnN0TGV0dGVyID0gXCIqXCI7XG5cbiAgICAgIC8vaWYgKGZpcnN0TGV0dGVyICE9PSBjdXJyZW50TGV0dGVyKSB7XG4gICAgICAgIGN1cnJlbnRMZXR0ZXIgPSBmaXJzdExldHRlcjtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50X2J5X2xldHRlcik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJzX2xpc3RcIik7XG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJpdGVtX2xpc3RcIik7Ly9sZXR0ZXIgZmlsdGVyXG4gICAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmNsYXNzTGlzdC5hZGQoXCJsZXR0ZXJfXCIgKyBjdXJyZW50TGV0dGVyKTtcbiAgICAgICAgY29uc3QgbGV0dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgLy9jb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgIC8vbGV0dGVyLmlubmVySFRNTCA9IGN1cnJlbnRMZXR0ZXI7XG4gICAgICAgIC8vbGV0dGVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIC8vZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoYnIpO1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5hcHBlbmRDaGlsZChsZXR0ZXIpO1xuICAgICAgLy99XG4gICAgfVxuICAgIG5hbWUuaW5uZXJIVE1MID0gZGF0YVtpXS5wb3N0X3RpdGxlO1xuICAgIG5hbWUuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfbmFtZVwiKTtcbiAgICBjb21wYW55LmlubmVySFRNTCA9IGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wiY29tcGFueU5hbWVcIl07XG4gICAgY29tcGFueS5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl9jb21wYW55XCIpO1xuICAgIGpvYlRpdGxlLmlubmVySFRNTCA9IGRhdGFbaV1bXCJtZXRhZmllbGRzXCJdW1wiam9iVGl0bGVcIl07XG4gICAgam9iVGl0bGUuY2xhc3NMaXN0LmFkZChcInNwZWFrZXJfdGl0bGVcIik7XG4gICAgLy9jb25zb2xlLmxvZyhkYXRhW2ldWydtZXRhZmllbGRzJ11bJ2pvYl90aXRsZSddKVxuICAgIGlmIChkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcInBob3RvXCJdKSB7XG4gICAgICBpbWcuc3JjID1cbiAgICAgICAgXCJodHRwczovL2FwcC5tb2JpbGUzNjBzZXJpZXMuY29tL00zNjAvXCIgK1xuICAgICAgICBkYXRhW2ldW1wibWV0YWZpZWxkc1wiXVtcInBob3RvXCJdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbWcuc3JjID0gZnJvbnRfY29yZV92YXIucGx1Z2luX3VybCArIFwiaW1nL3NwZWFrZXItdGh1bWJuYWlsLnBuZ1wiO1xuICAgIH1cblxuICAgIGlmIChkYXRhW2ldW1widGh1bWJuYWlsXCJdKSB7XG4gICAgICBpbWcuc3JjID0gZGF0YVtpXVtcInRodW1ibmFpbFwiXTtcbiAgICB9XG5cbiAgICBmaWd1cmUuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICBlbC5hcHBlbmRDaGlsZChmaWd1cmUpO1xuICAgIGVsLmFwcGVuZENoaWxkKG5hbWUpO1xuICAgIGVsLmFwcGVuZENoaWxkKGpvYlRpdGxlKTtcbiAgICBlbC5hcHBlbmRDaGlsZChjb21wYW55KTtcblxuICAgIGNvbnN0IGV4cGFuZF9pID0gTWF0aC5mbG9vcihpIC8gcGVyX2xpbmUpO1xuICAgIGVsLmV4cGFuZF9pID0gZXhwYW5kX2k7XG4gICAgZWwuYWxsX2RhdGEgPSBkYXRhW2ldO1xuXG4gICAgZXhwYW5kX2hvbGRlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdmFyIGFjdGl2ZV9leHBhbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBcImV4cGFuZF9ob2xkZXIgYWN0aXZlXCJcbiAgICAgICk7XG4gICAgICBpZiAoYWN0aXZlX2V4cGFuZC5sZW5ndGggPiAwKSBhY3RpdmVfZXhwYW5kWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0ZWRfc3BlYWtlclwiKTtcbiAgICAgIGV4cGFuZF9ob2xkZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZWZpeCA9IGZyb250X2NvcmVfdmFyLnNpdGVfdXJsO1xuICAgIHZhciBsYW5nID0gXCJcIjtcbiAgICBpZiAoZnJvbnRfY29yZV92YXIuY3VycmVudF9sYW5nICE9PSBmcm9udF9jb3JlX3Zhci5kZWZhdWx0X2xhbmcpIHtcbiAgICAgIGxhbmcgPSBcIi9cIiArIGZyb250X2NvcmVfdmFyLmN1cnJlbnRfbGFuZztcbiAgICB9XG4gICAgdmFyIGxpbmsgPSBwcmVmaXggKyBsYW5nICsgXCIvc3BlYWtlci9cIiArIGRhdGFbaV0ucG9zdF9uYW1lOyAvL2RhdGFbJ21ldGFmaWVsZHMnXVsndXJsJ107XG4gICAgaWYgKHdpbmRvdy5saW5rc19saXZlKSB7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgICBhLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIGlmICghIWxpbmspIHtcbiAgICAgICAgYS5ocmVmID0gbGluaztcbiAgICAgICAgLy9hLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuICAgICAgfVxuICAgICAgYS5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl9zaW5nbGVcIik7XG4gICAgICBhLmNsYXNzTGlzdC5hZGQoXCJpdGVtX3NpbmdsZVwiKTtcbiAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmFwcGVuZENoaWxkKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKFwic3BlYWtlcl9zaW5nbGVcIik7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKFwiaXRlbV9zaW5nbGVcIik7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBlbGVtZW50X2J5X2xldHRlci5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRfc3BlYWtlclwiKTtcbiAgICAgICAgdmFyIGFjdGl2ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzcGVha2VyX3NpbmdsZSBhY3RpdmVcIik7XG4gICAgICAgIGlmIChhY3RpdmUubGVuZ3RoID4gMCkgYWN0aXZlWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgdmFyIGFjdGl2ZV9leHBhbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAgIFwiZXhwYW5kX2hvbGRlciBhY3RpdmVcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoYWN0aXZlX2V4cGFuZC5sZW5ndGggPiAwKVxuICAgICAgICAgIGFjdGl2ZV9leHBhbmRbMF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblxuICAgICAgICB2YXIgYWxsX2hvbGRlcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZXhwYW5kX2hvbGRlclwiKTtcbiAgICAgICAgZm9yICh2YXIgaWggaW4gYWxsX2hvbGRlcnMpIHtcbiAgICAgICAgICBhbGxfaG9sZGVyc1tpaF0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKFwiYWN0aXZlXCIpO1xuICAgICAgICB2YXIgZXhwYW5kX3RvID0gXCJleHBhbmRfXCIgKyBlbC5leHBhbmRfaTtcblxuICAgICAgICB2YXIgdG8gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGV4cGFuZF90byk7XG4gICAgICAgIHRvWzBdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImV4cGFuZCB0b1wiLCB0byk7XG4gICAgICAgIC8vdG9bMF0uaW5uZXJIVE1MID0gSlNPTi5zdHJpbmdpZnkoZWwuYWxsX2RhdGEpO1xuICAgICAgICB0b1swXS5pbm5lckhUTUwgKz1cbiAgICAgICAgICBcIjxoMj5cIiArXG4gICAgICAgICAgLyplbC5hbGxfZGF0YS5tZXRhZmllbGRzWyd0aXRsZSddICsqLyBcIiBcIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImZpcnN0bmFtZVwiXSArXG4gICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgIGVsLmFsbF9kYXRhLm1ldGFmaWVsZHNbXCJsYXN0bmFtZVwiXSArXG4gICAgICAgICAgXCI8L2gyPjxoND5cIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEubWV0YWZpZWxkc1tcImNvbXBhbnlOYW1lXCJdICtcbiAgICAgICAgICBcIjwvaDQ+PGg0PlwiICtcbiAgICAgICAgICBlbC5hbGxfZGF0YS5tZXRhZmllbGRzW1wiam9iVGl0bGVcIl0gK1xuICAgICAgICAgIFwiPC9oND48ZGl2IGNsYXNzPSdzX2Rlc2NyaXB0aW9uJz48cD5cIiArXG4gICAgICAgICAgZWwuYWxsX2RhdGEucG9zdF9jb250ZW50ICtcbiAgICAgICAgICBcIjwvcD48L2Rpdj5cIjtcblxuICAgICAgICAvL3RvWzBdLmlubmVySFRNTCArPSBcIjxoMj5TcGVha2VyIFNlc3Npb248L2gyPlwiO1xuICAgICAgfSk7XG5cbiAgICAgIGVsZW1lbnRfYnlfbGV0dGVyLmFwcGVuZENoaWxkKGVsKTtcbiAgICB9XG4gICAgY291bnRlcisrO1xuICAgIC8vY29uc29sZS5sb2coXCJhbGxcIixpLGNvdW50ZXIsKGRhdGEubGVuZ3RoLTEpLGV4cGFuZF9pKTtcbiAgICBpZiAoY291bnRlciA9PT0gcGVyX2xpbmUgfHwgcGFyc2VJbnQoaSkgPT09IGRhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIklOXCIscGFyc2VJbnQoaSksY291bnRlcixkYXRhLmxlbmd0aCxleHBhbmRfaSk7XG4gICAgICBleHBhbmRfaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJleHBhbmRfXCIgKyBleHBhbmRfaSk7XG4gICAgICBleHBhbmRfaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJleHBhbmRfaG9sZGVyXCIpO1xuICAgICAgZWxlbWVudF9ieV9sZXR0ZXIuYXBwZW5kQ2hpbGQoZXhwYW5kX2hvbGRlcik7XG4gICAgICBjb3VudGVyID0gMDtcbiAgICB9XG4gIH0gLy9lbmQgZm9yXG4gIC8vZWxlbWVudC5pbm5lckhUTUwgPSBgc3BlYWtlcl90ZW1wbGF0ZSAke0pTT04uc3RyaW5naWZ5KGRhdGEpfS5gO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnRfYnlfbGV0dGVyKTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59O1xuXG5jb25zdCBnZXRNZXRhZGF0YSA9IChkYXRhKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZWwuaW5uZXJIVE1MID0gaSArIFwiOiBcIiArIGRhdGFbaV07XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNwZWFrZXJfdGVtcGxhdGVfbXdsO1xuIiwiY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbnZhciBjYXRzID0gW107XG52YXIgY2F0c19vID0ge307XG52YXIgcGVyX2xpbmUgPSA1O1xuaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzAwKSB7XG4gIHBlcl9saW5lID0gMjtcbn1cblxuY29uc3Qgc3BvbnNvcl90ZW1wbGF0ZV9jb3JlID0gKGRhdGFJbikgPT4ge1xuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICB2YXIgY291bnRlciA9IDA7XG4gIHZhciBzcG9uc29yc19ieV9jYXQgPSB7fTtcbiAgLy9jb25zb2xlLmxvZyhcIlNPTlNPUlNcIiwgZGF0YUluKTtcbiAgdmFyIHNlbGVjdGVkX2NhdCA9IG51bGw7XG4gIC8qXG5cdGRhdGEuc29ydChcblx0XHQoYSwgYikgPT4ge1xuXHRcdFx0Ly9jb25zb2xlLmxvZygnYScsYSwnYicsYiwgYS5wb3N0X3RpdGxlIDwgYi5wb3N0X3RpdGxlKTtcblx0XHRcdFx0XHRpZihhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpIHsgcmV0dXJuIC0xOyB9XG5cdFx0XHQgICAgaWYoYS5wb3N0X3RpdGxlID4gYi5wb3N0X3RpdGxlKSB7IHJldHVybiAxOyB9XG5cdFx0XHQgICAgcmV0dXJuIDA7XG5cdFx0XHRcdC8vYS5wb3N0X3RpdGxlXG5cdFx0XHRcdC8vPFxuXHRcdFx0XHQvL2IucG9zdF90aXRsZVxuXHRcdH1cblx0KTtcbiAgKi9cbiAgLy9jb25zb2xlLmxvZyhkYXRhSW4uY2F0cyk7XG5cbiAgLy9vcmRlciBjYXRzIGJ5IGNhdF9vcmRlclxuICBjYXRzID0gZGF0YUluLmNhdHNbY29uc3RhbnRzLnNwb25zb3JfY2F0XTtcbiAgLy9pZihjYXRzICYmIGNhdHMubGVuZ3RoID4gMSkgY2F0cy5zb3J0KChhLCBiKSA9PiBhWydtZXRhZmllbGRzJ11bJ2NhdF9vcmRlciddIC0gYlsnbWV0YWZpZWxkcyddWydjYXRfb3JkZXInXSk7XG4gIGZvciAodmFyIGMgaW4gY2F0cykge1xuICAgIGNhdHNfb1tjYXRzW2NdW1wibWV0YWZpZWxkc1wiXVtcImNhdF9vcmRlclwiXV0gPSBjYXRzW2NdO1xuICB9XG5cbiAgLy9jb25zb2xlLmxvZygnY2F0cycsIGNhdHMsIGNhdHNfbywgZGF0YSk7XG5cbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInNwb25zb3JzX2xpc3RcIik7XG5cbiAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZyhhLGIsKTtcbiAgICAvL2NvbnNvbGUubG9nKGFhLGJiKTtcbiAgICBpZiAoYS5wb3N0X3RpdGxlLmxvY2FsZUNvbXBhcmUpXG4gICAgICByZXR1cm4gYS5wb3N0X3RpdGxlLmxvY2FsZUNvbXBhcmUoYi5wb3N0X3RpdGxlKTtcbiAgICBlbHNlIHJldHVybiBhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUgPyAxIDogLTE7XG4gIH0pO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICB2YXIgZGF0YV9jYXRzID0gZGF0YVtpXS5jYXRzW2NvbnN0YW50cy5zcG9uc29yX2NhdF07XG4gICAgZm9yICh2YXIgaWkgaW4gZGF0YV9jYXRzKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKGRhdGFfY2F0c1tpaV0uc2x1ZyAsIGRhdGFJbi5jYXRlZ29yeSk7XG4gICAgICBpZiAoZGF0YV9jYXRzW2lpXS5zbHVnID09PSBkYXRhSW4uY2F0ZWdvcnkpIHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZF9jYXQpIHNlbGVjdGVkX2NhdCA9IGRhdGFfY2F0c1tpaV07XG4gICAgICAgIHZhciBjYXRfb3JkZXIgPSBkYXRhX2NhdHNbaWldLm1ldGFmaWVsZHMuY2F0X29yZGVyO1xuICAgICAgICBpZiAoc3BvbnNvcnNfYnlfY2F0W2NhdF9vcmRlcl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNwb25zb3JzX2J5X2NhdFtjYXRfb3JkZXJdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgc3BvbnNvcnNfYnlfY2F0W2NhdF9vcmRlcl1bc3BvbnNvcnNfYnlfY2F0W2NhdF9vcmRlcl0ubGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICB9XG4gICAgfVxuICAgIC8vc3BvbnNvcnNfYnlfY2F0XG5cbiAgICAvL2VsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIGNvdW50ZXIrKztcbiAgICAvL2NvbnNvbGUubG9nKFwiYWxsXCIsaSxjb3VudGVyLChkYXRhLmxlbmd0aC0xKSxleHBhbmRfaSk7XG4gICAgaWYgKGNvdW50ZXIgPT09IHBlcl9saW5lIHx8IHBhcnNlSW50KGkpID09PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJJTlwiLHBhcnNlSW50KGkpLGNvdW50ZXIsZGF0YS5sZW5ndGgsZXhwYW5kX2kpO1xuICAgICAgLy9cdGV4cGFuZF9ob2xkZXIuY2xhc3NMaXN0LmFkZChcImV4cGFuZF9cIitleHBhbmRfaSk7XG4gICAgICAvL1x0ZXhwYW5kX2hvbGRlci5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kX2hvbGRlclwiKTtcbiAgICAgIC8vICBlbGVtZW50LmFwcGVuZENoaWxkKGV4cGFuZF9ob2xkZXIpO1xuICAgICAgY291bnRlciA9IDA7XG4gICAgfVxuICB9IC8vZW5kIGZvclxuICAvL2NvbnNvbGUubG9nKFwicyBieSBjYXRcIiwgc3BvbnNvcnNfYnlfY2F0KTtcbiAgLy9jb25zb2xlLmxvZyhcImNhdFwiLCBjYXRzKTtcbiAgLy9jb25zb2xlLmxvZyhcImNhdF9vIFwiLCBjYXRzX28pO1xuXG4gIGZvciAodmFyIGkgaW4gc3BvbnNvcnNfYnlfY2F0KSB7XG4gICAgaWYgKGNhdHNfb1tpXSAmJiBpID09IHNlbGVjdGVkX2NhdC5tZXRhZmllbGRzLmNhdF9vcmRlcikge1xuICAgICAgLy9jb25zb2xlLmxvZyhpLFwiaSsxXCIsY2F0c19vW2ldLGNhdHNfbyk7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb25zdCBjYXRfdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY2F0X3RpdGxlLmlubmVySFRNTCA9IHNlbGVjdGVkX2NhdC5uYW1lO1xuICAgICAgY2F0X3RpdGxlLmNsYXNzTGlzdC5hZGQoXCJhZ2VuZGFfdGl0bGVcIik7XG4gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNhdF90aXRsZSk7XG4gICAgICBmb3IgKGlpIGluIHNwb25zb3JzX2J5X2NhdFtpXSkge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHByaW50X3Nwb25zb3Ioc3BvbnNvcnNfYnlfY2F0W2ldW2lpXSwgaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHNwb25zb3JfdGVtcGxhdGUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0uYDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59OyAvL2VuZCBmXG5cbmNvbnN0IHByaW50X3Nwb25zb3IgPSAoZGF0YSwgaSkgPT4ge1xuICAvL2NvbnNvbGUubG9nKFwicHJpbnQgc1wiLCBkYXRhLCBpKTtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAvL2NvbnN0IG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNicpO1xuICAvL2NvbnN0IGNvbXBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gIC8vY29uc3Qgam9iVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAvL2NvbnN0IGV4cGFuZF9ob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAvL25hbWUuaW5uZXJIVE1MID0gZGF0YVtpXS5wb3N0X3RpdGxlO1xuICAvL25hbWUuY2xhc3NMaXN0LmFkZCgnc3BvbnNvcl9uYW1lJyk7XG4gIGltZy50aXRsZSA9IGRhdGEucG9zdF90aXRsZTtcbiAgZWwuY2xhc3NMaXN0LmFkZChcInNwb25zb3Jfc2luZ2xlXCIpO1xuXG4gIGlmIChkYXRhW1widGh1bWJuYWlsXCJdKSB7XG4gICAgaW1nLnNyYyA9IGRhdGFbXCJ0aHVtYm5haWxcIl07XG4gIH1cblxuICBpZiAoZGF0YS5tZXRhZmllbGRzLnNwb25zb3JfdXJsICE9PSBcIlwiKSB7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIGxpbmsuaHJlZiA9IGRhdGEubWV0YWZpZWxkcy5zcG9uc29yX3VybDtcbiAgICBsaW5rLmFwcGVuZENoaWxkKGltZyk7XG4gICAgbGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xuICAgIGltZyA9IGxpbms7XG4gIH1cbiAgZWwuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgLy9lbC5hcHBlbmRDaGlsZChuYW1lKTtcblxuICBjb25zdCBleHBhbmRfaSA9IE1hdGguZmxvb3IoaSAvIHBlcl9saW5lKTtcbiAgZWwuZXhwYW5kX2kgPSBleHBhbmRfaTtcbiAgZWwuYWxsX2RhdGEgPSBkYXRhO1xuICByZXR1cm4gZWw7XG59O1xuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcbm1vZHVsZS5leHBvcnRzID0gc3BvbnNvcl90ZW1wbGF0ZV9jb3JlO1xuIiwiY29uc3Qgc3BvbnNvcl90ZW1wbGF0ZV9leHBhbmQgPSAoZGF0YUluKSA9PiB7XG4gIC8vY29uc29sZS5sb2coXCJBQUFBQVwiLCBkYXRhSW4pO1xuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICB2YXIgbWV0YSA9IGRhdGFJbi5tZXRhOyAvLy5zcGxpdChcIixcIik7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzcG9uc29yc19saXN0XCIpO1xuICAvL2NvbnNvbGUubG9nKFwiIHNwb25zb3JfdGVtcGxhdGVfZXhwYW5kXCIsZGF0YSwgbWV0YSk7XG4gIC8vY29uc29sZS5sb2coZGF0YSk7XG4gIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImg2XCIpO1xuICAgIGNvbnN0IGNvbXBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBqb2JUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIGNvbnN0IGNvbnRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBjb250UmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIC8vZGF0YVtpXG4gICAgaWYgKG1ldGEgJiYgbWV0YVtpXSkge1xuICAgICAgbmFtZS5pbm5lckhUTUwgPSBtZXRhW2ldO1xuICAgICAgbmFtZS5jbGFzc0xpc3QuYWRkKFwic3BvbnNvcl9uYW1lXCIpO1xuICAgIH1cbiAgICAvL2NvbXBhbnkuaW5uZXJIVE1MID0gZGF0YVtpXVsnY29tcGFueU5hbWUnXTtcbiAgICAvL2NvbXBhbnkuY2xhc3NMaXN0LmFkZCgnc3BvbnNvcl9jb21wYW55Jyk7XG4gICAgLy9qb2JUaXRsZS5pbm5lckhUTUwgPSBkYXRhW2ldWydqb2JUaXRsZSddO1xuICAgIC8vam9iVGl0bGUuY2xhc3NMaXN0LmFkZCgnc3BvbnNvcl90aXRsZScpO1xuICAgIC8vY29uc29sZS5sb2coZGF0YVtpXVsnam9iVGl0bGUnXSlcbiAgICBpZiAoZGF0YVtpXS50aHVtYm5haWwpIHtcbiAgICAgIGltZy5zcmMgPSBkYXRhW2ldLnRodW1ibmFpbDtcbiAgICAgIGltZy50aXRsZSA9IGRhdGFbaV0ucG9zdF90aXRsZTtcbiAgICAgIGltZy5hbHQgPSBcIlwiO1xuICAgICAgaWYgKG1ldGEgJiYgbWV0YVtpXSkgeyBpbWcuYWx0ID0gbWV0YVtpXTt9XG4gICAgfSBlbHNlIHtcbiAgICAgIGltZy5zcmMgPSBmcm9udF9jb3JlX3Zhci5wbHVnaW5fdXJsICsgXCJpbWcvc3BlYWtlci10aHVtYm5haWwucG5nXCI7XG4gICAgfVxuICAgIGlmIChkYXRhW2ldLm1ldGFmaWVsZHMuc3BvbnNvcl91cmwgIT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgIGxpbmsuaHJlZiA9IGRhdGFbaV0ubWV0YWZpZWxkcy5zcG9uc29yX3VybDtcbiAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgIGxpbmsudGFyZ2V0ID0gXCJfYmxhbmtcIjtcbiAgICAgIGltZyA9IGxpbms7XG4gICAgfVxuICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJzcG9uc29yX3NpbmdsZVwiKTtcbiAgICBjb250TGVmdC5jbGFzc0xpc3QuYWRkKFwiY29udF9sZWZ0XCIpO1xuICAgIGNvbnRSaWdodC5jbGFzc0xpc3QuYWRkKFwiY29udF9yaWdodFwiKTtcblxuICAgIGNvbnRMZWZ0LmFwcGVuZENoaWxkKG5hbWUpO1xuICAgIGNvbnRSaWdodC5hcHBlbmRDaGlsZChpbWcpO1xuICAgIC8vY29udFJpZ2h0LmFwcGVuZENoaWxkKGNvbXBhbnkpO1xuICAgIC8vY29udFJpZ2h0LmFwcGVuZENoaWxkKGpvYlRpdGxlKTtcbiAgICBlbC5hcHBlbmRDaGlsZChjb250TGVmdCk7XG4gICAgZWwuYXBwZW5kQ2hpbGQoY29udFJpZ2h0KTtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgfSAvL2VuZCBmb3JcbiAgLy9lbGVtZW50LmlubmVySFRNTCA9IGBzcG9uc29yX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuY29uc3QgZ2V0TWV0YWRhdGEgPSAoZGF0YSkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsLmlubmVySFRNTCA9IGkgKyBcIjogXCIgKyBkYXRhW2ldO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcbm1vZHVsZS5leHBvcnRzID0gc3BvbnNvcl90ZW1wbGF0ZV9leHBhbmQ7XG4iLCJjb25zdCBjb25zdGFudHMgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xudmFyIGNhdHMgPSBbXTtcbnZhciBjYXRzX28gPSB7fTtcbnZhciBwZXJfbGluZSA9IDU7XG5pZiAod2luZG93LmlubmVyV2lkdGggPCA3MDApIHtcbiAgcGVyX2xpbmUgPSAyO1xufVxuXG5jb25zdCB2aWRlb190ZW1wbGF0ZV9jb3JlID0gKGRhdGFJbikgPT4ge1xuICB2YXIgZGF0YSA9IGRhdGFJbi5kYXRhO1xuICB2YXIgY291bnRlciA9IDA7XG4gIHZhciB2aWRlb3NfYnlfY2F0ID0ge307XG4gIGNvbnNvbGUubG9nKFwiVklERU9TIVwiLCBkYXRhSW4pO1xuICB2YXIgc2VsZWN0ZWRfY2F0ID0gbnVsbDtcbiAgLypcblx0ZGF0YS5zb3J0KFxuXHRcdChhLCBiKSA9PiB7XG5cdFx0XHQvL2NvbnNvbGUubG9nKCdhJyxhLCdiJyxiLCBhLnBvc3RfdGl0bGUgPCBiLnBvc3RfdGl0bGUpO1xuXHRcdFx0XHRcdGlmKGEucG9zdF90aXRsZSA8IGIucG9zdF90aXRsZSkgeyByZXR1cm4gLTE7IH1cblx0XHRcdCAgICBpZihhLnBvc3RfdGl0bGUgPiBiLnBvc3RfdGl0bGUpIHsgcmV0dXJuIDE7IH1cblx0XHRcdCAgICByZXR1cm4gMDtcblx0XHRcdFx0Ly9hLnBvc3RfdGl0bGVcblx0XHRcdFx0Ly88XG5cdFx0XHRcdC8vYi5wb3N0X3RpdGxlXG5cdFx0fVxuXHQpO1xuICAqL1xuICAvL2NvbnNvbGUubG9nKGRhdGFJbi5jYXRzKTtcblxuICAvL29yZGVyIGNhdHMgYnkgY2F0X29yZGVyXG4gIGNhdHMgPSBkYXRhSW4uY2F0c1tjb25zdGFudHMudmlkZW9fY2F0XTtcbiAgLy9pZihjYXRzICYmIGNhdHMubGVuZ3RoID4gMSkgY2F0cy5zb3J0KChhLCBiKSA9PiBhWydtZXRhZmllbGRzJ11bJ2NhdF9vcmRlciddIC0gYlsnbWV0YWZpZWxkcyddWydjYXRfb3JkZXInXSk7XG4gIGZvciAodmFyIGMgaW4gY2F0cykge1xuICAgIGNhdHNfb1tjYXRzW2NdW1wibWV0YWZpZWxkc1wiXVtcImNhdF9vcmRlclwiXV0gPSBjYXRzW2NdO1xuICB9XG5cbiAgLy9jb25zb2xlLmxvZygnY2F0cycsIGNhdHMsIGNhdHNfbywgZGF0YSk7XG5cbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInZpZGVvc19saXN0XCIpO1xuXG4gIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIC8vY29uc29sZS5sb2coYSxiLCk7XG4gICAgLy9jb25zb2xlLmxvZyhhYSxiYik7XG4gICAgaWYgKGEucG9zdF90aXRsZS5sb2NhbGVDb21wYXJlKVxuICAgICAgcmV0dXJuIGEucG9zdF90aXRsZS5sb2NhbGVDb21wYXJlKGIucG9zdF90aXRsZSk7XG4gICAgZWxzZSByZXR1cm4gYS5wb3N0X3RpdGxlIDwgYi5wb3N0X3RpdGxlID8gMSA6IC0xO1xuICB9KTtcbiAgZm9yICh2YXIgaSBpbiBkYXRhKSB7XG4gICAgdmFyIGRhdGFfY2F0cyA9IGRhdGFbaV0uY2F0c1tjb25zdGFudHMudmlkZW9fY2F0XTtcbiAgICBmb3IgKHZhciBpaSBpbiBkYXRhX2NhdHMpIHtcbiAgICAgIC8vY29uc29sZS5sb2coZGF0YV9jYXRzW2lpXS5zbHVnICwgZGF0YUluLmNhdGVnb3J5KTtcbiAgICAgIGlmIChkYXRhX2NhdHNbaWldLnNsdWcgPT09IGRhdGFJbi5jYXRlZ29yeSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkX2NhdCkgc2VsZWN0ZWRfY2F0ID0gZGF0YV9jYXRzW2lpXTtcbiAgICAgICAgdmFyIGNhdF9vcmRlciA9IGRhdGFfY2F0c1tpaV0ubWV0YWZpZWxkcy5jYXRfb3JkZXI7XG4gICAgICAgIGlmICh2aWRlb3NfYnlfY2F0W2NhdF9vcmRlcl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZpZGVvc19ieV9jYXRbY2F0X29yZGVyXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHZpZGVvc19ieV9jYXRbY2F0X29yZGVyXVt2aWRlb3NfYnlfY2F0W2NhdF9vcmRlcl0ubGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICB9XG4gICAgfVxuICAgIC8vdmlkZW9zX2J5X2NhdFxuXG4gICAgLy9lbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICBjb3VudGVyKys7XG4gICAgLy9jb25zb2xlLmxvZyhcImFsbFwiLGksY291bnRlciwoZGF0YS5sZW5ndGgtMSksZXhwYW5kX2kpO1xuICAgIGlmIChjb3VudGVyID09PSBwZXJfbGluZSB8fCBwYXJzZUludChpKSA9PT0gZGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiSU5cIixwYXJzZUludChpKSxjb3VudGVyLGRhdGEubGVuZ3RoLGV4cGFuZF9pKTtcbiAgICAgIC8vXHRleHBhbmRfaG9sZGVyLmNsYXNzTGlzdC5hZGQoXCJleHBhbmRfXCIrZXhwYW5kX2kpO1xuICAgICAgLy9cdGV4cGFuZF9ob2xkZXIuY2xhc3NMaXN0LmFkZChcImV4cGFuZF9ob2xkZXJcIik7XG4gICAgICAvLyAgZWxlbWVudC5hcHBlbmRDaGlsZChleHBhbmRfaG9sZGVyKTtcbiAgICAgIGNvdW50ZXIgPSAwO1xuICAgIH1cbiAgfSAvL2VuZCBmb3JcbiAgLy9jb25zb2xlLmxvZyhcInMgYnkgY2F0XCIsIHZpZGVvc19ieV9jYXQpO1xuICAvL2NvbnNvbGUubG9nKFwiY2F0XCIsIGNhdHMpO1xuICAvL2NvbnNvbGUubG9nKFwiY2F0X28gXCIsIGNhdHNfbyk7XG5cbiAgZm9yICh2YXIgaSBpbiB2aWRlb3NfYnlfY2F0KSB7XG4gICAgaWYgKGNhdHNfb1tpXSAmJiBpID09IHNlbGVjdGVkX2NhdC5tZXRhZmllbGRzLmNhdF9vcmRlcikge1xuICAgICAgLy9jb25zb2xlLmxvZyhpLFwiaSsxXCIsY2F0c19vW2ldLGNhdHNfbyk7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb25zdCBjYXRfdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY2F0X3RpdGxlLmlubmVySFRNTCA9IHNlbGVjdGVkX2NhdC5uYW1lO1xuICAgICAgY2F0X3RpdGxlLmNsYXNzTGlzdC5hZGQoXCJhZ2VuZGFfdGl0bGVcIik7XG4gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNhdF90aXRsZSk7XG4gICAgICBmb3IgKGlpIGluIHZpZGVvc19ieV9jYXRbaV0pIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChwcmludF92aWRlbyh2aWRlb3NfYnlfY2F0W2ldW2lpXSwgaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL2VsZW1lbnQuaW5uZXJIVE1MID0gYHZpZGVvX3RlbXBsYXRlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9LmA7XG4gIHJldHVybiBlbGVtZW50O1xufTsgLy9lbmQgZlxuXG5jb25zdCBwcmludF92aWRlbyA9IChkYXRhLCBpKSA9PiB7XG4gIC8vY29uc29sZS5sb2coXCJwcmludCBzXCIsIGRhdGEsIGkpO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIC8vY29uc3QgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2g2Jyk7XG4gIC8vY29uc3QgY29tcGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgLy9jb25zdCBqb2JUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gIC8vY29uc3QgZXhwYW5kX2hvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIC8vbmFtZS5pbm5lckhUTUwgPSBkYXRhW2ldLnBvc3RfdGl0bGU7XG4gIC8vbmFtZS5jbGFzc0xpc3QuYWRkKCd2aWRlb19uYW1lJyk7XG4gIGltZy50aXRsZSA9IGRhdGEucG9zdF90aXRsZTtcbiAgZWwuY2xhc3NMaXN0LmFkZChcInZpZGVvX3NpbmdsZVwiKTtcblxuICBpZiAoZGF0YVtcInRodW1ibmFpbFwiXSkge1xuICAgIGltZy5zcmMgPSBkYXRhW1widGh1bWJuYWlsXCJdO1xuICB9XG5cbiAgaWYgKGRhdGEudmlkZW9maWVsZHMpIHtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgbGluay5ocmVmID0gZGF0YS52aWRlb2ZpZWxkcy52aWRlb19kYXRhO1xuICAgIGxpbmsuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICBsaW5rLnRhcmdldCA9IFwiX2JsYW5rXCI7XG4gICAgaW1nID0gbGluaztcbiAgfVxuICBlbC5hcHBlbmRDaGlsZChpbWcpO1xuICAvL2VsLmFwcGVuZENoaWxkKG5hbWUpO1xuXG4gIGNvbnN0IGV4cGFuZF9pID0gTWF0aC5mbG9vcihpIC8gcGVyX2xpbmUpO1xuICBlbC5leHBhbmRfaSA9IGV4cGFuZF9pO1xuICBlbC5hbGxfZGF0YSA9IGRhdGE7XG4gIHJldHVybiBlbDtcbn07XG5jb25zdCBnZXRNZXRhZGF0YSA9IChkYXRhKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBmb3IgKHZhciBpIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZWwuaW5uZXJIVE1MID0gaSArIFwiOiBcIiArIGRhdGFbaV07XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB2aWRlb190ZW1wbGF0ZV9jb3JlO1xuIiwiY29uc3QgdHJhbnNsYXRpb25fbGlzdCA9IHtcbiAgZXM6IHtcbiAgICBcIkZJTFRFUiBCWVwiOiBcIkZJTFRSQVIgUE9SXCIsXG4gICAgXCJTZWFyY2ggVGhlIFNlc3Npb25zXCI6IFwiQnVzY2FyIHNlc2lvbmVzXCIsXG4gICAgQ2xlYXI6IFwiQm9ycmFyXCIsXG4gICAgXCJTZWFyY2ggVGhlIFNwZWFrZXJzXCI6IFwiQnVzY2FyIG9yYWRvcmVzXCIsXG4gICAgUmVnaXN0ZXI6IFwiUmVnaXN0cmFyc2VcIixcbiAgICBcIldhdGNoIEFnYWluXCI6IFwiVmVyIG51ZXZhbWVudGVcIixcbiAgICBcIkxpdmUgaW4ge3tofX0gaG91cnMge3ttfX0gbWludXRlc1wiOiBcIlZpdm8gZW4ge3tofX0gaG9yYXMgeSB7e219fSBtaW51dG9zXCIsXG4gICAgVXBjb21pbmc6IFwiUHLDs3hpbWFtZW50ZVwiLFxuICAgIFwiVmlldyBTZXNzaW9uIERldGFpbHNcIjogXCJWZXIgaW5mb3JtYWNpw7NuIGRlIGxhIHNlc2nDs25cIixcbiAgICBcIlNlYXJjaCBoZXJlLi4uXCI6IFwiQnVzY2FyIGFxdcOtLi4uXCIsXG4gICAgXCJBZGQgdG8gQ2FsZW5kYXJcIjogXCJBw7FhZGlyIGFsIGNhbGVuZGFyaW9cIixcbiAgfSxcbiAgXCJ6aC1oYW5zXCI6IHtcbiAgICBcIkZJTFRFUiBCWVwiOiBcIui/h+a7pFwiLFxuICAgIFwiRklMVEVSIEJZIFBBU1NcIjogXCLmjInlhaXlnLror4HnrZvpgIlcIixcbiAgICBcIkZJTFRFUiBCWSBUSEVNRVwiOiBcIuaMieS4u+mimOetm+mAiVwiLFxuICAgIFwiRklMVEVSIEJZIFRSQUNLXCI6IFwi5oyJ5rS75Yqo562b6YCJXCIsXG4gICAgXCJTZWFyY2ggVGhlIFNlc3Npb25zXCI6IFwi5pCc57Si5Lya6K+dXCIsXG4gICAgQ2xlYXI6IFwi5riF6ZmkXCIsXG4gICAgXCJTZWFyY2ggVGhlIFNwZWFrZXJzXCI6IFwi5pCc57Si5ryU6K6y6ICFXCIsXG4gICAgXCJTZWFyY2ggaGVyZS4uLlwiOiBcIuaQnOe0olwiLFxuICAgIFwiRklMVEVSIEJZIExPQ0FUSU9OXCI6IFwi5oyJ5L2N572u562b6YCJXCIsXG4gICAgXCJGSUxURVIgQlkgUFJPRFVDVFwiOiBcIuaMieS6p+WTgeetm+mAiVwiLFxuICAgIFwiU3RhbmRcIjogXCLlsZXlj7BcIixcbiAgICBcIlN0YW5kc1wiOiBcIuWxleWPsFwiLFxuICAgIFwiQWxsXCI6IFwi5omA5pyJXCIsXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMgPSB0cmFuc2xhdGlvbl9saXN0O1xuIiwiY29uc3QgdHJhbnNsYXRpb25fbGlzdCA9IHJlcXVpcmUoXCIuL3RyYW5zbGF0aW9uX2xpc3QuanNcIik7XG5cbmNvbnN0IHRyYW5zbGF0aW9ucyA9IChzdHJfaW4pID0+IHtcbiAgY29uc3QgbGFuZyA9IGZyb250X2NvcmVfdmFyLmN1cnJlbnRfbGFuZztcbiAgaWYgKHRyYW5zbGF0aW9uX2xpc3RbbGFuZ10pXG4gICAgaWYgKHRyYW5zbGF0aW9uX2xpc3RbbGFuZ11bc3RyX2luXSkgcmV0dXJuIHRyYW5zbGF0aW9uX2xpc3RbbGFuZ11bc3RyX2luXTtcbiAgcmV0dXJuIHN0cl9pbjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gdHJhbnNsYXRpb25zO1xuIiwiLypcbiAqICBmdW5jdGlvbl9ydW4gdXNlZCBmb3IgcnVubmluZ1xuICovXG5cbi8vY29uc3Qgc2Vzc2lvbl90ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vc2Vzc2lvbl90ZW1wbGF0ZS5qcycpO1xuLy9jb25zdCBzZXNzaW9uX3RlbXBsYXRlX2N1c3RvbSA9IHJlcXVpcmUoJy4vc2Vzc2lvbl90ZW1wbGF0ZV9jdXN0b20uanMnKTtcbi8vY29uc3Qgc2Vzc2lvbl90ZW1wbGF0ZV9jYXJvdXNlbCA9IHJlcXVpcmUoJy4vc2Vzc2lvbl90ZW1wbGF0ZV9jYXJvdXNlbC5qcycpO1xuLy9jb25zdCBzcGVha2VyX3RlbXBsYXRlX2tleW5vdGUgPSByZXF1aXJlKCcuL3NwZWFrZXJfdGVtcGxhdGVfa2V5bm90ZS5qcycpO1xuLy9jb25zdCBzcGVha2VyX3RlbXBsYXRlX2V4cGFuZCA9IHJlcXVpcmUoJy4vc3BlYWtlcl90ZW1wbGF0ZV9leHBhbmQuanMnKTtcbi8vXG5jb25zdCBzZXNzaW9uX3RlbXBsYXRlX2NvcmUgPSByZXF1aXJlKFwiLi90ZW1wbGF0ZXMvc2Vzc2lvbl90ZW1wbGF0ZV9jb3JlLmpzXCIpO1xuY29uc3Qgc2Vzc2lvbl90ZW1wbGF0ZV9td2NzID0gcmVxdWlyZShcIi4vdGVtcGxhdGVzL3Nlc3Npb25fdGVtcGxhdGVfbXdjcy5qc1wiKTtcbmNvbnN0IHNlc3Npb25fdGVtcGxhdGVfbXdsID0gcmVxdWlyZShcIi4vdGVtcGxhdGVzL3Nlc3Npb25fdGVtcGxhdGVfbXdsLmpzXCIpO1xuY29uc3Qgc2Vzc2lvbl90ZW1wbGF0ZV9mb3VyX3lmbiA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9zZXNzaW9uX3RlbXBsYXRlX2ZvdXJfeWZuLmpzXCIpO1xuY29uc3Qgc3BlYWtlcl90ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9zcGVha2VyX3RlbXBsYXRlLmpzXCIpO1xuY29uc3Qgc3BlYWtlcl90ZW1wbGF0ZV9jb3JlID0gcmVxdWlyZShcIi4vdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGVfY29yZS5qc1wiKTtcbmNvbnN0IHNwZWFrZXJfdGVtcGxhdGVfbXdjcyA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9zcGVha2VyX3RlbXBsYXRlX213Y3MuanNcIik7XG5jb25zdCBzcGVha2VyX3RlbXBsYXRlX213bCA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9zcGVha2VyX3RlbXBsYXRlX213bC5qc1wiKTtcbmNvbnN0IHNwZWFrZXJfdGVtcGxhdGVfbTM2MCA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9zcGVha2VyX3RlbXBsYXRlX20zNjAuanNcIik7XG5jb25zdCBzcGVha2VyX3RlbXBsYXRlX2ZvdXJfeWZuID0gcmVxdWlyZShcIi4vdGVtcGxhdGVzL3NwZWFrZXJfdGVtcGxhdGVfZm91cl95Zm4uanNcIik7XG5jb25zdCBleGhpYml0b3JfdGVtcGxhdGUgPSByZXF1aXJlKFwiLi90ZW1wbGF0ZXMvZXhoaWJpdG9yX3RlbXBsYXRlLmpzXCIpO1xuY29uc3QgZXhoaWJpdG9yX3RlbXBsYXRlX213Y3MgPSByZXF1aXJlKFwiLi90ZW1wbGF0ZXMvZXhoaWJpdG9yX3RlbXBsYXRlX213Y3MuanNcIik7XG5jb25zdCBleGhpYml0b3JfdGVtcGxhdGVfY29yZSA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9leGhpYml0b3JfdGVtcGxhdGVfY29yZS5qc1wiKTtcbmNvbnN0IHNwb25zb3JfdGVtcGxhdGVfY29yZSA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlcy9zcG9uc29yX3RlbXBsYXRlX2NvcmUuanNcIik7XG5jb25zdCB2aWRlb190ZW1wbGF0ZV9jb3JlID0gcmVxdWlyZShcIi4vdGVtcGxhdGVzL3ZpZGVvX3RlbXBsYXRlX2NvcmUuanNcIik7XG52YXIgZnVuY3MgPSBbXTtcbi8vZnVuY3Muc2Vzc2lvbl90ZW1wbGF0ZSA9IHNlc3Npb25fdGVtcGxhdGU7XG4vL2Z1bmNzLnNlc3Npb25fdGVtcGxhdGVfY3VzdG9tID0gc2Vzc2lvbl90ZW1wbGF0ZV9jdXN0b207XG4vL2Z1bmNzLnNlc3Npb25fdGVtcGxhdGVfY2Fyb3VzZWwgPSBzZXNzaW9uX3RlbXBsYXRlX2Nhcm91c2VsO1xuLy9mdW5jcy5zcGVha2VyX3RlbXBsYXRlX2tleW5vdGUgPSBzcGVha2VyX3RlbXBsYXRlX2tleW5vdGU7XG4vL2Z1bmNzLnNwZWFrZXJfdGVtcGxhdGVfZXhwYW5kID0gc3BlYWtlcl90ZW1wbGF0ZV9leHBhbmQ7XG5mdW5jcy5zZXNzaW9uX3RlbXBsYXRlX2NvcmUgPSBzZXNzaW9uX3RlbXBsYXRlX2NvcmU7XG5mdW5jcy5zZXNzaW9uX3RlbXBsYXRlX213Y3MgPSBzZXNzaW9uX3RlbXBsYXRlX213Y3M7XG5mdW5jcy5zZXNzaW9uX3RlbXBsYXRlX213bCA9IHNlc3Npb25fdGVtcGxhdGVfbXdsO1xuZnVuY3Muc2Vzc2lvbl90ZW1wbGF0ZV9mb3VyX3lmbiA9IHNlc3Npb25fdGVtcGxhdGVfZm91cl95Zm47XG5mdW5jcy5zcGVha2VyX3RlbXBsYXRlID0gc3BlYWtlcl90ZW1wbGF0ZTtcbmZ1bmNzLnNwZWFrZXJfdGVtcGxhdGVfY29yZSA9IHNwZWFrZXJfdGVtcGxhdGVfY29yZTtcbmZ1bmNzLnNwZWFrZXJfdGVtcGxhdGVfbXdjcyA9IHNwZWFrZXJfdGVtcGxhdGVfbXdjcztcbmZ1bmNzLnNwZWFrZXJfdGVtcGxhdGVfbXdsID0gc3BlYWtlcl90ZW1wbGF0ZV9td2w7XG5mdW5jcy5zcGVha2VyX3RlbXBsYXRlX20zNjAgPSBzcGVha2VyX3RlbXBsYXRlX20zNjA7XG5mdW5jcy5zcGVha2VyX3RlbXBsYXRlX2ZvdXJfeWZuID0gc3BlYWtlcl90ZW1wbGF0ZV9mb3VyX3lmbjtcbmZ1bmNzLmV4aGliaXRvcl90ZW1wbGF0ZV9td2NzID0gZXhoaWJpdG9yX3RlbXBsYXRlX213Y3M7XG5mdW5jcy5leGhpYml0b3JfdGVtcGxhdGVfY29yZSA9IGV4aGliaXRvcl90ZW1wbGF0ZV9jb3JlO1xuZnVuY3Muc3BvbnNvcl90ZW1wbGF0ZV9jb3JlID0gc3BvbnNvcl90ZW1wbGF0ZV9jb3JlO1xuZnVuY3MudmlkZW9fdGVtcGxhdGVfY29yZSA9IHZpZGVvX3RlbXBsYXRlX2NvcmU7XG5cbmNvbnN0IGZ1bmN0aW9uX3J1biA9IChpbnB1dCkgPT4ge1xuICAvL2NvbnNvbGUubG9nKFwiQUFBQUFcIiwgW2lucHV0LCBmdW5jc10pO1xuICBsZXQgbGF5b3V0ID0gaW5wdXRbXCJpZFwiXSArIFwiXCI7XG4gIGlmIChcbiAgICBpbnB1dFtcImxheW91dFwiXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgaW5wdXRbXCJsYXlvdXRcIl0gIT09IGlucHV0W1wiaWRcIl0gKyBcIl9kZWZhdWx0XCJcbiAgKSB7XG4gICAgbGF5b3V0ID0gaW5wdXRbXCJsYXlvdXRcIl07XG4gIH0gLy9lbmQgaWZcbiAgY29uc29sZS5sb2coXCJsYXlvdXQgPSBcIiwgbGF5b3V0KTtcbiAgdmFyIGZuID0gZnVuY3NbbGF5b3V0XTtcbiAgaWYgKHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZm4oaW5wdXQpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgZWxlbWVudC5pbm5lckhUTUwgPSBgSmF2YVNjcmlwdCBCdWlsZGluZy4gU2FzcyBCdWlsZGluZy4gVGVzdGluZyB3aXRoIGlkOiBbJHtpbnB1dC5pZH1dLCBsYXlvdXQ6IFske2xheW91dH1dIC4gIFlvdXIgY3VzdG9tIGxheW91dCBkb2VzIG5vdCBleGlzdCBvciBjb25maWd1cmVkIGluY29ycmVjdGx5YDtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uX3J1bjtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9jc3MvbWFpblwiO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgZnVuY3Rpb25fcnVuID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBjb3VudGVyVG9MaXZlID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9jb3VudGVyVG9MaXZlLmpzXCIpO1xuY29uc3QgZ2V0VG9kYXlTdHJpbmcgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL2dldFRvZGF5U3RyaW5nLmpzXCIpO1xuY29uc3QgeyBhdGNiX2FjdGlvbiwgYXRjYl9pbml0IH0gPSByZXF1aXJlKFwiYWRkLXRvLWNhbGVuZGFyLWJ1dHRvblwiKTtcbnZhciBjb3VudGVyX2lkO1xuLy9maXJlIG9uIGxvYWQgYW5kIGluaXRcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaW5pdCgpO1xufSk7XG4vL3JlbG9hZCBqdXN0IGluIGNhc2Ugb24gZm9jdXMgKGlmIGl0cyBzdHVjaylcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJlcGFpbnRBcHAoY291bnRlcl9pZCk7XG4gIGF0Y2JfaW5pdCgpO1xufSk7XG5cbi8vaWYgZGF0YSBleGlzdHMgbG9hZCBpdHMgdGVtcGxhdGUgZnVuY3Rpb25cbmZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vY29uc29sZS5sb2coZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICcgd2lkZSBieSAnICsgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQrJyBoaWdoJyk7XG4gIGlmICh3aW5kb3cudGhyaXZlX2RhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAodmFyIGkgaW4gd2luZG93LnRocml2ZV9kYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHdpbmRvdy50aHJpdmVfZGF0YVtpXS50aW1lem9uZSAmJlxuICAgICAgICB3aW5kb3cudGhyaXZlX2RhdGFbaV0uaWQgPT09IFwic2Vzc2lvbl90ZW1wbGF0ZVwiXG4gICAgICAgIC8vZmFsc2VcbiAgICAgICkge1xuICAgICAgICBjb3VudGVyX2lkID0gaTtcbiAgICAgICAgZmV0Y2goXG4gICAgICAgICAgZnJvbnRfY29yZV92YXIuc2l0ZV91cmwgK1xuICAgICAgICAgICAgXCI/dGltZV9zZXJ2ZXImdGltZXpvbmU9XCIgK1xuICAgICAgICAgICAgd2luZG93LnRocml2ZV9kYXRhW2ldLnRpbWV6b25lICtcbiAgICAgICAgICAgIFwiJnRpbWVzdGFtcD1cIiArXG4gICAgICAgICAgICBnZXRUb2RheVN0cmluZygpXG4gICAgICAgIClcbiAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdmFyIHNlcnZlcl90aW1lID0gZGF0YTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2VydmVyIHRpbWVcIiwgc2VydmVyX3RpbWUpO1xuICAgICAgICAgICAgd2luZG93LnRocml2ZV9kYXRhW2NvdW50ZXJfaWRdLnNlcnZlcl90aW1lID0gc2VydmVyX3RpbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRXZlbnRUb2RheShcbiAgICAgICAgICAgICAgICB3aW5kb3cudGhyaXZlX2RhdGFbY291bnRlcl9pZF0uY2F0c1tjb25zdGFudHMuZGF5XSxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJfdGltZS5jdXJyZW50X3RpbWV6b25lX2RhdGUuc3BsaXQoXCIgXCIpWzBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb3VudGVyVG9MaXZlKHRocml2ZV9kYXRhLCBjb3VudGVyX2lkLCBzZXJ2ZXJfdGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBhaW50QXBwKGNvdW50ZXJfaWQpO1xuICAgICAgICAgICAgYXRjYl9pbml0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbml0KCk7XG4gICAgICAgIHJlcGFpbnRBcHAoaSk7XG4gICAgICAgIGF0Y2JfaW5pdCgpO1xuICAgICAgfVxuICAgIH0gLy9lbmQgZm9yXG4gIH0gLy9lbmQgaWZcbn0gLy9lbmQgaW5pdFxuZnVuY3Rpb24gaXNFdmVudFRvZGF5KGRheXMsIHRvZGF5KSB7XG4gIC8vY29uc29sZS5sb2coZGF5cyk7XG4gIGZvciAodmFyIGkgaW4gZGF5cykge1xuICAgIC8vY29uc29sZS5sb2coZGF5c1tpXSk7XG4gICAgaWYgKHRvZGF5ID09PSBkYXlzW2ldLm1ldGFmaWVsZHMuZGF5X2Z1bGwpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHJlcGFpbnRBcHAoaW5faSkge1xuICB2YXIgaSA9IHBhcnNlSW50KGluX2kpO1xuICBpZiAod2luZG93LnRocml2ZV9kYXRhKSB7XG4gICAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh3aW5kb3cudGhyaXZlX2RhdGFbaV0uaWQpO1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICByb290LmFwcGVuZENoaWxkKGZ1bmN0aW9uX3J1bih3aW5kb3cudGhyaXZlX2RhdGFbaV0pKTtcbiAgICAgIGNvbnNvbGUubG9nKFwic3RhcnRlZFwiLCByb290LCB0aHJpdmVfZGF0YVtpXSk7XG4gICAgICBpZih0aHJpdmVfZGF0YVtpXS5sYXlvdXQgPT09XCJzZXNzaW9uX3RlbXBsYXRlX213Y3NcIiAmJiB3aW5kb3cuc2Vzc2lvbkZpbHRlckJ5U2VhcmNoKSB3aW5kb3cuc2Vzc2lvbkZpbHRlckJ5U2VhcmNoKCk7XG5cbiAgICB9XG4gIH1cbn1cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7XG4gIHdpbmRvdy5zZXNzaW9uRmlsdGVyQnlTZWFyY2goKTtcbn0pO1xuLy93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBmdW5jdGlvbihldmVudCkge1xuLy9jb25zb2xlLmxvZyhkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgJyB3aWRlIGJ5ICcgKyBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCsnIGhpZ2gnKTtcbi8vaW5pdCgpO1xuLy99KVxuIl0sIm5hbWVzIjpbImF0Y2JWZXJzaW9uIiwiaXNCcm93c2VyIiwiRnVuY3Rpb24iLCJpc2lPUyIsImlzSW5zdGFncmFtIiwiYXRjYl9wYXRjaF9jb25maWciLCJhdGNiQ29uZmlnIiwia2V5Q2hhbmdlcyIsInRpdGxlIiwiZGF0ZVN0YXJ0IiwiZGF0ZUVuZCIsInRpbWVTdGFydCIsInRpbWVFbmQiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImNvbmNhdCIsImF0Y2JfZGVjb3JhdGVfZGF0YSIsImRhdGEiLCJlbmREYXRlIiwic3RhcnREYXRlIiwicG9pbnQiLCJyZXBsYWNlIiwidG1wU3BsaXRTdGFydERhdGUiLCJzcGxpdCIsImxlbmd0aCIsInRpbWVTdHIiLCJzdWJzdHJpbmciLCJhdGNiX2RhdGVfY2xlYW51cCIsImF0Y2JfZGF0ZV9jYWxjdWxhdGlvbiIsImxpc3RTdHlsZSIsInRyaWdnZXIiLCJsYW5ndWFnZSIsInJlY3VycmVuY2UiLCJkZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uSHRtbEZyZWUiLCJhc3NpZ24iLCJtYXRjaCIsInAxIiwidXJsVGV4dCIsImxpbmsiLCJhdGNiX2NoZWNrX3JlcXVpcmVkIiwib3B0aW9ucyIsImNvbnNvbGUiLCJlcnJvciIsImV2ZXJ5IiwiZmllbGQiLCJkYXRlU3RyaW5nIiwidG9kYXkiLCJEYXRlIiwidG9kYXlTdHJpbmciLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRVVENGdWxsWWVhciIsImRhdGVTdHJpbmdQYXJ0cyIsImRhdGVQYXJ0cyIsIm5ld0RhdGUiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsInBhcnNlSW50IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImF0Y2JfdmFsaWRhdGUiLCJpZGVudGlmaWVyIiwidGVzdCIsImljc0ZpbGUiLCJhdGNiX3NlY3VyZV91cmwiLCJvcHRpb24iLCJjbGVhbk9wdGlvbiIsImluY2x1ZGVzIiwiZGF0ZXMiLCJkYXRlIiwidGltZSIsInRpbWVQYXJ0cyIsImdldFRpbWUiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiYXRjYl9nZW5lcmF0ZV9sYWJlbCIsInBhcmVudCIsInR5cGUiLCJpY29uIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwidGV4dCIsIm9uZU9wdGlvbiIsImRlZmF1bHRUcmlnZ2VyVGV4dCIsImF0Y2JfdHJhbnNsYXRlIiwiaWNvblN2ZyIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdGNiX2RlYm91bmNlX2xlYWRpbmciLCJhdGNiX3RvZ2dsZSIsInBhc3NpdmUiLCJhdGNiX29wZW4iLCJzZXRBdHRyaWJ1dGUiLCJhdGNiX2RlYm91bmNlIiwiYmx1ciIsImF0Y2JfY2xvc2UiLCJhdGNiX2dlbmVyYXRlX2ljYWwiLCJ1cmwiLCJmb3JtYXR0ZWREYXRlIiwiYXRjYl9nZW5lcmF0ZV90aW1lIiwic3RhcnQiLCJlbmQiLCJuYW1lIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidG1wRGF0YURlc2NyaXB0aW9uIiwibG9jYXRpb24iLCJ3aW5kb3ciLCJvcGVuIiwiZm9jdXMiLCJhdGNiX2dlbmVyYXRlX2dvb2dsZSIsInJlbW92ZSIsImxvY2F0aW9uU3RyaW5nIiwiYXRjYl9nZW5lcmF0ZV90ZWFtcyIsImF0Y2JfZ2VuZXJhdGVfbWljcm9zb2Z0IiwiYWxsZGF5IiwiYXRjYl9nZW5lcmF0ZV95YWhvbyIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJjbGljayIsImljb25FbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwidGV4dEVsIiwidGV4dENvbnRlbnQiLCJhdGNiX2dlbmVyYXRlIiwiYnV0dG9uIiwic2NoZW1hRWwiLCJzdGFydHNXaXRoIiwiYnV0dG9uVHJpZ2dlcldyYXBwZXIiLCJidXR0b25UcmlnZ2VyIiwib3B0aW9uUGFydHMiLCJsYWJlbCIsImJ1dHRvbkRyb3Bkb3duQW5jaG9yIiwiaW5saW5lIiwic3R5bGUiLCJkaXNwbGF5IiwibG9nIiwiYXRjYl9nZW5lcmF0ZV9iZ19vdmVybGF5IiwiZGFya2VuIiwiYmdPdmVybGF5IiwidGFiSW5kZXgiLCJlIiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImZpbmdlck1vdmVkIiwia2V5Ym9hcmRUcmlnZ2VyIiwiZ2VuZXJhdGVkQnV0dG9uIiwiY29udGFpbnMiLCJxdWVyeVNlbGVjdG9yIiwibGlzdCIsIm9wdGlvbnNMaXN0Iiwib3B0aW9uSXRlbSIsImF0Y2JfZ2VuZXJhdGVfZHJvcGRvd25fbGlzdCIsImF0Y2JfcG9zaXRpb25fbGlzdCIsImJhY2tncm91bmQiLCJib2R5IiwiYXRjYl9zZXRfZnVsbHNpemUiLCJmaXJzdENoaWxkIiwibmV3Rm9jdXNFbCIsIkFycmF5IiwiZnJvbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbCIsIm5vdyIsInRvSVNPU3RyaW5nIiwidGltZXNsb3QiLCJpY3NfbGluZXMiLCJwdXNoIiwiZGx1cmwiLCJqb2luIiwiZmlsZW5hbWUiLCJpQ2FsRmlsZU5hbWUiLCJ0bXBJbnB1dCIsImVkaXRhYmxlIiwiY29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ2YWx1ZSIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInNldFNlbGVjdGlvblJhbmdlIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJidXR0b25zIiwiaGVhZGxpbmUiLCJjb250ZW50IiwiaW5mb01vZGFsV3JhcHBlciIsInBhcmVudEJ1dHRvbiIsImdldEVsZW1lbnRCeUlkIiwiaW5mb01vZGFsIiwiaW5mb01vZGFsSGVhZGxpbmUiLCJpbmZvTW9kYWxDb250ZW50IiwiaW5kZXgiLCJpbmZvTW9kYWxCdXR0b24iLCJhdGNiX2NyZWF0ZV9tb2RhbCIsIkFjdGl2ZVhPYmplY3QiLCJfd2luZG93IiwiY2xvc2UiLCJzYXZlIiwiaHJlZiIsImRvd25sb2FkIiwiZXZ0IiwiTW91c2VFdmVudCIsInZpZXciLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRpc3BhdGNoRXZlbnQiLCJVUkwiLCJ3ZWJraXRVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJ0YXJnZXRDYWwiLCJhZGRUaW1lWm9uZU9mZnNldCIsInRpbWVab25lT2Zmc2V0IiwidGltZVpvbmUiLCJ1dGNEYXRlIiwidG9Mb2NhbGVTdHJpbmciLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0ekRhdGUiLCJjYWxjT2Zmc2V0Iiwic2V0VGltZSIsInR6T2Zmc2V0U3RhcnQiLCJ0ek9mZnNldEVuZCIsInRvU3RyaW5nIiwic2xpY2UiLCJicmVha1N0YXJ0IiwiVVRDIiwiYnJlYWtFbmQiLCJ0aHJvd0Vycm9yIiwiYW5jaG9yU2V0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibmV4dFNpYmxpbmciLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJ0b3AiLCJzY3JvbGxZIiwiYm90dG9tIiwibGVmdCIsImlubmVyV2lkdGgiLCJoZWlnaHQiLCJpbm5lckhlaWdodCIsImZ1bmMiLCJ0aW1lciIsIl90aGlzIiwidGltZW91dCIsIl9sZW4iLCJhcmdzIiwiX2tleSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJhcHBseSIsIl90aGlzMiIsIl9sZW4yIiwiX2tleTIiLCJyZXN1bHQiLCJfdGhpczMiLCJkZWxheSIsInByZXZpb3VzIiwibGF0ZXIiLCJfbGVuMyIsIl9rZXkzIiwicmVtYWluaW5nIiwiX2xlbjQiLCJfa2V5NCIsImF0Y2JfdGhyb3R0bGUiLCJhY3RpdmVPdmVybGF5IiwiYWN0aXZlQnV0dG9uIiwiYWN0aXZlTGlzdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJhdGNiX2FjdGlvbiIsInRyaWdnZXJFbGVtZW50IiwiRXJyb3IiLCJpZCIsImF0Y2JfaW5pdCIsImF0Y0J1dHRvbnMiLCJhdGNCdXR0b25zSW5pdGlhbGl6ZWQiLCJpIiwiSlNPTiIsInBhcnNlIiwidHJhbnNsYXRpb25zIiwicmVxdWlyZSIsInNlc3Npb24iLCJ0aW1lem9uZSIsImhvbGRlciIsImNhdHMiLCJtMzYwX3Nlc3Npb25zX2RheSIsIm1ldGFmaWVsZHMiLCJkYXlfZnVsbCIsImh0bWwiLCJkaXYiLCJ0aW1lX3N0YXJ0IiwidGltZV9lbmQiLCJwb3N0X3RpdGxlIiwicG9zdF9jb250ZW50IiwiaW5uZXJUZXh0IiwidGltZV9ub3ciLCJ0aW1lX2V2ZW50IiwiZHRfZGF0ZSIsImNvbnN0YW50cyIsImZpbHRlcmFibGUiLCJsb2NhdGlvbl90YWciLCJ0YWciLCJ0cmFjayIsInBhc3NfdHlwZSIsImVsZW1lbnQiLCJpbmRleE9mIiwib3B0aW9uX2luaXQiLCJpaSIsImNhdHNfdGl0bGVzIiwic2Vzc2lvbkZpbHRlckJ5U2VhcmNoIiwiY3VycmVudF90aW1lem9uZV9kYXRlIiwiY291bnRfaWZyYW1lX2J1dHRvbiIsInNlc3Npb25fZGF0ZSIsImRheSIsImZ1bGxfZGF0ZV9zdGFydCIsImZ1bGxfZGF0ZV9lbmQiLCJ1cGNvbW1pbmciLCJ3YXRjaGluZyIsImZpcnN0IiwidGltZV9sZWZ0IiwiaG91cnMiLCJtaW5zIiwidGltZV9sZWZ0X3NldHRpbmdzIiwiZnVuY3Rpb25fcnVuIiwiX3JlcXVpcmUiLCJjb3VudGVyX2lkIiwic2F2ZWRfdGltZSIsImxhc3RfY291bnRlcl9kaWdpdCIsInNlcnZlcl90aW1lIiwidGhyaXZlX2RhdGEiLCJzZXJ2ZXJfdGltZV8iLCJjdXJyZW50X3RpbWV6b25lX3RpbWUiLCJsb2NhbF90aW1lem9uZV90aW1lIiwic2V0SW50ZXJ2YWwiLCJsb2NhbF90aW1lem9uZV90aW1lX25vdyIsImR0IiwibG9jYWxfdGltZXpvbmVfdGltZV9kdCIsImRkIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwicm9vdF8iLCJ3YXRjaF9ub3dfYnV0dG9uIiwic3RycmVzdWx0IiwiY2hpbGRyZW4iLCJleGhpYml0b3JfbG9jYXRpb24iLCJleGhpYml0b3JfcHJvZHVjdCIsIm9wdGlvbkNsaWNrIiwiYWN0aXZlIiwicGFyZW50Tm9kZSIsImVlIiwiZXhoaWJpdG9yRmlsdGVyQnlTZWFyY2giLCJtdWx0aXBsZSIsInBsYXlZb3NwYWNlVmlkZW9JZCIsInNlYXJjaCIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2hlcyIsImVuZHJlc3VsdCIsIl9sb29wIiwidmlkZW9faWQiLCJleGVjIiwiYWxsX3BhcnRzIiwibm8iLCJzcGxpdHRlZCIsInN0YXJ0X3RleHQiLCJlbGVtZW50VG9wIiwiZWxlbWVudF90Iiwic3JjIiwic2V0X2FjdGl2ZV9kYXkiLCJhY3RpdmVfZGF5IiwiYWN0aXZhdGVfZWwiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZGF5cyIsInNvcnQiLCJhIiwiYiIsImdldFJlbGF0ZWRTcGVha2VycyIsImdldFJlbGF0ZWRTcG9uc29ycyIsImdldE1lZGlhZGF0YSIsImFkZFRvQ2FsZW5kYXIiLCJwbGF5WW9zcGFjZVZpZGVvVXJsIiwicGxheUlmcmFtZVVybCIsImV4dHJhY3RWaWRlb0lkIiwid3BCdXR0b24iLCJjb3VudGVyQ2hlY2siLCJjb25maWciLCJsaW5rc19saXZlIiwibG9jYXRpb25fdG9fc3RyZWFtX2xpbmsiLCJ2aWRlb19hYm92ZV9hZ2VuZGEiLCJ2aWRlb19zdHJlYW1fY291bnRlciIsImNhdF9jb2xvcl90b19iZyIsIm5vQ2xpY2tzIiwiZWxlbWVudHMiLCJlbGVtZW50c19zcG9uc29yIiwiZWxlbWVudHNfc3BlYWtlcnMiLCJlbGVtZW50c19hZ2VuZGEiLCJpbWciLCJzZXNzaW9uX2xvY2F0aW9uIiwic2Vzc2lvbl9wYXNzIiwiY2F0IiwiZXhwYW5kIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJwX2kiLCJ0aHVtYm5haWwiLCJtZWRpYSIsIm1vZGVyYXRvciIsInNwZWFrZXJzIiwic3BlYWtlciIsInNwb25zb3IiLCJzX3RpdGxlIiwic19kYXRhIiwibWV0YSIsInJlbGF0aW9ucyIsIm1vZGVyYXRvcl90aXRsZSIsInNwZWFrZXJfdGl0bGUiLCJjYWxlbmRhciIsInByZWZpeCIsImZyb250X2NvcmVfdmFyIiwic2l0ZV91cmwiLCJsYW5nIiwiY3VycmVudF9sYW5nIiwiZGVmYXVsdF9sYW5nIiwicG9zdF9uYW1lIiwibGlua19lbCIsImxpbmtfZWxlbWVudCIsInNlc3Npb25fc2luZ2xlX2xpbmtfYnV0dG9ucyIsInNlc3Npb25fc2luZ2xlX2xpbmtfYnV0dG9uIiwic2Vzc2lvbl9zaW5nbGVfbGluayIsInRvZ2dsZSIsImNoZWNrIiwiYnV0dG9uX2xpbmtfc3RyZWFtIiwidmlkZW9fZXh0ZXJuYWxfbGluayIsImJ1dHRvbl9saW5rIiwiYnV0dG9uX2xpbmsxIiwidmlkZW9fdXJsIiwiYnV0dG9uX2xpbmsyIiwidmlkZW9faWZyYW1lIiwiYnV0dG9uX2xpbmszIiwiaGlkZGVuIiwiZCIsInRlcm1faWQiLCJkYXRhc2V0IiwiaWZyYW1lX3VybCIsInZpZGVvX2NvbnRhaW5lciIsInZpZGVvX3RhZyIsIkdTTUFWaWRlbyIsInN0b3AiLCJzY3JvbGxUbyIsInlvc3BhY2VfdXJsIiwicGx1Z2luX3VybCIsInZpZGVvUnVuIiwiR1NNQVZpZGVfdXJsIiwiR1NNQVZpZGVvX3RhZyIsIl9kb2N1bWVudCRnZXRFbGVtZW50QiIsIl9kb2N1bWVudCRnZXRFbGVtZW50QjIiLCJmaWx0ZXJfbG9jYXRpb24iLCJmaWx0ZXJfcHJvZHVjdCIsImZpbHRlcl92YWx1ZSIsImFsbF9leGhpYml0b3JzIiwic2hvdyIsInRvTG93ZXJDYXNlIiwiaW5wdXQiLCJjbGVhciIsImNsZWFyRmlsdGVycyIsIl90YWciLCJfdGFnMiIsImNsZWFyQWxsRmlsdGVycyIsInBsYWNlaG9sZGVyIiwiQVoiLCJmaWx0ZXJCeUxldHRlciIsImxldHRlciIsImFsbF9sZXR0ZXJfYmxvY2tzIiwiZmlsdGVyQnlTZWFyY2giLCJzZWFyY2hGaWx0ZXJJdGVtcyIsImxldHRlckZpbHRlckl0ZW1zIiwiX2RvY3VtZW50JGdldEVsZW1lbnRCMyIsIl9kb2N1bWVudCRnZXRFbGVtZW50QjQiLCJmaWx0ZXJfdGhlbWUiLCJmaWx0ZXJfdHJhY2siLCJmaWx0ZXJfcGFzcyIsImFsbF9zZXNzaW9ucyIsInNsb3RzX2FsbCIsImlfcyIsImlzX2hpZGRlbiIsImlpX3MiLCJfdGFnMyIsIl90YWc0IiwidG9VcHBlckNhc2UiLCJvdXRsaW5lIiwiYnV0dG9uX2RpdiIsImV4dGVybmFsX2J1dHRvbiIsIl93aW5kb3ckdGhyaXZlX2RhdGEkIiwidHlwZXMiLCJ2aWRlb19jYXQiLCJzcG9uc29yX2NhdCIsIm0zNjBfc2Vzc2lvbnNfbG9jYXRpb25zIiwibTM2MF9zZXNzaW9uc190YWciLCJtMzYwX3Nlc3Npb25zX3RyYWNrIiwibTM2MF9zZXNzaW9uc19wYXNzIiwibTM2MF9leGhpYml0b3JzX2xvY2F0aW9ucyIsIm0zNjBfZXhoaWJpdG9yc19wcm9kdWN0cyIsImdldE1ldGFkYXRhIiwiZGF0YUluIiwiY29udCIsInNlYXJjaEZpbHRlckV4aGliaXRvcnMiLCJleGhpYml0b3JDYXRlZ29yaWVzRmlsdGVyIiwic3RyaW5naWZ5IiwiZXhfcmVzdWx0cyIsInNpZGViYXIiLCJyZXN0YmFyIiwiZmlsdGVyYm94IiwiY3VycmVudExldHRlciIsImZpcnN0TGV0dGVyIiwidHJpbSIsImlzTmFOIiwiY2kiLCJjaXMiLCJzdGFuZHMiLCJpbWdfZGl2Iiwia2V5c19zdGFuZCIsInN0YW5kQ291bnQiLCJnZXRTaW5nbGVTZXNzaW9uIiwiZ2V0U2Vzc0RhdGVzIiwic2VhcmNoRmlsdGVyIiwiY2F0ZWdvcmllc0ZpbHRlciIsImxpbmtzIiwiZmlsdGVycyIsInNlc3NEYXRlcyIsInVwY29tbWluZ19vbmx5IiwiYWEiLCJiYiIsImxvY2FsZUNvbXBhcmUiLCJjdXJyZW50dGltZSIsInNsb3Rjb250YWluZXIiLCJfZGF0YSRpJG1ldGFmaWVsZHMkY28iLCJ0aW1lc2Vzc2lvbnMiLCJzbG90dGltZSIsInNpbmdsZXNlc3Npb24iLCJjb250YWluZXJrZXlzIiwic2Vzc2lvbkhvbGRlciIsInBlcl9saW5lIiwiY291bnRlciIsImNvbXBhbnkiLCJqb2JUaXRsZSIsImZpZ3VyZSIsImV4cGFuZF9ob2xkZXIiLCJleHBhbmRfaSIsIk1hdGgiLCJmbG9vciIsImFsbF9kYXRhIiwiYWN0aXZlX2V4cGFuZCIsImFsbF9ob2xkZXJzIiwiaWgiLCJleHBhbmRfdG8iLCJ0byIsImNvbXBhbnlOYW1lIiwiZmlsdGVyYm94aW5uZXIiLCJlbGVtZW50X2J5X2xldHRlciIsImNvbnRMZWZ0IiwiY29udFJpZ2h0Iiwid3JhcHBlciIsIm9yZGVyX2NvbXBhbnlOYW1lIiwibGFzdG5hbWUiLCJjYXRzX28iLCJwcmludF9zcG9uc29yIiwic3BvbnNvcl91cmwiLCJzcG9uc29yc19ieV9jYXQiLCJzZWxlY3RlZF9jYXQiLCJjIiwiZGF0YV9jYXRzIiwic2x1ZyIsImNhdGVnb3J5IiwiY2F0X29yZGVyIiwiY2F0X3RpdGxlIiwiYWx0IiwicHJpbnRfdmlkZW8iLCJ2aWRlb2ZpZWxkcyIsInZpZGVvX2RhdGEiLCJ2aWRlb3NfYnlfY2F0IiwiZXMiLCJDbGVhciIsIlJlZ2lzdGVyIiwiVXBjb21pbmciLCJ0cmFuc2xhdGlvbl9saXN0Iiwic3RyX2luIiwic2Vzc2lvbl90ZW1wbGF0ZV9jb3JlIiwic2Vzc2lvbl90ZW1wbGF0ZV9td2NzIiwic2Vzc2lvbl90ZW1wbGF0ZV9td2wiLCJzZXNzaW9uX3RlbXBsYXRlX2ZvdXJfeWZuIiwic3BlYWtlcl90ZW1wbGF0ZSIsInNwZWFrZXJfdGVtcGxhdGVfY29yZSIsInNwZWFrZXJfdGVtcGxhdGVfbXdjcyIsInNwZWFrZXJfdGVtcGxhdGVfbXdsIiwic3BlYWtlcl90ZW1wbGF0ZV9tMzYwIiwic3BlYWtlcl90ZW1wbGF0ZV9mb3VyX3lmbiIsImV4aGliaXRvcl90ZW1wbGF0ZV9td2NzIiwiZXhoaWJpdG9yX3RlbXBsYXRlX2NvcmUiLCJzcG9uc29yX3RlbXBsYXRlX2NvcmUiLCJ2aWRlb190ZW1wbGF0ZV9jb3JlIiwiZnVuY3MiLCJsYXlvdXQiLCJmbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjb3VudGVyVG9MaXZlIiwiZ2V0VG9kYXlTdHJpbmciLCJpc0V2ZW50VG9kYXkiLCJyZXBhaW50QXBwIiwiaW5faSIsInJvb3QiLCJmZXRjaCIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJpbml0Il0sInNvdXJjZVJvb3QiOiIifQ==;