data class Clash( /*------------------------------------------- *General configuration* -------------------------------------------*/ // Allow LAN val allowLan: Boolean? = null, val bindAddress: String? = null, val lanAllowedIps: List? = null, val lanDisallowedIps: List? = null, val authentication: List? = null, val skipAuthPrefixes: List? = null, // Operation Mode val mode: String? = null, // Log Level val logLevel: String? = null, // TCP Keep Alive Settings val keepAliveInterval: Int? = null, val keepAliveIdle: Int? = null, val disableKeepAlive: Boolean? = null, // Process Matching Mode val findProcessMode: String? = null, // External Control (API) val externalController: String? = null, val externalControllerTls: String? = null, val externalControllerCors: ExternalControllerCors? = null, val externalControllerUnix: String? = null, val externalControllerPipe: String? = null, val secret: String? = null, val externalDohServer: String? = null, // External User Interface val externalUi: String? = null, val externalUiName: String? = null, val externalUiUrl: String? = null, // Cache val profile: Profile? = null, // Unified Delay val unifiedDelay: Boolean? = null, // TCP Concurrency val tcpConcurrent: Boolean? = null, // Outbound Interface val interfaceName: String? = null, // Routing Mark val routingMark: Int? = null, // TLS val tls: TLS? = null, // GEO Data Configuration val geoxUrl: GeoXUrl? = null, val geoAutoUpdate: Boolean? = null, val geoUpdateInterval: Int? = null, val geodataMode: Boolean? = null, val geodataLoader: String? = null, val geoSiteMatcher: String? = null, // Global Client Fingerprint val globalClientFingerprint: String? = null, // IPV6 val ipv6: Boolean? = null, // Custom Global UA val globalUa: String? = null, // ETag Support val etagSupport: Boolean? = null, // Global Config val ssConfig: String? = null, val vmessConfig: String? = null, /*------------------------------------------------ *DNS* ------------------------------------------------*/ // TODO: val hosts: List? = null, val dns: DNS? = null, val sniffer: Sniffer? = null, /*------------------------------------------------ *Inbounds* ------------------------------------------------*/ // Proxy Port val port: Int? = null, val socksPort: Int? = null, val mixedPort: Int? = null, val redirPort: Int? = null, val tproxyPort: Int? = null, val tun: Tun? = null, val listeners: List? = null, // inbound-tfo val inboundTfo: Boolean? = null, val inboundMptcp: Boolean? = null, // Outbound val proxies: List? = null, val proxyProviders: Map? = null, val proxyGroups: List? = null, val ruleProviders: Map? = null, // TODO val rules: List? = null, val subRules: Map>? = null, // TODO val tunnels: List? = null, val ntp: NTP? = null, val experimental: Experimental? = null, val iptables: IPTables? = null, val clashForAndroid: ClashForAndroid? = null, val tuicServer: TuicServer? = null, ) data class GeoXUrl( val geoip: String? = null, val geosite: String? = null, val mmdb: String? = null, val asn: String? = null ) data class TLS( val certificate: String? = null, val privateKey: String? = null, val customCertifactes: List? = null ) data class ExternalControllerCors( val allowOrigins: List? = null, val allowPrivateNetwork: Boolean? = null ) data class Experimental( val fingerprints: List? = null, val quicGoDisableGSO: Boolean? = null, val quicGoDisableECN: Boolean? = null, val ip4pEnable: Boolean? = null, ) data class Profile( val storeSelected: Boolean? = null, val storeFakeIp: Boolean? = null ) data class Tun( val enable: Boolean? = null, val stack: String? = null, val autoRoute: Boolean? = null, val autoRedirect: Boolean? = null, val autoDetectInterface: Boolean? = null, val dnsHijack: List? = null, val device: String? = null, val mtu: Int? = null, val strictRoute: Boolean? = null, val gso: Boolean? = null, val gsoMaxSize: Int? = null, val udpTimeout: Int? = null, val iproute2TableIndex: Int? = null, val iproute2RuleIndex: Int? = null, val endpointIndependentNat: Boolean? = null, val routeAddressSet: List? = null, val routeExcludeAddressSet: List? = null, val routeAddress: List? = null, val routeExcludeAddress: List? = null, val includeInterface: List? = null, val excludeInterface: List? = null, val includeUid: List? = null, val includeUidRange: List>? = null, val excludeUid: List? = null, val excludeUidRange: List>? = null, val includeAndroidUser: List? = null, val includePackage: List? = null, val excludePackage: List? = null, @Deprecated("") val inet4RouteAddress: List? = null, @Deprecated("") val inet6RouteAddress: List? = null, @Deprecated("") val inet4RouteExcludeAddress: List? = null, @Deprecated("") val inet6RouteExcludeAddress: List? = null ) data class Sniffer( val enable: Boolean? = null, val forceDnsMapping: Boolean? = null, val parsePureIp: Boolean? = null, val overrideDestination: Boolean? = null, val sniff: Map? = null, val forceDomain: List? = null, val skipDomain: List? = null, val skipSrcAddress: List? = null, val skipDstAddress: List? = null, @Deprecated("") val sniffing: List? = null, @Deprecated("") val portWhitelist: List? = null ) data class Sniff( val ports: List? = null, val overrideDestination: Boolean? = null, ) sealed class Tunnel { data class InlineTunnel( val network: String? = null, val address: String? = null, val target: String? = null, val proxy: String? = null ) : Tunnel() data class FullTunnel( val network: List? = null, val address: String? = null, val target: String? = null, val proxy: String? = null ) : Tunnel() } data class DNS( val enable: Boolean? = null, val preferH3: Boolean? = null, val ipv6: Boolean? = null, val ipv6Timeout: UInt? = null, val useHosts: Boolean? = null, val useSystemHosts: Boolean? = null, val respectRules: Boolean? = null, val nameServer: List? = null, val fallback: List? = null, val fallbackFilter: FallbackFilter? = null, val listen: String? = null, val enhancedMode: Int? = null, val fakeIPRange: String? = null, val fakeIPFilter: List? = null, val fakeIPFilterMode: Int? = null, val defaultNameserver: List? = null, val cacheAlgorithm: String? = null, // TODO // val nameServerPolicy: OrderedMap? = null, val proxyServerNameserver: List? = null, val directNameServer: List? = null, val directNameServerFollowPolicy: Boolean? = null ) data class FallbackFilter( val geoIP: Boolean? = null, val geoIPCode: String? = null, val ipCIDR: List? = null, val domain: List? = null, val geoSite: List? = null ) sealed class Proxy { abstract val tfo: Boolean? abstract val mptcp: Boolean? abstract val interfaceName: String? abstract val routingMark: Int? abstract val ipVersion: String? abstract val dialerProxy: String? abstract val smux: SingMuxOption? data class DirectProxy( val name: String? = null, override val tfo: Boolean?, override val mptcp: Boolean?, override val interfaceName: String?, override val routingMark: Int?, override val ipVersion: String?, override val dialerProxy: String?, override val smux: SingMuxOption?, ) : Proxy() data class RejectProxy( val name: String? = null, ) data class DnsProxy( val name: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class HttpProxy( val name: String? = null, val server: String, val port: Int, val username: String? = null, val password: String? = null, val tls: Boolean? = null, val sni: String? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val headers: Map? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class HysteriaProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val ports: String? = null, val protocol: String? = null, val obfsProtocol: String? = null, // compatible with Stash val up: String? = null, val upSpeed: Int? = null, // compatible with Stash val down: String? = null, val downSpeed: Int? = null, // compatible with Stash val auth: String? = null, val authString: String? = null, val obfs: String? = null, val sni: String? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val alpn: List? = null, val customCA: String? = null, val customCAString: String? = null, val receiveWindowConn: Int? = null, val receiveWindow: Int? = null, val disableMTUDiscovery: Boolean? = null, val fastOpen: Boolean? = null, val hopInterval: Int? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class Hysteria2Proxy( val name: String? = null, val server: String? = null, val port: Int? = null, val ports: String? = null, val hopInterval: Int? = null, val up: String? = null, val down: String? = null, val password: String? = null, val obfs: String? = null, val obfsPassword: String? = null, val sni: String? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val alpn: List? = null, val customCA: String? = null, val customCAString: String? = null, val cwnd: Int? = null, val udpMTU: Int? = null, val initialStreamReceiveWindow: ULong? = null, val maxStreamReceiveWindow: ULong? = null, val initialConnectionReceiveWindow: ULong? = null, val maxConnectionReceiveWindow: ULong? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class MieruProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val portRange: String? = null, val transport: String? = null, val userName: String? = null, val password: String? = null, val multiplexing: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class ShadowSocksProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val password: String? = null, val cipher: String? = null, val udp: Boolean? = null, val plugin: String? = null, // NOTE: 暂时先不对该字段进行解析 val pluginOpts: Map? = null, val udpOverTCP: Boolean? = null, val udpOverTCPVersion: Int? = null, val clientFingerprint: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class ShadowSocksRProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val password: String? = null, val cipher: String? = null, val obfs: String? = null, val obfsParam: String? = null, val protocol: String? = null, val protocolParam: String? = null, val udp: Boolean? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class SnellProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val psk: String? = null, val udp: Boolean? = null, val version: Int? = null, val obfsOpts: Map? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class Socks5Proxy( val name: String? = null, val server: String? = null, val port: Int? = null, val userName: String? = null, val password: String? = null, val tls: Boolean? = null, val udp: Boolean? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class SshProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val userName: String? = null, val password: String? = null, val privateKey: String? = null, val privateKeyPassphrase: String? = null, val hostKey: List? = null, val hostKeyAlgorithms: List? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class TrojanProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val password: String? = null, val alpn: List? = null, val sni: String? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val udp: Boolean? = null, val network: String? = null, val realityOpts: RealityOptions? = null, val grpcOpts: GrpcOptions? = null, val wsOpts: WSOptions? = null, val ssOpts: TrojanSSOption? = null, val clientFingerprint: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class TuicProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val token: String? = null, val uuid: String? = null, val password: String? = null, val ip: String? = null, val heartbeatInterval: Int? = null, val alpn: List? = null, val reduceRtt: Boolean? = null, val requestTimeout: Int? = null, val udpRelayMode: String? = null, val congestionController: String? = null, val disableSni: Boolean? = null, val maxUdpRelayPacketSize: Int? = null, val fastOpen: Boolean? = null, val maxOpenStreams: Int? = null, val cwnd: Int? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val customCA: String? = null, val customCAString: String? = null, val receiveWindowConn: Int? = null, val receiveWindow: Int? = null, val disableMTUDiscovery: Boolean? = null, val maxDatagramFrameSize: Int? = null, val sni: String? = null, val udpOverStream: Boolean? = null, val udpOverStreamVersion: Int? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class VlessProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val uuid: String? = null, val flow: String? = null, val tls: Boolean? = null, val alpn: List? = null, val udp: Boolean? = null, val packetAddr: Boolean? = null, val xudp: Boolean? = null, val packetEncoding: String? = null, val network: String? = null, val realityOpts: RealityOptions? = null, val httpOpts: HTTPOptions? = null, val http2Opts: HTTP2Options? = null, val grpcOpts: GrpcOptions? = null, val wsOpts: WSOptions? = null, val wsPath: String? = null, val wsHeaders: Map? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val serverName: String? = null, val clientFingerprint: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class VmessProxy( val name: String? = null, val server: String? = null, val port: Int? = null, val uuid: String? = null, val alterId: Int? = null, val cipher: String? = null, val udp: Boolean? = null, val network: String? = null, val tls: Boolean? = null, val alpn: List? = null, val skipCertVerify: Boolean? = null, val fingerprint: String? = null, val serverName: String? = null, val realityOpts: RealityOptions? = null, val httpOpts: HTTPOptions? = null, val http2Opts: HTTP2Options? = null, val grpcOpts: GrpcOptions? = null, val wsOpts: WSOptions? = null, val packetAddr: Boolean? = null, val xudp: Boolean? = null, val packetEncoding: String? = null, val globalPadding: Boolean? = null, val authenticatedLength: Boolean? = null, val clientFingerprint: String? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class WireGuardProxy( val name: String? = null, val ip: String? = null, val ipv6: String? = null, val privateKey: String? = null, val workers: Int? = null, val mtu: Int? = null, val udp: Boolean? = null, val persistentKeepalive: Int? = null, val amneziaWGOption: AmneziaWGOption? = null, val peers: List? = null, val remoteDnsResolve: Boolean? = null, val dns: List? = null, val refreshServerIPInterval: Int? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, override val interfaceName: String? = null, override val routingMark: Int? = null, override val ipVersion: String? = null, override val dialerProxy: String? = null, override val smux: SingMuxOption?, ) : Proxy() data class RealityOptions( val publicKey: String? = null, val shortID: String? = null, ) data class GrpcOptions( val grpcServiceName: String? = null, ) data class HTTPOptions( val method: String? = null, val path: List? = null, val headers: Map>? = null, ) data class HTTP2Options( val host: List? = null, val path: String? = null, ) data class WSOptions( val path: String? = null, val headers: Map? = null, val maxEarlyData: Int? = null, val earlyDataHeaderName: String? = null, val v2rayHttpUpgrade: Boolean? = null, val v2rayHttpUpgradeFastOpen: Boolean? = null, ) data class TrojanSSOption( val enabled: Boolean? = null, val method: String? = null, val password: String? = null, ) data class WireGuardPeerOption( val server: String? = null, val port: Int? = null, val publicKey: String? = null, val preSharedKey: String? = null, val reserved: List? = null, val allowedIPs: List? = null, ) data class AmneziaWGOption( val jc: Int? = null, val jMin: Int? = null, val jMax: Int? = null, val s1: Int? = null, val s2: Int? = null, val h1: UInt? = null, val h2: UInt? = null, val h3: UInt? = null, val h4: UInt? = null, ) data class SingMuxOption( val enabled: Boolean? = null, val protocol: String? = null, val maxConnections: Int? = null, val minStreams: Int? = null, val maxStreams: Int? = null, val padding: Boolean? = null, val statistic: Boolean? = null, val onlyTcp: Boolean? = null, val brutalOpts: BrutalOption? = null, ) data class BrutalOption( val enabled: Boolean? = null, val up: String? = null, val down: String? = null, ) data class SimpleObfsOption( val mode: String? = null, val host: String? = null ) } data class SmuxConfig( val enabled: Boolean? = null, val protocol: String? = null, val maxConnections: Int? = null, val minStreams: Int? = null, val maxStreams: Int? = null, val statistic: Boolean? = null, val onlyTcp: Boolean? = null, val padding: Boolean? = null, val brutalOpts: BruteOpts? = null ) { data class BruteOpts( val enabled: Boolean? = null, val up: Int? = null, val down: Int? = null ) } sealed class ProxyGroup { abstract val name: String? abstract val proxies: List? abstract val use: List? abstract val url: String? abstract val interval: Int? abstract val lazy: Boolean? abstract val timeout: Int? abstract val maxFailedTimes: Int? abstract val disableUDP: Boolean? @Deprecated("") abstract val interfaceName: String? @Deprecated("") abstract val routingMark: Int? abstract val includeAll: Boolean? abstract val includeAllProxies: Boolean? abstract val includeAllProviders: Boolean? abstract val filter: String? abstract val excludeFilter: String? abstract val excludeType: String? abstract val expectedStatus: String? abstract val hidden: Boolean? abstract val icon: String? data class UrlTest( override val name: String?, override val proxies: List?, override val use: List?, override val url: String?, override val interval: Int?, override val lazy: Boolean?, override val timeout: Int?, override val maxFailedTimes: Int?, override val disableUDP: Boolean?, override val interfaceName: String?, override val routingMark: Int?, override val includeAll: Boolean?, override val includeAllProxies: Boolean?, override val includeAllProviders: Boolean?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val expectedStatus: String?, override val hidden: Boolean?, override val icon: String?, val tolerance: Int?, ):ProxyGroup() data class Select( override val name: String?, override val proxies: List?, override val use: List?, override val url: String?, override val interval: Int?, override val lazy: Boolean?, override val timeout: Int?, override val maxFailedTimes: Int?, override val disableUDP: Boolean?, override val interfaceName: String?, override val routingMark: Int?, override val includeAll: Boolean?, override val includeAllProxies: Boolean?, override val includeAllProviders: Boolean?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val expectedStatus: String?, override val hidden: Boolean?, override val icon: String? ): ProxyGroup() data class Fallback( override val name: String?, override val proxies: List?, override val use: List?, override val url: String?, override val interval: Int?, override val lazy: Boolean?, override val timeout: Int?, override val maxFailedTimes: Int?, override val disableUDP: Boolean?, override val interfaceName: String?, override val routingMark: Int?, override val includeAll: Boolean?, override val includeAllProxies: Boolean?, override val includeAllProviders: Boolean?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val expectedStatus: String?, override val hidden: Boolean?, override val icon: String? ): ProxyGroup() data class LoadBalance( override val name: String?, override val proxies: List?, override val use: List?, override val url: String?, override val interval: Int?, override val lazy: Boolean?, override val timeout: Int?, override val maxFailedTimes: Int?, override val disableUDP: Boolean?, override val interfaceName: String?, override val routingMark: Int?, override val includeAll: Boolean?, override val includeAllProxies: Boolean?, override val includeAllProviders: Boolean?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val expectedStatus: String?, override val hidden: Boolean?, override val icon: String?, val strategy: String?, ): ProxyGroup() data class Relay( override val name: String?, override val proxies: List?, override val use: List?, override val url: String?, override val interval: Int?, override val lazy: Boolean?, override val timeout: Int?, override val maxFailedTimes: Int?, override val disableUDP: Boolean?, override val interfaceName: String?, override val routingMark: Int?, override val includeAll: Boolean?, override val includeAllProxies: Boolean?, override val includeAllProviders: Boolean?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val expectedStatus: String?, override val hidden: Boolean?, override val icon: String? ):ProxyGroup() } sealed class ProxyProvider { abstract val name: String? abstract val interval: Int? abstract val filter: String? abstract val excludeFilter: String? abstract val excludeType: String? abstract val dialerProxy: String? abstract val healthCheck: HealthCheck? abstract val override: Override? data class FileProvider( override val name: String? = null, override val interval: Int?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val dialerProxy: String?, override val healthCheck: HealthCheck?, override val override: Override?, val path: String?, ) : ProxyProvider() data class HttpProvider( override val name: String? = null, override val interval: Int?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val dialerProxy: String?, override val healthCheck: HealthCheck?, override val override: Override?, val url: String, val path: String? = null, val proxy: String? = null, val sizeLimit: Long? = null, val header: Map>? = null, ) : ProxyProvider() data class InlineProvider( override val name: String? = null, override val interval: Int?, override val filter: String?, override val excludeFilter: String?, override val excludeType: String?, override val dialerProxy: String?, override val healthCheck: HealthCheck?, override val override: Override?, // TODO: val payload: List>?, ) : ProxyProvider() data class HealthCheck( val enable: Boolean, val url: String, val interval: Int, val timeout: Int? = null, val lazy: Boolean? = true, val expectedStatus: String? = null, ) data class Override( val tfo: Boolean? = null, val mptcp: Boolean? = null, val udp: Boolean? = null, val udpOverTcp: Boolean? = null, val up: String? = null, val down: String? = null, val dialerProxy: String? = null, val skipCertVerify: Boolean? = null, val interfaceName: String? = null, val routingMark: Int? = null, val ipVersion: String? = null, val additionalPrefix: String? = null, val additionalSuffix: String? = null, val proxyName: List? = null, ) data class OverrideProxyName( val pattern: String, val target: String, ) } sealed class RuleProvider { abstract val behavior: String? data class FileProvider( override val behavior: String? = null, val format: String? = null, val interval: Int? = null, val path: String? = null, ) : RuleProvider() data class HttpProvider( override val behavior: String? = null, val format: String? = null, val interval: Int? = null, val path: String? = null, val url: String? = null, val proxy: String? = null, val sizeLimit: Long? = null, ) : RuleProvider() data class InlineProvider( override val behavior: String, val payload: List, ) : RuleProvider() } data class Header( val userAgent: List? = null, val accept: List? = null, val authorization: List? = null ) data class HealthCheck( val enable: Boolean? = null, val interval: Int? = null, val lazy: Boolean? = null, val url: String? = null, val expectedStatus: Int? = null ) data class Override( val skipCertVerify: Boolean? = null, val udp: Boolean? = null, val down: String? = null, val up: String? = null, val dialerProxy: String? = null, val interfaceName: String? = null, val routingMark: Int? = null, val ipVersion: String? = null, val additionalPrefix: String? = null, val additionalSuffix: String? = null, val proxyName: List? = null ) data class ProxyName( val pattern: String? = null, val target: String? = null ) data class Payload( val name: String? = null, val type: String? = null, val server: String? = null, val port: Int? = null, val cipher: String? = null, val password: String? = null ) sealed class Listener { abstract val name: String? abstract val port: Int? abstract val listen: String? abstract val rule: String? abstract val proxy: String? data class HttpListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val users: List? = null, val certificate: String? = null, val privateKey: String? = null ) : Listener() data class SocksListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val udp: Boolean? = null, val users: List? = null, val certificate: String? = null, val privateKey: String? = null ) : Listener() data class MixedListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val udp: Boolean? = null, val users: List? = null, val certificate: String? = null, val privateKey: String? = null ) : Listener() data class RedirListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null ) : Listener() data class TProxyListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val udp: Boolean? = null ) : Listener() data class TunListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val stack: String? = null, val dnsHijack: List? = null, val inet4Address: List? = null, val inet6Address: List? = null, val autoDetectInterface: Boolean? = null, val autoRoute: Boolean? = null, val mtu: Int? = null, val strictRoute: Boolean? = null, val inet4RouteAddress: List? = null, val inet6RouteAddress: List? = null, val endpointIndependentNat: Boolean? = null, val includeUid: List? = null, val includeUidRange: List? = null, val excludeUid: List? = null, val excludeUidRange: List? = null, val includeAndroidUser: List? = null, val includePackage: List? = null, val excludePackage: List? = null ) : Listener() data class ShadowsocksListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val password: String? = null, val cipher: String? = null, val udp: Boolean? = null ) : Listener() data class VmessListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val users: List? = null, val privateKey: String? = null, val certificate: String? = null, val wsPath: String? = null, val realityConfig: RealityConfig? = null ) : Listener() data class TuicListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val token: List? = null, val users: Map? = null, val certificate: String? = null, val privateKey: String? = null, val congestionController: String? = null, val maxIdleTime: Int? = null, val authenticationTimeout: Int? = null, val alpn: List? = null, val maxUdpRelayPacketSize: Int? = null ) : Listener() data class Hysteria2Listener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val users: Map? = null, val up: Int? = null, val down: Int? = null, val ignoreClientBandwidth: Boolean? = null, val obfs: String? = null, val obfsPassword: String? = null, val masquerade: String? = null, val alpn: List? = null, val certificate: String? = null, val privateKey: String? = null ) : Listener() data class TunnelListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val network: List? = null, val target: String? = null ) : Listener() data class VlessListener( override val name: String? = null, override val port: Int? = null, override val listen: String? = null, override val rule: String? = null, override val proxy: String? = null, val users: List? = null, val wsPath: String? = null, val certificate: String? = null, val privateKey: String? = null, val realityConfig: RealityConfig? = null ) : Listener() data class User( val username: String? = null, val password: String? = null ) data class VmessUser( val username: String? = null, val uuid: String? = null, val alterId: Int? = null ) data class VlessUser( val username: String? = null, val uuid: String? = null, val flow: String? = null ) data class RealityConfig( val dest: String? = null, val privateKey: String? = null, val shortId: List? = null, val serverNames: List? = null ) } data class NTP( val enable: Boolean? = null, val server: String? = null, val port: Int? = null, val interval: Int? = null, val dialerProxy: String? = null, val writeToSystem: Boolean? = null ) data class TuicServer( val enable: Boolean? = null, val listen: String? = null, val token: List? = null, val users: Map? = null, val certificate: String? = null, val privateKey: String? = null, val congestionController: String? = null, val maxIdleTime: Int? = null, val authenticationTimeout: Int? = null, val alpn: List? = null, val maxUdpRelayPacketSize: Int? = null, val cwnd: Int? = null, ) data class IPTables( val enable: Boolean? = null, val inboundInterface: String? = null, val bypass: List? = null, val dnsRedirect: Boolean? = null ) data class ClashForAndroid( val appendSystemDns: Boolean? = null, val uiSubtitlePattern: String? = null )