mcp-xray-pilot 0.10.0
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/LICENSE +21 -0
- package/README.md +502 -0
- package/data/docs/_index.json +533 -0
- package/data/docs/basic__api.md +148 -0
- package/data/docs/basic__dns.md +366 -0
- package/data/docs/basic__fakedns.md +202 -0
- package/data/docs/basic__geodata.md +64 -0
- package/data/docs/basic__inbound.md +159 -0
- package/data/docs/basic__index.md +136 -0
- package/data/docs/basic__log.md +67 -0
- package/data/docs/basic__metrics.md +262 -0
- package/data/docs/basic__observatory.md +115 -0
- package/data/docs/basic__outbound.md +164 -0
- package/data/docs/basic__policy.md +140 -0
- package/data/docs/basic__reverse.md +268 -0
- package/data/docs/basic__routing.md +474 -0
- package/data/docs/basic__stats.md +61 -0
- package/data/docs/basic__transport.md +1283 -0
- package/data/docs/features__features_browser_dialer.md +61 -0
- package/data/docs/features__features_env.md +66 -0
- package/data/docs/features__features_fallback.md +110 -0
- package/data/docs/features__features_index.md +17 -0
- package/data/docs/features__features_multiple.md +144 -0
- package/data/docs/features__features_xtls.md +13 -0
- package/data/docs/inbounds__inbounds_dokodemo.md +11 -0
- package/data/docs/inbounds__inbounds_http.md +80 -0
- package/data/docs/inbounds__inbounds_hysteria.md +60 -0
- package/data/docs/inbounds__inbounds_index.md +22 -0
- package/data/docs/inbounds__inbounds_shadowsocks.md +118 -0
- package/data/docs/inbounds__inbounds_socks.md +87 -0
- package/data/docs/inbounds__inbounds_trojan.md +78 -0
- package/data/docs/inbounds__inbounds_tun.md +47 -0
- package/data/docs/inbounds__inbounds_tunnel.md +86 -0
- package/data/docs/inbounds__inbounds_vless.md +135 -0
- package/data/docs/inbounds__inbounds_vmess.md +95 -0
- package/data/docs/inbounds__inbounds_wireguard.md +78 -0
- package/data/docs/outbounds__outbounds_blackhole.md +42 -0
- package/data/docs/outbounds__outbounds_dns.md +97 -0
- package/data/docs/outbounds__outbounds_freedom.md +170 -0
- package/data/docs/outbounds__outbounds_http.md +70 -0
- package/data/docs/outbounds__outbounds_hysteria.md +39 -0
- package/data/docs/outbounds__outbounds_index.md +24 -0
- package/data/docs/outbounds__outbounds_loopback.md +65 -0
- package/data/docs/outbounds__outbounds_shadowsocks.md +105 -0
- package/data/docs/outbounds__outbounds_socks.md +58 -0
- package/data/docs/outbounds__outbounds_trojan.md +49 -0
- package/data/docs/outbounds__outbounds_vless.md +122 -0
- package/data/docs/outbounds__outbounds_vmess.md +76 -0
- package/data/docs/outbounds__outbounds_wireguard.md +141 -0
- package/data/docs/transports__transports_grpc.md +137 -0
- package/data/docs/transports__transports_h2.md +11 -0
- package/data/docs/transports__transports_http.md +11 -0
- package/data/docs/transports__transports_httpupgrade.md +61 -0
- package/data/docs/transports__transports_hysteria.md +110 -0
- package/data/docs/transports__transports_index.md +19 -0
- package/data/docs/transports__transports_mkcp.md +125 -0
- package/data/docs/transports__transports_quic.md +11 -0
- package/data/docs/transports__transports_raw.md +156 -0
- package/data/docs/transports__transports_splithttp.md +11 -0
- package/data/docs/transports__transports_tcp.md +11 -0
- package/data/docs/transports__transports_websocket.md +75 -0
- package/data/docs/transports__transports_xhttp.md +11 -0
- package/dist/data/compatibility.js +170 -0
- package/dist/data/compatibility.js.map +1 -0
- package/dist/data/geocatalogue.js +191 -0
- package/dist/data/geocatalogue.js.map +1 -0
- package/dist/docs.js +339 -0
- package/dist/docs.js.map +1 -0
- package/dist/handlers.js +217 -0
- package/dist/handlers.js.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/lint.js +737 -0
- package/dist/lint.js.map +1 -0
- package/dist/schemas/protocols/blackhole.js +16 -0
- package/dist/schemas/protocols/blackhole.js.map +1 -0
- package/dist/schemas/protocols/common.js +32 -0
- package/dist/schemas/protocols/common.js.map +1 -0
- package/dist/schemas/protocols/dns.js +14 -0
- package/dist/schemas/protocols/dns.js.map +1 -0
- package/dist/schemas/protocols/dokodemo.js +17 -0
- package/dist/schemas/protocols/dokodemo.js.map +1 -0
- package/dist/schemas/protocols/freedom.js +45 -0
- package/dist/schemas/protocols/freedom.js.map +1 -0
- package/dist/schemas/protocols/http.js +38 -0
- package/dist/schemas/protocols/http.js.map +1 -0
- package/dist/schemas/protocols/hysteria.js +51 -0
- package/dist/schemas/protocols/hysteria.js.map +1 -0
- package/dist/schemas/protocols/index.js +50 -0
- package/dist/schemas/protocols/index.js.map +1 -0
- package/dist/schemas/protocols/loopback.js +11 -0
- package/dist/schemas/protocols/loopback.js.map +1 -0
- package/dist/schemas/protocols/shadowsocks.js +60 -0
- package/dist/schemas/protocols/shadowsocks.js.map +1 -0
- package/dist/schemas/protocols/socks.js +42 -0
- package/dist/schemas/protocols/socks.js.map +1 -0
- package/dist/schemas/protocols/trojan.js +34 -0
- package/dist/schemas/protocols/trojan.js.map +1 -0
- package/dist/schemas/protocols/tun.js +19 -0
- package/dist/schemas/protocols/tun.js.map +1 -0
- package/dist/schemas/protocols/vless.js +44 -0
- package/dist/schemas/protocols/vless.js.map +1 -0
- package/dist/schemas/protocols/vmess.js +48 -0
- package/dist/schemas/protocols/vmess.js.map +1 -0
- package/dist/schemas/protocols/wireguard.js +34 -0
- package/dist/schemas/protocols/wireguard.js.map +1 -0
- package/dist/schemas/security/index.js +16 -0
- package/dist/schemas/security/index.js.map +1 -0
- package/dist/schemas/security/reality.js +35 -0
- package/dist/schemas/security/reality.js.map +1 -0
- package/dist/schemas/security/tls.js +46 -0
- package/dist/schemas/security/tls.js.map +1 -0
- package/dist/schemas/security/xtls.js +17 -0
- package/dist/schemas/security/xtls.js.map +1 -0
- package/dist/schemas/transports/grpc.js +18 -0
- package/dist/schemas/transports/grpc.js.map +1 -0
- package/dist/schemas/transports/httpupgrade.js +14 -0
- package/dist/schemas/transports/httpupgrade.js.map +1 -0
- package/dist/schemas/transports/hysteria.js +25 -0
- package/dist/schemas/transports/hysteria.js.map +1 -0
- package/dist/schemas/transports/index.js +32 -0
- package/dist/schemas/transports/index.js.map +1 -0
- package/dist/schemas/transports/mkcp.js +34 -0
- package/dist/schemas/transports/mkcp.js.map +1 -0
- package/dist/schemas/transports/raw.js +19 -0
- package/dist/schemas/transports/raw.js.map +1 -0
- package/dist/schemas/transports/websocket.js +15 -0
- package/dist/schemas/transports/websocket.js.map +1 -0
- package/dist/schemas/transports/xhttp.js +34 -0
- package/dist/schemas/transports/xhttp.js.map +1 -0
- package/dist/search.js +78 -0
- package/dist/search.js.map +1 -0
- package/dist/state.js +87 -0
- package/dist/state.js.map +1 -0
- package/dist/tools.js +274 -0
- package/dist/tools.js.map +1 -0
- package/dist/tools_impl/diff.js +55 -0
- package/dist/tools_impl/diff.js.map +1 -0
- package/dist/tools_impl/github.js +416 -0
- package/dist/tools_impl/github.js.map +1 -0
- package/dist/tools_impl/merge.js +181 -0
- package/dist/tools_impl/merge.js.map +1 -0
- package/dist/tools_impl/refresh.js +46 -0
- package/dist/tools_impl/refresh.js.map +1 -0
- package/dist/tools_impl/suggest.js +169 -0
- package/dist/tools_impl/suggest.js.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.js +81 -0
- package/dist/utils.js.map +1 -0
- package/dist/validate.js +408 -0
- package/dist/validate.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
url: https://xtls.github.io/en/config/transports/websocket.html
|
|
3
|
+
source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/transports/websocket.md
|
|
4
|
+
title: WebSocket
|
|
5
|
+
category: transports
|
|
6
|
+
slug: transports/websocket
|
|
7
|
+
fetched_at: 2026-05-04T18:43:04.294Z
|
|
8
|
+
---
|
|
9
|
+
# WebSocket
|
|
10
|
+
|
|
11
|
+
Uses standard WebSocket to transport data.
|
|
12
|
+
|
|
13
|
+
WebSocket connections can be routed by other HTTP servers (such as Nginx) or by VLESS fallbacks path.
|
|
14
|
+
|
|
15
|
+
::: danger
|
|
16
|
+
**It is recommended to switch to [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113) to avoid significant traffic characteristics like WebSocket "ALPN is http/1.1".**
|
|
17
|
+
:::
|
|
18
|
+
|
|
19
|
+
::: tip
|
|
20
|
+
WebSocket will recognize the `X-Forwarded-For` header in HTTP requests to overwrite the source address of the traffic, which has higher priority than the PROXY protocol.
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
## WebSocketObject
|
|
24
|
+
|
|
25
|
+
`WebSocketObject` corresponds to the `wsSettings` item in the transport configuration.
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"acceptProxyProtocol": false,
|
|
30
|
+
"path": "/",
|
|
31
|
+
"host": "xray.com",
|
|
32
|
+
"headers": {
|
|
33
|
+
"key": "value"
|
|
34
|
+
},
|
|
35
|
+
"heartbeatPeriod": 10
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> `acceptProxyProtocol`: true | false
|
|
40
|
+
|
|
41
|
+
Only used for inbound, indicating whether to receive PROXY protocol.
|
|
42
|
+
|
|
43
|
+
[PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) is specifically used to pass the real source IP and port of the request. **If you don't understand it, please ignore this item.**
|
|
44
|
+
|
|
45
|
+
Common reverse proxy software (such as HAProxy, Nginx) can be configured to send it, and VLESS fallbacks xver can also send it.
|
|
46
|
+
|
|
47
|
+
When set to `true`, after the underlying TCP connection is established, the requester must send PROXY protocol v1 or v2 first; otherwise, the connection will be closed.
|
|
48
|
+
|
|
49
|
+
> `path`: string
|
|
50
|
+
|
|
51
|
+
The HTTP protocol path used by WebSocket. The default value is `"/"`.
|
|
52
|
+
|
|
53
|
+
If the client path contains the `ed` parameter (e.g., `/mypath?ed=2560`), `Early Data` will be enabled to reduce latency. It uses the `Sec-WebSocket-Protocol` header to carry the first packet data during the upgrade, where the value represents the first packet length threshold. If the length of the first packet exceeds this value, `Early Data` will not be enabled. The recommended value is 2560, and the maximum value is 8192. Excessively large values may cause some compatibility issues. If you encounter compatibility issues, try lowering the threshold.
|
|
54
|
+
|
|
55
|
+
> `host`: string
|
|
56
|
+
|
|
57
|
+
The host sent in the WebSocket HTTP request. Default value is empty. If the server-side value is empty, the host value sent by the client is not verified.
|
|
58
|
+
|
|
59
|
+
When this value is specified on the server side, or `host` is specified in `headers`, it will verify whether it matches the client request host.
|
|
60
|
+
|
|
61
|
+
Client priority for sending host: `host` > `headers` > `address`.
|
|
62
|
+
|
|
63
|
+
> `headers`: map \{string: string\}
|
|
64
|
+
|
|
65
|
+
Client only. Custom HTTP headers, key-value pairs. Each key represents the name of an HTTP header, and the corresponding value is a string.
|
|
66
|
+
|
|
67
|
+
Default is empty.
|
|
68
|
+
|
|
69
|
+
> `heartbeatPeriod`: int
|
|
70
|
+
|
|
71
|
+
Specifies a fixed time interval to send a Ping message to keep the connection alive. If not specified or set to 0, no Ping message is sent, which is the current default behavior.
|
|
72
|
+
|
|
73
|
+
## Browser Dialer
|
|
74
|
+
|
|
75
|
+
Use a browser to handle TLS. See [Browser Dialer](../features/browser_dialer.md) for details.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
url: https://xtls.github.io/en/config/transports/xhttp.html
|
|
3
|
+
source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/transports/xhttp.md
|
|
4
|
+
title: "XHTTP: Beyond REALITY"
|
|
5
|
+
category: transports
|
|
6
|
+
slug: transports/xhttp
|
|
7
|
+
fetched_at: 2026-05-04T18:43:02.279Z
|
|
8
|
+
---
|
|
9
|
+
# XHTTP: Beyond REALITY
|
|
10
|
+
|
|
11
|
+
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Protocol × transport × security compatibility matrix.
|
|
3
|
+
*
|
|
4
|
+
* Hand-curated from XTLS docs + battle-tested config recipes (Hiddify, v2rayN,
|
|
5
|
+
* Remnawave). Used by lint to flag impossible combos and by suggest tools to
|
|
6
|
+
* pick a sane next step.
|
|
7
|
+
*
|
|
8
|
+
* Conservative: only mark combos as "supported" if there's a documented or
|
|
9
|
+
* widely-deployed example. Unknown combos = warn, not error.
|
|
10
|
+
*/
|
|
11
|
+
export const matrix = {
|
|
12
|
+
vless: {
|
|
13
|
+
transports: ["raw", "tcp", "xhttp", "splithttp", "grpc", "ws", "websocket", "httpupgrade", "kcp", "mkcp"],
|
|
14
|
+
security: ["none", "tls", "reality"],
|
|
15
|
+
flows: {
|
|
16
|
+
"xtls-rprx-vision": { transport: ["raw", "tcp"], security: ["tls", "reality"] },
|
|
17
|
+
"xtls-rprx-vision-udp443": { transport: ["raw", "tcp"], security: ["tls", "reality"] },
|
|
18
|
+
},
|
|
19
|
+
notes: "VLESS is the most permissive — supports REALITY, vision flow, all transports.",
|
|
20
|
+
},
|
|
21
|
+
vmess: {
|
|
22
|
+
transports: ["raw", "tcp", "xhttp", "grpc", "ws", "websocket", "httpupgrade", "kcp", "mkcp"],
|
|
23
|
+
security: ["none", "tls"],
|
|
24
|
+
notes: "VMess does NOT support REALITY (no protocol header to hide).",
|
|
25
|
+
},
|
|
26
|
+
trojan: {
|
|
27
|
+
transports: ["raw", "tcp", "xhttp", "grpc", "ws", "websocket", "httpupgrade"],
|
|
28
|
+
security: ["tls"],
|
|
29
|
+
notes: "Trojan requires TLS. REALITY is unsupported on inbound.",
|
|
30
|
+
},
|
|
31
|
+
shadowsocks: {
|
|
32
|
+
transports: ["raw", "tcp", "ws", "websocket", "grpc", "kcp", "mkcp", "httpupgrade"],
|
|
33
|
+
security: ["none"],
|
|
34
|
+
notes: "Shadowsocks ciphers are self-encrypting. REALITY/TLS not supported.",
|
|
35
|
+
},
|
|
36
|
+
socks: {
|
|
37
|
+
transports: ["raw", "tcp"],
|
|
38
|
+
security: ["none", "tls"],
|
|
39
|
+
notes: "SOCKS over TLS (stunnel-style) is supported but rare.",
|
|
40
|
+
},
|
|
41
|
+
http: {
|
|
42
|
+
transports: ["raw", "tcp"],
|
|
43
|
+
security: ["none", "tls"],
|
|
44
|
+
},
|
|
45
|
+
wireguard: {
|
|
46
|
+
transports: ["raw"],
|
|
47
|
+
security: ["none"],
|
|
48
|
+
notes: "WireGuard is its own transport over UDP; xray exposes it as a protocol.",
|
|
49
|
+
},
|
|
50
|
+
hysteria: {
|
|
51
|
+
transports: ["hysteria"],
|
|
52
|
+
security: ["tls"],
|
|
53
|
+
notes: "Hysteria(2) brings its own QUIC-based transport.",
|
|
54
|
+
},
|
|
55
|
+
hysteria2: {
|
|
56
|
+
transports: ["hysteria"],
|
|
57
|
+
security: ["tls"],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
export function isProtocolSecuritySupported(protocol, security) {
|
|
61
|
+
const m = matrix[protocol];
|
|
62
|
+
if (!m)
|
|
63
|
+
return { ok: true }; /* unknown protocol — let validate.ts handle */
|
|
64
|
+
if (!m.security.includes(security)) {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
reason: `protocol "${protocol}" does not support security "${security}". Allowed: ${m.security.join(", ")}.`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return { ok: true };
|
|
71
|
+
}
|
|
72
|
+
export function isProtocolTransportSupported(protocol, transport) {
|
|
73
|
+
const m = matrix[protocol];
|
|
74
|
+
if (!m)
|
|
75
|
+
return { ok: true };
|
|
76
|
+
if (!m.transports.includes(transport)) {
|
|
77
|
+
return {
|
|
78
|
+
ok: false,
|
|
79
|
+
reason: `protocol "${protocol}" does not support transport "${transport}". Allowed: ${m.transports.join(", ")}.`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return { ok: true };
|
|
83
|
+
}
|
|
84
|
+
export function checkFlow(protocol, flow, transport, security) {
|
|
85
|
+
if (!flow)
|
|
86
|
+
return { ok: true };
|
|
87
|
+
const m = matrix[protocol];
|
|
88
|
+
if (!m || !m.flows || !m.flows[flow]) {
|
|
89
|
+
return { ok: true }; /* no rule registered → don't complain. */
|
|
90
|
+
}
|
|
91
|
+
const req = m.flows[flow];
|
|
92
|
+
const tOk = req.transport.includes(transport);
|
|
93
|
+
const sOk = req.security.includes(security);
|
|
94
|
+
if (!tOk || !sOk) {
|
|
95
|
+
return {
|
|
96
|
+
ok: false,
|
|
97
|
+
reason: `flow "${flow}" requires transport ∈ {${req.transport.join(", ")}} and security ∈ {${req.security.join(", ")}} (got transport=${transport}, security=${security}).`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return { ok: true };
|
|
101
|
+
}
|
|
102
|
+
export const protocolFeatures = {
|
|
103
|
+
vless: {
|
|
104
|
+
transports: matrix.vless.transports.slice(),
|
|
105
|
+
security: matrix.vless.security.slice(),
|
|
106
|
+
multiplexing: 1,
|
|
107
|
+
padding: 1,
|
|
108
|
+
antiDpi: 5,
|
|
109
|
+
mobileFriendly: 4,
|
|
110
|
+
battery: 4,
|
|
111
|
+
ease: 3,
|
|
112
|
+
notes: "Best DPI resistance via REALITY+xhttp/raw+vision. Steeper config.",
|
|
113
|
+
},
|
|
114
|
+
vmess: {
|
|
115
|
+
transports: matrix.vmess.transports.slice(),
|
|
116
|
+
security: matrix.vmess.security.slice(),
|
|
117
|
+
multiplexing: 1,
|
|
118
|
+
padding: 0,
|
|
119
|
+
antiDpi: 2,
|
|
120
|
+
mobileFriendly: 4,
|
|
121
|
+
battery: 4,
|
|
122
|
+
ease: 4,
|
|
123
|
+
notes: "Legacy. AEAD only post-2022. No REALITY. UUID-based auth.",
|
|
124
|
+
},
|
|
125
|
+
trojan: {
|
|
126
|
+
transports: matrix.trojan.transports.slice(),
|
|
127
|
+
security: matrix.trojan.security.slice(),
|
|
128
|
+
multiplexing: 1,
|
|
129
|
+
padding: 0,
|
|
130
|
+
antiDpi: 3,
|
|
131
|
+
mobileFriendly: 4,
|
|
132
|
+
battery: 4,
|
|
133
|
+
ease: 4,
|
|
134
|
+
notes: "Looks like vanilla TLS HTTPS. Needs a real cert.",
|
|
135
|
+
},
|
|
136
|
+
shadowsocks: {
|
|
137
|
+
transports: matrix.shadowsocks.transports.slice(),
|
|
138
|
+
security: matrix.shadowsocks.security.slice(),
|
|
139
|
+
multiplexing: 0,
|
|
140
|
+
padding: 0,
|
|
141
|
+
antiDpi: 2,
|
|
142
|
+
mobileFriendly: 5,
|
|
143
|
+
battery: 5,
|
|
144
|
+
ease: 5,
|
|
145
|
+
notes: "Lightest, broadest client support. SS-2022 ciphers required for serious DPI environments.",
|
|
146
|
+
},
|
|
147
|
+
hysteria2: {
|
|
148
|
+
transports: matrix.hysteria2.transports.slice(),
|
|
149
|
+
security: matrix.hysteria2.security.slice(),
|
|
150
|
+
multiplexing: 1,
|
|
151
|
+
padding: 1,
|
|
152
|
+
antiDpi: 4,
|
|
153
|
+
mobileFriendly: 3,
|
|
154
|
+
battery: 2,
|
|
155
|
+
ease: 4,
|
|
156
|
+
notes: "QUIC over UDP. Best throughput on lossy links. Battery-hungry on phones.",
|
|
157
|
+
},
|
|
158
|
+
wireguard: {
|
|
159
|
+
transports: matrix.wireguard.transports.slice(),
|
|
160
|
+
security: matrix.wireguard.security.slice(),
|
|
161
|
+
multiplexing: 0,
|
|
162
|
+
padding: 0,
|
|
163
|
+
antiDpi: 1,
|
|
164
|
+
mobileFriendly: 5,
|
|
165
|
+
battery: 5,
|
|
166
|
+
ease: 5,
|
|
167
|
+
notes: "Easiest, best battery, but trivially DPI-blockable in 2025 RU.",
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../../src/data/compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Embedded catalogue of well-known geosite/geoip categories.
|
|
3
|
+
*
|
|
4
|
+
* Sources:
|
|
5
|
+
* - github.com/v2fly/domain-list-community (geosite)
|
|
6
|
+
* - github.com/v2fly/geoip (geoip)
|
|
7
|
+
* - github.com/runetfreedom/russia-v2ray-rules-dat (Russia-flavoured set)
|
|
8
|
+
*
|
|
9
|
+
* Hand-curated subset of the most-referenced tags. Not exhaustive — used
|
|
10
|
+
* as a "did you mean?" check, not as a hard error. Unknown tag → warn.
|
|
11
|
+
*/
|
|
12
|
+
/* All ISO 3166-1 alpha-2 country codes (lowercase). Most are valid geoip:* /
|
|
13
|
+
* geosite:geolocation-* tags. */
|
|
14
|
+
export const ISO_COUNTRY_CODES = [
|
|
15
|
+
"ad", "ae", "af", "ag", "ai", "al", "am", "ao", "aq", "ar", "as", "at", "au", "aw",
|
|
16
|
+
"ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm", "bn",
|
|
17
|
+
"bo", "bq", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg",
|
|
18
|
+
"ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz",
|
|
19
|
+
"de", "dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "fi",
|
|
20
|
+
"fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg", "gh", "gi", "gl",
|
|
21
|
+
"gm", "gn", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr",
|
|
22
|
+
"ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jm",
|
|
23
|
+
"jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la",
|
|
24
|
+
"lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me",
|
|
25
|
+
"mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu",
|
|
26
|
+
"mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np",
|
|
27
|
+
"nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr",
|
|
28
|
+
"ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd",
|
|
29
|
+
"se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv",
|
|
30
|
+
"sx", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to",
|
|
31
|
+
"tr", "tt", "tv", "tw", "tz", "ua", "ug", "um", "us", "uy", "uz", "va", "vc", "ve",
|
|
32
|
+
"vg", "vi", "vn", "vu", "wf", "ws", "ye", "yt", "za", "zm", "zw",
|
|
33
|
+
];
|
|
34
|
+
/* Special geoip tags. */
|
|
35
|
+
const GEOIP_SPECIAL = [
|
|
36
|
+
"private",
|
|
37
|
+
"tor",
|
|
38
|
+
"telegram",
|
|
39
|
+
"facebook",
|
|
40
|
+
"google",
|
|
41
|
+
"twitter",
|
|
42
|
+
"netflix",
|
|
43
|
+
"cloudflare",
|
|
44
|
+
"fastly",
|
|
45
|
+
"cloudfront",
|
|
46
|
+
];
|
|
47
|
+
/* geosite tags. Curated from domain-list-community + ru flavoured forks. */
|
|
48
|
+
const GEOSITE_NAMES = [
|
|
49
|
+
/* core */
|
|
50
|
+
"category-ads",
|
|
51
|
+
"category-ads-all",
|
|
52
|
+
"category-public-tracker",
|
|
53
|
+
"geolocation-cn",
|
|
54
|
+
"geolocation-!cn",
|
|
55
|
+
/* country-flavoured (ru fork) */
|
|
56
|
+
"category-ru",
|
|
57
|
+
"category-gov-ru",
|
|
58
|
+
"category-banks-ru",
|
|
59
|
+
"category-media-ru",
|
|
60
|
+
/* common services */
|
|
61
|
+
"apple",
|
|
62
|
+
"google",
|
|
63
|
+
"google-cn",
|
|
64
|
+
"googlefcm",
|
|
65
|
+
"googleads",
|
|
66
|
+
"googlescholar",
|
|
67
|
+
"microsoft",
|
|
68
|
+
"amazon",
|
|
69
|
+
"amazon-aws",
|
|
70
|
+
"amazon-cn",
|
|
71
|
+
"youtube",
|
|
72
|
+
"netflix",
|
|
73
|
+
"spotify",
|
|
74
|
+
"twitter",
|
|
75
|
+
"facebook",
|
|
76
|
+
"instagram",
|
|
77
|
+
"telegram",
|
|
78
|
+
"whatsapp",
|
|
79
|
+
"discord",
|
|
80
|
+
"dropbox",
|
|
81
|
+
"github",
|
|
82
|
+
"gitlab",
|
|
83
|
+
"bitbucket",
|
|
84
|
+
"openai",
|
|
85
|
+
"claude",
|
|
86
|
+
"anthropic",
|
|
87
|
+
"huggingface",
|
|
88
|
+
"tiktok",
|
|
89
|
+
"bilibili",
|
|
90
|
+
"reddit",
|
|
91
|
+
"twitch",
|
|
92
|
+
"steam",
|
|
93
|
+
"steam@cn",
|
|
94
|
+
"epicgames",
|
|
95
|
+
"ea",
|
|
96
|
+
"blizzard",
|
|
97
|
+
"riot-games",
|
|
98
|
+
"ubisoft",
|
|
99
|
+
/* dev / package mirrors */
|
|
100
|
+
"category-dev",
|
|
101
|
+
"category-game-platforms",
|
|
102
|
+
"category-game-platforms-download",
|
|
103
|
+
"category-games-cn",
|
|
104
|
+
"category-cdn",
|
|
105
|
+
/* bittorrent / private */
|
|
106
|
+
"category-bittorrent",
|
|
107
|
+
/* ai */
|
|
108
|
+
"category-ai-!cn",
|
|
109
|
+
"category-ai-chat-!cn",
|
|
110
|
+
"category-ai-chat-cn",
|
|
111
|
+
/* misc */
|
|
112
|
+
"private",
|
|
113
|
+
"cn",
|
|
114
|
+
];
|
|
115
|
+
function geoip(name, description) {
|
|
116
|
+
return { prefix: "geoip", name, description };
|
|
117
|
+
}
|
|
118
|
+
function geosite(name, description) {
|
|
119
|
+
return { prefix: "geosite", name, description };
|
|
120
|
+
}
|
|
121
|
+
const COUNTRY_NAMES = {
|
|
122
|
+
ru: "Russia", us: "United States", cn: "China", jp: "Japan", de: "Germany",
|
|
123
|
+
gb: "United Kingdom", fr: "France", kr: "South Korea", hk: "Hong Kong",
|
|
124
|
+
sg: "Singapore", tw: "Taiwan", ir: "Iran", in: "India", br: "Brazil",
|
|
125
|
+
ca: "Canada", au: "Australia", nl: "Netherlands", se: "Sweden",
|
|
126
|
+
fi: "Finland", no: "Norway", pl: "Poland", ua: "Ukraine", by: "Belarus",
|
|
127
|
+
kz: "Kazakhstan", tr: "Turkey", il: "Israel", ae: "United Arab Emirates",
|
|
128
|
+
sa: "Saudi Arabia", za: "South Africa", mx: "Mexico", ar: "Argentina",
|
|
129
|
+
cl: "Chile", co: "Colombia", th: "Thailand", vn: "Vietnam", id: "Indonesia",
|
|
130
|
+
my: "Malaysia", ph: "Philippines", pk: "Pakistan", bd: "Bangladesh",
|
|
131
|
+
};
|
|
132
|
+
const entries = [];
|
|
133
|
+
/* geoip per country */
|
|
134
|
+
for (const code of ISO_COUNTRY_CODES) {
|
|
135
|
+
const human = COUNTRY_NAMES[code] ?? code.toUpperCase();
|
|
136
|
+
entries.push(geoip(code, `IPs geolocated to ${human}`));
|
|
137
|
+
}
|
|
138
|
+
/* geoip special */
|
|
139
|
+
for (const t of GEOIP_SPECIAL)
|
|
140
|
+
entries.push(geoip(t, `Special IP set: ${t}`));
|
|
141
|
+
/* geosite well-known */
|
|
142
|
+
for (const t of GEOSITE_NAMES)
|
|
143
|
+
entries.push(geosite(t, `Domain list: ${t}`));
|
|
144
|
+
/* geosite per country (geolocation-XX) */
|
|
145
|
+
for (const code of ISO_COUNTRY_CODES) {
|
|
146
|
+
const human = COUNTRY_NAMES[code] ?? code.toUpperCase();
|
|
147
|
+
entries.push(geosite(`geolocation-${code}`, `Domains geolocated to ${human}`));
|
|
148
|
+
}
|
|
149
|
+
export const GEO_CATALOGUE = entries;
|
|
150
|
+
const GEOIP_SET = new Set(entries.filter((e) => e.prefix === "geoip").map((e) => e.name));
|
|
151
|
+
const GEOSITE_SET = new Set(entries.filter((e) => e.prefix === "geosite").map((e) => e.name));
|
|
152
|
+
/* "geoip:ru" / "geosite:youtube" → known? */
|
|
153
|
+
export function isKnownGeoTag(tag) {
|
|
154
|
+
if (!tag.includes(":"))
|
|
155
|
+
return false;
|
|
156
|
+
const [prefix, rawName] = tag.split(":", 2);
|
|
157
|
+
/* Tags can carry "@cn" suffixes (steam@cn) or "!" negations (geolocation-!cn). */
|
|
158
|
+
const name = rawName.split("@")[0];
|
|
159
|
+
if (prefix === "geoip")
|
|
160
|
+
return GEOIP_SET.has(name);
|
|
161
|
+
if (prefix === "geosite")
|
|
162
|
+
return GEOSITE_SET.has(name);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
export function searchGeoCatalogue(query, limit = 30) {
|
|
166
|
+
const q = query.toLowerCase().trim();
|
|
167
|
+
if (!q)
|
|
168
|
+
return [];
|
|
169
|
+
const hits = [];
|
|
170
|
+
for (const e of entries) {
|
|
171
|
+
let score = 0;
|
|
172
|
+
if (e.name === q)
|
|
173
|
+
score += 100;
|
|
174
|
+
else if (e.name.startsWith(q))
|
|
175
|
+
score += 50;
|
|
176
|
+
else if (e.name.includes(q))
|
|
177
|
+
score += 20;
|
|
178
|
+
if (e.description.toLowerCase().includes(q))
|
|
179
|
+
score += 10;
|
|
180
|
+
if (score > 0)
|
|
181
|
+
hits.push({ e, score });
|
|
182
|
+
}
|
|
183
|
+
hits.sort((a, b) => b.score - a.score);
|
|
184
|
+
return hits.slice(0, limit).map(({ e }) => ({
|
|
185
|
+
prefix: e.prefix,
|
|
186
|
+
name: e.name,
|
|
187
|
+
description: e.description,
|
|
188
|
+
tag: `${e.prefix}:${e.name}`,
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=geocatalogue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geocatalogue.js","sourceRoot":"","sources":["../../src/data/geocatalogue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;iCACiC;AACjC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClF,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACjE,CAAC;AAEF,yBAAyB;AACzB,MAAM,aAAa,GAAG;IACpB,SAAS;IACT,KAAK;IACL,UAAU;IACV,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,YAAY;CACb,CAAC;AAEF,4EAA4E;AAC5E,MAAM,aAAa,GAAG;IACpB,UAAU;IACV,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,gBAAgB;IAChB,iBAAiB;IACjB,iCAAiC;IACjC,aAAa;IACb,iBAAiB;IACjB,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,OAAO;IACP,QAAQ;IACR,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;IACf,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,aAAa;IACb,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,UAAU;IACV,WAAW;IACX,IAAI;IACJ,UAAU;IACV,YAAY;IACZ,SAAS;IACT,2BAA2B;IAC3B,cAAc;IACd,yBAAyB;IACzB,kCAAkC;IAClC,mBAAmB;IACnB,cAAc;IACd,0BAA0B;IAC1B,qBAAqB;IACrB,QAAQ;IACR,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,UAAU;IACV,SAAS;IACT,IAAI;CACL,CAAC;AAUF,SAAS,KAAK,CAAC,IAAY,EAAE,WAAmB;IAC9C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAChD,CAAC;AACD,SAAS,OAAO,CAAC,IAAY,EAAE,WAAmB;IAChD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,aAAa,GAA2B;IAC5C,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS;IAC1E,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW;IACtE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ;IACpE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ;IAC9D,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS;IACvE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,sBAAsB;IACxE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW;IACrE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW;IAC3E,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY;CACpE,CAAC;AAEF,MAAM,OAAO,GAAe,EAAE,CAAC;AAE/B,uBAAuB;AACvB,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AACD,mBAAmB;AACnB,KAAK,MAAM,CAAC,IAAI,aAAa;IAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9E,wBAAwB;AACxB,KAAK,MAAM,CAAC,IAAI,aAAa;IAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,0CAA0C;AAC1C,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,EAAE,yBAAyB,KAAK,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA4B,OAAO,CAAC;AAE9D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE9F,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,kFAAkF;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAUD,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;IAC1D,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;YAAE,KAAK,IAAI,GAAG,CAAC;aAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;aACtC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzD,IAAI,KAAK,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE;KAC7B,CAAC,CAAC,CAAC;AACN,CAAC"}
|