User:Eejit43/scripts/ajax-undo.js: Difference between revisions

Content deleted Content added
Undid revision 1169398343 by Eejit43 (talk): whoops!
Syncing script from GitHub (via script)
 
(18 intermediate revisions by the same user not shown)
Line 1:
// <nowikipre>
// 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 g=`#ajax-undo-loading{display:none;vertical-align:text-bottom;height:1.3em;overflow:hidden;line-height:1.5em}#ajax-undo-loading:after{display:inline-table;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";color:gray;text-align:left;white-space:pre}#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{border:revert;background:revert;padding:revert}#ajax-undo-reason.is-minerva:not(.is-diff){float:right;height:26px}
"use strict";
`;var y=new mw.Api;mw.loader.using(["mediawiki.util"],()=>{let n=mw.config.get("wgDiffOldId");if(mw.config.get("wgAction")!=="history"&&!n)return;mw.util.addCSS(g);let a=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 u=o.querySelector("a");if(!u?.href){mw.notify("ajax-undo: Could not find undo link for a diff!",{type:"error"});continue}let f=new URL(u.href),i=document.createElement("span"),d=s.awaitingClick,t=document.createElement("a");t.textContent="ajax undo",t.href=f.href,a&&!n&&(t.style.marginLeft="1em"),t.addEventListener("click",async c=>{if(c.preventDefault(),d===s.awaitingClick)d=s.awaitingConfirmation,e.style.display="inline",e.focus(),t.textContent="confirm ajax undo";else if(d===s.awaitingConfirmation){d=s.awaitingReload,r.style.display="inline-block",t.style.color="gray",e.disabled=!0,a&&t.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 l=o.closest(n?"td":"li")?.querySelector(".mw-userlink bdi")?.textContent;if(!l){mw.notify("Could not find revision user!",{type:"error"});return}if(!await y.postWithEditToken({action:"edit",title:mw.config.get("wgPageName"),undo:m,undoafter:p,summary:`Undid revision ${m} by [[Special:Contributions/${l}|${l}]] ([[User talk:${l}|talk]])${e.value?`: ${e.value}`:""}`}).catch((w,v)=>(mw.notify(`Error undoing revision: ${v?.error?.code??"Unknown error"} (${w})`,{type:"error"}),setTimeout(()=>{window.___location.reload()},2e3),!1)))return;mw.notify("Revision successfully undone, reloading...",{type:"success"}),window.___location.reload()}}),n&&i.append(document.createTextNode("(")),i.append(t);let r=document.createElement("span");r.id="ajax-undo-loading",n&&r.classList.add("is-diff"),a&&r.classList.add("is-minerva"),a||i.append(r);let e=document.createElement("input");e.type="text",e.id="ajax-undo-reason",n&&e.classList.add("is-diff"),a&&e.classList.add("is-minerva"),e.placeholder="Insert reason here...",e.addEventListener("keydown",c=>{c.key==="Enter"&&t.click()}),a&&!n?i.prepend(e):i.append(e),n&&i.append(document.createTextNode(")")),n?(o.after(i),o.after(document.createTextNode(" "))):a?o.parentElement?.before(i):o.parentElement?.after(i)}});})();
mw.loader.using(["mediawiki.util"], () => {
const isDiff = mw.config.get("wgDiffOldId");
if (mw.config.get("wgAction") !== "history" && !isDiff)
return;
const isMinerva = mw.config.get("skin") === "minerva";
const STAGES = {
awaitingClick: 0,
awaitingConfirmation: 1,
awaitingReload: 2
};
mw.util.addCSS(`
#ajax-undo-loading {
display: none;
vertical-align: text-bottom;
height: 1.3em;
overflow: hidden;
line-height: 1.5em;
}
 
// </pre>
#ajax-undo-loading::after {
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3R5bGVzL2FqYXgtdW5kby5jc3MiLCAiLi4vdXRpbGl0eS50cyIsICIuLi9zY3JpcHRzL2FqYXgtdW5kby50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiI2FqYXgtdW5kby1sb2FkaW5ne2Rpc3BsYXk6bm9uZTt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbTtoZWlnaHQ6MS4zZW07b3ZlcmZsb3c6aGlkZGVuO2xpbmUtaGVpZ2h0OjEuNWVtfSNhamF4LXVuZG8tbG9hZGluZzphZnRlcntkaXNwbGF5OmlubGluZS10YWJsZTthbmltYXRpb246YWpheC11bmRvLWxvYWRpbmcgLjhzIHN0ZXBzKDEwKSBpbmZpbml0ZTtjb250ZW50OlwiXFwyODBiXFxhXFwyODE5XFxhXFwyODM5XFxhXFwyODM4XFxhXFwyODNjXFxhXFwyODM0XFxhXFwyODI2XFxhXFwyODI3XFxhXFwyODA3XFxhXFwyODBmXCI7Y29sb3I6Z3JheTt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6cHJlfSNhamF4LXVuZG8tbG9hZGluZzpub3QoLmlzLWRpZmYpe21hcmdpbjotLjNlbSAzcHggMH0jYWpheC11bmRvLWxvYWRpbmcuaXMtZGlmZntoZWlnaHQ6MS41NWVtfSNhamF4LXVuZG8tbG9hZGluZy5pcy1taW5lcnZhOm5vdCguaXMtZGlmZil7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDowfSNhamF4LXVuZG8tbG9hZGluZy5pcy1taW5lcnZhLmlzLWRpZmZ7bWFyZ2luOi0uMmVtIDNweH1Aa2V5ZnJhbWVzIGFqYXgtdW5kby1sb2FkaW5ne3Rve3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xNWVtKX19I2FqYXgtdW5kby1yZWFzb257ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjNweH0jYWpheC11bmRvLXJlYXNvbi5pcy1taW5lcnZhe2JvcmRlcjpyZXZlcnQ7YmFja2dyb3VuZDpyZXZlcnQ7cGFkZGluZzpyZXZlcnR9I2FqYXgtdW5kby1yZWFzb24uaXMtbWluZXJ2YTpub3QoLmlzLWRpZmYpe2Zsb2F0OnJpZ2h0O2hlaWdodDoyNnB4fVxuIiwgImltcG9ydCB0eXBlIHsgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMgfSBmcm9tICd0eXBlcy1tZWRpYXdpa2kvYXBpX3BhcmFtcyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2VSZXZpc2lvbnNSZXN1bHQgfSBmcm9tICcuL2dsb2JhbC10eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBhcGkgPSBuZXcgbXcuQXBpKCk7XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgY29udGVudCBvZiBhIGdpdmVuIHBhZ2UuXG4gKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIHRvIGZldGNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZUNvbnRlbnQodGl0bGU6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICAgIChhd2FpdCBhcGkuZ2V0KHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIGZvcm1hdHZlcnNpb246ICcyJyxcbiAgICAgICAgICAgIHByb3A6ICdyZXZpc2lvbnMnLFxuICAgICAgICAgICAgcnZwcm9wOiAnY29udGVudCcsXG4gICAgICAgICAgICBydnNsb3RzOiAnbWFpbicsXG4gICAgICAgICAgICB0aXRsZXM6IHRpdGxlLFxuICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcykpIGFzIFBhZ2VSZXZpc2lvbnNSZXN1bHRcbiAgICApLnF1ZXJ5LnBhZ2VzWzBdLnJldmlzaW9ucz8uWzBdLnNsb3RzLm1haW4uY29udGVudC50cmltKCk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBNZWRpYVdpa2lEYXRhRXJyb3IgfSBmcm9tICcuLi9nbG9iYWwtdHlwZXMnO1xuaW1wb3J0IGNzc0NvbnRlbnQgZnJvbSAnLi4vc3R5bGVzL2FqYXgtdW5kby5jc3MnIHdpdGggeyB0eXBlOiAnY3NzJyB9O1xuaW1wb3J0IHsgYXBpIH0gZnJvbSAnLi4vdXRpbGl0eSc7XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBjb25zdCBpc0RpZmYgPSBtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpO1xuXG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgIT09ICdoaXN0b3J5JyAmJiAhaXNEaWZmKSByZXR1cm47XG5cbiAgICBtdy51dGlsLmFkZENTUyhjc3NDb250ZW50KTtcblxuICAgIGNvbnN0IGlzTWluZXJ2YSA9IG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnO1xuXG4gICAgY29uc3QgU1RBR0VTID0ge1xuICAgICAgICBhd2FpdGluZ0NsaWNrOiAwLFxuICAgICAgICBhd2FpdGluZ0NvbmZpcm1hdGlvbjogMSxcbiAgICAgICAgYXdhaXRpbmdSZWxvYWQ6IDIsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdW5kb1NwYW4gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LWhpc3RvcnktdW5kbywgLm13LWRpZmYtdW5kbycpKSB7XG4gICAgICAgIGNvbnN0IHVuZG9MaW5rID0gdW5kb1NwYW4ucXVlcnlTZWxlY3RvcignYScpO1xuXG4gICAgICAgIGlmICghdW5kb0xpbms/LmhyZWYpIHtcbiAgICAgICAgICAgIG13Lm5vdGlmeSgnYWpheC11bmRvOiBDb3VsZCBub3QgZmluZCB1bmRvIGxpbmsgZm9yIGEgZGlmZiEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuZG9VcmwgPSBuZXcgVVJMKHVuZG9MaW5rLmhyZWYpO1xuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cbiAgICAgICAgbGV0IHN0YWdlID0gU1RBR0VTLmF3YWl0aW5nQ2xpY2s7XG5cbiAgICAgICAgY29uc3QgYWpheFVuZG9MaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBhamF4VW5kb0xpbmsudGV4dENvbnRlbnQgPSAnYWpheCB1bmRvJztcbiAgICAgICAgYWpheFVuZG9MaW5rLmhyZWYgPSB1bmRvVXJsLmhyZWY7XG4gICAgICAgIGlmIChpc01pbmVydmEgJiYgIWlzRGlmZikgYWpheFVuZG9MaW5rLnN0eWxlLm1hcmdpbkxlZnQgPSAnMWVtJztcbiAgICAgICAgYWpheFVuZG9MaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoc3RhZ2UgPT09IFNUQUdFUy5hd2FpdGluZ0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgc3RhZ2UgPSBTVEFHRVMuYXdhaXRpbmdDb25maXJtYXRpb247XG5cbiAgICAgICAgICAgICAgICByZWFzb25JbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgcmVhc29uSW5wdXQuZm9jdXMoKTtcblxuICAgICAgICAgICAgICAgIGFqYXhVbmRvTGluay50ZXh0Q29udGVudCA9ICdjb25maXJtIGFqYXggdW5kbyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWdlID09PSBTVEFHRVMuYXdhaXRpbmdDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgICAgICBzdGFnZSA9IFNUQUdFUy5hd2FpdGluZ1JlbG9hZDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgICAgICAgICAgYWpheFVuZG9MaW5rLnN0eWxlLmNvbG9yID0gJ2dyYXknO1xuICAgICAgICAgICAgICAgIHJlYXNvbklucHV0LmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01pbmVydmEpIGFqYXhVbmRvTGluay5hcHBlbmQobG9hZGluZ1NwaW5uZXIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdW5kb0lkID0gdW5kb1VybC5zZWFyY2hQYXJhbXMuZ2V0KCd1bmRvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5kb0FmdGVyID0gdW5kb1VybC5zZWFyY2hQYXJhbXMuZ2V0KCd1bmRvYWZ0ZXInKTtcblxuICAgICAgICAgICAgICAgIGlmICghdW5kb0lkIHx8ICF1bmRvQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KCdDb3VsZCBub3QgZmluZCB1bmRvIHBhcmFtZXRlcnMgaW4gVVJMIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uVXNlciA9IHVuZG9TcGFuLmNsb3Nlc3QoaXNEaWZmID8gJ3RkJyA6ICdsaScpPy5xdWVyeVNlbGVjdG9yKCcubXctdXNlcmxpbmsgYmRpJyk/LnRleHRDb250ZW50O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXZpc2lvblVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KCdDb3VsZCBub3QgZmluZCByZXZpc2lvbiB1c2VyIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlcbiAgICAgICAgICAgICAgICAgICAgLnBvc3RXaXRoRWRpdFRva2VuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2VkaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZG86IHVuZG9JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZG9hZnRlcjogdW5kb0FmdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogYFVuZGlkIHJldmlzaW9uICR7dW5kb0lkfSBieSBbW1NwZWNpYWw6Q29udHJpYnV0aW9ucy8ke3JldmlzaW9uVXNlcn18JHtyZXZpc2lvblVzZXJ9XV0gKFtbVXNlciB0YWxrOiR7cmV2aXNpb25Vc2VyfXx0YWxrXV0pJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25JbnB1dC52YWx1ZSA/IGA6ICR7cmVhc29uSW5wdXQudmFsdWV9YCA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvckNvZGUsIGVycm9ySW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBFcnJvciB1bmRvaW5nIHJldmlzaW9uOiAkeyhlcnJvckluZm8gYXMgTWVkaWFXaWtpRGF0YUVycm9yKT8uZXJyb3I/LmNvZGUgPz8gJ1Vua25vd24gZXJyb3InfSAoJHtlcnJvckNvZGV9KWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZXJyb3InIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBtdy5ub3RpZnkoJ1JldmlzaW9uIHN1Y2Nlc3NmdWxseSB1bmRvbmUsIHJlbG9hZGluZy4uLicsIHsgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRGlmZikgc3Bhbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJygnKSk7XG4gICAgICAgIHNwYW4uYXBwZW5kKGFqYXhVbmRvTGluayk7XG5cbiAgICAgICAgY29uc3QgbG9hZGluZ1NwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLmlkID0gJ2FqYXgtdW5kby1sb2FkaW5nJztcbiAgICAgICAgaWYgKGlzRGlmZikgbG9hZGluZ1NwaW5uZXIuY2xhc3NMaXN0LmFkZCgnaXMtZGlmZicpO1xuICAgICAgICBpZiAoaXNNaW5lcnZhKSBsb2FkaW5nU3Bpbm5lci5jbGFzc0xpc3QuYWRkKCdpcy1taW5lcnZhJyk7XG5cbiAgICAgICAgaWYgKCFpc01pbmVydmEpIHNwYW4uYXBwZW5kKGxvYWRpbmdTcGlubmVyKTtcblxuICAgICAgICBjb25zdCByZWFzb25JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIHJlYXNvbklucHV0LnR5cGUgPSAndGV4dCc7XG4gICAgICAgIHJlYXNvbklucHV0LmlkID0gJ2FqYXgtdW5kby1yZWFzb24nO1xuICAgICAgICBpZiAoaXNEaWZmKSByZWFzb25JbnB1dC5jbGFzc0xpc3QuYWRkKCdpcy1kaWZmJyk7XG4gICAgICAgIGlmIChpc01pbmVydmEpIHJlYXNvbklucHV0LmNsYXNzTGlzdC5hZGQoJ2lzLW1pbmVydmEnKTtcbiAgICAgICAgcmVhc29uSW5wdXQucGxhY2Vob2xkZXIgPSAnSW5zZXJ0IHJlYXNvbiBoZXJlLi4uJztcbiAgICAgICAgcmVhc29uSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykgYWpheFVuZG9MaW5rLmNsaWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc01pbmVydmEgJiYgIWlzRGlmZikgc3Bhbi5wcmVwZW5kKHJlYXNvbklucHV0KTtcbiAgICAgICAgZWxzZSBzcGFuLmFwcGVuZChyZWFzb25JbnB1dCk7XG5cbiAgICAgICAgaWYgKGlzRGlmZikgc3Bhbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyknKSk7XG5cbiAgICAgICAgaWYgKGlzRGlmZikge1xuICAgICAgICAgICAgdW5kb1NwYW4uYWZ0ZXIoc3Bhbik7XG4gICAgICAgICAgICB1bmRvU3Bhbi5hZnRlcihkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01pbmVydmEpIHVuZG9TcGFuLnBhcmVudEVsZW1lbnQ/LmJlZm9yZShzcGFuKTtcbiAgICAgICAgZWxzZSB1bmRvU3Bhbi5wYXJlbnRFbGVtZW50Py5hZnRlcihzcGFuKTtcbiAgICB9XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OzttQkFBQSxJQUFBQSxFQUFBO0VDR08sSUFBTUMsRUFBTSxJQUFJLEdBQUcsSUNDMUIsR0FBRyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRyxJQUFNLENBQ3RDLElBQU1DLEVBQVMsR0FBRyxPQUFPLElBQUksYUFBYSxFQUUxQyxHQUFJLEdBQUcsT0FBTyxJQUFJLFVBQVUsSUFBTSxXQUFhLENBQUNBLEVBQVEsT0FFeEQsR0FBRyxLQUFLLE9BQU9DLENBQVUsRUFFekIsSUFBTUMsRUFBWSxHQUFHLE9BQU8sSUFBSSxNQUFNLElBQU0sVUFFdENDLEVBQVMsQ0FDWCxjQUFlLEVBQ2YscUJBQXNCLEVBQ3RCLGVBQWdCLENBQ3BCLEVBRUEsUUFBV0MsS0FBWSxTQUFTLGlCQUFpQixpQ0FBaUMsRUFBRyxDQUNqRixJQUFNQyxFQUFXRCxFQUFTLGNBQWMsR0FBRyxFQUUzQyxHQUFJLENB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WCxHQUFRTyxFQUFLLE9BQU8sU0FBUyxlQUFlLEdBQUcsQ0FBQyxFQUVoRFAsR0FDQUksRUFBUyxNQUFNRyxDQUFJLEVBQ25CSCxFQUFTLE1BQU0sU0FBUyxlQUFlLEdBQUcsQ0FBQyxHQUNwQ0YsRUFBV0UsRUFBUyxlQUFlLE9BQU9HLENBQUksRUFDcERILEVBQVMsZUFBZSxNQUFNRyxDQUFJLENBQzNDLENBQ0osQ0FBQyIsCiAgIm5hbWVzIjogWyJhamF4X3VuZG9fZGVmYXVsdCIsICJhcGkiLCAiaXNEaWZmIiwgImFqYXhfdW5kb19kZWZhdWx0IiwgImlzTWluZXJ2YSIsICJTVEFHRVMiLCAidW5kb1NwYW4iLCAidW5kb0xpbmsiLCAidW5kb1VybCIsICJzcGFuIiwgInN0YWdlIiwgImFqYXhVbmRvTGluayIsICJldmVudCIsICJyZWFzb25JbnB1dCIsICJsb2FkaW5nU3Bpbm5lciIsICJ1bmRvSWQiLCAidW5kb0FmdGVyIiwgInJldmlzaW9uVXNlciIsICJhcGkiLCAiZXJyb3JDb2RlIiwgImVycm9ySW5mbyJdCn0K
display: inline-table;
animation: ajax-undo-loading 0.8s steps(10) infinite;
content: "\u280B\\A\u2819\\A\u2839\\A\u2838\\A\u283C\\A\u2834\\A\u2826\\A\u2827\\A\u2807\\A\u280F";
color: gray;
text-align: left;
white-space: pre;
}
 
#ajax-undo-loading.is-diff {
height: 1.55em;
}
 
#ajax-undo-loading:not(.is-diff) {
margin: -0.3em 3px 0 3px;
}
 
#ajax-undo-loading.is-minerva:not(.is-diff) {
float: right;
margin-top: 0px;
}
 
@keyframes ajax-undo-loading {
to {
transform: translateY(-15em);
}
}
 
#ajax-undo-reason {
display: none;
margin-left: 3px;
}
 
#ajax-undo-reason.is-minerva {
border: revert;
background: revert;
padding: revert;
}
 
#ajax-undo-reason.is-minerva:not(.is-diff) {
float: right;
height: 26px;
}`);
for (const undoSpan of document.querySelectorAll(".mw-history-undo, .mw-diff-undo")) {
const undoLink = undoSpan.querySelector("a");
if (!undoLink?.href) {
mw.notify("Could not find undo link!", { type: "error" });
continue;
}
const undoUrl = new URL(undoLink.href);
const span = document.createElement("span");
let stage = STAGES.awaitingClick;
const ajaxUndoLink = document.createElement("a");
ajaxUndoLink.textContent = "ajax undo";
ajaxUndoLink.href = undoUrl.href;
if (isMinerva && !isDiff)
ajaxUndoLink.style.marginLeft = "1em";
ajaxUndoLink.addEventListener("click", async (event) => {
event.preventDefault();
if (stage === STAGES.awaitingClick) {
stage = STAGES.awaitingConfirmation;
reasonInput.style.display = "inline";
reasonInput.focus();
ajaxUndoLink.textContent = "confirm ajax undo";
} else if (stage === STAGES.awaitingConfirmation) {
stage = STAGES.awaitingReload;
loadingSpinner.style.display = "inline-block";
ajaxUndoLink.style.color = "gray";
reasonInput.disabled = true;
if (isMinerva && !isDiff)
ajaxUndoLink.append(loadingSpinner);
const undoId = undoUrl.searchParams.get("undo");
const undoAfter = undoUrl.searchParams.get("undoafter");
if (!undoId || !undoAfter)
return mw.notify("Could not find undo parameters in URL!", { type: "error" });
const revisionUser = undoSpan.closest(isDiff ? "td" : "li")?.querySelector(".mw-userlink bdi")?.textContent;
if (!revisionUser)
return mw.notify("Could not find revision user!", { type: "error" });
const success = await new mw.Api().postWithEditToken({
action: "edit",
title: mw.config.get("wgPageName"),
undo: undoId,
undoafter: undoAfter,
summary: `Undid revision ${undoId} by [[Special:Contributions/${revisionUser}|${revisionUser}]] ([[User talk:${revisionUser}|talk]])${reasonInput.value ? `: ${reasonInput.value}` : ""}`
}).catch((errorCode, { error }) => {
mw.notify(`${error.info} (${errorCode})`, { type: "error" });
setTimeout(() => window.___location.reload(), 2e3);
return false;
});
if (!success)
return;
mw.notify("Revision successfully undone, reloading...", { type: "success" });
window.___location.reload();
}
});
if (isDiff)
span.append(document.createTextNode("("));
span.append(ajaxUndoLink);
const loadingSpinner = document.createElement("span");
loadingSpinner.id = "ajax-undo-loading";
if (isDiff)
loadingSpinner.classList.add("is-diff");
if (isMinerva)
loadingSpinner.classList.add("is-minerva");
if (!isMinerva)
span.append(loadingSpinner);
const reasonInput = document.createElement("input");
reasonInput.type = "text";
reasonInput.id = "ajax-undo-reason";
if (isDiff)
reasonInput.classList.add("is-diff");
if (isMinerva)
reasonInput.classList.add("is-minerva");
reasonInput.placeholder = "Insert reason here...";
reasonInput.addEventListener("keydown", (event) => {
if (event.key === "Enter")
ajaxUndoLink.click();
});
span.prepend(reasonInput);
if (isDiff)
span.append(document.createTextNode(")"));
if (isDiff) {
undoSpan.after(span);
undoSpan.after(document.createTextNode(" "));
} else if (isMinerva)
undoSpan.parentElement?.before(span);
else
undoSpan.parentElement?.after(span);
}
});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9hamF4LXVuZG8udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE1lZGlhV2lraURhdGFFcnJvciB9IGZyb20gJy4uL2dsb2JhbC10eXBlcyc7XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBjb25zdCBpc0RpZmYgPSBtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpO1xuXG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgIT09ICdoaXN0b3J5JyAmJiAhaXNEaWZmKSByZXR1cm47XG5cbiAgICBjb25zdCBpc01pbmVydmEgPSBtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJztcblxuICAgIGNvbnN0IFNUQUdFUyA9IHtcbiAgICAgICAgYXdhaXRpbmdDbGljazogMCxcbiAgICAgICAgYXdhaXRpbmdDb25maXJtYXRpb246IDEsXG4gICAgICAgIGF3YWl0aW5nUmVsb2FkOiAyLFxuICAgIH07XG5cbiAgICBtdy51dGlsLmFkZENTUyhgXG4jYWpheC11bmRvLWxvYWRpbmcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xuICAgIGhlaWdodDogMS4zZW07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBsaW5lLWhlaWdodDogMS41ZW07XG59XG5cbiNhamF4LXVuZG8tbG9hZGluZzo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICBhbmltYXRpb246IGFqYXgtdW5kby1sb2FkaW5nIDAuOHMgc3RlcHMoMTApIGluZmluaXRlO1xuICAgIGNvbnRlbnQ6IFwiXHUyODBCXFxcXEFcdTI4MTlcXFxcQVx1MjgzOVxcXFxBXHUyODM4XFxcXEFcdTI4M0NcXFxcQVx1MjgzNFxcXFxBXHUyODI2XFxcXEFcdTI4MjdcXFxcQVx1MjgwN1xcXFxBXHUyODBGXCI7XG4gICAgY29sb3I6IGdyYXk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuXG4jYWpheC11bmRvLWxvYWRpbmcuaXMtZGlmZiB7XG4gICAgaGVpZ2h0OiAxLjU1ZW07XG59XG5cbiNhamF4LXVuZG8tbG9hZGluZzpub3QoLmlzLWRpZmYpIHtcbiAgICBtYXJnaW46IC0wLjNlbSAzcHggMCAzcHg7XG59XG5cbiNhamF4LXVuZG8tbG9hZGluZy5pcy1taW5lcnZhOm5vdCguaXMtZGlmZikge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW4tdG9wOiAwcHg7XG59XG5cbkBrZXlmcmFtZXMgYWpheC11bmRvLWxvYWRpbmcge1xuICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNWVtKTtcbiAgICB9XG59XG5cbiNhamF4LXVuZG8tcmVhc29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiAzcHg7XG59XG5cbiNhamF4LXVuZG8tcmVhc29uLmlzLW1pbmVydmEge1xuICAgIGJvcmRlcjogcmV2ZXJ0O1xuICAgIGJhY2tncm91bmQ6IHJldmVydDtcbiAgICBwYWRkaW5nOiByZXZlcnQ7XG59XG5cbiNhamF4LXVuZG8tcmVhc29uLmlzLW1pbmVydmE6bm90KC5pcy1kaWZmKSB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIGhlaWdodDogMjZweDtcbn1gKTtcblxuICAgIGZvciAoY29uc3QgdW5kb1NwYW4gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LWhpc3RvcnktdW5kbywgLm13LWRpZmYtdW5kbycpKSB7XG4gICAgICAgIGNvbnN0IHVuZG9MaW5rID0gdW5kb1NwYW4ucXVlcnlTZWxlY3RvcignYScpO1xuXG4gICAgICAgIGlmICghdW5kb0xpbms/LmhyZWYpIHtcbiAgICAgICAgICAgIG13Lm5vdGlmeSgnQ291bGQgbm90IGZpbmQgdW5kbyBsaW5rIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5kb1VybCA9IG5ldyBVUkwodW5kb0xpbmsuaHJlZik7XG5cbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblxuICAgICAgICBsZXQgc3RhZ2UgPSBTVEFHRVMuYXdhaXRpbmdDbGljaztcblxuICAgICAgICBjb25zdCBhamF4VW5kb0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGFqYXhVbmRvTGluay50ZXh0Q29udGVudCA9ICdhamF4IHVuZG8nO1xuICAgICAgICBhamF4VW5kb0xpbmsuaHJlZiA9IHVuZG9VcmwuaHJlZjtcbiAgICAgICAgaWYgKGlzTWluZXJ2YSAmJiAhaXNEaWZmKSBhamF4VW5kb0xpbmsuc3R5bGUubWFyZ2luTGVmdCA9ICcxZW0nO1xuICAgICAgICBhamF4VW5kb0xpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChzdGFnZSA9PT0gU1RBR0VTLmF3YWl0aW5nQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBzdGFnZSA9IFNUQUdFUy5hd2FpdGluZ0NvbmZpcm1hdGlvbjtcblxuICAgICAgICAgICAgICAgIHJlYXNvbklucHV0LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICByZWFzb25JbnB1dC5mb2N1cygpO1xuXG4gICAgICAgICAgICAgICAgYWpheFVuZG9MaW5rLnRleHRDb250ZW50ID0gJ2NvbmZpcm0gYWpheCB1bmRvJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhZ2UgPT09IFNUQUdFUy5hd2FpdGluZ0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgICAgIHN0YWdlID0gU1RBR0VTLmF3YWl0aW5nUmVsb2FkO1xuICAgICAgICAgICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgICAgICAgICBhamF4VW5kb0xpbmsuc3R5bGUuY29sb3IgPSAnZ3JheSc7XG4gICAgICAgICAgICAgICAgcmVhc29uSW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWluZXJ2YSAmJiAhaXNEaWZmKSBhamF4VW5kb0xpbmsuYXBwZW5kKGxvYWRpbmdTcGlubmVyKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVuZG9JZCA9IHVuZG9Vcmwuc2VhcmNoUGFyYW1zLmdldCgndW5kbycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuZG9BZnRlciA9IHVuZG9Vcmwuc2VhcmNoUGFyYW1zLmdldCgndW5kb2FmdGVyJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXVuZG9JZCB8fCAhdW5kb0FmdGVyKSByZXR1cm4gbXcubm90aWZ5KCdDb3VsZCBub3QgZmluZCB1bmRvIHBhcmFtZXRlcnMgaW4gVVJMIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uVXNlciA9IHVuZG9TcGFuLmNsb3Nlc3QoaXNEaWZmID8gJ3RkJyA6ICdsaScpPy5xdWVyeVNlbGVjdG9yKCcubXctdXNlcmxpbmsgYmRpJyk/LnRleHRDb250ZW50O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXZpc2lvblVzZXIpIHJldHVybiBtdy5ub3RpZnkoJ0NvdWxkIG5vdCBmaW5kIHJldmlzaW9uIHVzZXIhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IG5ldyBtdy5BcGkoKVxuICAgICAgICAgICAgICAgICAgICAucG9zdFdpdGhFZGl0VG9rZW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnZWRpdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kbzogdW5kb0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb2FmdGVyOiB1bmRvQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiBgVW5kaWQgcmV2aXNpb24gJHt1bmRvSWR9IGJ5IFtbU3BlY2lhbDpDb250cmlidXRpb25zLyR7cmV2aXNpb25Vc2VyfXwke3JldmlzaW9uVXNlcn1dXSAoW1tVc2VyIHRhbGs6JHtyZXZpc2lvblVzZXJ9fHRhbGtdXSkke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbklucHV0LnZhbHVlID8gYDogJHtyZWFzb25JbnB1dC52YWx1ZX1gIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yQ29kZTogc3RyaW5nLCB7IGVycm9yIH06IE1lZGlhV2lraURhdGFFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KGAke2Vycm9yLmluZm99ICgke2Vycm9yQ29kZX0pYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCksIDIwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgbXcubm90aWZ5KCdSZXZpc2lvbiBzdWNjZXNzZnVsbHkgdW5kb25lLCByZWxvYWRpbmcuLi4nLCB7IHR5cGU6ICdzdWNjZXNzJyB9KTtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc0RpZmYpIHNwYW4uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcoJykpO1xuICAgICAgICBzcGFuLmFwcGVuZChhamF4VW5kb0xpbmspO1xuXG4gICAgICAgIGNvbnN0IGxvYWRpbmdTcGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBsb2FkaW5nU3Bpbm5lci5pZCA9ICdhamF4LXVuZG8tbG9hZGluZyc7XG4gICAgICAgIGlmIChpc0RpZmYpIGxvYWRpbmdTcGlubmVyLmNsYXNzTGlzdC5hZGQoJ2lzLWRpZmYnKTtcbiAgICAgICAgaWYgKGlzTWluZXJ2YSkgbG9hZGluZ1NwaW5uZXIuY2xhc3NMaXN0LmFkZCgnaXMtbWluZXJ2YScpO1xuXG4gICAgICAgIGlmICghaXNNaW5lcnZhKSBzcGFuLmFwcGVuZChsb2FkaW5nU3Bpbm5lcik7XG5cbiAgICAgICAgY29uc3QgcmVhc29uSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICByZWFzb25JbnB1dC50eXBlID0gJ3RleHQnO1xuICAgICAgICByZWFzb25JbnB1dC5pZCA9ICdhamF4LXVuZG8tcmVhc29uJztcbiAgICAgICAgaWYgKGlzRGlmZikgcmVhc29uSW5wdXQuY2xhc3NMaXN0LmFkZCgnaXMtZGlmZicpO1xuICAgICAgICBpZiAoaXNNaW5lcnZhKSByZWFzb25JbnB1dC5jbGFzc0xpc3QuYWRkKCdpcy1taW5lcnZhJyk7XG4gICAgICAgIHJlYXNvbklucHV0LnBsYWNlaG9sZGVyID0gJ0luc2VydCByZWFzb24gaGVyZS4uLic7XG4gICAgICAgIHJlYXNvbklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIGFqYXhVbmRvTGluay5jbGljaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzcGFuLnByZXBlbmQocmVhc29uSW5wdXQpO1xuXG4gICAgICAgIGlmIChpc0RpZmYpIHNwYW4uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcpJykpO1xuXG4gICAgICAgIGlmIChpc0RpZmYpIHtcbiAgICAgICAgICAgIHVuZG9TcGFuLmFmdGVyKHNwYW4pO1xuICAgICAgICAgICAgdW5kb1NwYW4uYWZ0ZXIoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNaW5lcnZhKSB1bmRvU3Bhbi5wYXJlbnRFbGVtZW50Py5iZWZvcmUoc3Bhbik7XG4gICAgICAgIGVsc2UgdW5kb1NwYW4ucGFyZW50RWxlbWVudD8uYWZ0ZXIoc3Bhbik7XG4gICAgfVxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBRUEsR0FBRyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNO0FBQ3RDLFFBQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxhQUFhO0FBRTFDLE1BQUksR0FBRyxPQUFPLElBQUksVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUFRO0FBRXhELFFBQU0sWUFBWSxHQUFHLE9BQU8sSUFBSSxNQUFNLE1BQU07QUFFNUMsUUFBTSxTQUFTO0FBQUEsSUFDWCxlQUFlO0FBQUEsSUFDZixzQkFBc0I7QUFBQSxJQUN0QixnQkFBZ0I7QUFBQSxFQUNwQjtBQUVBLEtBQUcsS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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
 
// </nowiki>