// ==UserScript== // @name AtCoder Limit Colorizer // @description Colorize AtCoder constraints based on their values // @version 0.0.3 // @homepage https://github.com/sevenc-nanashi/atcoder-limit-colorizer // @author Nanashi. // @match https://atcoder.jp/contests/*/tasks/* // @updateURL https://raw.githubusercontent.com/sevenc-nanashi/atcoder-limit-colorizer/built/index.user.js // @downloadURL https://raw.githubusercontent.com/sevenc-nanashi/atcoder-limit-colorizer/built/index.user.js // @sandbox MAIN_WORLD // ==/UserScript== "use strict";(()=>{var E="#804000",L="#008000",T="#00a0a0",C="#0000ff",M="#a0a000",S="#ff8000",A="#ff0000",H="#0dcaf0",b=r=>{let e=Math.abs(r);return e===998244353||e===1000000007?H:e>=1e18?A:e>=1e9?S:e>=1e5?M:e>=1e3?C:e>=100?T:e>=10?L:E};var p=r=>{let e="";for(let t of r)if(t.classList.contains("mord"))if(t.childElementCount>0){let n=p(Array.from(t.children));if(n===void 0)return;e+=n}else t.textContent==="\u2212"?e+="-":e+=t.textContent;else if(t.classList.contains("mbin"))e+=t.textContent;else if(t.classList.contains("msupsub")){let n=t.querySelector(".mtight");if(!n){console.warn("msupsub without mtight",t);return}let o=Array.from(n.querySelectorAll(":scope > span")),l=p(o);if(l===void 0)return;e+=`^(${l})`}return e},g=r=>{let e=0,t=[],n="";for(let o of r){if(o==="("){if(e++,e===1)continue}else if(o===")"&&(e--,e===0)){t.push(g(n)),n="";continue}e===0&&o==="\xD7"?(t.push(n),n="",t.push("*")):e===0&&o==="^"?(t.push(n),n="",t.push("^")):n+=o}return n.length>0&&t.push(n),t},f=r=>{let e=structuredClone(r);if(typeof e=="string")return Number.parseInt(e);if(typeof e=="number")return e;if(e.length===1)return Number.parseInt(e[0]);for(let t=1;t{let t=b(e);for(let n of Array.isArray(r)?r:[r])n.style.color=t},V=r=>{let e=p(r);if(e===void 0||!e.match(/^[0-9\-×\^()]+$/))return;let t=g(e),n=f(t);return d(r,n),n},u=r=>{if(r.classList.contains("mord")){if(r.classList.contains("mathnormal"))return r.textContent??void 0;if(r.children[0]?.classList?.contains("mathnormal"))return r.children[0].textContent??void 0}},w=["mpunct","mrel","mopen","mclose","mop"],v=()=>{let r=Array.from(document.getElementsByTagName("h3")).filter(e=>e.textContent==="\u5236\u7D04"||e.textContent==="Constraints");for(let e of r){let t=e.nextElementSibling;if(!t)return;z(t)}},z=r=>{let e={},t=Array.from(r.querySelectorAll(".katex-html:not([data-alc-colorized])"));for(let n of t){n.setAttribute("data-alc-colorized","true");let o=Array.from(n.querySelectorAll(".base > span")).filter(i=>!!i.textContent),l=[],a={elements:[],maxValue:0},h=()=>{for(let i of a.elements.filter(s=>u(s))){let s=u(i);s&&(d(i,a.maxValue),e[s]=Math.abs(a.maxValue))}a.elements.length=0,a.maxValue=0},x=()=>{let i=V(l);i!==void 0&&Math.abs(i)>a.maxValue&&(a.maxValue=Math.abs(i)),l.length=0},m=!1;for(let[i,s]of o.entries()){if(m&&(m=!1,(!u(o[i-2])||!u(s))&&(a.elements.pop(),h())),s.classList.contains("mpunct")&&(m=!0),Array.from(s.classList).some(y=>w.includes(y))){l.length>0&&x(),a.elements.push(s);continue}let c=u(s);c&&e[c]&&(d(s,e[c]),a.maxValue0&&(x(),h())}};setInterval(()=>{v()},100);})(); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbG9ycy50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBjb25zdCBncmF5ID0gXCIjODA4MDgwXCI7XG5leHBvcnQgY29uc3QgYnJvd24gPSBcIiM4MDQwMDBcIjtcbmV4cG9ydCBjb25zdCBncmVlbiA9IFwiIzAwODAwMFwiO1xuZXhwb3J0IGNvbnN0IGN5YW4gPSBcIiMwMGEwYTBcIjtcbmV4cG9ydCBjb25zdCBibHVlID0gXCIjMDAwMGZmXCI7XG5leHBvcnQgY29uc3QgeWVsbG93ID0gXCIjYTBhMDAwXCI7XG5leHBvcnQgY29uc3Qgb3JhbmdlID0gXCIjZmY4MDAwXCI7XG5leHBvcnQgY29uc3QgcmVkID0gXCIjZmYwMDAwXCI7XG5cbmV4cG9ydCBjb25zdCBzcGVjaWFsID0gXCIjMGRjYWYwXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRDb2xvckZyb21OdW1iZXIgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICBjb25zdCBhVmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XG4gIGlmIChhVmFsdWUgPT09IDk5ODI0NDM1MyB8fCBhVmFsdWUgPT09IDEwMDAwMDAwMDcpIHtcbiAgICByZXR1cm4gc3BlY2lhbDtcbiAgfVxuICBpZiAoYVZhbHVlID49IDEwKioxOCkge1xuICAgIHJldHVybiByZWQ7XG4gIH1cbiAgaWYgKGFWYWx1ZSA+PSAxMCoqOSkge1xuICAgIHJldHVybiBvcmFuZ2U7XG4gIH1cbiAgaWYgKGFWYWx1ZSA+PSAxMCoqNSkge1xuICAgIHJldHVybiB5ZWxsb3c7XG4gIH1cbiAgaWYgKGFWYWx1ZSA+PSAxMDAwKSB7XG4gICAgcmV0dXJuIGJsdWU7XG4gIH1cbiAgaWYgKGFWYWx1ZSA+PSAxMDApIHtcbiAgICByZXR1cm4gY3lhbjtcbiAgfVxuICBpZiAoYVZhbHVlID49IDEwKSB7XG4gICAgcmV0dXJuIGdyZWVuO1xuICB9XG4gIHJldHVybiBicm93bjtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0Q29sb3JGcm9tTnVtYmVyIH0gZnJvbSBcIi4vY29sb3JzXCI7XG5cbmNvbnN0IGthdGV4SHRtbFRvRXhwciA9IChodG1sOiBIVE1MRWxlbWVudFtdKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IHRleHQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaHRtbCkge1xuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcIm1vcmRcIikpIHtcbiAgICAgIGlmIChlbGVtZW50LmNoaWxkRWxlbWVudENvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBkYXRhID0ga2F0ZXhIdG1sVG9FeHByKFxuICAgICAgICAgIEFycmF5LmZyb20oZWxlbWVudC5jaGlsZHJlbikgYXMgSFRNTFNwYW5FbGVtZW50W10sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRleHQgKz0gZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50ZXh0Q29udGVudCA9PT0gXCJcXHUyMjEyXCIpIHtcbiAgICAgICAgLy8gbWludXMgc2lnblxuICAgICAgICB0ZXh0ICs9IFwiLVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtYmluXCIpKSB7XG4gICAgICB0ZXh0ICs9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcIm1zdXBzdWJcIikpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubXRpZ2h0XCIpO1xuICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIm1zdXBzdWIgd2l0aG91dCBtdGlnaHRcIiwgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbDxIVE1MU3BhbkVsZW1lbnQ+KFwiOnNjb3BlID4gc3BhblwiKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBrYXRleEh0bWxUb0V4cHIoZWxlbWVudHMpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0ZXh0ICs9IGBeKCR7cGFyc2VkfSlgO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXh0O1xufTtcblxudHlwZSBUcmVlID0gc3RyaW5nIHwgbnVtYmVyIHwgVHJlZVtdO1xuY29uc3QgcGFyc2VFeHByID0gKGV4cHI6IHN0cmluZyk6IFRyZWUgPT4ge1xuICBsZXQgYnJhY2tldCA9IDA7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgY3VycmVudCA9IFwiXCI7XG4gIGZvciAoY29uc3QgYyBvZiBleHByKSB7XG4gICAgaWYgKGMgPT09IFwiKFwiKSB7XG4gICAgICBicmFja2V0Kys7XG4gICAgICBpZiAoYnJhY2tldCA9PT0gMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGMgPT09IFwiKVwiKSB7XG4gICAgICBicmFja2V0LS07XG4gICAgICBpZiAoYnJhY2tldCA9PT0gMCkge1xuICAgICAgICByZXN1bHQucHVzaChwYXJzZUV4cHIoY3VycmVudCkpO1xuICAgICAgICBjdXJyZW50ID0gXCJcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJyYWNrZXQgPT09IDAgJiYgYyA9PT0gXCJcdTAwRDdcIikge1xuICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICBjdXJyZW50ID0gXCJcIjtcbiAgICAgIHJlc3VsdC5wdXNoKFwiKlwiKTtcbiAgICB9IGVsc2UgaWYgKGJyYWNrZXQgPT09IDAgJiYgYyA9PT0gXCJeXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgY3VycmVudCA9IFwiXCI7XG4gICAgICByZXN1bHQucHVzaChcIl5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnQgKz0gYztcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoID4gMCkge1xuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBjYWxjdWxhdGVUcmVlID0gKHRyZWVfOiBUcmVlKTogbnVtYmVyID0+IHtcbiAgY29uc3QgdHJlZSA9IHN0cnVjdHVyZWRDbG9uZSh0cmVlXyk7XG4gIGlmICh0eXBlb2YgdHJlZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodHJlZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHRyZWU7XG4gIH1cbiAgaWYgKHRyZWUubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh0cmVlWzBdIGFzIHN0cmluZyk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IHRyZWUubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAodHJlZVtpXSA9PT0gXCJeXCIpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBjYWxjdWxhdGVUcmVlKHRyZWVbaSAtIDFdKTtcbiAgICAgIGNvbnN0IHBvd2VyID0gY2FsY3VsYXRlVHJlZSh0cmVlW2kgKyAxXSk7XG4gICAgICB0cmVlLnNwbGljZShpIC0gMSwgMywgYmFzZSAqKiBwb3dlcik7XG5cbiAgICAgIGkgLT0gMjtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCB0cmVlLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKHRyZWVbaV0gPT09IFwiKlwiKSB7XG4gICAgICBjb25zdCBsZWZ0ID0gY2FsY3VsYXRlVHJlZSh0cmVlW2kgLSAxXSk7XG4gICAgICBjb25zdCByaWdodCA9IGNhbGN1bGF0ZVRyZWUodHJlZVtpICsgMV0pO1xuICAgICAgdHJlZS5zcGxpY2UoaSAtIDEsIDMsIGxlZnQgKiByaWdodCk7XG5cbiAgICAgIGkgLT0gMjtcbiAgICB9XG4gIH1cbiAgaWYgKHRyZWUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyZWUsICR7dHJlZX1gKTtcbiAgfVxuICBpZiAodHlwZW9mIHRyZWVbMF0gIT09IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJlZSwgJHt0cmVlfWApO1xuICB9XG4gIHJldHVybiB0cmVlWzBdO1xufTtcblxuY29uc3QgcGFpbnQgPSAoZWxlbWVudHM6IEhUTUxFbGVtZW50IHwgSFRNTEVsZW1lbnRbXSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICBjb25zdCBjb2xvciA9IGdldENvbG9yRnJvbU51bWJlcih2YWx1ZSk7XG4gIGZvciAoY29uc3QgZSBvZiBBcnJheS5pc0FycmF5KGVsZW1lbnRzKSA/IGVsZW1lbnRzIDogW2VsZW1lbnRzXSkge1xuICAgIGUuc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgfVxufTtcblxuY29uc3QgY2FsY3VsYXRlQW5kQ29sb3JpemUgPSAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10pOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBtYXRoID0ga2F0ZXhIdG1sVG9FeHByKGVsZW1lbnRzKTtcbiAgaWYgKG1hdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIW1hdGgubWF0Y2goL15bMC05XFwtXHUwMEQ3XFxeKCldKyQvKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUV4cHIobWF0aCk7XG4gIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZVRyZWUocGFyc2VkKTtcbiAgcGFpbnQoZWxlbWVudHMsIHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGdldFZhcmlhYmxlID0gKGVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtb3JkXCIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtYXRobm9ybWFsXCIpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChlbGVtZW50LmNoaWxkcmVuWzBdPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKFwibWF0aG5vcm1hbFwiKSkge1xuICAgIHJldHVybiBlbGVtZW50LmNoaWxkcmVuWzBdLnRleHRDb250ZW50ID8/IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3Qgc2VwYXJhdG9ycyA9IFtcIm1wdW5jdFwiLCBcIm1yZWxcIiwgXCJtb3BlblwiLCBcIm1jbG9zZVwiLCBcIm1vcFwiXTtcbnR5cGUgU3RhdGVtZW50ID0geyBlbGVtZW50czogSFRNTFNwYW5FbGVtZW50W107IG1heFZhbHVlOiBudW1iZXIgfTtcblxuY29uc3QgY29sb3JpemVBbGwgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnN0cmFpbnRIZWFkZXJzID0gQXJyYXkuZnJvbShcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImgzXCIpLFxuICApLmZpbHRlcigoZSkgPT4gZS50ZXh0Q29udGVudCA9PT0gXCJcdTUyMzZcdTdEMDRcIiB8fCBlLnRleHRDb250ZW50ID09PSBcIkNvbnN0cmFpbnRzXCIpO1xuICBmb3IgKGNvbnN0IGhlYWRlciBvZiBjb25zdHJhaW50SGVhZGVycykge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRSb290ID0gaGVhZGVyLm5leHRFbGVtZW50U2libGluZztcbiAgICBpZiAoIWNvbnN0cmFpbnRSb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbG9yaXplU2VjdGlvbihjb25zdHJhaW50Um9vdCBhcyBIVE1MRWxlbWVudCk7XG4gIH1cbn07XG5jb25zdCBjb2xvcml6ZVNlY3Rpb24gPSAoY29uc3RyYWludFJvb3Q6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHZhcmlhYmxlTWF4ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBjb25zdCBtYXRocyA9IEFycmF5LmZyb20oXG4gICAgY29uc3RyYWludFJvb3QucXVlcnlTZWxlY3RvckFsbChcIi5rYXRleC1odG1sOm5vdChbZGF0YS1hbGMtY29sb3JpemVkXSlcIiksXG4gICk7XG4gIGZvciAoY29uc3QgbWF0aCBvZiBtYXRocykge1xuICAgIG1hdGguc2V0QXR0cmlidXRlKFwiZGF0YS1hbGMtY29sb3JpemVkXCIsIFwidHJ1ZVwiKTtcblxuICAgIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIG1hdGgucXVlcnlTZWxlY3RvckFsbDxIVE1MU3BhbkVsZW1lbnQ+KFwiLmJhc2UgPiBzcGFuXCIpLFxuICAgICkuZmlsdGVyKChlKSA9PiAhIWUudGV4dENvbnRlbnQpO1xuXG4gICAgY29uc3QgY3VycmVudEVsZW1lbnRzOiBIVE1MU3BhbkVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZW1lbnQ6IFN0YXRlbWVudCA9IHsgZWxlbWVudHM6IFtdLCBtYXhWYWx1ZTogMCB9O1xuICAgIGNvbnN0IGNvbG9yaXplQ3VycmVudFN0YXRlbWVudCA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBjdXJyZW50U3RhdGVtZW50LmVsZW1lbnRzLmZpbHRlcigoZSkgPT4gZ2V0VmFyaWFibGUoZSkpKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gZ2V0VmFyaWFibGUoZSk7XG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwYWludChlLCBjdXJyZW50U3RhdGVtZW50Lm1heFZhbHVlKTtcbiAgICAgICAgdmFyaWFibGVNYXhlc1t2YXJpYWJsZV0gPSBNYXRoLmFicyhjdXJyZW50U3RhdGVtZW50Lm1heFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRTdGF0ZW1lbnQuZWxlbWVudHMubGVuZ3RoID0gMDtcbiAgICAgIGN1cnJlbnRTdGF0ZW1lbnQubWF4VmFsdWUgPSAwO1xuICAgIH07XG4gICAgY29uc3QgY29sb3JpemVDdXJyZW50RWxlbWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsY3VsYXRlQW5kQ29sb3JpemUoY3VycmVudEVsZW1lbnRzKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIE1hdGguYWJzKHZhbHVlKSA+IGN1cnJlbnRTdGF0ZW1lbnQubWF4VmFsdWUpIHtcbiAgICAgICAgY3VycmVudFN0YXRlbWVudC5tYXhWYWx1ZSA9IE1hdGguYWJzKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRFbGVtZW50cy5sZW5ndGggPSAwO1xuICAgIH07XG5cbiAgICBsZXQgd2lsbENoZWNrU2VwYXJhdG9yID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBlbGVtZW50cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmICh3aWxsQ2hlY2tTZXBhcmF0b3IpIHtcbiAgICAgICAgd2lsbENoZWNrU2VwYXJhdG9yID0gZmFsc2U7XG4gICAgICAgIGlmICghZ2V0VmFyaWFibGUoZWxlbWVudHNbaSAtIDJdKSB8fCAhZ2V0VmFyaWFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICBjdXJyZW50U3RhdGVtZW50LmVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgIGNvbG9yaXplQ3VycmVudFN0YXRlbWVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtcHVuY3RcIikpIHtcbiAgICAgICAgd2lsbENoZWNrU2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5zb21lKChjKSA9PiBzZXBhcmF0b3JzLmluY2x1ZGVzKGMpKSkge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb2xvcml6ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50U3RhdGVtZW50LmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFyaWFibGUgPSBnZXRWYXJpYWJsZShlbGVtZW50KTtcbiAgICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgICBpZiAodmFyaWFibGVNYXhlc1t2YXJpYWJsZV0pIHtcbiAgICAgICAgICBwYWludChlbGVtZW50LCB2YXJpYWJsZU1heGVzW3ZhcmlhYmxlXSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZW1lbnQubWF4VmFsdWUgPCB2YXJpYWJsZU1heGVzW3ZhcmlhYmxlXSkge1xuICAgICAgICAgICAgY3VycmVudFN0YXRlbWVudC5tYXhWYWx1ZSA9IHZhcmlhYmxlTWF4ZXNbdmFyaWFibGVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyZW50RWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgIGN1cnJlbnRTdGF0ZW1lbnQuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2xvcml6ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICBjb2xvcml6ZUN1cnJlbnRTdGF0ZW1lbnQoKTtcbiAgICB9XG4gIH1cbn07XG5cbnNldEludGVydmFsKCgpID0+IHtcbiAgY29sb3JpemVBbGwoKTtcbn0sIDEwMCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7bUJBQ08sSUFBTUEsRUFBUSxVQUNSQyxFQUFRLFVBQ1JDLEVBQU8sVUFDUEMsRUFBTyxVQUNQQyxFQUFTLFVBQ1RDLEVBQVMsVUFDVEMsRUFBTSxVQUVOQyxFQUFVLFVBRVZDLEVBQXNCQyxHQUFrQixDQUNuRCxJQUFNQyxFQUFTLEtBQUssSUFBSUQsQ0FBSyxFQUM3QixPQUFJQyxJQUFXLFdBQWFBLElBQVcsV0FDOUJILEVBRUxHLEdBQVUsS0FDTEosRUFFTEksR0FBVSxJQUNMTCxFQUVMSyxHQUFVLElBQ0xOLEVBRUxNLEdBQVUsSUFDTFAsRUFFTE8sR0FBVSxJQUNMUixFQUVMUSxHQUFVLEdBQ0xULEVBRUZELENBQ1QsRUNqQ0EsSUFBTVcsRUFBbUJDLEdBQTRDLENBQ25FLElBQUlDLEVBQU8sR0FDWCxRQUFXQyxLQUFXRixFQUNwQixHQUFJRSxFQUFRLFVBQVUsU0FBUyxNQUFNLEVBQ25DLEdBQUlBLEVBQVEsa0JBQW9CLEVBQUcsQ0FDakMsSUFBTUMsRUFBT0osRUFDWCxNQUFNLEtBQUtHLEVBQVEsUUFBUSxDQUM3QixFQUNBLEdBQUlDLElBQVMsT0FDWCxPQUVGRixHQUFRRSxDQUNWLE1BQVdELEVBQVEsY0FBZ0IsU0FFakNELEdBQVEsSUFFUkEsR0FBUUMsRUFBUSxvQkFFVEEsRUFBUSxVQUFVLFNBQVMsTUFBTSxFQUMxQ0QsR0FBUUMsRUFBUSxvQkFDUEEsRUFBUSxVQUFVLFNBQVMsU0FBUyxFQUFHLENBQ2hELElBQU1FLEVBQU9GLEVBQVEsY0FBYyxTQUFTLEVBQzVDLEdBQUksQ0FBQ0UsRUFBTSxDQUNULFFBQVEsS0FBSyx5QkFBMEJGLENBQU8sRUFDOUMsTUFDRixDQUNBLElBQU1HLEVBQVcsTUFBTSxLQUNyQkQsRUFBSyxpQkFBa0MsZUFBZSxDQUN4RCxFQUNN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RUFBUUksRUFBcUJXLENBQWUsRUFDOUNmLElBQVUsUUFBYSxLQUFLLElBQUlBLENBQUssRUFBSWdCLEVBQWlCLFdBQzVEQSxFQUFpQixTQUFXLEtBQUssSUFBSWhCLENBQUssR0FFNUNlLEVBQWdCLE9BQVMsQ0FDM0IsRUFFSUssRUFBcUIsR0FFekIsT0FBVyxDQUFDLEVBQUd4QyxDQUFPLElBQUtHLEVBQVMsUUFBUSxFQUFHLENBVzdDLEdBVklxQyxJQUNGQSxFQUFxQixJQUNqQixDQUFDZCxFQUFZdkIsRUFBUyxFQUFJLENBQUMsQ0FBQyxHQUFLLENBQUN1QixFQUFZMUIsQ0FBTyxLQUN2RG9DLEVBQWlCLFNBQVMsSUFBSSxFQUM5QkMsRUFBeUIsSUFHekJyQyxFQUFRLFVBQVUsU0FBUyxRQUFRLElBQ3JDd0MsRUFBcUIsSUFFbkIsTUFBTSxLQUFLeEMsRUFBUSxTQUFTLEVBQUUsS0FBTVUsR0FBTWlCLEVBQVcsU0FBU2pCLENBQUMsQ0FBQyxFQUFHLENBQ2pFeUIsRUFBZ0IsT0FBUyxHQUMzQkksRUFBdUIsRUFHekJILEVBQWlCLFNBQVMsS0FBS3BDLENBQU8sRUFDdEMsUUFDRixDQUNBLElBQU1zQyxFQUFXWixFQUFZMUIsQ0FBTyxFQUNoQ3NDLEdBQ0VMLEVBQWNLLENBQVEsSUFDeEJuQixFQUFNbkIsRUFBU2lDLEVBQWNLLENBQVEsQ0FBQyxFQUNsQ0YsRUFBaUIsU0FBV0gsRUFBY0ssQ0FBUSxJQUNwREYsRUFBaUIsU0FBV0gsRUFBY0ssQ0FBUSxJQUt4REgsRUFBZ0IsS0FBS25DLENBQU8sRUFDNUJvQyxFQUFpQixTQUFTLEtBQUtwQyxDQUFPLENBQ3hDLENBQ0ltQyxFQUFnQixPQUFTLElBQzNCSSxFQUF1QixFQUN2QkYsRUFBeUIsRUFFN0IsQ0FDRixFQUVBLFlBQVksSUFBTSxDQUNoQlQsRUFBWSxDQUNkLEVBQUcsR0FBRyIsCiAgIm5hbWVzIjogWyJicm93biIsICJncmVlbiIsICJjeWFuIiwgImJsdWUiLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiLCAic3BlY2lhbCIsICJnZXRDb2xvckZyb21OdW1iZXIiLCAidmFsdWUiLCAiYVZhbHVlIiwgImthdGV4SHRtbFRvRXhwciIsICJodG1sIiwgInRleHQiLCAiZWxlbWVudCIsICJkYXRhIiwgInJvb3QiLCAiZWxlbWVudHMiLCAicGFyc2VkIiwgInBhcnNlRXhwciIsICJleHByIiwgImJyYWNrZXQiLCAicmVzdWx0IiwgImN1cnJlbnQiLCAiYyIsICJjYWxjdWxhdGVUcmVlIiwgInRyZWVfIiwgInRyZWUiLCAiaSIsICJiYXNlIiwgInBvd2VyIiwgImxlZnQiLCAicmlnaHQiLCAicGFpbnQiLCAidmFsdWUiLCAiY29sb3IiLCAiZ2V0Q29sb3JGcm9tTnVtYmVyIiwgImUiLCAiY2FsY3VsYXRlQW5kQ29sb3JpemUiLCAibWF0aCIsICJnZXRWYXJpYWJsZSIsICJzZXBhcmF0b3JzIiwgImNvbG9yaXplQWxsIiwgImNvbnN0cmFpbnRIZWFkZXJzIiwgImhlYWRlciIsICJjb25zdHJhaW50Um9vdCIsICJjb2xvcml6ZVNlY3Rpb24iLCAidmFyaWFibGVNYXhlcyIsICJtYXRocyIsICJjdXJyZW50RWxlbWVudHMiLCAiY3VycmVudFN0YXRlbWVudCIsICJjb2xvcml6ZUN1cnJlbnRTdGF0ZW1lbnQiLCAidmFyaWFibGUiLCAiY29sb3JpemVDdXJyZW50RWxlbWVudCIsICJ3aWxsQ2hlY2tTZXBhcmF0b3IiXQp9Cg==