Jump to content

User:Eejit43/scripts/ajax-undo.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.
// <pre>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/ajax-undo.ts

"use strict";(()=>{var u=new mw.Api;async function x(e){return(await u.get({action:"query",meta:"allmessages",ammessages:e,amlang:mw.config.get("wgContentLanguage")})).query?.allmessages[0].content}function v(e,d){let n=e;for(let[s,o]of d.entries())n=n.replaceAll(`$${s+1}`,o);return n}var h=`#ajax-undo-loading{display:none;height:1.3em;line-height:1.5em;vertical-align:text-bottom;overflow:hidden}#ajax-undo-loading:after{display:inline-table;color:#72777d;color:var(--color-placeholder, #72777d);text-align:left;white-space:pre;animation:ajax-undo-loading .8s steps(10) infinite;content:"\\280b\\a\\2819\\a\\2839\\a\\2838\\a\\283c\\a\\2834\\a\\2826\\a\\2827\\a\\2807\\a\\280f"}#ajax-undo-loading:not(.is-diff){margin:-.3em 3px 0}#ajax-undo-loading.is-diff{height:1.55em}#ajax-undo-loading.is-minerva:not(.is-diff){float:right;margin-top:0}#ajax-undo-loading.is-minerva.is-diff{margin:-.2em 3px}@keyframes ajax-undo-loading{to{transform:translateY(-15em)}}#ajax-undo-reason{display:none;margin-left:3px}#ajax-undo-reason.is-minerva{padding:revert;background:revert;border:revert}#ajax-undo-reason.is-minerva:not(.is-diff){float:right;height:26px}
`;mw.loader.using(["mediawiki.util"],()=>{let e=!!mw.config.get("wgDiffOldId");if(!e&&mw.config.get("wgAction")!=="history")return;mw.util.addCSS(h);let d=mw.config.get("wgPageName"),n=mw.config.get("skin")==="minerva",s={awaitingClick:0,awaitingConfirmation:1,awaitingReload:2};for(let o of document.querySelectorAll(".mw-history-undo, .mw-diff-undo")){let g=o.querySelector("a");if(!g?.href){mw.notify("ajax-undo: Could not find undo link for a diff!",{type:"error"});continue}let f=new URL(g.href),a=document.createElement("span"),l=s.awaitingClick,i=document.createElement("a");i.textContent="ajax undo",i.href=f.href,n&&!e&&(i.style.marginLeft="1em"),i.addEventListener("click",async c=>{if(c.preventDefault(),l===s.awaitingClick)l=s.awaitingConfirmation,t.style.display="inline",t.focus(),i.textContent="confirm ajax undo";else if(l===s.awaitingConfirmation){l=s.awaitingReload,r.style.display="inline-block",i.style.color="gray",t.disabled=!0,n&&i.append(r);let m=f.searchParams.get("undo"),p=f.searchParams.get("undoafter");if(!m||!p){mw.notify("Could not find undo parameters in URL!",{type:"error"});return}let y=o.closest(e?"td":"li")?.querySelector(":scope .mw-userlink bdi")?.textContent;if(!y){mw.notify("Could not find revision user!",{type:"error"});return}let k=await x("undo-summary")??"Undid revision [[Special:Diff/$1|$1]] by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])",w=v(k,[m,y]);if(t.value.trim()&&(w+=`: ${t.value.trim()}`),!await u.postWithEditToken({action:"edit",title:d,undo:m,undoafter:p,summary:w}).catch((S,j)=>(mw.notify(`Error undoing revision: ${j?.error?.code??"Unknown error"} (${S})`,{type:"error"}),setTimeout(()=>{window.location.reload()},2e3),!1)))return;mw.notify("Revision successfully undone, reloading...",{type:"success"}),window.location.reload()}}),e&&a.append(document.createTextNode("(")),a.append(i);let r=document.createElement("span");r.id="ajax-undo-loading",e&&r.classList.add("is-diff"),n?r.classList.add("is-minerva"):a.append(r);let t=document.createElement("input");t.type="text",t.id="ajax-undo-reason",e&&t.classList.add("is-diff"),n&&t.classList.add("is-minerva"),t.placeholder="Insert reason here...",t.addEventListener("keydown",c=>{c.key==="Enter"&&i.click()}),n&&!e?a.prepend(t):a.append(t),e&&a.append(document.createTextNode(")")),e?(o.after(a),o.after(document.createTextNode(" "))):n?o.parentElement?.before(a):o.parentElement?.after(a)}});})();

// </pre>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbGl0eS50cyIsICIuLi9zdHlsZXMvYWpheC11bmRvLmNzcyIsICIuLi9zY3JpcHRzL2FqYXgtdW5kby50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBBcGlRdWVyeUFsbE1lc3NhZ2VzUGFyYW1zLCBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyB9IGZyb20gJ3R5cGVzLW1lZGlhd2lraS1hcGknO1xuaW1wb3J0IHR5cGUgeyBBbGxNZXNzYWdlc1Jlc3VsdCwgUGFnZVJldmlzaW9uc1Jlc3VsdCB9IGZyb20gJy4vZ2xvYmFsLXR5cGVzJztcblxuZXhwb3J0IGNvbnN0IGFwaSA9IG5ldyBtdy5BcGkoKTtcblxuLyoqXG4gKiBGZXRjaGVzIHRoZSBjb250ZW50IG9mIGEgZ2l2ZW4gcGFnZS5cbiAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gZmV0Y2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWdlQ29udGVudCh0aXRsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGF3YWl0IGFwaS5nZXQoe1xuICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgZm9ybWF0dmVyc2lvbjogJzInLFxuICAgICAgICAgICAgcHJvcDogJ3JldmlzaW9ucycsXG4gICAgICAgICAgICBydnByb3A6ICdjb250ZW50JyxcbiAgICAgICAgICAgIHJ2c2xvdHM6ICdtYWluJyxcbiAgICAgICAgICAgIHRpdGxlczogdGl0bGUsXG4gICAgICAgIH0gc2F0aXNmaWVzIEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zKSkgYXMgUGFnZVJldmlzaW9uc1Jlc3VsdFxuICAgICkucXVlcnkucGFnZXNbMF0ucmV2aXNpb25zPy5bMF0uc2xvdHMubWFpbi5jb250ZW50LnRyaW0oKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc3lzdGVtIG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSBtZXNzYWdlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3lzdGVtTWVzc2FnZShtZXNzYWdlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGF3YWl0IGFwaS5nZXQoe1xuICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgbWV0YTogJ2FsbG1lc3NhZ2VzJyxcbiAgICAgICAgICAgIGFtbWVzc2FnZXM6IG1lc3NhZ2VOYW1lLFxuICAgICAgICAgICAgYW1sYW5nOiBtdy5jb25maWcuZ2V0KCd3Z0NvbnRlbnRMYW5ndWFnZScpLFxuICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeUFsbE1lc3NhZ2VzUGFyYW1zKSkgYXMgQWxsTWVzc2FnZXNSZXN1bHRcbiAgICApLnF1ZXJ5Py5hbGxtZXNzYWdlc1swXS5jb250ZW50O1xufVxuXG4vKipcbiAqIEludGVycG9sYXRlcyBhIHN5c3RlbSBtZXNzYWdlIHdpdGggdmFsdWVzLlxuICogQHBhcmFtIG1lc3NhZ2UgVGhlIHN5c3RlbSBtZXNzYWdlIHRvIGludGVycG9sYXRlLlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHRvIGludGVycG9sYXRlIGludG8gdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBvbGF0ZVN5c3RlbU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHJlc3VsdCA9IG1lc3NhZ2U7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmFsdWVdIG9mIHZhbHVlcy5lbnRyaWVzKCkpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKGAkJHtpbmRleCArIDF9YCwgdmFsdWUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICIjYWpheC11bmRvLWxvYWRpbmd7ZGlzcGxheTpub25lO2hlaWdodDoxLjNlbTtsaW5lLWhlaWdodDoxLjVlbTt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbTtvdmVyZmxvdzpoaWRkZW59I2FqYXgtdW5kby1sb2FkaW5nOmFmdGVye2Rpc3BsYXk6aW5saW5lLXRhYmxlO2NvbG9yOiM3Mjc3N2Q7Y29sb3I6dmFyKC0tY29sb3ItcGxhY2Vob2xkZXIsICM3Mjc3N2QpO3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpwcmU7YW5pbWF0aW9uOmFqYXgtdW5kby1sb2FkaW5nIC44cyBzdGVwcygxMCkgaW5maW5pdGU7Y29udGVudDpcIlxcMjgwYlxcYVxcMjgxOVxcYVxcMjgzOVxcYVxcMjgzOFxcYVxcMjgzY1xcYVxcMjgzNFxcYVxcMjgyNlxcYVxcMjgyN1xcYVxcMjgwN1xcYVxcMjgwZlwifSNhamF4LXVuZG8tbG9hZGluZzpub3QoLmlzLWRpZmYpe21hcmdpbjotLjNlbSAzcHggMH0jYWpheC11bmRvLWxvYWRpbmcuaXMtZGlmZntoZWlnaHQ6MS41NWVtfSNhamF4LXVuZG8tbG9hZGluZy5pcy1taW5lcnZhOm5vdCguaXMtZGlmZil7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDowfSNhamF4LXVuZG8tbG9hZGluZy5pcy1taW5lcnZhLmlzLWRpZmZ7bWFyZ2luOi0uMmVtIDNweH1Aa2V5ZnJhbWVzIGFqYXgtdW5kby1sb2FkaW5ne3Rve3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xNWVtKX19I2FqYXgtdW5kby1yZWFzb257ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjNweH0jYWpheC11bmRvLXJlYXNvbi5pcy1taW5lcnZhe3BhZGRpbmc6cmV2ZXJ0O2JhY2tncm91bmQ6cmV2ZXJ0O2JvcmRlcjpyZXZlcnR9I2FqYXgtdW5kby1yZWFzb24uaXMtbWluZXJ2YTpub3QoLmlzLWRpZmYpe2Zsb2F0OnJpZ2h0O2hlaWdodDoyNnB4fVxuIiwgImltcG9ydCB0eXBlIHsgTWVkaWFXaWtpRGF0YUVycm9yIH0gZnJvbSAnQC9nbG9iYWwtdHlwZXMnO1xuaW1wb3J0IHsgYXBpLCBnZXRTeXN0ZW1NZXNzYWdlLCBpbnRlcnBvbGF0ZVN5c3RlbU1lc3NhZ2UgfSBmcm9tICdAL3V0aWxpdHknO1xuaW1wb3J0IGNzc0NvbnRlbnQgZnJvbSAnQHN0eWxlcy9hamF4LXVuZG8uY3NzJyB3aXRoIHsgdHlwZTogJ2NzcycgfTtcblxubXcubG9hZGVyLnVzaW5nKFsnbWVkaWF3aWtpLnV0aWwnXSwgKCkgPT4ge1xuICAgIGNvbnN0IGlzRGlmZiA9ICEhbXcuY29uZmlnLmdldCgnd2dEaWZmT2xkSWQnKTtcblxuICAgIGlmICghaXNEaWZmICYmIG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgIT09ICdoaXN0b3J5JykgcmV0dXJuO1xuXG4gICAgbXcudXRpbC5hZGRDU1MoY3NzQ29udGVudCk7XG5cbiAgICBjb25zdCBwYWdlTmFtZSA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblxuICAgIGNvbnN0IGlzTWluZXJ2YSA9IG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnO1xuXG4gICAgY29uc3QgU1RBR0VTID0ge1xuICAgICAgICBhd2FpdGluZ0NsaWNrOiAwLFxuICAgICAgICBhd2FpdGluZ0NvbmZpcm1hdGlvbjogMSxcbiAgICAgICAgYXdhaXRpbmdSZWxvYWQ6IDIsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdW5kb1NwYW4gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LWhpc3RvcnktdW5kbywgLm13LWRpZmYtdW5kbycpKSB7XG4gICAgICAgIGNvbnN0IHVuZG9MaW5rID0gdW5kb1NwYW4ucXVlcnlTZWxlY3RvcignYScpO1xuXG4gICAgICAgIGlmICghdW5kb0xpbms/LmhyZWYpIHtcbiAgICAgICAgICAgIG13Lm5vdGlmeSgnYWpheC11bmRvOiBDb3VsZCBub3QgZmluZCB1bmRvIGxpbmsgZm9yIGEgZGlmZiEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuZG9VcmwgPSBuZXcgVVJMKHVuZG9MaW5rLmhyZWYpO1xuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cbiAgICAgICAgbGV0IHN0YWdlID0gU1RBR0VTLmF3YWl0aW5nQ2xpY2s7XG5cbiAgICAgICAgY29uc3QgYWpheFVuZG9MaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBhamF4VW5kb0xpbmsudGV4dENvbnRlbnQgPSAnYWpheCB1bmRvJztcbiAgICAgICAgYWpheFVuZG9MaW5rLmhyZWYgPSB1bmRvVXJsLmhyZWY7XG4gICAgICAgIGlmIChpc01pbmVydmEgJiYgIWlzRGlmZikgYWpheFVuZG9MaW5rLnN0eWxlLm1hcmdpbkxlZnQgPSAnMWVtJztcbiAgICAgICAgYWpheFVuZG9MaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoc3RhZ2UgPT09IFNUQUdFUy5hd2FpdGluZ0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgc3RhZ2UgPSBTVEFHRVMuYXdhaXRpbmdDb25maXJtYXRpb247XG5cbiAgICAgICAgICAgICAgICByZWFzb25JbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgcmVhc29uSW5wdXQuZm9jdXMoKTtcblxuICAgICAgICAgICAgICAgIGFqYXhVbmRvTGluay50ZXh0Q29udGVudCA9ICdjb25maXJtIGFqYXggdW5kbyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWdlID09PSBTVEFHRVMuYXdhaXRpbmdDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgICAgICBzdGFnZSA9IFNUQUdFUy5hd2FpdGluZ1JlbG9hZDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgICAgICAgICAgYWpheFVuZG9MaW5rLnN0eWxlLmNvbG9yID0gJ2dyYXknO1xuICAgICAgICAgICAgICAgIHJlYXNvbklucHV0LmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01pbmVydmEpIGFqYXhVbmRvTGluay5hcHBlbmQobG9hZGluZ1NwaW5uZXIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdW5kb0lkID0gdW5kb1VybC5zZWFyY2hQYXJhbXMuZ2V0KCd1bmRvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5kb0FmdGVyID0gdW5kb1VybC5zZWFyY2hQYXJhbXMuZ2V0KCd1bmRvYWZ0ZXInKTtcblxuICAgICAgICAgICAgICAgIGlmICghdW5kb0lkIHx8ICF1bmRvQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KCdDb3VsZCBub3QgZmluZCB1bmRvIHBhcmFtZXRlcnMgaW4gVVJMIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uVXNlciA9IHVuZG9TcGFuLmNsb3Nlc3QoaXNEaWZmID8gJ3RkJyA6ICdsaScpPy5xdWVyeVNlbGVjdG9yKCc6c2NvcGUgLm13LXVzZXJsaW5rIGJkaScpPy50ZXh0Q29udGVudDtcblxuICAgICAgICAgICAgICAgIGlmICghcmV2aXNpb25Vc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIG13Lm5vdGlmeSgnQ291bGQgbm90IGZpbmQgcmV2aXNpb24gdXNlciEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1bmRvU3VtbWFyeVRlbXBsYXRlID1cbiAgICAgICAgICAgICAgICAgICAgKGF3YWl0IGdldFN5c3RlbU1lc3NhZ2UoJ3VuZG8tc3VtbWFyeScpKSA/P1xuICAgICAgICAgICAgICAgICAgICAnVW5kaWQgcmV2aXNpb24gW1tTcGVjaWFsOkRpZmYvJDF8JDFdXSBieSBbW1NwZWNpYWw6Q29udHJpYnV0aW9ucy8kMnwkMl1dIChbW1VzZXIgdGFsazokMnx0YWxrXV0pJztcblxuICAgICAgICAgICAgICAgIGxldCBzdW1tYXJ5ID0gaW50ZXJwb2xhdGVTeXN0ZW1NZXNzYWdlKHVuZG9TdW1tYXJ5VGVtcGxhdGUsIFt1bmRvSWQsIHJldmlzaW9uVXNlcl0pO1xuICAgICAgICAgICAgICAgIGlmIChyZWFzb25JbnB1dC52YWx1ZS50cmltKCkpIHN1bW1hcnkgKz0gYDogJHtyZWFzb25JbnB1dC52YWx1ZS50cmltKCl9YDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHdhc1N1Y2Nlc3NmdWwgPSBhd2FpdCBhcGlcbiAgICAgICAgICAgICAgICAgICAgLnBvc3RXaXRoRWRpdFRva2VuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2VkaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kbzogdW5kb0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb2FmdGVyOiB1bmRvQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yQ29kZSwgZXJyb3JJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdy5ub3RpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYEVycm9yIHVuZG9pbmcgcmV2aXNpb246ICR7KGVycm9ySW5mbyBhcyBNZWRpYVdpa2lEYXRhRXJyb3IpPy5lcnJvcj8uY29kZSA/PyAnVW5rbm93biBlcnJvcid9ICgke2Vycm9yQ29kZX0pYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdlcnJvcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXdhc1N1Y2Nlc3NmdWwpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIG13Lm5vdGlmeSgnUmV2aXNpb24gc3VjY2Vzc2Z1bGx5IHVuZG9uZSwgcmVsb2FkaW5nLi4uJywgeyB0eXBlOiAnc3VjY2VzcycgfSk7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNEaWZmKSBzcGFuLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnKCcpKTtcbiAgICAgICAgc3Bhbi5hcHBlbmQoYWpheFVuZG9MaW5rKTtcblxuICAgICAgICBjb25zdCBsb2FkaW5nU3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuaWQgPSAnYWpheC11bmRvLWxvYWRpbmcnO1xuICAgICAgICBpZiAoaXNEaWZmKSBsb2FkaW5nU3Bpbm5lci5jbGFzc0xpc3QuYWRkKCdpcy1kaWZmJyk7XG4gICAgICAgIGlmIChpc01pbmVydmEpIGxvYWRpbmdTcGlubmVyLmNsYXNzTGlzdC5hZGQoJ2lzLW1pbmVydmEnKTtcbiAgICAgICAgZWxzZSBzcGFuLmFwcGVuZChsb2FkaW5nU3Bpbm5lcik7XG5cbiAgICAgICAgY29uc3QgcmVhc29uSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICByZWFzb25JbnB1dC50eXBlID0gJ3RleHQnO1xuICAgICAgICByZWFzb25JbnB1dC5pZCA9ICdhamF4LXVuZG8tcmVhc29uJztcbiAgICAgICAgaWYgKGlzRGlmZikgcmVhc29uSW5wdXQuY2xhc3NMaXN0LmFkZCgnaXMtZGlmZicpO1xuICAgICAgICBpZiAoaXNNaW5lcnZhKSByZWFzb25JbnB1dC5jbGFzc0xpc3QuYWRkKCdpcy1taW5lcnZhJyk7XG4gICAgICAgIHJlYXNvbklucHV0LnBsYWNlaG9sZGVyID0gJ0luc2VydCByZWFzb24gaGVyZS4uLic7XG4gICAgICAgIHJlYXNvbklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIGFqYXhVbmRvTGluay5jbGljaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNNaW5lcnZhICYmICFpc0RpZmYpIHNwYW4ucHJlcGVuZChyZWFzb25JbnB1dCk7XG4gICAgICAgIGVsc2Ugc3Bhbi5hcHBlbmQocmVhc29uSW5wdXQpO1xuXG4gICAgICAgIGlmIChpc0RpZmYpIHNwYW4uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcpJykpO1xuXG4gICAgICAgIGlmIChpc0RpZmYpIHtcbiAgICAgICAgICAgIHVuZG9TcGFuLmFmdGVyKHNwYW4pO1xuICAgICAgICAgICAgdW5kb1NwYW4uYWZ0ZXIoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNaW5lcnZhKSB1bmRvU3Bhbi5wYXJlbnRFbGVtZW50Py5iZWZvcmUoc3Bhbik7XG4gICAgICAgIGVsc2UgdW5kb1NwYW4ucGFyZW50RWxlbWVudD8uYWZ0ZXIoc3Bhbik7XG4gICAgfVxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7bUJBR08sSUFBTUEsRUFBTSxJQUFJLEdBQUcsSUF1QjFCLGVBQXNCQyxFQUFp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QzNDLENBQ0osQ0FBQyIsCiAgIm5hbWVzIjogWyJhcGkiLCAiZ2V0U3lzdGVtTWVzc2FnZSIsICJtZXNzYWdlTmFtZSIsICJhcGkiLCAiaW50ZXJwb2xhdGVTeXN0ZW1NZXNzYWdlIiwgIm1lc3NhZ2UiLCAidmFsdWVzIiwgInJlc3VsdCIsICJpbmRleCIsICJ2YWx1ZSIsICJhamF4X3VuZG9fZGVmYXVsdCIsICJpc0RpZmYiLCAiYWpheF91bmRvX2RlZmF1bHQiLCAicGFnZU5hbWUiLCAiaXNNaW5lcnZhIiwgIlNUQUdFUyIsICJ1bmRvU3BhbiIsICJ1bmRvTGluayIsICJ1bmRvVXJsIiwgInNwYW4iLCAic3RhZ2UiLCAiYWpheFVuZG9MaW5rIiwgImV2ZW50IiwgInJlYXNvbklucHV0IiwgImxvYWRpbmdTcGlubmVyIiwgInVuZG9JZCIsICJ1bmRvQWZ0ZXIiLCAicmV2aXNpb25Vc2VyIiwgInVuZG9TdW1tYXJ5VGVtcGxhdGUiLCAiZ2V0U3lzdGVtTWVzc2FnZSIsICJzdW1tYXJ5IiwgImludGVycG9sYXRlU3lzdGVtTWVzc2FnZSIsICJhcGkiLCAiZXJyb3JDb2RlIiwgImVycm9ySW5mbyJdCn0K