User:Eejit43/scripts/rmtr-helper.js
Appearance
< User:Eejit43 | scripts
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Eejit43/scripts/rmtr-helper. |
// <nowiki>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/rmtr-helper.ts
"use strict";(()=>{mw.loader.using(["mediawiki.util"],()=>{if(mw.config.get("wgPageName")!=="Wikipedia:Requested_moves/Technical_requests")return;importStylesheet("User:Eejit43/scripts/rmtr-helper.css");let b=mw.config.get("wgNamespaceIds"),k=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async I=>{if(I.preventDefault(),k)return document.querySelector("#rmtr-review-result")?.scrollIntoView();k=!0;let L=await T(),P=L.revid,N=L.slots.main.content,y=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],S=y[2],j=y[3],m={};function O(a){let t=[],n=["[","{"],l=["]","}"],s=!1,r="";for(let i=0;i<a.length;i++){let c=a[i],o=a[i+1];if(c==="|"&&!s||i===a.length-1){t.push(r),r="";continue}r+=c,n.some(d=>d===c&&d===o)?s=!0:l.some(d=>d===c&&d===o)&&(s=!1)}let e={};for(let[i,c]of t.entries()){let o=c.split("=").map(d=>d.trim());o.length===1&&o.unshift((i+1).toString()),e[o.shift()]=o.join("=")}return console.log(a,e),e}for(let a of y){let n=N.split(new RegExp(`={3,} ?${a} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)m[a]=n.map(l=>{l=l.trim();let s=O(l.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core\s*\||}}(?![^\n]*}}).*/gis,""));return s.full=l,s.original=s[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",s.destination=s[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",s.requester||(s.requester=s.sig?.match(/\[\[User:(.*?)(\||]])/)?.[1].trim()),delete s[1],delete s[2],s});else{m[a]=[];continue}}await Promise.all(Object.entries(m).map(async([,a])=>{await Promise.all(a.map(async t=>{let n=mw.Title.newFromText(t.original),l=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!l)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});let s=!/[#<>[\]{|}]/.test(t.destination)&&l,r=document.createElement("span");r.classList.add("rmtr-review-invalid-warning"),r.textContent=`Invalid title "${t.destination}"!`;let e=![b.file,b.category].some(u=>n.getNamespaceId()===u||l.getNamespaceId()===u),i=document.createElement("span");i.classList.add("rmtr-review-invalid-warning"),i.textContent=`Warning: original or destination page is in namespace "${l.getNamespaceId()===b.file?"file":"category"}"!`;let c=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${s?`[[:${t.destination}]]`:r.outerHTML} requested by ${t.requester?mw.util.isIPAddress(t.requester)?`[[Special:Contributions/${t.requester}|${t.requester}]]`:`[[User:${t.requester}|${t.requester}]]`:/(\[{2}Special:Contributions\/(.*?)\|\2]{2})/.exec(t.sig)?.[1]??"(unknown)"} with reasoning "${t.reason}"`),o=new DOMParser().parseFromString(c,"text/html"),d=document.createElement("li");d.innerHTML=o.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||d.append(i),t.element=d}))}));let f=document.createElement("div");f.id="rmtr-review-result";let x=document.createElement("div");x.id="rmtr-review-header",x.textContent="Technical move requests review",f.append(x);for(let[a,[t,n]]of Object.entries(m).entries()){let l=document.createElement("div");l.classList.add("rmtr-review-header"),l.textContent=t,f.append(l);let s=document.createElement("div");if(s.classList.add("rmtr-review-section-content"),n.length===0){let r=document.createElement("div");r.textContent="No requests in this section",s.append(r)}else{let r=document.createElement("ul");for(let[e,i]of n.entries()){let c=i.element,o=document.createElement("input");o.type="checkbox",o.classList.add("rmtr-review-request-checkbox"),o.id=`rmtr-review-remove-request-${a}-${e}`,o.addEventListener("change",()=>{o.checked?(m[t][e].result={remove:!0,reason:R.value},u.style.display="inline",v.disabled=!0):(delete m[t][e].result,u.style.display="none",v.disabled=!1)});let d=document.createElement("label");d.htmlFor=`rmtr-review-remove-request-${a}-${e}`,d.textContent="Remove request",c.append(o),c.append(d);let u=document.createElement("span");u.style.display="none",u.append(document.createTextNode(" as "));let R=document.createElement("select");t==="Contested technical requests"&&(R.value="Contested"),R.addEventListener("change",()=>{m[t][e].result.reason=R.value});let A=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Not done"];for(let h of A){let g=document.createElement("option");g.value=h,g.textContent=h,R.append(g)}u.append(R),c.append(u);let v=document.createElement("input");v.type="checkbox",v.classList.add("rmtr-review-request-checkbox"),v.id=`rmtr-review-move-request-${a}-${e}`,v.addEventListener("change",()=>{v.checked?(m[t][e].result={move:!0,section:q.value},p.style.display="inline",o.disabled=!0):(delete m[t][e].result,p.style.display="none",o.disabled=!1)});let C=document.createElement("label");C.htmlFor=`rmtr-review-move-request-${a}-${e}`,C.textContent="Switch section",c.append(v),c.append(C);let p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" to "));let q=document.createElement("select");q.addEventListener("change",()=>{m[t][e].result.section=q.value});for(let h of y){if(h===t)continue;let g=document.createElement("option");g.selected=h===(t===S?j:S),g.value=h,g.textContent=h,q.append(g)}p.append(q),p.append(document.createTextNode(" with reasoning "));let E=document.createElement("input");E.type="text",E.addEventListener("input",()=>{m[t][e].result.reason=E.value}),p.append(E),p.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),c.append(p),r.append(c)}s.append(r)}f.append(s)}let w=document.createElement("button");w.id="rmtr-review-submit",w.textContent="Submit",w.addEventListener("click",async()=>{if((await T()).revid!==P)return mw.notify("rmtr-helper: An edit conflict occurred, please start over!",{type:"error"});w.disabled=!0,$.style.display="inline-block";let t=N,n={remove:{},move:{},total:0};for(let r of Object.values(m))for(let e of r)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),e.result.reason in n.remove||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){let i=y[y.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${i} ?={3,}|$))`),`
${e.full}${e.result.reason?`
:: ${e.requester&&e.requester.length>0?mw.util.isIPAddress(e.requester)?"":`@[[User:${e.requester}|${e.requester}]] `:""} ${e.result.reason} ~~~~`:""}$1`),e.result.section in n.move||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return w.disabled=!1,$.style.display="none",mw.notify("No changes to make!",{type:"error"});let l=Object.values(m).every(r=>r.every(e=>e.result&&"remove"in e.result)),s=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([r,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} as ${r.toLowerCase()}`).join(", ")}`:""}${Object.entries(n.move).length>0?`${Object.entries(n.remove).length>0?", ":""}Moved ${Object.entries(n.move).map(([r,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} to "${r}"`).join(", ")}`:""}${l?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:s})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),window.location.reload()});let $=document.createElement("span");$.id="rmtr-review-loading",$.style.display="none",w.append($),f.append(w),mw.util.$content[0].prepend(f),f.scrollIntoView()})});async function T(){return(await new mw.Api().get({action:"query",formatversion:"2",prop:"revisions",rvprop:["content","ids"],rvslots:"main",titles:mw.config.get("wgPageName")})).query.pages[0].revisions[0]}})();
// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9ybXRyLWhlbHBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyB9IGZyb20gJ3R5cGVzLW1lZGlhd2lraS9hcGlfcGFyYW1zJztcbmltcG9ydCB0eXBlIHsgUGFnZVJldmlzaW9uc1Jlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC10eXBlcyc7XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBpZiAobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpICE9PSAnV2lraXBlZGlhOlJlcXVlc3RlZF9tb3Zlcy9UZWNobmljYWxfcmVxdWVzdHMnKSByZXR1cm47XG5cbiAgICBpbXBvcnRTdHlsZXNoZWV0KCdVc2VyOkVlaml0NDMvc2NyaXB0cy9ybXRyLWhlbHBlci5jc3MnKTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpO1xuXG4gICAgbGV0IGRpc3BsYXllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGluayA9IG13LnV0aWwuYWRkUG9ydGxldExpbmsoXG4gICAgICAgIG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnID8gJ3AtdGInIDogJ3AtY2FjdGlvbnMnLFxuICAgICAgICAnIycsXG4gICAgICAgICdSZXZpZXcgbW92ZSByZXF1ZXN0cycsXG4gICAgICAgICdyZXZpZXctcm10ci1yZXF1ZXN0cycsXG4gICAgKSE7XG5cbiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKGRpc3BsYXllZCkgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNybXRyLXJldmlldy1yZXN1bHQnKT8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgZWxzZSBkaXNwbGF5ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VSZXZpc2lvbiA9IGF3YWl0IGdldFBhZ2VSZXZpc2lvbigpO1xuXG4gICAgICAgIGNvbnN0IHJldklkID0gcGFnZVJldmlzaW9uLnJldmlkO1xuICAgICAgICBjb25zdCBwYWdlQ29udGVudCA9IHBhZ2VSZXZpc2lvbi5zbG90cy5tYWluLmNvbnRlbnQ7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgICAnVW5jb250cm92ZXJzaWFsIHRlY2huaWNhbCByZXF1ZXN0cycsXG4gICAgICAgICAgICAnUmVxdWVzdHMgdG8gcmV2ZXJ0IHVuZGlzY3Vzc2VkIG1vdmVzJyxcbiAgICAgICAgICAgICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJyxcbiAgICAgICAgICAgICdBZG1pbmlzdHJhdG9yIG5lZWRlZCcsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdE1vdmVTZWN0aW9uID0gc2VjdGlvbnNbMl07XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uID0gc2VjdGlvbnNbM107XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgICAgICAgc2lnOiBzdHJpbmc7XG4gICAgICAgICAgICByZXF1ZXN0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudDogSFRNTExJRWxlbWVudDtcbiAgICAgICAgICAgIHJlc3VsdD86IFJlcXVlc3RSZXN1bHRNb3ZlIHwgUmVxdWVzdFJlc3VsdFJlbW92ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0TW92ZSB7XG4gICAgICAgICAgICBtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgc2VjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRSZW1vdmUge1xuICAgICAgICAgICAgcmVtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPiA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgdGhlIHBhcmFtZXRlcnMgb2YgYSBnaXZlbiBXaWtpdGV4dCB0ZW1wbGF0ZS5cbiAgICAgICAgICogQHBhcmFtIHRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0byBwYXJzZS5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVQYXJhbWV0ZXJzKHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1BhcmFtZXRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWRTdGFydFN5bWJvbHMgPSBbJ1snLCAneyddO1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZEVuZFN5bWJvbHMgPSBbJ10nLCAnfSddO1xuXG4gICAgICAgICAgICBsZXQgaW5zaWRlTGlua09yVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGV4dCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGVtcGxhdGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gdGVtcGxhdGVbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyYWN0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRlbXBsYXRlW2luZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgICBpZiAoKGNoYXJhY3RlciA9PT0gJ3wnICYmICFpbnNpZGVMaW5rT3JUZW1wbGF0ZSkgfHwgaW5kZXggPT09IHRlbXBsYXRlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmF3UGFyYW1ldGVycy5wdXNoKGN1cnJlbnRUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCArPSBjaGFyYWN0ZXI7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZFN0YXJ0U3ltYm9scy5zb21lKChzeW1ib2wpID0+IHN5bWJvbCA9PT0gY2hhcmFjdGVyICYmIHN5bWJvbCA9PT0gbmV4dENoYXJhY3RlcikpIGluc2lkZUxpbmtPclRlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpZ25vcmVkRW5kU3ltYm9scy5zb21lKChzeW1ib2wpID0+IHN5bWJvbCA9PT0gY2hhcmFjdGVyICYmIHN5bWJvbCA9PT0gbmV4dENoYXJhY3RlcikpIGluc2lkZUxpbmtPclRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHBhcmFtZXRlcl0gb2YgcmF3UGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhcmFtZXRlciA9IHBhcmFtZXRlci5zcGxpdCgnPScpLm1hcCgodmFsdWUpID0+IHZhbHVlLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRQYXJhbWV0ZXIubGVuZ3RoID09PSAxKSBzcGxpdFBhcmFtZXRlci51bnNoaWZ0KChpbmRleCArIDEpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tzcGxpdFBhcmFtZXRlci5zaGlmdCgpIV0gPSBzcGxpdFBhcmFtZXRlci5qb2luKCc9Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRlbXBsYXRlLCBwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Db250ZW50ID0gcGFnZUNvbnRlbnRcbiAgICAgICAgICAgICAgICAuc3BsaXQobmV3IFJlZ0V4cChgPXszLH0gPyR7c2VjdGlvbn0gPz17Myx9YCkpWzFdXG4gICAgICAgICAgICAgICAgLnNwbGl0KC89ezMsfS9tKVswXVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRSZXF1ZXN0cyA9IHNlY3Rpb25Db250ZW50Lm1hdGNoKC8oPzpcXCogP1xcbik/WyAqOl0qe3tybWFzc2lzdFxcL2NvcmUuKz8oPz1bICo6XSp7e3JtYXNzaXN0XFwvY29yZXwkKS9naXMpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFJlcXVlc3RzKVxuICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dID0gbWF0Y2hlZFJlcXVlc3RzLm1hcCgocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC50cmltKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHBhcnNlVGVtcGxhdGVQYXJhbWV0ZXJzKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXBsYWNlQWxsKC8oPzpcXCogP1xcbik/WyAqOl0qe3tybWFzc2lzdFxcL2NvcmVcXHMqXFx8fH19KD8hW15cXG5dKn19KS4qL2dpcywgJycpLFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZnVsbCA9IHJlcXVlc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5vcmlnaW5hbCA9IHBhcmFtZXRlcnNbMV0/LnJlcGxhY2UoL15cXFsrLywgJycpLnJlcGxhY2UoL10rJC8sICcnKSA/PyAnVU5LTk9XTic7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVzdGluYXRpb24gPSBwYXJhbWV0ZXJzWzJdPy5yZXBsYWNlKC9eXFxbKy8sICcnKS5yZXBsYWNlKC9dKyQvLCAnJykgPz8gJ1VOS05PV04nO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1ldGVycy5yZXF1ZXN0ZXIpIHBhcmFtZXRlcnMucmVxdWVzdGVyID0gcGFyYW1ldGVycy5zaWc/Lm1hdGNoKC9cXFtcXFtVc2VyOiguKj8pKFxcfHxdXSkvKT8uWzFdLnRyaW0oKTtcblxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtZXRlcnNbMl07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl0gPSBbXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYWxsUmVxdWVzdHMpLm1hcChhc3luYyAoWywgcmVxdWVzdHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLm1hcChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdPbGRUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHJlcXVlc3Qub3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdOZXdUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHJlcXVlc3QuZGVzdGluYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW13T2xkVGl0bGUpIHJldHVybiBtdy5ub3RpZnkoYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3Qub3JpZ2luYWx9XCIhYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtd05ld1RpdGxlKSByZXR1cm4gbXcubm90aWZ5KGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0LmRlc3RpbmF0aW9ufVwiIWAsIHsgdHlwZTogJ2Vycm9yJyB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRUaXRsZSA9ICEvWyM8PltcXF17fH1dLy50ZXN0KHJlcXVlc3QuZGVzdGluYXRpb24pICYmIG13TmV3VGl0bGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWRUaXRsZVdhcm5pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVGl0bGVXYXJuaW5nLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWludmFsaWQtd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFRpdGxlV2FybmluZy50ZXh0Q29udGVudCA9IGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0LmRlc3RpbmF0aW9ufVwiIWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkTmFtZXNwYWNlID0gIVtuYW1lc3BhY2VzLmZpbGUsIG5hbWVzcGFjZXMuY2F0ZWdvcnldLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWVzcGFjZSkgPT4gbXdPbGRUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2UgfHwgbXdOZXdUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkTmFtZXNwYWNlV2FybmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWROYW1lc3BhY2VXYXJuaW5nLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWludmFsaWQtd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcudGV4dENvbnRlbnQgPSBgV2FybmluZzogb3JpZ2luYWwgb3IgZGVzdGluYXRpb24gcGFnZSBpcyBpbiBuYW1lc3BhY2UgXCIke213TmV3VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlcy5maWxlID8gJ2ZpbGUnIDogJ2NhdGVnb3J5J31cIiFgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRXaWtpdGV4dCA9IGF3YWl0IG5ldyBtdy5BcGkoKS5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgW1s6JHtyZXF1ZXN0Lm9yaWdpbmFsfV1dIFx1MjE5MiAke3ZhbGlkVGl0bGUgPyBgW1s6JHtyZXF1ZXN0LmRlc3RpbmF0aW9ufV1dYCA6IGludmFsaWRUaXRsZVdhcm5pbmcub3V0ZXJIVE1MfSByZXF1ZXN0ZWQgYnkgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbXcudXRpbC5pc0lQQWRkcmVzcyhyZXF1ZXN0LnJlcXVlc3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGBbW1NwZWNpYWw6Q29udHJpYnV0aW9ucy8ke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYFtbVXNlcjoke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoLyhcXFt7Mn1TcGVjaWFsOkNvbnRyaWJ1dGlvbnNcXC8oLio/KVxcfFxcMl17Mn0pLy5leGVjKHJlcXVlc3Quc2lnKT8uWzFdID8/ICcodW5rbm93biknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2l0aCByZWFzb25pbmcgXCIke3JlcXVlc3QucmVhc29ufVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwYXJzZWRXaWtpdGV4dCwgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBwYXJzZWRIdG1sLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5tdy1wYXJzZXItb3V0cHV0JykhLmZpcnN0RWxlbWVudENoaWxkIS5pbm5lckhUTUwhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkTmFtZXNwYWNlKSByZXF1ZXN0RWxlbWVudC5hcHBlbmQoaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmVsZW1lbnQgPSByZXF1ZXN0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgb3V0cHV0RWxlbWVudC5pZCA9ICdybXRyLXJldmlldy1yZXN1bHQnO1xuXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBoZWFkZXIuaWQgPSAncm10ci1yZXZpZXctaGVhZGVyJztcbiAgICAgICAgaGVhZGVyLnRleHRDb250ZW50ID0gJ1RlY2huaWNhbCBtb3ZlIHJlcXVlc3RzIHJldmlldyc7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoaGVhZGVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzZWN0aW9uSW5kZXgsIFtzZWN0aW9uLCByZXF1ZXN0c11dIG9mIE9iamVjdC5lbnRyaWVzKGFsbFJlcXVlc3RzKS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaGVhZGVyJyk7XG4gICAgICAgICAgICBzZWN0aW9uSGVhZGVyLnRleHRDb250ZW50ID0gc2VjdGlvbjtcblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkhlYWRlcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Db250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzZWN0aW9uQ29udGVudC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1zZWN0aW9uLWNvbnRlbnQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vUmVxdWVzdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBub1JlcXVlc3RzLnRleHRDb250ZW50ID0gJ05vIHJlcXVlc3RzIGluIHRoaXMgc2VjdGlvbic7XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQobm9SZXF1ZXN0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SW5kZXgsIHJlcXVlc3RdIG9mIHJlcXVlc3RzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3QuZWxlbWVudDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0Q2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1yZW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVSZXF1ZXN0Q2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0ID0geyByZW1vdmU6IHRydWUsIHJlYXNvbjogcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC5odG1sRm9yID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0TGFiZWwudGV4dENvbnRlbnQgPSAnUmVtb3ZlIHJlcXVlc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0Q2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdExhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyBhcyAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAnQ29udGVzdGVkIHRlY2huaWNhbCByZXF1ZXN0cycpIHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZSA9ICdDb250ZXN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlc3RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWxyZWFkeSBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIHBhZ2UgbmFtZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IHZlbnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdXaXRoZHJhd24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05vdCBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLmFwcGVuZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQocmVtb3ZlUmVxdWVzdERyb3Bkb3duKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uQ2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1tb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3dpdGNoU2VjdGlvbkNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkxhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uTGFiZWwudGV4dENvbnRlbnQgPSAnU3dpdGNoIHNlY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uQ2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkxhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyB0byAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkRyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpLnNlY3Rpb24gPSBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSBzZWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID09PSAoc2VjdGlvbiA9PT0gZGVmYXVsdE1vdmVTZWN0aW9uID8gZmFsbGJhY2tEZWZhdWx0TW92ZVNlY3Rpb24gOiBkZWZhdWx0TW92ZVNlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hcHBlbmQob3B0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKHN3aXRjaFNlY3Rpb25Ecm9wZG93bik7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIHdpdGggcmVhc29uaW5nICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvblJlYXNvbmluZy50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHN3aXRjaFNlY3Rpb25SZWFzb25pbmcudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoc3dpdGNoU2VjdGlvblJlYXNvbmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIChvcHRpb25hbCwgYXV0b21hdGljYWxseSBwaW5ncyByZXF1ZXN0b3IgYW5kIHNpZ25zKScpKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0c0xpc3QuYXBwZW5kKHJlcXVlc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQocmVxdWVzdHNMaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkNvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5pZCA9ICdybXRyLXJldmlldy1zdWJtaXQnO1xuICAgICAgICBzdWJtaXRCdXR0b24udGV4dENvbnRlbnQgPSAnU3VibWl0JztcbiAgICAgICAgc3VibWl0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZVJldmlzaW9uID0gYXdhaXQgZ2V0UGFnZVJldmlzaW9uKCk7XG5cbiAgICAgICAgICAgIGlmIChuZXdQYWdlUmV2aXNpb24ucmV2aWQgIT09IHJldklkKVxuICAgICAgICAgICAgICAgIHJldHVybiBtdy5ub3RpZnkoJ3JtdHItaGVscGVyOiBBbiBlZGl0IGNvbmZsaWN0IG9jY3VycmVkLCBwbGVhc2Ugc3RhcnQgb3ZlciEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG5cbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cbiAgICAgICAgICAgIGxldCBlbmRSZXN1bHQgPSBwYWdlQ29udGVudDtcblxuICAgICAgICAgICAgaW50ZXJmYWNlIEFsbENoYW5nZXMge1xuICAgICAgICAgICAgICAgIHJlbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICBtb3ZlOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0W10+O1xuICAgICAgICAgICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXM6IEFsbENoYW5nZXMgPSB7IHJlbW92ZToge30sIG1vdmU6IHt9LCB0b3RhbDogMCB9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc3VsdCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0LnJlc3VsdC5yZWFzb24gaW4gY2hhbmdlcy5yZW1vdmUpKSBjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ21vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uVGl0bGVBZnRlciA9IHNlY3Rpb25zW3NlY3Rpb25zLmluZGV4T2YocmVxdWVzdC5yZXN1bHQuc2VjdGlvbikgKyAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UocmVxdWVzdC5mdWxsICsgJ1xcbicsICcnKS5yZXBsYWNlKHJlcXVlc3QuZnVsbCwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgKFxcbj9cXG4/KD86PXszLH0gPyR7c2VjdGlvblRpdGxlQWZ0ZXJ9ID89ezMsfXwkKSlgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFxuJHtyZXF1ZXN0LmZ1bGx9JHtyZXF1ZXN0LnJlc3VsdC5yZWFzb24gPyBgXFxuOjogJHtyZXF1ZXN0LnJlcXVlc3RlciAmJiByZXF1ZXN0LnJlcXVlc3Rlci5sZW5ndGggPiAwID8gKG13LnV0aWwuaXNJUEFkZHJlc3MocmVxdWVzdC5yZXF1ZXN0ZXIpID8gJycgOiBgQFtbVXNlcjoke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dIGApIDogJyd9ICR7cmVxdWVzdC5yZXN1bHQucmVhc29ufSB+fn5+YCA6ICcnfSQxYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uIGluIGNoYW5nZXMubW92ZSkpIGNoYW5nZXMubW92ZVtyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0ucHVzaChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMudG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoYW5nZXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIHJldHVybiBtdy5ub3RpZnkoJ05vIGNoYW5nZXMgdG8gbWFrZSEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vUmVtYWluaW5nID0gT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykuZXZlcnkoKHNlY3Rpb24pID0+XG4gICAgICAgICAgICAgICAgc2VjdGlvbi5ldmVyeSgocmVxdWVzdCkgPT4gcmVxdWVzdC5yZXN1bHQgJiYgJ3JlbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZWRpdFN1bW1hcnkgPSBgSGFuZGxlZCAke2NoYW5nZXMudG90YWx9IHJlcXVlc3Qke2NoYW5nZXMudG90YWwgPiAxID8gJ3MnIDogJyd9OiAke1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYFJlbW92ZWQgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoW3JlYXNvbiwgcGFnZXNdKSA9PiBgJHtwYWdlcy5tYXAoKHBhZ2UpID0+IGBbWyR7cGFnZS5vcmlnaW5hbH1dXWApLmpvaW4oJywgJyl9IGFzICR7cmVhc29uLnRvTG93ZXJDYXNlKCl9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9JHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzLm1vdmUpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSkubGVuZ3RoID4gMCA/ICcsICcgOiAnJ31Nb3ZlZCAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMubW92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2Rlc3RpbmF0aW9uLCBwYWdlc10pID0+IGAke3BhZ2VzLm1hcCgocGFnZSkgPT4gYFtbJHtwYWdlLm9yaWdpbmFsfV1dYCkuam9pbignLCAnKX0gdG8gXCIke2Rlc3RpbmF0aW9ufVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9JHtub1JlbWFpbmluZyA/ICcgKG5vIHJlcXVlc3RzIHJlbWFpbiknIDogJyd9ICh2aWEgW1tVc2VyOkVlaml0NDMvc2NyaXB0cy9ybXRyLWhlbHBlcnxzY3JpcHRdXSlgO1xuXG4gICAgICAgICAgICBhd2FpdCBuZXcgbXcuQXBpKCkuZWRpdChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksICgpID0+ICh7IHRleHQ6IGVuZFJlc3VsdCwgc3VtbWFyeTogZWRpdFN1bW1hcnkgfSkpO1xuXG4gICAgICAgICAgICBtdy5ub3RpZnkoYFN1Y2Nlc3NmdWxseSBoYW5kbGVkICR7Y2hhbmdlcy50b3RhbH0gcmVxdWVzdHMsIHJlbG9hZGluZy4uLmAsIHsgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xuXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGxvYWRpbmdTcGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBsb2FkaW5nU3Bpbm5lci5pZCA9ICdybXRyLXJldmlldy1sb2FkaW5nJztcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICBzdWJtaXRCdXR0b24uYXBwZW5kKGxvYWRpbmdTcGlubmVyKTtcblxuICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzdWJtaXRCdXR0b24pO1xuXG4gICAgICAgIG13LnV0aWwuJGNvbnRlbnRbMF0ucHJlcGVuZChvdXRwdXRFbGVtZW50KTtcblxuICAgICAgICBvdXRwdXRFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfSk7XG59KTtcblxuLyoqXG4gKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGEgd2lraSBwYWdlJ3MgbGF0ZXN0IHJldmlzaW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQYWdlUmV2aXNpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGF3YWl0IG5ldyBtdy5BcGkoKS5nZXQoe1xuICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgZm9ybWF0dmVyc2lvbjogJzInLFxuICAgICAgICAgICAgcHJvcDogJ3JldmlzaW9ucycsXG4gICAgICAgICAgICBydnByb3A6IFsnY29udGVudCcsICdpZHMnXSxcbiAgICAgICAgICAgIHJ2c2xvdHM6ICdtYWluJyxcbiAgICAgICAgICAgIHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcykpIGFzIFBhZ2VSZXZpc2lvbnNSZXN1bHRcbiAgICApLnF1ZXJ5IS5wYWdlc1swXS5yZXZpc2lvbnNbMF07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7bUJBR0EsR0FBRyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRyxJQUFNLENBQ3RDLEdBQUksR0FBRyxPQUFPLElBQUksWUFBWSxJQUFNLCtDQUFnRCxPQUVwRixpQkFBaUIsc0NBQXNDLEVBRXZELElBQU1BLEVBQWEsR0FBRyxPQUFPLElBQUksZ0JBQWdCLEVBRTdDQyxFQUFZLEdBRUgsR0FBRyxLQUFLLGVBQ2pCLEdBQUcsT0FBTyxJQUFJLE1BQU0sSUFBTSxVQUFZLE9BQVMsYUFDL0MsSUFDQSx1QkFDQSxzQkFDSixF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RUFBYyxPQUFPb0IsQ0FBWSxFQUVqQyxHQUFHLEtBQUssU0FBUyxDQUFDLEVBQUUsUUFBUXBCLENBQWEsRUFFekNBLEVBQWMsZUFBZSxDQUNqQyxDQUFDLENBQ0wsQ0FBQyxFQUtELGVBQWVwQyxHQUFrQixDQUM3QixPQUNLLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLENBQ3BCLE9BQVEsUUFDUixjQUFlLElBQ2YsS0FBTSxZQUNOLE9BQVEsQ0FBQyxVQUFXLEtBQUssRUFDekIsUUFBUyxPQUNULE9BQVEsR0FBRyxPQUFPLElBQUksWUFBWSxDQUN0QyxDQUFtQyxHQUNyQyxNQUFPLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUNqQyIsCiAgIm5hbWVzIjogWyJuYW1lc3BhY2VzIiwgImRpc3BsYXllZCIsICJldmVudCIsICJwYWdlUmV2aXNpb24iLCAiZ2V0UGFnZVJldmlzaW9uIiwgInJldklkIiwgInBhZ2VDb250ZW50IiwgInNlY3Rpb25zIiwgImRlZmF1bHRNb3ZlU2VjdGlvbiIsICJmYWxsYmFja0RlZmF1bHRNb3ZlU2VjdGlvbiIsICJhbGxSZXF1ZXN0cyIsICJwYXJzZVRlbXBsYXRlUGFyYW1ldGVycyIsICJ0ZW1wbGF0ZSIsICJyYXdQYXJhbWV0ZXJzIiwgImlnbm9yZWRTdGFydFN5bWJvbHMiLCAiaWdub3JlZEVuZFN5bWJvbHMiLCAiaW5zaWRlTGlua09yVGVtcGxhdGUiLCAiY3VycmVudFRleHQiLCAiaW5kZXgiLCAiY2hhcmFjdGVyIiwgIm5leHRDaGFyYWN0ZXIiLCAic3ltYm9sIiwgInBhcmFtZXRlcnMiLCAicGFyYW1ldGVyIiwgInNwbGl0UGFyYW1ldGVyIiwgInZhbHVlIiwgInNlY3Rpb24iLCAibWF0Y2hlZFJlcXVlc3RzIiwgInJlcXVlc3QiLCAicmVxdWVzdHMiLCAibXdPbGRUaXRsZSIsICJtd05ld1RpdGxlIiwgInZhbGlkVGl0bGUiLCAiaW52YWxpZFRpdGxlV2FybmluZyIsICJ2YWxpZE5hbWVzcGFjZSIsICJuYW1lc3BhY2UiLCAiaW52YWxpZE5hbWVzcGFjZVdhcm5pbmciLCAicGFyc2VkV2lraXRleHQiLCAicGFyc2VkSHRtbCIsICJyZXF1ZXN0RWxlbWVudCIsICJvdXRwdXRFbGVtZW50IiwgImhlYWRlciIsICJzZWN0aW9uSW5kZXgiLCAic2VjdGlvbkhlYWRlciIsICJzZWN0aW9uQ29udGVudCIsICJub1JlcXVlc3RzIiwgInJlcXVlc3RzTGlzdCIsICJyZXF1ZXN0SW5kZXgiLCAicmVtb3ZlUmVxdWVzdENoZWNrYm94IiwgInJlbW92ZVJlcXVlc3REcm9wZG93biIsICJyZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMiLCAic3dpdGNoU2VjdGlvbkNoZWNrYm94IiwgInJlbW92ZVJlcXVlc3RMYWJlbCIsICJyZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zIiwgIm9wdGlvbiIsICJvcHRpb25FbGVtZW50IiwgInN3aXRjaFNlY3Rpb25Ecm9wZG93biIsICJzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMiLCAic3dpdGNoU2VjdGlvbkxhYmVsIiwgInN3aXRjaFNlY3Rpb25SZWFzb25pbmciLCAic3VibWl0QnV0dG9uIiwgImxvYWRpbmdTcGlubmVyIiwgImVuZFJlc3VsdCIsICJjaGFuZ2VzIiwgInNlY3Rpb25UaXRsZUFmdGVyIiwgIm5vUmVtYWluaW5nIiwgImVkaXRTdW1tYXJ5IiwgInJlYXNvbiIsICJwYWdlcyIsICJwYWdlIiwgImRlc3RpbmF0aW9uIl0KfQo=