Socket
Socket
Sign inDemoInstall

@adraffy/ens-normalize

Package Overview
Dependencies
Maintainers
1
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@adraffy/ens-normalize - npm Package Compare versions

Comparing version 1.5.3 to 1.5.4

2

dist/all.min.js

@@ -1,1 +0,1 @@

function A(A){return 1&A?~A>>1:A>>1}function t(A,t){let e=Array(A);for(let n=0,o=-1;n<A;n++)e[n]=o+=1+t();return e}function e(t,e){let n=Array(t);for(let o=0,r=0;o<t;o++)n[o]=r+=A(e());return n}function n(A,e){let n=t(A(),A),o=A(),r=t(o,A),g=function(A,t){let e=Array(A);for(let n=0;n<A;n++)e[n]=1+t();return e}(o,A);for(let A=0;A<o;A++)for(let t=0;t<g[A];t++)n.push(r[A]+t);return e?n.map((A=>e[A])):n}function o(A,t,n,o){let r=Array(A).fill().map((()=>[]));for(let g=0;g<t;g++)e(A,n).forEach(((A,t)=>r[t].push(o?o(A):A)));return r}function r(A,t){let e=1+t(),n=t(),r=function(A){let t=[];for(;;){let e=A();if(0==e)break;t.push(e)}return t}(t);return o(r.length,1+A,t).flatMap(((A,t)=>{let[o,...g]=A;return Array(r[t]).fill().map(((A,t)=>{let r=t*n;return[o+t*e,g.map((A=>A+r))]}))}))}function g(A,t){return o(1+t(),1+A,t).map((A=>[A[0],A.slice(1)]))}var l=function(A){let t=0;return()=>A[t++]}(function(A){let t=0;function e(){return A[t++]<<8|A[t++]}let n=e(),o=1,r=[0,1];for(let A=1;A<n;A++)r.push(o+=e());let g=e(),l=t;t+=g;let s=0,i=0;function a(){return 0==s&&(i=i<<8|A[t++],s=8),i>>--s&1}const c=2**31,w=c>>>1,p=c-1;let B=0;for(let A=0;A<31;A++)B=B<<1|a();let C=[],d=0,f=c;for(;;){let A=Math.floor(((B-d+1)*o-1)/f),t=0,e=n;for(;e-t>1;){let n=t+e>>>1;A<r[n]?e=n:t=n}if(0==t)break;C.push(t);let g=d+Math.floor(f*r[t]/o),l=d+Math.floor(f*r[t+1]/o)-1;for(;0==((g^l)&w);)B=B<<1&p|a(),g=g<<1&p,l=l<<1&p|1;for(;g&~l&536870912;)B=B&w|B<<1&p>>>1|a(),g=g<<1^w,l=(l^w)<<1|w|1;d=g,f=1+l-g}let u=n-4;return C.map((t=>{switch(t-u){case 3:return u+65792+(A[l++]<<16|A[l++]<<8|A[l++]);case 2:return u+256+(A[l++]<<8|A[l++]);case 1:return u+A[l++];default:return t-1}}))}(Uint8Array.from(atob("AEQIZAVGDHIBKQIrAFwBUgBzAO0AYwCkAEsA+wA4AG8AUgB9AEMASgAVAFkAKQAyACIAKgAYAFUAGwAnABQALwAlADMAFQAfABgAPgAPACAADgAYAA8AHQAkABoAGwAxADUAMQAqADoAEgBOABMAGwAQAA8AEAAUABQAFgAIABAAKgRKBjEA5RNbATAJtAYoAe4AExozi0UAH21tAaMnBT8CrnIyhrMDhRgDygIBUAEHcoFHUPe8AXBjAewCjgDQR8IICIcEcQLwATXCDgzvHwBmBoHNAqsBdRcUAykgDhAMShskMgo8AY8jqAQfAUAfHw8BDw87MioGlCIPBwZCa4ELatMAAMspJVgsDl8AIhckSg8XAHdvTwBcIQEiDT4OPhUqbyECAEoAS34Aej8Ybx83JgT/Xw8gHxZ/7w8RICxPHA9vBw+Pfw8PHwAPFv+fAsAvCc8vEr8ivwD/EQ8Bol8OEBa/A78hrwAPCU8vESNvvwWfHwNfAVoDHr+ZAAED34YaAdJPAK7PLwSEgDLHAGo1Pz8Pvx9fUwMrpb8O/58VTzAPIBoXIyQJNF8hpwIVAT8YGAUADDNBaX3RAMomJCg9EhUeA29MABsZBTMNJipjOhc19gcIDR8bBwQHEggCWi6DIgLuAQYA+BAFCha3A5XiAEsqM7UFFgFLhAMjFTMYE1Klnw74nRVBG/ASCm0BYRN/BrsU3VoWy+S0vV8LQx+vEEKiACIQAd5QdAECAj4Ywg/WGqY2AVgAYADYngoCGAEubA0gvAY2ALAAbpbvqpyEAGByBAOQBAYAAAbuACAAQAKaCFQXAKoAykAg1AjALgO2FEAA9zJwqGAABoIdABwBfCisABoATwBqASIAvhnSHh0X3hof8QJ4ApcCrjQ2OAMFPAVhBToBezegAGAAPhc2CZYJl14KXm0gVl5SoaDKg0cAGAARABoAE3BZACYAEwBM8xrdPfgAOV3KmuYzABYoUUhSpQrxIlEIC878AF098QAYABEAGgATcCBhQJwAw/AAIAA+AQSVs2gnCACBARTAFsCqAAHavQVgBeUC0KQCxLUAClEhpGoUeBpyFYg2MgsAwCgeFAiUAECQ0BQuL8AAIAAAADKeIgD0FWiW8WpAAAROpcRoFhoAzEgBEopWAMIoHhQIAn0E0pDQFC4HhznoAAAAIAI2CwV/VriW8WpAAAROAEFxDDQHBQYCmTICk44+5gCyAgCuVAFsAKYSA9wAsHABP7YKDvAiAAIaNgVCADaSOQX2zxYDzcYACwOZog4KNAKOpgKG3T+TAzaeAoP3ASTKDgDw6ACKAUYCMpIKJpRaAE4A5womABzZvs0RAPliCxQLGgsYBhEAFAA8MBKYEH4eRhTkAjYeFcgACAYAeABsOn6Q5gRwDayqugEgaIIAtgoACgDmEABmBAWGme5OrAOAAAAUbhwN6gCYhNYBfCsyA6AAbAEKHoIFdgXVPODXAoAAV2K4AFEAXABdAGwAbwB2AGsAdgBvAIQAcTB/FAFUTlMRAANUWFMHAEMA0gsCpwLOAtMClAKtAvq8AAwAvwA8uE0EqQTqCUYpMBTgOvg3YRgTAEKQAEqTyscBtgGbAigCJTgCN/8CrgKjAIAA0gKHOBo0GwKxOB44NwVeuAKVAp0CpAGJAZgCqwKyNOw0ex808DSLGwBZNaI4AwU8NBI0KTYENkc2jDZNNlQ2GTbwmeg+fzJCEkIHQghCIQKCAqECsAEnADUFXgVdtL8FbjtiQhk/VyJSqzTkNL8XAAFTAlbXV7qce5hmZKH9EBgDygwq9nwoBKhQAlhYAnogsCwBlKiqOmADShwEiGYOANYABrBENCgABy4CPmIAcAFmJHYAiCIeAJoBTrwALG4cAbTKAzwyJkgCWAF0XgZqAmoA9k4cAy4GCgBORgCwAGIAeAAwugYM+PQekoQEAA4mAC4AuCBMAdYB4AwQNt3bRR6B7QAPABYAOQBCAD04d37YxRBkEGEGA00OTHE/FRACsQ+rC+oRGgzWKtDT3QA0rgfwA1gH8ANYA1gH8AfwA1gH8ANYA1gDWANYHA/wH9jFEGQPTQRyBZMFkATbCIgmThGGBy0I11QSdCMcTANKAQEjKkkhO5gzECVHTBFNCAgBNkdsrH09A0wxsFT6kKcD0DJUOXEGAx52EqUALw94ITW6ToN6THGlClBPs1f3AEUGABKrABLmAEkNKABQLAY9AEjjNNgAE0YATZsATcoATF0YAEpoBuAAUFcAUI4AUEkAEjZJZ05sAsM6rT/9CiYJmG/Ad1MGQhAcJ6YQ+Aw0AbYBPA3uS9kE8gY8BMoffhkaD86VnQimLd4M7ibkLqKAWyP2KoQF7kv1PN4LTlFpD1oLZgnkOmSBTwMiAQ4ijAreDToIbhD0CspsDeYRRgc6A9ZJmwCmBwILEh02FbYmEWKtCwo5eAb8GvcLkCawEyp6/QXUGiIGTgEqGwAA0C7ohbFaMlwdT2AGBAsmI8gUqVAhDSZAuHhJGhwHFiWqApJDcUqIUTcelCH3PD4NZy4UUX0H9jwGGVALgjyfRqxFDxHTPo49SSJKTC0ENoAsMCeMCdAPhgy6fHMBWgkiCbIMchMyERg3xgg6BxoulyUnFggiRpZgmwT4oAP0E9IDDAVACUIHFAO2HC4TLxUqBQ6BJdgC9DbWLrQCkFaBARgFzA8mH+AQUUfhDuoInAJmA4Ql7AAuFSIAGCKcCERkAGCP2VMGLswIyGptI3UDaBToYhF0B5IOWAeoHDQVwBzicMleDIYJKKSwCVwBdgmaAWAE5AgKNVyMoSBCZ1SLWRicIGJBQF39AjIMZhWgRL6HeQKMD2wSHAE2AXQHOg0CAngR7hFsEJYI7IYFNbYz+TomBFAhhCASCigDUGzPCygm+gz5agGkEmMDDTQ+d+9nrGC3JRf+BxoyxkFhIfILk0/ODJ0awhhDVC8Z5QfAA/Qa9CfrQVgGAAOkBBQ6TjPvBL4LagiMCUAASg6kGAfYGGsKcozRATKMAbiaA1iShAJwkAY4BwwAaAyIBXrmAB4CqAikAAYA0ANYADoCrgeeABoAhkIBPgMoMAEi5gKQA5QIMswBljAB9CoEHMQMFgD4OG5LAsOyAoBrZqMF3lkCjwJKNgFOJgQGT0hSA7By4gDcAEwGFOBIARasS8wb5EQB4HAsAMgA/AAGNgcGQgHOAfRuALgBYAsyCaO0tgFO6ioAhAAWbAHYAooA3gA2AIDyAVQATgVa+gXUAlBKARIyGSxYYgG8AyABNAEOAHoGzI6mygggBG4H1AIQHBXiAu8vB7YCAyLgE85CxgK931YAMhcAYFEcHpkenB6ZPo1eaAC0YTQHMnM9UQAPH6k+yAdy/BZIiQImSwBQ5gBQQzSaNTFWSTYBpwGqKQK38AFtqwBI/wK37gK3rQK3sAK6280C0gK33AK3zxAAUEIAUD9SklKDArekArw5AEQAzAHCO147Rzs+O1k7XjtHOz47WTteO0c7PjtZO147Rzs+O1k7XjtHOz47WQOYKFgjTcBVTSgmqQptX0Zh7AynDdVEyTpKE9xgUmAzE8ktuBTCFc8lVxk+Gr0nBiXlVQoPBS3UZjEILTR2F70AQClpg0Jjhx4xCkwc6FOSVPktHACyS6MzsA2tGxZEQQVIde5iKxYPCiMCZIICYkNcTrBcNyECofgCaJkCZgoCn4U4HAwCZjwCZicEbwSAA38UA36TOQc5eBg5gzokJAJsGgIyNzgLAm3IAm2v8IsANGhGLAFoAN8A4gBLBgeZDI4A/wzDAA62AncwAnajQAJ5TEQCeLseXdxFr0b0AnxAAnrJAn0KAnzxSAFIfmQlACwWSVlKXBYYSs0C0QIC0M1LKAOIUAOH50TGkTMC8qJdBAMDr0vPTC4mBNBNTU2wAotAAorZwhwIHkRoBrgCjjgCjl1BmIICjtoCjl15UbVTNgtS1VSGApP8ApMNAOoAHVUfVbBV0QcsHCmWhzLieGdFPDoCl6AC77NYIqkAWiYClpACln2dAKpZrVoKgk4APAKWtgKWT1xFXNICmcwCmWVcy10IGgKcnDnDOp4CnBcCn5wCnrmLAB4QMisQAp3yAp6TALY+YTVh8AKe1AKgbwGqAp6gIAKeT6ZjyWQoJiwCJ7ACJn8CoPwCoE3YAqYwAqXPAqgAAH4Cp/NofWiyAARKah1q0gKs5AKsrwKtaAKtAwJXHgJV3QKx4tgDH09smAKyvg4CsucWbOFtZG1JYAMlzgK2XTxAbpEDKUYCuF8CuUgWArkreHA3cOICvRoDLbMDMhICvolyAwMzcgK+G3Mjc1ACw8wCwwVzg3RMNkZ04QM8qAM8mwM9wALFfQLGSALGEYoCyGpSAshFAslQAskvAmSeAt3TeHpieK95JkvRAxikZwMCYfUZ9JUlewxek168EgLPbALPbTBMVNP0FKAAx64Cz3QBKusDThN+TAYC3CgC24sC0lADUl0DU2ABAgNVjYCKQAHMF+5hRnYAgs+DjgLayALZ34QRhEqnPQOGpgAwA2QPhnJa+gBWAt9mAt65dHgC4jDtFQHzMSgB9JwB8tOIAuv0AulxegAC6voC6uUA+kgBugLuigLrnZarlwQC7kADheGYenDhcaIC8wQAagOOF5mUAvcUA5FvA5KIAveZAvnaAvhnmh2arLw4mx8DnYQC/vsBHAA6nx2ftAMFjgOmawOm2gDSxgMGa6GJogYKAwxKAWABIAK2A0YAnASAumgGALwEbMASjByCAIQMLqR2OgAkAzQLkgpGgAFkKCIAjPDcBgEsAKR+eD2iCKCSA2ZYA3oARAK+uQRWpMYDAKwFFsAD7iJCQwIdHTvaMjY9NtQ2yTZGNjk28DbdNko2JTcQNxk3kj5FPENFMEImQrlUFgoWFl/BAJbKBTcAkFEem747K2A3FrrUDjQYyxiOyfsFXAVdBVwFXQVoBV0FXAVdBVwFXQVcBV0FXAVdSxoI3IoArgABBQcHApTuggKhbV7uMATOA/ED5gPCAKQEUMDAAMAErMAA7EUuGK0DVQVMN7I+Qz5uPnVCREK7BNBZZDxf7QBYFjOwAI0DzHDMAabsRn9CKygJMBssOzp+ct9vwfYZxyxuAXDXczUcBWQFb8nGyb0I1E7wTwUMPQUFDD0WRwKU5gKgwV6CkL0AOBwyIDYAlAAIHwCyKAoAjMgQAkp4EgCljnI9lAgApCIdvh++PkEpJE9CtkI7PShfLGA7LB8oCcZuApUGggJCC14HXgg/SCBlIEI+Xz6GPnU+dgKOQjNHQF/QU1RvUg8xcFk0AG8QcyRf5ThCEEIJQgpCiSAJbOQHApUCAqCjzDgxBcYYuikgG4snyEazI7QoHVggJD5RQSIrQrBCUcwGzAFfzhMkMw4NDgEEBCd+ot9vPzJPQMmwybEJat7Q0QKVCgJBc139Xf4/bgC2D+oQqBYAkxg/JD7BSkIqG65tPs49Ckg/JD51QkQcDA8iUUxxYDEyWua8F0IkNmHyPyQ+wTBCRBxiDU8OEzhZSEc8CTtInDEKcj8kPsMyQkQb+g1YJygdNTYFCo9m8GMzKgqAZM5wYBBfs2AyKHMESF/jYB4+ByAjX4dguAsHcBVqUxv5YFIWBgMEX79k7PJgGl81YJpf12CCX7lguByNYFBfaWCWYDEeopUBzADsCwJQ0XnwtIp+AFwBCQOj4wsHNCGpjgDTDAgBAkUAxTUU2QYHfgsEJUQPq+voCwQxBQZ8FAV4CgEyAK8ABkQABwN3A3QDdgN5A3cDfQN6A3UDewN9A3wDeAN6A30AGBAAJQLWAEsDAFABbAB3CgB3AJoAdwB1AHUAdgB1bvFIAMoAwAB3AHUAdQB2AHUACwoAdwALAJoAdwALAjsAdwAMbvFIAMoAwAAMCgB3AAsAmgB3AAsCOwB3AAsADW7xSADKAMAADQoAdwALAJoAdwALAjsAdwALbvFIAMoAwAAOCgB3AAsAmgB3AAsCOwB3AA8AC27xSADKAMAADwoAdwALAJoAdwALAjsAdwALbvFIAMoAwAB4CgCaAHcAdwB1AHUAdgB1AHgAdQB1AHYAdW7xSADKAMAACwoAmgB3AAsAdwALAjsAdwAMbvFIAMoAwAAMCgCaAHcACwB3AAsCOwB3AAsADW7xSADKAMAADQoAmgB3AAsAdwALAjsAdwALbvFIAMoAwAAOCgCaAHcACwB3AAsCOwB3AA8AC27xSADKAMAADwoAmgB3AAsAdwALAjsAdwALbvFIAMoAwAB+AAsBoAC3AacAugGoXQLtAjsC7W7xSADKAMAACwoAmgLtAAwC7QAMAjsC7QALbvFIAMoAwAAMCgCaAu0ACwANAu0ACwANAjsC7QALbvFIAMoAwAANCgCaAu0ACwLtAAsCOwLtAAtu8UgAygDAAA4KAJoC7QAPAAsC7QAPAAsCOwLtAAtu8UgAygDAAA8KAJoC7QALAu0ACwI7Au0AC27xSADKAMADbgALA28ADAAMA28ACwANAA0DbwALAA4DbwAPAAsADwNvAAu0VsQAAzsAABCkjUIpAAsAUIusOggWcgMeBxVsGwL67U/2HlzmWOEeOgALASvuAAseAfpKUpnpGgYJDCIZM6YyARUE9ThqAD5iXQgnAJkJPnOzw0ZAEZxEKsIAkA4DhAHnTAIDxxUDK0lxCQlPYgIvIQVYJQBVqE1GakUAKGYiDToSBA1EtAYAXQJYAIF8GgMHRyAAIwjOe9YncekRAA0KACUrjwE7Ayc6AAYWAqaiKG4McEcqANoN3+Mg9TwCBhIkuCnz8HSMooi+ISzAIlDJfcTIMMFggvOAzL6Razro0ALhU1gw889yGsbxSLW2qWZ0+Oe/4uvWvqw92H7otAGk1JzOPfr6pA2dY/RVtUYOJmWgdo1jQVCI3ZKUzDHMZarPPJ4PkQ/6PwGjSLHpqg1vry1jF9g+6PW421m0pkXLCVOP/4E8kEveMAyODwGF2PSqkWAwbStO4tWSoGiVa5ERa/8KxeXSjbJN5cbJCWuhgUsnX9UwjMaaCeIzEHjlxiIopvVhwvWvnFik3Gcn27yA+R3KYebgQJWlneOxdkgdcffpUoISWu6h3S5XGmnbMWVzBfOsum5RoQQLHAvlouoxVADMHiUwpJzSv9K2ahx0FggEcDEmVhKeCgs7tAOH8viR//vjxqWfsER7VbFel7BUyx9LqPwvHGHkWvyRle2gudSATIuueX2w6eAn7v2BQa3WUVm17+2UKk7wadmlNunjSvESF9wIWk5S0VRvXdzcR1aLb/qTkhBqXSeHE7IL8EtbWa2tm/EzsNMx/85ldqCqDLeweDb4j0TmhGaNFPf6delpyJvHRRA8kZS0JN4IBXnA58LLjcJ5Wm0es03Ld/4ZkCXgk+hQYnHe9r7ySFZ3rqhaeUAixGislTQQap27e/mCsBKOJURrna3hhALaa0kVEfDeeLXe6Z0N35lwLEGCo3ajsdQGyW/xCUZ+aOEssMO7sKR6rYSWj4tzEY+ePpMKLqqqWnsws1/3K3sJ3DikJ8bGk6i7k22woC0438ldML1ntIB+fXDtv47HgPIwrNDwAXK6sc2xm9BQSJtE/JHFcuIPg/naq5ZoSLMjvyjQnjdaefegUk5RHxz3t94c+hWYKLWNCYbWbze1OQwzfa9xscYVQJx17G11XoWuskaPJmhGgBugfG+kDMdaUggtWy2SHnneujpnPLFltXDSULUlxtYVUNBhpCthyHdiBCmtnYQvE/pyM6yzS5hbD9QA/DUlkJAlTe6HJQNQebvLw5bF7ngMlfyaAabdrIZMMKOBdtUVonnJTNaNmFZ28YvvzxtC+cbJ9SAIA2tWfyTevn+ymUs8E4w7eEjIzR10iBBn7YyALJFLY6fgOsIW/vOncmnDHy9A1e0aD08YBh+0jAxcvCBT8lnSUPoZ8fnYcD8qbvrgsmfV+CK1DQjZZ7qbnuWGmrFd6fhuc07fC41Z81OHcVoCFz00V5Cl0VC4YUazvlRj5qBRWFDMgoJ3SyCVhI6CS9+ZsOBl9OkVzlyHAvOW4Ww2pnmREqABp+6fFmW89CB6EljgdNeAB0DoJtgMVw5kWGGMr/lLJcj3YHP/3G9ijudD12yDaAoj+ORjy3sVj2UBshhXttyCi04l7Bwig8fYBMvzO4pY1aNhRwGEndaPz7mIzsnMA5mTcma6pbDnt2pWl4OD8LYEjUeo5NjoBFHZZ4dUnUoxDAP8+AerYonVhNVp2bLnhbRQFpebNfI0QnNvVSE0PexFpxfw1RvS71b2Zx8HMkW+y2pxWh6gifSOwgzXYdx7RwrD63dQoY/MiVCflTmZr+BzYlOwChnxBN9gnNYX8TuNHb6yh1kCQuC9eJ58qKSJMpEytZdZuknwcpu4bF4HeSK1YB6cZZ8Fi3LLpJJXXsvvrp7cXOFQuHrOZa+b8/uNit+dlhx3dgO8Eulib7XLggmntWWHdEtEuXD4yc0wtjRp+II6l8Q+bzjBpxoTpylMohoJRZNZbc08HOW1ROdvujug+kLTtDZ5PztOWEAnIdqS2gUWUtWgLyOXjExq+gu5nt02DSZRtwrs+CP2leEj4AYQOTx4fv9WiEJAxs2xSFryZQTNb7ZK8sToDf6+0AwPVkKOnku+BlBJiOUcBvatrFh8tFCYjT/I5cN5f8LPNTFri+6MpfXLRJ9JGTY2rNdCImD5iVc6Pkg/uGCz+THEdlI/0pwaYi2I6OUa8hNhpB+sQ209owps5KsKA5akLSK0ez2HAuigkaMc33KYYBIUYV/5CV7JndgH/OMZjRZOyyq9LO9oEVUrm4+P4v4MoctFbbpZoFTNVSMFiHw988Sg6j9S/S8nzIlZW0BOA8TC7diNEgsLz/XFsujoKQo6bEEed1JfKopLETcJznCArxpifB1RGPEe31LcfP//5rNphFACp4qcGFXoFpyzg8SHhj9cPj/xY8bCDnm4tvf/y+/SX8Mvo9r5UbD1pXUApDt16LUYrTIqDdGdgt5usUUz7RjY8Asirc0Az80GnpI12+E6YMPmX70BumuY6bQxmbtRJJ4/RK6+IIm3XlCWMU6OVzuDG5GRwHq1r97UbWb5MJRRezFN801W00KFP+MzOhIq3kPqmlqAys19rGK/7+4RbwT77qEVcydv1zcoCeLmXMQsKNtxJEbHlPre2o06IiIe1B58jiu2wWgDDMFitmIivYURo2BzevhYnW8OjGlniOZFlOTT8eEN7Fxq2FFp30MpH1r/bLpPvDi2UIMBn9Ye5oeilhXiWsfMxL3p+U6GK6iNM2Q0/jb2358CLad9wRCzGFsEejlQmMDNFrS9JQFaCg9UwtVXLvhWHKIFfQ9uglxpF0L5UtGEIEESKUm9x9cAYu7dMclqwqUcdplM5PdX/uS+TxTIqVoZW5HJJ8iZ7niezB7Lgquwq7nyO8+eFKFjvTolKa/sh77gLXhkFflfdU2DFjJBioXhdoMFJsl4K+lF42reLAuovy2om5oUTYB+PTF5txWn0/529E/Bmfg9A7XTxShc5qMxSkJvfo4gworMcaWTRe/DFeE5ohKVhwVTjaiHCb+Ix2etVzAC3ATcuqzdk6fuVEb0wL3RRjaHShmPBq+lL4q9vosvNPMKlmnxW9uP8Mp72cjMy0uJfaRvFM7+ucC4tzVruVtiXZrRozNwEjY6tcGv/h8dRv8x9jFpOcEJOZ2ZTOodxDzU26Wfaf14NFBNkEPstPGWtPCEHyOxibUlT2qPVtLQzcIgo1PiRHG6HKMYOiF+VkqRlvf4ySvTcIj21STWaN7lKCCiz4a9Ge/UqD8meo7VdroT9FLmHN8X7wWg5MXO55O6Kfi0yxCGVqV3G77ioJSdMjzK09cb6URppQ7KC7TkpsKPTK/gH7y6iSJXCRgfsXSaYvRBOIsBM73B1zD5ltaYoTsz3Pq2cEonuT5NrXi7qGDkp/ylxhLVAFlMmRb+rYxAR1rgN+IuPdkJI9EEbfUhwYzOjVTSb49/lRIAyl724pC5LhHhIT7HzO7MvlhLrBofA5Re0Ck86KW9UmtF86JYX9A2hyDzfJcLfOFzlOsz/HSJsFXlwl4S2oavN/URwkvIgdwLh6O2Bmn7ttTGdYWKCoiPTu0CLmtiP8oDeC/da32P3d/r17F/8OG2tYiimeDPTZYW7Idmuq6arrr5tQyjvgtiBemhA3HYuhMpGiyn10/AHRAWIqORt3JgjYoJ7w/y6H0UZGpUSBz8KX3b0BFyTdQkEzRlcKYBRnO3YsVrhOi/Q1BpF0H2zcJzg1ilKgBs0IGS55p1ad3SrFQOUjz/j5+Xsgp2bdtyRLNWOHpf+l2+Hr9uyEm9at/ytxVShpc2ZjzkZzhhZ8f9PeD/FIh0D2HBNWmwg8kv3SgiQhLqWfkoP7W9b5Qk541Tn9foUCZyplsKm/uqi9EMw7m3WL+/jU68UycjtIN//QjQOb0k6fhoX/fQjP1c3zQUmHHnuSwGVBJHW5Cwb1wByDhWs07bqTw2hIbdE9Xc+NjU+EAUg7m+s+OOzZjC7fY+YQMn8yJD5uRNcYRIJ/H1EoJupnd9XPameqtXHit5E+wce8OR6kvXJdwcmb8PFzsiWQOCdQgwf+MzsZWXgquZOnnwV5aBOBqvgEpYxr6Z0GRIyxOctiw7yhlNCYuc7i4gPSx8u1x/P2299hRbwxUPPf7Nv3ofwv7dhDFl6C8qyOup1bu8PVL4m+0lNzzH59cmB6TDmNDosqW4oP84WAmXfwBiU4LxjW9kbDH74qNYsGqyq9znXTlOwluk1nCRGv8P+K0o+dgckT5ZzEDH7ifMgjj3CvccNN5JqD29X1jnBw52d+Lm9yQ8TQwNWGpbglHYcrdqEujzlyMJN6bIWriEEdBR0saQio6UhUHsqAU6qmTcr9z5HAGgUGjz+VjIUJfuesZgQ5RUFqxJgKN9dDrGOB/cjOUiYpxqJXCRwh+5dKnxo3mkzSWMQalms25xoKYBTc5uS0a9JomryhRe+DSGNOh7fNODtnYQ92eYv2c1t0rKiQg8146aGcarXh1lKkUqvjwjBiStKgMUIvFoGu7xWBJr5Z/hWeG/NHQaAqz743i/BLLBLuRqiEk0geeEx5jgwID23K883N14XROSzNkH7fA2yNrawmMDmLOi3kfk1C5C1hPpqtRu+jai/p3tpSKZfbPV1+8XpBDogGDCWY3z715h8OPztVb2xyuFOYwsSv22lb4lr6qJp8YnsuGeK1V36HGHnsL8bqagM5M8nnhbNx+PQebGFqGTw5qNHWf5sxl8Kq8qKVfVqmDjKYwl5I+PYNY8i0zc4zc/6XZyJ6xgLgNu+gdnn1/eHGStJpCMNA/9o9YCKEnZ///+Xh3jGFhOwAUYElYOZ72JdiwweGp8pctWtNhvWctO0KbdY9yxF4iLk1TyeYn5BUTUUWip3RvXeVGJey49EhSGEXRtSiCoC3/u8dPxZk8yNs3tcCwFtP0t+AxN/lK5UjErBNwlXSjw5PBbgWkjaZUzqJDWJCT8/GkewQs0s78U6/mON75VB8RVHCbc3EQhP+Ku+ghvH+2HkTtUla22Cw5aXJ0ObeZR2lBK8dvq0p8Qyz6A11oJRSwogYPdCLn3FhQo3HRHCSpWTD5tINLPr55cgTfxeNU+IVtyAjY/XU7yxM/2+eg7oZD0XFAB/Vf8stHMsJM2ZVFCN0lq9fcLy/O//fjb7BWgnrg7C2KYscmlw6katg+BlLsewaEAZmr8ez4O0BSdDWiOSZK5u89UUGuCVT7FeGShAe15XMD+rXlW87bJi71DFa3TbdFGZVru2QOZf9B85/Z1058A//8Thsu8F8fKoxXE22bFLna2FGAwyu1Kr97K+2Wm6Ku7JWoPH/3nQB34zv/x2xfuQ1MMgM0DFS8OEsbhBYSwefjlIpMp0HyM2vZYN5JWglOF9vyg+4KRna4CWsfQzZPfYFdCiGWEkwKdSP5mInaSz45dS5hPqz//b9iZHSk/GBz5B1nbepShh0r94KVFIHG9NLmyXStHtdo30edu3vOWdLEf2LkNzhwRSb+wiK6Xia+i+pVrIFwzGcBby/e4VXM71tLzBYKKA7Br94qbv8t+pj6SY2JQ1ywMr+6z1+PwKDJf4YgfwN0lMC9BcfaB14Li3lBPN0qWPyf8AhX0SsIbfCws5gCokRGMvcTpr0HflMXjUpEN/Glfga8gp4E8gksNO95fNEqby9ZA95+SP1Fl2wZrhbev18l0EV5/s1BIVNY6mxpB5dyG1K7EWB1XOhkeo+cld1ukZjoU1f2f7+rKs+DkZuTTEauDwFAWL1OGcxdrt9AWtzqoESfPD1PqieZxS1PwJBHep6wOwUd9ObTfaO4Iy+dLB+CeIc/IyLRqqKIbsxkJnonOASOnDcDVoooPUdOr6AUEohVGoFimKxzxXqg9Ri0hxOEB+kd6d4K9sJUFgi3j2HZnfEItZpUUzsE4My/M1z3WG9wKsukiCEJaTsFAjp8GQsEzl0FcKAL3iS5lFgHKoV5GaJI2Td2JU2HZI/4V4iZVabEUXX5Ad07dZVl51IbtOVhYn9BKeMrnwBjJpDHNWtEix9NIhx8meQU96xtV5o3cgmEjVqui0as/54DxFaZwa9xD95DLtqiD4PB8UHdVErtDMI51JsxXgBkbi5xySkrCjq9PfzTAmj7uDl5sh3vFZx72/YYkhMfIwkRBYPFBnx6WIaGKtoEznxXxEfB1rChfiIl+NbaObsFtiE5M/hZ5BBEISwauLadq40bfcPBDUlBaT1zsZFtJJwZ/t76Mae5nhlTUOZjlS8yiHBDv/z9DNz4KwiXOyB/IQFicD8klVzEJVJTbzf6Gx4DtMO2nagcLsrXKE5u0Oa3AJ3/MCK7c/eSIuyS1/3OhHnt3YaILmb8xAJ7zFqDxlHH7MnXCiG9SVzZPyOJfwQhhhegjvOjnMs8WKL4sEV47pMlIYvLm2fUxNA3mYFHOepkSU1ap84VpIGyKRNsa+NXrby4WIpN5HKtCYjoBDAZ5Zb0E1OkGef7nlxgv1z9C8VNbMSj3tqQfWMrWwuNmOASTnc6Dynrt2tbQrVPgfBNnJ+3p5SxKaivBbJuomU4c18B7ePFMnbUISURhXKNCoNK7QyTReJ0X6DczYxgPsHcTHKKh00O2rmhd2ABNaGIFLcphuX2SFBMYvVhUNye5OIky6xuihTXwbmEMtz9aB9w47y8zZ7Quj2cUf9jZtIpIcvqDllM7kevKb5x2sAke2vntayFnMPETXqVvGRQlpLa/w5JgRQ77pxmdLZBJrWhrfmWc48MzAeADOHxjHbAh0U7fUHeLyTn9rMFyE1RwRcuGTVRqGDkBOmItbobZgQW0sCmS7AgyW+Yp6W2XQHD6L80VPqMmKLHcF8vd0Py6v1DYXiC5gDUOsomzeiyYDY3On+sib8IFZN8zY+X/NPRLIPLbmmUMkkuyJe4/C8MwxM97heOnMnaNWpUu8op6SMxzxIG5J8PL06J5cZqLdlwjDz1SqEqrDZZmZPv6YQLLIwKBGIzjGajt7jz0APf+5TFLvR0i3aQZ7HzEq35vds6ocNIvljpDI5ZuR/+Q0kuleHdH+hM8s1ox2ac7Jlz6uIKZQlDp6/hAEVxRyiEY77hY9Od8qsnVlKFCR/fAmXK+GRW85je62xWF6Is/PbjMdAXbGFDfNlB1O81SkSSuNITCREZ4YuLyipEqp4gWNBWHKhyJMXAI9xsnfcgsdiMI1JVWLkIwm5CjW3II/vKMFKHHqjksHcgqbGJdROB4V7UQoHDIRy1lika49FGglb7YIpLtHMag2wuMoksRXthc/UweZkBp0H/Ayh5hBroF1Nvgltxa0q/jcR+uhPAM2HlreduZTzQdfZwnyBnRzy39q4GituZTqaqBo5U93ttdCHg9xNMoK+ye0xUKcrsvSS5F2EA8KO9TMC0LgiHgLPmhdBvTLGxTjJMBD2WSeb6SBpSYG0xsfNO3thwNbzZTucCjQl7DvUrIdlAe1T1Myhcx59rqkMdaXmAvlKP6WbnjIJ5S6Eizual04z4nwGbD7K9cnA4xkpgxGY63AAn+2mlqC/jEvhpOLyVAI+v5q8s6duW78chWUTYv/iGpTTLS3v42FmMckclnFeY6tZbaJvPsnuOX/c4NRnqADoV5DPsec1FX9hVD6Q4Sny7Mwkpoq1sFfDkSV29lVvhYt4oqXXIuKHkH8EHltUA8alBBg1Mq3h75K62MNA6EitjBOF0wC36EZTnuqVUyrLunTsmj5ZAdBnyOn5QkYR5xdnadLHOYD5mNNmaVG6HgfyynPRC0tYsECpJ3tR6qL0dXSHc1Xxv3z2d0B1hadJW5tAV+w1J9/BShlGJ2ghH/lDv59QLUO7ZhIKWM9yhM2fu79N8b3EFjeVLFGUYe5OiwJPycYi6QwmtYhPSwmzR/c7bFJteBima17vPm7bNIC9hLQSXfJun4fCQcCV2C3JX4G3xXw1nWNP0CzNRpbGCQ1PqbB3SzhytuF3voiz2JPfDJ3Nm7lIeTQPAIKM1QyBrhs97QFFw5CqvQqqDGbHlMcJB+jkOqVCX5Penubo6805iJOnnQqI/GvpTYS2jot58F3+Qg+5xP7Y3HEBBjSnTYp3aDiCBT8qxEHrhNs29Sja7oHYSPijo+Bt5a0Ri/qKEkAUGavWNTGlOv/Uk9EU5smafhzd3OtXohTpwbhmgsKJ7xgem9kAoKx6Zy2g+LeOdGs4cWpa4adNXk5+jYOBKtUGN2+gWnuLA5pIT1AztkbECXpbFmg4rW2cjqtMpSuQh4h9L0XoQrW9+3iQO/XcY9L/pOzqkgBOZG4xPlvt7XBivXvTQkz9654B82kgxZlGMy/IDEtoCyvg1/IR7lIIV491EJxf/+NKy4ObJSupbpszGMdwd1o2WuiwfUUmywCNkEugI6sxnxt4PYaHPpfX5l2PXaZ+Cidxk3IGmvQx3eod38r19+95uriKnAcy9d255R7hkTEm4x2ltNy8bPubPQabp0evOYnSj2C+OU8g+A2P6+DqT8JYnkGtXC7XdokZu6mEgHFq5sSRKGz8vnuBEW+6xRLmuNSjhaa18Hpmim66ie8PbNNIZ+MCxtwm7NHW2kFpYZGMH/iAXuD5rOXgYo6TIGnm2ff13VaW3oz0KMPCx3wXNKuj+/yMVbZPsrQ0aDDX/Ek0/0K3MKFGuPSOeBr7jEHh2M9f3Q7PFAXV7aoEJ5Sbatb3NUtc1PCOEWHgREGth9v6p5N2ylZt2u/OYxXfo/fdjxg0dHba1luj0uLBqRJC2Xp5x+LZ92S/N19QwQXmwKB05kBaBy9vObhUZ/wBGsHIs/S5f96zZfJGV8jWYnlD86+IY7XN9Az5XbFx974mS/mSB9Elw8fxFqdWeoxkZn4xjqcfedBUpxNDRrb2Weo10gcG/ZW2uEb1z/cW7i9kWk4v1F7+wqcH9pvembSOIzXxvaQxLHnKXaxvBfR6f2cgI8uHJrqyb9yOodGv7A5HbagZYtCujHEIBZKaIrFXvUs9B16qOD9zRBsz6xAaQVF+6GdHuGxPQFJPnEGG13EoeN2H02vvICKEq/MinXNZ5BkrqxqmcLRumllg1VItE2W7VPlqDt6lVUrZVqEdu84xY0OtSk3KlI5SoesL0bPO5z0EfGjUMDk5lbqHdggm11wI9kSoX97UJkg1beZSoLHxeOKq+PkWPwUTgw1WpD7KDSsJlZYiL5ElZvqdH4W1mmapEnyNm7Kixe1UcYISAN7iaE9/N6QzS4EhIz+aFQL/hlaw1OPttmEnVUHGDoMRhtG0J/GbEp/rKXQW+JFyM0GIV3DH76khGsqw1vVym4ixs/K1Ly2J72q05Tlqcv0XeUlUF02jIU6DC8WHBT+wgLQM1wM5lLmDy/S9P1afaReli7N664vkDmmEyM+Q/dhSXkSU6o5cH77YgDXpEZa4j7yg60OGJ7AvMNlVNl+8ercegB91fI59xwtZyJ4xvnK6/sQq9+ViDBf7WDgfQPz+iDO2TFenVIxyaHPnpId3rBAKIRM7G6zD/19+cWyl112i8kHEgxabAa88papAZ+kD74eycfrrwqFw5nBkhVhehsYo+MMzveSwEiOsF6xmE05O4p5vfKGlvMXGgG1dkHAQlucAqIsP0zUuFpmvzH6Goeys2neFRdrBMNjB2WjwwEPwpsSpN2rnNjJ2otOdp+FyGPApZCqUw7+1j+xtgxWVh6pI1etY0AxaXfAmnFdRdoZAhjxU+5Us0J9NKoFvgyyWMjqA=="),(A=>A.charCodeAt(0)))));const s=new Set(n(l)),i=new Set(n(l)),a=function(A){let t=[];for(;;){let e=A();if(0==e)break;t.push(r(e,A))}for(;;){let e=A()-1;if(e<0)break;t.push(g(e,A))}return Object.fromEntries(t.flat())}(l),c=function(A){let t=n(A).sort(((A,t)=>A-t));return function e(){let o=[];for(;;){let r=n(A);if(0==r.length)break;o.push({set:new Set(r.map((A=>t[A]))),node:e()})}o.sort(((A,t)=>t.set.size-A.set.size));let r=A();return{branches:o,valid:0!=(1&r),fe0f:0!=(2&r),save:0!=(4&r),check:0!=(8&r)}}()}(l),w=new Set(n(l,[...s].sort(((A,t)=>A-t))));function p(A){return A.normalize("NFC")}function B(A){return[...A].map((A=>A.codePointAt(0)))}function C(A){return A.filter((A=>65039!=A))}function d(A,t=!1){let e=[...A].map((A=>A.codePointAt(0))).reverse(),n=[];for(;e.length;){let A=f(e,c);if(A){n.push(...t?A:C(A));continue}let o=e.pop();if(s.has(o)){n.push(o);continue}if(i.has(o))continue;let r=a[o];if(!r)throw new Error(`Disallowed codepoint: 0x${o.toString(16).toUpperCase()}`);n.push(...r)}return p(String.fromCodePoint(...n))}function f(A,t,e){let n,o=[],r=A.length;for(e&&(e.length=0);r;){let g=A[--r];if(t=t.branches.find((A=>A.set.has(g)))?.node,!t)break;o.push(g),t.fe0f&&(o.push(65039),r>0&&65039==A[r-1]&&r--),t.valid&&(n=o.slice(),e&&e.push(...A.slice(r).reverse()),A.length=r)}return n}function u(A){let t=B(A).reverse(),e=[],n=[];for(;t.length;){let A=f(t,c,e);if(A)n.push({type:"emoji",emoji:A,input:e.slice(),cps:C(A)});else{let A=t.pop();if(46===A)n.push({type:"stop"});else if(s.has(A))n.push({type:"valid",cps:[A]});else if(i.has(A))n.push({type:"ignored",cp:A});else{let t=a[A];t?n.push({type:"mapped",cp:A,cps:t}):n.push({type:"disallowed",cp:A})}}}for(let A=0,t=-1;A<n.length;A++){let e=n[A];if(h(e.type))if(E(e.cps)){let e=A+1;for(let A=e;A<n.length;A++){let{type:t,cps:o}=n[A];if(h(t)){if(!E(o))break;e=A+1}else if("ignored"!==t||"disallowed"!==t)break}t<0&&(t=A);let o=n.slice(t,e),r=o.flatMap((A=>h(A.type)?A.cps:[])),g=String.fromCodePoint(...r),l=p(g);g===l?A=e-1:(n.splice(t,e-t,{type:"nfc",input:r,cps:B(l),tokens:M(o)}),A=t),t=-1}else t=A;else"emoji"===e.type&&(t=-1)}return M(n)}function h(A){return"valid"===A||"mapped"===A}function E(A){return A.some((A=>w.has(A)))}function M(A){for(let t=0;t<A.length;t++)if("valid"===A[t].type){let e=t+1;for(;e<A.length&&"valid"===A[e].type;)e++;A.splice(t,e-t,{type:"valid",cps:A.slice(t,e).flatMap((A=>A.cps))})}return A}function Q(A){return A.toString(16).toUpperCase()}function I(A){return`{${Q(A)}}`}function D(A){return[...A].map((A=>A.codePointAt(0)))}function m(A,t=I){return A.replace(/(?:([\x00-\x20\x7F\xA0\s\u200C\u200D\u{E0020}-\u{E007F}])|([^\x21-\x25\x27-\x3B\x3D\x3F-\x7E]))/gu,((A,e,n)=>e?t(e.codePointAt(0)):`&#${n.codePointAt(0)}`))}function x(A){return A.replace(/[^\x21\x23-\x7A\x7C\x7E]/gu,(A=>I(A.codePointAt(0))))}function y(A){return/^[\x21-\x7E]+$/gu.test(A)}function F(A,t,e={}){for(let n of A){let A=t(n),o=e[A];o||(o=e[A]=[]),o.push(n)}return e}function k(A,t){let e=0,n=[];for(let o=1;o<A.length;o++)t(A[o-1],A[o])&&(n.push(A.slice(e,o)),e=o);return e<A.length&&n.push(A.slice(e)),n}function K(A,t,e){let n=[];A=A.map((A=>A.slice()));for(let o=0;o<A.length;o++){let r=A[o],[g,l]=r;if(-1==g)continue;let s=[r];A:for(let n=o+1;n<A.length;n++){let o=A[n],[r,i]=o;if(-1==r)continue;let a=g+s.length*t;if(!(r<a)){if(r>a)break;for(let A=0;A<l.length;A++)if(l[A]+s.length*e!=i[A])continue A;s.push(o)}}s.length>1&&(s.forEach((A=>A[0]=-1)),n.push([g,s.length,l]))}return{linear:n,nonlinear:A.filter((A=>A[0]>=0))}}function H(A,t){let{length:e}=A,n=e-t.length;for(let o=0;0==n&&o<e;o++)n=A[o]-t[o];return n}function Y(A){return A<26?97+A:22+A}function b(A,t){let e=A-t;return e<=0?1:e>=26?26:e}function G(A,t,e){A=Math.floor(A/(e?700:2)),A+=Math.floor(A/t);let n=0;for(;A>455;)A=Math.floor(A/35),n+=36;return n+Math.floor(36*A/(A+38))}const U=new Set(D("-.0123456789abcdefghijklmnopqrstuvwxyz"));function L(A){let t=0;return A.split(".").map(((A,e)=>{if(e>0&&t++,!A)return"";let n=D(A),o=function(A){if(!Array.isArray(A)||!A.every((A=>Number.isSafeInteger(A)&&A>=0&&A<=1114111)))throw new TypeError("expected array of Unicode codepoints");let t=A.filter((A=>A<128)),e=t.length;if(e==A.length)return A;e&&t.push(45);let n=128,o=72,r=0,g=e;for(;g<A.length;){let l=A.reduce(((A,t)=>t>=n&&t<A?t:A),1114111);r+=(l-n)*(g+1);for(let n of A)if(n<l)r++;else if(n==l){let A=r;for(let e=36;;e+=36){let n=b(e,o),r=A-n;if(r<0)break;let g=36-n;t.push(Y(n+r%g)),A=Math.floor(r/g)}t.push(Y(A)),o=G(r,g+1,g==e),r=0,g++}r++,n=l+1}return t}(n);try{for(let A of o)if(!U.has(A))throw new Error(`invalid ASCII: "${x(String.fromCodePoint(A))}"`);if(t+=o.length,o===n){if(A.startsWith("xn--"))throw new Error("punycode literal");if("--"===A.slice(2,4))throw Error("invalid label extension");if(A.startsWith("-"))throw Error("leading hyphen");if(A.endsWith("-"))throw Error("trailing hyphen")}else t+=4,A="xn--"+String.fromCodePoint(...o);if(A.length>63)throw new Error("too long")}catch(t){throw new Error(`Invalid label "${x(A)}": ${t.message}`)}if(t>253)throw new Error("Name too long");return A})).join(".")}function O(A){return m(String.fromCodePoint(...A),(A=>8204==A?'<span class="mod zwj">ZWNJ</span>':8205==A?'<span class="mod zwj">ZWJ</span>':`<code>${Q(A)}</code>`))}function S(A){return`Hex: 0x${A.map(Q).join(" ")}\nDec: ${A.join(" ")}`}function N(){let A=document.createElement("span");return A.classList.add("arrow"),A.innerHTML="🡆",A}function T(A,t){let e=document.createElement("div");return e.classList.add("tokens"),t&&(A=A.flatMap((A=>"nfc"===A.type?A.tokens:A))),e.append(...A.flatMap((A=>{let e;if("emoji"===A.type){let n=t?A.input:A.cps;e=document.createElement("a"),e.href=`https://emojipedia.org/${String.fromCodePoint(...A.emoji)}`,e.classList.add("glyph"),e.append(...n.map(((A,t)=>{let e=document.createElement("span");if(8205==A)e.classList.add("mod","zwj"),e.innerHTML="ZWJ";else if(65039==A)e.classList.add("mod","dropped","style"),e.innerHTML="FE0F";else if(8419==A)e.classList.add("mod","keycap"),e.innerHTML="Keycap";else if(A>=917536&&A<=917631){A-=917504;let t=String.fromCodePoint(A);127===A?(e.classList.add("mod"),e.innerHTML="TagEnd"):(y(t)?e.innerHTML=t:(e=document.createElement("code"),e.innerHTML=Q(A)),e.classList.add("mod","tag"))}else e.classList.add("emoji"),e.innerHTML=String.fromCodePoint(A);return e})))}else if("nfc"===A.type){e=document.createElement("div"),e.classList.add("nfc");let t=T(A.tokens,!1);t.classList.add("before");let n=document.createElement("div");n.classList.add("valid"),n.innerHTML=O(A.cps),n.title=S(A.cps),e.append(t,N(),n)}else if(e=document.createElement("div"),"valid"===A.type)e.classList.add("valid"),e.innerHTML=O(A.cps),e.title=S(A.cps);else if("mapped"===A.type){e.classList.add("mapped");let n=document.createElement("span");n.classList.add("before"),n.innerHTML=O([A.cp]),n.title=S([A.cp]),e.append(n),t||e.append(N(),...A.cps.map((A=>{let t=document.createElement("span");return t.innerHTML=O([A]),t.title=S([A]),t})))}else if("ignored"===A.type)e=document.createElement("code"),e.innerHTML=Q(A.cp),e.title=S([A.cp]),e.classList.add("ignored");else if("disallowed"===A.type)e.classList.add("disallowed"),e.innerHTML=O([A.cp]),e.title=S([A.cp]);else{if("stop"!==A.type)throw new TypeError(`unknown token type: ${A.type}`);e.classList.add("stop"),e.innerHTML="."}return e}))),e}function v(){let A=document.createElement("style");A.innerText="\n\t.tokens {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 2px;\n\t}\n\t.tokens > * {\n\t\tpadding: 2px 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t}\n\t.tokens a {\n\t\ttext-decoration: none;\n\t}\n\t.tokens a:hover {\n\t\toutline: 2px solid #00f;\n\t}\n\t.tokens .valid {\n\t\tborder-radius: 5px;\n\t\tbackground: #cfc;\n\t\tborder: 2px solid #0a0;\n\t\tline-break: anywhere;\n\t}\n\t.tokens .ignored {\n\t\tcolor: #fff;\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .disallowed {\n\t\tbackground: #f66;\t\n\t}\n\t.tokens .mapped {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #66f;\n\t\tbackground: #ccf;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mapped span:first-child {\n\t\tmargin-bottom: -4px;\n\t\tborder-bottom: 4px solid #000;\n\t}\n\t.tokens .stop {\n\t\tfont-weight: bold;\n\t}\n\t.tokens .glyph {\n\t\tborder: 2px solid #0aa;\n\t\tborder-radius: 0.5rem;\n\t\tbackground: #cff;\n\t}\n\t.tokens .mod {\n\t\tfont-size: 70%;\n\t\tpadding: 2px;\n\t\tbackground: #333;\n\t\tcolor: #fff;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mod.zwj {\n\t\tbackground: #0aa;\n\t}\n\t.tokens .mod.tag {\n\t\tbackground: #33f;\n\t}\n\t.tokens .mod.dropped {\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .arrow {\n\t\tcolor: rgba(0, 0, 0, 0.35);\n\t}\n\t.tokens .nfc {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #fa0;\n\t\tbackground: #fd8;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens code {\n\t\tfont-size: 90%;\n\t\tpadding: 2px;\n\t\tborder-radius: 5px;\n\t\tcolor: #fff;\n\t\tbackground: rgba(0, 0, 0, .3);\n\t\talign-self: center;\n\t}",document.body.append(A)}export{H as compare_arrays,L as dns_from_normalized_ens,T as dom_from_tokens,d as ens_normalize,u as ens_tokenize,m as escape_for_html,x as escape_unicode,D as explode_cp,F as group_by,Q as hex_cp,y as is_printable_ascii,I as quote_cp,k as split_between,K as split_linear,v as use_default_style};
function A(A){return 1&A?~A>>1:A>>1}function e(A,e){let t=Array(A);for(let n=0,o=-1;n<A;n++)t[n]=o+=1+e();return t}function t(e,t){let n=Array(e);for(let o=0,r=0;o<e;o++)n[o]=r+=A(t());return n}function n(A,t){let n=e(A(),A),o=A(),r=e(o,A),i=function(A,e){let t=Array(A);for(let n=0;n<A;n++)t[n]=1+e();return t}(o,A);for(let A=0;A<o;A++)for(let e=0;e<i[A];e++)n.push(r[A]+e);return t?n.map((A=>t[A])):n}function o(A,e,n){let o=Array(A).fill().map((()=>[]));for(let r=0;r<e;r++)t(A,n).forEach(((A,e)=>o[e].push(A)));return o}function r(A,e){let t=1+e(),n=e(),r=function(A){let e=[];for(;;){let t=A();if(0==t)break;e.push(t)}return e}(e);return o(r.length,1+A,e).flatMap(((A,e)=>{let[o,...i]=A;return Array(r[e]).fill().map(((A,e)=>{let r=e*n;return[o+e*t,i.map((A=>A+r))]}))}))}function i(A,e){return o(1+e(),1+A,e).map((A=>[A[0],A.slice(1)]))}var l=function(A){let e=0;return()=>A[e++]}(function(A){let e=0;function t(){return A[e++]<<8|A[e++]}let n=t(),o=1,r=[0,1];for(let A=1;A<n;A++)r.push(o+=t());let i=t(),l=e;e+=i;let g=0,a=0;function s(){return 0==g&&(a=a<<8|A[e++],g=8),a>>--g&1}const c=2**31,p=c>>>1,B=c-1;let f=0;for(let A=0;A<31;A++)f=f<<1|s();let d=[],C=0,u=c;for(;;){let A=Math.floor(((f-C+1)*o-1)/u),e=0,t=n;for(;t-e>1;){let n=e+t>>>1;A<r[n]?t=n:e=n}if(0==e)break;d.push(e);let i=C+Math.floor(u*r[e]/o),l=C+Math.floor(u*r[e+1]/o)-1;for(;0==((i^l)&p);)f=f<<1&B|s(),i=i<<1&B,l=l<<1&B|1;for(;i&~l&536870912;)f=f&p|f<<1&B>>>1|s(),i=i<<1^p,l=(l^p)<<1|p|1;C=i,u=1+l-i}let w=n-4;return d.map((e=>{switch(e-w){case 3:return w+65792+(A[l++]<<16|A[l++]<<8|A[l++]);case 2:return w+256+(A[l++]<<8|A[l++]);case 1:return w+A[l++];default:return e-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));function g(A){return A.toString(16).toUpperCase()}function a(A){return`{${g(A)}}`}function s(A){return[...A].map((A=>A.codePointAt(0)))}function c(A){return A.filter((A=>65039!=A))}function p(A,e=a){return A.replace(/(?:([\x00-\x20\x7F\xA0\s\u200C\u200D\u{E0020}-\u{E007F}])|([^\x21-\x25\x27-\x3B\x3D\x3F-\x7E]))/gu,((A,t,n)=>t?e(t.codePointAt(0)):`&#${n.codePointAt(0)}`))}function B(A){return A.replace(/[^\x21\x23-\x7A\x7C\x7E]/gu,(A=>a(A.codePointAt(0))))}function f(A){return/^[\x21-\x7E]+$/gu.test(A)}function d(A,e){let{length:t}=A,n=t-e.length;for(let o=0;0==n&&o<t;o++)n=A[o]-e[o];return n}const C=new Set(n(l)),u=new Set(n(l)),w=function(A){let e=[];for(;;){let t=A();if(0==t)break;e.push(r(t,A))}for(;;){let t=A()-1;if(t<0)break;e.push(i(t,A))}return Object.fromEntries(e.flat())}(l),h=function(A){let e=n(A).sort(((A,e)=>A-e));return function t(){let o=[];for(;;){let r=n(A,e);if(0==r.length)break;o.push({set:new Set(r),node:t()})}o.sort(((A,e)=>e.set.size-A.set.size));let r=A(),i=r%3;r=r/3|0;let l=!!(1&r);return r>>=1,{branches:o,valid:i,fe0f:l,save:1==r,check:2==r}}()}(l),Q=new Set(n(l,[...C].sort(((A,e)=>A-e))));function E(A){return A.normalize("NFC")}function I(A){return D(A,(A=>A))}function m(A){return D(A,c)}function D(A,e){let t=s(A).reverse(),n=[];for(;t.length;){let A=y(t);if(A){n.push(...e(A));continue}let o=t.pop();if(C.has(o)){n.push(o);continue}if(u.has(o))continue;let r=w[o];if(!r)throw new Error(`Disallowed codepoint: 0x${o.toString(16).toUpperCase()}`);n.push(...r)}return E(String.fromCodePoint(...n))}function y(A,e){let t,n,o=h,r=[],i=A.length;for(e&&(e.length=0);i;){let l=A[--i];if(o=o.branches.find((A=>A.set.has(l)))?.node,!o)break;if(o.save)n=l;else if(o.check&&l===n)break;r.push(l),o.fe0f&&(r.push(65039),i>0&&65039==A[i-1]&&i--),o.valid&&(t=r.slice(),2==o.valid&&t.splice(1,1),e&&e.push(...A.slice(i).reverse()),A.length=i)}return t}function k(A){let e=s(A).reverse(),t=[],n=[];for(;e.length;){let A=y(e,t);if(A)n.push({type:"emoji",emoji:A,input:t.slice(),cps:c(A)});else{let A=e.pop();if(46===A)n.push({type:"stop"});else if(C.has(A))n.push({type:"valid",cps:[A]});else if(u.has(A))n.push({type:"ignored",cp:A});else{let e=w[A];e?n.push({type:"mapped",cp:A,cps:e}):n.push({type:"disallowed",cp:A})}}}for(let A=0,e=-1;A<n.length;A++){let t=n[A];if(M(t.type))if(T(t.cps)){let t=A+1;for(let A=t;A<n.length;A++){let{type:e,cps:o}=n[A];if(M(e)){if(!T(o))break;t=A+1}else if("ignored"!==e||"disallowed"!==e)break}e<0&&(e=A);let o=n.slice(e,t),r=o.flatMap((A=>M(A.type)?A.cps:[])),i=String.fromCodePoint(...r),l=E(i);i===l?A=t-1:(n.splice(e,t-e,{type:"nfc",input:r,cps:s(l),tokens:H(o)}),A=e),e=-1}else e=A;else"emoji"===t.type&&(e=-1)}return H(n)}function M(A){return"valid"===A||"mapped"===A}function T(A){return A.some((A=>Q.has(A)))}function H(A){for(let e=0;e<A.length;e++)if("valid"===A[e].type){let t=e+1;for(;t<A.length&&"valid"===A[t].type;)t++;A.splice(e,t-e,{type:"valid",cps:A.slice(e,t).flatMap((A=>A.cps))})}return A}function F(A){return A<26?97+A:22+A}function G(A,e){let t=A-e;return t<=0?1:t>=26?26:t}function x(A,e,t){A=Math.floor(A/(t?700:2)),A+=Math.floor(A/e);let n=0;for(;A>455;)A=Math.floor(A/35),n+=36;return n+Math.floor(36*A/(A+38))}const K=new Set(s("-.0123456789abcdefghijklmnopqrstuvwxyz"));function L(A){let e=0;return A.split(".").map(((A,t)=>{if(t>0&&e++,!A)return"";let n=s(A),o=function(A){if(!Array.isArray(A)||!A.every((A=>Number.isSafeInteger(A)&&A>=0&&A<=1114111)))throw new TypeError("expected array of Unicode codepoints");let e=A.filter((A=>A<128)),t=e.length;if(t==A.length)return A;t&&e.push(45);let n=128,o=72,r=0,i=t;for(;i<A.length;){let l=A.reduce(((A,e)=>e>=n&&e<A?e:A),1114111);r+=(l-n)*(i+1);for(let n of A)if(n<l)r++;else if(n==l){let A=r;for(let t=36;;t+=36){let n=G(t,o),r=A-n;if(r<0)break;let i=36-n;e.push(F(n+r%i)),A=Math.floor(r/i)}e.push(F(A)),o=x(r,i+1,i==t),r=0,i++}r++,n=l+1}return e}(n);try{for(let A of o)if(!K.has(A))throw new Error(`invalid ASCII: "${B(String.fromCodePoint(A))}"`);if(e+=o.length,o===n){if(A.startsWith("xn--"))throw new Error("punycode literal");if("--"===A.slice(2,4))throw Error("invalid label extension");if(A.startsWith("-"))throw Error("leading hyphen");if(A.endsWith("-"))throw Error("trailing hyphen")}else e+=4,A="xn--"+String.fromCodePoint(...o);if(A.length>63)throw new Error(`too long: ${A.length} > 63`)}catch(e){throw new Error(`Invalid label "${B(A)}": ${e.message}`)}if(e>253)throw new Error(`Name too long: ${e} > 253`);return A})).join(".")}function v(A){return p(String.fromCodePoint(...A),(A=>8204==A?'<span class="mod zwj">ZWNJ</span>':8205==A?'<span class="mod zwj">ZWJ</span>':`<code>${g(A)}</code>`))}function Y(A){return`Hex: 0x${A.map(g).join(" ")}\nDec: ${A.join(" ")}`}function P(){let A=document.createElement("span");return A.classList.add("arrow"),A.innerHTML="➔",A}function b(A,e){let t=document.createElement("div");return t.classList.add("tokens"),e&&(A=A.flatMap((A=>"nfc"===A.type?A.tokens:A))),t.append(...A.flatMap((A=>{let t;if("emoji"===A.type){let n=e?A.input:A.cps;t=document.createElement("a"),t.href=`https://emojipedia.org/${String.fromCodePoint(...A.emoji)}`,t.classList.add("glyph"),t.append(...n.map(((A,e)=>{let t=document.createElement("span");if(8205==A)t.classList.add("mod","zwj"),t.innerHTML="ZWJ";else if(65039==A)t.classList.add("mod","dropped","style"),t.innerHTML="FE0F";else if(8419==A)t.classList.add("mod","keycap"),t.innerHTML="Keycap";else if(A>=917536&&A<=917631){A-=917504;let e=String.fromCodePoint(A);127===A?(t.classList.add("mod"),t.innerHTML="TagEnd"):(f(e)?t.innerHTML=e:(t=document.createElement("code"),t.innerHTML=g(A)),t.classList.add("mod","tag"))}else t.classList.add("emoji"),t.innerHTML=String.fromCodePoint(A);return t})))}else if("nfc"===A.type){t=document.createElement("div"),t.classList.add("nfc");let e=b(A.tokens,!1);e.classList.add("before");let n=document.createElement("div");n.classList.add("valid"),n.innerHTML=v(A.cps),n.title=Y(A.cps),t.append(e,P(),n)}else if(t=document.createElement("div"),"valid"===A.type)t.classList.add("valid"),t.innerHTML=v(A.cps),t.title=Y(A.cps);else if("mapped"===A.type){t.classList.add("mapped");let n=document.createElement("span");n.classList.add("before"),n.innerHTML=v([A.cp]),n.title=Y([A.cp]),t.append(n),e||t.append(P(),...A.cps.map((A=>{let e=document.createElement("span");return e.innerHTML=v([A]),e.title=Y([A]),e})))}else if("ignored"===A.type)t=document.createElement("code"),t.innerHTML=g(A.cp),t.title=Y([A.cp]),t.classList.add("ignored");else if("disallowed"===A.type)t.classList.add("disallowed"),t.innerHTML=v([A.cp]),t.title=Y([A.cp]);else{if("stop"!==A.type)throw new TypeError(`unknown token type: ${A.type}`);t.classList.add("stop"),t.innerHTML="."}return t}))),t}function J(){let A=document.createElement("style");A.innerText="\n\t.tokens {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 2px;\n\t}\n\t.tokens > * {\n\t\tpadding: 2px 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t}\n\t.tokens a {\n\t\ttext-decoration: none;\n\t}\n\t.tokens a:hover {\n\t\toutline: 2px solid #00f;\n\t}\n\t.tokens .valid {\n\t\tborder-radius: 5px;\n\t\tbackground: #cfc;\n\t\tborder: 2px solid #0a0;\n\t\tline-break: anywhere;\n\t}\n\t.tokens .ignored {\n\t\tcolor: #fff;\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .disallowed {\n\t\tbackground: #f66;\t\n\t}\n\t.tokens .mapped {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #66f;\n\t\tbackground: #ccf;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mapped span:first-child {\n\t\tmargin-bottom: -4px;\n\t\tborder-bottom: 4px solid #000;\n\t}\n\t.tokens .stop {\n\t\tfont-weight: bold;\n\t}\n\t.tokens .glyph {\n\t\tborder: 2px solid #0aa;\n\t\tborder-radius: 0.5rem;\n\t\tbackground: #cff;\n\t}\n\t.tokens .mod {\n\t\tfont-size: 70%;\n\t\tpadding: 2px;\n\t\tbackground: #333;\n\t\tcolor: #fff;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mod.zwj {\n\t\tbackground: #0aa;\n\t}\n\t.tokens .mod.tag {\n\t\tbackground: #33f;\n\t}\n\t.tokens .mod.dropped {\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .arrow {\n\t\tcolor: rgba(0, 0, 0, 0.35);\n\t}\n\t.tokens .nfc {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #fa0;\n\t\tbackground: #fd8;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens code {\n\t\tfont-size: 90%;\n\t\tpadding: 2px;\n\t\tborder-radius: 5px;\n\t\tcolor: #fff;\n\t\tbackground: rgba(0, 0, 0, .3);\n\t\talign-self: center;\n\t}",document.body.append(A)}export{d as compare_arrays,L as dns_from_normalized_ens,b as dom_from_tokens,I as ens_beautify,m as ens_normalize,k as ens_tokenize,p as escape_for_html,B as escape_unicode,s as explode_cp,c as filter_fe0f,g as hex_cp,f as is_printable_ascii,a as quote_cp,J as use_default_style};

@@ -1,1 +0,1 @@

function r(r){return[...r].map((r=>r.codePointAt(0)))}function t(r){return r.replace(/[^\x21\x23-\x7A\x7C\x7E]/gu,(r=>{return`{${t=r.codePointAt(0),t.toString(16).toUpperCase()}}`;var t}))}function e(r){return r<26?97+r:22+r}function o(r,t){let e=r-t;return e<=0?1:e>=26?26:e}function n(r,t,e){r=Math.floor(r/(e?700:2)),r+=Math.floor(r/t);let o=0;for(;r>455;)r=Math.floor(r/35),o+=36;return o+Math.floor(36*r/(r+38))}const i=new Set(r("-.0123456789abcdefghijklmnopqrstuvwxyz"));function l(l){let f=0;return l.split(".").map(((l,h)=>{if(h>0&&f++,!l)return"";let a=r(l),u=function(r){if(!Array.isArray(r)||!r.every((r=>Number.isSafeInteger(r)&&r>=0&&r<=1114111)))throw new TypeError("expected array of Unicode codepoints");let t=r.filter((r=>r<128)),i=t.length;if(i==r.length)return r;i&&t.push(45);let l=128,f=72,h=0,a=i;for(;a<r.length;){let u=r.reduce(((r,t)=>t>=l&&t<r?t:r),1114111);h+=(u-l)*(a+1);for(let l of r)if(l<u)h++;else if(l==u){let r=h;for(let n=36;;n+=36){let i=o(n,f),l=r-i;if(l<0)break;let h=36-i;t.push(e(i+l%h)),r=Math.floor(l/h)}t.push(e(r)),f=n(h,a+1,a==i),h=0,a++}h++,l=u+1}return t}(a);try{for(let r of u)if(!i.has(r))throw new Error(`invalid ASCII: "${t(String.fromCodePoint(r))}"`);if(f+=u.length,u===a){if(l.startsWith("xn--"))throw new Error("punycode literal");if("--"===l.slice(2,4))throw Error("invalid label extension");if(l.startsWith("-"))throw Error("leading hyphen");if(l.endsWith("-"))throw Error("trailing hyphen")}else f+=4,l="xn--"+String.fromCodePoint(...u);if(l.length>63)throw new Error("too long")}catch(r){throw new Error(`Invalid label "${t(l)}": ${r.message}`)}if(f>253)throw new Error("Name too long");return l})).join(".")}export{l as dns_from_normalized_ens};
function r(r){return[...r].map((r=>r.codePointAt(0)))}function t(r){return r.replace(/[^\x21\x23-\x7A\x7C\x7E]/gu,(r=>{return`{${t=r.codePointAt(0),t.toString(16).toUpperCase()}}`;var t}))}function e(r){return r<26?97+r:22+r}function o(r,t){let e=r-t;return e<=0?1:e>=26?26:e}function n(r,t,e){r=Math.floor(r/(e?700:2)),r+=Math.floor(r/t);let o=0;for(;r>455;)r=Math.floor(r/35),o+=36;return o+Math.floor(36*r/(r+38))}const i=new Set(r("-.0123456789abcdefghijklmnopqrstuvwxyz"));function l(l){let f=0;return l.split(".").map(((l,h)=>{if(h>0&&f++,!l)return"";let a=r(l),u=function(r){if(!Array.isArray(r)||!r.every((r=>Number.isSafeInteger(r)&&r>=0&&r<=1114111)))throw new TypeError("expected array of Unicode codepoints");let t=r.filter((r=>r<128)),i=t.length;if(i==r.length)return r;i&&t.push(45);let l=128,f=72,h=0,a=i;for(;a<r.length;){let u=r.reduce(((r,t)=>t>=l&&t<r?t:r),1114111);h+=(u-l)*(a+1);for(let l of r)if(l<u)h++;else if(l==u){let r=h;for(let n=36;;n+=36){let i=o(n,f),l=r-i;if(l<0)break;let h=36-i;t.push(e(i+l%h)),r=Math.floor(l/h)}t.push(e(r)),f=n(h,a+1,a==i),h=0,a++}h++,l=u+1}return t}(a);try{for(let r of u)if(!i.has(r))throw new Error(`invalid ASCII: "${t(String.fromCodePoint(r))}"`);if(f+=u.length,u===a){if(l.startsWith("xn--"))throw new Error("punycode literal");if("--"===l.slice(2,4))throw Error("invalid label extension");if(l.startsWith("-"))throw Error("leading hyphen");if(l.endsWith("-"))throw Error("trailing hyphen")}else f+=4,l="xn--"+String.fromCodePoint(...u);if(l.length>63)throw new Error(`too long: ${l.length} > 63`)}catch(r){throw new Error(`Invalid label "${t(l)}": ${r.message}`)}if(f>253)throw new Error(`Name too long: ${f} > 253`);return l})).join(".")}export{l as dns_from_normalized_ens};

@@ -83,3 +83,2 @@ function decode_arithmetic(bytes) {

// returns an iterator which returns the next symbol

@@ -117,2 +116,3 @@ function read_payload(v) {

// return unsorted? unique array
function read_member_array(next, lookup) {

@@ -131,5 +131,3 @@ let v = read_ascending(next(), next);

// returns array of
// [x, ys] => single replacement rule
// [x, ys, n, dx, dx] => linear map
// returns map of x => ys
function read_mapped_map(next) {

@@ -160,6 +158,8 @@ let ret = [];

function read_transposed(n, w, next, lookup) {
// read w columns of length n
// return as n rows of length w
function read_transposed(n, w, next) {
let m = Array(n).fill().map(() => []);
for (let i = 0; i < w; i++) {
read_deltas(n, next).forEach((x, j) => m[j].push(lookup ? lookup(x) : x));
read_deltas(n, next).forEach((x, j) => m[j].push(x));
}

@@ -169,2 +169,4 @@ return m;

// returns [[x, ys], [x+dx, ys+dy], [x+2*dx, ys+2*dy], ...]
// where dx/dy = steps, n = run size, w = length of y
function read_linear_table(w, next) {

@@ -184,2 +186,4 @@ let dx = 1 + next();

// return [[x, ys...], ...]
// where w = length of y
function read_replacement_table(w, next) {

@@ -197,20 +201,29 @@ let n = 1 + next();

while (true) {
let keys = read_member_array(next);
let keys = read_member_array(next, sorted);
if (keys.length == 0) break;
branches.push({set: new Set(keys.map(i => sorted[i])), node: read()});
branches.push({set: new Set(keys), node: read()});
}
branches.sort((a, b) => b.set.size - a.set.size);
let flag = next();
return {
branches,
valid: (flag & 1) != 0,
fe0f: (flag & 2) != 0,
save: (flag & 4) != 0,
check: (flag & 8) != 0,
};
branches.sort((a, b) => b.set.size - a.set.size); // sort by likelihood
let temp = next();
let valid = temp % 3;
temp = (temp / 3)|0;
let fe0f = !!(temp & 1);
temp >>= 1;
let save = temp == 1;
let check = temp == 2;
return {branches, valid, fe0f, save, check};
}
}
var r = read_compressed_payload(Uint8Array.from(atob('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'), c => c.charCodeAt(0)));
// created 2022-08-11T04:31:10.660Z
var r = read_compressed_payload(Uint8Array.from(atob('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'), c => c.charCodeAt(0)));
function explode_cp(s) {
return [...s].map(c => c.codePointAt(0));
}
function filter_fe0f(cps) {
return cps.filter(cp => cp != 0xFE0F);
}
const VALID = new Set(read_member_array(r));

@@ -226,17 +239,16 @@ const IGNORED = new Set(read_member_array(r));

function explode_cp(s) {
return [...s].map(x => x.codePointAt(0));
function ens_beautify(name) {
return normalize(name, x => x);
}
function filter_fe0f(cps) {
return cps.filter(cp => cp != 0xFE0F);
function ens_normalize(name) {
return normalize(name, filter_fe0f);
}
function ens_normalize(name, beautify = false) {
let input = [...name].map(x => x.codePointAt(0)).reverse(); // flip for pop
function normalize(name, emoji_filter) {
let input = explode_cp(name).reverse(); // flip for pop
let output = [];
while (input.length) {
let emoji = consume_emoji_reversed(input, EMOJI_ROOT);
let emoji = consume_emoji_reversed(input);
if (emoji) {
output.push(...(beautify ? emoji : filter_fe0f(emoji)));
output.push(...emoji_filter(emoji));
continue;

@@ -262,4 +274,6 @@ }

function consume_emoji_reversed(cps, node, eaten) {
function consume_emoji_reversed(cps, eaten) {
let node = EMOJI_ROOT;
let emoji;
let saved;
let stack = [];

@@ -272,9 +286,15 @@ let pos = cps.length;

if (!node) break;
if (node.save) { // remember
saved = cp;
} else if (node.check) { // check exclusion
if (cp === saved) break;
}
stack.push(cp);
if (node.fe0f) {
stack.push(0xFE0F);
if (pos > 0 && cps[pos - 1] == 0xFE0F) pos--;
if (pos > 0 && cps[pos - 1] == 0xFE0F) pos--; // consume optional FE0F
}
if (node.valid) { // this is a valid emoji (so far)
emoji = stack.slice(); // copy stack
if (node.valid == 2) emoji.splice(1, 1); // delete FE0F at position 1 (RGI ZWJ don't follow spec!)
if (eaten) eaten.push(...cps.slice(pos).reverse()); // copy input (if needed)

@@ -301,3 +321,3 @@ cps.length = pos; // truncate

while (input.length) {
let emoji = consume_emoji_reversed(input, EMOJI_ROOT, eaten);
let emoji = consume_emoji_reversed(input, eaten);
if (emoji) {

@@ -379,2 +399,2 @@ tokens.push({type: TY_EMOJI, emoji, input: eaten.slice(), cps: filter_fe0f(emoji)});

export { ens_normalize, ens_tokenize };
export { ens_beautify, ens_normalize, ens_tokenize };

@@ -1,1 +0,1 @@

function A(A){return 1&A?~A>>1:A>>1}function g(A,g){let e=Array(A);for(let B=0,C=-1;B<A;B++)e[B]=C+=1+g();return e}function e(g,e){let B=Array(g);for(let C=0,t=0;C<g;C++)B[C]=t+=A(e());return B}function B(A,e){let B=g(A(),A),C=A(),t=g(C,A),o=function(A,g){let e=Array(A);for(let B=0;B<A;B++)e[B]=1+g();return e}(C,A);for(let A=0;A<C;A++)for(let g=0;g<o[A];g++)B.push(t[A]+g);return e?B.map((A=>e[A])):B}function C(A,g,B,C){let t=Array(A).fill().map((()=>[]));for(let o=0;o<g;o++)e(A,B).forEach(((A,g)=>t[g].push(C?C(A):A)));return t}function t(A,g){let e=1+g(),B=g(),t=function(A){let g=[];for(;;){let e=A();if(0==e)break;g.push(e)}return g}(g);return C(t.length,1+A,g).flatMap(((A,g)=>{let[C,...o]=A;return Array(t[g]).fill().map(((A,g)=>{let t=g*B;return[C+g*e,o.map((A=>A+t))]}))}))}function o(A,g){return C(1+g(),1+A,g).map((A=>[A[0],A.slice(1)]))}var w=function(A){let g=0;return()=>A[g++]}(function(A){let g=0;function e(){return A[g++]<<8|A[g++]}let B=e(),C=1,t=[0,1];for(let A=1;A<B;A++)t.push(C+=e());let o=e(),w=g;g+=o;let n=0,s=0;function l(){return 0==n&&(s=s<<8|A[g++],n=8),s>>--n&1}const r=2**31,E=r>>>1,Q=r-1;let I=0;for(let A=0;A<31;A++)I=I<<1|l();let i=[],D=0,c=r;for(;;){let A=Math.floor(((I-D+1)*C-1)/c),g=0,e=B;for(;e-g>1;){let B=g+e>>>1;A<t[B]?e=B:g=B}if(0==g)break;i.push(g);let o=D+Math.floor(c*t[g]/C),w=D+Math.floor(c*t[g+1]/C)-1;for(;0==((o^w)&E);)I=I<<1&Q|l(),o=o<<1&Q,w=w<<1&Q|1;for(;o&~w&536870912;)I=I&E|I<<1&Q>>>1|l(),o=o<<1^E,w=(w^E)<<1|E|1;D=o,c=1+w-o}let M=B-4;return i.map((g=>{switch(g-M){case 3:return M+65792+(A[w++]<<16|A[w++]<<8|A[w++]);case 2:return M+256+(A[w++]<<8|A[w++]);case 1:return M+A[w++];default:return g-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));const n=new Set(B(w)),s=new Set(B(w)),l=function(A){let g=[];for(;;){let e=A();if(0==e)break;g.push(t(e,A))}for(;;){let e=A()-1;if(e<0)break;g.push(o(e,A))}return Object.fromEntries(g.flat())}(w),r=function(A){let g=B(A).sort(((A,g)=>A-g));return function e(){let C=[];for(;;){let t=B(A);if(0==t.length)break;C.push({set:new Set(t.map((A=>g[A]))),node:e()})}C.sort(((A,g)=>g.set.size-A.set.size));let t=A();return{branches:C,valid:0!=(1&t),fe0f:0!=(2&t),save:0!=(4&t),check:0!=(8&t)}}()}(w),E=new Set(B(w,[...n].sort(((A,g)=>A-g))));function Q(A){return A.normalize("NFC")}function I(A){return[...A].map((A=>A.codePointAt(0)))}function i(A){return A.filter((A=>65039!=A))}function D(A,g=!1){let e=[...A].map((A=>A.codePointAt(0))).reverse(),B=[];for(;e.length;){let A=c(e,r);if(A){B.push(...g?A:i(A));continue}let C=e.pop();if(n.has(C)){B.push(C);continue}if(s.has(C))continue;let t=l[C];if(!t)throw new Error(`Disallowed codepoint: 0x${C.toString(16).toUpperCase()}`);B.push(...t)}return Q(String.fromCodePoint(...B))}function c(A,g,e){let B,C=[],t=A.length;for(e&&(e.length=0);t;){let o=A[--t];if(g=g.branches.find((A=>A.set.has(o)))?.node,!g)break;C.push(o),g.fe0f&&(C.push(65039),t>0&&65039==A[t-1]&&t--),g.valid&&(B=C.slice(),e&&e.push(...A.slice(t).reverse()),A.length=t)}return B}function M(A){let g=I(A).reverse(),e=[],B=[];for(;g.length;){let A=c(g,r,e);if(A)B.push({type:"emoji",emoji:A,input:e.slice(),cps:i(A)});else{let A=g.pop();if(46===A)B.push({type:"stop"});else if(n.has(A))B.push({type:"valid",cps:[A]});else if(s.has(A))B.push({type:"ignored",cp:A});else{let g=l[A];g?B.push({type:"mapped",cp:A,cps:g}):B.push({type:"disallowed",cp:A})}}}for(let A=0,g=-1;A<B.length;A++){let e=B[A];if(h(e.type))if(p(e.cps)){let e=A+1;for(let A=e;A<B.length;A++){let{type:g,cps:C}=B[A];if(h(g)){if(!p(C))break;e=A+1}else if("ignored"!==g||"disallowed"!==g)break}g<0&&(g=A);let C=B.slice(g,e),t=C.flatMap((A=>h(A.type)?A.cps:[])),o=String.fromCodePoint(...t),w=Q(o);o===w?A=e-1:(B.splice(g,e-g,{type:"nfc",input:t,cps:I(w),tokens:F(C)}),A=g),g=-1}else g=A;else"emoji"===e.type&&(g=-1)}return F(B)}function h(A){return"valid"===A||"mapped"===A}function p(A){return A.some((A=>E.has(A)))}function F(A){for(let g=0;g<A.length;g++)if("valid"===A[g].type){let e=g+1;for(;e<A.length&&"valid"===A[e].type;)e++;A.splice(g,e-g,{type:"valid",cps:A.slice(g,e).flatMap((A=>A.cps))})}return A}export{D as ens_normalize,M as ens_tokenize};
function A(A){return 1&A?~A>>1:A>>1}function e(A,e){let g=Array(A);for(let B=0,o=-1;B<A;B++)g[B]=o+=1+e();return g}function g(e,g){let B=Array(e);for(let o=0,C=0;o<e;o++)B[o]=C+=A(g());return B}function B(A,g){let B=e(A(),A),o=A(),C=e(o,A),t=function(A,e){let g=Array(A);for(let B=0;B<A;B++)g[B]=1+e();return g}(o,A);for(let A=0;A<o;A++)for(let e=0;e<t[A];e++)B.push(C[A]+e);return g?B.map((A=>g[A])):B}function o(A,e,B){let o=Array(A).fill().map((()=>[]));for(let C=0;C<e;C++)g(A,B).forEach(((A,e)=>o[e].push(A)));return o}function C(A,e){let g=1+e(),B=e(),C=function(A){let e=[];for(;;){let g=A();if(0==g)break;e.push(g)}return e}(e);return o(C.length,1+A,e).flatMap(((A,e)=>{let[o,...t]=A;return Array(C[e]).fill().map(((A,e)=>{let C=e*B;return[o+e*g,t.map((A=>A+C))]}))}))}function t(A,e){return o(1+e(),1+A,e).map((A=>[A[0],A.slice(1)]))}var n=function(A){let e=0;return()=>A[e++]}(function(A){let e=0;function g(){return A[e++]<<8|A[e++]}let B=g(),o=1,C=[0,1];for(let A=1;A<B;A++)C.push(o+=g());let t=g(),n=e;e+=t;let r=0,Q=0;function w(){return 0==r&&(Q=Q<<8|A[e++],r=8),Q>>--r&1}const l=2**31,i=l>>>1,I=l-1;let c=0;for(let A=0;A<31;A++)c=c<<1|w();let u=[],D=0,s=l;for(;;){let A=Math.floor(((c-D+1)*o-1)/s),e=0,g=B;for(;g-e>1;){let B=e+g>>>1;A<C[B]?g=B:e=B}if(0==e)break;u.push(e);let t=D+Math.floor(s*C[e]/o),n=D+Math.floor(s*C[e+1]/o)-1;for(;0==((t^n)&i);)c=c<<1&I|w(),t=t<<1&I,n=n<<1&I|1;for(;t&~n&536870912;)c=c&i|c<<1&I>>>1|w(),t=t<<1^i,n=(n^i)<<1|i|1;D=t,s=1+n-t}let f=B-4;return u.map((e=>{switch(e-f){case 3:return f+65792+(A[n++]<<16|A[n++]<<8|A[n++]);case 2:return f+256+(A[n++]<<8|A[n++]);case 1:return f+A[n++];default:return e-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));function r(A){return[...A].map((A=>A.codePointAt(0)))}function Q(A){return A.filter((A=>65039!=A))}const w=new Set(B(n)),l=new Set(B(n)),i=function(A){let e=[];for(;;){let g=A();if(0==g)break;e.push(C(g,A))}for(;;){let g=A()-1;if(g<0)break;e.push(t(g,A))}return Object.fromEntries(e.flat())}(n),I=function(A){let e=B(A).sort(((A,e)=>A-e));return function g(){let o=[];for(;;){let C=B(A,e);if(0==C.length)break;o.push({set:new Set(C),node:g()})}o.sort(((A,e)=>e.set.size-A.set.size));let C=A(),t=C%3;C=C/3|0;let n=!!(1&C);return C>>=1,{branches:o,valid:t,fe0f:n,save:1==C,check:2==C}}()}(n),c=new Set(B(n,[...w].sort(((A,e)=>A-e))));function u(A){return A.normalize("NFC")}function D(A){return f(A,(A=>A))}function s(A){return f(A,Q)}function f(A,e){let g=r(A).reverse(),B=[];for(;g.length;){let A=h(g);if(A){B.push(...e(A));continue}let o=g.pop();if(w.has(o)){B.push(o);continue}if(l.has(o))continue;let C=i[o];if(!C)throw new Error(`Disallowed codepoint: 0x${o.toString(16).toUpperCase()}`);B.push(...C)}return u(String.fromCodePoint(...B))}function h(A,e){let g,B,o=I,C=[],t=A.length;for(e&&(e.length=0);t;){let n=A[--t];if(o=o.branches.find((A=>A.set.has(n)))?.node,!o)break;if(o.save)B=n;else if(o.check&&n===B)break;C.push(n),o.fe0f&&(C.push(65039),t>0&&65039==A[t-1]&&t--),o.valid&&(g=C.slice(),2==o.valid&&g.splice(1,1),e&&e.push(...A.slice(t).reverse()),A.length=t)}return g}function E(A){let e=r(A).reverse(),g=[],B=[];for(;e.length;){let A=h(e,g);if(A)B.push({type:"emoji",emoji:A,input:g.slice(),cps:Q(A)});else{let A=e.pop();if(46===A)B.push({type:"stop"});else if(w.has(A))B.push({type:"valid",cps:[A]});else if(l.has(A))B.push({type:"ignored",cp:A});else{let e=i[A];e?B.push({type:"mapped",cp:A,cps:e}):B.push({type:"disallowed",cp:A})}}}for(let A=0,e=-1;A<B.length;A++){let g=B[A];if(p(g.type))if(a(g.cps)){let g=A+1;for(let A=g;A<B.length;A++){let{type:e,cps:o}=B[A];if(p(e)){if(!a(o))break;g=A+1}else if("ignored"!==e||"disallowed"!==e)break}e<0&&(e=A);let o=B.slice(e,g),C=o.flatMap((A=>p(A.type)?A.cps:[])),t=String.fromCodePoint(...C),n=u(t);t===n?A=g-1:(B.splice(e,g-e,{type:"nfc",input:C,cps:r(n),tokens:T(o)}),A=e),e=-1}else e=A;else"emoji"===g.type&&(e=-1)}return T(B)}function p(A){return"valid"===A||"mapped"===A}function a(A){return A.some((A=>c.has(A)))}function T(A){for(let e=0;e<A.length;e++)if("valid"===A[e].type){let g=e+1;for(;g<A.length&&"valid"===A[g].type;)g++;A.splice(e,g-e,{type:"valid",cps:A.slice(e,g).flatMap((A=>A.cps))})}return A}export{D as ens_beautify,s as ens_normalize,E as ens_tokenize};

@@ -1,1 +0,1 @@

function A(A){return 1&A?~A>>1:A>>1}function g(A,g){let B=Array(A);for(let C=0,w=-1;C<A;C++)B[C]=w+=1+g();return B}function B(g,B){let C=Array(g);for(let w=0,o=0;w<g;w++)C[w]=o+=A(B());return C}function C(A,B){let C=g(A(),A),w=A(),o=g(w,A),e=function(A,g){let B=Array(A);for(let C=0;C<A;C++)B[C]=1+g();return B}(w,A);for(let A=0;A<w;A++)for(let g=0;g<e[A];g++)C.push(o[A]+g);return B?C.map((A=>B[A])):C}function w(A,g,C,w){let o=Array(A).fill().map((()=>[]));for(let e=0;e<g;e++)B(A,C).forEach(((A,g)=>o[g].push(w?w(A):A)));return o}function o(A,g){let B=1+g(),C=g(),o=function(A){let g=[];for(;;){let B=A();if(0==B)break;g.push(B)}return g}(g);return w(o.length,1+A,g).flatMap(((A,g)=>{let[w,...e]=A;return Array(o[g]).fill().map(((A,g)=>{let o=g*C;return[w+g*B,e.map((A=>A+o))]}))}))}function e(A,g){return w(1+g(),1+A,g).map((A=>[A[0],A.slice(1)]))}var t=function(A){let g=0;return()=>A[g++]}(function(A){let g=0;function B(){return A[g++]<<8|A[g++]}let C=B(),w=1,o=[0,1];for(let A=1;A<C;A++)o.push(w+=B());let e=B(),t=g;g+=e;let E=0,n=0;function Q(){return 0==E&&(n=n<<8|A[g++],E=8),n>>--E&1}const I=2**31,D=I>>>1,s=I-1;let M=0;for(let A=0;A<31;A++)M=M<<1|Q();let l=[],r=0,F=I;for(;;){let A=Math.floor(((M-r+1)*w-1)/F),g=0,B=C;for(;B-g>1;){let C=g+B>>>1;A<o[C]?B=C:g=C}if(0==g)break;l.push(g);let e=r+Math.floor(F*o[g]/w),t=r+Math.floor(F*o[g+1]/w)-1;for(;0==((e^t)&D);)M=M<<1&s|Q(),e=e<<1&s,t=t<<1&s|1;for(;e&~t&536870912;)M=M&D|M<<1&s>>>1|Q(),e=e<<1^D,t=(t^D)<<1|D|1;r=e,F=1+t-e}let K=C-4;return l.map((g=>{switch(g-K){case 3:return K+65792+(A[t++]<<16|A[t++]<<8|A[t++]);case 2:return K+256+(A[t++]<<8|A[t++]);case 1:return K+A[t++];default:return g-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));const E=new Set(C(t)),n=new Set(C(t)),Q=function(A){let g=[];for(;;){let B=A();if(0==B)break;g.push(o(B,A))}for(;;){let B=A()-1;if(B<0)break;g.push(e(B,A))}return Object.fromEntries(g.flat())}(t),I=function(A){let g=C(A).sort(((A,g)=>A-g));return function B(){let w=[];for(;;){let o=C(A);if(0==o.length)break;w.push({set:new Set(o.map((A=>g[A]))),node:B()})}w.sort(((A,g)=>g.set.size-A.set.size));let o=A();return{branches:w,valid:0!=(1&o),fe0f:0!=(2&o),save:0!=(4&o),check:0!=(8&o)}}()}(t);function D(A){return A.filter((A=>65039!=A))}function s(A,g=!1){let B=[...A].map((A=>A.codePointAt(0))).reverse(),C=[];for(;B.length;){let A=M(B,I);if(A){C.push(...g?A:D(A));continue}let w=B.pop();if(E.has(w)){C.push(w);continue}if(n.has(w))continue;let o=Q[w];if(!o)throw new Error(`Disallowed codepoint: 0x${w.toString(16).toUpperCase()}`);C.push(...o)}return String.fromCodePoint(...C).normalize("NFC")}function M(A,g,B){let C,w=[],o=A.length;for(B&&(B.length=0);o;){let e=A[--o];if(g=g.branches.find((A=>A.set.has(e)))?.node,!g)break;w.push(e),g.fe0f&&(w.push(65039),o>0&&65039==A[o-1]&&o--),g.valid&&(C=w.slice(),B&&B.push(...A.slice(o).reverse()),A.length=o)}return C}new Set(C(t,[...E].sort(((A,g)=>A-g))));export{s as ens_normalize};
function A(A){return 1&A?~A>>1:A>>1}function g(A,g){let B=Array(A);for(let C=0,o=-1;C<A;C++)B[C]=o+=1+g();return B}function B(g,B){let C=Array(g);for(let o=0,e=0;o<g;o++)C[o]=e+=A(B());return C}function C(A,B){let C=g(A(),A),o=A(),e=g(o,A),Q=function(A,g){let B=Array(A);for(let C=0;C<A;C++)B[C]=1+g();return B}(o,A);for(let A=0;A<o;A++)for(let g=0;g<Q[A];g++)C.push(e[A]+g);return B?C.map((A=>B[A])):C}function o(A,g,C){let o=Array(A).fill().map((()=>[]));for(let e=0;e<g;e++)B(A,C).forEach(((A,g)=>o[g].push(A)));return o}function e(A,g){let B=1+g(),C=g(),e=function(A){let g=[];for(;;){let B=A();if(0==B)break;g.push(B)}return g}(g);return o(e.length,1+A,g).flatMap(((A,g)=>{let[o,...Q]=A;return Array(e[g]).fill().map(((A,g)=>{let e=g*C;return[o+g*B,Q.map((A=>A+e))]}))}))}function Q(A,g){return o(1+g(),1+A,g).map((A=>[A[0],A.slice(1)]))}var r=function(A){let g=0;return()=>A[g++]}(function(A){let g=0;function B(){return A[g++]<<8|A[g++]}let C=B(),o=1,e=[0,1];for(let A=1;A<C;A++)e.push(o+=B());let Q=B(),r=g;g+=Q;let n=0,w=0;function t(){return 0==n&&(w=w<<8|A[g++],n=8),w>>--n&1}const I=2**31,D=I>>>1,E=I-1;let l=0;for(let A=0;A<31;A++)l=l<<1|t();let h=[],u=0,c=I;for(;;){let A=Math.floor(((l-u+1)*o-1)/c),g=0,B=C;for(;B-g>1;){let C=g+B>>>1;A<e[C]?B=C:g=C}if(0==g)break;h.push(g);let Q=u+Math.floor(c*e[g]/o),r=u+Math.floor(c*e[g+1]/o)-1;for(;0==((Q^r)&D);)l=l<<1&E|t(),Q=Q<<1&E,r=r<<1&E|1;for(;Q&~r&536870912;)l=l&D|l<<1&E>>>1|t(),Q=Q<<1^D,r=(r^D)<<1|D|1;u=Q,c=1+r-Q}let T=C-4;return h.map((g=>{switch(g-T){case 3:return T+65792+(A[r++]<<16|A[r++]<<8|A[r++]);case 2:return T+256+(A[r++]<<8|A[r++]);case 1:return T+A[r++];default:return g-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));function n(A){return A.filter((A=>65039!=A))}const w=new Set(C(r)),t=new Set(C(r)),I=function(A){let g=[];for(;;){let B=A();if(0==B)break;g.push(e(B,A))}for(;;){let B=A()-1;if(B<0)break;g.push(Q(B,A))}return Object.fromEntries(g.flat())}(r),D=function(A){let g=C(A).sort(((A,g)=>A-g));return function B(){let o=[];for(;;){let e=C(A,g);if(0==e.length)break;o.push({set:new Set(e),node:B()})}o.sort(((A,g)=>g.set.size-A.set.size));let e=A(),Q=e%3;e=e/3|0;let r=!!(1&e);return e>>=1,{branches:o,valid:Q,fe0f:r,save:1==e,check:2==e}}()}(r);function E(A){return function(A,g){let B=(o=A,[...o].map((A=>A.codePointAt(0)))).reverse(),C=[];for(var o;B.length;){let A=l(B);if(A){C.push(...g(A));continue}let o=B.pop();if(w.has(o)){C.push(o);continue}if(t.has(o))continue;let e=I[o];if(!e)throw new Error(`Disallowed codepoint: 0x${o.toString(16).toUpperCase()}`);C.push(...e)}return function(A){return A.normalize("NFC")}(String.fromCodePoint(...C))}(A,n)}function l(A,g){let B,C,o=D,e=[],Q=A.length;for(g&&(g.length=0);Q;){let r=A[--Q];if(o=o.branches.find((A=>A.set.has(r)))?.node,!o)break;if(o.save)C=r;else if(o.check&&r===C)break;e.push(r),o.fe0f&&(e.push(65039),Q>0&&65039==A[Q-1]&&Q--),o.valid&&(B=e.slice(),2==o.valid&&B.splice(1,1),g&&g.push(...A.slice(Q).reverse()),A.length=Q)}return B}new Set(C(r,[...w].sort(((A,g)=>A-g))));export{E as ens_normalize};

@@ -1,1 +0,1 @@

function t(t){return t.toString(16).toUpperCase()}function n(n){return`{${t(n)}}`}function e(t,e=n){return t.replace(/(?:([\x00-\x20\x7F\xA0\s\u200C\u200D\u{E0020}-\u{E007F}])|([^\x21-\x25\x27-\x3B\x3D\x3F-\x7E]))/gu,((t,n,d)=>n?e(n.codePointAt(0)):`&#${d.codePointAt(0)}`))}function d(n){return e(String.fromCodePoint(...n),(n=>8204==n?'<span class="mod zwj">ZWNJ</span>':8205==n?'<span class="mod zwj">ZWJ</span>':`<code>${t(n)}</code>`))}function o(n){return`Hex: 0x${n.map(t).join(" ")}\nDec: ${n.join(" ")}`}function a(){let t=document.createElement("span");return t.classList.add("arrow"),t.innerHTML="🡆",t}function s(n,e){let r=document.createElement("div");return r.classList.add("tokens"),e&&(n=n.flatMap((t=>"nfc"===t.type?t.tokens:t))),r.append(...n.flatMap((n=>{let r;if("emoji"===n.type){let d=e?n.input:n.cps;r=document.createElement("a"),r.href=`https://emojipedia.org/${String.fromCodePoint(...n.emoji)}`,r.classList.add("glyph"),r.append(...d.map(((n,e)=>{let d=document.createElement("span");if(8205==n)d.classList.add("mod","zwj"),d.innerHTML="ZWJ";else if(65039==n)d.classList.add("mod","dropped","style"),d.innerHTML="FE0F";else if(8419==n)d.classList.add("mod","keycap"),d.innerHTML="Keycap";else if(n>=917536&&n<=917631){n-=917504;let e=String.fromCodePoint(n);127===n?(d.classList.add("mod"),d.innerHTML="TagEnd"):(/^[\x21-\x7E]+$/gu.test(e)?d.innerHTML=e:(d=document.createElement("code"),d.innerHTML=t(n)),d.classList.add("mod","tag"))}else d.classList.add("emoji"),d.innerHTML=String.fromCodePoint(n);return d})))}else if("nfc"===n.type){r=document.createElement("div"),r.classList.add("nfc");let t=s(n.tokens,!1);t.classList.add("before");let e=document.createElement("div");e.classList.add("valid"),e.innerHTML=d(n.cps),e.title=o(n.cps),r.append(t,a(),e)}else if(r=document.createElement("div"),"valid"===n.type)r.classList.add("valid"),r.innerHTML=d(n.cps),r.title=o(n.cps);else if("mapped"===n.type){r.classList.add("mapped");let t=document.createElement("span");t.classList.add("before"),t.innerHTML=d([n.cp]),t.title=o([n.cp]),r.append(t),e||r.append(a(),...n.cps.map((t=>{let n=document.createElement("span");return n.innerHTML=d([t]),n.title=o([t]),n})))}else if("ignored"===n.type)r=document.createElement("code"),r.innerHTML=t(n.cp),r.title=o([n.cp]),r.classList.add("ignored");else if("disallowed"===n.type)r.classList.add("disallowed"),r.innerHTML=d([n.cp]),r.title=o([n.cp]);else{if("stop"!==n.type)throw new TypeError(`unknown token type: ${n.type}`);r.classList.add("stop"),r.innerHTML="."}return r}))),r}function r(){let t=document.createElement("style");t.innerText="\n\t.tokens {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 2px;\n\t}\n\t.tokens > * {\n\t\tpadding: 2px 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t}\n\t.tokens a {\n\t\ttext-decoration: none;\n\t}\n\t.tokens a:hover {\n\t\toutline: 2px solid #00f;\n\t}\n\t.tokens .valid {\n\t\tborder-radius: 5px;\n\t\tbackground: #cfc;\n\t\tborder: 2px solid #0a0;\n\t\tline-break: anywhere;\n\t}\n\t.tokens .ignored {\n\t\tcolor: #fff;\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .disallowed {\n\t\tbackground: #f66;\t\n\t}\n\t.tokens .mapped {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #66f;\n\t\tbackground: #ccf;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mapped span:first-child {\n\t\tmargin-bottom: -4px;\n\t\tborder-bottom: 4px solid #000;\n\t}\n\t.tokens .stop {\n\t\tfont-weight: bold;\n\t}\n\t.tokens .glyph {\n\t\tborder: 2px solid #0aa;\n\t\tborder-radius: 0.5rem;\n\t\tbackground: #cff;\n\t}\n\t.tokens .mod {\n\t\tfont-size: 70%;\n\t\tpadding: 2px;\n\t\tbackground: #333;\n\t\tcolor: #fff;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mod.zwj {\n\t\tbackground: #0aa;\n\t}\n\t.tokens .mod.tag {\n\t\tbackground: #33f;\n\t}\n\t.tokens .mod.dropped {\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .arrow {\n\t\tcolor: rgba(0, 0, 0, 0.35);\n\t}\n\t.tokens .nfc {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #fa0;\n\t\tbackground: #fd8;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens code {\n\t\tfont-size: 90%;\n\t\tpadding: 2px;\n\t\tborder-radius: 5px;\n\t\tcolor: #fff;\n\t\tbackground: rgba(0, 0, 0, .3);\n\t\talign-self: center;\n\t}",document.body.append(t)}export{s as dom_from_tokens,r as use_default_style};
function t(t){return t.toString(16).toUpperCase()}function n(n){return`{${t(n)}}`}function e(t,e=n){return t.replace(/(?:([\x00-\x20\x7F\xA0\s\u200C\u200D\u{E0020}-\u{E007F}])|([^\x21-\x25\x27-\x3B\x3D\x3F-\x7E]))/gu,((t,n,d)=>n?e(n.codePointAt(0)):`&#${d.codePointAt(0)}`))}function d(n){return e(String.fromCodePoint(...n),(n=>8204==n?'<span class="mod zwj">ZWNJ</span>':8205==n?'<span class="mod zwj">ZWJ</span>':`<code>${t(n)}</code>`))}function o(n){return`Hex: 0x${n.map(t).join(" ")}\nDec: ${n.join(" ")}`}function a(){let t=document.createElement("span");return t.classList.add("arrow"),t.innerHTML="➔",t}function s(n,e){let r=document.createElement("div");return r.classList.add("tokens"),e&&(n=n.flatMap((t=>"nfc"===t.type?t.tokens:t))),r.append(...n.flatMap((n=>{let r;if("emoji"===n.type){let d=e?n.input:n.cps;r=document.createElement("a"),r.href=`https://emojipedia.org/${String.fromCodePoint(...n.emoji)}`,r.classList.add("glyph"),r.append(...d.map(((n,e)=>{let d=document.createElement("span");if(8205==n)d.classList.add("mod","zwj"),d.innerHTML="ZWJ";else if(65039==n)d.classList.add("mod","dropped","style"),d.innerHTML="FE0F";else if(8419==n)d.classList.add("mod","keycap"),d.innerHTML="Keycap";else if(n>=917536&&n<=917631){n-=917504;let e=String.fromCodePoint(n);127===n?(d.classList.add("mod"),d.innerHTML="TagEnd"):(/^[\x21-\x7E]+$/gu.test(e)?d.innerHTML=e:(d=document.createElement("code"),d.innerHTML=t(n)),d.classList.add("mod","tag"))}else d.classList.add("emoji"),d.innerHTML=String.fromCodePoint(n);return d})))}else if("nfc"===n.type){r=document.createElement("div"),r.classList.add("nfc");let t=s(n.tokens,!1);t.classList.add("before");let e=document.createElement("div");e.classList.add("valid"),e.innerHTML=d(n.cps),e.title=o(n.cps),r.append(t,a(),e)}else if(r=document.createElement("div"),"valid"===n.type)r.classList.add("valid"),r.innerHTML=d(n.cps),r.title=o(n.cps);else if("mapped"===n.type){r.classList.add("mapped");let t=document.createElement("span");t.classList.add("before"),t.innerHTML=d([n.cp]),t.title=o([n.cp]),r.append(t),e||r.append(a(),...n.cps.map((t=>{let n=document.createElement("span");return n.innerHTML=d([t]),n.title=o([t]),n})))}else if("ignored"===n.type)r=document.createElement("code"),r.innerHTML=t(n.cp),r.title=o([n.cp]),r.classList.add("ignored");else if("disallowed"===n.type)r.classList.add("disallowed"),r.innerHTML=d([n.cp]),r.title=o([n.cp]);else{if("stop"!==n.type)throw new TypeError(`unknown token type: ${n.type}`);r.classList.add("stop"),r.innerHTML="."}return r}))),r}function r(){let t=document.createElement("style");t.innerText="\n\t.tokens {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 2px;\n\t}\n\t.tokens > * {\n\t\tpadding: 2px 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t}\n\t.tokens a {\n\t\ttext-decoration: none;\n\t}\n\t.tokens a:hover {\n\t\toutline: 2px solid #00f;\n\t}\n\t.tokens .valid {\n\t\tborder-radius: 5px;\n\t\tbackground: #cfc;\n\t\tborder: 2px solid #0a0;\n\t\tline-break: anywhere;\n\t}\n\t.tokens .ignored {\n\t\tcolor: #fff;\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .disallowed {\n\t\tbackground: #f66;\t\n\t}\n\t.tokens .mapped {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #66f;\n\t\tbackground: #ccf;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mapped span:first-child {\n\t\tmargin-bottom: -4px;\n\t\tborder-bottom: 4px solid #000;\n\t}\n\t.tokens .stop {\n\t\tfont-weight: bold;\n\t}\n\t.tokens .glyph {\n\t\tborder: 2px solid #0aa;\n\t\tborder-radius: 0.5rem;\n\t\tbackground: #cff;\n\t}\n\t.tokens .mod {\n\t\tfont-size: 70%;\n\t\tpadding: 2px;\n\t\tbackground: #333;\n\t\tcolor: #fff;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mod.zwj {\n\t\tbackground: #0aa;\n\t}\n\t.tokens .mod.tag {\n\t\tbackground: #33f;\n\t}\n\t.tokens .mod.dropped {\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .arrow {\n\t\tcolor: rgba(0, 0, 0, 0.35);\n\t}\n\t.tokens .nfc {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #fa0;\n\t\tbackground: #fd8;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens code {\n\t\tfont-size: 90%;\n\t\tpadding: 2px;\n\t\tborder-radius: 5px;\n\t\tcolor: #fff;\n\t\tbackground: rgba(0, 0, 0, .3);\n\t\talign-self: center;\n\t}",document.body.append(t)}export{s as dom_from_tokens,r as use_default_style};

@@ -1,6 +0,1 @@

export function ens_normalize(name: string, pretty?: boolean): string;
interface StopToken {
type: 'stop';
}
interface DisallowedToken {

@@ -14,24 +9,31 @@ type: 'disallowed';

}
interface AllowedToken {
type: string;
interface ValidToken {
type: 'valid';
cps: number[];
}
interface ValidToken extends AllowedToken {
type: 'valid';
}
interface MappedToken extends AllowedToken {
type: 'mapped';
interface MappedToken {
type: 'mapped';
cp: number;
cps: number[];
}
interface EmojiToken extends AllowedToken {
type TextToken = DisallowedToken | IgnoredToken | ValidToken | MappedToken;
interface EmojiToken {
type: 'emoji';
input: number[];
emoji: number[];
cps: number[];
}
interface NFCToken extends AllowedToken {
interface NFCToken {
type: 'nfc';
input: number[];
cps: number[];
tokens: TextToken[];
}
type TextToken = DisallowedToken | IgnoredToken | ValidToken | MappedToken;
interface StopToken {
type: 'stop';
}
type Token = TextToken | EmojiToken | NFCToken | StopToken;
export function ens_normalize(name: string): string;
export function ens_beautify(name: string): string;
export function ens_tokenize(name: string): Token[];
{
"name": "@adraffy/ens-normalize",
"version": "1.5.3",
"version": "1.5.4",
"description": "Compact ES6 Ethereum Name Service (ENS) Name Normalizer",

@@ -32,3 +32,2 @@ "keywords": [

"build": "rollup -c",
"build-dev": "rollup -c rollup-dev.config.js",
"test": "node test/validate.js"

@@ -35,0 +34,0 @@ },

# ens-normalize.js
0-dependancy Compact ES6 Ethereum Name Service (ENS) Name Normalizer.
* Passes **100%** [ENSIP Norm Validation Tests](https://adraffy.github.io/ensip-norm/) [(Latest)](https://adraffy.github.io/ens-norm-tests/test-validation/output/ens_normalize_1.5.0.html)
* File Size: `20KB`
* Passes **100%** [ENSIP Norm](https://github.com/adraffy/ensip-norm/) Validation Tests [(Latest)](https://adraffy.github.io/ens-norm-tests/test-validation/output/ens_normalize_1.5.0.html)
* File Size: [`18KB`](./dist/only-norm.min.js)
* [Demo](https://adraffy.github.io/ens-normalize.js/test/resolver.html)

@@ -13,11 +13,25 @@

// Primary API: string -> string
let normalized = ens_normalize('🚴‍♂️.eth'); // throws on invalid names
// ready for namehash
// string -> string
// throws on invalid names
// output ready for namehash
let normalized = ens_normalize('RaFFY🚴‍♂️.eTh');
// "raffy🚴‍♂.eth"
// note: does not enforce .eth TLD 3-character minimum
```
Format names with fully-qualified emoji:
```JavaScript
// string -> string
// works like ens_normalize
// output ready for display
let pretty = ens_beautify('1⃣2⃣.eth');
// "1️⃣2️⃣.eth"
// note: normalization is unchanged:
// ens_normalize(ens_beautify(x)) == ens_normalize(x)
```
Instead of exposing an IDNA-like API (`is_valid()`, `get_mapped()`, etc.), this library exposes a single function which converts names to tokens:
```JavaScript
// Secondary API: string -> Token[]
// turn a name into a list of tokens
// string -> Token[]
let tokens = ens_tokenize('R💩\u{FE0F}a\u{FE0F}\u{304}\u{AD}./'); // never throws

@@ -54,6 +68,4 @@ // [

* `npm run make` compress data from [@adraffy/ensip-norm](https://adraffy.github.io/ensip-norm/)
* `npm run make` compress data from [@adraffy/ensip-norm](https://github.com/adraffy/ensip-norm/)
* `npm run test` run validation tests
* `npm run build` create `/dist/`
* `npm run build-dev` same as `run build` plus `parts.js`, `dns.js`, and `all.js`
* Note: requires `devDependencies`
* `npm run build` create `/dist/`
import {terser} from 'rollup-plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
export const TERSER = terser({
const TERSER = terser({
compress: {

@@ -11,2 +12,4 @@ toplevel: true,

const NODE = nodeResolve();
export default [

@@ -34,3 +37,30 @@ {

}
},
{
input: './src/dns.js',
plugins: [NODE],
output: {
file: './dist/dns.min.js',
format: 'es',
plugins: [TERSER]
}
},
{
input: './src/parts.js',
plugins: [NODE],
output: {
file: './dist/parts.min.js',
format: 'es',
plugins: [TERSER]
}
},
{
input: './src/all.js',
plugins: [NODE],
output: {
file: './dist/all.min.js',
format: 'es',
plugins: [TERSER]
}
}
];
];

@@ -83,3 +83,2 @@ export function decode_arithmetic(bytes) {

// returns an iterator which returns the next symbol

@@ -117,2 +116,3 @@ export function read_payload(v) {

// return unsorted? unique array
export function read_member_array(next, lookup) {

@@ -131,5 +131,3 @@ let v = read_ascending(next(), next);

// returns array of
// [x, ys] => single replacement rule
// [x, ys, n, dx, dx] => linear map
// returns map of x => ys
export function read_mapped_map(next) {

@@ -160,6 +158,8 @@ let ret = [];

function read_transposed(n, w, next, lookup) {
// read w columns of length n
// return as n rows of length w
function read_transposed(n, w, next) {
let m = Array(n).fill().map(() => []);
for (let i = 0; i < w; i++) {
read_deltas(n, next).forEach((x, j) => m[j].push(lookup ? lookup(x) : x));
read_deltas(n, next).forEach((x, j) => m[j].push(x));
}

@@ -169,2 +169,4 @@ return m;

// returns [[x, ys], [x+dx, ys+dy], [x+2*dx, ys+2*dy], ...]
// where dx/dy = steps, n = run size, w = length of y
function read_linear_table(w, next) {

@@ -184,2 +186,4 @@ let dx = 1 + next();

// return [[x, ys...], ...]
// where w = length of y
function read_replacement_table(w, next) {

@@ -197,16 +201,16 @@ let n = 1 + next();

while (true) {
let keys = read_member_array(next);
let keys = read_member_array(next, sorted);
if (keys.length == 0) break;
branches.push({set: new Set(keys.map(i => sorted[i])), node: read()});
branches.push({set: new Set(keys), node: read()});
}
branches.sort((a, b) => b.set.size - a.set.size);
let flag = next();
return {
branches,
valid: (flag & 1) != 0,
fe0f: (flag & 2) != 0,
save: (flag & 4) != 0,
check: (flag & 8) != 0,
};
branches.sort((a, b) => b.set.size - a.set.size); // sort by likelihood
let temp = next();
let valid = temp % 3;
temp = (temp / 3)|0;
let fe0f = !!(temp & 1);
temp >>= 1;
let save = temp == 1;
let check = temp == 2;
return {branches, valid, fe0f, save, check};
}
}

@@ -43,9 +43,9 @@ // https://en.wikipedia.org/wiki/Domain_Name_System

}
if (label.length > MAX_LABEL) throw new Error(`too long`);
if (label.length > MAX_LABEL) throw new Error(`too long: ${label.length} > ${MAX_LABEL}`);
} catch (err) {
throw new Error(`Invalid label "${escape_unicode(label)}": ${err.message}`);
}
if (acc > MAX_NAME) throw new Error(`Name too long`);
if (acc > MAX_NAME) throw new Error(`Name too long: ${acc} > ${MAX_NAME}`);
return label;
}).join('.');
}

@@ -1,3 +0,64 @@

import {group_by, split_between, split_linear, compare_arrays} from './utils.js';
import {compare_arrays} from './utils.js';
// group list into collection
// [1, 2, 2, 3] + odd => [odd:[1,3], even:[2,2]]
export function group_by(v, fn, ret = {}) {
for (let x of v) {
let key = fn(x);
let g = ret[key];
if (!g) g = ret[key] = [];
g.push(x);
}
return ret;
}
// split list into runs where
// [..., a, b, ...] => [[..., a], [b, ...]] if fn(a, b)
export function split_between(v, fn) {
let start = 0;
let ret = [];
for (let i = 1; i < v.length; i++) {
if (fn(v[i - 1], v[i])) {
ret.push(v.slice(start, i));
start = i;
}
}
if (start < v.length) {
ret.push(v.slice(start));
}
return ret;
}
// from a list of [[x,ys]...]
// find spans of [[x,ys],[x+dx,ys+dy],[x+2dx,ys+2dy],...]
export function split_linear(mapped, dx, dy) {
let linear = [];
mapped = mapped.map(v => v.slice());
for (let i = 0; i < mapped.length; i++) {
let row0 = mapped[i];
let [x0, ys0] = row0;
if (x0 == -1) continue; // marked
let group = [row0];
next: for (let j = i + 1; j < mapped.length; j++) {
let row = mapped[j];
let [x, ys] = row;
if (x == -1) continue; // marked
let x1 = x0 + group.length * dx;
if (x < x1) continue;
if (x > x1) break;
for (let k = 0; k < ys0.length; k++) {
if (ys0[k] + group.length * dy != ys[k]) continue next;
}
group.push(row);
}
if (group.length > 1) {
group.forEach(v => v[0] = -1); // mark used
linear.push([x0, group.length, ys0]);
}
}
return {linear, nonlinear: mapped.filter(v => v[0] >= 0)}; // remove marked
}
// group 8 bits into 1 byte
// [0, 1, 1, 0, ...] => [0b0110..., ...]
export function bytes_from_bits(v) {

@@ -16,2 +77,3 @@ if (v.length & 7) throw new TypeError('not divisible by 8');

// vary symbol count to find best encoding
export function best_arithmetic(symbols, max = 64) {

@@ -57,6 +119,5 @@ let best;

});
symbols.push(0);
symbols.push(0); // END
// create frequency table
let freq = Array(linear + 4).fill(0);
//let freq = Array(linear + 3).fill(0);
let freq = Array(linear + 4).fill(0); // END + 1,2,3-byte symbols
for (let x of symbols) freq[x]++;

@@ -180,2 +241,3 @@ freq = freq.map(x => Math.max(1, x)); // prevent sparse

}
//console.log({w, dx, dy, n: linear.length})
mapped[w] = nonlinear; // remove them

@@ -182,0 +244,0 @@ this.unsigned(w);

@@ -1,3 +0,3 @@

import {read_compressed_payload} from './decoder.js';
export default read_compressed_payload(Uint8Array.from(atob('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'), c => c.charCodeAt(0)));
// created 2022-08-11T04:31:10.660Z
import {read_compressed_payload} from './decoder.js';
export default read_compressed_payload(Uint8Array.from(atob('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'), c => c.charCodeAt(0)));
import r from './include.js';
import {read_member_array, read_mapped_map, read_emoji_trie} from './decoder.js';
import {explode_cp, filter_fe0f} from './utils.js';

@@ -14,17 +15,16 @@ const VALID = new Set(read_member_array(r));

function explode_cp(s) {
return [...s].map(x => x.codePointAt(0));
export function ens_beautify(name) {
return normalize(name, x => x);
}
function filter_fe0f(cps) {
return cps.filter(cp => cp != 0xFE0F);
export function ens_normalize(name) {
return normalize(name, filter_fe0f);
}
export function ens_normalize(name, beautify = false) {
let input = [...name].map(x => x.codePointAt(0)).reverse(); // flip for pop
function normalize(name, emoji_filter) {
let input = explode_cp(name).reverse(); // flip for pop
let output = [];
while (input.length) {
let emoji = consume_emoji_reversed(input, EMOJI_ROOT);
let emoji = consume_emoji_reversed(input);
if (emoji) {
output.push(...(beautify ? emoji : filter_fe0f(emoji)));
output.push(...emoji_filter(emoji));
continue;

@@ -50,4 +50,6 @@ }

function consume_emoji_reversed(cps, node, eaten) {
function consume_emoji_reversed(cps, eaten) {
let node = EMOJI_ROOT;
let emoji;
let saved;
let stack = [];

@@ -60,9 +62,15 @@ let pos = cps.length;

if (!node) break;
if (node.save) { // remember
saved = cp;
} else if (node.check) { // check exclusion
if (cp === saved) break;
}
stack.push(cp);
if (node.fe0f) {
stack.push(0xFE0F);
if (pos > 0 && cps[pos - 1] == 0xFE0F) pos--;
if (pos > 0 && cps[pos - 1] == 0xFE0F) pos--; // consume optional FE0F
}
if (node.valid) { // this is a valid emoji (so far)
emoji = stack.slice(); // copy stack
if (node.valid == 2) emoji.splice(1, 1); // delete FE0F at position 1 (RGI ZWJ don't follow spec!)
if (eaten) eaten.push(...cps.slice(pos).reverse()); // copy input (if needed)

@@ -89,3 +97,3 @@ cps.length = pos; // truncate

while (input.length) {
let emoji = consume_emoji_reversed(input, EMOJI_ROOT, eaten);
let emoji = consume_emoji_reversed(input, eaten);
if (emoji) {

@@ -92,0 +100,0 @@ tokens.push({type: TY_EMOJI, emoji, input: eaten.slice(), cps: filter_fe0f(emoji)});

@@ -10,2 +10,5 @@ import {CHARS, EMOJI} from '@adraffy/ensip-norm';

}
get nodes() {
return Object.values(this.branches).reduce((a, x) => a + 1 + x.nodes, 0);
}
add(cp) {

@@ -60,50 +63,72 @@ if (cp == 0xFE0F) {

// there are sequences of the form:
// a__ MOD b__ MOD2 c__
// a__ MOD b__ MOD2 c__
// where MOD != MOD2 (5x4 = 20 combinations)
// if we remember the first mod,
// we can pretend the second mod is non-exclusionary (5x5)
// which allows further compression
let modifier_set = new Set([0x1F3FB, 0x1F3FC, 0x1F3FD, 0x1F3FE, 0x1F3FF]); // 1F3FB..1F3FF
// which allows further compression
// (12193 to 11079 bytes -> saves 1KB, ~10%)
let modifier_set = new Set(['127995', '127996', '127997', '127998', '127999']); // 1F3FB..1F3FF
root.scan((node, path) => {
// find nodes that are missing 1 modifier
let v = Object.keys(node.branches);
if (v.length != modifier_set.size - 1) return;
if (!v.every(k => modifier_set.has(k))) return;
if (v.length != modifier_set.size - 1) return; // missing 1
if (!v.every(k => modifier_set.has(k))) return; // all mods
// where another modifier already exists in the path
let parent = path.find(kv => modifier_set.has(kv[0]));
if (parent == node) throw new Error('wtf');
// mark the first modifier
parent.save_mod = true;
// check on the second modifier
node.check_mod = true;
// complete the map so we collapse
let m = path.filter(kv => modifier_set.has(kv[0]));
if (m.length == 0) return;
let parent = m[m.length - 1][1]; // find closest
// complete the map so we can collapse
for (let cp of modifier_set) {
if (!node.branches[cp]) {
node.add(cp).valid = true;
node.branches[cp] = node.branches[v[0]]; // fake branch
break;
}
}
// set save on the first modifier
parent.save_mod = true;
// set check on the second modifiers
for (let b of Object.values(node.branches)) {
b.check_mod = true;
}
});
// assert invariants
root.scan((node) => {
if (node.save_mod && node.check_mod) throw new Error('invariant wrong');
});
for (let cps0 of EMOJI) {
let node = root;
let bits = 0;
let index = 0;
for (let i = 0; i < cps0.length; ) {
let cp = cps0[i++];
node = node.branches[cp];
if (node.fe0f) {
if (i < cps0.length && cps0[i] == 0xFE0F) {
i++;
} else {
bits |= 1 << index;
}
index++;
}
}
if (bits >= 2) throw new Error('expected fe0f correction only at position 1');
node.bits = bits; // 0 or 1
}
// compress
console.log(`Before: ${root.nodes}`);
root.collapse_nodes();
root.collapse_keys();
console.log(`After: ${root.nodes}`);
function encode_emoji(enc, node, map) {
for (let [keys, x] of Object.entries(node.branches)) {
enc.write_member(keys.split(',').map(x => sorted_emoji_map[x]));
enc.write_member(keys.split(',').map(k => map[k]));
encode_emoji(enc, x, map);
}
enc.write_member([]);
let flag = 0;
if (node.valid) flag |= 1;
if (node.fe0f) flag |= 2;
if (node.save_mod) flag |= 4;
if (node.check_mod) flag |= 8;
enc.unsigned(flag);
let valid = node.valid ? 1 + node.bits : 0;
let mod = node.check_mod ? 2 : node.save_mod ? 1 : 0;
let fe0f = node.fe0f ? 1 : 0;
//enc.unsigned(6*valid + 2*mod + fe0f); // 11888
//enc.unsigned(6*mod + 2*valid + fe0f); // 11866
//enc.unsigned(9*fe0f + 3*mod + valid); // 11844
enc.unsigned(6*mod + 3*fe0f + valid); // 11833
}

@@ -128,18 +153,26 @@

enc.write_mapped([
[1, 1, 0], // adjacent that map to a constant
[2, 1, 0], // eg. AAAA..BBBB => CCCC
[1, 1, 1], // alphabets: ABC
[1, 2, 2], // paired-alphabets: AaBbCc
[1, 1, 0], // \
[2, 1, 0], // adjacent that map to a constant
[3, 1, 0] // / eg. AAAA..BBBB => CCCC
// [1, 2, 1],
// [1, 3, 3],
// [3, 1, 0],
// [4, 1, 0],
], CHARS.mapped);
enc.write_member(sorted_emoji);
encode_emoji(enc, root, sorted_emoji_map);
//write('include-only'); // only saves 300 bytes
enc.write_member(NFC_CHECK.flatMap(cp => sorted_valid_map[cp] ?? []));
let buf = Buffer.from(enc.compressed());
write('include');
console.log(`${buf.length} bytes`);
function write(name) {
let buf = Buffer.from(enc.compressed());
console.log(`${name} = ${buf.length} bytes`);
writeFileSync(new URL(`./${name}.js`, import.meta.url), [
`// created ${new Date().toJSON()}`,
`import {read_compressed_payload} from './decoder.js';`,
`export default read_compressed_payload(Uint8Array.from(atob('${buf.toString('base64')}'), c => c.charCodeAt(0)));`,
].join('\n'));
}
writeFileSync(new URL('./include.js', import.meta.url), `
import {read_compressed_payload} from './decoder.js';
export default read_compressed_payload(Uint8Array.from(atob('${buf.toString('base64')}'), c => c.charCodeAt(0)));
`);

@@ -22,3 +22,3 @@ import {escape_for_html, is_printable_ascii, hex_cp} from './utils.js';

span.classList.add('arrow');
span.innerHTML = '🡆'; //'&rarr;';
span.innerHTML = '➔'; //'&rarr;';
return span;

@@ -25,0 +25,0 @@ }

@@ -14,2 +14,6 @@

export function filter_fe0f(cps) {
return cps.filter(cp => cp != 0xFE0F);
}
export function escape_for_html(s, quoter = quote_cp) {

@@ -39,62 +43,2 @@ // printable w/o:

// group list into collection
// [1, 2, 2, 3] + odd => [odd:[1,3], even:[2,2]]
export function group_by(v, fn, ret = {}) {
for (let x of v) {
let key = fn(x);
let g = ret[key];
if (!g) g = ret[key] = [];
g.push(x);
}
return ret;
}
// split list into runs where
// [..., a, b, ...] => [[..., a], [b, ...]] if fn(a, b)
export function split_between(v, fn) {
let start = 0;
let ret = [];
for (let i = 1; i < v.length; i++) {
if (fn(v[i - 1], v[i])) {
ret.push(v.slice(start, i));
start = i;
}
}
if (start < v.length) {
ret.push(v.slice(start));
}
return ret;
}
// from a list of [[x,ys]...]
// find spans of [[x,ys],[x+dx,ys+dy],[x+2dx,ys+2dy],...]
export function split_linear(mapped, dx, dy) {
let linear = [];
mapped = mapped.map(v => v.slice());
for (let i = 0; i < mapped.length; i++) {
let row0 = mapped[i];
let [x0, ys0] = row0;
if (x0 == -1) continue; // marked
let group = [row0];
next: for (let j = i + 1; j < mapped.length; j++) {
let row = mapped[j];
let [x, ys] = row;
if (x == -1) continue; // marked
let x1 = x0 + group.length * dx;
if (x < x1) continue;
if (x > x1) break;
for (let k = 0; k < ys0.length; k++) {
if (ys0[k] + group.length * dy != ys[k]) continue next;
}
group.push(row);
}
if (group.length > 1) {
group.forEach(v => v[0] = -1); // mark used
linear.push([x0, group.length, ys0]);
}
}
return {linear, nonlinear: mapped.filter(v => v[0] >= 0)}; // remove marked
}
export function compare_arrays(a, b) {

@@ -101,0 +45,0 @@ let {length: n} = a;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc