__vite_ssr_exportName__("normalizeHostname", () => { try { return normalizeHostname } catch {} });
__vite_ssr_exportName__("isLocalLoopbackHost", () => { try { return isLocalLoopbackHost } catch {} });
__vite_ssr_exportName__("isTailnetHost", () => { try { return isTailnetHost } catch {} });
__vite_ssr_exportName__("isSharedAddressSpaceHost", () => { try { return isSharedAddressSpaceHost } catch {} });
__vite_ssr_exportName__("isPrivateNetworkHost", () => { try { return isPrivateNetworkHost } catch {} });
__vite_ssr_exportName__("isPublicFaviconHost", () => { try { return isPublicFaviconHost } catch {} });
const normalizeHostname = (host) => host.toLowerCase().replace(/^\[|\]$/g, "").replace(/\.+$/u, "");
const parseIpv4Address = (host) => {
	const parts = normalizeHostname(host).split(".").map(Number);
	return parts.length === 4 && parts.every((part) => Number.isInteger(part) && part >= 0 && part <= 255) ? parts : null;
};
const parseIpv4MappedIpv6Address = (host) => {
	const normalized = normalizeHostname(host);
	if (!normalized.startsWith("::ffff:")) return null;
	const suffix = normalized.slice("::ffff:".length);
	const dotted = parseIpv4Address(suffix);
	if (dotted) return dotted;
	const hextets = suffix.split(":");
	if (hextets.length !== 2 || hextets.some((part) => !/^[\da-f]{1,4}$/u.test(part))) return null;
	const high = Number.parseInt(hextets[0], 16);
	const low = Number.parseInt(hextets[1], 16);
	return [
		high >>> 8,
		high & 255,
		low >>> 8,
		low & 255
	];
};
const parseIpv6Address = (host) => {
	const normalized = normalizeHostname(host);
	if (!normalized.includes(":")) return null;
	const halves = normalized.split("::");
	if (halves.length > 2) return null;
	const head = halves[0] ? halves[0].split(":") : [];
	const tail = halves[1] ? halves[1].split(":") : [];
	if ([...head, ...tail].some((part) => !/^[\da-f]{1,4}$/u.test(part))) return null;
	const missing = 8 - head.length - tail.length;
	if (halves.length === 1 && missing !== 0 || halves.length === 2 && missing < 1) return null;
	return [
		...head,
		...Array.from({ length: missing }, () => "0"),
		...tail
	].map((part) => Number.parseInt(part, 16));
};
const ipv6PrefixMatches = (address, prefix, prefixLength) => {
	const fullHextets = Math.floor(prefixLength / 16);
	if (address.slice(0, fullHextets).some((part, index) => part !== prefix[index])) return false;
	const remainingBits = prefixLength % 16;
	if (remainingBits === 0) return true;
	const mask = 65535 << 16 - remainingBits & 65535;
	return (address[fullHextets] & mask) === (prefix[fullHextets] & mask);
};
const isPrivateIpv4Address = (parts) => parts[0] === 0 || parts[0] === 10 || parts[0] === 127 || parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127 || parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31 || parts[0] === 192 && parts[1] === 168 || parts[0] === 169 && parts[1] === 254 || parts[0] === 198 && parts[1] >= 18 && parts[1] <= 19;
const isSpecialPurposeIpv4Address = (parts) => isPrivateIpv4Address(parts) || parts[0] >= 224 || parts[0] === 192 && parts[1] === 0 && parts[2] === 0 || parts[0] === 192 && parts[1] === 0 && parts[2] === 2 || parts[0] === 192 && parts[1] === 88 && parts[2] === 99 || parts[0] === 198 && parts[1] === 51 && parts[2] === 100 || parts[0] === 203 && parts[1] === 0 && parts[2] === 113;
const isLocalLoopbackHost = (host) => {
	const normalized = normalizeHostname(host);
	if (normalized === "localhost" || normalized === "::1") return true;
	return parseIpv4Address(normalized)?.[0] === 127;
};
/** MagicDNS or fd7a:115c:a1e0::/48 identifies Tailscale; shared 100.64.0.0/10 addresses alone do not. */
const isTailnetHost = (host) => {
	const normalized = normalizeHostname(host);
	if (normalized.endsWith(".ts.net")) return true;
	const ipv6 = parseIpv6Address(normalized);
	return ipv6 !== null && ipv6PrefixMatches(ipv6, [
		64890,
		4444,
		41440,
		0,
		0,
		0,
		0,
		0
	], 48);
};
const isSharedAddressSpaceHost = (host) => {
	const parts = parseIpv4Address(host);
	return parts !== null && parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127;
};
const isPrivateNetworkHost = (host) => {
	const normalized = normalizeHostname(host);
	if (normalized === "::" || isLocalLoopbackHost(normalized) || normalized.endsWith(".localhost") || normalized.endsWith(".local") || normalized === "home.arpa" || normalized.endsWith(".home.arpa") || !normalized.includes(".") && !normalized.includes(":")) {
		return true;
	};
	if (normalized.endsWith(".ts.net")) return true;
	const parts = parseIpv4Address(normalized) ?? parseIpv4MappedIpv6Address(normalized);
	if (parts) return isPrivateIpv4Address(parts);
	const firstIpv6Token = normalized.split(":", 1)[0] ?? "";
	if (!normalized.includes(":") || !/^[\da-f]{1,4}$/u.test(firstIpv6Token)) return false;
	const firstIpv6Hextet = Number.parseInt(firstIpv6Token, 16);
	return Number.isInteger(firstIpv6Hextet) && ((firstIpv6Hextet & 65024) === 64512 || (firstIpv6Hextet & 65472) === 65152);
};
// Includes private TLDs from RFC 6762 Appendix G.
const PRIVATE_FAVICON_TLDS = [
	".alt",
	".corp",
	".example",
	".home",
	".internal",
	".intranet",
	".invalid",
	".lan",
	".onion",
	".private",
	".test"
];
const INTERNAL_HOST_LABELS = new Set([
	"corp",
	"internal",
	"intranet"
]);
const isPublicFaviconHost = (host) => {
	// One trailing DNS dot is valid; repeated dots can conceal legacy numeric addresses.
	if (host.endsWith("..")) return false;
	const normalized = normalizeHostname(host);
	if (isPrivateNetworkHost(normalized)) return false;
	if (PRIVATE_FAVICON_TLDS.some((suffix) => normalized === suffix.slice(1) || normalized.endsWith(suffix))) {
		return false;
	};
	// Public domains can contain internal service labels; keep them off third-party requests.
	if (normalized.split(".").some((label) => INTERNAL_HOST_LABELS.has(label))) return false;
	const ipv4 = parseIpv4Address(normalized) ?? parseIpv4MappedIpv6Address(normalized);
	if (ipv4) return !isSpecialPurposeIpv4Address(ipv4);
	if (!normalized.includes(":")) return true;
	const ipv6 = parseIpv6Address(normalized);
	if (!ipv6) return false;
	if (ipv6PrefixMatches(ipv6, [
		100,
		65435,
		0,
		0,
		0,
		0,
		0,
		0
	], 96)) {
		const embeddedIpv4 = [
			ipv6[6] >>> 8,
			ipv6[6] & 255,
			ipv6[7] >>> 8,
			ipv6[7] & 255
		];
		return !isSpecialPurposeIpv4Address(embeddedIpv4);
	};
	const first = ipv6[0];
	if ((first & 57344) !== 8192) return false;
	if (ipv6PrefixMatches(ipv6, [
		8193,
		0,
		0,
		0,
		0,
		0,
		0,
		0
	], 23)) {
		const publicProtocolAssignment = ipv6[1] === 1 && ipv6.slice(2, 7).every((part) => part === 0) && [
			1,
			2,
			3
		].includes(ipv6[7]) || ipv6PrefixMatches(ipv6, [
			8193,
			3,
			0,
			0,
			0,
			0,
			0,
			0
		], 32) || ipv6PrefixMatches(ipv6, [
			8193,
			4,
			274,
			0,
			0,
			0,
			0,
			0
		], 48) || ipv6PrefixMatches(ipv6, [
			8193,
			32,
			0,
			0,
			0,
			0,
			0,
			0
		], 28) || ipv6PrefixMatches(ipv6, [
			8193,
			48,
			0,
			0,
			0,
			0,
			0,
			0
		], 28);
		return publicProtocolAssignment;
	};
	if (ipv6PrefixMatches(ipv6, [
		8193,
		3512,
		0,
		0,
		0,
		0,
		0,
		0
	], 32)) return false;
	if (ipv6PrefixMatches(ipv6, [
		8194,
		0,
		0,
		0,
		0,
		0,
		0,
		0
	], 16)) return false;
	if (first === 16383 && (ipv6[1] & 61440) === 0) return false;
	return true;
};
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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QU07R0FBQztHQUFRO0dBQU07R0FBRztHQUFHO0dBQUc7R0FBRztHQUFHO0VBQUMsR0FBRyxFQUFFO0VBQzlELE9BQU87Q0FDVDtDQUNBLElBQUksa0JBQWtCLE1BQU07RUFBQztFQUFRO0VBQVE7RUFBRztFQUFHO0VBQUc7RUFBRztFQUFHO0NBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTztDQUM1RSxJQUFJLGtCQUFrQixNQUFNO0VBQUM7RUFBUTtFQUFHO0VBQUc7RUFBRztFQUFHO0VBQUc7RUFBRztDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU87Q0FDdkUsSUFBSSxVQUFVLFVBQVcsS0FBSyxLQUFNLFdBQVksR0FBRyxPQUFPO0NBQzFELE9BQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiaG9zdENsYXNzaWZpY2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBub3JtYWxpemVIb3N0bmFtZSA9IChob3N0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaG9zdFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15cXFt8XFxdJC9nLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXC4rJC91LCBcIlwiKTtcblxuY29uc3QgcGFyc2VJcHY0QWRkcmVzcyA9IChob3N0OiBzdHJpbmcpOiByZWFkb25seSBudW1iZXJbXSB8IG51bGwgPT4ge1xuICBjb25zdCBwYXJ0cyA9IG5vcm1hbGl6ZUhvc3RuYW1lKGhvc3QpLnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gNCAmJlxuICAgIHBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiBOdW1iZXIuaXNJbnRlZ2VyKHBhcnQpICYmIHBhcnQgPj0gMCAmJiBwYXJ0IDw9IDI1NSlcbiAgICA/IHBhcnRzXG4gICAgOiBudWxsO1xufTtcblxuY29uc3QgcGFyc2VJcHY0TWFwcGVkSXB2NkFkZHJlc3MgPSAoaG9zdDogc3RyaW5nKTogcmVhZG9ubHkgbnVtYmVyW10gfCBudWxsID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUhvc3RuYW1lKGhvc3QpO1xuICBpZiAoIW5vcm1hbGl6ZWQuc3RhcnRzV2l0aChcIjo6ZmZmZjpcIikpIHJldHVybiBudWxsO1xuICBjb25zdCBzdWZmaXggPSBub3JtYWxpemVkLnNsaWNlKFwiOjpmZmZmOlwiLmxlbmd0aCk7XG4gIGNvbnN0IGRvdHRlZCA9IHBhcnNlSXB2NEFkZHJlc3Moc3VmZml4KTtcbiAgaWYgKGRvdHRlZCkgcmV0dXJuIGRvdHRlZDtcbiAgY29uc3QgaGV4dGV0cyA9IHN1ZmZpeC5zcGxpdChcIjpcIik7XG4gIGlmIChoZXh0ZXRzLmxlbmd0aCAhPT0gMiB8fCBoZXh0ZXRzLnNvbWUoKHBhcnQpID0+ICEvXltcXGRhLWZdezEsNH0kL3UudGVzdChwYXJ0KSkpIHJldHVybiBudWxsO1xuICBjb25zdCBoaWdoID0gTnVtYmVyLnBhcnNlSW50KGhleHRldHNbMF0hLCAxNik7XG4gIGNvbnN0IGxvdyA9IE51bWJlci5wYXJzZUludChoZXh0ZXRzWzFdISwgMTYpO1xuICByZXR1cm4gW2hpZ2ggPj4+IDgsIGhpZ2ggJiAweGZmLCBsb3cgPj4+IDgsIGxvdyAmIDB4ZmZdO1xufTtcblxuY29uc3QgcGFyc2VJcHY2QWRkcmVzcyA9IChob3N0OiBzdHJpbmcpOiByZWFkb25seSBudW1iZXJbXSB8IG51bGwgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9zdG5hbWUoaG9zdCk7XG4gIGlmICghbm9ybWFsaXplZC5pbmNsdWRlcyhcIjpcIikpIHJldHVybiBudWxsO1xuICBjb25zdCBoYWx2ZXMgPSBub3JtYWxpemVkLnNwbGl0KFwiOjpcIik7XG4gIGlmIChoYWx2ZXMubGVuZ3RoID4gMikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGhlYWQgPSBoYWx2ZXNbMF0gPyBoYWx2ZXNbMF0uc3BsaXQoXCI6XCIpIDogW107XG4gIGNvbnN0IHRhaWwgPSBoYWx2ZXNbMV0gPyBoYWx2ZXNbMV0uc3BsaXQoXCI6XCIpIDogW107XG4gIGlmIChbLi4uaGVhZCwgLi4udGFpbF0uc29tZSgocGFydCkgPT4gIS9eW1xcZGEtZl17MSw0fSQvdS50ZXN0KHBhcnQpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG1pc3NpbmcgPSA4IC0gaGVhZC5sZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgaWYgKChoYWx2ZXMubGVuZ3RoID09PSAxICYmIG1pc3NpbmcgIT09IDApIHx8IChoYWx2ZXMubGVuZ3RoID09PSAyICYmIG1pc3NpbmcgPCAxKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBbLi4uaGVhZCwgLi4uQXJyYXkuZnJvbSh7IGxlbmd0aDogbWlzc2luZyB9LCAoKSA9PiBcIjBcIiksIC4uLnRhaWxdLm1hcCgocGFydCkgPT5cbiAgICBOdW1iZXIucGFyc2VJbnQocGFydCwgMTYpLFxuICApO1xufTtcblxuY29uc3QgaXB2NlByZWZpeE1hdGNoZXMgPSAoXG4gIGFkZHJlc3M6IHJlYWRvbmx5IG51bWJlcltdLFxuICBwcmVmaXg6IHJlYWRvbmx5IG51bWJlcltdLFxuICBwcmVmaXhMZW5ndGg6IG51bWJlcixcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBmdWxsSGV4dGV0cyA9IE1hdGguZmxvb3IocHJlZml4TGVuZ3RoIC8gMTYpO1xuICBpZiAoYWRkcmVzcy5zbGljZSgwLCBmdWxsSGV4dGV0cykuc29tZSgocGFydCwgaW5kZXgpID0+IHBhcnQgIT09IHByZWZpeFtpbmRleF0pKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlbWFpbmluZ0JpdHMgPSBwcmVmaXhMZW5ndGggJSAxNjtcbiAgaWYgKHJlbWFpbmluZ0JpdHMgPT09IDApIHJldHVybiB0cnVlO1xuICBjb25zdCBtYXNrID0gKDB4ZmZmZiA8PCAoMTYgLSByZW1haW5pbmdCaXRzKSkgJiAweGZmZmY7XG4gIHJldHVybiAoYWRkcmVzc1tmdWxsSGV4dGV0c10hICYgbWFzaykgPT09IChwcmVmaXhbZnVsbEhleHRldHNdISAmIG1hc2spO1xufTtcblxuY29uc3QgaXNQcml2YXRlSXB2NEFkZHJlc3MgPSAocGFydHM6IHJlYWRvbmx5IG51bWJlcltdKTogYm9vbGVhbiA9PlxuICBwYXJ0c1swXSA9PT0gMCB8fFxuICBwYXJ0c1swXSA9PT0gMTAgfHxcbiAgcGFydHNbMF0gPT09IDEyNyB8fFxuICAocGFydHNbMF0gPT09IDEwMCAmJiBwYXJ0c1sxXSEgPj0gNjQgJiYgcGFydHNbMV0hIDw9IDEyNykgfHxcbiAgKHBhcnRzWzBdID09PSAxNzIgJiYgcGFydHNbMV0hID49IDE2ICYmIHBhcnRzWzFdISA8PSAzMSkgfHxcbiAgKHBhcnRzWzBdID09PSAxOTIgJiYgcGFydHNbMV0gPT09IDE2OCkgfHxcbiAgKHBhcnRzWzBdID09PSAxNjkgJiYgcGFydHNbMV0gPT09IDI1NCkgfHxcbiAgKHBhcnRzWzBdID09PSAxOTggJiYgcGFydHNbMV0hID49IDE4ICYmIHBhcnRzWzFdISA8PSAxOSk7XG5cbmNvbnN0IGlzU3BlY2lhbFB1cnBvc2VJcHY0QWRkcmVzcyA9IChwYXJ0czogcmVhZG9ubHkgbnVtYmVyW10pOiBib29sZWFuID0+XG4gIGlzUHJpdmF0ZUlwdjRBZGRyZXNzKHBhcnRzKSB8fFxuICBwYXJ0c1swXSEgPj0gMjI0IHx8XG4gIC8vIFN1cHByZXNzIHRoZSBlbnRpcmUgcHJvdG9jb2wtYXNzaWdubWVudCBibG9jaywgaW5jbHVkaW5nIHB1YmxpYyAuOS8uMTAsIHRvIGF2b2lkIGRpc2Nsb3Npbmcgc3BlY2lhbC1wdXJwb3NlIGFkZHJlc3Nlcy5cbiAgKHBhcnRzWzBdID09PSAxOTIgJiYgcGFydHNbMV0gPT09IDAgJiYgcGFydHNbMl0gPT09IDApIHx8XG4gIChwYXJ0c1swXSA9PT0gMTkyICYmIHBhcnRzWzFdID09PSAwICYmIHBhcnRzWzJdID09PSAyKSB8fFxuICAocGFydHNbMF0gPT09IDE5MiAmJiBwYXJ0c1sxXSA9PT0gODggJiYgcGFydHNbMl0gPT09IDk5KSB8fFxuICAocGFydHNbMF0gPT09IDE5OCAmJiBwYXJ0c1sxXSA9PT0gNTEgJiYgcGFydHNbMl0gPT09IDEwMCkgfHxcbiAgKHBhcnRzWzBdID09PSAyMDMgJiYgcGFydHNbMV0gPT09IDAgJiYgcGFydHNbMl0gPT09IDExMyk7XG5cbmV4cG9ydCBjb25zdCBpc0xvY2FsTG9vcGJhY2tIb3N0ID0gKGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9zdG5hbWUoaG9zdCk7XG4gIGlmIChub3JtYWxpemVkID09PSBcImxvY2FsaG9zdFwiIHx8IG5vcm1hbGl6ZWQgPT09IFwiOjoxXCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gcGFyc2VJcHY0QWRkcmVzcyhub3JtYWxpemVkKT8uWzBdID09PSAxMjc7XG59O1xuXG4vKiogTWFnaWNETlMgb3IgZmQ3YToxMTVjOmExZTA6Oi80OCBpZGVudGlmaWVzIFRhaWxzY2FsZTsgc2hhcmVkIDEwMC42NC4wLjAvMTAgYWRkcmVzc2VzIGFsb25lIGRvIG5vdC4gKi9cbmV4cG9ydCBjb25zdCBpc1RhaWxuZXRIb3N0ID0gKGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9zdG5hbWUoaG9zdCk7XG4gIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKFwiLnRzLm5ldFwiKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGlwdjYgPSBwYXJzZUlwdjZBZGRyZXNzKG5vcm1hbGl6ZWQpO1xuICByZXR1cm4gaXB2NiAhPT0gbnVsbCAmJiBpcHY2UHJlZml4TWF0Y2hlcyhpcHY2LCBbMHhmZDdhLCAweDExNWMsIDB4YTFlMCwgMCwgMCwgMCwgMCwgMF0sIDQ4KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NoYXJlZEFkZHJlc3NTcGFjZUhvc3QgPSAoaG9zdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHBhcnRzID0gcGFyc2VJcHY0QWRkcmVzcyhob3N0KTtcbiAgcmV0dXJuIHBhcnRzICE9PSBudWxsICYmIHBhcnRzWzBdID09PSAxMDAgJiYgcGFydHNbMV0hID49IDY0ICYmIHBhcnRzWzFdISA8PSAxMjc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcml2YXRlTmV0d29ya0hvc3QgPSAoaG9zdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb3N0bmFtZShob3N0KTtcbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWQgPT09IFwiOjpcIiB8fFxuICAgIGlzTG9jYWxMb29wYmFja0hvc3Qobm9ybWFsaXplZCkgfHxcbiAgICBub3JtYWxpemVkLmVuZHNXaXRoKFwiLmxvY2FsaG9zdFwiKSB8fFxuICAgIG5vcm1hbGl6ZWQuZW5kc1dpdGgoXCIubG9jYWxcIikgfHxcbiAgICBub3JtYWxpemVkID09PSBcImhvbWUuYXJwYVwiIHx8XG4gICAgbm9ybWFsaXplZC5lbmRzV2l0aChcIi5ob21lLmFycGFcIikgfHxcbiAgICAoIW5vcm1hbGl6ZWQuaW5jbHVkZXMoXCIuXCIpICYmICFub3JtYWxpemVkLmluY2x1ZGVzKFwiOlwiKSlcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWQuZW5kc1dpdGgoXCIudHMubmV0XCIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcGFydHMgPSBwYXJzZUlwdjRBZGRyZXNzKG5vcm1hbGl6ZWQpID8/IHBhcnNlSXB2NE1hcHBlZElwdjZBZGRyZXNzKG5vcm1hbGl6ZWQpO1xuICBpZiAocGFydHMpIHJldHVybiBpc1ByaXZhdGVJcHY0QWRkcmVzcyhwYXJ0cyk7XG4gIGNvbnN0IGZpcnN0SXB2NlRva2VuID0gbm9ybWFsaXplZC5zcGxpdChcIjpcIiwgMSlbMF0gPz8gXCJcIjtcbiAgaWYgKCFub3JtYWxpemVkLmluY2x1ZGVzKFwiOlwiKSB8fCAhL15bXFxkYS1mXXsxLDR9JC91LnRlc3QoZmlyc3RJcHY2VG9rZW4pKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGZpcnN0SXB2NkhleHRldCA9IE51bWJlci5wYXJzZUludChmaXJzdElwdjZUb2tlbiwgMTYpO1xuICByZXR1cm4gKFxuICAgIE51bWJlci5pc0ludGVnZXIoZmlyc3RJcHY2SGV4dGV0KSAmJlxuICAgICgoZmlyc3RJcHY2SGV4dGV0ICYgMHhmZTAwKSA9PT0gMHhmYzAwIHx8IChmaXJzdElwdjZIZXh0ZXQgJiAweGZmYzApID09PSAweGZlODApXG4gICk7XG59O1xuXG4vLyBJbmNsdWRlcyBwcml2YXRlIFRMRHMgZnJvbSBSRkMgNjc2MiBBcHBlbmRpeCBHLlxuY29uc3QgUFJJVkFURV9GQVZJQ09OX1RMRFMgPSBbXG4gIFwiLmFsdFwiLFxuICBcIi5jb3JwXCIsXG4gIFwiLmV4YW1wbGVcIixcbiAgXCIuaG9tZVwiLFxuICBcIi5pbnRlcm5hbFwiLFxuICBcIi5pbnRyYW5ldFwiLFxuICBcIi5pbnZhbGlkXCIsXG4gIFwiLmxhblwiLFxuICBcIi5vbmlvblwiLFxuICBcIi5wcml2YXRlXCIsXG4gIFwiLnRlc3RcIixcbl07XG5jb25zdCBJTlRFUk5BTF9IT1NUX0xBQkVMUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1wiY29ycFwiLCBcImludGVybmFsXCIsIFwiaW50cmFuZXRcIl0pO1xuXG5leHBvcnQgY29uc3QgaXNQdWJsaWNGYXZpY29uSG9zdCA9IChob3N0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgLy8gT25lIHRyYWlsaW5nIEROUyBkb3QgaXMgdmFsaWQ7IHJlcGVhdGVkIGRvdHMgY2FuIGNvbmNlYWwgbGVnYWN5IG51bWVyaWMgYWRkcmVzc2VzLlxuICBpZiAoaG9zdC5lbmRzV2l0aChcIi4uXCIpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb3N0bmFtZShob3N0KTtcbiAgaWYgKGlzUHJpdmF0ZU5ldHdvcmtIb3N0KG5vcm1hbGl6ZWQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChcbiAgICBQUklWQVRFX0ZBVklDT05fVExEUy5zb21lKFxuICAgICAgKHN1ZmZpeCkgPT4gbm9ybWFsaXplZCA9PT0gc3VmZml4LnNsaWNlKDEpIHx8IG5vcm1hbGl6ZWQuZW5kc1dpdGgoc3VmZml4KSxcbiAgICApXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBQdWJsaWMgZG9tYWlucyBjYW4gY29udGFpbiBpbnRlcm5hbCBzZXJ2aWNlIGxhYmVsczsga2VlcCB0aGVtIG9mZiB0aGlyZC1wYXJ0eSByZXF1ZXN0cy5cbiAgaWYgKG5vcm1hbGl6ZWQuc3BsaXQoXCIuXCIpLnNvbWUoKGxhYmVsKSA9PiBJTlRFUk5BTF9IT1NUX0xBQkVMUy5oYXMobGFiZWwpKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpcHY0ID0gcGFyc2VJcHY0QWRkcmVzcyhub3JtYWxpemVkKSA/PyBwYXJzZUlwdjRNYXBwZWRJcHY2QWRkcmVzcyhub3JtYWxpemVkKTtcbiAgaWYgKGlwdjQpIHJldHVybiAhaXNTcGVjaWFsUHVycG9zZUlwdjRBZGRyZXNzKGlwdjQpO1xuICBpZiAoIW5vcm1hbGl6ZWQuaW5jbHVkZXMoXCI6XCIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgaXB2NiA9IHBhcnNlSXB2NkFkZHJlc3Mobm9ybWFsaXplZCk7XG4gIGlmICghaXB2NikgcmV0dXJuIGZhbHNlO1xuICBpZiAoaXB2NlByZWZpeE1hdGNoZXMoaXB2NiwgWzB4MDA2NCwgMHhmZjliLCAwLCAwLCAwLCAwLCAwLCAwXSwgOTYpKSB7XG4gICAgY29uc3QgZW1iZWRkZWRJcHY0ID0gW2lwdjZbNl0hID4+PiA4LCBpcHY2WzZdISAmIDB4ZmYsIGlwdjZbN10hID4+PiA4LCBpcHY2WzddISAmIDB4ZmZdO1xuICAgIHJldHVybiAhaXNTcGVjaWFsUHVycG9zZUlwdjRBZGRyZXNzKGVtYmVkZGVkSXB2NCk7XG4gIH1cbiAgY29uc3QgZmlyc3QgPSBpcHY2WzBdITtcbiAgaWYgKChmaXJzdCAmIDB4ZTAwMCkgIT09IDB4MjAwMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoaXB2NlByZWZpeE1hdGNoZXMoaXB2NiwgWzB4MjAwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIDIzKSkge1xuICAgIGNvbnN0IHB1YmxpY1Byb3RvY29sQXNzaWdubWVudCA9XG4gICAgICAoaXB2NlsxXSA9PT0gMSAmJlxuICAgICAgICBpcHY2LnNsaWNlKDIsIDcpLmV2ZXJ5KChwYXJ0KSA9PiBwYXJ0ID09PSAwKSAmJlxuICAgICAgICBbMSwgMiwgM10uaW5jbHVkZXMoaXB2Nls3XSEpKSB8fFxuICAgICAgaXB2NlByZWZpeE1hdGNoZXMoaXB2NiwgWzB4MjAwMSwgMywgMCwgMCwgMCwgMCwgMCwgMF0sIDMyKSB8fFxuICAgICAgaXB2NlByZWZpeE1hdGNoZXMoaXB2NiwgWzB4MjAwMSwgNCwgMHgwMTEyLCAwLCAwLCAwLCAwLCAwXSwgNDgpIHx8XG4gICAgICBpcHY2UHJlZml4TWF0Y2hlcyhpcHY2LCBbMHgyMDAxLCAweDIwLCAwLCAwLCAwLCAwLCAwLCAwXSwgMjgpIHx8XG4gICAgICBpcHY2UHJlZml4TWF0Y2hlcyhpcHY2LCBbMHgyMDAxLCAweDMwLCAwLCAwLCAwLCAwLCAwLCAwXSwgMjgpO1xuICAgIHJldHVybiBwdWJsaWNQcm90b2NvbEFzc2lnbm1lbnQ7XG4gIH1cbiAgaWYgKGlwdjZQcmVmaXhNYXRjaGVzKGlwdjYsIFsweDIwMDEsIDB4MGRiOCwgMCwgMCwgMCwgMCwgMCwgMF0sIDMyKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoaXB2NlByZWZpeE1hdGNoZXMoaXB2NiwgWzB4MjAwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIDE2KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZmlyc3QgPT09IDB4M2ZmZiAmJiAoaXB2NlsxXSEgJiAweGYwMDApID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufTtcbiJdLCJmaWxlIjoiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9zaGFyZWQvc3JjL2hvc3RDbGFzc2lmaWNhdGlvbi50cyJ9

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvc2hhcmVkL3NyYy9ob3N0Q2xhc3NpZmljYXRpb24udHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL3NoYXJlZC9zcmMvaG9zdENsYXNzaWZpY2F0aW9uLnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFtdLFtdLFtdLHt9XQ==