plevinjs 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/naming.js ADDED
@@ -0,0 +1,333 @@
1
+ /** What DNS says about an address: datagrams where a runtime has them, HTTPS where not. */
2
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
3
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
4
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
5
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
6
+ });
7
+ }
8
+ return path;
9
+ };
10
+ import { parse, spelled, tunnel, written } from "./address.js";
11
+ export const PUBLIC_SERVERS = ["1.1.1.1", "8.8.8.8", "9.9.9.9"];
12
+ export const RESOLVERS = [
13
+ "https://cloudflare-dns.com/dns-query",
14
+ "https://dns.google/dns-query",
15
+ ];
16
+ const TIMEOUT = 2000;
17
+ const KEPT = 4096;
18
+ const KEPT_FOR = 3_600_000;
19
+ const PAYLOAD = 1232;
20
+ const ANSWERED = new Set([0, 3]);
21
+ const KINDS = { A: 1, CNAME: 5, SOA: 6, PTR: 12, AAAA: 28 };
22
+ /** One question, recursion asked for, DNSSEC status asked for, EDNS0 announced. */
23
+ export const encodeQuery = (name, kind) => {
24
+ const labels = name.split(".").filter(Boolean);
25
+ const size = labels.reduce((held, label) => held + label.length + 1, 0);
26
+ const message = new Uint8Array(12 + size + 1 + 4 + 11);
27
+ const view = new DataView(message.buffer);
28
+ view.setUint16(0, Math.floor(Math.random() * 65536));
29
+ view.setUint16(2, 0x0120);
30
+ view.setUint16(4, 1);
31
+ view.setUint16(10, 1);
32
+ let at = 12;
33
+ for (const label of labels) {
34
+ message[at] = label.length;
35
+ for (let index = 0; index < label.length; index += 1) {
36
+ message[at + 1 + index] = label.charCodeAt(index);
37
+ }
38
+ at += label.length + 1;
39
+ }
40
+ at += 1;
41
+ view.setUint16(at, KINDS[kind]);
42
+ view.setUint16(at + 2, 1);
43
+ view.setUint16(at + 5, 41);
44
+ view.setUint16(at + 7, PAYLOAD);
45
+ return message;
46
+ };
47
+ /** A name, following compression pointers, and where the record goes on. */
48
+ const readName = (message, from) => {
49
+ const labels = [];
50
+ let at = from;
51
+ let after = -1;
52
+ for (let step = 0; step < 128; step += 1) {
53
+ const length = message[at];
54
+ if (length >= 0xc0) {
55
+ if (after < 0)
56
+ after = at + 2;
57
+ at = ((length & 0x3f) << 8) | message[at + 1];
58
+ continue;
59
+ }
60
+ at += 1;
61
+ if (!length)
62
+ return [labels.join("."), after < 0 ? at : after];
63
+ labels.push(String.fromCharCode(...message.slice(at, at + length)).toLowerCase());
64
+ at += length;
65
+ }
66
+ throw new Error("name loops");
67
+ };
68
+ const readData = (message, at, kind) => {
69
+ if (kind === KINDS.A) {
70
+ const held = message.slice(at, at + 4);
71
+ return written(((held[0] << 24) >>> 0) + (held[1] << 16) + (held[2] << 8) + held[3], false);
72
+ }
73
+ if (kind === KINDS.AAAA) {
74
+ let held = 0n;
75
+ for (const byte of message.slice(at, at + 16))
76
+ held = (held << 8n) | BigInt(byte);
77
+ return written(held, true);
78
+ }
79
+ if (kind === KINDS.CNAME || kind === KINDS.PTR)
80
+ return readName(message, at)[0];
81
+ if (kind === KINDS.SOA) {
82
+ const [primary, next] = readName(message, at);
83
+ return `${primary} ${readName(message, next)[0]}`;
84
+ }
85
+ return "";
86
+ };
87
+ /** A reply as its header bits, its answers and the zone that owns them. */
88
+ export const decode = (message) => {
89
+ const view = new DataView(message.buffer, message.byteOffset);
90
+ const flags = view.getUint16(2);
91
+ const counts = [view.getUint16(4), view.getUint16(6), view.getUint16(8)];
92
+ let at = 12;
93
+ for (let index = 0; index < counts[0]; index += 1)
94
+ at = readName(message, at)[1] + 4;
95
+ const sections = [];
96
+ for (const count of counts.slice(1)) {
97
+ const records = [];
98
+ for (let index = 0; index < count; index += 1) {
99
+ const [name, next] = readName(message, at);
100
+ const kind = view.getUint16(next);
101
+ const length = view.getUint16(next + 8);
102
+ records.push({ name, kind, data: readData(message, next + 10, kind) });
103
+ at = next + 10 + length;
104
+ }
105
+ sections.push(records);
106
+ }
107
+ return {
108
+ code: flags & 15,
109
+ authentic: (flags & 0x20) !== 0,
110
+ truncated: (flags & 0x200) !== 0,
111
+ answer: sections[0],
112
+ authority: sections[1],
113
+ };
114
+ };
115
+ export const records = (reply, kind, section = "answer") => {
116
+ if (!reply)
117
+ return [];
118
+ const found = section === "any" ? [...reply.answer, ...reply.authority] : reply.answer;
119
+ return found.filter((record) => record.kind === KINDS[kind]);
120
+ };
121
+ const answers = (reply, kind) => records(reply, kind).map((record) => record.data);
122
+ const read = (message) => {
123
+ try {
124
+ const reply = decode(message);
125
+ return ANSWERED.has(reply.code) ? reply : null;
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ };
131
+ /** A node builtin named at runtime, which keeps bundlers from reaching for it. */
132
+ const builtin = async (name) => (await import(__rewriteRelativeImportExtension(/* @vite-ignore */ name)));
133
+ const onNode = () => typeof process !== "undefined" && Boolean(process.versions?.node);
134
+ let servers = null;
135
+ /** The servers this machine resolves through, which only a node runtime knows. */
136
+ const systemServers = async () => {
137
+ servers ??= (async () => {
138
+ const found = [];
139
+ try {
140
+ const { getServers } = await builtin("node:dns");
141
+ found.push(...getServers());
142
+ }
143
+ catch {
144
+ /* a runtime without node:dns has the public servers and nothing else */
145
+ }
146
+ const usable = found
147
+ .map((server) => server.split("%")[0].replace(/^\[|]$/g, ""))
148
+ .filter((server) => !/^(fe80|169\.254)/i.test(server));
149
+ return [...new Set([...usable, ...PUBLIC_SERVERS])];
150
+ })();
151
+ return servers;
152
+ };
153
+ /** The same question again where the datagram came back cut short. */
154
+ const overTcp = async (server, query) => {
155
+ const { connect } = await builtin("node:net");
156
+ return new Promise((settle) => {
157
+ const socket = connect(53, server);
158
+ const pieces = [];
159
+ let size = 0;
160
+ const done = (reply) => {
161
+ socket.destroy();
162
+ settle(reply);
163
+ };
164
+ socket.setTimeout(TIMEOUT, () => done(null));
165
+ socket.on("error", () => done(null));
166
+ socket.on("connect", () => {
167
+ const framed = new Uint8Array(query.length + 2);
168
+ new DataView(framed.buffer).setUint16(0, query.length);
169
+ framed.set(query, 2);
170
+ socket.write(framed);
171
+ });
172
+ socket.on("data", (piece) => {
173
+ pieces.push(piece);
174
+ size += piece.length;
175
+ if (size < 2)
176
+ return;
177
+ const held = new Uint8Array(size);
178
+ let at = 0;
179
+ for (const one of pieces) {
180
+ held.set(one, at);
181
+ at += one.length;
182
+ }
183
+ const expected = new DataView(held.buffer).getUint16(0);
184
+ if (size >= expected + 2)
185
+ done(read(held.slice(2, expected + 2)));
186
+ });
187
+ });
188
+ };
189
+ /** Every server asked at once over UDP, the first real answer winning. */
190
+ const overUdp = async (query, carrying) => {
191
+ const { createSocket } = await builtin("node:dgram");
192
+ const reachable = await systemServers();
193
+ return new Promise((settle) => {
194
+ const sockets = reachable.map((server) => createSocket(server.includes(":") ? "udp6" : "udp4"));
195
+ let spare = null;
196
+ let left = sockets.length;
197
+ let settled = false;
198
+ const done = (reply) => {
199
+ if (settled)
200
+ return;
201
+ settled = true;
202
+ clearTimeout(timer);
203
+ for (const socket of sockets)
204
+ socket.close();
205
+ settle(reply);
206
+ };
207
+ const timer = setTimeout(() => done(spare), TIMEOUT);
208
+ const heard = async (message, server) => {
209
+ left -= 1;
210
+ let reply = read(message);
211
+ if (reply?.truncated)
212
+ reply = await overTcp(server, query);
213
+ if (reply && (!carrying || records(reply, carrying, "any").length))
214
+ return done(reply);
215
+ spare ??= reply;
216
+ if (!left)
217
+ done(spare);
218
+ };
219
+ sockets.forEach((socket, index) => {
220
+ const server = reachable[index];
221
+ socket.on("error", () => {
222
+ left -= 1;
223
+ if (!left)
224
+ done(spare);
225
+ });
226
+ socket.on("message", (message) => void heard(message, server));
227
+ socket.send(query, 53, server);
228
+ });
229
+ if (!sockets.length)
230
+ done(null);
231
+ });
232
+ };
233
+ /** Every resolver asked at once over HTTPS, for runtimes without a datagram. */
234
+ const overHttps = async (query, carrying) => {
235
+ const asking = RESOLVERS.map(async (resolver) => {
236
+ const response = await fetch(resolver, {
237
+ method: "POST",
238
+ headers: { "content-type": "application/dns-message" },
239
+ body: query,
240
+ signal: AbortSignal.timeout(TIMEOUT),
241
+ });
242
+ if (!response.ok)
243
+ throw new Error(`${response.status} from ${resolver}`);
244
+ const reply = read(new Uint8Array(await response.arrayBuffer()));
245
+ if (!reply)
246
+ throw new Error(`nothing from ${resolver}`);
247
+ return reply;
248
+ });
249
+ let spare = null;
250
+ for (const settled of await Promise.allSettled(asking)) {
251
+ if (settled.status !== "fulfilled")
252
+ continue;
253
+ if (!carrying || records(settled.value, carrying, "any").length)
254
+ return settled.value;
255
+ spare ??= settled.value;
256
+ }
257
+ return spare;
258
+ };
259
+ export const ask = async ([name, kind, carrying]) => {
260
+ const query = encodeQuery(name, kind);
261
+ return onNode() ? overUdp(query, carrying) : overHttps(query, carrying);
262
+ };
263
+ const zoneOf = (reply, found) => {
264
+ const soa = records(reply, "SOA", "any");
265
+ if (!soa.length)
266
+ return;
267
+ const [primary, contact] = soa[0].data.split(" ");
268
+ const at = contact.indexOf(".");
269
+ found.zone = soa[0].name;
270
+ found.zone_primary = primary;
271
+ found.zone_contact =
272
+ at < 0 ? contact : `${contact.slice(0, at)}@${contact.slice(at + 1)}`;
273
+ };
274
+ const empty = (asked) => ({
275
+ asked,
276
+ hostname: null,
277
+ hostnames: [],
278
+ ipv4: null,
279
+ ipv6: null,
280
+ ipv4_addresses: [],
281
+ ipv6_addresses: [],
282
+ alias: null,
283
+ zone: null,
284
+ zone_primary: null,
285
+ zone_contact: null,
286
+ is_confirmed: false,
287
+ is_signed: false,
288
+ });
289
+ /** Everything DNS says about the address, in two rounds of questions. */
290
+ export const facts = async (value, wide) => {
291
+ const embedded = tunnel(value, wide)[1];
292
+ const [held, narrow] = embedded ? parse(embedded) : [value, wide];
293
+ const [asked, , arpa] = spelled(held, narrow);
294
+ const [reverse, zone] = await Promise.all([
295
+ ask([arpa, "PTR", null]),
296
+ ask([arpa, "SOA", "SOA"]),
297
+ ]);
298
+ const found = empty(asked);
299
+ found.is_signed = Boolean(reverse?.authentic);
300
+ zoneOf(zone, found);
301
+ const hostnames = answers(reverse, "PTR");
302
+ if (!hostnames.length)
303
+ return found;
304
+ found.hostname = hostnames[0];
305
+ found.hostnames = hostnames;
306
+ const [forwardV4, forwardV6] = await Promise.all([
307
+ ask([hostnames[0], "A", null]),
308
+ ask([hostnames[0], "AAAA", null]),
309
+ ]);
310
+ found.ipv4_addresses = answers(forwardV4, "A");
311
+ found.ipv6_addresses = answers(forwardV6, "AAAA");
312
+ found.ipv4 = found.ipv4_addresses[0] ?? null;
313
+ found.ipv6 = found.ipv6_addresses[0] ?? null;
314
+ const aliases = [...answers(forwardV4, "CNAME"), ...answers(forwardV6, "CNAME")];
315
+ found.alias = aliases[0] ?? null;
316
+ const back = [...found.ipv4_addresses, ...found.ipv6_addresses];
317
+ found.is_confirmed = back.some((one) => BigInt(parse(one)[0]) === BigInt(held));
318
+ return found;
319
+ };
320
+ const kept = new Map();
321
+ /** The same address answered from memory for an hour before asking again. */
322
+ export const named = async (value, wide) => {
323
+ const key = `${wide ? 6 : 4}:${value}`;
324
+ const held = kept.get(key);
325
+ if (held && held[0] > Date.now())
326
+ return held[1];
327
+ const found = await facts(value, wide);
328
+ if (kept.size >= KEPT)
329
+ kept.clear();
330
+ kept.set(key, [Date.now() + KEPT_FOR, found]);
331
+ return found;
332
+ };
333
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- var V="ipv4-mapped",W="6to4",z="teredo",nn="nat64";var tn=(1n<<128n)-1n,rn=[["0.0.0.0/8",8],["10.0.0.0/8",1],["100.64.0.0/10",129],["127.0.0.0/8",3],["169.254.0.0/16",17],["172.16.0.0/12",1],["192.0.0.0/24",8],["192.0.2.0/24",72],["192.88.99.0/24",8],["192.168.0.0/16",1],["198.18.0.0/15",264],["198.51.100.0/24",72],["203.0.113.0/24",72],["224.0.0.0/4",4],["240.0.0.0/4",8]],an=[["::/128",8],["::1/128",3],["::ffff:0:0/96",8],["64:ff9b::/96",8],["64:ff9b:1::/48",8],["100::/64",8],["2001::/23",8],["2001:db8::/32",72],["2002::/16",8],["3fff::/20",72],["fc00::/7",33],["fe80::/10",17],["ff00::/8",4]],on=/^(0|[1-9][0-9]{0,2})$/,sn=/^[0-9a-fA-F]{1,4}$/,ge=e=>{let n=e.split(".");if(n.length!==4)return null;let t=0;for(let r of n){if(!on.test(r))return null;let i=Number(r);if(i>255)return null;t=t*256+i}return t},Ae=(e,n)=>{if(e==="")return[];let t=e.split(":"),r=[];for(let i=0;i<t.length;i+=1){let o=t[i];if(i===t.length-1&&o.includes(".")){let a=ge(o);if(a===null)return null;r.push(a>>>16,a&65535);continue}if(!sn.test(o))return null;r.push(Number.parseInt(o,16))}return r.length<=n?r:null},ln=e=>{let n=e.split("::");if(n.length>2)return null;let t=Ae(n[0],8),r=n.length===2?Ae(n[1],8):[];if(t===null||r===null)return null;let i=t.length+r.length;if(n.length===1?i!==8:i>7)return null;let o=[...t,...Array(8-i).fill(0),...r],a=0n;for(let s of o)a=a<<16n|BigInt(s);return a},v=e=>{if(typeof e=="string"){if(e.includes(":")){let r=ln(e);if(r===null)throw new Error(`${e} is not an address`);return[r,!0]}let t=ge(e);if(t===null)throw new Error(`${e} is not an address`);return[t,!1]}if(e instanceof Uint8Array){if(e.length===4)return[(e[0]<<24>>>0)+(e[1]<<16)+(e[2]<<8)+e[3],!1];if(e.length!==16)throw new Error("packed addresses are 4 or 16 bytes");let t=0n;for(let r of e)t=t<<8n|BigInt(r);return[t,!0]}if(typeof e!="bigint"&&!Number.isInteger(e))throw new Error(`${String(e)} is not an address`);let n=typeof e=="bigint"?e:BigInt(e);if(n<0n||n>tn)throw new Error(`${e} is not an address`);return n>BigInt(4294967295)?[n,!0]:[Number(n),!1]},cn=e=>Array.from({length:8},(n,t)=>Number(e>>BigInt(112-t*16)&0xffffn)),N=e=>[24,16,8,0].map(n=>e>>>n&255).join("."),Se=(e,n)=>{let t=-1,r=1,i=-1;for(let s=0;s<=n.length;s+=1)n[s]===0&&i<0&&(i=s),(n[s]!==0||s===n.length)&&i>=0&&(s-i>r&&([t,r]=[i,s-i]),i=-1);if(t<0)return e.join(":");let o=e.slice(0,t).join(":"),a=e.slice(t+r).join(":");return`${o}::${a}`},Z=(e,n)=>{if(!n){let a=N(e),s=a.split(".");return[a,a,`${[...s].reverse().join(".")}.in-addr.arpa`]}let t=cn(e),i=`${[...e.toString(16).padStart(32,"0")].reverse().join(".")}.ip6.arpa`;if(t.slice(0,5).every(a=>a===0)&&t[5]===65535){let a=N(Number(e&0xffffffffn)),s=t.slice(0,6).map(c=>c.toString(16)),l=t.slice(0,6).map(c=>c.toString(16).padStart(4,"0"));return[`${Se(s,t.slice(0,6))}:${a}`,`${l.join(":")}:${a}`,i]}return[Se(t.map(a=>a.toString(16)),t),t.map(a=>a.toString(16).padStart(4,"0")).join(":"),i]},Ee=(e,n)=>Z(e,n)[0],he=(e,n)=>e.map(([t,r])=>{let[i,o]=t.split("/"),a=BigInt(v(i)[0]),s=BigInt((n?128:32)-Number(o));return[a,a+((1n<<s)-1n),r]}).sort((t,r)=>t[0]<r[0]?-1:1),un=[he(rn,!1),he(an,!0)],Ce=(e,n)=>{let t=un[n?1:0],r=BigInt(e),i=0,o=t.length;for(;i<o;){let s=i+o>>1;t[s][0]<=r?i=s+1:o=s}let a=t[i-1];return a&&r<=a[1]?a[2]:n&&r>>125n!==1n?8:0},ye=(e,n)=>{if(!n)return[null,null];let t=e,r=Number(t&0xffffffffn);return t>>32n===0xffffn?[V,N(r)]:t>>112n===0x2002n?[W,N(Number(t>>80n&0xffffffffn))]:t>>96n===0x20010000n?[z,N(~r>>>0)]:t>>32n===0x0064ff9bn<<64n?[nn,N(r)]:[null,null]},Re=(e,n,t)=>{let r=BigInt((n?128:32)-t),i=BigInt(e),o=i>>r<<r,a=i|(1n<<r)-1n,s=Ee(n?o:Number(o),n);return[`${s}/${t}`,s,Ee(n?a:Number(a),n)]};var $=e=>new Set(e.split(" ")),fn=$("inc incorporated llc ltd ltda limited gmbh mbh ag kgaa ohg ev eg sa sab saa sau sal saog sac sas sarl srl spa nv bv cv asa aps oyj kft zrt nyrt doo sro ooo zao pao pjsc jsc ojsc llp plc pte pteltd pty corp corporation company holding holdings group uab sia tov oao pt sdn bhd coltd coltda eireli ead ood eood sti ltdsti spzoo"),Tn=$("de me epp co as ab ad dd bt lc lp se sl slu sp z oo zoo oy ao esp kg network networks net telecom telecoms telecommunication telecommunications telecomunicaciones comunicaciones communication communications hosting solutions services service technologies technology tech systems system data datacenter datacentre cloud internet online isp international global enterprises enterprise backbone provider providers of and"),bn=$("the llc ltd gmbh sarl ooo zao pao ao oao jsc ojsc pjsc uab sia tov pt pp ps ip spolka"),mn=new Set([...fn,...Tn,""]),pn=[".com",".net",".org",".io"],dn=/^.*\b(?:trading as|d\/b\/a|dba)\b\s*/i,An=/\(.*?\)|,.*|\s+-\s+.*/g,Me=/[^0-9a-z]/g,Sn=/^AS\d+$/i,En=/-(AS|AP|US|UK|DE|FR|IN|CN|JP|EU|NET|COM|ORG)$/,hn=/(NET|COM|TEL|WEB|LINE)$/,gn=/[/?#]/,Cn=/^["']+|["']+$/g,De=new Set(["hosting","cdn","content"]),yn=new Set(["residential","cellular"]),Ie=new Set(["public_proxy","residential_proxy"]),Rn={"national capital":"country","regional capital":"region","district capital":"district"},Mn=8192,Be=e=>{let n=new Map;return t=>{let r=n.get(t);if(r!==void 0)return r;n.size>=Mn&&n.clear();let i=e(t);return n.set(t,i),i}},Dn=/^\p{L}+$/u,Ne=e=>{let n=e.indexOf(`
2
- `);return[e.slice(0,n),e.slice(n+1)]},In=e=>e.length>4&&Dn.test(e)&&e===e.toUpperCase()&&e!==e.toLowerCase(),Bn=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),Ue=e=>e.split(" ").map(n=>In(n)?Bn(n):n).join(" "),Nn=e=>{let t=e.replace(dn,"").replace(An,"").split(/\s+/).map(o=>o.replace(Cn,"")).filter(Boolean);for(;t.length>1&&mn.has(t[t.length-1].toLowerCase().replace(Me,""));)t.pop();for(;t.length&&bn.has(t[0].toLowerCase().replace(Me,""));)t.shift();let r=t.join(" "),i=pn.find(o=>r.toLowerCase().endsWith(o));return Ue(i?r.slice(0,r.length-i.length):r)},Un=e=>{let t=(e.split(/\s+/)[0]??"").replace(En,"");return Sn.test(t)?"":(t.length>4&&t===t.toUpperCase()&&(t=t.replace(hn,"")),Ue(t))},wn=Be(e=>{let[n,t]=Ne(e),r=Nn(t),i=Un(n);return!r||!i?r||i:r.toLowerCase()===i.toLowerCase()?i===i.toUpperCase()?r:i:r.toLowerCase().startsWith(`${i.toLowerCase()} `)?i:r}),we=(e,n)=>wn(`${e}
3
- ${n}`),Gn=Be(e=>{let[n,t]=Ne(e),i=((n.split("//").pop()??"").split(gn)[0].split("@").pop()??"").split(":")[0],o=(t.split("@")[1]??"").toLowerCase(),a=(i||o).toLowerCase().replace(/^www\./,""),s=a.split(".").pop()??"";return s.length>2&&o.split(".")[0]===s&&a!==o?o:a}),Ge=(e,n)=>Gn(`${e}
4
- ${n}`),ke=(e,n)=>e==="public_proxy"&&yn.has(n)?["residential_proxy","inferred"]:[e,""],Le=e=>Rn[e]??"";var j=`
1
+ var Q="ipv4-mapped",X="6to4",ee="teredo",bn="nat64";var An=(1n<<128n)-1n,Sn=[["0.0.0.0/8",8],["10.0.0.0/8",1],["100.64.0.0/10",129],["127.0.0.0/8",3],["169.254.0.0/16",17],["172.16.0.0/12",1],["192.0.0.0/24",8],["192.0.2.0/24",72],["192.88.99.0/24",8],["192.168.0.0/16",1],["198.18.0.0/15",264],["198.51.100.0/24",72],["203.0.113.0/24",72],["224.0.0.0/4",4],["240.0.0.0/4",8]],hn=[["::/128",8],["::1/128",3],["::ffff:0:0/96",8],["64:ff9b::/96",8],["64:ff9b:1::/48",8],["100::/64",8],["2001::/23",8],["2001:db8::/32",72],["2002::/16",8],["3fff::/20",72],["fc00::/7",33],["fe80::/10",17],["ff00::/8",4]],En=/^(0|[1-9][0-9]{0,2})$/,gn=/^[0-9a-fA-F]{1,4}$/,ke=e=>{let n=e.split(".");if(n.length!==4)return null;let t=0;for(let r of n){if(!En.test(r))return null;let i=Number(r);if(i>255)return null;t=t*256+i}return t},we=(e,n)=>{if(e==="")return[];let t=e.split(":"),r=[];for(let i=0;i<t.length;i+=1){let o=t[i];if(i===t.length-1&&o.includes(".")){let a=ke(o);if(a===null)return null;r.push(a>>>16,a&65535);continue}if(!gn.test(o))return null;r.push(Number.parseInt(o,16))}return r.length<=n?r:null},yn=e=>{let n=e.split("::");if(n.length>2)return null;let t=we(n[0],8),r=n.length===2?we(n[1],8):[];if(t===null||r===null)return null;let i=t.length+r.length;if(n.length===1?i!==8:i>7)return null;let o=[...t,...Array(8-i).fill(0),...r],a=0n;for(let s of o)a=a<<16n|BigInt(s);return a},C=e=>{if(typeof e=="string"){if(e.includes(":")){let r=yn(e);if(r===null)throw new Error(`${e} is not an address`);return[r,!0]}let t=ke(e);if(t===null)throw new Error(`${e} is not an address`);return[t,!1]}if(e instanceof Uint8Array){if(e.length===4)return[(e[0]<<24>>>0)+(e[1]<<16)+(e[2]<<8)+e[3],!1];if(e.length!==16)throw new Error("packed addresses are 4 or 16 bytes");let t=0n;for(let r of e)t=t<<8n|BigInt(r);return[t,!0]}if(typeof e!="bigint"&&!Number.isInteger(e))throw new Error(`${String(e)} is not an address`);let n=typeof e=="bigint"?e:BigInt(e);if(n<0n||n>An)throw new Error(`${e} is not an address`);return n>BigInt(4294967295)?[n,!0]:[Number(n),!1]},Cn=e=>Array.from({length:8},(n,t)=>Number(e>>BigInt(112-t*16)&0xffffn)),k=e=>[24,16,8,0].map(n=>e>>>n&255).join("."),Be=(e,n)=>{let t=-1,r=1,i=-1;for(let s=0;s<=n.length;s+=1)n[s]===0&&i<0&&(i=s),(n[s]!==0||s===n.length)&&i>=0&&(s-i>r&&([t,r]=[i,s-i]),i=-1);if(t<0)return e.join(":");let o=e.slice(0,t).join(":"),a=e.slice(t+r).join(":");return`${o}::${a}`},P=(e,n)=>{if(!n){let a=k(e),s=a.split(".");return[a,a,`${[...s].reverse().join(".")}.in-addr.arpa`]}let t=Cn(e),i=`${[...e.toString(16).padStart(32,"0")].reverse().join(".")}.ip6.arpa`;if(t.slice(0,5).every(a=>a===0)&&t[5]===65535){let a=k(Number(e&0xffffffffn)),s=t.slice(0,6).map(c=>c.toString(16)),l=t.slice(0,6).map(c=>c.toString(16).padStart(4,"0"));return[`${Be(s,t.slice(0,6))}:${a}`,`${l.join(":")}:${a}`,i]}return[Be(t.map(a=>a.toString(16)),t),t.map(a=>a.toString(16).padStart(4,"0")).join(":"),i]},y=(e,n)=>P(e,n)[0],Ne=(e,n)=>e.map(([t,r])=>{let[i,o]=t.split("/"),a=BigInt(C(i)[0]),s=BigInt((n?128:32)-Number(o));return[a,a+((1n<<s)-1n),r]}).sort((t,r)=>t[0]<r[0]?-1:1),Rn=[Ne(Sn,!1),Ne(hn,!0)],Pe=(e,n)=>{let t=Rn[n?1:0],r=BigInt(e),i=0,o=t.length;for(;i<o;){let s=i+o>>1;t[s][0]<=r?i=s+1:o=s}let a=t[i-1];return a&&r<=a[1]?a[2]:n&&r>>125n!==1n?8:0},G=(e,n)=>{if(!n)return[null,null];let t=e,r=Number(t&0xffffffffn);return t>>32n===0xffffn?[Q,k(r)]:t>>112n===0x2002n?[X,k(Number(t>>80n&0xffffffffn))]:t>>96n===0x20010000n?[ee,k(~r>>>0)]:t>>32n===0x0064ff9bn<<64n?[bn,k(r)]:[null,null]},Ge=(e,n)=>{if(!n||G(e,n)[0]!==null)return null;let t=e,r=[48n,32n,16n,0n].map(o=>Number(t>>o&0xffffn).toString(16));return r.every(o=>/^[0-9]+$/.test(o)&&Number(o)>0&&Number(o)<256)?r.join("."):null},Le=(e,n)=>{if(n)return[null,null,null];let t=BigInt(e);return[y(0xffff00000000n|t,!0),y(0x2002n<<112n|t<<80n,!0),y(0x0064ff9bn<<96n|t,!0)]},_e=(e,n,t)=>{let r=BigInt((n?128:32)-t),i=BigInt(e),o=i>>r<<r,a=i|(1n<<r)-1n,s=y(n?o:Number(o),n);return[`${s}/${t}`,s,y(n?a:Number(a),n)]};var ne=e=>new Set(e.split(" ")),Mn=ne("inc incorporated llc ltd ltda limited gmbh mbh ag kgaa ohg ev eg sa sab saa sau sal saog sac sas sarl srl spa nv bv cv asa aps oyj kft zrt nyrt doo sro ooo zao pao pjsc jsc ojsc llp plc pte pteltd pty corp corporation company holding holdings group uab sia tov oao pt sdn bhd coltd coltda eireli ead ood eood sti ltdsti spzoo"),Dn=ne("de me epp co as ab ad dd bt lc lp se sl slu sp z oo zoo oy ao esp kg network networks net telecom telecoms telecommunication telecommunications telecomunicaciones comunicaciones communication communications hosting solutions services service technologies technology tech systems system data datacenter datacentre cloud internet online isp international global enterprises enterprise backbone provider providers of and"),In=ne("the llc ltd gmbh sarl ooo zao pao ao oao jsc ojsc pjsc uab sia tov pt pp ps ip spolka"),Un=new Set([...Mn,...Dn,""]),wn=[".com",".net",".org",".io"],Bn=/^.*\b(?:trading as|d\/b\/a|dba)\b\s*/i,Nn=/\(.*?\)|,.*|\s+-\s+.*/g,ve=/[^0-9a-z]/g,kn=/^AS\d+$/i,Pn=/-(AS|AP|US|UK|DE|FR|IN|CN|JP|EU|NET|COM|ORG)$/,Gn=/(NET|COM|TEL|WEB|LINE)$/,Ln=/[/?#]/,_n=/^["']+|["']+$/g,xe=new Set(["hosting","cdn","content"]),vn=new Set(["residential","cellular"]),Ke=new Set(["public_proxy","residential_proxy"]),xn={"national capital":"country","regional capital":"region","district capital":"district"},Kn=8192,Oe=e=>{let n=new Map;return t=>{let r=n.get(t);if(r!==void 0)return r;n.size>=Kn&&n.clear();let i=e(t);return n.set(t,i),i}},On=/^\p{L}+$/u,Fe=e=>{let n=e.indexOf(`
2
+ `);return[e.slice(0,n),e.slice(n+1)]},Fn=e=>e.length>4&&On.test(e)&&e===e.toUpperCase()&&e!==e.toLowerCase(),Vn=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),Ve=e=>e.split(" ").map(n=>Fn(n)?Vn(n):n).join(" "),Hn=e=>{let t=e.replace(Bn,"").replace(Nn,"").split(/\s+/).map(o=>o.replace(_n,"")).filter(Boolean);for(;t.length>1&&Un.has(t[t.length-1].toLowerCase().replace(ve,""));)t.pop();for(;t.length&&In.has(t[0].toLowerCase().replace(ve,""));)t.shift();let r=t.join(" "),i=wn.find(o=>r.toLowerCase().endsWith(o));return Ve(i?r.slice(0,r.length-i.length):r)},Wn=e=>{let t=(e.split(/\s+/)[0]??"").replace(Pn,"");return kn.test(t)?"":(t.length>4&&t===t.toUpperCase()&&(t=t.replace(Gn,"")),Ve(t))},zn=Oe(e=>{let[n,t]=Fe(e),r=Hn(t),i=Wn(n);return!r||!i?r||i:r.toLowerCase()===i.toLowerCase()?i===i.toUpperCase()?r:i:r.toLowerCase().startsWith(`${i.toLowerCase()} `)?i:r}),He=(e,n)=>zn(`${e}
3
+ ${n}`),$n=Oe(e=>{let[n,t]=Fe(e),i=((n.split("//").pop()??"").split(Ln)[0].split("@").pop()??"").split(":")[0],o=(t.split("@")[1]??"").toLowerCase(),a=(i||o).toLowerCase().replace(/^www\./,""),s=a.split(".").pop()??"";return s.length>2&&o.split(".")[0]===s&&a!==o?o:a}),We=(e,n)=>$n(`${e}
4
+ ${n}`),ze=(e,n)=>e==="public_proxy"&&vn.has(n)?["residential_proxy","inferred"]:[e,""],$e=e=>xn[e]??"";var te=`
5
5
  ADAND020Andorra|Principality of Andorra|
6
6
  AEARE784United Arab Emirates
7
7
  AFAFG004Afghanistan|Islamic Republic of Afghanistan|
@@ -252,7 +252,7 @@ ZAZAF710South Africa|Republic of South Africa|
252
252
  ZMZMB894Zambia|Republic of Zambia|
253
253
  ZWZWE716Zimbabwe|Republic of Zimbabwe|
254
254
  `.trim().split(`
255
- `);var Pe=`
255
+ `);var Ze=`
256
256
  Africa/Abidjan|GMT
257
257
  Africa/Accra|GMT
258
258
  Africa/Addis_Ababa|EAT
@@ -621,5 +621,5 @@ W-SU|MSK
621
621
  WET|WET|WEST
622
622
  Zulu|UTC
623
623
  `.trim().split(`
624
- `);var Ln=new Set("AT BE BG HR CY CZ DK EE FI FR DE GR HU IE IT LV LT LU MT NL PL PT RO SK SI ES SE".split(" ")),Pn=new Set("AG AI AU BB BD BM BN BS BT BW CC CK CX CY DM FJ FK GB GD GG GY HK ID IE IM IN JE JM JP KE KI KN KY LC LK LS MO MS MT MU MV MW MY MZ NA NF NP NR NU NZ PG PK PN SB SC SG SH SR SZ TC TH TL TO TT TV TZ UG VC VG WS ZA ZM ZW".split(" ")),R=864e5,_n=7*R,Y=400*R,U=6e4,Kn=new Map(j.map(e=>{let[n,t="",r=""]=e.slice(8).split("|");return[e.slice(0,2),[n,t,r,e.slice(2,5)]]})),xn=new Map(j.map(e=>[e.slice(0,2),e.slice(5,8)])),_e=e=>e||null,vn=e=>e.length!==2||!/^[a-zA-Z]{2}$/.test(e)?"":[...e.toUpperCase()].map(n=>String.fromCodePoint(127462+n.charCodeAt(0)-65)).join(""),Ke=new Map,Fe=e=>{if(!e)return null;let n=Ke.get(e);if(n!==void 0)return n;let t=Kn.get(e),r={code:e,name:t?t[0]:null,official:t?_e(t[1]):null,common:t?_e(t[2]):null,iso3:t?t[3]:null,numeric:xn.get(e)??null,flag:vn(e)||null,european_union:Ln.has(e),driving_side:Pn.has(e)?"left":"right"};return Ke.set(e,r),r},On=new Map(Pe.map(e=>{let[n,t,r=t]=e.split("|");return[n,[t,r]]})),xe=new Map,Fn=e=>{let n=xe.get(e);if(n!==void 0)return n;let t=null;try{t=new Intl.DateTimeFormat("en-US",{timeZone:e,hour12:!1,era:"short",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{t=null}return xe.set(e,t),t},He=(e,n)=>{let t={};for(let o of e.formatToParts(n))t[o.type]=o.value;let r=Number(t.year)*(t.era==="BC"?-1:1),i=t.hour==="24"?0:Number(t.hour);return Date.UTC(r,Number(t.month)-1,Number(t.day),i,Number(t.minute),Number(t.second))},J=(e,n)=>Math.round((He(e,n)-n)/U),M=(e,n)=>{let t=J(e,n-R),r=J(e,n+R);if(t===r)return t;let i=[t,r].filter(o=>J(e,n-o*U)===o);return i.length?Math.max(...i):Math.min(t,r)},q=e=>{let n=Math.abs(e),t=String(Math.floor(n/60)).padStart(2,"0");return`${e<0?"-":"+"}${t}:${String(n%60).padStart(2,"0")}`},ve=(e,n)=>new Date(n).toISOString().slice(0,19)+q(M(e,n)),Hn=(e,n,t,r)=>{for(;t-n>1e3;){let i=n+Math.floor((t-n)/2);M(e,i)===r?n=i:t=i}return Math.floor((t+3e4)/U)*U},Vn=(e,n)=>{let t=n+Y,r=[],i=n-Y,o=M(e,i);for(;i<t;){let a=i+_n,s=M(e,a);s!==o&&r.push(Hn(e,i,a,o)),o=s,i=a}return r},O=new Map,Wn=(e,n,t)=>{let r=Math.floor(t/R)*R+R/2,i=`${e}@${r}`,o=O.get(i);if(o!==void 0)return o;O.size>2048&&O.clear();let a=Vn(n,r),s=[M(n,r-Y),...a.map(f=>M(n,f))],l=Math.min(...s),c=Math.max(...s),u=[l,null,null];for(let f=0;l!==c&&f+1<a.length;f+=1){let[T,m]=[a[f],a[f+1]];if(M(n,T)===c&&m>=r){u=[l,T,m];break}}return O.set(i,u),u},zn=(e,n,t)=>{let r=On.get(e);if(r)return t?r[1]:r[0];let i=Math.abs(n),o=String(Math.floor(i/60)).padStart(2,"0"),a=i%60;return`${n<0?"-":"+"}${o}`+(a?String(a).padStart(2,"0"):"")},Oe=(e,n)=>{let t=Fn(e);if(t===null)return{timezone:e,abbreviation:null,local:null,utc_offset:null,is_dst:!1,dst_start:null,dst_end:null};let r=He(t,n),i=Math.round((r-n)/U),[o,a,s]=Wn(e,t,r);return{timezone:e,abbreviation:zn(e,i,i!==o),local:new Date(r).toISOString().slice(0,19)+q(i),utc_offset:q(i),is_dst:i!==o,dst_start:a===null?null:ve(t,a),dst_end:s===null?null:ve(t,s)}},F=new Map,Ve=(e,n)=>{if(!e)return null;if(n)return Oe(e,n.getTime());let t=Math.floor(Date.now()/1e3),r=`${e}@${t}`,i=F.get(r);if(i!==void 0)return i;F.size>1024&&F.clear();let o=Oe(e,t*1e3);return F.set(r,o),o};var Ze=(e,n)=>{let t=new Int32Array(e.length),r=n;for(let i=0;i<e.length;i+=1)t[i]=r,r+=1<<e[i];return t},X=new Uint8Array([...Array(16).fill(0),1,1,1,1,2,2,3,3,4,6,7,8,9,10,11,12,13,14,15,16]),ee=new Uint8Array([...Array(32).fill(0),1,1,1,1,2,2,3,3,4,4,5,7,8,9,10,11,12,13,14,15,16]),Zn=Ze(X,0),$n=Ze(ee,3),jn=[4,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,2,1,1,1,1,1,-1,-1,-1,-1],Jn=[1,4,3,2,2,2,2,2,2,...Array(37).fill(1),...Array(7).fill(-1)],Yn=[1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1],E=e=>{throw new Error(`zstd: ${e}`)},D=e=>{let n=0;for(;1<<n<=e;)n+=1;return n-1},ne=(e,n,t)=>{let r=1<<t,i={log:t,symbols:new Uint8Array(r),bits:new Uint8Array(r),next:new Uint16Array(r)},o=new Uint16Array(256),a=r;for(let c=0;c<n;c+=1)e[c]<0?(o[c]=1,a-=1,i.symbols[a]=c):o[c]=e[c];let s=(r>>1)+(r>>3)+3,l=0;for(let c=0;c<n;c+=1)for(let u=0;u<e[c];u+=1){i.symbols[l]=c;do l=l+s&r-1;while(l>=a)}l!==0&&E("the symbols do not spread over the table");for(let c=0;c<r;c+=1){let u=o[i.symbols[c]]++,f=t-D(u);i.bits[c]=f,i.next[c]=(u<<f)-r}return i},w=(e,n,t)=>{let r=(e[n]&15)+5;r>t&&E("an entropy table is too accurate");let i=new Int16Array(256),o=(n<<3)+4,a=1<<r,s=-1;for(;s<255&&a>0;){let l=D(a+1),c=o>>3,u=(1<<l+1)-1,f=(e[c]|e[c+1]<<8|e[c+2]<<16)>>(o&7),T=f&(1<<l)-1,m=u-a-1,d=f&u;if(T<m?(o+=l,d=T):(o+=l+1,d>(1<<l)-1&&(d-=m)),d-=1,s+=1,i[s]=d,a-=d<0?-d:d,d!==0)continue;let p=3;for(;p===3;){let A=o>>3;p=(e[A]|e[A+1]<<8)>>(o&7)&3,o+=2,s+=p}}return(s>255||a!==0)&&E("the entropy counts do not add up"),[ne(i,s+1,r),o+7>>3]},We=(e,n)=>{let t=0;for(let c=0;c<n;c+=1){let u=e[c];u>11&&E("a huffman weight is out of range"),t+=u?1<<u-1:0}let r=D(t)+1,i=1<<r,o=i-t;o&o-1&&E("the huffman weights do not add up"),e[n]=D(o)+1;let a=new Uint32Array(13);for(let c=0;c<=n;c+=1)e[c]=e[c]&&r+1-e[c],a[e[c]]+=1;let s={maxBits:r,symbols:new Uint8Array(i),bits:new Uint8Array(i)},l=new Uint32Array(13);for(let c=r;c>0;c-=1){let u=l[c];l[c-1]=u+a[c]*(1<<r-c),s.bits.fill(c,u,l[c-1])}l[0]!==i&&E("the huffman codes do not fill the table");for(let c=0;c<=n;c+=1){let u=e[c];if(!u)continue;let f=l[u];l[u]=f+(1<<r-u),s.symbols.fill(c,f,l[u])}return s},$e=(e,n)=>{let t=e[n],r=new Uint8Array(256);if(t>=128){let p=t-127;for(let A=0;A<p;A+=2){let g=e[n+1+(A>>1)];r[A]=g>>4,r[A+1]=g&15}return[We(r,p),n+1+(p+1>>1)]}let[i,o]=w(e,n+1,6),a=n+1+t,s=e[a-1];s||E("a huffman bitstream ends on a zero byte");let l=o<<3,c=(a<<3)-8+D(s),u=0,f=0,T=0,m=i.log,d=i.log;for(;c-=m,!(c<l);){let p=c>>3;if(f+=(e[p]|e[p+1]<<8)>>(c&7)&(1<<m)-1,r[u]=i.symbols[f],u+=1,c-=d,c<l)break;p=c>>3,T+=(e[p]|e[p+1]<<8)>>(c&7)&(1<<d)-1,r[u]=i.symbols[T],u+=1,m=i.bits[f],f=i.next[f],d=i.bits[T],T=i.next[T]}return[We(r,u),a]},ze=(e,n,t)=>{let r=e[e.length-1];r||E("a literal bitstream ends on a zero byte");let i=(1<<n.maxBits)-1,o=-n.maxBits,a=n.maxBits,s=(e.length<<3)-8+D(r)-a,l=0,c=0;for(;s>o&&c<t.length;){let u=s>>3,f=(e[u]|e[u+1]<<8|e[u+2]<<16)>>(s&7);l=(l<<a|f)&i,t[c]=n.symbols[l],c+=1,a=n.bits[l],s-=a}(s!==o||c!==t.length)&&E("a literal bitstream is the wrong length")},qn=(e,n,t,r)=>{if(!r){ze(e,n,t);return}let i=t.length+3>>2,o=6;for(let a=0;a<4;a+=1){let s=e[a<<1]|e[(a<<1)+1]<<8,l=a===3?e.length:o+s,c=i*a;ze(e.subarray(o,l),n,t.subarray(c,c+i)),o=l}},Qn=()=>{let e=(n,t)=>{let r=new Int16Array(256);return r.set(n),ne(r,n.length,t)};return{literal:e(jn,6),match:e(Jn,6),offset:e(Yn,5)}},Q=Qn(),Xn=e=>ne(Int16Array.of(...Array(e).fill(0),1),e+1,0),et=(e,n,t)=>{let r=e[n],i=r&3,o=r>>2&3,a=r>>4,s=0,l=n;if(i<2)return o&1?(a|=e[l+1]<<4,l+=1,o&2&&(a|=e[l+1]<<12,l+=1)):a=r>>3,l+=1,i===0?[{data:e.subarray(l,l+a),size:a},l+a]:[{data:new Uint8Array(a).fill(e[l]),size:a},l+1];if(o<2?(a|=(e[n+1]&63)<<4,s=e[n+1]>>6|e[n+2]<<2,l=n+3):o===2?(a|=e[n+1]<<4|(e[n+2]&3)<<12,s=e[n+2]>>2|e[n+3]<<6,l=n+4):(a|=e[n+1]<<4|(e[n+2]&63)<<12,s=e[n+2]>>6|e[n+3]<<2|e[n+4]<<10,l=n+5),i===2){let[f,T]=$e(e,l);t.huffman=f,s-=T-l,l=T}let c=t.huffman??E("literals without a huffman table"),u=new Uint8Array(a);return qn(e.subarray(l,l+s),c,u,o!==0),[{data:u,size:a},l+s]},nt=(e,n,t)=>{let r=e[n];r&3&&E("a sequence header reserves bits that are set");let i=t.tables,o=[i?.match??null,i?.offset??null,i?.literal??null],s=[...[Q.match,Q.offset,Q.literal]],l=n+1;for(let u=2;u>-1;u-=1){let f=r>>(u<<1)+2&3;if(f===1)s[u]=Xn(e[l]),l+=1;else if(f===2){let[T,m]=w(e,l,9-(u&1));s[u]=T,l=m}else f===3&&(s[u]=o[u]??E("a repeated table was never sent"))}let c={match:s[0],offset:s[1],literal:s[2]};return t.tables=c,[c,l]},tt=(e,n)=>{let t=e[n];return t<128?[t,n+1]:t<255?[t-128<<8|e[n+1],n+2]:[(e[n+1]|e[n+2]<<8)+32512,n+3]},rt=(e,n,t)=>{if(e>3)return t[2]=t[1],t[1]=t[0],t[0]=e-3,t[0];let r=e-(n!==0?1:0);if(r===0)return t[0];let i=r===3?t[0]-1:t[r];return r>1&&(t[2]=t[1]),t[1]=t[0],t[0]=i,i},it=(e,n,t,r,i,o,a,s)=>{let[l]=nt(e,n,o),c=e[t-1];c||E("a sequence bitstream ends on a zero byte");let u=(g,I)=>{let y=g>>3,B=(e[y]|e[y+1]<<8|e[y+2]<<16|e[y+3]<<24)>>>(g&7);return I===32?B:B&(1<<I)-1},f=(t<<3)-8+D(c)-l.literal.log,T=u(f,l.literal.log);f-=l.offset.log;let m=u(f,l.offset.log);f-=l.match.log;let d=u(f,l.match.log),p=0,A=s;for(let g=0;g<r;g+=1){let I=l.literal.symbols[T],y=l.literal.bits[T],B=l.match.symbols[d],be=l.match.bits[d],H=l.offset.symbols[m],me=l.offset.bits[m];f-=H;let en=(1<<H)+u(f,H);f-=ee[B];let pe=$n[B]+u(f,ee[B]);f-=X[I];let K=Zn[I]+u(f,X[I]);f-=y,T=l.literal.next[T]+u(f,y),f-=be,d=l.match.next[d]+u(f,be),f-=me,m=l.offset.next[m]+u(f,me);let de=rt(en,K,o.offsets);a.set(i.data.subarray(p,p+K),A),p+=K,A+=K,de>A&&E("a match reaches before the window");for(let x=0;x<pe;x+=1)a[A+x]=a[A+x-de];A+=pe}return a.set(i.data.subarray(p,i.size),A),A+i.size-p},at=(e,n,t,r,i,o)=>{let[a,s]=et(e,n,r),[l,c]=tt(e,s);return l===0?(i.set(a.data.subarray(0,a.size),o),o+a.size):it(e,c,t,l,a,r,i,o)},ot=e=>{((e[0]|e[1]<<8|e[2]<<16)!==3126568||e[3]!==253)&&E("not a zstd frame");let t=e[4],r=t>>5&1,i=t>>6,o=6-r+(t&3?(t&3)===3?4:t&3:0),a=i?1<<i:r,s=0;for(let l=0;l<a;l+=1)s+=e[o+l]*256**l;return[o+a,a?s+(i===1?256:0):0]},st=(e,n)=>{if(n<=e.length)return e;let t=new Uint8Array(Math.max(n,e.length*2));return t.set(e),t},te=(e,n)=>{let[t,r]=ot(e),i=n?n.content:new Uint8Array(0),o={huffman:n?.huffman??null,tables:n?.tables??null,offsets:Int32Array.from(n?n.offsets:[1,4,8])},a=new Uint8Array(i.length+(r||65536));a.set(i);let s=i.length,l=t;for(;;){let c=e[l]|e[l+1]<<8|e[l+2]<<16,u=c>>1&3,f=c>>3;if(l+=3,a=st(a,s+f+(1<<17)),u===0?(a.set(e.subarray(l,l+f),s),s+=f,l+=f):u===1?(a.fill(e[l],s,s+f),s+=f,l+=1):u===2?(s=at(e,l,l+f,o,a,s),l+=f):E("a block has no known type"),c&1)break}return a.subarray(i.length,s)},re=e=>{let n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(n.getUint32(0,!0)!==3962610743)return{id:0,content:e,huffman:null,tables:null,offsets:[1,4,8]};let[t,r]=$e(e,8),[i,o]=w(e,r,8),[a,s]=w(e,o,9),[l,c]=w(e,s,9);return{id:n.getUint32(4,!0),content:e.subarray(c+12),huffman:t,tables:{literal:l,match:a,offset:i},offsets:[0,1,2].map(u=>n.getUint32(c+u*4,!0))}};var G="PLEVIN\0",je=1,lt=16384,ct=1e4,ut=255,ie=16384,ft=["place","network","abuse","prefix","rpki","roas"],Tt=new Set(["place","network","abuse"]),Je="network",bt={rpki:"rpki","place.granularity":"granularity","city.timezone":"timezones","city.type":"place_types","operator.category":"categories","abuse.user_type":"categories","abuse.service":"services","abuse.evidence":"evidence"},mt=e=>e===ut?null:e/100,pt={"abuse.risk":mt,"abuse.is_anycast":Boolean,"abuse.is_satellite":Boolean},se=new TextDecoder,dt=new Uint8Array(Uint16Array.of(1).buffer)[0]===0,C=class{held=new Map;build;limit;constructor(n,t=lt){this.build=n,this.limit=t}get(n){let t=this.held.get(n);if(t!==void 0)return t;this.held.size>=this.limit&&this.held.clear();let r=this.build(n);return this.held.set(n,r),r}clear(){this.held.clear()}},Te=(e,n)=>{let t=0,r=1;for(;;){let i=e[n];if(n+=1,t+=(i&127)*r,i<128)return[t,n];r*=128}},le=(e,n,t)=>{let r=[];for(let i=0;i<t;i+=1){let[o,a]=Te(e,n);r.push(o),n=a}return[r,n]},ae=(e,n,t)=>{let r=[];for(let i=0;i<t;i+=1){let o=0n,a=0n;for(;;){let s=e[n];if(n+=1,o|=BigInt(s&127)<<a,s<128)break;a+=7n}r.push(o)}return[r,n]},k=class{count;read;perBlock;perGroup;fanout;width;blocks;keys;offsets;data;dictionary;cache;groups;constructor(n,t){let r=new DataView(n.buffer,n.byteOffset,n.byteLength);this.count=t.count,this.read=t.read,this.perBlock=t.block,this.perGroup=t.group,this.fanout=this.perBlock/this.perGroup,this.blocks=r.getUint32(0,!0),this.width=r.getUint32(4,!0);let i=r.getUint32(8,!0);this.offsets=new Uint32Array(this.blocks+1);for(let a=0;a<=this.blocks;a+=1)this.offsets[a]=r.getUint32(12+a*4,!0);let o=12+4*(this.blocks+1);this.keys=[];for(let a=0;a<this.blocks;a+=1){let s=0n;for(let l=0;l<this.width;l+=1)s=s<<8n|BigInt(n[o+a*this.width+l]);this.keys.push(s)}o+=this.width*this.blocks,this.dictionary=i?re(n.subarray(o,o+i)):null,this.data=n.subarray(o+i),this.cache=new C(a=>this.block(a)),this.groups=new C(a=>this.values(a))}raw(n){let t=this.data.subarray(this.offsets[n],this.offsets[n+1]);return te(t,this.dictionary)}held(n){return Math.min(this.perGroup,this.count-n*this.perGroup)}block(n){throw new Error(`no block ${n}`)}values(n){throw new Error(`no group ${n}`)}at(n){throw new Error(`no row ${n}`)}},At={1:[Uint8Array,Int8Array],2:[Uint16Array,Int16Array],4:[Uint32Array,Int32Array],8:[BigUint64Array,BigInt64Array]},ce=class extends k{signed;constructor(n,t){super(n,t),this.signed=t.encoding==="signed"}block(n){let t=this.raw(n),r=t[0],i=t.slice(1);if(dt&&r>1)for(let o=0;o+r<=i.length;o+=r)i.subarray(o,o+r).reverse();return new At[r][this.signed?1:0](i.buffer)}at(n){let t=Math.floor(n/this.perBlock),r=this.cache.get(t)[n%this.perBlock];return typeof r=="bigint"?Number(r):r}},ue=class extends k{block(n){let t=this.raw(n),r=this.count-n*this.perBlock,i=Math.min(this.fanout,Math.ceil(r/this.perGroup))-1,[o,a]=le(t,0,i),s=[a];for(let l of o)s.push(s[s.length-1]+l);return s.push(t.length),[t,s]}values(n){let t=Math.floor(n/this.fanout),[r,i]=this.cache.get(t),o=i[n%this.fanout],a=[],s=new Uint8Array(0);for(let l=0;l<this.held(n);l+=1){let c=r[o],u=r[o+1];o+=2,u>127&&([u,o]=Te(r,o-1));let f=new Uint8Array(c+u);f.set(s.subarray(0,c)),f.set(r.subarray(o,o+u),c),o+=u,s=f,a.push(se.decode(f))}return a}at(n){if(!n)return"";let t=Math.floor((n-1)/this.perGroup);return this.groups.get(t)[(n-1)%this.perGroup]}},fe=class extends k{hostBits;big;constructor(n,t){super(n,t),this.big=this.width!==4,this.hostBits=this.big?64:0}block(n){let t=this.raw(n),[r,i]=Te(t,0),o=Math.ceil(r/this.perGroup),[a,s]=ae(t,i,o-1),l=[this.keys[n]];for(let T of a)l.push(l[l.length-1]+T);let[c,u]=le(t,s,o-1),f=[u];for(let T of c)f.push(f[f.length-1]+T);return[l,f,t]}values(n){let t=Math.floor(n/this.fanout),[r,i,o]=this.cache.get(t),a=this.held(n),s=r[n%this.fanout],[l,c]=this.big?ae(o,i[n%this.fanout],a-1):le(o,i[n%this.fanout],a-1);if(!this.big){let T=[Number(s)];for(let m of l)T.push(T[T.length-1]+m);return T}let u=[s>>BigInt(this.hostBits)];for(let T of l)u.push(u[u.length-1]+T);let[f]=ae(o,c,a);return u.map((T,m)=>T<<BigInt(this.hostBits)|f[m])}at(n){let t=Math.floor(n/this.perGroup);return this.groups.get(t)[n%this.perGroup]}row(n){let t=(this.big,n),r=oe(this.keys,this.big?t:BigInt(t))-1;if(r<0)return null;let[i]=this.cache.get(r),o=r*this.fanout+oe(i,this.big?t:BigInt(t))-1,a=oe(this.groups.get(o),t)-1;return a<0?null:o*this.perGroup+a}holds(n){let t=this.row(n);return t!==null&&this.at(t)===n?t:null}},oe=(e,n)=>{let t=0,r=e.length;for(;t<r;){let i=t+r>>1;e[i]<=n?t=i+1:r=i}return t},St={plain:[],text:[],degrees:[],coded:[],links:[]},L=class{head;sections={};reads={};tables={};families;rows={};located;answers=new C(n=>this.answer(n));constructor(n){let t=new DataView(n.buffer,n.byteOffset,n.byteLength);if(se.decode(n.subarray(0,G.length))!==G||n[G.length]!==je)throw new Error(`not a plevin ${je} database`);let i=t.getUint32(G.length+1,!0),o=G.length+5;this.head=JSON.parse(se.decode(n.subarray(o,o+i)));let a=o+i;for(let[s,l]of Object.entries(this.head.sections)){let c=a+l.offset,u=n.subarray(c,c+l.bytes),f=l.encoding==="index"?fe:l.encoding==="front"?ue:ce;this.sections[s]=new f(u,l)}Object.assign(this.reads,pt);for(let[s,l]of Object.entries(bt)){let c=this.head.vocabularies[l];c&&(this.reads[s]=u=>c[u]??"")}this.plan(),this.families={4:this.family(4),6:this.family(6)},this.located={4:new C(s=>this.locateIn(4,s)),6:new C(s=>this.locateIn(6,s))}}linked(n,t){return this.rows[n]??=new C(r=>this.row(n,r)),this.rows[n].get(t)}get built(){return this.head.built}get selection(){return this.head.selection}get fields(){return this.head.fields}plan(){for(let[n,t]of Object.entries(this.sections)){let r=n.split(".");if(r.length!==3||r[0]!=="col"&&r[0]!=="link")continue;let[i,o,a]=r;this.tables[o]??={plain:[],text:[],degrees:[],coded:[],links:[]};let s=this.tables[o],l=this.reads[`${o}.${a}`];i==="link"?s.links.push([a,t]):l?s.coded.push([a,t,l]):t.read==="text"?s.text.push([a,t,this.sections.strings]):t.read?s.degrees.push([a,t]):s.plain.push([a,t])}}family(n){let t=`spine.v${n}`,r=`hosts.v${n}`;return{index:this.sections[t]??null,columns:ft.filter(i=>`${t}.${i}`in this.sections).map(i=>[i,this.sections[`${t}.${i}`],this.reads[i]??null]),hosts:this.sections[r]??null,records:this.sections[`${r}.abuse`]??null}}row(n,t){let r=this.tables[n]??St,i={};for(let[o,a]of r.plain)i[o]=a.at(t);for(let[o,a,s]of r.text)i[o]=s.at(a.at(t));for(let[o,a]of r.degrees)i[o]=a.at(t)/ct;for(let[o,a,s]of r.coded)i[o]=s(a.at(t));for(let[o,a]of r.links){let s=a.at(t);s&&(i[o]=this.linked(o,s-1))}return"postal_partial"in i&&(i.postal_partial=String(i.postal).slice(0,i.postal_partial)),i}answer(n){let t=n%2?6:4,r=(n-n%2)/2,i=r%ie,o=(r-i)/ie,a={};for(let[s,l,c]of this.families[t].columns){let u=i&&s==="abuse"?i:l.at(o);Tt.has(s)?u&&(a[s]=this.linked(s,u-1)):(a[Je]??={},a[Je][s]=c?c(u):u)}return a}locateIn(n,t){let{index:r,hosts:i,records:o}=this.families[n],a=r===null?null:r.row(t);if(a===null)return null;if(i===null||o===null)return[n,a,0];let s=i.holds(t);return[n,a,s===null?0:o.at(s)+1]}locate(n,t){return this.located[t?6:4].get(n)}rowFor(n,t){let r=this.locate(n,t);return r===null?null:this.answerFor(r)}answerFor(n){let[t,r,i]=n;return this.answers.get((r*ie+i)*2+(t===6?1:0))}};var Ye=1024,Bt=1n<<128n,b=e=>e?String(e):null,S=e=>e?Number(e):null,_=e=>e==null?null:Number(e),h=(e,n)=>e?.[n],Nt=e=>e?{code:S(e.code),label:b(e.label)}:null,Ut=e=>e?{id:S(e.id),code:b(e.code),name:b(e.name)}:null,wt=e=>e?{id:S(e.id),code:b(e.code),iso:b(e.iso),name:b(e.name),type:b(e.type)}:null,Qe=e=>{let n=new WeakMap;return(t,...r)=>{if(!t)return null;let i=r.join(`
625
- `),o=n.get(t);o||(o=new Map,n.set(t,o));let a=o.get(i);if(a!==void 0)return a;let s=e(t,...r);return o.set(i,s),s}},Xe=Qe(e=>{let n=String(e.type??"");return{id:S(e.id),name:b(e.name),ascii:b(e.ascii),country:b(e.country),population:S(e.population),elevation:S(e.elevation),postal:b(e.postal),postal_partial:b(e.postal_partial),timezone:b(e.timezone),type:b(n),capital:b(Le(n)),region:wt(h(e,"region")),district:Ut(h(e,"district")),metro:Nt(h(e,"metro"))}}),Gt=Qe((e,n)=>{let t=String(e.company??""),r=String(e.website??""),i=String(e.abuse_email??"");return{company:b(t),brand:b(we(n,t)),domain:b(Ge(r,i)),website:b(r),category:b(e.category),tier:S(e.tier),peering:S(e.peering),scope:b(e.scope),rir:b(e.rir),since:S(e.since),street:b(e.street),state:b(e.state),postal:b(e.postal),country:b(e.country),abuse_email:b(i),city:Xe(h(e,"city"))}}),kt=(e,n)=>{if(!e&&!n)return null;let t=e??{};return{user_type:b(n),user_count:S(t.user_count),mcc:S(t.mcc),mnc:S(t.mnc),is_mobile:n==="cellular"}},Lt=(e,n,t)=>{if(!e&&!n)return null;let r=e??{},[i,o]=ke(String(r.service??""),t);return{name:b(r.name),service:b(i),evidence:b(String(r.evidence??"")||o),risk:_(r.risk),network_risk:n?_(n.risk):null,last_seen_days:S(r.last_seen_days),is_anycast:!!r.is_anycast,is_satellite:!!r.is_satellite,is_hosting_provider:De.has(t),is_proxy:Ie.has(i),is_public_proxy:i==="public_proxy",is_residential_proxy:i==="residential_proxy",is_anonymous_vpn:i==="anonymous_vpn",is_tor_exit_node:i==="tor_exit_node",is_private_relay:i==="private_relay",is_anonymous:!!i}},Pt=e=>{if(!e)return null;let n=Xe(h(e,"city")),t=n?.country??"",r=n?.timezone??"";return[{lat:_(e.lat),lon:_(e.lon),accuracy:S(e.accuracy),confidence:S(e.confidence),granularity:b(e.granularity),city:n,country:Fe(t)},r]},_t=(e,n)=>{if(!e)return null;let t=String(e.handle??"");return[{asn:S(e.asn),handle:b(t),rpki:b(e.rpki),roas:_(e.roas),operator:Gt(h(e,"operator"),t),carrier:kt(h(e,"carrier"),n)},S(e.prefix)]},Kt=(e,n)=>String(e?.user_type||n?.user_type||""),xt=e=>{let n=h(e,"network"),t=h(n,"abuse"),r=Kt(h(e,"abuse"),t);return[Pt(h(e,"place")),_t(n,r),Lt(h(e,"abuse"),t,r)]},vt=(e,n,t)=>{let[r,i]=e,[o,a,s]=i===null?[null,null,null]:Re(n,t,i);return{...r,prefix:i,cidr:o,start:a,end:s}},qe=(e,n,t,r)=>{let[i,o,a]=Z(e,n),s=Ce(e,n),[l,c]=ye(e,n),[u,f,T]=t??[null,null,null];return{ip:i,version:n?6:4,number:e,compressed:i,expanded:o,arpa:a,is_global:s===0,is_bogon:s!==0,is_private:(s&1)!==0,is_loopback:(s&2)!==0,is_multicast:(s&4)!==0,is_reserved:(s&8)!==0,is_link_local:(s&16)!==0,is_unique_local:(s&32)!==0,is_documentation:(s&64)!==0,is_shared:(s&128)!==0,is_benchmark:(s&256)!==0,is_ipv4_mapped:l===V,is_6to4:l===W,is_teredo:l===z,tunnel:l,embedded_ipv4:c,found:t!==null,place:u===null?null:{...u[0],time:Ve(u[1],r)},network:f===null?null:vt(f,e,n),abuse:T}},P=class{file;kept=new Map;results=new Map;second=0;constructor(n){this.file=new L(n)}get built(){return this.file.built}get selection(){return this.file.selection}get fields(){return this.file.fields}storedFor(n){let t=n.join(","),r=this.kept.get(t);if(r!==void 0)return r;this.kept.size>=Ye*16&&this.kept.clear();let i=xt(this.file.answerFor(n));return this.kept.set(t,i),i}lookup(n,t){let[r,i]=v(n);if(t){let u=this.file.locate(r,i);return qe(r,i,u&&this.storedFor(u),t)}let o=Math.floor(Date.now()/1e3);o!==this.second&&(this.second=o,this.results.clear());let a=i?r+Bt:BigInt(r),s=this.results.get(a);if(s!==void 0)return s;this.results.size>=Ye&&this.results.clear();let l=this.file.locate(r,i),c=qe(r,i,l&&this.storedFor(l));return this.results.set(a,c),c}row(n){let[t,r]=v(n);return this.file.rowFor(t,r)}},Qt=async e=>{if(e instanceof Uint8Array)return new P(e);if(e instanceof ArrayBuffer)return new P(new Uint8Array(e));let n=e instanceof Response?e:await fetch(e);if(!n.ok)throw new Error(`${n.status} reading the database`);return new P(new Uint8Array(await n.arrayBuffer()))};export{L as File,P as Plevin,te as decompress,re as loadDictionary,Qt as open};
624
+ `);var jn=new Set("AT BE BG HR CY CZ DK EE FI FR DE GR HU IE IT LV LT LU MT NL PL PT RO SK SI ES SE".split(" ")),Jn=new Set("AG AI AU BB BD BM BN BS BT BW CC CK CX CY DM FJ FK GB GD GG GY HK ID IE IM IN JE JM JP KE KI KN KY LC LK LS MO MS MT MU MV MW MY MZ NA NF NP NR NU NZ PG PK PN SB SC SG SH SR SZ TC TH TL TO TT TV TZ UG VC VG WS ZA ZM ZW".split(" ")),D=864e5,Yn=7*D,ie=400*D,L=6e4,qn=new Map(te.map(e=>{let[n,t="",r=""]=e.slice(8).split("|");return[e.slice(0,2),[n,t,r,e.slice(2,5)]]})),Qn=new Map(te.map(e=>[e.slice(0,2),e.slice(5,8)])),je=e=>e||null,Xn=e=>e.length!==2||!/^[a-zA-Z]{2}$/.test(e)?"":[...e.toUpperCase()].map(n=>String.fromCodePoint(127462+n.charCodeAt(0)-65)).join(""),Je=new Map,Xe=e=>{if(!e)return null;let n=Je.get(e);if(n!==void 0)return n;let t=qn.get(e),r={code:e,name:t?t[0]:null,official:t?je(t[1]):null,common:t?je(t[2]):null,iso3:t?t[3]:null,numeric:Qn.get(e)??null,flag:Xn(e)||null,european_union:jn.has(e),driving_side:Jn.has(e)?"left":"right"};return Je.set(e,r),r},et=new Map(Ze.map(e=>{let[n,t,r=t]=e.split("|");return[n,[t,r]]})),Ye=new Map,nt=e=>{let n=Ye.get(e);if(n!==void 0)return n;let t=null;try{t=new Intl.DateTimeFormat("en-US",{timeZone:e,hour12:!1,era:"short",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{t=null}return Ye.set(e,t),t},en=(e,n)=>{let t={};for(let o of e.formatToParts(n))t[o.type]=o.value;let r=Number(t.year)*(t.era==="BC"?-1:1),i=t.hour==="24"?0:Number(t.hour);return Date.UTC(r,Number(t.month)-1,Number(t.day),i,Number(t.minute),Number(t.second))},re=(e,n)=>Math.round((en(e,n)-n)/L),I=(e,n)=>{let t=re(e,n-D),r=re(e,n+D);if(t===r)return t;let i=[t,r].filter(o=>re(e,n-o*L)===o);return i.length?Math.max(...i):Math.min(t,r)},ae=e=>{let n=Math.abs(e),t=String(Math.floor(n/60)).padStart(2,"0");return`${e<0?"-":"+"}${t}:${String(n%60).padStart(2,"0")}`},qe=(e,n)=>new Date(n).toISOString().slice(0,19)+ae(I(e,n)),tt=(e,n,t,r)=>{for(;t-n>1e3;){let i=n+Math.floor((t-n)/2);I(e,i)===r?n=i:t=i}return Math.floor((t+3e4)/L)*L},rt=(e,n)=>{let t=n+ie,r=[],i=n-ie,o=I(e,i);for(;i<t;){let a=i+Yn,s=I(e,a);s!==o&&r.push(tt(e,i,a,o)),o=s,i=a}return r},j=new Map,it=(e,n,t)=>{let r=Math.floor(t/D)*D+D/2,i=`${e}@${r}`,o=j.get(i);if(o!==void 0)return o;j.size>2048&&j.clear();let a=rt(n,r),s=[I(n,r-ie),...a.map(f=>I(n,f))],l=Math.min(...s),c=Math.max(...s),u=[l,null,null];for(let f=0;l!==c&&f+1<a.length;f+=1){let[d,p]=[a[f],a[f+1]];if(I(n,d)===c&&p>=r){u=[l,d,p];break}}return j.set(i,u),u},at=(e,n,t)=>{let r=et.get(e);if(r)return t?r[1]:r[0];let i=Math.abs(n),o=String(Math.floor(i/60)).padStart(2,"0"),a=i%60;return`${n<0?"-":"+"}${o}`+(a?String(a).padStart(2,"0"):"")},Qe=(e,n)=>{let t=nt(e);if(t===null)return{timezone:e,abbreviation:null,local:null,utc_offset:null,is_dst:!1,dst_start:null,dst_end:null};let r=en(t,n),i=Math.round((r-n)/L),[o,a,s]=it(e,t,r);return{timezone:e,abbreviation:at(e,i,i!==o),local:new Date(r).toISOString().slice(0,19)+ae(i),utc_offset:ae(i),is_dst:i!==o,dst_start:a===null?null:qe(t,a),dst_end:s===null?null:qe(t,s)}},J=new Map,nn=(e,n)=>{if(!e)return null;if(n)return Qe(e,n.getTime());let t=Math.floor(Date.now()/1e3),r=`${e}@${t}`,i=J.get(r);if(i!==void 0)return i;J.size>1024&&J.clear();let o=Qe(e,t*1e3);return J.set(r,o),o};var ot=["1.1.1.1","8.8.8.8","9.9.9.9"],st=["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],oe=2e3,lt=4096,ct=36e5,ut=1232,ft=new Set([0,3]),U={A:1,CNAME:5,SOA:6,PTR:12,AAAA:28},dt=(e,n)=>{let t=e.split(".").filter(Boolean),r=t.reduce((s,l)=>s+l.length+1,0),i=new Uint8Array(12+r+1+4+11),o=new DataView(i.buffer);o.setUint16(0,Math.floor(Math.random()*65536)),o.setUint16(2,288),o.setUint16(4,1),o.setUint16(10,1);let a=12;for(let s of t){i[a]=s.length;for(let l=0;l<s.length;l+=1)i[a+1+l]=s.charCodeAt(l);a+=s.length+1}return a+=1,o.setUint16(a,U[n]),o.setUint16(a+2,1),o.setUint16(a+5,41),o.setUint16(a+7,ut),i},x=(e,n)=>{let t=[],r=n,i=-1;for(let o=0;o<128;o+=1){let a=e[r];if(a>=192){i<0&&(i=r+2),r=(a&63)<<8|e[r+1];continue}if(r+=1,!a)return[t.join("."),i<0?r:i];t.push(String.fromCharCode(...e.slice(r,r+a)).toLowerCase()),r+=a}throw new Error("name loops")},mt=(e,n,t)=>{if(t===U.A){let r=e.slice(n,n+4);return y((r[0]<<24>>>0)+(r[1]<<16)+(r[2]<<8)+r[3],!1)}if(t===U.AAAA){let r=0n;for(let i of e.slice(n,n+16))r=r<<8n|BigInt(i);return y(r,!0)}if(t===U.CNAME||t===U.PTR)return x(e,n)[0];if(t===U.SOA){let[r,i]=x(e,n);return`${r} ${x(e,i)[0]}`}return""},Tt=e=>{let n=new DataView(e.buffer,e.byteOffset),t=n.getUint16(2),r=[n.getUint16(4),n.getUint16(6),n.getUint16(8)],i=12;for(let a=0;a<r[0];a+=1)i=x(e,i)[1]+4;let o=[];for(let a of r.slice(1)){let s=[];for(let l=0;l<a;l+=1){let[c,u]=x(e,i),f=n.getUint16(u),d=n.getUint16(u+8);s.push({name:c,kind:f,data:mt(e,u+10,f)}),i=u+10+d}o.push(s)}return{code:t&15,authentic:(t&32)!==0,truncated:(t&512)!==0,answer:o[0],authority:o[1]}},K=(e,n,t="answer")=>e?(t==="any"?[...e.answer,...e.authority]:e.answer).filter(i=>i.kind===U[n]):[],_=(e,n)=>K(e,n).map(t=>t.data),se=e=>{try{let n=Tt(e);return ft.has(n.code)?n:null}catch{return null}},le=async e=>await import(e),pt=()=>typeof process<"u"&&!!process.versions?.node,tn=null,bt=async()=>(tn??=(async()=>{let e=[];try{let{getServers:t}=await le("node:dns");e.push(...t())}catch{}let n=e.map(t=>t.split("%")[0].replace(/^\[|]$/g,"")).filter(t=>!/^(fe80|169\.254)/i.test(t));return[...new Set([...n,...ot])]})(),tn),At=async(e,n)=>{let{connect:t}=await le("node:net");return new Promise(r=>{let i=t(53,e),o=[],a=0,s=l=>{i.destroy(),r(l)};i.setTimeout(oe,()=>s(null)),i.on("error",()=>s(null)),i.on("connect",()=>{let l=new Uint8Array(n.length+2);new DataView(l.buffer).setUint16(0,n.length),l.set(n,2),i.write(l)}),i.on("data",l=>{if(o.push(l),a+=l.length,a<2)return;let c=new Uint8Array(a),u=0;for(let d of o)c.set(d,u),u+=d.length;let f=new DataView(c.buffer).getUint16(0);a>=f+2&&s(se(c.slice(2,f+2)))})})},St=async(e,n)=>{let{createSocket:t}=await le("node:dgram"),r=await bt();return new Promise(i=>{let o=r.map(d=>t(d.includes(":")?"udp6":"udp4")),a=null,s=o.length,l=!1,c=d=>{if(!l){l=!0,clearTimeout(u);for(let p of o)p.close();i(d)}},u=setTimeout(()=>c(a),oe),f=async(d,p)=>{s-=1;let T=se(d);if(T?.truncated&&(T=await At(p,e)),T&&(!n||K(T,n,"any").length))return c(T);a??=T,s||c(a)};o.forEach((d,p)=>{let T=r[p];d.on("error",()=>{s-=1,s||c(a)}),d.on("message",b=>{f(b,T)}),d.send(e,53,T)}),o.length||c(null)})},ht=async(e,n)=>{let t=st.map(async i=>{let o=await fetch(i,{method:"POST",headers:{"content-type":"application/dns-message"},body:e,signal:AbortSignal.timeout(oe)});if(!o.ok)throw new Error(`${o.status} from ${i}`);let a=se(new Uint8Array(await o.arrayBuffer()));if(!a)throw new Error(`nothing from ${i}`);return a}),r=null;for(let i of await Promise.allSettled(t))if(i.status==="fulfilled"){if(!n||K(i.value,n,"any").length)return i.value;r??=i.value}return r},v=async([e,n,t])=>{let r=dt(e,n);return pt()?St(r,t):ht(r,t)},Et=(e,n)=>{let t=K(e,"SOA","any");if(!t.length)return;let[r,i]=t[0].data.split(" "),o=i.indexOf(".");n.zone=t[0].name,n.zone_primary=r,n.zone_contact=o<0?i:`${i.slice(0,o)}@${i.slice(o+1)}`},gt=e=>({asked:e,hostname:null,hostnames:[],ipv4:null,ipv6:null,ipv4_addresses:[],ipv6_addresses:[],alias:null,zone:null,zone_primary:null,zone_contact:null,is_confirmed:!1,is_signed:!1}),rn=async(e,n)=>{let t=G(e,n)[1],[r,i]=t?C(t):[e,n],[o,,a]=P(r,i),[s,l]=await Promise.all([v([a,"PTR",null]),v([a,"SOA","SOA"])]),c=gt(o);c.is_signed=!!s?.authentic,Et(l,c);let u=_(s,"PTR");if(!u.length)return c;c.hostname=u[0],c.hostnames=u;let[f,d]=await Promise.all([v([u[0],"A",null]),v([u[0],"AAAA",null])]);c.ipv4_addresses=_(f,"A"),c.ipv6_addresses=_(d,"AAAA"),c.ipv4=c.ipv4_addresses[0]??null,c.ipv6=c.ipv6_addresses[0]??null;let p=[..._(f,"CNAME"),..._(d,"CNAME")];c.alias=p[0]??null;let T=[...c.ipv4_addresses,...c.ipv6_addresses];return c.is_confirmed=T.some(b=>BigInt(C(b)[0])===BigInt(r)),c},Y=new Map,ce=async(e,n)=>{let t=`${n?6:4}:${e}`,r=Y.get(t);if(r&&r[0]>Date.now())return r[1];let i=await rn(e,n);return Y.size>=lt&&Y.clear(),Y.set(t,[Date.now()+ct,i]),i};var sn=(e,n)=>{let t=new Int32Array(e.length),r=n;for(let i=0;i<e.length;i+=1)t[i]=r,r+=1<<e[i];return t},fe=new Uint8Array([...Array(16).fill(0),1,1,1,1,2,2,3,3,4,6,7,8,9,10,11,12,13,14,15,16]),de=new Uint8Array([...Array(32).fill(0),1,1,1,1,2,2,3,3,4,4,5,7,8,9,10,11,12,13,14,15,16]),yt=sn(fe,0),Ct=sn(de,3),Rt=[4,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,2,1,1,1,1,1,-1,-1,-1,-1],Mt=[1,4,3,2,2,2,2,2,2,...Array(37).fill(1),...Array(7).fill(-1)],Dt=[1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1],h=e=>{throw new Error(`zstd: ${e}`)},w=e=>{let n=0;for(;1<<n<=e;)n+=1;return n-1},me=(e,n,t)=>{let r=1<<t,i={log:t,symbols:new Uint8Array(r),bits:new Uint8Array(r),next:new Uint16Array(r)},o=new Uint16Array(256),a=r;for(let c=0;c<n;c+=1)e[c]<0?(o[c]=1,a-=1,i.symbols[a]=c):o[c]=e[c];let s=(r>>1)+(r>>3)+3,l=0;for(let c=0;c<n;c+=1)for(let u=0;u<e[c];u+=1){i.symbols[l]=c;do l=l+s&r-1;while(l>=a)}l!==0&&h("the symbols do not spread over the table");for(let c=0;c<r;c+=1){let u=o[i.symbols[c]]++,f=t-w(u);i.bits[c]=f,i.next[c]=(u<<f)-r}return i},O=(e,n,t)=>{let r=(e[n]&15)+5;r>t&&h("an entropy table is too accurate");let i=new Int16Array(256),o=(n<<3)+4,a=1<<r,s=-1;for(;s<255&&a>0;){let l=w(a+1),c=o>>3,u=(1<<l+1)-1,f=(e[c]|e[c+1]<<8|e[c+2]<<16)>>(o&7),d=f&(1<<l)-1,p=u-a-1,T=f&u;if(d<p?(o+=l,T=d):(o+=l+1,T>(1<<l)-1&&(T-=p)),T-=1,s+=1,i[s]=T,a-=T<0?-T:T,T!==0)continue;let b=3;for(;b===3;){let A=o>>3;b=(e[A]|e[A+1]<<8)>>(o&7)&3,o+=2,s+=b}}return(s>255||a!==0)&&h("the entropy counts do not add up"),[me(i,s+1,r),o+7>>3]},an=(e,n)=>{let t=0;for(let c=0;c<n;c+=1){let u=e[c];u>11&&h("a huffman weight is out of range"),t+=u?1<<u-1:0}let r=w(t)+1,i=1<<r,o=i-t;o&o-1&&h("the huffman weights do not add up"),e[n]=w(o)+1;let a=new Uint32Array(13);for(let c=0;c<=n;c+=1)e[c]=e[c]&&r+1-e[c],a[e[c]]+=1;let s={maxBits:r,symbols:new Uint8Array(i),bits:new Uint8Array(i)},l=new Uint32Array(13);for(let c=r;c>0;c-=1){let u=l[c];l[c-1]=u+a[c]*(1<<r-c),s.bits.fill(c,u,l[c-1])}l[0]!==i&&h("the huffman codes do not fill the table");for(let c=0;c<=n;c+=1){let u=e[c];if(!u)continue;let f=l[u];l[u]=f+(1<<r-u),s.symbols.fill(c,f,l[u])}return s},ln=(e,n)=>{let t=e[n],r=new Uint8Array(256);if(t>=128){let b=t-127;for(let A=0;A<b;A+=2){let g=e[n+1+(A>>1)];r[A]=g>>4,r[A+1]=g&15}return[an(r,b),n+1+(b+1>>1)]}let[i,o]=O(e,n+1,6),a=n+1+t,s=e[a-1];s||h("a huffman bitstream ends on a zero byte");let l=o<<3,c=(a<<3)-8+w(s),u=0,f=0,d=0,p=i.log,T=i.log;for(;c-=p,!(c<l);){let b=c>>3;if(f+=(e[b]|e[b+1]<<8)>>(c&7)&(1<<p)-1,r[u]=i.symbols[f],u+=1,c-=T,c<l)break;b=c>>3,d+=(e[b]|e[b+1]<<8)>>(c&7)&(1<<T)-1,r[u]=i.symbols[d],u+=1,p=i.bits[f],f=i.next[f],T=i.bits[d],d=i.next[d]}return[an(r,u),a]},on=(e,n,t)=>{let r=e[e.length-1];r||h("a literal bitstream ends on a zero byte");let i=(1<<n.maxBits)-1,o=-n.maxBits,a=n.maxBits,s=(e.length<<3)-8+w(r)-a,l=0,c=0;for(;s>o&&c<t.length;){let u=s>>3,f=(e[u]|e[u+1]<<8|e[u+2]<<16)>>(s&7);l=(l<<a|f)&i,t[c]=n.symbols[l],c+=1,a=n.bits[l],s-=a}(s!==o||c!==t.length)&&h("a literal bitstream is the wrong length")},It=(e,n,t,r)=>{if(!r){on(e,n,t);return}let i=t.length+3>>2,o=6;for(let a=0;a<4;a+=1){let s=e[a<<1]|e[(a<<1)+1]<<8,l=a===3?e.length:o+s,c=i*a;on(e.subarray(o,l),n,t.subarray(c,c+i)),o=l}},Ut=()=>{let e=(n,t)=>{let r=new Int16Array(256);return r.set(n),me(r,n.length,t)};return{literal:e(Rt,6),match:e(Mt,6),offset:e(Dt,5)}},ue=Ut(),wt=e=>me(Int16Array.of(...Array(e).fill(0),1),e+1,0),Bt=(e,n,t)=>{let r=e[n],i=r&3,o=r>>2&3,a=r>>4,s=0,l=n;if(i<2)return o&1?(a|=e[l+1]<<4,l+=1,o&2&&(a|=e[l+1]<<12,l+=1)):a=r>>3,l+=1,i===0?[{data:e.subarray(l,l+a),size:a},l+a]:[{data:new Uint8Array(a).fill(e[l]),size:a},l+1];if(o<2?(a|=(e[n+1]&63)<<4,s=e[n+1]>>6|e[n+2]<<2,l=n+3):o===2?(a|=e[n+1]<<4|(e[n+2]&3)<<12,s=e[n+2]>>2|e[n+3]<<6,l=n+4):(a|=e[n+1]<<4|(e[n+2]&63)<<12,s=e[n+2]>>6|e[n+3]<<2|e[n+4]<<10,l=n+5),i===2){let[f,d]=ln(e,l);t.huffman=f,s-=d-l,l=d}let c=t.huffman??h("literals without a huffman table"),u=new Uint8Array(a);return It(e.subarray(l,l+s),c,u,o!==0),[{data:u,size:a},l+s]},Nt=(e,n,t)=>{let r=e[n];r&3&&h("a sequence header reserves bits that are set");let i=t.tables,o=[i?.match??null,i?.offset??null,i?.literal??null],s=[...[ue.match,ue.offset,ue.literal]],l=n+1;for(let u=2;u>-1;u-=1){let f=r>>(u<<1)+2&3;if(f===1)s[u]=wt(e[l]),l+=1;else if(f===2){let[d,p]=O(e,l,9-(u&1));s[u]=d,l=p}else f===3&&(s[u]=o[u]??h("a repeated table was never sent"))}let c={match:s[0],offset:s[1],literal:s[2]};return t.tables=c,[c,l]},kt=(e,n)=>{let t=e[n];return t<128?[t,n+1]:t<255?[t-128<<8|e[n+1],n+2]:[(e[n+1]|e[n+2]<<8)+32512,n+3]},Pt=(e,n,t)=>{if(e>3)return t[2]=t[1],t[1]=t[0],t[0]=e-3,t[0];let r=e-(n!==0?1:0);if(r===0)return t[0];let i=r===3?t[0]-1:t[r];return r>1&&(t[2]=t[1]),t[1]=t[0],t[0]=i,i},Gt=(e,n,t,r,i,o,a,s)=>{let[l]=Nt(e,n,o),c=e[t-1];c||h("a sequence bitstream ends on a zero byte");let u=(g,B)=>{let M=g>>3,N=(e[M]|e[M+1]<<8|e[M+2]<<16|e[M+3]<<24)>>>(g&7);return B===32?N:N&(1<<B)-1},f=(t<<3)-8+w(c)-l.literal.log,d=u(f,l.literal.log);f-=l.offset.log;let p=u(f,l.offset.log);f-=l.match.log;let T=u(f,l.match.log),b=0,A=s;for(let g=0;g<r;g+=1){let B=l.literal.symbols[d],M=l.literal.bits[d],N=l.match.symbols[T],Me=l.match.bits[T],q=l.offset.symbols[p],De=l.offset.bits[p];f-=q;let pn=(1<<q)+u(f,q);f-=de[N];let Ie=Ct[N]+u(f,de[N]);f-=fe[B];let $=yt[B]+u(f,fe[B]);f-=M,d=l.literal.next[d]+u(f,M),f-=Me,T=l.match.next[T]+u(f,Me),f-=De,p=l.offset.next[p]+u(f,De);let Ue=Pt(pn,$,o.offsets);a.set(i.data.subarray(b,b+$),A),b+=$,A+=$,Ue>A&&h("a match reaches before the window");for(let Z=0;Z<Ie;Z+=1)a[A+Z]=a[A+Z-Ue];A+=Ie}return a.set(i.data.subarray(b,i.size),A),A+i.size-b},Lt=(e,n,t,r,i,o)=>{let[a,s]=Bt(e,n,r),[l,c]=kt(e,s);return l===0?(i.set(a.data.subarray(0,a.size),o),o+a.size):Gt(e,c,t,l,a,r,i,o)},_t=e=>{((e[0]|e[1]<<8|e[2]<<16)!==3126568||e[3]!==253)&&h("not a zstd frame");let t=e[4],r=t>>5&1,i=t>>6,o=6-r+(t&3?(t&3)===3?4:t&3:0),a=i?1<<i:r,s=0;for(let l=0;l<a;l+=1)s+=e[o+l]*256**l;return[o+a,a?s+(i===1?256:0):0]},vt=(e,n)=>{if(n<=e.length)return e;let t=new Uint8Array(Math.max(n,e.length*2));return t.set(e),t},Te=(e,n)=>{let[t,r]=_t(e),i=n?n.content:new Uint8Array(0),o={huffman:n?.huffman??null,tables:n?.tables??null,offsets:Int32Array.from(n?n.offsets:[1,4,8])},a=new Uint8Array(i.length+(r||65536));a.set(i);let s=i.length,l=t;for(;;){let c=e[l]|e[l+1]<<8|e[l+2]<<16,u=c>>1&3,f=c>>3;if(l+=3,a=vt(a,s+f+(1<<17)),u===0?(a.set(e.subarray(l,l+f),s),s+=f,l+=f):u===1?(a.fill(e[l],s,s+f),s+=f,l+=1):u===2?(s=Lt(e,l,l+f,o,a,s),l+=f):h("a block has no known type"),c&1)break}return a.subarray(i.length,s)},pe=e=>{let n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(n.getUint32(0,!0)!==3962610743)return{id:0,content:e,huffman:null,tables:null,offsets:[1,4,8]};let[t,r]=ln(e,8),[i,o]=O(e,r,8),[a,s]=O(e,o,9),[l,c]=O(e,s,9);return{id:n.getUint32(4,!0),content:e.subarray(c+12),huffman:t,tables:{literal:l,match:a,offset:i},offsets:[0,1,2].map(u=>n.getUint32(c+u*4,!0))}};var F="PLEVIN\0",cn=1,xt=16384,Kt=1e4,Ot=255,be=16384,Ft=["place","network","abuse","prefix","rpki","roas","rir"],Vt=new Set(["place","network","abuse"]),un="network",Ht={rpki:"rpki",rir:"rirs","place.granularity":"granularity","city.timezone":"timezones","city.type":"place_types","operator.category":"categories","abuse.user_type":"categories","abuse.service":"services","abuse.evidence":"evidence"},Wt=e=>e===Ot?null:e/100,zt={"abuse.risk":Wt,"abuse.is_anycast":Boolean,"abuse.is_satellite":Boolean},he=new TextDecoder,$t=new Uint8Array(Uint16Array.of(1).buffer)[0]===0,R=class{held=new Map;build;limit;constructor(n,t=xt){this.build=n,this.limit=t}get(n){let t=this.held.get(n);if(t!==void 0)return t;this.held.size>=this.limit&&this.held.clear();let r=this.build(n);return this.held.set(n,r),r}clear(){this.held.clear()}},Re=(e,n)=>{let t=0,r=1;for(;;){let i=e[n];if(n+=1,t+=(i&127)*r,i<128)return[t,n];r*=128}},Ee=(e,n,t)=>{let r=[];for(let i=0;i<t;i+=1){let[o,a]=Re(e,n);r.push(o),n=a}return[r,n]},Ae=(e,n,t)=>{let r=[];for(let i=0;i<t;i+=1){let o=0n,a=0n;for(;;){let s=e[n];if(n+=1,o|=BigInt(s&127)<<a,s<128)break;a+=7n}r.push(o)}return[r,n]},V=class{count;read;perBlock;perGroup;fanout;width;blocks;keys;offsets;data;dictionary;cache;groups;constructor(n,t){let r=new DataView(n.buffer,n.byteOffset,n.byteLength);this.count=t.count,this.read=t.read,this.perBlock=t.block,this.perGroup=t.group,this.fanout=this.perBlock/this.perGroup,this.blocks=r.getUint32(0,!0),this.width=r.getUint32(4,!0);let i=r.getUint32(8,!0);this.offsets=new Uint32Array(this.blocks+1);for(let a=0;a<=this.blocks;a+=1)this.offsets[a]=r.getUint32(12+a*4,!0);let o=12+4*(this.blocks+1);this.keys=[];for(let a=0;a<this.blocks;a+=1){let s=0n;for(let l=0;l<this.width;l+=1)s=s<<8n|BigInt(n[o+a*this.width+l]);this.keys.push(s)}o+=this.width*this.blocks,this.dictionary=i?pe(n.subarray(o,o+i)):null,this.data=n.subarray(o+i),this.cache=new R(a=>this.block(a)),this.groups=new R(a=>this.values(a))}raw(n){let t=this.data.subarray(this.offsets[n],this.offsets[n+1]);return Te(t,this.dictionary)}held(n){return Math.min(this.perGroup,this.count-n*this.perGroup)}block(n){throw new Error(`no block ${n}`)}values(n){throw new Error(`no group ${n}`)}at(n){throw new Error(`no row ${n}`)}},Zt={1:[Uint8Array,Int8Array],2:[Uint16Array,Int16Array],4:[Uint32Array,Int32Array],8:[BigUint64Array,BigInt64Array]},ge=class extends V{signed;constructor(n,t){super(n,t),this.signed=t.encoding==="signed"}block(n){let t=this.raw(n),r=t[0],i=t.slice(1);if($t&&r>1)for(let o=0;o+r<=i.length;o+=r)i.subarray(o,o+r).reverse();return new Zt[r][this.signed?1:0](i.buffer)}at(n){let t=Math.floor(n/this.perBlock),r=this.cache.get(t)[n%this.perBlock];return typeof r=="bigint"?Number(r):r}},ye=class extends V{block(n){let t=this.raw(n),r=this.count-n*this.perBlock,i=Math.min(this.fanout,Math.ceil(r/this.perGroup))-1,[o,a]=Ee(t,0,i),s=[a];for(let l of o)s.push(s[s.length-1]+l);return s.push(t.length),[t,s]}values(n){let t=Math.floor(n/this.fanout),[r,i]=this.cache.get(t),o=i[n%this.fanout],a=[],s=new Uint8Array(0);for(let l=0;l<this.held(n);l+=1){let c=r[o],u=r[o+1];o+=2,u>127&&([u,o]=Re(r,o-1));let f=new Uint8Array(c+u);f.set(s.subarray(0,c)),f.set(r.subarray(o,o+u),c),o+=u,s=f,a.push(he.decode(f))}return a}at(n){if(!n)return"";let t=Math.floor((n-1)/this.perGroup);return this.groups.get(t)[(n-1)%this.perGroup]}},Ce=class extends V{hostBits;big;constructor(n,t){super(n,t),this.big=this.width!==4,this.hostBits=this.big?64:0}block(n){let t=this.raw(n),[r,i]=Re(t,0),o=Math.ceil(r/this.perGroup),[a,s]=Ae(t,i,o-1),l=[this.keys[n]];for(let d of a)l.push(l[l.length-1]+d);let[c,u]=Ee(t,s,o-1),f=[u];for(let d of c)f.push(f[f.length-1]+d);return[l,f,t]}values(n){let t=Math.floor(n/this.fanout),[r,i,o]=this.cache.get(t),a=this.held(n),s=r[n%this.fanout],[l,c]=this.big?Ae(o,i[n%this.fanout],a-1):Ee(o,i[n%this.fanout],a-1);if(!this.big){let d=[Number(s)];for(let p of l)d.push(d[d.length-1]+p);return d}let u=[s>>BigInt(this.hostBits)];for(let d of l)u.push(u[u.length-1]+d);let[f]=Ae(o,c,a);return u.map((d,p)=>d<<BigInt(this.hostBits)|f[p])}at(n){let t=Math.floor(n/this.perGroup);return this.groups.get(t)[n%this.perGroup]}row(n){let t=(this.big,n),r=Se(this.keys,this.big?t:BigInt(t))-1;if(r<0)return null;let[i]=this.cache.get(r),o=r*this.fanout+Se(i,this.big?t:BigInt(t))-1,a=Se(this.groups.get(o),t)-1;return a<0?null:o*this.perGroup+a}holds(n){let t=this.row(n);return t!==null&&this.at(t)===n?t:null}},Se=(e,n)=>{let t=0,r=e.length;for(;t<r;){let i=t+r>>1;e[i]<=n?t=i+1:r=i}return t},jt={plain:[],text:[],degrees:[],coded:[],links:[]},H=class{head;sections={};reads={};tables={};families;rows={};located;answers=new R(n=>this.answer(n));constructor(n){let t=new DataView(n.buffer,n.byteOffset,n.byteLength);if(he.decode(n.subarray(0,F.length))!==F||n[F.length]!==cn)throw new Error(`not a plevin ${cn} database`);let i=t.getUint32(F.length+1,!0),o=F.length+5;this.head=JSON.parse(he.decode(n.subarray(o,o+i)));let a=o+i;for(let[s,l]of Object.entries(this.head.sections)){let c=a+l.offset,u=n.subarray(c,c+l.bytes),f=l.encoding==="index"?Ce:l.encoding==="front"?ye:ge;this.sections[s]=new f(u,l)}Object.assign(this.reads,zt);for(let[s,l]of Object.entries(Ht)){let c=this.head.vocabularies[l];c&&(this.reads[s]=u=>c[u]??"")}this.plan(),this.families={4:this.family(4),6:this.family(6)},this.located={4:new R(s=>this.locateIn(4,s)),6:new R(s=>this.locateIn(6,s))}}linked(n,t){return this.rows[n]??=new R(r=>this.row(n,r)),this.rows[n].get(t)}get built(){return this.head.built}get selection(){return this.head.selection}get fields(){return this.head.fields}plan(){for(let[n,t]of Object.entries(this.sections)){let r=n.split(".");if(r.length!==3||r[0]!=="col"&&r[0]!=="link")continue;let[i,o,a]=r;this.tables[o]??={plain:[],text:[],degrees:[],coded:[],links:[]};let s=this.tables[o],l=this.reads[`${o}.${a}`];i==="link"?s.links.push([a,t]):l?s.coded.push([a,t,l]):t.read==="text"?s.text.push([a,t,this.sections.strings]):t.read?s.degrees.push([a,t]):s.plain.push([a,t])}}family(n){let t=`spine.v${n}`,r=`hosts.v${n}`;return{index:this.sections[t]??null,columns:Ft.filter(i=>`${t}.${i}`in this.sections).map(i=>[i,this.sections[`${t}.${i}`],this.reads[i]??null]),hosts:this.sections[r]??null,records:this.sections[`${r}.abuse`]??null}}row(n,t){let r=this.tables[n]??jt,i={};for(let[o,a]of r.plain)i[o]=a.at(t);for(let[o,a,s]of r.text)i[o]=s.at(a.at(t));for(let[o,a]of r.degrees)i[o]=a.at(t)/Kt;for(let[o,a,s]of r.coded)i[o]=s(a.at(t));for(let[o,a]of r.links){let s=a.at(t);s&&(i[o]=this.linked(o,s-1))}return"postal_partial"in i&&(i.postal_partial=String(i.postal).slice(0,i.postal_partial)),i}answer(n){let t=n%2?6:4,r=(n-n%2)/2,i=r%be,o=(r-i)/be,a={};for(let[s,l,c]of this.families[t].columns){let u=i&&s==="abuse"?i:l.at(o);Vt.has(s)?u&&(a[s]=this.linked(s,u-1)):(a[un]??={},a[un][s]=c?c(u):u)}return a}locateIn(n,t){let{index:r,hosts:i,records:o}=this.families[n],a=r===null?null:r.row(t);if(a===null)return null;if(i===null||o===null)return[n,a,0];let s=i.holds(t);return[n,a,s===null?0:o.at(s)+1]}locate(n,t){return this.located[t?6:4].get(n)}rowFor(n,t){let r=this.locate(n,t);return r===null?null:this.answerFor(r)}answerFor(n){let[t,r,i]=n;return this.answers.get((r*be+i)*2+(t===6?1:0))}};var fn=1024,ir=1n<<128n,m=e=>e?String(e):null,S=e=>e?Number(e):null,z=e=>e==null?null:Number(e),E=(e,n)=>e?.[n],ar=e=>e?{code:S(e.code),label:m(e.label)}:null,or=e=>e?{id:S(e.id),code:m(e.code),name:m(e.name)}:null,sr=e=>e?{id:S(e.id),code:m(e.code),iso:m(e.iso),name:m(e.name),type:m(e.type)}:null,mn=e=>{let n=new WeakMap;return(t,...r)=>{if(!t)return null;let i=r.join(`
625
+ `),o=n.get(t);o||(o=new Map,n.set(t,o));let a=o.get(i);if(a!==void 0)return a;let s=e(t,...r);return o.set(i,s),s}},Tn=mn(e=>{let n=String(e.type??"");return{id:S(e.id),name:m(e.name),ascii:m(e.ascii),country:m(e.country),population:S(e.population),elevation:S(e.elevation),postal:m(e.postal),postal_partial:m(e.postal_partial),timezone:m(e.timezone),type:m(n),capital:m($e(n)),region:sr(E(e,"region")),district:or(E(e,"district")),metro:ar(E(e,"metro"))}}),lr=mn((e,n)=>{let t=String(e.company??""),r=String(e.website??""),i=String(e.abuse_email??"");return{company:m(t),brand:m(He(n,t)),domain:m(We(r,i)),website:m(r),category:m(e.category),tier:S(e.tier),peering:S(e.peering),scope:m(e.scope),rir:m(e.rir),since:S(e.since),street:m(e.street),state:m(e.state),postal:m(e.postal),country:m(e.country),abuse_email:m(i),city:Tn(E(e,"city"))}}),cr=(e,n)=>{if(!e&&!n)return null;let t=e??{};return{user_type:m(n),user_count:S(t.user_count),mcc:S(t.mcc),mnc:S(t.mnc),is_mobile:n==="cellular"}},ur=(e,n,t)=>{if(!e&&!n)return null;let r=e??{},[i,o]=ze(String(r.service??""),t);return{name:m(r.name),service:m(i),evidence:m(String(r.evidence??"")||o),risk:z(r.risk),network_risk:n?z(n.risk):null,last_seen_days:S(r.last_seen_days),is_anycast:!!r.is_anycast,is_satellite:!!r.is_satellite,is_hosting_provider:xe.has(t),is_proxy:Ke.has(i),is_public_proxy:i==="public_proxy",is_residential_proxy:i==="residential_proxy",is_anonymous_vpn:i==="anonymous_vpn",is_tor_exit_node:i==="tor_exit_node",is_private_relay:i==="private_relay",is_anonymous:!!i}},fr=e=>{if(!e)return null;let n=Tn(E(e,"city")),t=n?.country??"",r=n?.timezone??"";return[{lat:z(e.lat),lon:z(e.lon),accuracy:S(e.accuracy),confidence:S(e.confidence),granularity:m(e.granularity),city:n,country:Xe(t)},r]},dr=(e,n)=>{if(!e)return null;let t=String(e.handle??"");return[{asn:S(e.asn),handle:m(t),rir:m(e.rir),rpki:m(e.rpki),roas:z(e.roas),operator:lr(E(e,"operator"),t),carrier:cr(E(e,"carrier"),n)},S(e.prefix)]},mr=(e,n)=>String(e?.user_type||n?.user_type||""),Tr=e=>{let n=E(e,"network"),t=E(n,"abuse"),r=mr(E(e,"abuse"),t);return[fr(E(e,"place")),dr(n,r),ur(E(e,"abuse"),t,r)]},pr=(e,n,t)=>{let[r,i]=e,[o,a,s]=i===null?[null,null,null]:_e(n,t,i);return{...r,prefix:i,cidr:o,start:a,end:s}},dn=(e,n,t,r,i=null)=>{let[o,a,s]=P(e,n),l=Pe(e,n),[c,u]=G(e,n),[f,d,p]=Le(e,n),T=Ge(e,n),[b,A,g]=t??[null,null,null];return{ip:o,version:n?6:4,number:e,compressed:o,expanded:a,arpa:s,is_global:l===0,is_bogon:l!==0,is_private:(l&1)!==0,is_loopback:(l&2)!==0,is_multicast:(l&4)!==0,is_reserved:(l&8)!==0,is_link_local:(l&16)!==0,is_unique_local:(l&32)!==0,is_documentation:(l&64)!==0,is_shared:(l&128)!==0,is_benchmark:(l&256)!==0,is_ipv4_mapped:c===Q,is_6to4:c===X,is_teredo:c===ee,tunnel:c,embedded_ipv4:u,decimal_ipv4:T,as_ipv4_mapped:f,as_6to4:d,as_nat64:p,found:t!==null,place:b===null?null:{...b[0],time:nn(b[1],r)},network:A===null?null:pr(A,e,n),abuse:g,dns:i}},W=class{file;kept=new Map;results=new Map;second=0;constructor(n){this.file=new H(n)}get built(){return this.file.built}get selection(){return this.file.selection}get fields(){return this.file.fields}storedFor(n){let t=n.join(","),r=this.kept.get(t);if(r!==void 0)return r;this.kept.size>=fn*16&&this.kept.clear();let i=Tr(this.file.answerFor(n));return this.kept.set(t,i),i}lookup(n,t){let[r,i]=C(n);if(t){let u=this.file.locate(r,i);return dn(r,i,u&&this.storedFor(u),t)}let o=Math.floor(Date.now()/1e3);o!==this.second&&(this.second=o,this.results.clear());let a=i?r+ir:BigInt(r),s=this.results.get(a);if(s!==void 0)return s;this.results.size>=fn&&this.results.clear();let l=this.file.locate(r,i),c=dn(r,i,l&&this.storedFor(l));return this.results.set(a,c),c}async resolve(n,t){let r=this.lookup(n,t?.moment);if(!t?.dns)return r;let[i,o]=C(n);return{...r,dns:await ce(i,o)}}row(n){let[t,r]=C(n);return this.file.rowFor(t,r)}},Nr=async e=>{if(e instanceof Uint8Array)return new W(e);if(e instanceof ArrayBuffer)return new W(new Uint8Array(e));let n=e instanceof Response?e:await fetch(e);if(!n.ok)throw new Error(`${n.status} reading the database`);return new W(new Uint8Array(await n.arrayBuffer()))};export{H as File,W as Plevin,v as ask,Te as decompress,rn as facts,pe as loadDictionary,ce as named,Nr as open,K as records};
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
package/dist/reader.js CHANGED
@@ -6,11 +6,12 @@ const CACHED = 1 << 14;
6
6
  const DEGREES = 10000;
7
7
  const UNSEEN = 255;
8
8
  const RECORDS = 1 << 14;
9
- const CARRIED = ["place", "network", "abuse", "prefix", "rpki", "roas"];
9
+ const CARRIED = ["place", "network", "abuse", "prefix", "rpki", "roas", "rir"];
10
10
  const LINKED = new Set(["place", "network", "abuse"]);
11
11
  const SPAN = "network";
12
12
  const BOOKS = {
13
13
  rpki: "rpki",
14
+ rir: "rirs",
14
15
  "place.granularity": "granularity",
15
16
  "city.timezone": "timezones",
16
17
  "city.type": "place_types",