Jump to content

User:Eejit43/scripts/rmtr-helper.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <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");const x=mw.config.get("wgNamespaceIds");let N=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async a=>{if(a.preventDefault(),N)return document.querySelector("#rmtr-review-result")?.scrollIntoView();N=!0;const w=await getPageRevision(),$=w.revid,f=w.slots.main.content,u=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],o={};for(const l of u){const n=f.split(new RegExp(`={3,} ?${l} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)o[l]=n.map(i=>{i=i.trim();const m=i,s=i.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core \||}}.*/gis,"").split(/\s*\|\s*/).map(r=>r.trim()),e=Object.fromEntries(s.map(r=>r.split(" = ").map(c=>c.trim())));return e.full=m,e.original=e[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",e.destination=e[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",delete e[1],delete e[2],e});else{o[l]=[];continue}}await Promise.all(Object.entries(o).map(async([,l])=>{await Promise.all(l.map(async t=>{const n=mw.Title.newFromText(t.original),i=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!i)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});const m=!/[#<>[\]{|}]/.test(t.destination)&&i,s=document.createElement("span");s.classList.add("rmtr-review-invalid-warning"),s.textContent=`Invalid title "${t.destination}"!`;const e=![x.file,x.category].some(p=>n.getNamespaceId()===p||i.getNamespaceId()===p),r=document.createElement("span");r.classList.add("rmtr-review-invalid-warning"),r.textContent=`Warning: original or destination page is in namespace "${i.getNamespaceId()===x.file?"file":"category"}"!`;const c=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${m?`[[:${t.destination}]]`:s.outerHTML} requested by ${t.requester?mw.util.isIPAddress(t.requester)?`[[Special:Contributions/${t.requester}|${t.requester}]]`:`[[User:${t.requester}|${t.requester}]]`:t.sig?.match(/(\[{2}Special:Contributions\/(.*?)\|\2]{2})/)?.[1]??"(unknown)"} with reasoning "${t.reason}"`),d=new DOMParser().parseFromString(c,"text/html"),R=document.createElement("li");R.innerHTML=d.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||R.append(r),t.element=R}))}));const h=document.createElement("div");h.id="rmtr-review-result";const L=document.createElement("div");L.id="rmtr-review-header",L.textContent="Technical move requests review",h.append(L);for(const[l,[t,n]]of Object.entries(o).entries()){const i=document.createElement("div");i.classList.add("rmtr-review-header"),i.textContent=t,h.append(i);const m=document.createElement("div");if(m.classList.add("rmtr-review-section-content"),n.length===0){const s=document.createElement("div");s.textContent="No requests in this section",m.append(s)}else{const s=document.createElement("ul");for(const[e,r]of n.entries()){const c=r.element,d=document.createElement("input");d.type="checkbox",d.classList.add("rmtr-review-request-checkbox"),d.id=`rmtr-review-remove-request-${l}-${e}`,d.addEventListener("change",()=>{d.checked?(o[t][e].result={remove:!0,reason:q.value},p.style.display="inline",g.disabled=!0):(delete o[t][e].result,p.style.display="none",g.disabled=!1)});const R=document.createElement("label");R.htmlFor=`rmtr-review-remove-request-${l}-${e}`,R.textContent="Remove request",c.append(d),c.append(R);const p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" as "));const q=document.createElement("select");t==="Contested technical requests"&&(q.value="Contested"),q.addEventListener("change",()=>{o[t][e].result.reason=q.value});const j=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Not done"];for(const b of j){const E=document.createElement("option");E.value=b,E.textContent=b,q.append(E)}p.append(q),c.append(p);const g=document.createElement("input");g.type="checkbox",g.classList.add("rmtr-review-request-checkbox"),g.id=`rmtr-review-move-request-${l}-${e}`,g.addEventListener("change",()=>{g.checked?(o[t][e].result={move:!0,section:I.value},v.style.display="inline",d.disabled=!0):(delete o[t][e].result,v.style.display="none",d.disabled=!1)});const S=document.createElement("label");S.htmlFor=`rmtr-review-move-request-${l}-${e}`,S.textContent="Switch section",c.append(g),c.append(S);const v=document.createElement("span");v.style.display="none",v.append(document.createTextNode(" to "));const I=document.createElement("select");I.addEventListener("change",()=>{o[t][e].result.section=I.value});for(const b of u){if(b===t)continue;const E=document.createElement("option");E.value=b,E.textContent=b,I.append(E)}v.append(I),v.append(document.createTextNode(" with reasoning "));const P=document.createElement("input");P.type="text",P.addEventListener("input",()=>{o[t][e].result.reason=P.value}),v.append(P),v.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),c.append(v),s.append(c)}m.append(s)}h.append(m)}const y=document.createElement("button");y.id="rmtr-review-submit",y.textContent="Submit",y.addEventListener("click",async()=>{if((await getPageRevision()).revid!==$)return mw.notify("rmtr-helper: An edit conflict occurred, please start over!",{type:"error"});y.disabled=!0,C.style.display="inline-block";let t=f;const n={remove:{},move:{},total:0};for(const s of Object.values(o))for(const e of s)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),n.remove[e.result.reason]||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){const r=u[u.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${r} ?={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`),n.move[e.result.section]||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return y.disabled=!1,C.style.display="none",mw.notify("No changes to make!",{type:"error"});const i=Object.values(o).every(s=>s.every(e=>e.result&&"remove"in e.result)),m=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([s,e])=>`${e.map(r=>`[[${r.original}]]`).join(", ")} as ${s.toLowerCase()}`).join(", ")}`:""}${Object.entries(n.move).length>0?`${Object.entries(n.remove).length>0?", ":""}Moved ${Object.entries(n.move).map(([s,e])=>`${e.map(r=>`[[${r.original}]]`).join(", ")} to "${s}"`).join(", ")}`:""}${i?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:m})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),window.location.reload()});const C=document.createElement("span");C.id="rmtr-review-loading",C.style.display="none",y.append(C),h.append(y),mw.util.$content[0].prepend(h),h.scrollIntoView()})});async function getPageRevision(){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]}function showEditPreview(k,x,N){const T=mw.config.get("wgServer")+mw.config.get("wgScriptPath")+"/",a=document.createElement("form");a.action=`${T}index.php?title=${encodeURIComponent(k)}&action=submit`,a.method="POST";const w=document.createElement("input");w.type="hidden",w.name="wpTextbox1",w.value=x,a.append(w);const $=document.createElement("input");$.type="hidden",$.name="wpSummary",$.value=N,a.append($);const f=document.createElement("input");f.type="hidden",f.name="mode",f.value="preview",a.append(f);const u=document.createElement("input");u.type="hidden",u.name="wpDiff",u.value="Show changes",a.append(u);const o=document.createElement("input");o.type="hidden",o.name="wpUltimateParam",o.value="1",a.append(o),document.body.append(a),a.submit()}

// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9ybXRyLWhlbHBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMgfSBmcm9tICd0eXBlcy1tZWRpYXdpa2kvYXBpX3BhcmFtcyc7XG5pbXBvcnQgeyBQYWdlUmV2aXNpb25zUmVzdWx0IH0gZnJvbSAnLi4vZ2xvYmFsLXR5cGVzJztcblxubXcubG9hZGVyLnVzaW5nKFsnbWVkaWF3aWtpLnV0aWwnXSwgKCkgPT4ge1xuICAgIGNvbnN0IGRldmVsb3BtZW50TW9kZSA9IGZhbHNlO1xuXG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSAhPT0gKGRldmVsb3BtZW50TW9kZSA/ICdVc2VyOkVlaml0NDMvc2FuZGJveCcgOiAnV2lraXBlZGlhOlJlcXVlc3RlZF9tb3Zlcy9UZWNobmljYWxfcmVxdWVzdHMnKSkgcmV0dXJuO1xuXG4gICAgaW1wb3J0U3R5bGVzaGVldCgnVXNlcjpFZWppdDQzL3NjcmlwdHMvcm10ci1oZWxwZXIuY3NzJyk7XG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKTtcblxuICAgIGxldCBkaXNwbGF5ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnID8gJ3AtdGInIDogJ3AtY2FjdGlvbnMnLCAnIycsIGBSZXZpZXcgbW92ZSByZXF1ZXN0cyR7ZGV2ZWxvcG1lbnRNb2RlID8gJyAoREVWKScgOiAnJ31gLCAncmV2aWV3LXJtdHItcmVxdWVzdHMnKSE7XG5cbiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKGRpc3BsYXllZCkgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNybXRyLXJldmlldy1yZXN1bHQnKT8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgZWxzZSBkaXNwbGF5ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VSZXZpc2lvbiA9IGF3YWl0IGdldFBhZ2VSZXZpc2lvbigpO1xuXG4gICAgICAgIGNvbnN0IHJldklkID0gcGFnZVJldmlzaW9uLnJldmlkO1xuICAgICAgICBjb25zdCBwYWdlQ29udGVudCA9IHBhZ2VSZXZpc2lvbi5zbG90cy5tYWluLmNvbnRlbnQ7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbJ1VuY29udHJvdmVyc2lhbCB0ZWNobmljYWwgcmVxdWVzdHMnLCAnUmVxdWVzdHMgdG8gcmV2ZXJ0IHVuZGlzY3Vzc2VkIG1vdmVzJywgJ0NvbnRlc3RlZCB0ZWNobmljYWwgcmVxdWVzdHMnLCAnQWRtaW5pc3RyYXRvciBuZWVkZWQnXTtcblxuICAgICAgICBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgICAgICAgICBzaWc6IHN0cmluZztcbiAgICAgICAgICAgIHJlcXVlc3Rlcj86IHN0cmluZztcbiAgICAgICAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAgICAgICAgICAgb3JpZ2luYWw6IHN0cmluZztcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50OiBIVE1MTElFbGVtZW50O1xuICAgICAgICAgICAgcmVzdWx0PzogUmVxdWVzdFJlc3VsdE1vdmUgfCBSZXF1ZXN0UmVzdWx0UmVtb3ZlO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRNb3ZlIHtcbiAgICAgICAgICAgIG1vdmU6IGJvb2xlYW47XG4gICAgICAgICAgICBzZWN0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb24/OiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpbnRlcmZhY2UgUmVxdWVzdFJlc3VsdFJlbW92ZSB7XG4gICAgICAgICAgICByZW1vdmU6IGJvb2xlYW47XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsbFJlcXVlc3RzOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0W10+ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uQ29udGVudCA9IHBhZ2VDb250ZW50XG4gICAgICAgICAgICAgICAgLnNwbGl0KG5ldyBSZWdFeHAoYD17Myx9ID8ke3NlY3Rpb259ID89ezMsfWApKVsxXVxuICAgICAgICAgICAgICAgIC5zcGxpdCgvPXszLH0vbSlbMF1cbiAgICAgICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVxdWVzdHMgPSBzZWN0aW9uQ29udGVudC5tYXRjaCgvKD86XFwqID9cXG4pP1sgKjpdKnt7cm1hc3Npc3RcXC9jb3JlLis/KD89WyAqOl0qe3tybWFzc2lzdFxcL2NvcmV8JCkvZ2lzKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRSZXF1ZXN0cylcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IG1hdGNoZWRSZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsID0gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKC8oPzpcXCogP1xcbik/WyAqOl0qe3tybWFzc2lzdFxcL2NvcmUgXFx8fH19LiovZ2lzLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgvXFxzKlxcfFxccyovKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHJpbSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFBhcmFtZXRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMocGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnNwbGl0KCcgPSAnKS5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50cmltKCkpKSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgICAgICAgICAgICAgICAgICBmaW5hbFBhcmFtZXRlcnMuZnVsbCA9IGZ1bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgZmluYWxQYXJhbWV0ZXJzLm9yaWdpbmFsID0gZmluYWxQYXJhbWV0ZXJzWzFdPy5yZXBsYWNlKC9eXFxbKy8sICcnKS5yZXBsYWNlKC9dKyQvLCAnJykgPz8gJ1VOS05PV04nO1xuICAgICAgICAgICAgICAgICAgICBmaW5hbFBhcmFtZXRlcnMuZGVzdGluYXRpb24gPSBmaW5hbFBhcmFtZXRlcnNbMl0/LnJlcGxhY2UoL15cXFsrLywgJycpLnJlcGxhY2UoL10rJC8sICcnKSA/PyAnVU5LTk9XTic7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbmFsUGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbmFsUGFyYW1ldGVyc1syXTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxQYXJhbWV0ZXJzIGFzIHVua25vd24gYXMgUmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dID0gW107XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGFsbFJlcXVlc3RzKS5tYXAoYXN5bmMgKFssIHJlcXVlc3RzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy5tYXAoYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG13T2xkVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChyZXF1ZXN0Lm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG13TmV3VGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChyZXF1ZXN0LmRlc3RpbmF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtd09sZFRpdGxlKSByZXR1cm4gbXcubm90aWZ5KGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0Lm9yaWdpbmFsfVwiIWAsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXdOZXdUaXRsZSkgcmV0dXJuIG13Lm5vdGlmeShgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5kZXN0aW5hdGlvbn1cIiFgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkVGl0bGUgPSAhL1sjPD5bXFxde3x9XS8udGVzdChyZXF1ZXN0LmRlc3RpbmF0aW9uKSAmJiBtd05ld1RpdGxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkVGl0bGVXYXJuaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFRpdGxlV2FybmluZy5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1pbnZhbGlkLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRUaXRsZVdhcm5pbmcudGV4dENvbnRlbnQgPSBgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5kZXN0aW5hdGlvbn1cIiFgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZE5hbWVzcGFjZSA9ICFbbmFtZXNwYWNlcy5maWxlLCBuYW1lc3BhY2VzLmNhdGVnb3J5XS5zb21lKChuYW1lc3BhY2UpID0+IG13T2xkVGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlIHx8IG13TmV3VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkTmFtZXNwYWNlV2FybmluZy5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1pbnZhbGlkLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWROYW1lc3BhY2VXYXJuaW5nLnRleHRDb250ZW50ID0gYFdhcm5pbmc6IG9yaWdpbmFsIG9yIGRlc3RpbmF0aW9uIHBhZ2UgaXMgaW4gbmFtZXNwYWNlIFwiJHttd05ld1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZXMuZmlsZSA/ICdmaWxlJyA6ICdjYXRlZ29yeSd9XCIhYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkV2lraXRleHQgPSBhd2FpdCBuZXcgbXcuQXBpKCkucGFyc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFtbOiR7cmVxdWVzdC5vcmlnaW5hbH1dXSBcdTIxOTIgJHt2YWxpZFRpdGxlID8gYFtbOiR7cmVxdWVzdC5kZXN0aW5hdGlvbn1dXWAgOiBpbnZhbGlkVGl0bGVXYXJuaW5nLm91dGVySFRNTH0gcmVxdWVzdGVkIGJ5ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVxdWVzdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG13LnV0aWwuaXNJUEFkZHJlc3MocmVxdWVzdC5yZXF1ZXN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgW1tTcGVjaWFsOkNvbnRyaWJ1dGlvbnMvJHtyZXF1ZXN0LnJlcXVlc3Rlcn18JHtyZXF1ZXN0LnJlcXVlc3Rlcn1dXWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGBbW1VzZXI6JHtyZXF1ZXN0LnJlcXVlc3Rlcn18JHtyZXF1ZXN0LnJlcXVlc3Rlcn1dXWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcXVlc3Quc2lnPy5tYXRjaCgvKFxcW3syfVNwZWNpYWw6Q29udHJpYnV0aW9uc1xcLyguKj8pXFx8XFwyXXsyfSkvKT8uWzFdID8/ICcodW5rbm93biknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2l0aCByZWFzb25pbmcgXCIke3JlcXVlc3QucmVhc29ufVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwYXJzZWRXaWtpdGV4dCwgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBwYXJzZWRIdG1sLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5tdy1wYXJzZXItb3V0cHV0JykhLmZpcnN0RWxlbWVudENoaWxkIS5pbm5lckhUTUwhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkTmFtZXNwYWNlKSByZXF1ZXN0RWxlbWVudC5hcHBlbmQoaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmVsZW1lbnQgPSByZXF1ZXN0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgb3V0cHV0RWxlbWVudC5pZCA9ICdybXRyLXJldmlldy1yZXN1bHQnO1xuXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBoZWFkZXIuaWQgPSAncm10ci1yZXZpZXctaGVhZGVyJztcbiAgICAgICAgaGVhZGVyLnRleHRDb250ZW50ID0gJ1RlY2huaWNhbCBtb3ZlIHJlcXVlc3RzIHJldmlldyc7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoaGVhZGVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzZWN0aW9uSW5kZXgsIFtzZWN0aW9uLCByZXF1ZXN0c11dIG9mIE9iamVjdC5lbnRyaWVzKGFsbFJlcXVlc3RzKS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaGVhZGVyJyk7XG4gICAgICAgICAgICBzZWN0aW9uSGVhZGVyLnRleHRDb250ZW50ID0gc2VjdGlvbjtcblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkhlYWRlcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Db250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzZWN0aW9uQ29udGVudC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1zZWN0aW9uLWNvbnRlbnQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vUmVxdWVzdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBub1JlcXVlc3RzLnRleHRDb250ZW50ID0gJ05vIHJlcXVlc3RzIGluIHRoaXMgc2VjdGlvbic7XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQobm9SZXF1ZXN0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SW5kZXgsIHJlcXVlc3RdIG9mIHJlcXVlc3RzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3QuZWxlbWVudDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0Q2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1yZW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVSZXF1ZXN0Q2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0ID0geyByZW1vdmU6IHRydWUsIHJlYXNvbjogcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC5odG1sRm9yID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0TGFiZWwudGV4dENvbnRlbnQgPSAnUmVtb3ZlIHJlcXVlc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0Q2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdExhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyBhcyAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAnQ29udGVzdGVkIHRlY2huaWNhbCByZXF1ZXN0cycpIHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZSA9ICdDb250ZXN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb21wbGV0ZWQnLCAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlc3RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWxyZWFkeSBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIHBhZ2UgbmFtZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IHZlbnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdXaXRoZHJhd24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05vdCBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLmFwcGVuZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQocmVtb3ZlUmVxdWVzdERyb3Bkb3duKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uQ2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1tb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3dpdGNoU2VjdGlvbkNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpID0geyBtb3ZlOiB0cnVlLCBzZWN0aW9uOiBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkxhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uTGFiZWwudGV4dENvbnRlbnQgPSAnU3dpdGNoIHNlY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uQ2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkxhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyB0byAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkRyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpLnNlY3Rpb24gPSBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSBzZWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hcHBlbmQob3B0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKHN3aXRjaFNlY3Rpb25Ecm9wZG93bik7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIHdpdGggcmVhc29uaW5nICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvblJlYXNvbmluZy50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHN3aXRjaFNlY3Rpb25SZWFzb25pbmcudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoc3dpdGNoU2VjdGlvblJlYXNvbmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIChvcHRpb25hbCwgYXV0b21hdGljYWxseSBwaW5ncyByZXF1ZXN0b3IgYW5kIHNpZ25zKScpKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0c0xpc3QuYXBwZW5kKHJlcXVlc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQocmVxdWVzdHNMaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkNvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5pZCA9ICdybXRyLXJldmlldy1zdWJtaXQnO1xuICAgICAgICBzdWJtaXRCdXR0b24udGV4dENvbnRlbnQgPSAnU3VibWl0JztcbiAgICAgICAgc3VibWl0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZVJldmlzaW9uID0gYXdhaXQgZ2V0UGFnZVJldmlzaW9uKCk7XG5cbiAgICAgICAgICAgIGlmIChuZXdQYWdlUmV2aXNpb24ucmV2aWQgIT09IHJldklkKSByZXR1cm4gbXcubm90aWZ5KCdybXRyLWhlbHBlcjogQW4gZWRpdCBjb25mbGljdCBvY2N1cnJlZCwgcGxlYXNlIHN0YXJ0IG92ZXIhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG4gICAgICAgICAgICBsZXQgZW5kUmVzdWx0ID0gcGFnZUNvbnRlbnQ7XG5cbiAgICAgICAgICAgIGludGVyZmFjZSBBbGxDaGFuZ2VzIHtcbiAgICAgICAgICAgICAgICByZW1vdmU6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RbXT47XG4gICAgICAgICAgICAgICAgbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICB0b3RhbDogbnVtYmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzOiBBbGxDaGFuZ2VzID0geyByZW1vdmU6IHt9LCBtb3ZlOiB7fSwgdG90YWw6IDAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoYWxsUmVxdWVzdHMpKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiBzZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdC5yZXN1bHQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgncmVtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UocmVxdWVzdC5mdWxsICsgJ1xcbicsICcnKS5yZXBsYWNlKHJlcXVlc3QuZnVsbCwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dKSBjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ21vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uVGl0bGVBZnRlciA9IHNlY3Rpb25zW3NlY3Rpb25zLmluZGV4T2YocmVxdWVzdC5yZXN1bHQuc2VjdGlvbikgKyAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UocmVxdWVzdC5mdWxsICsgJ1xcbicsICcnKS5yZXBsYWNlKHJlcXVlc3QuZnVsbCwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgKFxcbj9cXG4/KD86PXszLH0gPyR7c2VjdGlvblRpdGxlQWZ0ZXJ9ID89ezMsfXwkKSlgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFxuJHtyZXF1ZXN0LmZ1bGx9JHtyZXF1ZXN0LnJlc3VsdC5yZWFzb24gPyBgXFxuOjogJHtyZXF1ZXN0LnJlcXVlc3RlciAmJiByZXF1ZXN0LnJlcXVlc3Rlci5sZW5ndGggPiAwID8gKG13LnV0aWwuaXNJUEFkZHJlc3MocmVxdWVzdC5yZXF1ZXN0ZXIpID8gJycgOiBgQFtbVXNlcjoke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dIGApIDogJyd9ICR7cmVxdWVzdC5yZXN1bHQucmVhc29ufSB+fn5+YCA6ICcnfSQxYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZXMubW92ZVtyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uXSkgY2hhbmdlcy5tb3ZlW3JlcXVlc3QucmVzdWx0LnNlY3Rpb25dID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMubW92ZVtyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uXS5wdXNoKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy50b3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG13Lm5vdGlmeSgnTm8gY2hhbmdlcyB0byBtYWtlIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm9SZW1haW5pbmcgPSBPYmplY3QudmFsdWVzKGFsbFJlcXVlc3RzKS5ldmVyeSgoc2VjdGlvbikgPT4gc2VjdGlvbi5ldmVyeSgocmVxdWVzdCkgPT4gcmVxdWVzdC5yZXN1bHQgJiYgJ3JlbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpKTtcblxuICAgICAgICAgICAgY29uc3QgZWRpdFN1bW1hcnkgPSBgSGFuZGxlZCAke2NoYW5nZXMudG90YWx9IHJlcXVlc3Qke2NoYW5nZXMudG90YWwgPiAxID8gJ3MnIDogJyd9OiAke1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYFJlbW92ZWQgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoW3JlYXNvbiwgcGFnZXNdKSA9PiBgJHtwYWdlcy5tYXAoKHBhZ2UpID0+IGBbWyR7cGFnZS5vcmlnaW5hbH1dXWApLmpvaW4oJywgJyl9IGFzICR7cmVhc29uLnRvTG93ZXJDYXNlKCl9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9JHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzLm1vdmUpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSkubGVuZ3RoID4gMCA/ICcsICcgOiAnJ31Nb3ZlZCAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMubW92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2Rlc3RpbmF0aW9uLCBwYWdlc10pID0+IGAke3BhZ2VzLm1hcCgocGFnZSkgPT4gYFtbJHtwYWdlLm9yaWdpbmFsfV1dYCkuam9pbignLCAnKX0gdG8gXCIke2Rlc3RpbmF0aW9ufVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9JHtub1JlbWFpbmluZyA/ICcgKG5vIHJlcXVlc3RzIHJlbWFpbiknIDogJyd9ICh2aWEgW1tVc2VyOkVlaml0NDMvc2NyaXB0cy9ybXRyLWhlbHBlcnxzY3JpcHRdXSlgO1xuXG4gICAgICAgICAgICBpZiAoZGV2ZWxvcG1lbnRNb2RlKSBzaG93RWRpdFByZXZpZXcobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLCBlbmRSZXN1bHQsIGVkaXRTdW1tYXJ5KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBtdy5BcGkoKS5lZGl0KG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwgKCkgPT4gKHsgdGV4dDogZW5kUmVzdWx0LCBzdW1tYXJ5OiBlZGl0U3VtbWFyeSB9KSk7XG5cbiAgICAgICAgICAgICAgICBtdy5ub3RpZnkoYFN1Y2Nlc3NmdWxseSBoYW5kbGVkICR7Y2hhbmdlcy50b3RhbH0gcmVxdWVzdHMsIHJlbG9hZGluZy4uLmAsIHsgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xuXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBsb2FkaW5nU3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuaWQgPSAncm10ci1yZXZpZXctbG9hZGluZyc7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgc3VibWl0QnV0dG9uLmFwcGVuZChsb2FkaW5nU3Bpbm5lcik7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc3VibWl0QnV0dG9uKTtcblxuICAgICAgICBtdy51dGlsLiRjb250ZW50WzBdLnByZXBlbmQob3V0cHV0RWxlbWVudCk7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH0pO1xufSk7XG5cbi8qKlxuICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhIHdpa2kgcGFnZSdzIGxhdGVzdCByZXZpc2lvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVJldmlzaW9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIChhd2FpdCBuZXcgbXcuQXBpKCkuZ2V0KHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIGZvcm1hdHZlcnNpb246ICcyJyxcbiAgICAgICAgICAgIHByb3A6ICdyZXZpc2lvbnMnLFxuICAgICAgICAgICAgcnZwcm9wOiBbJ2NvbnRlbnQnLCAnaWRzJ10sXG4gICAgICAgICAgICBydnNsb3RzOiAnbWFpbicsXG4gICAgICAgICAgICB0aXRsZXM6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMpKSBhcyBQYWdlUmV2aXNpb25zUmVzdWx0XG4gICAgKS5xdWVyeS5wYWdlc1swXS5yZXZpc2lvbnNbMF07XG59XG5cbi8qKlxuICogU2hvd3MgYSBkaWZmIGVkaXQgcHJldmlldyBmb3IgdGhlIGdpdmVuIHdpa2l0ZXh0IG9uIGEgZ2l2ZW4gcGFnZS5cbiAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgb2YgdGhlIHBhZ2UgdG8gZWRpdC5cbiAqIEBwYXJhbSB0ZXh0IFRoZSByZXN1bHRpbmcgd2lraXRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcGFyYW0gc3VtbWFyeSBUaGUgZWRpdCBzdW1tYXJ5LlxuICovXG5mdW5jdGlvbiBzaG93RWRpdFByZXZpZXcodGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBiYXNlVXJsID0gbXcuY29uZmlnLmdldCgnd2dTZXJ2ZXInKSArIG13LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpICsgJy8nO1xuXG4gICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICBmb3JtLmFjdGlvbiA9IGAke2Jhc2VVcmx9aW5kZXgucGhwP3RpdGxlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpdGxlKX0mYWN0aW9uPXN1Ym1pdGA7XG4gICAgZm9ybS5tZXRob2QgPSAnUE9TVCc7XG5cbiAgICBjb25zdCB0ZXh0Ym94SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHRleHRib3hJbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgdGV4dGJveElucHV0Lm5hbWUgPSAnd3BUZXh0Ym94MSc7XG4gICAgdGV4dGJveElucHV0LnZhbHVlID0gdGV4dDtcbiAgICBmb3JtLmFwcGVuZCh0ZXh0Ym94SW5wdXQpO1xuXG4gICAgY29uc3Qgc3VtbWFyeUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBzdW1tYXJ5SW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgIHN1bW1hcnlJbnB1dC5uYW1lID0gJ3dwU3VtbWFyeSc7XG4gICAgc3VtbWFyeUlucHV0LnZhbHVlID0gc3VtbWFyeTtcbiAgICBmb3JtLmFwcGVuZChzdW1tYXJ5SW5wdXQpO1xuXG4gICAgY29uc3QgcHJldmlld0lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBwcmV2aWV3SW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgIHByZXZpZXdJbnB1dC5uYW1lID0gJ21vZGUnO1xuICAgIHByZXZpZXdJbnB1dC52YWx1ZSA9ICdwcmV2aWV3JztcbiAgICBmb3JtLmFwcGVuZChwcmV2aWV3SW5wdXQpO1xuXG4gICAgY29uc3Qgc2hvd0NoYW5nZXNJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgc2hvd0NoYW5nZXNJbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgc2hvd0NoYW5nZXNJbnB1dC5uYW1lID0gJ3dwRGlmZic7XG4gICAgc2hvd0NoYW5nZXNJbnB1dC52YWx1ZSA9ICdTaG93IGNoYW5nZXMnO1xuICAgIGZvcm0uYXBwZW5kKHNob3dDaGFuZ2VzSW5wdXQpO1xuXG4gICAgY29uc3QgdWx0aW1hdGVQYXJhbWV0ZXJJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgdWx0aW1hdGVQYXJhbWV0ZXJJbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgdWx0aW1hdGVQYXJhbWV0ZXJJbnB1dC5uYW1lID0gJ3dwVWx0aW1hdGVQYXJhbSc7XG4gICAgdWx0aW1hdGVQYXJhbWV0ZXJJbnB1dC52YWx1ZSA9ICcxJztcbiAgICBmb3JtLmFwcGVuZCh1bHRpbWF0ZVBhcmFtZXRlcklucHV0KTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGZvcm0pO1xuICAgIGZvcm0uc3VibWl0KCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7YUFHQSxHQUFHLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixFQUFHLElBQU0sQ0FHdEMsR0FBSSxHQUFHLE9BQU8sSUFBSSxZQUFZLElBQWtELCtDQUFpRCxPQUVqSSxpQkFBaUIsc0NBQXNDLEVBRXZELE1BQU1BLEVBQWEsR0FBRyxPQUFPLElBQUksZ0JBQWdCLEVBRWpELElBQUlDLEVBQVksR0FFSCxHQUFHLEtBQUssZUFBZSxHQUFHLE9BQU8sSUFBSSxNQUFNLElBQU0sVUFBWSxPQUFTLGFBQWMsSUFBSyx1QkFBMEQsc0JBQXNCLEVBRWpMLGlCQUFpQixRQUFTLE1BQU9DLEdBQVUsQ0FHNUMsR0FGQUEsRUFBTSxlQUFlLEVBRWpCRCxFQUFXLE9BQU8sU0FBUyxjQUFjLHFCQUFxQixHQUFHLGVBQWUsRUFDL0VBLEVBQVksR0FFakIsTUFBTUUsRUFBZSxNQUFNLGdCQUFnQixFQUVyQ0MsRUFBUUQsRUFBYSxNQUNyQkUsRUFBY0YsRUFBYSxNQUFNLEtBQUssUUFFdENHLEVBQVcsQ0FBQyxxQ0FBc0MsdUNBQXdDLCtCQUFnQyxzQkFBc0IsRUF3QmhKQyxFQUF5QyxDQUFDLEVBRWhELFVBQVdDLEtBQVdGLEVBQVUsQ0FNNUIsTUFBTUcsRUFMaUJKLEVBQ2xCLE1BQU0sSUFBSSxPQUFPLFVBQVVHLENBQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUMvQyxNQUFNLFFBQVEsRUFBRSxDQUFDLEVBQ2pCLEtBQUssRUFFNkIsTUFBTSxxRUFBcUUsRUFFbEgsR0FBSUMsRUFDQUYsRUFBWUMsQ0FBTyxFQUFJQyxFQUFnQixJQUFLQyxHQUFZLENBQ3BEQSxFQUFVQSxFQUFRLEtBQUssRUFDdkIsTUFBTUMsRUFBT0QsRUFDUEUsRUFBYUYsRUFDZCxXQUFXLCtDQUFnRCxFQUFFLEVBQzdELE1BQU0sVUFBVSxFQUNoQixJQUFLRyxHQUFjQSxFQUFVLEtBQUssQ0FBQyxFQUVsQ0MsRUFBa0IsT0FBTyxZQUFZRixFQUFXLElBQUtDLEdBQWNBLEVBQVUsTUFBTSxLQUFLLEVBQUUsSUFBS0UsR0FBVUEsRUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBRTdILE9BQUFELEVBQWdCLEtBQU9ILEVBRXZCRyxFQUFnQixTQUFXQSxFQUFnQixDQUFDLEdBQUcsUUFBUSxPQUFRLEVBQUUsRUFBRSxRQUFRLE1BQU8sRUFBRSxHQUFLLFVBQ3pGQSxFQUFnQixZQUFjQSxFQUFnQixDQUFDLEdBQUcsUUFBUSxPQUFRLEVBQUUsRUFBRSxRQUFRLE1BQU8sRUFBRSxHQUFLLFVBRTVGLE9BQU9BLEVBQWdCLENBQUMsRUFDeEIsT0FBT0EsRUFBZ0IsQ0FBQyxFQUVqQkEsQ0FDWCxDQUFDLE1BQ0EsQ0FDRFAsRUFBWUMsQ0FBTyxFQUFJLENBQUMsRUFDeEIsUUFDSixDQUNKLENBRUEsTUFBTSxRQUFRLElBQ1YsT0FBTyxRQUFRRCxDQUFXLEVBQUUsSUFBSSxNQUFPLENBQUMsQ0FBRVMsQ0FBUSxJQUFNLENBQ3BELE1BQU0sUUFBUSxJQUNWQSxFQUFTLElBQUksTUFBT04sR0FBWSxDQUM1QixNQUFNTyxFQUFhLEdBQUcsTUFBTSxZQUFZUCxFQUFRLFFBQVEsRUFDbERRLEVBQWEsR0FBRyxNQUFNLFlBQVlSLEVBQVEsV0FBVyxFQUUzRCxHQUFJLENBQUNPLEVBQVksT0FBTyxHQUFHLE9BQU8sa0JBQWtCUCxFQUFRLFFBQVEsS0FBTSxDQUFFLEtBQU0sT0FBUSxDQUFDLEVBQzNGLEdBQUksQ0FBQ1EsRUFBWSxPQUFPLEdBQUcsT0FBTyxrQkFBa0JSLEVBQVEsV0FBVyxLQUFNLENBQUUsS0FBTSxPQUFRLENBQUMsRUFFOUYsTUFBTVMsRUFBYSxDQUFDLGNBQWMsS0FBS1QsRUFBUSxXQUFXLEdBQUtRLEVBRXpERSxFQUFzQixTQUFTLGNBQWMsTUFBTSxFQUN6REEsRUFBb0IsVUFBVSxJQUFJLDZCQUE2QixFQUMvREEsRUFBb0IsWUFBYyxrQkFBa0JWLEVBQVEsV0FBVyxLQUV2RSxNQUFNVyxFQUFpQixDQUFDLENBQUNyQixFQUFXLEtBQU1BLEVBQVcsUUFBUSxFQUFFLEtBQU1zQixHQUFjTCxFQUFXLGVBQWUsSUFBTUssR0FBYUosRUFBVyxlQUFlLElBQU1JLENBQVMsRUFFbktDLEVBQTBCLFNBQVMsY0FBYyxNQUFNLEVBQzdEQSxFQUF3QixVQUFVLElBQUksNkJBQTZCLEVBQ25FQSxFQUF3QixZQUFjLDBEQUEwREwsRUFBVyxlQUFlLElBQU1sQixFQUFXLEtBQU8sT0FBUyxVQUFVLEtBRXJLLE1BQU13QixFQUFpQixNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsTUFDdEMsTUFBTWQsRUFBUSxRQUFRLGFBQVFTLEVBQWEsTUFBTVQsRUFBUSxXQUFXLEtBQU9VLEVBQW9CLFNBQVMsaUJBQ3BHVixFQUFRLFVBQ0YsR0FBRyxLQUFLLFlBQVlBLEVBQVEsU0FBUyxFQUNqQywyQkFBMkJBLEVBQVEsU0FBUyxJQUFJQSxFQUFRLFNBQVMsS0FDakUsVUFBVUEsRUFBUSxTQUFTLElBQUlBLEVBQVEsU0FBUyxLQUNuREEsRUFBUSxLQUFLLE1BQU0sNkNBQTZDLElBQUksQ0FBQyxHQUFLLFdBQ3JGLG9CQUFvQkEsRUFBUSxNQUFNLEdBQ3RDLEVBQ01lLEVBQWEsSUFBSSxVQUFVLEVBQUUsZ0JBQWdCRCxFQUFnQixXQUFXLEVBRXhFRSxFQUFpQixTQUFTLGNBQWMsSUFBSSxFQUNsREEsRUFBZSxVQUFZRCxFQUFXLGNBQWMsc0JBQXNCLEVBQUcsa0JBQW1CLFVBRTNGSixHQUFnQkssRUFBZSxPQUFPSCxDQUF1QixFQUVsRWIsRUFBUSxRQUFVZ0IsQ0FDdEIsQ0FBQyxDQUNMLENBQ0osQ0FBQyxDQUNMLEVBRUEsTUFBTUMsRUFBZ0IsU0FBUyxjQUFjLEtBQUssRUFDbERBLEVBQWMsR0FBSyxxQkFFbkIsTUFBTUMsRUFBUyxTQUFTLGNBQWMsS0FBSyxFQUMzQ0EsRUFBTyxHQUFLLHFCQUNaQSxFQUFPLFlBQWMsaUNBRXJCRCxFQUFjLE9BQU9DLENBQU0sRUFFM0IsU0FBVyxDQUFDQyxFQUFjLENBQUNyQixFQUFTUSxDQUFRLENBQUMsSUFBSyxPQUFPLFFBQVFULENBQVcsRUFBRSxRQUFRLEVBQUcsQ0FDckYsTUFBTXVCLEVBQWdCLFNBQVMsY0FBYyxLQUFLLEVBQ2xEQSxFQUFjLFVBQVUsSUFBSSxvQkFBb0IsRUFDaERBLEVBQWMsWUFBY3RCLEVBRTVCbUIsRUFBYyxPQUFPRyxDQUFhLEVBRWxDLE1BQU1DLEVBQWlCLFNBQVMsY0FBYyxLQUFLLEVBR25ELEdBRkFBLEVBQWUsVUFBVSxJQUFJLDZCQUE2QixFQUV0RGYsRUFBUyxTQUFXLEVBQUcsQ0FDdkIsTUFBTWdCLEVBQWEsU0FBUyxjQUFjLEtBQUssRUFDL0NBLEVBQVcsWUFBYyw4QkFFekJELEVBQWUsT0FBT0MsQ0FBVSxDQUNwQyxLQUFPLENBQ0gsTUFBTUMsRUFBZSxTQUFTLGNBQWMsSUFBSSxFQUVoRCxTQUFXLENBQUNDLEVBQWN4QixDQUFPLElBQUtNLEVBQVMsUUFBUSxFQUFHLENBQ3RELE1BQU1VLEVBQWlCaEIsRUFBUSxRQUV6QnlCLEVBQXdCLFNBQVMsY0FBYyxPQUFPLEVBQzVEQSxFQUFzQixLQUFPLFdBQzdCQSxFQUFzQixVQUFVLElBQUksOEJBQThCLEVBQ2xFQSxFQUFzQixHQUFLLDhCQUE4Qk4sQ0FBWSxJQUFJSyxDQUFZLEdBQ3JGQyxFQUFzQixpQkFBaUIsU0FBVSxJQUFNLENBQy9DQSxFQUFzQixTQUN0QjVCLEVBQVlDLENBQU8sRUFBRTBCLENBQVksRUFBRSxPQUFTLENBQUUsT0FBUSxHQUFNLE9BQVFFLEVBQXNCLEtBQU0sRUFDaEdDLEVBQXlCLE1BQU0sUUFBVSxTQUN6Q0MsRUFBc0IsU0FBVyxLQUVqQyxPQUFPL0IsRUFBWUMsQ0FBTyxFQUFFMEIsQ0FBWSxFQUFFLE9BQzFDRyxFQUF5QixNQUFNLFFBQVUsT0FDekNDLEVBQXNCLFNBQVcsR0FFekMsQ0FBQyxFQUVELE1BQU1DLEVBQXFCLFNBQVMsY0FBYyxPQUFPLEVBQ3pEQSxFQUFtQixRQUFVLDhCQUE4QlYsQ0FBWSxJQUFJSyxDQUFZLEdBQ3ZGSyxFQUFtQixZQUFjLGlCQUVqQ2IsRUFBZSxPQUFPUyxDQUFxQixFQUMzQ1QsRUFBZSxPQUFPYSxDQUFrQixFQUV4QyxNQUFNRixFQUEyQixTQUFTLGNBQWMsTUFBTSxFQUM5REEsRUFBeUIsTUFBTSxRQUFVLE9BRXpDQSxFQUF5QixPQUFPLFNBQVMsZUFBZSxNQUFNLENBQUMsRUFFL0QsTUFBTUQsRUFBd0IsU0FBUyxjQUFjLFFBQVEsRUFDekQ1QixJQUFZLGlDQUFnQzRCLEVBQXNCLE1BQVEsYUFDOUVBLEVBQXNCLGlCQUFpQixTQUFVLElBQU0sQ0FDbEQ3QixFQUFZQyxDQUFPLEVBQUUwQixDQUFZLEVBQUUsT0FBK0IsT0FBU0UsRUFBc0IsS0FDdEcsQ0FBQyxFQUVELE1BQU1JLEVBQStCLENBQ2pDLFlBQ0EsWUFDQSxlQUNBLG9CQUNBLGtCQUNBLFlBQ0EsVUFDSixFQUVBLFVBQVdDLEtBQVVELEVBQThCLENBQy9DLE1BQU1FLEVBQWdCLFNBQVMsY0FBYyxRQUFRLEVBQ3JEQSxFQUFjLE1BQVFELEVBQ3RCQyxFQUFjLFlBQWNELEVBRTVCTCxFQUFzQixPQUFPTSxDQUFhLENBQzlDLENBRUFMLEVBQXlCLE9BQU9ELENBQXFCLEVBRXJEVixFQUFlLE9BQU9XLENBQXdCLEVBRTlDLE1BQU1DLEVBQXdCLFNBQVMsY0FBYyxPQUFPLEVBQzVEQSxFQUFzQixLQUFPLFdBQzdCQSxFQUFzQixVQUFVLElBQUksOEJBQThCLEVBQ2xFQSxFQUFzQixHQUFLLDRCQUE0QlQsQ0FBWSxJQUFJSyxDQUFZLEdBQ25GSSxFQUFzQixpQkFBaUIsU0FBVSxJQUFNLENBQy9DQSxFQUFzQixTQUNyQi9CLEVBQVlDLENBQU8sRUFBRTBCLENBQVksRUFBRSxPQUErQixDQUFFLEtBQU0sR0FBTSxRQUFTUyxFQUFzQixLQUFNLEVBQ3RIQyxFQUF5QixNQUFNLFFBQVUsU0FDekNULEVBQXNCLFNBQVcsS0FFakMsT0FBTzVCLEVBQVlDLENBQU8sRUFBRTBCLENBQVksRUFBRSxPQUMxQ1UsRUFBeUIsTUFBTSxRQUFVLE9BQ3pDVCxFQUFzQixTQUFXLEdBRXpDLENBQUMsRUFFRCxNQUFNVSxFQUFxQixTQUFTLGNBQWMsT0FBTyxFQUN6REEsRUFBbUIsUUFBVSw0QkFBNEJoQixDQUFZLElBQUlLLENBQVksR0FDckZXLEVBQW1CLFlBQWMsaUJBRWpDbkIsRUFBZSxPQUFPWSxDQUFxQixFQUMzQ1osRUFBZSxPQUFPbUIsQ0FBa0IsRUFFeEMsTUFBTUQsRUFBMkIsU0FBUyxjQUFjLE1BQU0sRUFDOURBLEVBQXlCLE1BQU0sUUFBVSxPQUV6Q0EsRUFBeUIsT0FBTyxTQUFTLGVBQWUsTUFBTSxDQUFDLEVBRS9ELE1BQU1ELEVBQXdCLFNBQVMsY0FBYyxRQUFRLEVBQzdEQSxFQUFzQixpQkFBaUIsU0FBVSxJQUFNLENBQ2xEcEMsRUFBWUMsQ0FBTyxFQUFFMEIsQ0FBWSxFQUFFLE9BQTZCLFFBQVVTLEVBQXNCLEtBQ3JHLENBQUMsRUFFRCxVQUFXRixLQUFVbkMsRUFBVSxDQUMzQixHQUFJbUMsSUFBV2pDLEVBQVMsU0FFeEIsTUFBTWtDLEVBQWdCLFNBQVMsY0FBYyxRQUFRLEVBQ3JEQSxFQUFjLE1BQVFELEVBQ3RCQyxFQUFjLFlBQWNELEVBRTVCRSxFQUFzQixPQUFPRCxDQUFhLENBQzlDLENBRUFFLEVBQXlCLE9BQU9ELENBQXFCLEVBRXJEQyxFQUF5QixPQUFPLFNBQVMsZUFBZSxrQkFBa0IsQ0FBQyxFQUUzRSxNQUFNRSxFQUF5QixTQUFTLGNBQWMsT0FBTyxFQUM3REEsRUFBdUIsS0FBTyxPQUM5QkEsRUFBdUIsaUJBQWlCLFFBQVMsSUFBTSxDQUNsRHZDLEVBQVlDLENBQU8sRUFBRTBCLENBQVksRUFBRSxPQUErQixPQUFTWSxFQUF1QixLQUN2RyxDQUFDLEVBRURGLEVBQXlCLE9BQU9FLENBQXNCLEVBRXRERixFQUF5QixPQUFPLFNBQVMsZUFBZSxzREFBc0QsQ0FBQyxFQUUvR2xCLEVBQWUsT0FBT2tCLENBQXdCLEVBRTlDWCxFQUFhLE9BQU9QLENBQWMsQ0FDdEMsQ0FFQUssRUFBZSxPQUFPRSxDQUFZLENBQ3RDLENBRUFOLEVBQWMsT0FBT0ksQ0FBYyxDQUN2QyxDQUVBLE1BQU1nQixFQUFlLFNBQVMsY0FBYyxRQUFRLEVBQ3BEQSxFQUFhLEdBQUsscUJBQ2xCQSxFQUFhLFlBQWMsU0FDM0JBLEVBQWEsaUJBQWlCLFFBQVMsU0FBWSxDQUcvQyxJQUZ3QixNQUFNLGdCQUFnQixHQUUxQixRQUFVM0MsRUFBTyxPQUFPLEdBQUcsT0FBTyw2REFBOEQsQ0FBRSxLQUFNLE9BQVEsQ0FBQyxFQUVySTJDLEVBQWEsU0FBVyxHQUN4QkMsRUFBZSxNQUFNLFFBQVUsZUFFL0IsSUFBSUMsRUFBWTVDLEVBUWhCLE1BQU02QyxFQUFzQixDQUFFLE9BQVEsQ0FBQyxFQUFHLEtBQU0sQ0FBQyxFQUFHLE1BQU8sQ0FBRSxFQUU3RCxVQUFXMUMsS0FBVyxPQUFPLE9BQU9ELENBQVcsRUFDM0MsVUFBV0csS0FBV0YsRUFDbEIsR0FBS0UsRUFBUSxRQUViLEdBQUksV0FBWUEsRUFBUSxPQUNwQnVDLEVBQVlBLEVBQVUsUUFBUXZDLEVBQVEsS0FBTztBQUFBLEVBQU0sRUFBRSxFQUFFLFFBQVFBLEVBQVEsS0FBTSxFQUFFLEVBQzFFd0MsRUFBUSxPQUFPeEMsRUFBUSxPQUFPLE1BQU0sSUFBR3dDLEVBQVEsT0FBT3hDLEVBQVEsT0FBTyxNQUFNLEVBQUksQ0FBQyxHQUNyRndDLEVBQVEsT0FBT3hDLEVBQVEsT0FBTyxNQUFNLEVBQUUsS0FBS0EsQ0FBTyxFQUNsRHdDLEVBQVEsZ0JBQ0QsU0FBVXhDLEVBQVEsT0FBUSxDQUNqQyxNQUFNeUMsRUFBb0I3QyxFQUFTQSxFQUFTLFFBQVFJLEVBQVEsT0FBTyxPQUFPLEVBQUksQ0FBQyxFQUUvRXVDLEVBQVlBLEVBQVUsUUFBUXZDLEVBQVEsS0FBTztBQUFBLEVBQU0sRUFBRSxFQUFFLFFBQVFBLEVBQVEsS0FBTSxFQUFFLEVBQy9FdUMsRUFBWUEsRUFBVSxRQUNsQixJQUFJLE9BQU87QUFBQTtBQUFBLGFBQW9CRSxDQUFpQixhQUFhLEVBQzdEO0FBQUEsRUFBS3pDLEVBQVEsSUFBSSxHQUFHQSxFQUFRLE9BQU8sT0FBUztBQUFBLEtBQVFBLEVBQVEsV0FBYUEsRUFBUSxVQUFVLE9BQVMsRUFBSyxHQUFHLEtBQUssWUFBWUEsRUFBUSxTQUFTLEVBQUksR0FBSyxXQUFXQSxFQUFRLFNBQVMsSUFBSUEsRUFBUSxTQUFTLE1BQVMsRUFBRSxJQUFJQSxFQUFRLE9BQU8sTUFBTSxRQUFVLEVBQUUsSUFDNVAsRUFDS3dDLEVBQVEsS0FBS3hDLEVBQVEsT0FBTyxPQUFPLElBQUd3QyxFQUFRLEtBQUt4QyxFQUFRLE9BQU8sT0FBTyxFQUFJLENBQUMsR0FFbkZ3QyxFQUFRLEtBQUt4QyxFQUFRLE9BQU8sT0FBTyxFQUFFLEtBQUtBLENBQU8sRUFDakR3QyxFQUFRLE9BQ1osRUFHUixHQUFJQSxFQUFRLFFBQVUsRUFDbEIsT0FBQUgsRUFBYSxTQUFXLEdBQ3hCQyxFQUFlLE1BQU0sUUFBVSxPQUN4QixHQUFHLE9BQU8sc0JBQXVCLENBQUUsS0FBTSxPQUFRLENBQUMsRUFHN0QsTUFBTUksRUFBYyxPQUFPLE9BQU83QyxDQUFXLEVBQUUsTUFBT0MsR0FBWUEsRUFBUSxNQUFPRSxHQUFZQSxFQUFRLFFBQVUsV0FBWUEsRUFBUSxNQUFNLENBQUMsRUFFcEkyQyxFQUFjLFdBQVdILEVBQVEsS0FBSyxXQUFXQSxFQUFRLE1BQVEsRUFBSSxJQUFNLEVBQUUsS0FDL0UsT0FBTyxRQUFRQSxFQUFRLE1BQU0sRUFBRSxPQUFTLEVBQ2xDLFdBQVcsT0FBTyxRQUFRQSxFQUFRLE1BQU0sRUFDbkMsSUFBSSxDQUFDLENBQUNJLEVBQVFDLENBQUssSUFBTSxHQUFHQSxFQUFNLElBQUtDLEdBQVMsS0FBS0EsRUFBSyxRQUFRLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPRixFQUFPLFlBQVksQ0FBQyxFQUFFLEVBQy9HLEtBQUssSUFBSSxDQUFDLEdBQ2YsRUFDVixHQUNJLE9BQU8sUUFBUUosRUFBUSxJQUFJLEVBQUUsT0FBUyxFQUNoQyxHQUFHLE9BQU8sUUFBUUEsRUFBUSxNQUFNLEVBQUUsT0FBUyxFQUFJLEtBQU8sRUFBRSxTQUFTLE9BQU8sUUFBUUEsRUFBUSxJQUFJLEVBQ3ZGLElBQUksQ0FBQyxDQUFDTyxFQUFhRixDQUFLLElBQU0sR0FBR0EsRUFBTSxJQUFLQyxHQUFTLEtBQUtBLEVBQUssUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUUMsQ0FBVyxHQUFHLEVBQzdHLEtBQUssSUFBSSxDQUFDLEdBQ2YsRUFDVixHQUFHTCxFQUFjLHdCQUEwQixFQUFFLHFEQUl6QyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU8sSUFBSSxZQUFZLEVBQUcsS0FBTyxDQUFFLEtBQU1ILEVBQVcsUUFBU0ksQ0FBWSxFQUFFLEVBRXRHLEdBQUcsT0FBTyx3QkFBd0JILEVBQVEsS0FBSywwQkFBMkIsQ0FBRSxLQUFNLFNBQVUsQ0FBQyxFQUU3RixPQUFPLFNBQVMsT0FBTyxDQUUvQixDQUFDLEVBRUQsTUFBTUYsRUFBaUIsU0FBUyxjQUFjLE1BQU0sRUFDcERBLEVBQWUsR0FBSyxzQkFDcEJBLEVBQWUsTUFBTSxRQUFVLE9BRS9CRCxFQUFhLE9BQU9DLENBQWMsRUFFbENyQixFQUFjLE9BQU9vQixDQUFZLEVBRWpDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRSxRQUFRcEIsQ0FBYSxFQUV6Q0EsRUFBYyxlQUFlLENBQ2pDLENBQUMsQ0FDTCxDQUFDLEVBS0QsZUFBZSxpQkFBa0IsQ0FDN0IsT0FDSyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUNwQixPQUFRLFFBQ1IsY0FBZSxJQUNmLEtBQU0sWUFDTixPQUFRLENBQUMsVUFBVyxLQUFLLEVBQ3pCLFFBQVMsT0FDVCxPQUFRLEdBQUcsT0FBTyxJQUFJLFlBQVksQ0FDdEMsQ0FBbUMsR0FDckMsTUFBTSxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FDaEMsQ0FRQSxTQUFTLGdCQUFnQitCLEVBQWVDLEVBQWNDLEVBQXVCLENBQ3pFLE1BQU1DLEVBQVUsR0FBRyxPQUFPLElBQUksVUFBVSxFQUFJLEdBQUcsT0FBTyxJQUFJLGNBQWMsRUFBSSxJQUV0RUMsRUFBTyxTQUFTLGNBQWMsTUFBTSxFQUMxQ0EsRUFBSyxPQUFTLEdBQUdELENBQU8sbUJBQW1CLG1CQUFtQkgsQ0FBSyxDQUFDLGlCQUNwRUksRUFBSyxPQUFTLE9BRWQsTUFBTUMsRUFBZSxTQUFTLGNBQWMsT0FBTyxFQUNuREEsRUFBYSxLQUFPLFNBQ3BCQSxFQUFhLEtBQU8sYUFDcEJBLEVBQWEsTUFBUUosRUFDckJHLEVBQUssT0FBT0MsQ0FBWSxFQUV4QixNQUFNQyxFQUFlLFNBQVMsY0FBYyxPQUFPLEVBQ25EQSxFQUFhLEtBQU8sU0FDcEJBLEVBQWEsS0FBTyxZQUNwQkEsRUFBYSxNQUFRSixFQUNyQkUsRUFBSyxPQUFPRSxDQUFZLEVBRXhCLE1BQU1DLEVBQWUsU0FBUyxjQUFjLE9BQU8sRUFDbkRBLEVBQWEsS0FBTyxTQUNwQkEsRUFBYSxLQUFPLE9BQ3BCQSxFQUFhLE1BQVEsVUFDckJILEVBQUssT0FBT0csQ0FBWSxFQUV4QixNQUFNQyxFQUFtQixTQUFTLGNBQWMsT0FBTyxFQUN2REEsRUFBaUIsS0FBTyxTQUN4QkEsRUFBaUIsS0FBTyxTQUN4QkEsRUFBaUIsTUFBUSxlQUN6QkosRUFBSyxPQUFPSSxDQUFnQixFQUU1QixNQUFNQyxFQUF5QixTQUFTLGNBQWMsT0FBTyxFQUM3REEsRUFBdUIsS0FBTyxTQUM5QkEsRUFBdUIsS0FBTyxrQkFDOUJBLEVBQXVCLE1BQVEsSUFDL0JMLEVBQUssT0FBT0ssQ0FBc0IsRUFFbEMsU0FBUyxLQUFLLE9BQU9MLENBQUksRUFDekJBLEVBQUssT0FBTyxDQUNoQiIsCiAgIm5hbWVzIjogWyJuYW1lc3BhY2VzIiwgImRpc3BsYXllZCIsICJldmVudCIsICJwYWdlUmV2aXNpb24iLCAicmV2SWQiLCAicGFnZUNvbnRlbnQiLCAic2VjdGlvbnMiLCAiYWxsUmVxdWVzdHMiLCAic2VjdGlvbiIsICJtYXRjaGVkUmVxdWVzdHMiLCAicmVxdWVzdCIsICJmdWxsIiwgInBhcmFtZXRlcnMiLCAicGFyYW1ldGVyIiwgImZpbmFsUGFyYW1ldGVycyIsICJ2YWx1ZSIsICJyZXF1ZXN0cyIsICJtd09sZFRpdGxlIiwgIm13TmV3VGl0bGUiLCAidmFsaWRUaXRsZSIsICJpbnZhbGlkVGl0bGVXYXJuaW5nIiwgInZhbGlkTmFtZXNwYWNlIiwgIm5hbWVzcGFjZSIsICJpbnZhbGlkTmFtZXNwYWNlV2FybmluZyIsICJwYXJzZWRXaWtpdGV4dCIsICJwYXJzZWRIdG1sIiwgInJlcXVlc3RFbGVtZW50IiwgIm91dHB1dEVsZW1lbnQiLCAiaGVhZGVyIiwgInNlY3Rpb25JbmRleCIsICJzZWN0aW9uSGVhZGVyIiwgInNlY3Rpb25Db250ZW50IiwgIm5vUmVxdWVzdHMiLCAicmVxdWVzdHNMaXN0IiwgInJlcXVlc3RJbmRleCIsICJyZW1vdmVSZXF1ZXN0Q2hlY2tib3giLCAicmVtb3ZlUmVxdWVzdERyb3Bkb3duIiwgInJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyIsICJzd2l0Y2hTZWN0aW9uQ2hlY2tib3giLCAicmVtb3ZlUmVxdWVzdExhYmVsIiwgInJlbW92ZVJlcXVlc3REcm9wZG93bk9wdGlvbnMiLCAib3B0aW9uIiwgIm9wdGlvbkVsZW1lbnQiLCAic3dpdGNoU2VjdGlvbkRyb3Bkb3duIiwgInN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cyIsICJzd2l0Y2hTZWN0aW9uTGFiZWwiLCAic3dpdGNoU2VjdGlvblJlYXNvbmluZyIsICJzdWJtaXRCdXR0b24iLCAibG9hZGluZ1NwaW5uZXIiLCAiZW5kUmVzdWx0IiwgImNoYW5nZXMiLCAic2VjdGlvblRpdGxlQWZ0ZXIiLCAibm9SZW1haW5pbmciLCAiZWRpdFN1bW1hcnkiLCAicmVhc29uIiwgInBhZ2VzIiwgInBhZ2UiLCAiZGVzdGluYXRpb24iLCAidGl0bGUiLCAidGV4dCIsICJzdW1tYXJ5IiwgImJhc2VVcmwiLCAiZm9ybSIsICJ0ZXh0Ym94SW5wdXQiLCAic3VtbWFyeUlucHV0IiwgInByZXZpZXdJbnB1dCIsICJzaG93Q2hhbmdlc0lucHV0IiwgInVsdGltYXRlUGFyYW1ldGVySW5wdXQiXQp9Cg==