diff --git a/OPENSOURCELICENSES b/OPENSOURCELICENSES index b4cadf5a..a80e94bd 100644 --- a/OPENSOURCELICENSES +++ b/OPENSOURCELICENSES @@ -933,3 +933,29 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#### code_field + +https://github.com/BertrandBev/code_field + +MIT License + +Copyright (c) 2021 Bertrand Bevillard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index ff633b1d..d74412bb 100644 --- a/README.md +++ b/README.md @@ -99,9 +99,10 @@ Table of Contents * [Run brook socks5 with username and password. A stand-alone standard socks5 server](#run-brook-socks5-with-username-and-password-a-stand-alone-standard-socks5-server) * [brook relayoverbrook can relay a local address to a remote address over brook, both TCP and UDP, it works with brook server wsserver wssserver.](#brook-relayoverbrook-can-relay-a-local-address-to-a-remote-address-over-brook-both-tcp-and-udp-it-works-with-brook-server-wsserver-wssserver) * [brook dnsserveroverbrook can create a encrypted DNS server, both TCP and UDP, it works with brook server wsserver wssserver.](#brook-dnsserveroverbrook-can-create-a-encrypted-dns-server-both-tcp-and-udp-it-works-with-brook-server-wsserver-wssserver) - * [brook tproxy Transparent Proxy Gateway on official OpenWrt](#brook-tproxy-transparent-proxy-gateway-on-official-openwrt) - * [brook tproxy Transparent Proxy Gateway on any Linux (wired)](#brook-tproxy-transparent-proxy-gateway-on-any-linux-wired) - * [GUI for official OpenWrt](#gui-for-official-openwrt) + * [Brook OpenWRT Router: Perfectly supports IPv4/IPv6/TCP/UDP. Native IPv6](#brook-openwrt-router-perfectly-supports-ipv4ipv6tcpudp-native-ipv6) + * [Turn macOS into a Gateway with Brook](#turn-macos-into-a-gateway-with-brook) + * [Turn Windows into a Gateway with Brook](#turn-windows-into-a-gateway-with-brook) + * [Turn Linux into a Gateway with Brook](#turn-linux-into-a-gateway-with-brook) * [brook relay can relay a address to a remote address. It can relay any tcp and udp server](#brook-relay-can-relay-a-address-to-a-remote-address-it-can-relay-any-tcp-and-udp-server) * [brook socks5tohttp can convert a socks5 to a http proxy](#brook-socks5tohttp-can-convert-a-socks5-to-a-http-proxy) * [brook pac creates pac server](#brook-pac-creates-pac-server) @@ -121,9 +122,10 @@ Table of Contents * [运行 brook socks5, 一个独立的标准 socks5 server, 指定用户名和密码](#运行-brook-socks5-一个独立的标准-socks5-server-指定用户名和密码) * [brook relayoverbrook 中继任何 TCP 和 UDP server, 让其走 brook 协议. 它与 brook server wsserver wssserver 一起工作](#brook-relayoverbrook-中继任何-tcp-和-udp-server-让其走-brook-协议-它与-brook-server-wsserver-wssserver-一起工作) * [brook dnsserveroverbrook 用来创建一个加密 DNS Server, TCP and UDP, 它与 brook server wsserver wssserver 一起工作](#brook-dnsserveroverbrook-用来创建一个加密-dns-server-tcp-and-udp-它与-brook-server-wsserver-wssserver-一起工作) - * [brook tproxy 透明代理网关在官网原版 OpenWrt](#brook-tproxy-透明代理网关在官网原版-openwrt) - * [brook tproxy 透明代理网关在任意 Linux(有线)](#brook-tproxy-透明代理网关在任意-linux有线) - * [官网原版 OpenWrt 图形客户端](#官网原版-openwrt-图形客户端) + * [Brook OpenWRT 路由器,完美支持 IPv4/IPv6/TCP/UDP,Native IPv6](#brook-openwrt-路由器完美支持-ipv4ipv6tcpudpnative-ipv6) + * [使用 Brook 把 macOS 变成网关](#使用-brook-把-macos-变成网关) + * [使用 Brook 把 Windows 变成网关](#使用-brook-把-windows-变成网关) + * [使用 Brook 把 Linux 变成网关](#使用-brook-把-linux-变成网关) * [brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver](#brook-relay-可以中继任何-tcp-和-udp-server-这是一个独立的功能-它不依赖-brook-server-wsserver-wssserver) * [brook socks5tohttp 将 socks5 proxy 转换为 http proxy](#brook-socks5tohttp-将-socks5-proxy-转换为-http-proxy) * [brook pac 创建一个 pac server](#brook-pac-创建一个-pac-server) @@ -157,9 +159,9 @@ brook server -l :9999 -p hello | iOS | Android | Mac |Windows |Linux |OpenWrt | | --- | --- | --- | --- | --- | --- | -| [![](https://brook.app/images/appstore.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![](https://brook.app/images/android.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.apk) | [![](https://brook.app/images/mac.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![Windows](https://brook.app/images/windows.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.exe) | [![](https://brook.app/images/linux.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.bin) | [![OpenWrt](https://brook.app/images/openwrt.png)](https://github.com/txthinking/brook/releases) | - -> OpenWrt: After installation, you need to refresh the page to see the menu +| [![](https://brook.app/images/appstore.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![](https://brook.app/images/android.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.apk) | [![](https://brook.app/images/mac.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![Windows](https://brook.app/images/windows.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.msix) | [![](https://brook.app/images/linux.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.app) | [![OpenWrt](https://brook.app/images/openwrt.png)](https://github.com/txthinking/brook/releases) | +| / | / | [App Mode](https://www.txthinking.com/talks/articles/macos-app-mode-en.article) | [How](https://www.txthinking.com/talks/articles/msix-brook-en.article) | [How](https://www.txthinking.com/talks/articles/linux-app-brook-en.article) | [How](https://www.txthinking.com/talks/articles/brook-openwrt-en.article) | +| / | / | [App 模式](https://www.txthinking.com/talks/articles/macos-app-mode.article) | [如何](https://www.txthinking.com/talks/articles/msix-brook.article) | [如何](https://www.txthinking.com/talks/articles/linux-app-brook.article) | [如何](https://www.txthinking.com/talks/articles/brook-openwrt.article) | ## CLI Client @@ -519,7 +521,7 @@ https://txthinking.github.io/ca/ca.pem | [hancock](https://github.com/txthinking/hancock) | Manage multiple remote servers and execute commands remotely | | [sshexec](https://github.com/txthinking/sshexec) | A command-line tool to execute remote command through ssh | | [jb](https://github.com/txthinking/jb) | write script in an easier way than bash | -| [bash](https://github.com/txthinking/bash) | One-click script 一键脚本 | +| [bash](https://github.com/txthinking/bash) | Many one-click scripts | | [pacman](https://archlinux.org/packages/extra/x86_64/brook/) | `pacman -S brook` | | [brew](https://formulae.brew.sh/formula/brook) | `brew install brook` | | [docker](https://hub.docker.com/r/txthinking/brook) | `docker run txthinking/brook` | @@ -537,7 +539,6 @@ https://txthinking.github.io/ca/ca.pem | [Announce](https://t.me/s/txthinking_news) | All news you should care | | [GitHub](https://github.com/txthinking) | Other useful repos | | [Socks5 Configurator](https://chromewebstore.google.com/detail/socks5-configurator/hnpgnjkeaobghpjjhaiemlahikgmnghb) | If you prefer CLI brook client | -| [Pastebin](https://paste.brook.app) | Create importable many brook links | | [Brook Deploy](https://www.txthinking.com/deploy.html) | Deploy brook with GUI | | [TxThinking](https://www.txthinking.com) | Everything | @@ -875,7 +876,7 @@ Run as dns server over brook, both TCP and UDP, [src <-> $ brook dnserversoverbr ## tproxy -Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server/wsserver/wssserver/quicserver <-> dst] +Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server/wsserver/wssserver/quicserver <-> dst]. OpenWRT: https://www.txthinking.com/talks/articles/brook-openwrt-en.article - **--address**="": When server is brook wsserver or brook wssserver or brook quicserver, specify address instead of resolving addresses from host, such as 1.2.3.4:443 @@ -923,8 +924,6 @@ Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linu - **--udpovertcp**: When server is brook server, UDP over TCP -- **--webListen**="": Ignore all other parameters, run web UI, like: ':9999' - - **--withoutBrookProtocol**: When server is brook wsserver or brook wssserver or brook quicserver, the data will not be encrypted with brook protocol ## link @@ -1468,52 +1467,21 @@ brook relayoverbrook ... --from 127.0.0.1:5353 --to 8.8.8.8:53 brook dnsserveroverbrook ... --listen 127.0.0.1:53 ``` -## brook tproxy Transparent Proxy Gateway on official OpenWrt - -**No need to manipulate iptables!** - -``` -opkg update -opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables iptables-mod-tproxy iptables-mod-socket ip6tables -``` +## Brook OpenWRT Router: Perfectly supports IPv4/IPv6/TCP/UDP. Native IPv6 -``` -brook tproxy --link 'brook://...' --dnsListen :5353 -``` +https://www.txthinking.com/talks/articles/brook-openwrt-en.article -1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -2. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -3. By default, OpenWrt will automatically issue the IP of the router as gateway and DNS for your computers and mobiles - -## brook tproxy Transparent Proxy Gateway on any Linux (wired) - -**No need to manipulate iptables!** - -``` -systemctl stop systemd-resolved -systemctl disable systemd-resolved -echo nameserver 8.8.8.8 > /etc/resolv.conf -``` - -``` -brook tproxy --link 'brook://...' --dnsListen 192.168.1.2:53 --disableAAAA -``` +## Turn macOS into a Gateway with Brook -Replace 192.168.1.2 with your Linux IP. You may need to manually configure the computer or mobile gateway and DNS. +https://www.txthinking.com/talks/articles/brook-macos-gateway-en.article -## GUI for official OpenWrt +## Turn Windows into a Gateway with Brook -**No need to manipulate iptables!** +https://www.txthinking.com/talks/articles/brook-windows-gateway-en.article -port 9999, 8888, 5353 will be used. It work with brook server, brook wsserver, brook wssserver and brook quicserver. +## Turn Linux into a Gateway with Brook -1. Download the [ipk](https://github.com/txthinking/brook/releases) file for your router -2. Upload and install: OpenWrt Web -> System -> Software -> Upload Package... -3. Refresh page, the Brook menu will appear at the top -4. OpenWrt Web -> Brook -> type and Connect -5. And OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -6. And OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -7. By default, OpenWrt will automatically issue the IP of the router as gateway and DNS for your computers and mobiles +https://www.txthinking.com/talks/articles/brook-linux-gateway-en.article ## brook relay can relay a address to a remote address. It can relay any tcp and udp server @@ -1776,52 +1744,21 @@ brook relayoverbrook ... --from 127.0.0.1:5353 --to 8.8.8.8:53 brook dnsserveroverbrook ... --listen 127.0.0.1:53 ``` -## brook tproxy 透明代理网关在官网原版 OpenWrt - -**无需操作 iptables!** - -``` -opkg update -opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables-mod-tproxy iptables-mod-socket ip6tables iptables -``` - -``` -brook tproxy --link 'brook://...' --dnsListen :5353 -``` +## Brook OpenWRT 路由器,完美支持 IPv4/IPv6/TCP/UDP,Native IPv6 -1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -2. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -3. 默認, OpenWrt 將會下發 router 的 IP 的為電腦或手機的網關和 DNS +https://www.txthinking.com/talks/articles/brook-openwrt.article -## brook tproxy 透明代理网关在任意 Linux(有线) - -**无需操作 iptables!** - -``` -systemctl stop systemd-resolved -systemctl disable systemd-resolved -echo nameserver 8.8.8.8 > /etc/resolv.conf -``` - -``` -brook tproxy --link 'brook://...' --dnsListen 192.168.1.2:53 --disableAAAA -``` +## 使用 Brook 把 macOS 变成网关 -替换 192.168.1.2 为你的 Linux 的IP. 配置其他机器的网关和 DNS 为这台机器的 IP 即可 +https://www.txthinking.com/talks/articles/brook-macos-gateway.article -## 官网原版 OpenWrt 图形客户端 +## 使用 Brook 把 Windows 变成网关 -**无需操作 iptables!** +https://www.txthinking.com/talks/articles/brook-windows-gateway.article -**端口 9999, 8888, 5353 将会被使用**. 它与 brook server, brook wsserver, brook wssserver, brook quicserver 一起工作. +## 使用 Brook 把 Linux 变成网关 -1. 下載適合你系統的[ipk](https://github.com/txthinking/brook/releases)文件 -2. 上傳並安裝: OpenWrt Web -> System -> Software -> Upload Package... -3. 刷新頁面, 頂部菜單會出現 Brook 按鈕 -4. OpenWrt Web -> Brook -> 輸入後點擊 Connect -5. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -6. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -7. 默認, OpenWrt 將會下發 router 的 IP 為電腦或手機的網關和 DNS +https://www.txthinking.com/talks/articles/brook-linux-gateway.article ## brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver diff --git a/cli/brook/build.sh b/cli/brook/build.sh index 39f17e81..465f035c 100755 --- a/cli/brook/build.sh +++ b/cli/brook/build.sh @@ -11,117 +11,33 @@ fi rm -rf _ mkdir _ -CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-w -s" -o _/brook_darwin_amd64 . -CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-w -s" -o _/brook_darwin_arm64 . -CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -ldflags="-w -s" -o _/brook_freebsd_386 . -CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags="-w -s" -o _/brook_freebsd_amd64 . -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o _/brook_linux_amd64 . -CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags="-w -s" -o _/brook_linux_386 . -CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-w -s" -o _/brook_linux_arm64 . -CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-w -s" -o _/brook_linux_arm7 . -CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -ldflags="-w -s" -o _/brook_linux_arm6 . -CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 go build -ldflags="-w -s" -o _/brook_linux_arm5 . -CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags="-w -s" -o _/brook_linux_mips . -CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags="-w -s" -o _/brook_linux_mipsle . -CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags="-w -s" -o _/brook_linux_mips_softfloat . -CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags="-w -s" -o _/brook_linux_mipsle_softfloat . -CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags="-w -s" -o _/brook_linux_mips64 . -CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags="-w -s" -o _/brook_linux_mips64le . -CGO_ENABLED=0 GOOS=linux GOARCH=mips64 GOMIPS=softfloat go build -ldflags="-w -s" -o _/brook_linux_mips64_softfloat . -CGO_ENABLED=0 GOOS=linux GOARCH=mips64le GOMIPS=softfloat go build -ldflags="-w -s" -o _/brook_linux_mips64le_softfloat . -CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 go build -ldflags="-w -s" -o _/brook_linux_ppc64 . -CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le go build -ldflags="-w -s" -o _/brook_linux_ppc64le . -CGO_ENABLED=0 GOOS=netbsd GOARCH=386 go build -ldflags="-w -s" -o _/brook_netbsd_386 . -CGO_ENABLED=0 GOOS=netbsd GOARCH=amd64 go build -ldflags="-w -s" -o _/brook_netbsd_amd64 . -CGO_ENABLED=0 GOOS=openbsd GOARCH=386 go build -ldflags="-w -s" -o _/brook_openbsd_386 . -CGO_ENABLED=0 GOOS=openbsd GOARCH=amd64 go build -ldflags="-w -s" -o _/brook_openbsd_amd64 . -CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-w -s" -o _/brook_windows_amd64.exe . -CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags="-w -s" -o _/brook_windows_386.exe . -CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build -ldflags="-w -s" -o _/brook_windows_arm64.exe . - -cd ../../ipk - -cp ../cli/brook/_/brook_linux_amd64 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_amd64.ipk - -cp ../cli/brook/_/brook_linux_386 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_386.ipk - -cp ../cli/brook/_/brook_linux_arm64 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_arm64.ipk - -cp ../cli/brook/_/brook_linux_arm7 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_arm7.ipk - -cp ../cli/brook/_/brook_linux_arm6 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_arm6.ipk - -cp ../cli/brook/_/brook_linux_arm5 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_arm5.ipk - -cp ../cli/brook/_/brook_linux_mips data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mips.ipk - -cp ../cli/brook/_/brook_linux_mipsle data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mipsle.ipk - -cp ../cli/brook/_/brook_linux_mips_softfloat data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mips_softfloat.ipk - -cp ../cli/brook/_/brook_linux_mipsle_softfloat data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mipsle_softfloat.ipk - -cp ../cli/brook/_/brook_linux_mips64 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mips64.ipk - -cp ../cli/brook/_/brook_linux_mips64le data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mips64le.ipk - -cp ../cli/brook/_/brook_linux_mips64_softfloat data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mips64_softfloat.ipk - -cp ../cli/brook/_/brook_linux_mips64le_softfloat data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_mips64le_softfloat.ipk - -cp ../cli/brook/_/brook_linux_ppc64 data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_ppc64.ipk - -cp ../cli/brook/_/brook_linux_ppc64le data/usr/bin/brook -gsed -i 's/Architecture: .*/Architecture: all/' ./control/control -./build.sh -mv brook.ipk ../cli/brook/_/brook_linux_ppc64le.ipk - -cd ../cli/brook/ +CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -trimpath -ldflags="-w -s" -o _/brook_darwin_amd64 . +CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-w -s" -o _/brook_darwin_arm64 . +CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -trimpath -ldflags="-w -s" -o _/brook_freebsd_386 . +CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -trimpath -ldflags="-w -s" -o _/brook_freebsd_amd64 . +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-w -s" -o _/brook_linux_amd64 . +CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -trimpath -ldflags="-w -s" -o _/brook_linux_386 . +CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="-w -s" -o _/brook_linux_arm64 . +CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -trimpath -ldflags="-w -s" -o _/brook_linux_arm7 . +CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -trimpath -ldflags="-w -s" -o _/brook_linux_arm6 . +CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 go build -trimpath -ldflags="-w -s" -o _/brook_linux_arm5 . +CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -trimpath -ldflags="-w -s" -o _/brook_linux_mips . +CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -trimpath -ldflags="-w -s" -o _/brook_linux_mipsle . +CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -trimpath -ldflags="-w -s" -o _/brook_linux_mips_softfloat . +CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -trimpath -ldflags="-w -s" -o _/brook_linux_mipsle_softfloat . +CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -trimpath -ldflags="-w -s" -o _/brook_linux_mips64 . +CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -trimpath -ldflags="-w -s" -o _/brook_linux_mips64le . +CGO_ENABLED=0 GOOS=linux GOARCH=mips64 GOMIPS=softfloat go build -trimpath -ldflags="-w -s" -o _/brook_linux_mips64_softfloat . +CGO_ENABLED=0 GOOS=linux GOARCH=mips64le GOMIPS=softfloat go build -trimpath -ldflags="-w -s" -o _/brook_linux_mips64le_softfloat . +CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 go build -trimpath -ldflags="-w -s" -o _/brook_linux_ppc64 . +CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le go build -trimpath -ldflags="-w -s" -o _/brook_linux_ppc64le . +CGO_ENABLED=0 GOOS=netbsd GOARCH=386 go build -trimpath -ldflags="-w -s" -o _/brook_netbsd_386 . +CGO_ENABLED=0 GOOS=netbsd GOARCH=amd64 go build -trimpath -ldflags="-w -s" -o _/brook_netbsd_amd64 . +CGO_ENABLED=0 GOOS=openbsd GOARCH=386 go build -trimpath -ldflags="-w -s" -o _/brook_openbsd_386 . +CGO_ENABLED=0 GOOS=openbsd GOARCH=amd64 go build -trimpath -ldflags="-w -s" -o _/brook_openbsd_amd64 . +CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-w -s" -o _/brook_windows_amd64.exe . +CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -trimpath -ldflags="-w -s" -o _/brook_windows_386.exe . +CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build -trimpath -ldflags="-w -s" -o _/brook_windows_arm64.exe . if [ "$1" = "dev" ] then diff --git a/cli/brook/main.go b/cli/brook/main.go index 02332935..a1230e6b 100644 --- a/cli/brook/main.go +++ b/cli/brook/main.go @@ -15,11 +15,9 @@ package main import ( - "context" "crypto/x509" "errors" "fmt" - "io/fs" "log" "net" "os" @@ -28,11 +26,9 @@ import ( "path/filepath" "runtime" "strings" - "sync" "syscall" "time" - "net/http" "net/url" "github.com/miekg/dns" @@ -1445,7 +1441,7 @@ func main() { }, &cli.Command{ Name: "tproxy", - Usage: "Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server/wsserver/wssserver/quicserver <-> dst]", + Usage: "Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server/wsserver/wssserver/quicserver <-> dst]. OpenWRT: https://www.txthinking.com/talks/articles/brook-openwrt-en.article", BashComplete: func(c *cli.Context) { l := c.Command.VisibleFlags() for _, v := range l { @@ -1459,10 +1455,14 @@ func main() { Usage: "Listen address, DO NOT contain IP, just like: ':8888'. No need to operate iptables by default!", Value: ":8888", }, - &cli.StringFlag{ + &cli.StringSliceFlag{ Name: "dnsListen", Usage: "Start a DNS server, like: ':53'. MUST contain IP, like '192.168.1.1:53', if you expect your gateway to accept requests from clients to other public DNS servers at the same time", }, + &cli.StringFlag{ + Name: "redirectDNS", + Usage: "It is usually the value of dnsListen. If the client has set custom DNS instead of dnsListen, this parameter can be intercepted and forwarded to dnsListen. Usually you don't need to set this, only if you want to control it instead of being proxied directly as normal UDP data.", + }, &cli.StringFlag{ Name: "dnsForDefault", Usage: "DNS server for resolving domains NOT in list", @@ -1501,18 +1501,10 @@ func main() { Name: "bypassGeoIP", Usage: "Bypass IP by Geo country code, such as US", }, - &cli.StringFlag{ - Name: "redirectDNS", - Usage: "It is usually the value of dnsListen. If the client has set custom DNS instead of dnsListen, this parameter can be intercepted and forwarded to dnsListen. Usually you don't need to set this, only if you want to control it instead of being proxied directly as normal UDP data.", - }, &cli.BoolFlag{ Name: "doNotRunScripts", Usage: "This will not change iptables and others if you want to do by yourself", }, - &cli.StringFlag{ - Name: "webListen", - Usage: "Ignore all other parameters, run web UI, like: ':9999'", - }, &cli.StringFlag{ Name: "server", Aliases: []string{"s"}, @@ -1563,198 +1555,6 @@ func main() { }, }, Action: func(c *cli.Context) error { - if c.String("webListen") != "" { - go func() { - time.Sleep(3 * time.Second) - _ = os.WriteFile("/etc/resolv.conf", []byte("nameserver 8.8.8.8\nnameserver 2001:4860:4860::8888\n"), 0744) - }() - web, err := fs.Sub(static, "static") - if err != nil { - return err - } - var cmd *exec.Cmd - lock := &sync.Mutex{} - m := http.NewServeMux() - m.Handle("/", http.FileServer(http.FS(web))) - m.HandleFunc("/hasp", func(w http.ResponseWriter, r *http.Request) { - lock.Lock() - defer lock.Unlock() - _, err := os.Stat("/root/.brook.web.password") - if os.IsNotExist(err) { - w.Write([]byte("no")) - return - } - w.Write([]byte("yes")) - }) - m.HandleFunc("/setp", func(w http.ResponseWriter, r *http.Request) { - lock.Lock() - defer lock.Unlock() - _, err := os.Stat("/root/.brook.web.password") - if !os.IsNotExist(err) { - http.Error(w, "file exsits", 500) - return - } - err = os.WriteFile("/root/.brook.web.password", []byte(r.FormValue("p")), 0600) - if err != nil { - http.Error(w, err.Error(), 500) - return - } - w.WriteHeader(200) - }) - m.HandleFunc("/authp", func(w http.ResponseWriter, r *http.Request) { - lock.Lock() - defer lock.Unlock() - b, err := os.ReadFile("/root/.brook.web.password") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - if strings.TrimSpace(string(b)) != strings.TrimSpace(r.FormValue("p")) { - http.Error(w, "web ui password wrong", 500) - return - } - w.WriteHeader(200) - }) - m.HandleFunc("/httpread", func(w http.ResponseWriter, r *http.Request) { - lock.Lock() - defer lock.Unlock() - b, err := os.ReadFile("/root/.brook.web.password") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - if strings.TrimSpace(string(b)) != strings.TrimSpace(r.FormValue("p")) { - http.Error(w, "web ui password wrong", 500) - return - } - b, err = brook.ReadData(r.FormValue("url")) - if err != nil { - http.Error(w, err.Error(), 500) - return - } - w.Write(b) - }) - m.HandleFunc("/logread", func(w http.ResponseWriter, r *http.Request) { - lock.Lock() - defer lock.Unlock() - b, err := os.ReadFile("/root/.brook.web.password") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - if strings.TrimSpace(string(b)) != strings.TrimSpace(r.FormValue("p")) { - http.Error(w, "web ui password wrong", 500) - return - } - b, err = os.ReadFile("/root/.brook.log") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - w.Write(b) - }) - m.HandleFunc("/start", func(w http.ResponseWriter, r *http.Request) { - b, err := os.ReadFile("/root/.brook.web.password") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - if strings.TrimSpace(string(b)) != strings.TrimSpace(r.FormValue("p")) { - http.Error(w, "web ui password wrong", 500) - return - } - s, err := os.Executable() - if err != nil { - http.Error(w, err.Error(), 500) - return - } - lock.Lock() - defer lock.Unlock() - cmd = exec.Command("/bin/sh", "-c", s+r.FormValue("args")) - done := make(chan byte) - defer close(done) - errch := make(chan error) - go func() { - out, _ := cmd.CombinedOutput() - select { - case <-done: - log.Println(string(out)) - default: - select { - case <-done: - log.Println(string(out)) - case errch <- errors.New(string(out)): - } - } - lock.Lock() - cmd = nil - lock.Unlock() - }() - select { - case err := <-errch: - http.Error(w, err.Error(), 500) - return - case <-time.After(6 * time.Second): - w.Write([]byte("connected")) - } - }) - m.HandleFunc("/stop", func(w http.ResponseWriter, r *http.Request) { - b, err := os.ReadFile("/root/.brook.web.password") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - if strings.TrimSpace(string(b)) != strings.TrimSpace(r.FormValue("p")) { - http.Error(w, "web ui password wrong", 500) - return - } - lock.Lock() - defer lock.Unlock() - if cmd == nil { - w.Write([]byte("disconnected")) - return - } - if err := cmd.Process.Signal(syscall.SIGTERM); err != nil { - http.Error(w, err.Error(), 500) - return - } - w.Write([]byte("disconnected")) - }) - m.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { - b, err := os.ReadFile("/root/.brook.web.password") - if err != nil { - http.Error(w, err.Error(), 500) - return - } - if strings.TrimSpace(string(b)) != strings.TrimSpace(r.FormValue("p")) { - http.Error(w, "web ui password wrong", 500) - return - } - lock.Lock() - defer lock.Unlock() - if cmd == nil { - w.Write([]byte("disconnected")) - return - } - w.Write([]byte("connected")) - }) - s := &http.Server{ - Addr: c.String("webListen"), - Handler: m, - } - g.Add(&runnergroup.Runner{ - Start: func() error { - return s.ListenAndServe() - }, - Stop: func() error { - if cmd != nil { - cmd.Process.Signal(syscall.SIGTERM) - } - return s.Shutdown(context.Background()) - }, - }) - return nil - } if c.String("listen") == "" || (c.String("link") == "" && (c.String("server") == "" || c.String("password") == "")) { _ = cli.ShowSubcommandHelp(c) return errors.New("") @@ -1854,27 +1654,29 @@ func main() { return s.Shutdown() }, }) - if c.String("dnsListen") != "" { - h, p, err := net.SplitHostPort(c.String("dnsListen")) - if err != nil { - return err - } - if p == "53" && h == "" { - log.Println("Recommend to add IP on --dnsListen when it listen on 53 port, checkout --help") - } - s, err := brook.NewRelayOverBrook(c.String("dnsListen"), link, c.String("dnsForDefault"), c.Int("tcpTimeout"), c.Int("udpTimeout")) - if err != nil { - return err + if len(c.StringSlice("dnsListen")) != 0 { + for _, v := range c.StringSlice("dnsListen") { + h, p, err := net.SplitHostPort(v) + if err != nil { + return err + } + if p == "53" && h == "" { + log.Println("Recommend to add IP on --dnsListen when it listen on 53 port, checkout --help") + } + s, err := brook.NewRelayOverBrook(v, link, c.String("dnsForDefault"), c.Int("tcpTimeout"), c.Int("udpTimeout")) + if err != nil { + return err + } + s.IsDNS = true + g.Add(&runnergroup.Runner{ + Start: func() error { + return s.ListenAndServe() + }, + Stop: func() error { + return s.Shutdown() + }, + }) } - s.IsDNS = true - g.Add(&runnergroup.Runner{ - Start: func() error { - return s.ListenAndServe() - }, - Stop: func() error { - return s.Shutdown() - }, - }) } return nil }, diff --git a/cli/brook/static.go b/cli/brook/static.go deleted file mode 100644 index 067b4083..00000000 --- a/cli/brook/static.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2016-present Cloud -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of version 3 of the GNU General Public -// License as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -package main - -import "embed" - -//go:embed static/* -var static embed.FS diff --git a/cli/brook/static/index.html b/cli/brook/static/index.html deleted file mode 100644 index de4eb2bc..00000000 --- a/cli/brook/static/index.html +++ /dev/null @@ -1,451 +0,0 @@ - - - - - Brook - - - - - - - - - - - -
-
- - -
-
-
- - -
-
- -
-
- - - -
-
-
-
{{name(item)}}
-
- -
-
-
- - -
-
- - -
-
- -
-
- -
{{zh ? '你还需要操作:' : 'You still need to do:'}}
-
    -
  • OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
  • -
  • OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
  • -
-
{{zh ? '或者:' : 'Or:'}}
-
    -
  • {{ zh ? '停止内置的DNS服务,在这里直接监听:53. 如果你允许客户端使用其他公有 DNS Server, 这里需要指定监听地址,比如 192.168.1.1:53' : 'Stop built-in DNS server, and listen :53 here. If you allow clients to use other public DNS Servers, you need to specify the listening address here, such as 192.168.1.1:53'}}
  • -
-
-
- -
-
- -
- - - -
- -
- - - - - -
-
- - - diff --git a/cli/brook/static/pico.min.css b/cli/brook/static/pico.min.css deleted file mode 100644 index f28054cf..00000000 --- a/cli/brook/static/pico.min.css +++ /dev/null @@ -1,5 +0,0 @@ -@charset "UTF-8";/*! - * Pico.css v1.5.7 (https://picocss.com) - * Copyright 2019-2023 - Licensed under MIT - */:root{--font-family:system-ui,-apple-system,"Segoe UI","Roboto","Ubuntu","Cantarell","Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--line-height:1.5;--font-weight:400;--font-size:16px;--border-radius:0.25rem;--border-width:1px;--outline-width:3px;--spacing:1rem;--typography-spacing-vertical:1.5rem;--block-spacing-vertical:calc(var(--spacing) * 2);--block-spacing-horizontal:var(--spacing);--grid-spacing-vertical:0;--grid-spacing-horizontal:var(--spacing);--form-element-spacing-vertical:0.75rem;--form-element-spacing-horizontal:1rem;--nav-element-spacing-vertical:1rem;--nav-element-spacing-horizontal:0.5rem;--nav-link-spacing-vertical:0.5rem;--nav-link-spacing-horizontal:0.5rem;--form-label-font-weight:var(--font-weight);--transition:0.2s ease-in-out;--modal-overlay-backdrop-filter:blur(0.25rem)}@media (min-width:576px){:root{--font-size:17px}}@media (min-width:768px){:root{--font-size:18px}}@media (min-width:992px){:root{--font-size:19px}}@media (min-width:1200px){:root{--font-size:20px}}@media (min-width:576px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 2.5)}}@media (min-width:768px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 3)}}@media (min-width:992px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 3.5)}}@media (min-width:1200px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 4)}}@media (min-width:576px){article{--block-spacing-horizontal:calc(var(--spacing) * 1.25)}}@media (min-width:768px){article{--block-spacing-horizontal:calc(var(--spacing) * 1.5)}}@media (min-width:992px){article{--block-spacing-horizontal:calc(var(--spacing) * 1.75)}}@media (min-width:1200px){article{--block-spacing-horizontal:calc(var(--spacing) * 2)}}dialog>article{--block-spacing-vertical:calc(var(--spacing) * 2);--block-spacing-horizontal:var(--spacing)}@media (min-width:576px){dialog>article{--block-spacing-vertical:calc(var(--spacing) * 2.5);--block-spacing-horizontal:calc(var(--spacing) * 1.25)}}@media (min-width:768px){dialog>article{--block-spacing-vertical:calc(var(--spacing) * 3);--block-spacing-horizontal:calc(var(--spacing) * 1.5)}}a{--text-decoration:none}a.contrast,a.secondary{--text-decoration:underline}small{--font-size:0.875em}h1,h2,h3,h4,h5,h6{--font-weight:700}h1{--font-size:2rem;--typography-spacing-vertical:3rem}h2{--font-size:1.75rem;--typography-spacing-vertical:2.625rem}h3{--font-size:1.5rem;--typography-spacing-vertical:2.25rem}h4{--font-size:1.25rem;--typography-spacing-vertical:1.874rem}h5{--font-size:1.125rem;--typography-spacing-vertical:1.6875rem}[type=checkbox],[type=radio]{--border-width:2px}[type=checkbox][role=switch]{--border-width:3px}tfoot td,tfoot th,thead td,thead th{--border-width:3px}:not(thead,tfoot)>*>td{--font-size:0.875em}code,kbd,pre,samp{--font-family:"Menlo","Consolas","Roboto Mono","Ubuntu Monospace","Noto Mono","Oxygen Mono","Liberation Mono",monospace,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}kbd{--font-weight:bolder}:root:not([data-theme=dark]),[data-theme=light]{--background-color:#fff;--color:hsl(205deg, 20%, 32%);--h1-color:hsl(205deg, 30%, 15%);--h2-color:#24333e;--h3-color:hsl(205deg, 25%, 23%);--h4-color:#374956;--h5-color:hsl(205deg, 20%, 32%);--h6-color:#4d606d;--muted-color:hsl(205deg, 10%, 50%);--muted-border-color:hsl(205deg, 20%, 94%);--primary:hsl(195deg, 85%, 41%);--primary-hover:hsl(195deg, 90%, 32%);--primary-focus:rgba(16, 149, 193, 0.125);--primary-inverse:#fff;--secondary:hsl(205deg, 15%, 41%);--secondary-hover:hsl(205deg, 20%, 32%);--secondary-focus:rgba(89, 107, 120, 0.125);--secondary-inverse:#fff;--contrast:hsl(205deg, 30%, 15%);--contrast-hover:#000;--contrast-focus:rgba(89, 107, 120, 0.125);--contrast-inverse:#fff;--mark-background-color:#fff2ca;--mark-color:#543a26;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-color);--button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--form-element-background-color:transparent;--form-element-border-color:hsl(205deg, 14%, 68%);--form-element-color:var(--color);--form-element-placeholder-color:var(--muted-color);--form-element-active-background-color:transparent;--form-element-active-border-color:var(--primary);--form-element-focus-color:var(--primary-focus);--form-element-disabled-background-color:hsl(205deg, 18%, 86%);--form-element-disabled-border-color:hsl(205deg, 14%, 68%);--form-element-disabled-opacity:0.5;--form-element-invalid-border-color:#c62828;--form-element-invalid-active-border-color:#d32f2f;--form-element-invalid-focus-color:rgba(211, 47, 47, 0.125);--form-element-valid-border-color:#388e3c;--form-element-valid-active-border-color:#43a047;--form-element-valid-focus-color:rgba(67, 160, 71, 0.125);--switch-background-color:hsl(205deg, 16%, 77%);--switch-color:var(--primary-inverse);--switch-checked-background-color:var(--primary);--range-border-color:hsl(205deg, 18%, 86%);--range-active-border-color:hsl(205deg, 16%, 77%);--range-thumb-border-color:var(--background-color);--range-thumb-color:var(--secondary);--range-thumb-hover-color:var(--secondary-hover);--range-thumb-active-color:var(--primary);--table-border-color:var(--muted-border-color);--table-row-stripped-background-color:#f6f8f9;--code-background-color:hsl(205deg, 20%, 94%);--code-color:var(--muted-color);--code-kbd-background-color:var(--contrast);--code-kbd-color:var(--contrast-inverse);--code-tag-color:hsl(330deg, 40%, 50%);--code-property-color:hsl(185deg, 40%, 40%);--code-value-color:hsl(40deg, 20%, 50%);--code-comment-color:hsl(205deg, 14%, 68%);--accordion-border-color:var(--muted-border-color);--accordion-close-summary-color:var(--color);--accordion-open-summary-color:var(--muted-color);--card-background-color:var(--background-color);--card-border-color:var(--muted-border-color);--card-box-shadow:0.0145rem 0.029rem 0.174rem rgba(27, 40, 50, 0.01698),0.0335rem 0.067rem 0.402rem rgba(27, 40, 50, 0.024),0.0625rem 0.125rem 0.75rem rgba(27, 40, 50, 0.03),0.1125rem 0.225rem 1.35rem rgba(27, 40, 50, 0.036),0.2085rem 0.417rem 2.502rem rgba(27, 40, 50, 0.04302),0.5rem 1rem 6rem rgba(27, 40, 50, 0.06),0 0 0 0.0625rem rgba(27, 40, 50, 0.015);--card-sectionning-background-color:#fbfbfc;--dropdown-background-color:#fbfbfc;--dropdown-border-color:#e1e6eb;--dropdown-box-shadow:var(--card-box-shadow);--dropdown-color:var(--color);--dropdown-hover-background-color:hsl(205deg, 20%, 94%);--modal-overlay-background-color:rgba(213, 220, 226, 0.7);--progress-background-color:hsl(205deg, 18%, 86%);--progress-color:var(--primary);--loading-spinner-opacity:0.5;--tooltip-background-color:var(--contrast);--tooltip-color:var(--contrast-inverse);--icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:light}@media only screen and (prefers-color-scheme:dark){:root:not([data-theme]){--background-color:#11191f;--color:hsl(205deg, 16%, 77%);--h1-color:hsl(205deg, 20%, 94%);--h2-color:#e1e6eb;--h3-color:hsl(205deg, 18%, 86%);--h4-color:#c8d1d8;--h5-color:hsl(205deg, 16%, 77%);--h6-color:#afbbc4;--muted-color:hsl(205deg, 10%, 50%);--muted-border-color:#1f2d38;--primary:hsl(195deg, 85%, 41%);--primary-hover:hsl(195deg, 80%, 50%);--primary-focus:rgba(16, 149, 193, 0.25);--primary-inverse:#fff;--secondary:hsl(205deg, 15%, 41%);--secondary-hover:hsl(205deg, 10%, 50%);--secondary-focus:rgba(115, 130, 140, 0.25);--secondary-inverse:#fff;--contrast:hsl(205deg, 20%, 94%);--contrast-hover:#fff;--contrast-focus:rgba(115, 130, 140, 0.25);--contrast-inverse:#000;--mark-background-color:#d1c284;--mark-color:#11191f;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-color);--button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--form-element-background-color:#11191f;--form-element-border-color:#374956;--form-element-color:var(--color);--form-element-placeholder-color:var(--muted-color);--form-element-active-background-color:var(--form-element-background-color);--form-element-active-border-color:var(--primary);--form-element-focus-color:var(--primary-focus);--form-element-disabled-background-color:hsl(205deg, 25%, 23%);--form-element-disabled-border-color:hsl(205deg, 20%, 32%);--form-element-disabled-opacity:0.5;--form-element-invalid-border-color:#b71c1c;--form-element-invalid-active-border-color:#c62828;--form-element-invalid-focus-color:rgba(198, 40, 40, 0.25);--form-element-valid-border-color:#2e7d32;--form-element-valid-active-border-color:#388e3c;--form-element-valid-focus-color:rgba(56, 142, 60, 0.25);--switch-background-color:#374956;--switch-color:var(--primary-inverse);--switch-checked-background-color:var(--primary);--range-border-color:#24333e;--range-active-border-color:hsl(205deg, 25%, 23%);--range-thumb-border-color:var(--background-color);--range-thumb-color:var(--secondary);--range-thumb-hover-color:var(--secondary-hover);--range-thumb-active-color:var(--primary);--table-border-color:var(--muted-border-color);--table-row-stripped-background-color:rgba(115, 130, 140, 0.05);--code-background-color:#18232c;--code-color:var(--muted-color);--code-kbd-background-color:var(--contrast);--code-kbd-color:var(--contrast-inverse);--code-tag-color:hsl(330deg, 30%, 50%);--code-property-color:hsl(185deg, 30%, 50%);--code-value-color:hsl(40deg, 10%, 50%);--code-comment-color:#4d606d;--accordion-border-color:var(--muted-border-color);--accordion-active-summary-color:var(--primary);--accordion-close-summary-color:var(--color);--accordion-open-summary-color:var(--muted-color);--card-background-color:#141e26;--card-border-color:var(--card-background-color);--card-box-shadow:0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698),0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024),0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03),0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036),0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302),0.5rem 1rem 6rem rgba(0, 0, 0, 0.06),0 0 0 0.0625rem rgba(0, 0, 0, 0.015);--card-sectionning-background-color:#18232c;--dropdown-background-color:hsl(205deg, 30%, 15%);--dropdown-border-color:#24333e;--dropdown-box-shadow:var(--card-box-shadow);--dropdown-color:var(--color);--dropdown-hover-background-color:rgba(36, 51, 62, 0.75);--modal-overlay-background-color:rgba(36, 51, 62, 0.8);--progress-background-color:#24333e;--progress-color:var(--primary);--loading-spinner-opacity:0.5;--tooltip-background-color:var(--contrast);--tooltip-color:var(--contrast-inverse);--icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}}[data-theme=dark]{--background-color:#11191f;--color:hsl(205deg, 16%, 77%);--h1-color:hsl(205deg, 20%, 94%);--h2-color:#e1e6eb;--h3-color:hsl(205deg, 18%, 86%);--h4-color:#c8d1d8;--h5-color:hsl(205deg, 16%, 77%);--h6-color:#afbbc4;--muted-color:hsl(205deg, 10%, 50%);--muted-border-color:#1f2d38;--primary:hsl(195deg, 85%, 41%);--primary-hover:hsl(195deg, 80%, 50%);--primary-focus:rgba(16, 149, 193, 0.25);--primary-inverse:#fff;--secondary:hsl(205deg, 15%, 41%);--secondary-hover:hsl(205deg, 10%, 50%);--secondary-focus:rgba(115, 130, 140, 0.25);--secondary-inverse:#fff;--contrast:hsl(205deg, 20%, 94%);--contrast-hover:#fff;--contrast-focus:rgba(115, 130, 140, 0.25);--contrast-inverse:#000;--mark-background-color:#d1c284;--mark-color:#11191f;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-color);--button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--form-element-background-color:#11191f;--form-element-border-color:#374956;--form-element-color:var(--color);--form-element-placeholder-color:var(--muted-color);--form-element-active-background-color:var(--form-element-background-color);--form-element-active-border-color:var(--primary);--form-element-focus-color:var(--primary-focus);--form-element-disabled-background-color:hsl(205deg, 25%, 23%);--form-element-disabled-border-color:hsl(205deg, 20%, 32%);--form-element-disabled-opacity:0.5;--form-element-invalid-border-color:#b71c1c;--form-element-invalid-active-border-color:#c62828;--form-element-invalid-focus-color:rgba(198, 40, 40, 0.25);--form-element-valid-border-color:#2e7d32;--form-element-valid-active-border-color:#388e3c;--form-element-valid-focus-color:rgba(56, 142, 60, 0.25);--switch-background-color:#374956;--switch-color:var(--primary-inverse);--switch-checked-background-color:var(--primary);--range-border-color:#24333e;--range-active-border-color:hsl(205deg, 25%, 23%);--range-thumb-border-color:var(--background-color);--range-thumb-color:var(--secondary);--range-thumb-hover-color:var(--secondary-hover);--range-thumb-active-color:var(--primary);--table-border-color:var(--muted-border-color);--table-row-stripped-background-color:rgba(115, 130, 140, 0.05);--code-background-color:#18232c;--code-color:var(--muted-color);--code-kbd-background-color:var(--contrast);--code-kbd-color:var(--contrast-inverse);--code-tag-color:hsl(330deg, 30%, 50%);--code-property-color:hsl(185deg, 30%, 50%);--code-value-color:hsl(40deg, 10%, 50%);--code-comment-color:#4d606d;--accordion-border-color:var(--muted-border-color);--accordion-active-summary-color:var(--primary);--accordion-close-summary-color:var(--color);--accordion-open-summary-color:var(--muted-color);--card-background-color:#141e26;--card-border-color:var(--card-background-color);--card-box-shadow:0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698),0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024),0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03),0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036),0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302),0.5rem 1rem 6rem rgba(0, 0, 0, 0.06),0 0 0 0.0625rem rgba(0, 0, 0, 0.015);--card-sectionning-background-color:#18232c;--dropdown-background-color:hsl(205deg, 30%, 15%);--dropdown-border-color:#24333e;--dropdown-box-shadow:var(--card-box-shadow);--dropdown-color:var(--color);--dropdown-hover-background-color:rgba(36, 51, 62, 0.75);--modal-overlay-background-color:rgba(36, 51, 62, 0.8);--progress-background-color:#24333e;--progress-color:var(--primary);--loading-spinner-opacity:0.5;--tooltip-background-color:var(--contrast);--tooltip-color:var(--contrast-inverse);--icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}[type=checkbox],[type=radio],[type=range],progress{accent-color:var(--primary)}*,::after,::before{box-sizing:border-box;background-repeat:no-repeat}::after,::before{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--background-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);line-height:var(--line-height);font-family:var(--font-family);text-rendering:optimizeLegibility;overflow-wrap:break-word;cursor:default;-moz-tab-size:4;-o-tab-size:4;tab-size:4}main{display:block}body{width:100%;margin:0}body>footer,body>header,body>main{width:100%;margin-right:auto;margin-left:auto;padding:var(--block-spacing-vertical) 0}.container,.container-fluid{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--spacing);padding-left:var(--spacing)}@media (min-width:576px){.container{max-width:510px;padding-right:0;padding-left:0}}@media (min-width:768px){.container{max-width:700px}}@media (min-width:992px){.container{max-width:920px}}@media (min-width:1200px){.container{max-width:1130px}}section{margin-bottom:var(--block-spacing-vertical)}.grid{grid-column-gap:var(--grid-spacing-horizontal);grid-row-gap:var(--grid-spacing-vertical);display:grid;grid-template-columns:1fr;margin:0}@media (min-width:992px){.grid{grid-template-columns:repeat(auto-fit,minmax(0%,1fr))}}.grid>*{min-width:0}figure{display:block;margin:0;padding:0;overflow-x:auto}figure figcaption{padding:calc(var(--spacing) * .5) 0;color:var(--muted-color)}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}address,blockquote,dl,figure,form,ol,p,pre,table,ul{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-style:normal;font-weight:var(--font-weight);font-size:var(--font-size)}[role=link],a{--color:var(--primary);--background-color:transparent;outline:0;background-color:var(--background-color);color:var(--color);-webkit-text-decoration:var(--text-decoration);text-decoration:var(--text-decoration);transition:background-color var(--transition),color var(--transition),box-shadow var(--transition),-webkit-text-decoration var(--transition);transition:background-color var(--transition),color var(--transition),text-decoration var(--transition),box-shadow var(--transition);transition:background-color var(--transition),color var(--transition),text-decoration var(--transition),box-shadow var(--transition),-webkit-text-decoration var(--transition)}[role=link]:is([aria-current],:hover,:active,:focus),a:is([aria-current],:hover,:active,:focus){--color:var(--primary-hover);--text-decoration:underline}[role=link]:focus,a:focus{--background-color:var(--primary-focus)}[role=link].secondary,a.secondary{--color:var(--secondary)}[role=link].secondary:is([aria-current],:hover,:active,:focus),a.secondary:is([aria-current],:hover,:active,:focus){--color:var(--secondary-hover)}[role=link].secondary:focus,a.secondary:focus{--background-color:var(--secondary-focus)}[role=link].contrast,a.contrast{--color:var(--contrast)}[role=link].contrast:is([aria-current],:hover,:active,:focus),a.contrast:is([aria-current],:hover,:active,:focus){--color:var(--contrast-hover)}[role=link].contrast:focus,a.contrast:focus{--background-color:var(--contrast-focus)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);font-family:var(--font-family)}h1{--color:var(--h1-color)}h2{--color:var(--h2-color)}h3{--color:var(--h3-color)}h4{--color:var(--h4-color)}h5{--color:var(--h5-color)}h6{--color:var(--h6-color)}:where(address,blockquote,dl,figure,form,ol,p,pre,table,ul)~:is(h1,h2,h3,h4,h5,h6){margin-top:var(--typography-spacing-vertical)}.headings,hgroup{margin-bottom:var(--typography-spacing-vertical)}.headings>*,hgroup>*{margin-bottom:0}.headings>:last-child,hgroup>:last-child{--color:var(--muted-color);--font-weight:unset;font-size:1rem;font-family:unset}p{margin-bottom:var(--typography-spacing-vertical)}small{font-size:var(--font-size)}:where(dl,ol,ul){padding-right:0;padding-left:var(--spacing);-webkit-padding-start:var(--spacing);padding-inline-start:var(--spacing);-webkit-padding-end:0;padding-inline-end:0}:where(dl,ol,ul) li{margin-bottom:calc(var(--typography-spacing-vertical) * .25)}:where(dl,ol,ul) :is(dl,ol,ul){margin:0;margin-top:calc(var(--typography-spacing-vertical) * .25)}ul li{list-style:square}mark{padding:.125rem .25rem;background-color:var(--mark-background-color);color:var(--mark-color);vertical-align:baseline}blockquote{display:block;margin:var(--typography-spacing-vertical) 0;padding:var(--spacing);border-right:none;border-left:.25rem solid var(--blockquote-border-color);-webkit-border-start:0.25rem solid var(--blockquote-border-color);border-inline-start:0.25rem solid var(--blockquote-border-color);-webkit-border-end:none;border-inline-end:none}blockquote footer{margin-top:calc(var(--typography-spacing-vertical) * .5);color:var(--blockquote-footer-color)}abbr[title]{border-bottom:1px dotted;text-decoration:none;cursor:help}ins{color:var(--ins-color);text-decoration:none}del{color:var(--del-color)}::-moz-selection{background-color:var(--primary-focus)}::selection{background-color:var(--primary-focus)}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}:where(iframe){border-style:none}img{max-width:100%;height:auto;border-style:none}:where(svg:not([fill])){fill:currentColor}svg:not(:root){overflow:hidden}button{margin:0;overflow:visible;font-family:inherit;text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}button{display:block;width:100%;margin-bottom:var(--spacing)}[role=button]{display:inline-block;text-decoration:none}[role=button],button,input[type=button],input[type=reset],input[type=submit]{--background-color:var(--primary);--border-color:var(--primary);--color:var(--primary-inverse);--box-shadow:var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[role=button]:is([aria-current],:hover,:active,:focus),button:is([aria-current],:hover,:active,:focus),input[type=button]:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus),input[type=submit]:is([aria-current],:hover,:active,:focus){--background-color:var(--primary-hover);--border-color:var(--primary-hover);--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));--color:var(--primary-inverse)}[role=button]:focus,button:focus,input[type=button]:focus,input[type=reset]:focus,input[type=submit]:focus{--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--outline-width) var(--primary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).secondary,input[type=reset]{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);cursor:pointer}:is(button,input[type=submit],input[type=button],[role=button]).secondary:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover);--color:var(--secondary-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).secondary:focus,input[type=reset]:focus{--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--outline-width) var(--secondary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).contrast{--background-color:var(--contrast);--border-color:var(--contrast);--color:var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:is([aria-current],:hover,:active,:focus){--background-color:var(--contrast-hover);--border-color:var(--contrast-hover);--color:var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:focus{--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--outline-width) var(--contrast-focus)}:is(button,input[type=submit],input[type=button],[role=button]).outline,input[type=reset].outline{--background-color:transparent;--color:var(--primary)}:is(button,input[type=submit],input[type=button],[role=button]).outline:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--background-color:transparent;--color:var(--primary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary,input[type=reset].outline{--color:var(--secondary)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--color:var(--secondary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast{--color:var(--contrast)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast:is([aria-current],:hover,:active,:focus){--color:var(--contrast-hover)}:where(button,[type=submit],[type=button],[type=reset],[role=button])[disabled],:where(fieldset[disabled]) :is(button,[type=submit],[type=button],[type=reset],[role=button]),a[role=button]:not([href]){opacity:.5;pointer-events:none}input,optgroup,select,textarea{margin:0;font-size:1rem;line-height:var(--line-height);font-family:inherit;letter-spacing:inherit}input{overflow:visible}select{text-transform:none}legend{max-width:100%;padding:0;color:inherit;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{padding:0;border-style:none}:-moz-focusring{outline:0}:-moz-ui-invalid{box-shadow:none}::-ms-expand{display:none}[type=file],[type=range]{padding:0;border-width:0}input:not([type=checkbox],[type=radio],[type=range]){height:calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2)}fieldset{margin:0;margin-bottom:var(--spacing);padding:0;border:0}fieldset legend,label{display:block;margin-bottom:calc(var(--spacing) * .25);font-weight:var(--form-label-font-weight,var(--font-weight))}input:not([type=checkbox],[type=radio]),select,textarea{width:100%}input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal)}input,select,textarea{--background-color:var(--form-element-background-color);--border-color:var(--form-element-border-color);--color:var(--form-element-color);--box-shadow:none;border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}:where(select,textarea):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[readonly]):is(:active,:focus){--background-color:var(--form-element-active-background-color)}:where(select,textarea):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[role=switch],[readonly]):is(:active,:focus){--border-color:var(--form-element-active-border-color)}input:not([type=submit],[type=button],[type=reset],[type=range],[type=file],[readonly]):focus,select:focus,textarea:focus{--box-shadow:0 0 0 var(--outline-width) var(--form-element-focus-color)}:where(fieldset[disabled]) :is(input:not([type=submit],[type=button],[type=reset]),select,textarea),input:not([type=submit],[type=button],[type=reset])[disabled],select[disabled],textarea[disabled]{--background-color:var(--form-element-disabled-background-color);--border-color:var(--form-element-disabled-border-color);opacity:var(--form-element-disabled-opacity);pointer-events:none}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid]{padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem)!important;padding-left:var(--form-element-spacing-horizontal);-webkit-padding-start:var(--form-element-spacing-horizontal)!important;padding-inline-start:var(--form-element-spacing-horizontal)!important;-webkit-padding-end:calc(var(--form-element-spacing-horizontal) + 1.5rem)!important;padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem)!important;background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=false]{background-image:var(--icon-valid)}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=true]{background-image:var(--icon-invalid)}:where(input,select,textarea)[aria-invalid=false]{--border-color:var(--form-element-valid-border-color)}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus){--border-color:var(--form-element-valid-active-border-color)!important;--box-shadow:0 0 0 var(--outline-width) var(--form-element-valid-focus-color)!important}:where(input,select,textarea)[aria-invalid=true]{--border-color:var(--form-element-invalid-border-color)}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus){--border-color:var(--form-element-invalid-active-border-color)!important;--box-shadow:0 0 0 var(--outline-width) var(--form-element-invalid-focus-color)!important}[dir=rtl] :where(input,select,textarea):not([type=checkbox],[type=radio]):is([aria-invalid],[aria-invalid=true],[aria-invalid=false]){background-position:center left .75rem}input::-webkit-input-placeholder,input::placeholder,select:invalid,textarea::-webkit-input-placeholder,textarea::placeholder{color:var(--form-element-placeholder-color);opacity:1}input:not([type=checkbox],[type=radio]),select,textarea{margin-bottom:var(--spacing)}select::-ms-expand{border:0;background-color:transparent}select:not([multiple],[size]){padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-left:var(--form-element-spacing-horizontal);-webkit-padding-start:var(--form-element-spacing-horizontal);padding-inline-start:var(--form-element-spacing-horizontal);-webkit-padding-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);background-image:var(--icon-chevron);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}[dir=rtl] select:not([multiple],[size]){background-position:center left .75rem}:where(input,select,textarea,.grid)+small{display:block;width:100%;margin-top:calc(var(--spacing) * -.75);margin-bottom:var(--spacing);color:var(--muted-color)}label>:where(input,select,textarea){margin-top:calc(var(--spacing) * .25)}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:1.25em;height:1.25em;margin-top:-.125em;margin-right:.375em;margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:.375em;margin-inline-end:.375em;border-width:var(--border-width);font-size:inherit;vertical-align:middle;cursor:pointer}[type=checkbox]::-ms-check,[type=radio]::-ms-check{display:none}[type=checkbox]:checked,[type=checkbox]:checked:active,[type=checkbox]:checked:focus,[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--background-color:var(--primary);--border-color:var(--primary);background-image:var(--icon-checkbox);background-position:center;background-size:.75em auto;background-repeat:no-repeat}[type=checkbox]~label,[type=radio]~label{display:inline-block;margin-right:.375em;margin-bottom:0;cursor:pointer}[type=checkbox]:indeterminate{--background-color:var(--primary);--border-color:var(--primary);background-image:var(--icon-minus);background-position:center;background-size:.75em auto;background-repeat:no-repeat}[type=radio]{border-radius:50%}[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--background-color:var(--primary-inverse);border-width:.35em;background-image:none}[type=checkbox][role=switch]{--background-color:var(--switch-background-color);--border-color:var(--switch-background-color);--color:var(--switch-color);width:2.25em;height:1.25em;border:var(--border-width) solid var(--border-color);border-radius:1.25em;background-color:var(--background-color);line-height:1.25em}[type=checkbox][role=switch]:focus{--background-color:var(--switch-background-color);--border-color:var(--switch-background-color)}[type=checkbox][role=switch]:checked{--background-color:var(--switch-checked-background-color);--border-color:var(--switch-checked-background-color)}[type=checkbox][role=switch]:before{display:block;width:calc(1.25em - (var(--border-width) * 2));height:100%;border-radius:50%;background-color:var(--color);content:"";transition:margin .1s ease-in-out}[type=checkbox][role=switch]:checked{background-image:none}[type=checkbox][role=switch]:checked::before{margin-left:calc(1.125em - var(--border-width));-webkit-margin-start:calc(1.125em - var(--border-width));margin-inline-start:calc(1.125em - var(--border-width))}[type=checkbox]:checked[aria-invalid=false],[type=checkbox][aria-invalid=false],[type=checkbox][role=switch]:checked[aria-invalid=false],[type=checkbox][role=switch][aria-invalid=false],[type=radio]:checked[aria-invalid=false],[type=radio][aria-invalid=false]{--border-color:var(--form-element-valid-border-color)}[type=checkbox]:checked[aria-invalid=true],[type=checkbox][aria-invalid=true],[type=checkbox][role=switch]:checked[aria-invalid=true],[type=checkbox][role=switch][aria-invalid=true],[type=radio]:checked[aria-invalid=true],[type=radio][aria-invalid=true]{--border-color:var(--form-element-invalid-border-color)}[type=color]::-webkit-color-swatch-wrapper{padding:0}[type=color]::-moz-focus-inner{padding:0}[type=color]::-webkit-color-swatch{border:0;border-radius:calc(var(--border-radius) * .5)}[type=color]::-moz-color-swatch{border:0;border-radius:calc(var(--border-radius) * .5)}input:not([type=checkbox],[type=radio],[type=range],[type=file]):is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){--icon-position:0.75rem;--icon-width:1rem;padding-right:calc(var(--icon-width) + var(--icon-position));background-image:var(--icon-date);background-position:center right var(--icon-position);background-size:var(--icon-width) auto;background-repeat:no-repeat}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=time]{background-image:var(--icon-time)}[type=date]::-webkit-calendar-picker-indicator,[type=datetime-local]::-webkit-calendar-picker-indicator,[type=month]::-webkit-calendar-picker-indicator,[type=time]::-webkit-calendar-picker-indicator,[type=week]::-webkit-calendar-picker-indicator{width:var(--icon-width);margin-right:calc(var(--icon-width) * -1);margin-left:var(--icon-position);opacity:0}[dir=rtl] :is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){text-align:right}[type=file]{--color:var(--muted-color);padding:calc(var(--form-element-spacing-vertical) * .5) 0;border:0;border-radius:0;background:0 0}[type=file]::file-selector-button{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);margin-right:calc(var(--spacing)/ 2);margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:calc(var(--spacing)/ 2);margin-inline-end:calc(var(--spacing)/ 2);padding:calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[type=file]::file-selector-button:is(:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover)}[type=file]::-webkit-file-upload-button{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);margin-right:calc(var(--spacing)/ 2);margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:calc(var(--spacing)/ 2);margin-inline-end:calc(var(--spacing)/ 2);padding:calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;-webkit-transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[type=file]::-webkit-file-upload-button:is(:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover)}[type=file]::-ms-browse{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);margin-right:calc(var(--spacing)/ 2);margin-left:0;margin-inline-start:0;margin-inline-end:calc(var(--spacing)/ 2);padding:calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;-ms-transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[type=file]::-ms-browse:is(:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover)}[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:1.25rem;background:0 0}[type=range]::-webkit-slider-runnable-track{width:100%;height:.25rem;border-radius:var(--border-radius);background-color:var(--range-border-color);-webkit-transition:background-color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),box-shadow var(--transition)}[type=range]::-moz-range-track{width:100%;height:.25rem;border-radius:var(--border-radius);background-color:var(--range-border-color);-moz-transition:background-color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),box-shadow var(--transition)}[type=range]::-ms-track{width:100%;height:.25rem;border-radius:var(--border-radius);background-color:var(--range-border-color);-ms-transition:background-color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),box-shadow var(--transition)}[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.5rem;border:2px solid var(--range-thumb-border-color);border-radius:50%;background-color:var(--range-thumb-color);cursor:pointer;-webkit-transition:background-color var(--transition),transform var(--transition);transition:background-color var(--transition),transform var(--transition)}[type=range]::-moz-range-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.5rem;border:2px solid var(--range-thumb-border-color);border-radius:50%;background-color:var(--range-thumb-color);cursor:pointer;-moz-transition:background-color var(--transition),transform var(--transition);transition:background-color var(--transition),transform var(--transition)}[type=range]::-ms-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.5rem;border:2px solid var(--range-thumb-border-color);border-radius:50%;background-color:var(--range-thumb-color);cursor:pointer;-ms-transition:background-color var(--transition),transform var(--transition);transition:background-color var(--transition),transform var(--transition)}[type=range]:focus,[type=range]:hover{--range-border-color:var(--range-active-border-color);--range-thumb-color:var(--range-thumb-hover-color)}[type=range]:active{--range-thumb-color:var(--range-thumb-active-color)}[type=range]:active::-webkit-slider-thumb{transform:scale(1.25)}[type=range]:active::-moz-range-thumb{transform:scale(1.25)}[type=range]:active::-ms-thumb{transform:scale(1.25)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{-webkit-padding-start:calc(var(--form-element-spacing-horizontal) + 1.75rem);padding-inline-start:calc(var(--form-element-spacing-horizontal) + 1.75rem);border-radius:5rem;background-image:var(--icon-search);background-position:center left 1.125rem;background-size:1rem auto;background-repeat:no-repeat}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{-webkit-padding-start:calc(var(--form-element-spacing-horizontal) + 1.75rem)!important;padding-inline-start:calc(var(--form-element-spacing-horizontal) + 1.75rem)!important;background-position:center left 1.125rem,center right .75rem}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=false]{background-image:var(--icon-search),var(--icon-valid)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=true]{background-image:var(--icon-search),var(--icon-invalid)}[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;display:none}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{background-position:center right 1.125rem}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{background-position:center right 1.125rem,center left .75rem}:where(table){width:100%;border-collapse:collapse;border-spacing:0;text-indent:0}td,th{padding:calc(var(--spacing)/ 2) var(--spacing);border-bottom:var(--border-width) solid var(--table-border-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);text-align:left;text-align:start}tfoot td,tfoot th{border-top:var(--border-width) solid var(--table-border-color);border-bottom:0}table[role=grid] tbody tr:nth-child(odd){background-color:var(--table-row-stripped-background-color)}code,kbd,pre,samp{font-size:.875em;font-family:var(--font-family)}pre{-ms-overflow-style:scrollbar;overflow:auto}code,kbd,pre{border-radius:var(--border-radius);background:var(--code-background-color);color:var(--code-color);font-weight:var(--font-weight);line-height:initial}code,kbd{display:inline-block;padding:.375rem .5rem}pre{display:block;margin-bottom:var(--spacing);overflow-x:auto}pre>code{display:block;padding:var(--spacing);background:0 0;font-size:14px;line-height:var(--line-height)}code b{color:var(--code-tag-color);font-weight:var(--font-weight)}code i{color:var(--code-property-color);font-style:normal}code u{color:var(--code-value-color);text-decoration:none}code em{color:var(--code-comment-color);font-style:normal}kbd{background-color:var(--code-kbd-background-color);color:var(--code-kbd-color);vertical-align:baseline}hr{height:0;border:0;border-top:1px solid var(--muted-border-color);color:inherit}[hidden],template{display:none!important}canvas{display:inline-block}details{display:block;margin-bottom:var(--spacing);padding-bottom:var(--spacing);border-bottom:var(--border-width) solid var(--accordion-border-color)}details summary{line-height:1rem;list-style-type:none;cursor:pointer;transition:color var(--transition)}details summary:not([role]){color:var(--accordion-close-summary-color)}details summary::-webkit-details-marker{display:none}details summary::marker{display:none}details summary::-moz-list-bullet{list-style-type:none}details summary::after{display:block;width:1rem;height:1rem;-webkit-margin-start:calc(var(--spacing,1rem) * 0.5);margin-inline-start:calc(var(--spacing,1rem) * .5);float:right;transform:rotate(-90deg);background-image:var(--icon-chevron);background-position:right center;background-size:1rem auto;background-repeat:no-repeat;content:"";transition:transform var(--transition)}details summary:focus{outline:0}details summary:focus:not([role=button]){color:var(--accordion-active-summary-color)}details summary[role=button]{width:100%;text-align:left}details summary[role=button]::after{height:calc(1rem * var(--line-height,1.5));background-image:var(--icon-chevron-button)}details summary[role=button]:not(.outline).contrast::after{background-image:var(--icon-chevron-button-inverse)}details[open]>summary{margin-bottom:calc(var(--spacing))}details[open]>summary:not([role]):not(:focus){color:var(--accordion-open-summary-color)}details[open]>summary::after{transform:rotate(0)}[dir=rtl] details summary{text-align:right}[dir=rtl] details summary::after{float:left;background-position:left center}article{margin:var(--block-spacing-vertical) 0;padding:var(--block-spacing-vertical) var(--block-spacing-horizontal);border-radius:var(--border-radius);background:var(--card-background-color);box-shadow:var(--card-box-shadow)}article>footer,article>header{margin-right:calc(var(--block-spacing-horizontal) * -1);margin-left:calc(var(--block-spacing-horizontal) * -1);padding:calc(var(--block-spacing-vertical) * .66) var(--block-spacing-horizontal);background-color:var(--card-sectionning-background-color)}article>header{margin-top:calc(var(--block-spacing-vertical) * -1);margin-bottom:var(--block-spacing-vertical);border-bottom:var(--border-width) solid var(--card-border-color);border-top-right-radius:var(--border-radius);border-top-left-radius:var(--border-radius)}article>footer{margin-top:var(--block-spacing-vertical);margin-bottom:calc(var(--block-spacing-vertical) * -1);border-top:var(--border-width) solid var(--card-border-color);border-bottom-right-radius:var(--border-radius);border-bottom-left-radius:var(--border-radius)}:root{--scrollbar-width:0px}dialog{display:flex;z-index:999;position:fixed;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center;width:inherit;min-width:100%;height:inherit;min-height:100%;padding:var(--spacing);border:0;-webkit-backdrop-filter:var(--modal-overlay-backdrop-filter);backdrop-filter:var(--modal-overlay-backdrop-filter);background-color:var(--modal-overlay-background-color);color:var(--color)}dialog article{max-height:calc(100vh - var(--spacing) * 2);overflow:auto}@media (min-width:576px){dialog article{max-width:510px}}@media (min-width:768px){dialog article{max-width:700px}}dialog article>footer,dialog article>header{padding:calc(var(--block-spacing-vertical) * .5) var(--block-spacing-horizontal)}dialog article>header .close{margin:0;margin-left:var(--spacing);float:right}dialog article>footer{text-align:right}dialog article>footer [role=button]{margin-bottom:0}dialog article>footer [role=button]:not(:first-of-type){margin-left:calc(var(--spacing) * .5)}dialog article p:last-of-type{margin:0}dialog article .close{display:block;width:1rem;height:1rem;margin-top:calc(var(--block-spacing-vertical) * -.5);margin-bottom:var(--typography-spacing-vertical);margin-left:auto;background-image:var(--icon-close);background-position:center;background-size:auto 1rem;background-repeat:no-repeat;opacity:.5;transition:opacity var(--transition)}dialog article .close:is([aria-current],:hover,:active,:focus){opacity:1}dialog:not([open]),dialog[open=false]{display:none}.modal-is-open{padding-right:var(--scrollbar-width,0);overflow:hidden;pointer-events:none;touch-action:none}.modal-is-open dialog{pointer-events:auto}:where(.modal-is-opening,.modal-is-closing) dialog,:where(.modal-is-opening,.modal-is-closing) dialog>article{animation-duration:.2s;animation-timing-function:ease-in-out;animation-fill-mode:both}:where(.modal-is-opening,.modal-is-closing) dialog{animation-duration:.8s;animation-name:modal-overlay}:where(.modal-is-opening,.modal-is-closing) dialog>article{animation-delay:.2s;animation-name:modal}.modal-is-closing dialog,.modal-is-closing dialog>article{animation-delay:0s;animation-direction:reverse}@keyframes modal-overlay{from{-webkit-backdrop-filter:none;backdrop-filter:none;background-color:transparent}}@keyframes modal{from{transform:translateY(-100%);opacity:0}}:where(nav li)::before{float:left;content:"​"}nav,nav ul{display:flex}nav{justify-content:space-between}nav ol,nav ul{align-items:center;margin-bottom:0;padding:0;list-style:none}nav ol:first-of-type,nav ul:first-of-type{margin-left:calc(var(--nav-element-spacing-horizontal) * -1)}nav ol:last-of-type,nav ul:last-of-type{margin-right:calc(var(--nav-element-spacing-horizontal) * -1)}nav li{display:inline-block;margin:0;padding:var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal)}nav li>*{--spacing:0}nav :where(a,[role=link]){display:inline-block;margin:calc(var(--nav-link-spacing-vertical) * -1) calc(var(--nav-link-spacing-horizontal) * -1);padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);border-radius:var(--border-radius);text-decoration:none}nav :where(a,[role=link]):is([aria-current],:hover,:active,:focus){text-decoration:none}nav[aria-label=breadcrumb]{align-items:center;justify-content:start}nav[aria-label=breadcrumb] ul li:not(:first-child){-webkit-margin-start:var(--nav-link-spacing-horizontal);margin-inline-start:var(--nav-link-spacing-horizontal)}nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{position:absolute;width:calc(var(--nav-link-spacing-horizontal) * 2);-webkit-margin-start:calc(var(--nav-link-spacing-horizontal)/ 2);margin-inline-start:calc(var(--nav-link-spacing-horizontal)/ 2);content:"/";color:var(--muted-color);text-align:center}nav[aria-label=breadcrumb] a[aria-current]{background-color:transparent;color:inherit;text-decoration:none;pointer-events:none}nav [role=button]{margin-right:inherit;margin-left:inherit;padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal)}aside li,aside nav,aside ol,aside ul{display:block}aside li{padding:calc(var(--nav-element-spacing-vertical) * .5) var(--nav-element-spacing-horizontal)}aside li a{display:block}aside li [role=button]{margin:inherit}[dir=rtl] nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{content:"\\"}progress{display:inline-block;vertical-align:baseline}progress{-webkit-appearance:none;-moz-appearance:none;display:inline-block;appearance:none;width:100%;height:.5rem;margin-bottom:calc(var(--spacing) * .5);overflow:hidden;border:0;border-radius:var(--border-radius);background-color:var(--progress-background-color);color:var(--progress-color)}progress::-webkit-progress-bar{border-radius:var(--border-radius);background:0 0}progress[value]::-webkit-progress-value{background-color:var(--progress-color)}progress::-moz-progress-bar{background-color:var(--progress-color)}@media (prefers-reduced-motion:no-preference){progress:indeterminate{background:var(--progress-background-color) linear-gradient(to right,var(--progress-color) 30%,var(--progress-background-color) 30%) top left/150% 150% no-repeat;animation:progress-indeterminate 1s linear infinite}progress:indeterminate[value]::-webkit-progress-value{background-color:transparent}progress:indeterminate::-moz-progress-bar{background-color:transparent}}@media (prefers-reduced-motion:no-preference){[dir=rtl] progress:indeterminate{animation-direction:reverse}}@keyframes progress-indeterminate{0%{background-position:200% 0}100%{background-position:-200% 0}}details[role=list],li[role=list]{position:relative}details[role=list] summary+ul,li[role=list]>ul{display:flex;z-index:99;position:absolute;top:auto;right:0;left:0;flex-direction:column;margin:0;padding:0;border:var(--border-width) solid var(--dropdown-border-color);border-radius:var(--border-radius);border-top-right-radius:0;border-top-left-radius:0;background-color:var(--dropdown-background-color);box-shadow:var(--card-box-shadow);color:var(--dropdown-color);white-space:nowrap}details[role=list] summary+ul li,li[role=list]>ul li{width:100%;margin-bottom:0;padding:calc(var(--form-element-spacing-vertical) * .5) var(--form-element-spacing-horizontal);list-style:none}details[role=list] summary+ul li:first-of-type,li[role=list]>ul li:first-of-type{margin-top:calc(var(--form-element-spacing-vertical) * .5)}details[role=list] summary+ul li:last-of-type,li[role=list]>ul li:last-of-type{margin-bottom:calc(var(--form-element-spacing-vertical) * .5)}details[role=list] summary+ul li a,li[role=list]>ul li a{display:block;margin:calc(var(--form-element-spacing-vertical) * -.5) calc(var(--form-element-spacing-horizontal) * -1);padding:calc(var(--form-element-spacing-vertical) * .5) var(--form-element-spacing-horizontal);overflow:hidden;color:var(--dropdown-color);text-decoration:none;text-overflow:ellipsis}details[role=list] summary+ul li a:hover,li[role=list]>ul li a:hover{background-color:var(--dropdown-hover-background-color)}details[role=list] summary::after,li[role=list]>a::after{display:block;width:1rem;height:calc(1rem * var(--line-height,1.5));-webkit-margin-start:0.5rem;margin-inline-start:.5rem;float:right;transform:rotate(0);background-position:right center;background-size:1rem auto;background-repeat:no-repeat;content:""}details[role=list]{padding:0;border-bottom:none}details[role=list] summary{margin-bottom:0}details[role=list] summary:not([role]){height:calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);border:var(--border-width) solid var(--form-element-border-color);border-radius:var(--border-radius);background-color:var(--form-element-background-color);color:var(--form-element-placeholder-color);line-height:inherit;cursor:pointer;transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}details[role=list] summary:not([role]):active,details[role=list] summary:not([role]):focus{border-color:var(--form-element-active-border-color);background-color:var(--form-element-active-background-color)}details[role=list] summary:not([role]):focus{box-shadow:0 0 0 var(--outline-width) var(--form-element-focus-color)}details[role=list][open] summary{border-bottom-right-radius:0;border-bottom-left-radius:0}details[role=list][open] summary::before{display:block;z-index:1;position:fixed;top:0;right:0;bottom:0;left:0;background:0 0;content:"";cursor:default}nav details[role=list] summary,nav li[role=list] a{display:flex;direction:ltr}nav details[role=list] summary+ul,nav li[role=list]>ul{min-width:-moz-fit-content;min-width:fit-content;border-radius:var(--border-radius)}nav details[role=list] summary+ul li a,nav li[role=list]>ul li a{border-radius:0}nav details[role=list] summary,nav details[role=list] summary:not([role]){height:auto;padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal)}nav details[role=list][open] summary{border-radius:var(--border-radius)}nav details[role=list] summary+ul{margin-top:var(--outline-width);-webkit-margin-start:0;margin-inline-start:0}nav details[role=list] summary[role=link]{margin-bottom:calc(var(--nav-link-spacing-vertical) * -1);line-height:var(--line-height)}nav details[role=list] summary[role=link]+ul{margin-top:calc(var(--nav-link-spacing-vertical) + var(--outline-width));-webkit-margin-start:calc(var(--nav-link-spacing-horizontal) * -1);margin-inline-start:calc(var(--nav-link-spacing-horizontal) * -1)}li[role=list] a:active~ul,li[role=list] a:focus~ul,li[role=list]:hover>ul{display:flex}li[role=list]>ul{display:none;margin-top:calc(var(--nav-link-spacing-vertical) + var(--outline-width));-webkit-margin-start:calc(var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal));margin-inline-start:calc(var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal))}li[role=list]>a::after{background-image:var(--icon-chevron)}[aria-busy=true]{cursor:progress}[aria-busy=true]:not(input,select,textarea)::before{display:inline-block;width:1em;height:1em;border:.1875em solid currentColor;border-radius:1em;border-right-color:transparent;content:"";vertical-align:text-bottom;vertical-align:-.125em;animation:spinner .75s linear infinite;opacity:var(--loading-spinner-opacity)}[aria-busy=true]:not(input,select,textarea):not(:empty)::before{margin-right:calc(var(--spacing) * .5);margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:calc(var(--spacing) * .5);margin-inline-end:calc(var(--spacing) * .5)}[aria-busy=true]:not(input,select,textarea):empty{text-align:center}a[aria-busy=true],button[aria-busy=true],input[type=button][aria-busy=true],input[type=reset][aria-busy=true],input[type=submit][aria-busy=true]{pointer-events:none}@keyframes spinner{to{transform:rotate(360deg)}}[data-tooltip]{position:relative}[data-tooltip]:not(a,button,input){border-bottom:1px dotted;text-decoration:none;cursor:help}[data-tooltip]::after,[data-tooltip]::before,[data-tooltip][data-placement=top]::after,[data-tooltip][data-placement=top]::before{display:block;z-index:99;position:absolute;bottom:100%;left:50%;padding:.25rem .5rem;overflow:hidden;transform:translate(-50%,-.25rem);border-radius:var(--border-radius);background:var(--tooltip-background-color);content:attr(data-tooltip);color:var(--tooltip-color);font-style:normal;font-weight:var(--font-weight);font-size:.875rem;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;opacity:0;pointer-events:none}[data-tooltip]::after,[data-tooltip][data-placement=top]::after{padding:0;transform:translate(-50%,0);border-top:.3rem solid;border-right:.3rem solid transparent;border-left:.3rem solid transparent;border-radius:0;background-color:transparent;content:"";color:var(--tooltip-background-color)}[data-tooltip][data-placement=bottom]::after,[data-tooltip][data-placement=bottom]::before{top:100%;bottom:auto;transform:translate(-50%,.25rem)}[data-tooltip][data-placement=bottom]:after{transform:translate(-50%,-.3rem);border:.3rem solid transparent;border-bottom:.3rem solid}[data-tooltip][data-placement=left]::after,[data-tooltip][data-placement=left]::before{top:50%;right:100%;bottom:auto;left:auto;transform:translate(-.25rem,-50%)}[data-tooltip][data-placement=left]:after{transform:translate(.3rem,-50%);border:.3rem solid transparent;border-left:.3rem solid}[data-tooltip][data-placement=right]::after,[data-tooltip][data-placement=right]::before{top:50%;right:auto;bottom:auto;left:100%;transform:translate(.25rem,-50%)}[data-tooltip][data-placement=right]:after{transform:translate(-.3rem,-50%);border:.3rem solid transparent;border-right:.3rem solid}[data-tooltip]:focus::after,[data-tooltip]:focus::before,[data-tooltip]:hover::after,[data-tooltip]:hover::before{opacity:1}@media (hover:hover) and (pointer:fine){[data-tooltip]:hover::after,[data-tooltip]:hover::before,[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:focus::before,[data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::after,[data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::before{animation-duration:.2s;animation-name:tooltip-slide-top}[data-tooltip]:hover::after,[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::after{animation-name:tooltip-caret-slide-top}[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:focus::before,[data-tooltip][data-placement=bottom]:hover::after,[data-tooltip][data-placement=bottom]:hover::before{animation-duration:.2s;animation-name:tooltip-slide-bottom}[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:hover::after{animation-name:tooltip-caret-slide-bottom}[data-tooltip][data-placement=left]:focus::after,[data-tooltip][data-placement=left]:focus::before,[data-tooltip][data-placement=left]:hover::after,[data-tooltip][data-placement=left]:hover::before{animation-duration:.2s;animation-name:tooltip-slide-left}[data-tooltip][data-placement=left]:focus::after,[data-tooltip][data-placement=left]:hover::after{animation-name:tooltip-caret-slide-left}[data-tooltip][data-placement=right]:focus::after,[data-tooltip][data-placement=right]:focus::before,[data-tooltip][data-placement=right]:hover::after,[data-tooltip][data-placement=right]:hover::before{animation-duration:.2s;animation-name:tooltip-slide-right}[data-tooltip][data-placement=right]:focus::after,[data-tooltip][data-placement=right]:hover::after{animation-name:tooltip-caret-slide-right}}@keyframes tooltip-slide-top{from{transform:translate(-50%,.75rem);opacity:0}to{transform:translate(-50%,-.25rem);opacity:1}}@keyframes tooltip-caret-slide-top{from{opacity:0}50%{transform:translate(-50%,-.25rem);opacity:0}to{transform:translate(-50%,0);opacity:1}}@keyframes tooltip-slide-bottom{from{transform:translate(-50%,-.75rem);opacity:0}to{transform:translate(-50%,.25rem);opacity:1}}@keyframes tooltip-caret-slide-bottom{from{opacity:0}50%{transform:translate(-50%,-.5rem);opacity:0}to{transform:translate(-50%,-.3rem);opacity:1}}@keyframes tooltip-slide-left{from{transform:translate(.75rem,-50%);opacity:0}to{transform:translate(-.25rem,-50%);opacity:1}}@keyframes tooltip-caret-slide-left{from{opacity:0}50%{transform:translate(.05rem,-50%);opacity:0}to{transform:translate(.3rem,-50%);opacity:1}}@keyframes tooltip-slide-right{from{transform:translate(-.75rem,-50%);opacity:0}to{transform:translate(.25rem,-50%);opacity:1}}@keyframes tooltip-caret-slide-right{from{opacity:0}50%{transform:translate(-.05rem,-50%);opacity:0}to{transform:translate(-.3rem,-50%);opacity:1}}[aria-controls]{cursor:pointer}[aria-disabled=true],[disabled]{cursor:not-allowed}[aria-hidden=false][hidden]{display:initial}[aria-hidden=false][hidden]:not(:focus){clip:rect(0,0,0,0);position:absolute}[tabindex],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation}[dir=rtl]{direction:rtl}@media (prefers-reduced-motion:reduce){:not([aria-busy=true]),:not([aria-busy=true])::after,:not([aria-busy=true])::before{background-attachment:initial!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important}} -/*# sourceMappingURL=pico.min.css.map */ \ No newline at end of file diff --git a/cli/brook/static/vue.global.prod.js b/cli/brook/static/vue.global.prod.js deleted file mode 100644 index e6170500..00000000 --- a/cli/brook/static/vue.global.prod.js +++ /dev/null @@ -1 +0,0 @@ -var Vue=function(e){"use strict";function t(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[e.toLowerCase()]:e=>!!n[e]}const n=t("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),o=t("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function r(e){return!!e||""===e}function s(e){if(N(e)){const t={};for(let n=0;n{if(e){const n=e.split(l);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function a(e){let t="";if(R(e))t=e;else if(N(e))for(let n=0;nd(e,t)))}const m=(e,t)=>t&&t.__v_isRef?m(e,t.value):E(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:$(t)?{[`Set(${t.size})`]:[...t.values()]}:!P(t)||N(t)||B(t)?t:String(t),g={},v=[],y=()=>{},b=()=>!1,_=/^on[^a-z]/,S=e=>_.test(e),x=e=>e.startsWith("onUpdate:"),C=Object.assign,w=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},k=Object.prototype.hasOwnProperty,T=(e,t)=>k.call(e,t),N=Array.isArray,E=e=>"[object Map]"===I(e),$=e=>"[object Set]"===I(e),O=e=>e instanceof Date,A=e=>"function"==typeof e,R=e=>"string"==typeof e,F=e=>"symbol"==typeof e,P=e=>null!==e&&"object"==typeof e,M=e=>P(e)&&A(e.then)&&A(e.catch),V=Object.prototype.toString,I=e=>V.call(e),B=e=>"[object Object]"===I(e),L=e=>R(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,j=t(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),U=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},H=/-(\w)/g,D=U((e=>e.replace(H,((e,t)=>t?t.toUpperCase():"")))),W=/\B([A-Z])/g,z=U((e=>e.replace(W,"-$1").toLowerCase())),K=U((e=>e.charAt(0).toUpperCase()+e.slice(1))),G=U((e=>e?`on${K(e)}`:"")),q=(e,t)=>!Object.is(e,t),J=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Z=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Q;let X;const ee=[];class te{constructor(e=!1){this.active=!0,this.effects=[],this.cleanups=[],!e&&X&&(this.parent=X,this.index=(X.scopes||(X.scopes=[])).push(this)-1)}run(e){if(this.active)try{return this.on(),e()}finally{this.off()}}on(){this.active&&(ee.push(this),X=this)}off(){this.active&&(ee.pop(),X=ee[ee.length-1])}stop(e){if(this.active){if(this.effects.forEach((e=>e.stop())),this.cleanups.forEach((e=>e())),this.scopes&&this.scopes.forEach((e=>e.stop(!0))),this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.active=!1}}}function ne(e,t){(t=t||X)&&t.active&&t.effects.push(e)}const oe=e=>{const t=new Set(e);return t.w=0,t.n=0,t},re=e=>(e.w&ce)>0,se=e=>(e.n&ce)>0,ie=new WeakMap;let le=0,ce=1;const ae=[];let ue;const pe=Symbol(""),fe=Symbol("");class de{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],ne(this,n)}run(){if(!this.active)return this.fn();if(!ae.length||!ae.includes(this))try{return ae.push(ue=this),ge.push(me),me=!0,ce=1<<++le,le<=30?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o0?ae[e-1]:void 0}}stop(){this.active&&(he(this),this.onStop&&this.onStop(),this.active=!1)}}function he(e){const{deps:t}=e;if(t.length){for(let n=0;n{("length"===t||t>=o)&&l.push(e)}));else switch(void 0!==n&&l.push(i.get(n)),t){case"add":N(e)?L(n)&&l.push(i.get("length")):(l.push(i.get(pe)),E(e)&&l.push(i.get(fe)));break;case"delete":N(e)||(l.push(i.get(pe)),E(e)&&l.push(i.get(fe)));break;case"set":E(e)&&l.push(i.get(pe))}if(1===l.length)l[0]&&Ce(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);Ce(oe(e))}}function Ce(e,t){for(const n of N(e)?e:[...e])(n!==ue||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const we=t("__proto__,__v_isRef,__isVue"),ke=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(F)),Te=Re(),Ne=Re(!1,!0),Ee=Re(!0),$e=Re(!0,!0),Oe=Ae();function Ae(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=bt(this);for(let t=0,r=this.length;t{e[t]=function(...e){ve();const n=bt(this)[t].apply(this,e);return ye(),n}})),e}function Re(e=!1,t=!1){return function(n,o,r){if("__v_isReactive"===o)return!e;if("__v_isReadonly"===o)return e;if("__v_isShallow"===o)return t;if("__v_raw"===o&&r===(e?t?at:ct:t?lt:it).get(n))return n;const s=N(n);if(!e&&s&&T(Oe,o))return Reflect.get(Oe,o,r);const i=Reflect.get(n,o,r);if(F(o)?ke.has(o):we(o))return i;if(e||be(n,0,o),t)return i;if(kt(i)){return!s||!L(o)?i.value:i}return P(i)?e?dt(i):pt(i):i}}function Fe(e=!1){return function(t,n,o,r){let s=t[n];if(gt(s)&&kt(s)&&!kt(o))return!1;if(!e&&!gt(o)&&(vt(o)||(o=bt(o),s=bt(s)),!N(t)&&kt(s)&&!kt(o)))return s.value=o,!0;const i=N(t)&&L(n)?Number(n)!0,deleteProperty:(e,t)=>!0},Ve=C({},Pe,{get:Ne,set:Fe(!0)}),Ie=C({},Me,{get:$e}),Be=e=>e,Le=e=>Reflect.getPrototypeOf(e);function je(e,t,n=!1,o=!1){const r=bt(e=e.__v_raw),s=bt(t);t!==s&&!n&&be(r,0,t),!n&&be(r,0,s);const{has:i}=Le(r),l=o?Be:n?xt:St;return i.call(r,t)?l(e.get(t)):i.call(r,s)?l(e.get(s)):void(e!==r&&e.get(t))}function Ue(e,t=!1){const n=this.__v_raw,o=bt(n),r=bt(e);return e!==r&&!t&&be(o,0,e),!t&&be(o,0,r),e===r?n.has(e):n.has(e)||n.has(r)}function He(e,t=!1){return e=e.__v_raw,!t&&be(bt(e),0,pe),Reflect.get(e,"size",e)}function De(e){e=bt(e);const t=bt(this);return Le(t).has.call(t,e)||(t.add(e),xe(t,"add",e,e)),this}function We(e,t){t=bt(t);const n=bt(this),{has:o,get:r}=Le(n);let s=o.call(n,e);s||(e=bt(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?q(t,i)&&xe(n,"set",e,t):xe(n,"add",e,t),this}function ze(e){const t=bt(this),{has:n,get:o}=Le(t);let r=n.call(t,e);r||(e=bt(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&xe(t,"delete",e,void 0),s}function Ke(){const e=bt(this),t=0!==e.size,n=e.clear();return t&&xe(e,"clear",void 0,void 0),n}function Ge(e,t){return function(n,o){const r=this,s=r.__v_raw,i=bt(s),l=t?Be:e?xt:St;return!e&&be(i,0,pe),s.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function qe(e,t,n){return function(...o){const r=this.__v_raw,s=bt(r),i=E(s),l="entries"===e||e===Symbol.iterator&&i,c="keys"===e&&i,a=r[e](...o),u=n?Be:t?xt:St;return!t&&be(s,0,c?fe:pe),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Je(e){return function(...t){return"delete"!==e&&this}}function Ye(){const e={get(e){return je(this,e)},get size(){return He(this)},has:Ue,add:De,set:We,delete:ze,clear:Ke,forEach:Ge(!1,!1)},t={get(e){return je(this,e,!1,!0)},get size(){return He(this)},has:Ue,add:De,set:We,delete:ze,clear:Ke,forEach:Ge(!1,!0)},n={get(e){return je(this,e,!0)},get size(){return He(this,!0)},has(e){return Ue.call(this,e,!0)},add:Je("add"),set:Je("set"),delete:Je("delete"),clear:Je("clear"),forEach:Ge(!0,!1)},o={get(e){return je(this,e,!0,!0)},get size(){return He(this,!0)},has(e){return Ue.call(this,e,!0)},add:Je("add"),set:Je("set"),delete:Je("delete"),clear:Je("clear"),forEach:Ge(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((r=>{e[r]=qe(r,!1,!1),n[r]=qe(r,!0,!1),t[r]=qe(r,!1,!0),o[r]=qe(r,!0,!0)})),[e,n,t,o]}const[Ze,Qe,Xe,et]=Ye();function tt(e,t){const n=t?e?et:Xe:e?Qe:Ze;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(T(n,o)&&o in t?n:t,o,r)}const nt={get:tt(!1,!1)},ot={get:tt(!1,!0)},rt={get:tt(!0,!1)},st={get:tt(!0,!0)},it=new WeakMap,lt=new WeakMap,ct=new WeakMap,at=new WeakMap;function ut(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>I(e).slice(8,-1))(e))}function pt(e){return gt(e)?e:ht(e,!1,Pe,nt,it)}function ft(e){return ht(e,!1,Ve,ot,lt)}function dt(e){return ht(e,!0,Me,rt,ct)}function ht(e,t,n,o,r){if(!P(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=ut(e);if(0===i)return e;const l=new Proxy(e,2===i?o:n);return r.set(e,l),l}function mt(e){return gt(e)?mt(e.__v_raw):!(!e||!e.__v_isReactive)}function gt(e){return!(!e||!e.__v_isReadonly)}function vt(e){return!(!e||!e.__v_isShallow)}function yt(e){return mt(e)||gt(e)}function bt(e){const t=e&&e.__v_raw;return t?bt(t):e}function _t(e){return Y(e,"__v_skip",!0),e}const St=e=>P(e)?pt(e):e,xt=e=>P(e)?dt(e):e;function Ct(e){_e()&&((e=bt(e)).dep||(e.dep=oe()),Se(e.dep))}function wt(e,t){(e=bt(e)).dep&&Ce(e.dep)}function kt(e){return Boolean(e&&!0===e.__v_isRef)}function Tt(e){return Nt(e,!1)}function Nt(e,t){return kt(e)?e:new Et(e,t)}class Et{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:bt(e),this._value=t?e:St(e)}get value(){return Ct(this),this._value}set value(e){e=this.__v_isShallow?e:bt(e),q(e,this._rawValue)&&(this._rawValue=e,this._value=this.__v_isShallow?e:St(e),wt(this))}}function $t(e){return kt(e)?e.value:e}const Ot={get:(e,t,n)=>$t(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return kt(r)&&!kt(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function At(e){return mt(e)?e:new Proxy(e,Ot)}class Rt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Ct(this)),(()=>wt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}class Ft{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}}function Pt(e,t,n){const o=e[t];return kt(o)?o:new Ft(e,t,n)}class Mt{constructor(e,t,n,o){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new de(e,(()=>{this._dirty||(this._dirty=!0,wt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=bt(this);return Ct(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}const Vt=[];function It(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach((n=>{t.push(...Bt(n,e[n]))})),n.length>3&&t.push(" ..."),t}function Bt(e,t,n){return R(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):"number"==typeof t||"boolean"==typeof t||null==t?n?t:[`${e}=${t}`]:kt(t)?(t=Bt(e,bt(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):A(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=bt(t),n?t:[`${e}=`,t])}function Lt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(s){Ut(s,t,n)}return r}function jt(e,t,n,o){if(A(e)){const r=Lt(e,t,n,o);return r&&M(r)&&r.catch((e=>{Ut(e,t,n)})),r}const r=[];for(let s=0;s>>1;an(Wt[o])an(e)-an(t))),Zt=0;Ztnull==e.id?1/0:e.id;function un(e){Dt=!1,Ht=!0,ln(e),Wt.sort(((e,t)=>an(e)-an(t)));try{for(zt=0;zte.trim())):t&&(r=n.map(Z))}let l,c=o[l=G(t)]||o[l=G(D(t))];!c&&s&&(c=o[l=G(z(t))]),c&&jt(c,e,6,r);const a=o[l+"Once"];if(a){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,jt(a,e,6,r)}}function dn(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const s=e.emits;let i={},l=!1;if(!A(e)){const o=e=>{const n=dn(e,t,!0);n&&(l=!0,C(i,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return s||l?(N(s)?s.forEach((e=>i[e]=null)):C(i,s),o.set(e,i),i):(o.set(e,null),null)}function hn(e,t){return!(!e||!S(t))&&(t=t.slice(2).replace(/Once$/,""),T(e,t[0].toLowerCase()+t.slice(1))||T(e,z(t))||T(e,t))}let mn=null,gn=null;function vn(e){const t=mn;return mn=e,gn=e&&e.type.__scopeId||null,t}function yn(e,t=mn,n){if(!t)return e;if(e._n)return e;const o=(...n)=>{o._d&&Sr(-1);const r=vn(t),s=e(...n);return vn(r),o._d&&Sr(1),s};return o._n=!0,o._c=!0,o._d=!0,o}function bn(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[i],slots:l,attrs:c,emit:a,render:u,renderCache:p,data:f,setupState:d,ctx:h,inheritAttrs:m}=e;let g,v;const y=vn(e);try{if(4&n.shapeFlag){const e=r||o;g=Pr(u.call(e,e,p,s,d,f,h)),v=c}else{const e=t;0,g=Pr(e(s,e.length>1?{attrs:c,slots:l,emit:a}:null)),v=t.props?c:_n(c)}}catch(_){gr.length=0,Ut(_,e,1),g=Or(hr)}let b=g;if(v&&!1!==m){const e=Object.keys(v),{shapeFlag:t}=b;e.length&&7&t&&(i&&e.some(x)&&(v=Sn(v,i)),b=Rr(b,v))}return n.dirs&&(b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),g=b,vn(y),g}const _n=e=>{let t;for(const n in e)("class"===n||"style"===n||S(n))&&((t||(t={}))[n]=e[n]);return t},Sn=(e,t)=>{const n={};for(const o in e)x(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function xn(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r0?(kn(e,"onPending"),kn(e,"onFallback"),a(null,e.ssFallback,t,n,o,null,s,i),$n(f,e.ssFallback)):f.resolve()}(t,n,o,r,s,i,l,c,a):function(e,t,n,o,r,s,i,l,{p:c,um:a,o:{createElement:u}}){const p=t.suspense=e.suspense;p.vnode=t,t.el=e.el;const f=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:m,isInFallback:g,isHydrating:v}=p;if(m)p.pendingBranch=f,kr(f,m)?(c(m,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0?p.resolve():g&&(c(h,d,n,o,r,null,s,i,l),$n(p,d))):(p.pendingId++,v?(p.isHydrating=!1,p.activeBranch=m):a(m,r,p),p.deps=0,p.effects.length=0,p.hiddenContainer=u("div"),g?(c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0?p.resolve():(c(h,d,n,o,r,null,s,i,l),$n(p,d))):h&&kr(f,h)?(c(h,f,n,o,r,p,s,i,l),p.resolve(!0)):(c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0&&p.resolve()));else if(h&&kr(f,h))c(h,f,n,o,r,p,s,i,l),$n(p,f);else if(kn(t,"onPending"),p.pendingBranch=f,p.pendingId++,c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0)p.resolve();else{const{timeout:e,pendingId:t}=p;e>0?setTimeout((()=>{p.pendingId===t&&p.fallback(d)}),e):0===e&&p.fallback(d)}}(e,t,n,o,r,i,l,c,a)},hydrate:function(e,t,n,o,r,s,i,l,c){const a=t.suspense=Tn(t,o,n,e.parentNode,document.createElement("div"),null,r,s,i,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,s,i);0===a.deps&&a.resolve();return u},create:Tn,normalize:function(e){const{shapeFlag:t,children:n}=e,o=32&t;e.ssContent=Nn(o?n.default:n),e.ssFallback=o?Nn(n.fallback):Or(hr)}};function kn(e,t){const n=e.props&&e.props[t];A(n)&&n()}function Tn(e,t,n,o,r,s,i,l,c,a,u=!1){const{p:p,m:f,um:d,n:h,o:{parentNode:m,remove:g}}=a,v=Z(e.props&&e.props.timeout),y={vnode:e,parent:t,parentComponent:n,isSVG:i,container:o,hiddenContainer:r,anchor:s,deps:0,pendingId:0,timeout:"number"==typeof v?v:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:o,pendingId:r,effects:s,parentComponent:i,container:l}=y;if(y.isHydrating)y.isHydrating=!1;else if(!e){const e=n&&o.transition&&"out-in"===o.transition.mode;e&&(n.transition.afterLeave=()=>{r===y.pendingId&&f(o,l,t,0)});let{anchor:t}=y;n&&(t=h(n),d(n,i,y,!0)),e||f(o,l,t,0)}$n(y,o),y.pendingBranch=null,y.isInFallback=!1;let c=y.parent,a=!1;for(;c;){if(c.pendingBranch){c.effects.push(...s),a=!0;break}c=c.parent}a||sn(s),y.effects=[],kn(t,"onResolve")},fallback(e){if(!y.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:o,container:r,isSVG:s}=y;kn(t,"onFallback");const i=h(n),a=()=>{y.isInFallback&&(p(null,e,r,i,o,null,s,l,c),$n(y,e))},u=e.transition&&"out-in"===e.transition.mode;u&&(n.transition.afterLeave=a),y.isInFallback=!0,d(n,o,null,!0),u||a()},move(e,t,n){y.activeBranch&&f(y.activeBranch,e,t,n),y.container=e},next:()=>y.activeBranch&&h(y.activeBranch),registerDep(e,t){const n=!!y.pendingBranch;n&&y.deps++;const o=e.vnode.el;e.asyncDep.catch((t=>{Ut(t,e,0)})).then((r=>{if(e.isUnmounted||y.isUnmounted||y.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:s}=e;es(e,r,!1),o&&(s.el=o);const l=!o&&e.subTree.el;t(e,s,m(o||e.subTree.el),o?null:h(e.subTree),y,i,c),l&&g(l),Cn(e,s.el),n&&0==--y.deps&&y.resolve()}))},unmount(e,t){y.isUnmounted=!0,y.activeBranch&&d(y.activeBranch,n,e,t),y.pendingBranch&&d(y.pendingBranch,n,e,t)}};return y}function Nn(e){let t;if(A(e)){const n=_r&&e._c;n&&(e._d=!1,yr()),e=e(),n&&(e._d=!0,t=vr,br())}if(N(e)){const t=function(e){let t;for(let n=0;nt!==e))),e}function En(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):sn(e)}function $n(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e,r=n.el=t.el;o&&o.subTree===n&&(o.vnode.el=r,Cn(o,r))}function On(e,t){if(Kr){let n=Kr.provides;const o=Kr.parent&&Kr.parent.provides;o===n&&(n=Kr.provides=Object.create(o)),n[e]=t}else;}function An(e,t,n=!1){const o=Kr||mn;if(o){const r=null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&A(t)?t.call(o.proxy):t}}function Rn(e,t){return Mn(e,null,{flush:"post"})}const Fn={};function Pn(e,t,n){return Mn(e,t,n)}function Mn(e,t,{immediate:n,deep:o,flush:r}=g){const s=Kr;let i,l,c=!1,a=!1;if(kt(e)?(i=()=>e.value,c=vt(e)):mt(e)?(i=()=>e,o=!0):N(e)?(a=!0,c=e.some(mt),i=()=>e.map((e=>kt(e)?e.value:mt(e)?Bn(e):A(e)?Lt(e,s,2):void 0))):i=A(e)?t?()=>Lt(e,s,2):()=>{if(!s||!s.isUnmounted)return l&&l(),jt(e,s,3,[u])}:y,t&&o){const e=i;i=()=>Bn(e())}let u=e=>{l=h.onStop=()=>{Lt(e,s,4)}},p=a?[]:Fn;const f=()=>{if(h.active)if(t){const e=h.run();(o||c||(a?e.some(((e,t)=>q(e,p[t]))):q(e,p)))&&(l&&l(),jt(t,s,3,[e,p===Fn?void 0:p,u]),p=e)}else h.run()};let d;f.allowRecurse=!!t,d="sync"===r?f:"post"===r?()=>Zo(f,s&&s.suspense):()=>{!s||s.isMounted?function(e){rn(e,Gt,Kt,qt)}(f):f()};const h=new de(i,d);return t?n?f():p=h.run():"post"===r?Zo(h.run.bind(h),s&&s.suspense):h.run(),()=>{h.stop(),s&&s.scope&&w(s.scope.effects,h)}}function Vn(e,t,n){const o=this.proxy,r=R(e)?e.includes(".")?In(o,e):()=>o[e]:e.bind(o,o);let s;A(t)?s=t:(s=t.handler,n=t);const i=Kr;qr(this);const l=Mn(r,s.bind(o),n);return i?qr(i):Jr(),l}function In(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{Bn(e,t)}));else if(B(e))for(const n in e)Bn(e[n],t);return e}function Ln(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return ao((()=>{e.isMounted=!0})),fo((()=>{e.isUnmounting=!0})),e}const jn=[Function,Array],Un={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:jn,onEnter:jn,onAfterEnter:jn,onEnterCancelled:jn,onBeforeLeave:jn,onLeave:jn,onAfterLeave:jn,onLeaveCancelled:jn,onBeforeAppear:jn,onAppear:jn,onAfterAppear:jn,onAppearCancelled:jn},setup(e,{slots:t}){const n=Gr(),o=Ln();let r;return()=>{const s=t.default&&Gn(t.default(),!0);if(!s||!s.length)return;const i=bt(e),{mode:l}=i,c=s[0];if(o.isLeaving)return Wn(c);const a=zn(c);if(!a)return Wn(c);const u=Dn(a,i,o,n);Kn(a,u);const p=n.subTree,f=p&&zn(p);let d=!1;const{getTransitionKey:h}=a.type;if(h){const e=h();void 0===r?r=e:e!==r&&(r=e,d=!0)}if(f&&f.type!==hr&&(!kr(a,f)||d)){const e=Dn(f,i,o,n);if(Kn(f,e),"out-in"===l)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,n.update()},Wn(c);"in-out"===l&&a.type!==hr&&(e.delayLeave=(e,t,n)=>{Hn(o,f)[String(f.key)]=f,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return c}}};function Hn(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Dn(e,t,n,o){const{appear:r,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:p,onLeave:f,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:m,onAppear:g,onAfterAppear:v,onAppearCancelled:y}=t,b=String(e.key),_=Hn(n,e),S=(e,t)=>{e&&jt(e,o,9,t)},x={mode:s,persisted:i,beforeEnter(t){let o=l;if(!n.isMounted){if(!r)return;o=m||l}t._leaveCb&&t._leaveCb(!0);const s=_[b];s&&kr(e,s)&&s.el._leaveCb&&s.el._leaveCb(),S(o,[t])},enter(e){let t=c,o=a,s=u;if(!n.isMounted){if(!r)return;t=g||c,o=v||a,s=y||u}let i=!1;const l=e._enterCb=t=>{i||(i=!0,S(t?s:o,[e]),x.delayedLeave&&x.delayedLeave(),e._enterCb=void 0)};t?(t(e,l),t.length<=1&&l()):l()},leave(t,o){const r=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return o();S(p,[t]);let s=!1;const i=t._leaveCb=n=>{s||(s=!0,o(),S(n?h:d,[t]),t._leaveCb=void 0,_[r]===e&&delete _[r])};_[r]=e,f?(f(t,i),f.length<=1&&i()):i()},clone:e=>Dn(e,t,n,o)};return x}function Wn(e){if(Zn(e))return(e=Rr(e)).children=null,e}function zn(e){return Zn(e)?e.children?e.children[0]:void 0:e}function Kn(e,t){6&e.shapeFlag&&e.component?Kn(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Gn(e,t=!1){let n=[],o=0;for(let r=0;r1)for(let r=0;r!!e.type.__asyncLoader;function Yn(e,{vnode:{ref:t,props:n,children:o}}){const r=Or(e,n,o);return r.ref=t,r}const Zn=e=>e.type.__isKeepAlive,Qn={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Gr(),o=n.ctx;if(!o.renderer)return t.default;const r=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:p}}}=o,f=p("div");function d(e){ro(e),u(e,n,l,!0)}function h(e){r.forEach(((t,n)=>{const o=is(t.type);!o||e&&e(o)||m(n)}))}function m(e){const t=r.get(e);i&&t.type===i.type?i&&ro(i):d(t),r.delete(e),s.delete(e)}o.activate=(e,t,n,o,r)=>{const s=e.component;a(e,t,n,0,l),c(s.vnode,e,t,n,s,l,o,e.slotScopeIds,r),Zo((()=>{s.isDeactivated=!1,s.a&&J(s.a);const t=e.props&&e.props.onVnodeMounted;t&&Br(t,s.parent,e)}),l)},o.deactivate=e=>{const t=e.component;a(e,f,null,1,l),Zo((()=>{t.da&&J(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&Br(n,t.parent,e),t.isDeactivated=!0}),l)},Pn((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>Xn(e,t))),t&&h((e=>!Xn(t,e)))}),{flush:"post",deep:!0});let g=null;const v=()=>{null!=g&&r.set(g,so(n.subTree))};return ao(v),po(v),fo((()=>{r.forEach((e=>{const{subTree:t,suspense:o}=n,r=so(t);if(e.type!==r.type)d(e);else{ro(r);const e=r.component.da;e&&Zo(e,o)}}))})),()=>{if(g=null,!t.default)return null;const n=t.default(),o=n[0];if(n.length>1)return i=null,n;if(!(wr(o)&&(4&o.shapeFlag||128&o.shapeFlag)))return i=null,o;let l=so(o);const c=l.type,a=is(Jn(l)?l.type.__asyncResolved||{}:c),{include:u,exclude:p,max:f}=e;if(u&&(!a||!Xn(u,a))||p&&a&&Xn(p,a))return i=l,o;const d=null==l.key?c:l.key,h=r.get(d);return l.el&&(l=Rr(l),128&o.shapeFlag&&(o.ssContent=l)),g=d,h?(l.el=h.el,l.component=h.component,l.transition&&Kn(l,l.transition),l.shapeFlag|=512,s.delete(d),s.add(d)):(s.add(d),f&&s.size>parseInt(f,10)&&m(s.values().next().value)),l.shapeFlag|=256,i=l,o}}};function Xn(e,t){return N(e)?e.some((e=>Xn(e,t))):R(e)?e.split(",").includes(t):!!e.test&&e.test(t)}function eo(e,t){no(e,"a",t)}function to(e,t){no(e,"da",t)}function no(e,t,n=Kr){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(io(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Zn(e.parent.vnode)&&oo(o,t,n,e),e=e.parent}}function oo(e,t,n,o){const r=io(t,e,o,!0);ho((()=>{w(o[t],r)}),n)}function ro(e){let t=e.shapeFlag;256&t&&(t-=256),512&t&&(t-=512),e.shapeFlag=t}function so(e){return 128&e.shapeFlag?e.ssContent:e}function io(e,t,n=Kr,o=!1){if(n){const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;ve(),qr(n);const r=jt(t,n,e,o);return Jr(),ye(),r});return o?r.unshift(s):r.push(s),s}}const lo=e=>(t,n=Kr)=>(!Xr||"sp"===e)&&io(e,t,n),co=lo("bm"),ao=lo("m"),uo=lo("bu"),po=lo("u"),fo=lo("bum"),ho=lo("um"),mo=lo("sp"),go=lo("rtg"),vo=lo("rtc");function yo(e,t=Kr){io("ec",e,t)}let bo=!0;function _o(e){const t=Co(e),n=e.proxy,o=e.ctx;bo=!1,t.beforeCreate&&So(t.beforeCreate,e,"bc");const{data:r,computed:s,methods:i,watch:l,provide:c,inject:a,created:u,beforeMount:p,mounted:f,beforeUpdate:d,updated:h,activated:m,deactivated:g,beforeUnmount:v,unmounted:b,render:_,renderTracked:S,renderTriggered:x,errorCaptured:C,serverPrefetch:w,expose:k,inheritAttrs:T,components:E,directives:$}=t;if(a&&function(e,t,n=y,o=!1){N(e)&&(e=No(e));for(const r in e){const n=e[r];let s;s=P(n)?"default"in n?An(n.from||r,n.default,!0):An(n.from||r):An(n),kt(s)&&o?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:e=>s.value=e}):t[r]=s}}(a,o,null,e.appContext.config.unwrapInjectedRef),i)for(const y in i){const e=i[y];A(e)&&(o[y]=e.bind(n))}if(r){const t=r.call(n,n);P(t)&&(e.data=pt(t))}if(bo=!0,s)for(const N in s){const e=s[N],t=A(e)?e.bind(n,n):A(e.get)?e.get.bind(n,n):y,r=!A(e)&&A(e.set)?e.set.bind(n):y,i=cs({get:t,set:r});Object.defineProperty(o,N,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e})}if(l)for(const y in l)xo(l[y],o,n,y);if(c){const e=A(c)?c.call(n):c;Reflect.ownKeys(e).forEach((t=>{On(t,e[t])}))}function O(e,t){N(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(u&&So(u,e,"c"),O(co,p),O(ao,f),O(uo,d),O(po,h),O(eo,m),O(to,g),O(yo,C),O(vo,S),O(go,x),O(fo,v),O(ho,b),O(mo,w),N(k))if(k.length){const t=e.exposed||(e.exposed={});k.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});_&&e.render===y&&(e.render=_),null!=T&&(e.inheritAttrs=T),E&&(e.components=E),$&&(e.directives=$)}function So(e,t,n){jt(N(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function xo(e,t,n,o){const r=o.includes(".")?In(n,o):()=>n[o];if(R(e)){const n=t[e];A(n)&&Pn(r,n)}else if(A(e))Pn(r,e.bind(n));else if(P(e))if(N(e))e.forEach((e=>xo(e,t,n,o)));else{const o=A(e.handler)?e.handler.bind(n):t[e.handler];A(o)&&Pn(r,o,e)}}function Co(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let c;return l?c=l:r.length||n||o?(c={},r.length&&r.forEach((e=>wo(c,e,i,!0))),wo(c,t,i)):c=t,s.set(t,c),c}function wo(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&wo(e,s,n,!0),r&&r.forEach((t=>wo(e,t,n,!0)));for(const i in t)if(o&&"expose"===i);else{const o=ko[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const ko={data:To,props:$o,emits:$o,methods:$o,computed:$o,beforeCreate:Eo,created:Eo,beforeMount:Eo,mounted:Eo,beforeUpdate:Eo,updated:Eo,beforeDestroy:Eo,beforeUnmount:Eo,destroyed:Eo,unmounted:Eo,activated:Eo,deactivated:Eo,errorCaptured:Eo,serverPrefetch:Eo,components:$o,directives:$o,watch:function(e,t){if(!e)return t;if(!t)return e;const n=C(Object.create(null),e);for(const o in t)n[o]=Eo(e[o],t[o]);return n},provide:To,inject:function(e,t){return $o(No(e),No(t))}};function To(e,t){return t?e?function(){return C(A(e)?e.call(this,this):e,A(t)?t.call(this,this):t)}:t:e}function No(e){if(N(e)){const t={};for(let n=0;n{c=!0;const[n,o]=Ro(e,t,!0);C(i,n),o&&l.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!s&&!c)return o.set(e,v),v;if(N(s))for(let u=0;u-1,n[1]=o<0||t-1||T(n,"default"))&&l.push(e)}}}const a=[i,l];return o.set(e,a),a}function Fo(e){return"$"!==e[0]}function Po(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:null===e?"null":""}function Mo(e,t){return Po(e)===Po(t)}function Vo(e,t){return N(t)?t.findIndex((t=>Mo(t,e))):A(t)&&Mo(t,e)?0:-1}const Io=e=>"_"===e[0]||"$stable"===e,Bo=e=>N(e)?e.map(Pr):[Pr(e)],Lo=(e,t,n)=>{const o=yn(((...e)=>Bo(t(...e))),n);return o._c=!1,o},jo=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Io(r))continue;const n=e[r];if(A(n))t[r]=Lo(0,n,o);else if(null!=n){const e=Bo(n);t[r]=()=>e}}},Uo=(e,t)=>{const n=Bo(t);e.slots.default=()=>n};function Ho(e,t,n,o){const r=e.dirs,s=t&&t.dirs;for(let i=0;i(s.has(e)||(e&&A(e.install)?(s.add(e),e.install(l,...t)):A(e)&&(s.add(e),e(l,...t))),l),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),l),component:(e,t)=>t?(r.components[e]=t,l):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,l):r.directives[e],mount(s,c,a){if(!i){const u=Or(n,o);return u.appContext=r,c&&t?t(u,s):e(u,s,a),i=!0,l._container=s,s.__vue_app__=l,rs(u.component)||u.component.proxy}},unmount(){i&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,l)};return l}}function Ko(e,t,n,o,r=!1){if(N(e))return void e.forEach(((e,s)=>Ko(e,t&&(N(t)?t[s]:t),n,o,r)));if(Jn(o)&&!r)return;const s=4&o.shapeFlag?rs(o.component)||o.component.proxy:o.el,i=r?null:s,{i:l,r:c}=e,a=t&&t.r,u=l.refs===g?l.refs={}:l.refs,p=l.setupState;if(null!=a&&a!==c&&(R(a)?(u[a]=null,T(p,a)&&(p[a]=null)):kt(a)&&(a.value=null)),A(c))Lt(c,l,12,[i,u]);else{const t=R(c),o=kt(c);if(t||o){const o=()=>{if(e.f){const n=t?u[c]:c.value;r?N(n)&&w(n,s):N(n)?n.includes(s)||n.push(s):t?u[c]=[s]:(c.value=[s],e.k&&(u[e.k]=c.value))}else t?(u[c]=i,T(p,c)&&(p[c]=i)):kt(c)&&(c.value=i,e.k&&(u[e.k]=i))};i?(o.id=-1,Zo(o,n)):o()}}}let Go=!1;const qo=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,Jo=e=>8===e.nodeType;function Yo(e){const{mt:t,p:n,o:{patchProp:o,nextSibling:r,parentNode:s,remove:i,insert:l,createComment:c}}=e,a=(n,o,i,l,c,m=!1)=>{const g=Jo(n)&&"["===n.data,v=()=>d(n,o,i,l,c,g),{type:y,ref:b,shapeFlag:_}=o,S=n.nodeType;o.el=n;let x=null;switch(y){case dr:3!==S?x=v():(n.data!==o.children&&(Go=!0,n.data=o.children),x=r(n));break;case hr:x=8!==S||g?v():r(n);break;case mr:if(1===S){x=n;const e=!o.children.length;for(let t=0;t{l=l||!!t.dynamicChildren;const{type:c,props:a,patchFlag:u,shapeFlag:f,dirs:d}=t,h="input"===c&&d||"option"===c;if(h||-1!==u){if(d&&Ho(t,null,n,"created"),a)if(h||!l||48&u)for(const t in a)(h&&t.endsWith("value")||S(t)&&!j(t))&&o(e,t,null,a[t],!1,void 0,n);else a.onClick&&o(e,"onClick",null,a.onClick,!1,void 0,n);let c;if((c=a&&a.onVnodeBeforeMount)&&Br(c,n,t),d&&Ho(t,null,n,"beforeMount"),((c=a&&a.onVnodeMounted)||d)&&En((()=>{c&&Br(c,n,t),d&&Ho(t,null,n,"mounted")}),r),16&f&&(!a||!a.innerHTML&&!a.textContent)){let o=p(e.firstChild,t,e,n,r,s,l);for(;o;){Go=!0;const e=o;o=o.nextSibling,i(e)}}else 8&f&&e.textContent!==t.children&&(Go=!0,e.textContent=t.children)}return e.nextSibling},p=(e,t,o,r,s,i,l)=>{l=l||!!t.dynamicChildren;const c=t.children,u=c.length;for(let p=0;p{const{slotScopeIds:u}=t;u&&(i=i?i.concat(u):u);const f=s(e),d=p(r(e),t,f,n,o,i,a);return d&&Jo(d)&&"]"===d.data?r(t.anchor=d):(Go=!0,l(t.anchor=c("]"),f,d),d)},d=(e,t,o,l,c,a)=>{if(Go=!0,t.el=null,a){const t=h(e);for(;;){const n=r(e);if(!n||n===t)break;i(n)}}const u=r(e),p=s(e);return i(e),n(null,t,p,u,o,l,qo(p),c),u},h=e=>{let t=0;for(;e;)if((e=r(e))&&Jo(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return r(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),void cn();Go=!1,a(t.firstChild,e,null,null,null),cn(),Go&&console.error("Hydration completed but contains mismatches.")},a]}const Zo=En;function Qo(e){return er(e)}function Xo(e){return er(e,Yo)}function er(e,t){(Q||(Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{})).__VUE__=!0;const{insert:n,remove:o,patchProp:r,createElement:s,createText:i,createComment:l,setText:c,setElementText:a,parentNode:u,nextSibling:p,setScopeId:f=y,cloneNode:d,insertStaticContent:h}=e,m=(e,t,n,o=null,r=null,s=null,i=!1,l=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!kr(e,t)&&(o=X(e),W(e,r,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:p}=t;switch(a){case dr:b(e,t,n,o);break;case hr:_(e,t,n,o);break;case mr:null==e&&S(t,n,o,i);break;case fr:A(e,t,n,o,r,s,i,l,c);break;default:1&p?x(e,t,n,o,r,s,i,l,c):6&p?R(e,t,n,o,r,s,i,l,c):(64&p||128&p)&&a.process(e,t,n,o,r,s,i,l,c,ne)}null!=u&&r&&Ko(u,e&&e.ref,s,t||e,!t)},b=(e,t,o,r)=>{if(null==e)n(t.el=i(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&c(n,t.children)}},_=(e,t,o,r)=>{null==e?n(t.el=l(t.children||""),o,r):t.el=e.el},S=(e,t,n,o)=>{[e.el,e.anchor]=h(e.children,t,n,o,e.el,e.anchor)},x=(e,t,n,o,r,s,i,l,c)=>{i=i||"svg"===t.type,null==e?w(t,n,o,r,s,i,l,c):E(e,t,r,s,i,l,c)},w=(e,t,o,i,l,c,u,p)=>{let f,h;const{type:m,props:g,shapeFlag:v,transition:y,patchFlag:b,dirs:_}=e;if(e.el&&void 0!==d&&-1===b)f=e.el=d(e.el);else{if(f=e.el=s(e.type,c,g&&g.is,g),8&v?a(f,e.children):16&v&&N(e.children,f,null,i,l,c&&"foreignObject"!==m,u,p),_&&Ho(e,null,i,"created"),g){for(const t in g)"value"===t||j(t)||r(f,t,null,g[t],c,e.children,i,l,Z);"value"in g&&r(f,"value",null,g.value),(h=g.onVnodeBeforeMount)&&Br(h,i,e)}k(f,e,e.scopeId,u,i)}_&&Ho(e,null,i,"beforeMount");const S=(!l||l&&!l.pendingBranch)&&y&&!y.persisted;S&&y.beforeEnter(f),n(f,t,o),((h=g&&g.onVnodeMounted)||S||_)&&Zo((()=>{h&&Br(h,i,e),S&&y.enter(f),_&&Ho(e,null,i,"mounted")}),l)},k=(e,t,n,o,r)=>{if(n&&f(e,n),o)for(let s=0;s{for(let a=c;a{const c=t.el=e.el;let{patchFlag:u,dynamicChildren:p,dirs:f}=t;u|=16&e.patchFlag;const d=e.props||g,h=t.props||g;let m;n&&tr(n,!1),(m=h.onVnodeBeforeUpdate)&&Br(m,n,t,e),f&&Ho(t,e,n,"beforeUpdate"),n&&tr(n,!0);const v=s&&"foreignObject"!==t.type;if(p?$(e.dynamicChildren,p,c,n,o,v,i):l||B(e,t,c,null,n,o,v,i,!1),u>0){if(16&u)O(c,t,d,h,n,o,s);else if(2&u&&d.class!==h.class&&r(c,"class",null,h.class,s),4&u&&r(c,"style",d.style,h.style,s),8&u){const i=t.dynamicProps;for(let t=0;t{m&&Br(m,n,t,e),f&&Ho(t,e,n,"updated")}),o)},$=(e,t,n,o,r,s,i)=>{for(let l=0;l{if(n!==o){for(const c in o){if(j(c))continue;const a=o[c],u=n[c];a!==u&&"value"!==c&&r(e,c,u,a,l,t.children,s,i,Z)}if(n!==g)for(const c in n)j(c)||c in o||r(e,c,n[c],null,l,t.children,s,i,Z);"value"in o&&r(e,"value",n.value,o.value)}},A=(e,t,o,r,s,l,c,a,u)=>{const p=t.el=e?e.el:i(""),f=t.anchor=e?e.anchor:i("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:m}=t;m&&(a=a?a.concat(m):m),null==e?(n(p,o,r),n(f,o,r),N(t.children,o,f,s,l,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?($(e.dynamicChildren,h,o,s,l,c,a),(null!=t.key||s&&t===s.subTree)&&nr(e,t,!0)):B(e,t,o,f,s,l,c,a,u)},R=(e,t,n,o,r,s,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,i,c):F(t,n,o,r,s,i,c):P(e,t,c)},F=(e,t,n,o,r,s,i)=>{const l=e.component=function(e,t,n){const o=e.type,r=(t?t.appContext:e.appContext)||Wr,s={uid:zr++,vnode:e,type:o,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,scope:new te(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Ro(o,r),emitsOptions:dn(o,r),emit:null,emitted:null,propsDefaults:g,inheritAttrs:o.inheritAttrs,ctx:g,data:g,props:g,attrs:g,slots:g,refs:g,setupState:g,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};s.ctx={_:s},s.root=t?t.root:s,s.emit=fn.bind(null,s),e.ce&&e.ce(s);return s}(e,o,r);if(Zn(e)&&(l.ctx.renderer=ne),function(e,t=!1){Xr=t;const{props:n,children:o}=e.vnode,r=Yr(e);(function(e,t,n,o=!1){const r={},s={};Y(s,Tr,1),e.propsDefaults=Object.create(null),Oo(e,t,r,s);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);e.props=n?o?r:ft(r):e.type.props?r:s,e.attrs=s})(e,n,r,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=bt(t),Y(t,"_",n)):jo(t,e.slots={})}else e.slots={},t&&Uo(e,t);Y(e.slots,Tr,1)})(e,o);const s=r?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=_t(new Proxy(e.ctx,Hr));const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?os(e):null;qr(e),ve();const r=Lt(o,e,0,[e.props,n]);if(ye(),Jr(),M(r)){if(r.then(Jr,Jr),t)return r.then((n=>{es(e,n,t)})).catch((t=>{Ut(t,e,0)}));e.asyncDep=r}else es(e,r,t)}else ns(e,t)}(e,t):void 0;Xr=!1}(l),l.asyncDep){if(r&&r.registerDep(l,V),!e.el){const e=l.subTree=Or(hr);_(null,e,t,n)}}else V(l,e,t,n,r,s,i)},P=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:s}=e,{props:i,children:l,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!l||l&&l.$stable)||o!==i&&(o?!i||xn(o,i,a):!!i);if(1024&c)return!0;if(16&c)return o?xn(o,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;tzt&&Wt.splice(t,1)}(o.update),o.update()}else t.component=e.component,t.el=e.el,o.vnode=t},V=(e,t,n,o,r,s,i)=>{const l=e.effect=new de((()=>{if(e.isMounted){let t,{next:n,bu:o,u:l,parent:c,vnode:a}=e,p=n;tr(e,!1),n?(n.el=a.el,I(e,n,i)):n=a,o&&J(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Br(t,c,n,a),tr(e,!0);const f=bn(e),d=e.subTree;e.subTree=f,m(d,f,u(d.el),X(d),e,r,s),n.el=f.el,null===p&&Cn(e,f.el),l&&Zo(l,r),(t=n.props&&n.props.onVnodeUpdated)&&Zo((()=>Br(t,c,n,a)),r)}else{let i;const{el:l,props:c}=t,{bm:a,m:u,parent:p}=e,f=Jn(t);if(tr(e,!1),a&&J(a),!f&&(i=c&&c.onVnodeBeforeMount)&&Br(i,p,t),tr(e,!0),l&&re){const n=()=>{e.subTree=bn(e),re(l,e.subTree,e,r,null)};f?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const i=e.subTree=bn(e);m(null,i,n,o,e,r,s),t.el=i.el}if(u&&Zo(u,r),!f&&(i=c&&c.onVnodeMounted)){const e=t;Zo((()=>Br(i,p,e)),r)}256&t.shapeFlag&&e.a&&Zo(e.a,r),e.isMounted=!0,t=n=o=null}}),(()=>nn(e.update)),e.scope),c=e.update=l.run.bind(l);c.id=e.uid,tr(e,!0),c()},I=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:r,attrs:s,vnode:{patchFlag:i}}=e,l=bt(r),[c]=e.propsOptions;let a=!1;if(!(o||i>0)||16&i){let o;Oo(e,t,r,s)&&(a=!0);for(const s in l)t&&(T(t,s)||(o=z(s))!==s&&T(t,o))||(c?!n||void 0===n[s]&&void 0===n[o]||(r[s]=Ao(c,l,s,void 0,e,!0)):delete r[s]);if(s!==l)for(const e in s)t&&T(t,e)||(delete s[e],a=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let o=0;o{const{vnode:o,slots:r}=e;let s=!0,i=g;if(32&o.shapeFlag){const e=t._;e?n&&1===e?s=!1:(C(r,t),n||1!==e||delete r._):(s=!t.$stable,jo(t,r)),i=t}else t&&(Uo(e,t),i={default:1});if(s)for(const l in r)Io(l)||l in i||delete r[l]})(e,t.children,n),ve(),ln(void 0,e.update),ye()},B=(e,t,n,o,r,s,i,l,c=!1)=>{const u=e&&e.children,p=e?e.shapeFlag:0,f=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void U(u,f,n,o,r,s,i,l,c);if(256&d)return void L(u,f,n,o,r,s,i,l,c)}8&h?(16&p&&Z(u,r,s),f!==u&&a(n,f)):16&p?16&h?U(u,f,n,o,r,s,i,l,c):Z(u,r,s,!0):(8&p&&a(n,""),16&h&&N(f,n,o,r,s,i,l,c))},L=(e,t,n,o,r,s,i,l,c)=>{const a=(e=e||v).length,u=(t=t||v).length,p=Math.min(a,u);let f;for(f=0;fu?Z(e,r,s,!0,!1,p):N(t,n,o,r,s,i,l,c,p)},U=(e,t,n,o,r,s,i,l,c)=>{let a=0;const u=t.length;let p=e.length-1,f=u-1;for(;a<=p&&a<=f;){const o=e[a],u=t[a]=c?Mr(t[a]):Pr(t[a]);if(!kr(o,u))break;m(o,u,n,null,r,s,i,l,c),a++}for(;a<=p&&a<=f;){const o=e[p],a=t[f]=c?Mr(t[f]):Pr(t[f]);if(!kr(o,a))break;m(o,a,n,null,r,s,i,l,c),p--,f--}if(a>p){if(a<=f){const e=f+1,p=ef)for(;a<=p;)W(e[a],r,s,!0),a++;else{const d=a,h=a,g=new Map;for(a=h;a<=f;a++){const e=t[a]=c?Mr(t[a]):Pr(t[a]);null!=e.key&&g.set(e.key,a)}let y,b=0;const _=f-h+1;let S=!1,x=0;const C=new Array(_);for(a=0;a<_;a++)C[a]=0;for(a=d;a<=p;a++){const o=e[a];if(b>=_){W(o,r,s,!0);continue}let u;if(null!=o.key)u=g.get(o.key);else for(y=h;y<=f;y++)if(0===C[y-h]&&kr(o,t[y])){u=y;break}void 0===u?W(o,r,s,!0):(C[u-h]=a+1,u>=x?x=u:S=!0,m(o,t[u],n,null,r,s,i,l,c),b++)}const w=S?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const c=e.length;for(o=0;o>1,e[n[l]]0&&(t[o]=n[s-1]),n[s]=o)}}s=n.length,i=n[s-1];for(;s-- >0;)n[s]=i,i=t[i];return n}(C):v;for(y=w.length-1,a=_-1;a>=0;a--){const e=h+a,p=t[e],f=e+1{const{el:i,type:l,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void H(e.component.subTree,t,o,r);if(128&u)return void e.suspense.move(t,o,r);if(64&u)return void l.move(e,t,o,ne);if(l===fr){n(i,t,o);for(let e=0;e{let s;for(;e&&e!==t;)s=p(e),n(e,o,r),e=s;n(t,o,r)})(e,t,o);if(2!==r&&1&u&&c)if(0===r)c.beforeEnter(i),n(i,t,o),Zo((()=>c.enter(i)),s);else{const{leave:e,delayLeave:r,afterLeave:s}=c,l=()=>n(i,t,o),a=()=>{e(i,(()=>{l(),s&&s()}))};r?r(i,l,a):a()}else n(i,t,o)},W=(e,t,n,o=!1,r=!1)=>{const{type:s,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:p,dirs:f}=e;if(null!=l&&Ko(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const d=1&u&&f,h=!Jn(e);let m;if(h&&(m=i&&i.onVnodeBeforeUnmount)&&Br(m,t,e),6&u)q(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);d&&Ho(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,r,ne,o):a&&(s!==fr||p>0&&64&p)?Z(a,t,n,!1,!0):(s===fr&&384&p||!r&&16&u)&&Z(c,t,n),o&&K(e)}(h&&(m=i&&i.onVnodeUnmounted)||d)&&Zo((()=>{m&&Br(m,t,e),d&&Ho(e,null,t,"unmounted")}),n)},K=e=>{const{type:t,el:n,anchor:r,transition:s}=e;if(t===fr)return void G(n,r);if(t===mr)return void(({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=p(e),o(e),e=n;o(t)})(e);const i=()=>{o(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:o}=s,r=()=>t(n,i);o?o(e.el,i,r):r()}else i()},G=(e,t)=>{let n;for(;e!==t;)n=p(e),o(e),e=n;o(t)},q=(e,t,n)=>{const{bum:o,scope:r,update:s,subTree:i,um:l}=e;o&&J(o),r.stop(),s&&(s.active=!1,W(i,e,t,n)),l&&Zo(l,t),Zo((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},Z=(e,t,n,o=!1,r=!1,s=0)=>{for(let i=s;i6&e.shapeFlag?X(e.component.subTree):128&e.shapeFlag?e.suspense.next():p(e.anchor||e.el),ee=(e,t,n)=>{null==e?t._vnode&&W(t._vnode,null,null,!0):m(t._vnode||null,e,t,null,null,null,n),cn(),t._vnode=e},ne={p:m,um:W,m:H,r:K,mt:F,mc:N,pc:B,pbc:$,n:X,o:e};let oe,re;return t&&([oe,re]=t(ne)),{render:ee,hydrate:oe,createApp:zo(ee,oe)}}function tr({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function nr(e,t,n=!1){const o=e.children,r=t.children;if(N(o)&&N(r))for(let s=0;se&&(e.disabled||""===e.disabled),rr=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,sr=(e,t)=>{const n=e&&e.to;if(R(n)){if(t){return t(n)}return null}return n};function ir(e,t,n,{o:{insert:o},m:r},s=2){0===s&&o(e.targetAnchor,t,n);const{el:i,anchor:l,shapeFlag:c,children:a,props:u}=e,p=2===s;if(p&&o(i,t,n),(!p||or(u))&&16&c)for(let f=0;f{16&v&&u(y,e,t,r,s,i,l,c)};g?b(n,a):p&&b(p,f)}else{t.el=e.el;const o=t.anchor=e.anchor,u=t.target=e.target,d=t.targetAnchor=e.targetAnchor,m=or(e.props),v=m?n:u,y=m?o:d;if(i=i||rr(u),b?(f(e.dynamicChildren,b,v,r,s,i,l),nr(e,t,!0)):c||p(e,t,v,y,r,s,i,l,!1),g)m||ir(t,n,o,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=sr(t.props,h);e&&ir(t,e,null,a,0)}else m&&ir(t,u,d,a,1)}},remove(e,t,n,o,{um:r,o:{remove:s}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:p,props:f}=e;if(p&&s(u),(i||!or(f))&&(s(a),16&l))for(let d=0;d0?vr||v:null,br(),_r>0&&vr&&vr.push(e),e}function Cr(e,t,n,o,r){return xr(Or(e,t,n,o,r,!0))}function wr(e){return!!e&&!0===e.__v_isVNode}function kr(e,t){return e.type===t.type&&e.key===t.key}const Tr="__vInternal",Nr=({key:e})=>null!=e?e:null,Er=({ref:e,ref_key:t,ref_for:n})=>null!=e?R(e)||kt(e)||A(e)?{i:mn,r:e,k:t,f:!!n}:e:null;function $r(e,t=null,n=null,o=0,r=null,s=(e===fr?0:1),i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Nr(t),ref:t&&Er(t),scopeId:gn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null};return l?(Vr(c,n),128&s&&e.normalize(c)):n&&(c.shapeFlag|=R(n)?8:16),_r>0&&!i&&vr&&(c.patchFlag>0||6&s)&&32!==c.patchFlag&&vr.push(c),c}const Or=function(e,t=null,n=null,o=0,r=null,i=!1){e&&e!==ar||(e=hr);if(wr(e)){const o=Rr(e,t,!0);return n&&Vr(o,n),o}l=e,A(l)&&"__vccOpts"in l&&(e=e.__vccOpts);var l;if(t){t=Ar(t);let{class:e,style:n}=t;e&&!R(e)&&(t.class=a(e)),P(n)&&(yt(n)&&!N(n)&&(n=C({},n)),t.style=s(n))}const c=R(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:P(e)?4:A(e)?2:0;return $r(e,t,n,o,r,c,i,!0)};function Ar(e){return e?yt(e)||Tr in e?C({},e):e:null}function Rr(e,t,n=!1){const{props:o,ref:r,patchFlag:s,children:i}=e,l=t?Ir(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Nr(l),ref:t&&t.ref?n&&r?N(r)?r.concat(Er(t)):[r,Er(t)]:Er(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==fr?-1===s?16:16|s:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Rr(e.ssContent),ssFallback:e.ssFallback&&Rr(e.ssFallback),el:e.el,anchor:e.anchor}}function Fr(e=" ",t=0){return Or(dr,null,e,t)}function Pr(e){return null==e||"boolean"==typeof e?Or(hr):N(e)?Or(fr,null,e.slice()):"object"==typeof e?Mr(e):Or(dr,null,String(e))}function Mr(e){return null===e.el||e.memo?e:Rr(e)}function Vr(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if(N(t))n=16;else if("object"==typeof t){if(65&o){const n=t.default;return void(n&&(n._c&&(n._d=!1),Vr(e,n()),n._c&&(n._d=!0)))}{n=32;const o=t._;o||Tr in t?3===o&&mn&&(1===mn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=mn}}else A(t)?(t={default:t,_ctx:mn},n=32):(t=String(t),64&o?(n=16,t=[Fr(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ir(...e){const t={};for(let n=0;n!wr(e)||e.type!==hr&&!(e.type===fr&&!Lr(e.children))))?e:null}const jr=e=>e?Yr(e)?rs(e)||e.proxy:jr(e.parent):null,Ur=C(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>jr(e.parent),$root:e=>jr(e.root),$emit:e=>e.emit,$options:e=>Co(e),$forceUpdate:e=>()=>nn(e.update),$nextTick:e=>tn.bind(e.proxy),$watch:e=>Vn.bind(e)}),Hr={get({_:e},t){const{ctx:n,setupState:o,data:r,props:s,accessCache:i,type:l,appContext:c}=e;let a;if("$"!==t[0]){const l=i[t];if(void 0!==l)switch(l){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return s[t]}else{if(o!==g&&T(o,t))return i[t]=1,o[t];if(r!==g&&T(r,t))return i[t]=2,r[t];if((a=e.propsOptions[0])&&T(a,t))return i[t]=3,s[t];if(n!==g&&T(n,t))return i[t]=4,n[t];bo&&(i[t]=0)}}const u=Ur[t];let p,f;return u?("$attrs"===t&&be(e,0,t),u(e)):(p=l.__cssModules)&&(p=p[t])?p:n!==g&&T(n,t)?(i[t]=4,n[t]):(f=c.config.globalProperties,T(f,t)?f[t]:void 0)},set({_:e},t,n){const{data:o,setupState:r,ctx:s}=e;if(r!==g&&T(r,t))r[t]=n;else if(o!==g&&T(o,t))o[t]=n;else if(T(e.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:s}},i){let l;return!!n[i]||e!==g&&T(e,i)||t!==g&&T(t,i)||(l=s[0])&&T(l,i)||T(o,i)||T(Ur,i)||T(r.config.globalProperties,i)}},Dr=C({},Hr,{get(e,t){if(t!==Symbol.unscopables)return Hr.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!n(t)}),Wr=Do();let zr=0;let Kr=null;const Gr=()=>Kr||mn,qr=e=>{Kr=e,e.scope.on()},Jr=()=>{Kr&&Kr.scope.off(),Kr=null};function Yr(e){return 4&e.vnode.shapeFlag}let Zr,Qr,Xr=!1;function es(e,t,n){A(t)?e.render=t:P(t)&&(e.setupState=At(t)),ns(e,n)}function ts(e){Zr=e,Qr=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,Dr))}}function ns(e,t,n){const o=e.type;if(!e.render){if(!t&&Zr&&!o.render){const t=o.template;if(t){const{isCustomElement:n,compilerOptions:r}=e.appContext.config,{delimiters:s,compilerOptions:i}=o,l=C(C({isCustomElement:n,delimiters:s},r),i);o.render=Zr(t,l)}}e.render=o.render||y,Qr&&Qr(e)}qr(e),ve(),_o(e),ye(),Jr()}function os(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>(be(e,0,"$attrs"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}function rs(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(At(_t(e.exposed)),{get:(t,n)=>n in t?t[n]:n in Ur?Ur[n](e):void 0}))}const ss=/(?:^|[-_])(\w)/g;function is(e){return A(e)&&e.displayName||e.name}function ls(e,t,n=!1){let o=is(t);if(!o&&t.__file){const e=t.__file.match(/([^/\\]+)\.\w+$/);e&&(o=e[1])}if(!o&&e&&e.parent){const n=e=>{for(const n in e)if(e[n]===t)return n};o=n(e.components||e.parent.type.components)||n(e.appContext.components)}return o?o.replace(ss,(e=>e.toUpperCase())).replace(/[-_]/g,""):n?"App":"Anonymous"}const cs=(e,t)=>function(e,t,n=!1){let o,r;const s=A(e);return s?(o=e,r=y):(o=e.get,r=e.set),new Mt(o,r,s||!r,n)}(e,0,Xr);function as(){const e=Gr();return e.setupContext||(e.setupContext=os(e))}function us(e,t,n){const o=arguments.length;return 2===o?P(t)&&!N(t)?wr(t)?Or(e,null,[t]):Or(e,t):Or(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&wr(n)&&(n=[n]),Or(e,t,n))}const ps=Symbol("");function fs(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o0&&vr&&vr.push(e),!0}const ds="3.2.29",hs="undefined"!=typeof document?document:null,ms=hs&&hs.createElement("template"),gs={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?hs.createElementNS("http://www.w3.org/2000/svg",e):hs.createElement(e,n?{is:n}:void 0);return"select"===e&&o&&null!=o.multiple&&r.setAttribute("multiple",o.multiple),r},createText:e=>hs.createTextNode(e),createComment:e=>hs.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>hs.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o,r,s){const i=n?n.previousSibling:t.lastChild;if(r&&(r===s||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),r!==s&&(r=r.nextSibling););else{ms.innerHTML=o?`${e}`:e;const r=ms.content;if(o){const e=r.firstChild;for(;e.firstChild;)r.appendChild(e.firstChild);r.removeChild(e)}t.insertBefore(r,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const vs=/\s*!important$/;function ys(e,t,n){if(N(n))n.forEach((n=>ys(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const o=function(e,t){const n=_s[t];if(n)return n;let o=D(t);if("filter"!==o&&o in e)return _s[t]=o;o=K(o);for(let r=0;rdocument.createEvent("Event").timeStamp&&(xs=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);Cs=!!(e&&Number(e[1])<=53)}let ws=0;const ks=Promise.resolve(),Ts=()=>{ws=0};function Ns(e,t,n,o){e.addEventListener(t,n,o)}function Es(e,t,n,o,r=null){const s=e._vei||(e._vei={}),i=s[t];if(o&&i)i.value=o;else{const[n,l]=function(e){let t;if($s.test(e)){let n;for(t={};n=e.match($s);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[z(e.slice(2)),t]}(t);if(o){const i=s[t]=function(e,t){const n=e=>{const o=e.timeStamp||xs();(Cs||o>=n.attached-1)&&jt(function(e,t){if(N(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>ws||(ks.then(Ts),ws=xs()))(),n}(o,r);Ns(e,n,i,l)}else i&&(!function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,i,l),s[t]=void 0)}}const $s=/(?:Once|Passive|Capture)$/;const Os=/^on[a-z]/;function As(e,t){const n=qn(e);class o extends Fs{constructor(e){super(n,e,t)}}return o.def=n,o}const Rs="undefined"!=typeof HTMLElement?HTMLElement:class{};class Fs extends Rs{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):this.attachShadow({mode:"open"})}connectedCallback(){this._connected=!0,this._instance||this._resolveDef()}disconnectedCallback(){this._connected=!1,tn((()=>{this._connected||($i(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){if(this._resolved)return;this._resolved=!0;for(let n=0;n{for(const t of e)this._setAttr(t.attributeName)})).observe(this,{attributes:!0});const e=e=>{const{props:t,styles:n}=e,o=!N(t),r=t?o?Object.keys(t):t:[];let s;if(o)for(const i in this._props){const e=t[i];(e===Number||e&&e.type===Number)&&(this._props[i]=Z(this._props[i]),(s||(s=Object.create(null)))[i]=!0)}this._numberProps=s;for(const i of Object.keys(this))"_"!==i[0]&&this._setProp(i,this[i],!0,!1);for(const i of r.map(D))Object.defineProperty(this,i,{get(){return this._getProp(i)},set(e){this._setProp(i,e)}});this._applyStyles(n),this._update()},t=this._def.__asyncLoader;t?t().then(e):e(this._def)}_setAttr(e){let t=this.getAttribute(e);this._numberProps&&this._numberProps[e]&&(t=Z(t)),this._setProp(D(e),t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,o=!0){t!==this._props[e]&&(this._props[e]=t,o&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(z(e),""):"string"==typeof t||"number"==typeof t?this.setAttribute(z(e),t+""):t||this.removeAttribute(z(e))))}_update(){$i(this._createVNode(),this.shadowRoot)}_createVNode(){const e=Or(this._def,C({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0,e.emit=(e,...t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof Fs){e.parent=t._instance;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function Ps(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ps(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)Ms(e.el,t);else if(e.type===fr)e.children.forEach((e=>Ps(e,t)));else if(e.type===mr){let{el:n,anchor:o}=e;for(;n&&(Ms(n,t),n!==o);)n=n.nextSibling}}function Ms(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const Vs="transition",Is="animation",Bs=(e,{slots:t})=>us(Un,Ds(e),t);Bs.displayName="Transition";const Ls={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},js=Bs.props=C({},Un.props,Ls),Us=(e,t=[])=>{N(e)?e.forEach((e=>e(...t))):e&&e(...t)},Hs=e=>!!e&&(N(e)?e.some((e=>e.length>1)):e.length>1);function Ds(e){const t={};for(const C in e)C in Ls||(t[C]=e[C]);if(!1===e.css)return t;const{name:n="v",type:o,duration:r,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:a=i,appearToClass:u=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:d=`${n}-leave-to`}=e,h=function(e){if(null==e)return null;if(P(e))return[Ws(e.enter),Ws(e.leave)];{const t=Ws(e);return[t,t]}}(r),m=h&&h[0],g=h&&h[1],{onBeforeEnter:v,onEnter:y,onEnterCancelled:b,onLeave:_,onLeaveCancelled:S,onBeforeAppear:x=v,onAppear:w=y,onAppearCancelled:k=b}=t,T=(e,t,n)=>{Ks(e,t?u:l),Ks(e,t?a:i),n&&n()},N=(e,t)=>{Ks(e,d),Ks(e,f),t&&t()},E=e=>(t,n)=>{const r=e?w:y,i=()=>T(t,e,n);Us(r,[t,i]),Gs((()=>{Ks(t,e?c:s),zs(t,e?u:l),Hs(r)||Js(t,o,m,i)}))};return C(t,{onBeforeEnter(e){Us(v,[e]),zs(e,s),zs(e,i)},onBeforeAppear(e){Us(x,[e]),zs(e,c),zs(e,a)},onEnter:E(!1),onAppear:E(!0),onLeave(e,t){const n=()=>N(e,t);zs(e,p),Xs(),zs(e,f),Gs((()=>{Ks(e,p),zs(e,d),Hs(_)||Js(e,o,g,n)})),Us(_,[e,n])},onEnterCancelled(e){T(e,!1),Us(b,[e])},onAppearCancelled(e){T(e,!0),Us(k,[e])},onLeaveCancelled(e){N(e),Us(S,[e])}})}function Ws(e){return Z(e)}function zs(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function Ks(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Gs(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let qs=0;function Js(e,t,n,o){const r=e._endId=++qs,s=()=>{r===e._endId&&o()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=Ys(e,t);if(!i)return o();const a=i+"end";let u=0;const p=()=>{e.removeEventListener(a,f),s()},f=t=>{t.target===e&&++u>=c&&p()};setTimeout((()=>{u(n[e]||"").split(", "),r=o("transitionDelay"),s=o("transitionDuration"),i=Zs(r,s),l=o("animationDelay"),c=o("animationDuration"),a=Zs(l,c);let u=null,p=0,f=0;t===Vs?i>0&&(u=Vs,p=i,f=s.length):t===Is?a>0&&(u=Is,p=a,f=c.length):(p=Math.max(i,a),u=p>0?i>a?Vs:Is:null,f=u?u===Vs?s.length:c.length:0);return{type:u,timeout:p,propCount:f,hasTransform:u===Vs&&/\b(transform|all)(,|$)/.test(n.transitionProperty)}}function Zs(e,t){for(;e.lengthQs(t)+Qs(e[n]))))}function Qs(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function Xs(){return document.body.offsetHeight}const ei=new WeakMap,ti=new WeakMap,ni={name:"TransitionGroup",props:C({},js,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Gr(),o=Ln();let r,s;return po((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const o=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\s+/).forEach((e=>e&&o.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&o.classList.add(e))),o.style.display="none";const r=1===t.nodeType?t:t.parentNode;r.appendChild(o);const{hasTransform:s}=Ys(o);return r.removeChild(o),s}(r[0].el,n.vnode.el,t))return;r.forEach(oi),r.forEach(ri);const o=r.filter(si);Xs(),o.forEach((e=>{const n=e.el,o=n.style;zs(n,t),o.transform=o.webkitTransform=o.transitionDuration="";const r=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",r),n._moveCb=null,Ks(n,t))};n.addEventListener("transitionend",r)}))})),()=>{const i=bt(e),l=Ds(i);let c=i.tag||fr;r=s,s=t.default?Gn(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"];return N(t)?e=>J(t,e):t};function li(e){e.target.composing=!0}function ci(e){const t=e.target;t.composing&&(t.composing=!1,function(e,t){const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,"input"))}const ai={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=ii(r);const s=o||r.props&&"number"===r.props.type;Ns(e,t?"change":"input",(t=>{if(t.target.composing)return;let o=e.value;n?o=o.trim():s&&(o=Z(o)),e._assign(o)})),n&&Ns(e,"change",(()=>{e.value=e.value.trim()})),t||(Ns(e,"compositionstart",li),Ns(e,"compositionend",ci),Ns(e,"change",ci))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},s){if(e._assign=ii(s),e.composing)return;if(document.activeElement===e){if(n)return;if(o&&e.value.trim()===t)return;if((r||"number"===e.type)&&Z(e.value)===t)return}const i=null==t?"":t;e.value!==i&&(e.value=i)}},ui={deep:!0,created(e,t,n){e._assign=ii(n),Ns(e,"change",(()=>{const t=e._modelValue,n=mi(e),o=e.checked,r=e._assign;if(N(t)){const e=h(t,n),s=-1!==e;if(o&&!s)r(t.concat(n));else if(!o&&s){const n=[...t];n.splice(e,1),r(n)}}else if($(t)){const e=new Set(t);o?e.add(n):e.delete(n),r(e)}else r(gi(e,o))}))},mounted:pi,beforeUpdate(e,t,n){e._assign=ii(n),pi(e,t,n)}};function pi(e,{value:t,oldValue:n},o){e._modelValue=t,N(t)?e.checked=h(t,o.props.value)>-1:$(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=d(t,gi(e,!0)))}const fi={created(e,{value:t},n){e.checked=d(t,n.props.value),e._assign=ii(n),Ns(e,"change",(()=>{e._assign(mi(e))}))},beforeUpdate(e,{value:t,oldValue:n},o){e._assign=ii(o),t!==n&&(e.checked=d(t,o.props.value))}},di={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const r=$(t);Ns(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?Z(mi(e)):mi(e)));e._assign(e.multiple?r?new Set(t):t:t[0])})),e._assign=ii(o)},mounted(e,{value:t}){hi(e,t)},beforeUpdate(e,t,n){e._assign=ii(n)},updated(e,{value:t}){hi(e,t)}};function hi(e,t){const n=e.multiple;if(!n||N(t)||$(t)){for(let o=0,r=e.options.length;o-1:t.has(s);else if(d(mi(r),t))return void(e.selectedIndex!==o&&(e.selectedIndex=o))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function mi(e){return"_value"in e?e._value:e.value}function gi(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const vi={created(e,t,n){yi(e,t,n,null,"created")},mounted(e,t,n){yi(e,t,n,null,"mounted")},beforeUpdate(e,t,n,o){yi(e,t,n,o,"beforeUpdate")},updated(e,t,n,o){yi(e,t,n,o,"updated")}};function yi(e,t,n,o,r){let s;switch(e.tagName){case"SELECT":s=di;break;case"TEXTAREA":s=ai;break;default:switch(n.props&&n.props.type){case"checkbox":s=ui;break;case"radio":s=fi;break;default:s=ai}}const i=s[r];i&&i(e,t,n,o)}const bi=["ctrl","shift","alt","meta"],_i={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>bi.some((n=>e[`${n}Key`]&&!t.includes(n)))},Si={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},xi={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):Ci(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),Ci(e,!0),o.enter(e)):o.leave(e,(()=>{Ci(e,!1)})):Ci(e,t))},beforeUnmount(e,{value:t}){Ci(e,t)}};function Ci(e,t){e.style.display=t?e._vod:"none"}const wi=C({patchProp:(e,t,n,s,i=!1,l,c,a,u)=>{"class"===t?function(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,s,i):"style"===t?function(e,t,n){const o=e.style,r=R(n);if(n&&!r){for(const e in n)ys(o,e,n[e]);if(t&&!R(t))for(const e in t)null==n[e]&&ys(o,e,"")}else{const s=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=s)}}(e,n,s):S(t)?x(t)||Es(e,t,0,s,c):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,o){if(o)return"innerHTML"===t||"textContent"===t||!!(t in e&&Os.test(t)&&A(n));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(Os.test(t)&&R(n))return!1;return t in e}(e,t,s,i))?function(e,t,n,o,s,i,l){if("innerHTML"===t||"textContent"===t)return o&&l(o,s,i),void(e[t]=null==n?"":n);if("value"===t&&"PROGRESS"!==e.tagName&&!e.tagName.includes("-")){e._value=n;const o=null==n?"":n;return e.value===o&&"OPTION"!==e.tagName||(e.value=o),void(null==n&&e.removeAttribute(t))}if(""===n||null==n){const o=typeof e[t];if("boolean"===o)return void(e[t]=r(n));if(null==n&&"string"===o)return e[t]="",void e.removeAttribute(t);if("number"===o){try{e[t]=0}catch(c){}return void e.removeAttribute(t)}}try{e[t]=n}catch(a){}}(e,t,s,l,c,a,u):("true-value"===t?e._trueValue=s:"false-value"===t&&(e._falseValue=s),function(e,t,n,s,i){if(s&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(Ss,t.slice(6,t.length)):e.setAttributeNS(Ss,t,n);else{const s=o(t);null==n||s&&!r(n)?e.removeAttribute(t):e.setAttribute(t,s?"":n)}}(e,t,s,i))}},gs);let ki,Ti=!1;function Ni(){return ki||(ki=Qo(wi))}function Ei(){return ki=Ti?ki:Xo(wi),Ti=!0,ki}const $i=(...e)=>{Ni().render(...e)},Oi=(...e)=>{Ei().hydrate(...e)};function Ai(e){if(R(e)){return document.querySelector(e)}return e}const Ri=y;function Fi(e){throw e}function Pi(e){}function Mi(e,t,n,o){const r=new SyntaxError(String(e));return r.code=e,r.loc=t,r}const Vi=Symbol(""),Ii=Symbol(""),Bi=Symbol(""),Li=Symbol(""),ji=Symbol(""),Ui=Symbol(""),Hi=Symbol(""),Di=Symbol(""),Wi=Symbol(""),zi=Symbol(""),Ki=Symbol(""),Gi=Symbol(""),qi=Symbol(""),Ji=Symbol(""),Yi=Symbol(""),Zi=Symbol(""),Qi=Symbol(""),Xi=Symbol(""),el=Symbol(""),tl=Symbol(""),nl=Symbol(""),ol=Symbol(""),rl=Symbol(""),sl=Symbol(""),il=Symbol(""),ll=Symbol(""),cl=Symbol(""),al=Symbol(""),ul=Symbol(""),pl=Symbol(""),fl=Symbol(""),dl=Symbol(""),hl=Symbol(""),ml=Symbol(""),gl=Symbol(""),vl=Symbol(""),yl=Symbol(""),bl=Symbol(""),_l=Symbol(""),Sl={[Vi]:"Fragment",[Ii]:"Teleport",[Bi]:"Suspense",[Li]:"KeepAlive",[ji]:"BaseTransition",[Ui]:"openBlock",[Hi]:"createBlock",[Di]:"createElementBlock",[Wi]:"createVNode",[zi]:"createElementVNode",[Ki]:"createCommentVNode",[Gi]:"createTextVNode",[qi]:"createStaticVNode",[Ji]:"resolveComponent",[Yi]:"resolveDynamicComponent",[Zi]:"resolveDirective",[Qi]:"resolveFilter",[Xi]:"withDirectives",[el]:"renderList",[tl]:"renderSlot",[nl]:"createSlots",[ol]:"toDisplayString",[rl]:"mergeProps",[sl]:"normalizeClass",[il]:"normalizeStyle",[ll]:"normalizeProps",[cl]:"guardReactiveProps",[al]:"toHandlers",[ul]:"camelize",[pl]:"capitalize",[fl]:"toHandlerKey",[dl]:"setBlockTracking",[hl]:"pushScopeId",[ml]:"popScopeId",[gl]:"withCtx",[vl]:"unref",[yl]:"isRef",[bl]:"withMemo",[_l]:"isMemoSame"};const xl={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function Cl(e,t,n,o,r,s,i,l=!1,c=!1,a=!1,u=xl){return e&&(l?(e.helper(Ui),e.helper(Ql(e.inSSR,a))):e.helper(Zl(e.inSSR,a)),i&&e.helper(Xi)),{type:13,tag:t,props:n,children:o,patchFlag:r,dynamicProps:s,directives:i,isBlock:l,disableTracking:c,isComponent:a,loc:u}}function wl(e,t=xl){return{type:17,loc:t,elements:e}}function kl(e,t=xl){return{type:15,loc:t,properties:e}}function Tl(e,t){return{type:16,loc:xl,key:R(e)?Nl(e,!0):e,value:t}}function Nl(e,t=!1,n=xl,o=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:o}}function El(e,t=xl){return{type:8,loc:t,children:e}}function $l(e,t=[],n=xl){return{type:14,loc:n,callee:e,arguments:t}}function Ol(e,t,n=!1,o=!1,r=xl){return{type:18,params:e,returns:t,newline:n,isSlot:o,loc:r}}function Al(e,t,n,o=!0){return{type:19,test:e,consequent:t,alternate:n,newline:o,loc:xl}}const Rl=e=>4===e.type&&e.isStatic,Fl=(e,t)=>e===t||e===z(t);function Pl(e){return Fl(e,"Teleport")?Ii:Fl(e,"Suspense")?Bi:Fl(e,"KeepAlive")?Li:Fl(e,"BaseTransition")?ji:void 0}const Ml=/^\d|[^\$\w]/,Vl=e=>!Ml.test(e),Il=/[A-Za-z_$\xA0-\uFFFF]/,Bl=/[\.\?\w$\xA0-\uFFFF]/,Ll=/\s+[.[]\s*|\s*[.[]\s+/g,jl=e=>{e=e.trim().replace(Ll,(e=>e.trim()));let t=0,n=[],o=0,r=0,s=null;for(let i=0;i4===e.key.type&&e.key.content===n))}e||s.properties.unshift(t),o=s}else o=$l(n.helper(rl),[kl([t]),s]),r&&r.callee===cl&&(r=i[i.length-2]);13===e.type?r?r.arguments[0]=o:e.props=o:r?r.arguments[0]=o:e.arguments[2]=o}function nc(e,t){return`_${t}_${e.replace(/[^\w]/g,((t,n)=>"-"===t?"_":e.charCodeAt(n).toString()))}`}function oc(e,{helper:t,removeHelper:n,inSSR:o}){e.isBlock||(e.isBlock=!0,n(Zl(o,e.isComponent)),t(Ui),t(Ql(o,e.isComponent)))}const rc=/&(gt|lt|amp|apos|quot);/g,sc={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},ic={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:b,isPreTag:b,isCustomElement:b,decodeEntities:e=>e.replace(rc,((e,t)=>sc[t])),onError:Fi,onWarn:Pi,comments:!1};function lc(e,t={}){const n=function(e,t){const n=C({},ic);let o;for(o in t)n[o]=void 0===t[o]?ic[o]:t[o];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),o=Sc(n);return function(e,t=xl){return{type:0,children:e,helpers:[],components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(cc(n,0,[]),xc(n,o))}function cc(e,t,n){const o=Cc(n),r=o?o.ns:0,s=[];for(;!Ec(e,t,n);){const i=e.source;let l;if(0===t||1===t)if(!e.inVPre&&wc(i,e.options.delimiters[0]))l=yc(e,t);else if(0===t&&"<"===i[0])if(1===i.length);else if("!"===i[1])l=wc(i,"\x3c!--")?pc(e):wc(i,""===i[2]){kc(e,3);continue}if(/[a-z]/i.test(i[2])){mc(e,1,o);continue}l=fc(e)}else/[a-z]/i.test(i[1])?l=dc(e,n):"?"===i[1]&&(l=fc(e));if(l||(l=bc(e,t)),N(l))for(let e=0;e/.exec(e.source);if(o){n=e.source.slice(4,o.index);const t=e.source.slice(0,o.index);let r=1,s=0;for(;-1!==(s=t.indexOf("\x3c!--",r));)kc(e,s-r+1),r=s+1;kc(e,o.index+o[0].length-r+1)}else n=e.source.slice(4),kc(e,e.source.length);return{type:3,content:n,loc:xc(e,t)}}function fc(e){const t=Sc(e),n="?"===e.source[1]?1:2;let o;const r=e.source.indexOf(">");return-1===r?(o=e.source.slice(n),kc(e,e.source.length)):(o=e.source.slice(n,r),kc(e,r+1)),{type:3,content:o,loc:xc(e,t)}}function dc(e,t){const n=e.inPre,o=e.inVPre,r=Cc(t),s=mc(e,0,r),i=e.inPre&&!n,l=e.inVPre&&!o;if(s.isSelfClosing||e.options.isVoidTag(s.tag))return i&&(e.inPre=!1),l&&(e.inVPre=!1),s;t.push(s);const c=e.options.getTextMode(s,r),a=cc(e,c,t);if(t.pop(),s.children=a,$c(e.source,s.tag))mc(e,1,r);else if(0===e.source.length&&"script"===s.tag.toLowerCase()){const e=a[0];e&&wc(e.loc.source,"\x3c!--")}return s.loc=xc(e,s.loc.start),i&&(e.inPre=!1),l&&(e.inVPre=!1),s}const hc=t("if,else,else-if,for,slot");function mc(e,t,n){const o=Sc(e),r=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),s=r[1],i=e.options.getNamespace(s,n);kc(e,r[0].length),Tc(e);const l=Sc(e),c=e.source;e.options.isPreTag(s)&&(e.inPre=!0);let a=gc(e,t);0===t&&!e.inVPre&&a.some((e=>7===e.type&&"pre"===e.name))&&(e.inVPre=!0,C(e,l),e.source=c,a=gc(e,t).filter((e=>"v-pre"!==e.name)));let u=!1;if(0===e.source.length||(u=wc(e.source,"/>"),kc(e,u?2:1)),1===t)return;let p=0;return e.inVPre||("slot"===s?p=2:"template"===s?a.some((e=>7===e.type&&hc(e.name)))&&(p=3):function(e,t,n){const o=n.options;if(o.isCustomElement(e))return!1;if("component"===e||/^[A-Z]/.test(e)||Pl(e)||o.isBuiltInComponent&&o.isBuiltInComponent(e)||o.isNativeTag&&!o.isNativeTag(e))return!0;for(let r=0;r0&&!wc(e.source,">")&&!wc(e.source,"/>");){if(wc(e.source,"/")){kc(e,1),Tc(e);continue}const r=vc(e,o);6===r.type&&r.value&&"class"===r.name&&(r.value.content=r.value.content.replace(/\s+/g," ").trim()),0===t&&n.push(r),/^[^\t\r\n\f />]/.test(e.source),Tc(e)}return n}function vc(e,t){const n=Sc(e),o=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(o),t.add(o);{const e=/["'<]/g;let t;for(;t=e.exec(o););}let r;kc(e,o.length),/^[\t\r\n\f ]*=/.test(e.source)&&(Tc(e),kc(e,1),Tc(e),r=function(e){const t=Sc(e);let n;const o=e.source[0],r='"'===o||"'"===o;if(r){kc(e,1);const t=e.source.indexOf(o);-1===t?n=_c(e,e.source.length,4):(n=_c(e,t,4),kc(e,1))}else{const t=/^[^\t\r\n\f >]+/.exec(e.source);if(!t)return;const o=/["'<=`]/g;let r;for(;r=o.exec(t[0]););n=_c(e,t[0].length,4)}return{content:n,isQuoted:r,loc:xc(e,t)}}(e));const s=xc(e,n);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(o)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(o);let i,l=wc(o,"."),c=t[1]||(l||wc(o,":")?"bind":wc(o,"@")?"on":"slot");if(t[2]){const r="slot"===c,s=o.lastIndexOf(t[2]),l=xc(e,Nc(e,n,s),Nc(e,n,s+t[2].length+(r&&t[3]||"").length));let a=t[2],u=!0;a.startsWith("[")?(u=!1,a=a.endsWith("]")?a.slice(1,a.length-1):a.slice(1)):r&&(a+=t[3]||""),i={type:4,content:a,isStatic:u,constType:u?3:0,loc:l}}if(r&&r.isQuoted){const e=r.loc;e.start.offset++,e.start.column++,e.end=Hl(e.start,r.content),e.source=e.source.slice(1,-1)}const a=t[3]?t[3].slice(1).split("."):[];return l&&a.push("prop"),{type:7,name:c,exp:r&&{type:4,content:r.content,isStatic:!1,constType:0,loc:r.loc},arg:i,modifiers:a,loc:s}}return!e.inVPre&&wc(o,"v-"),{type:6,name:o,value:r&&{type:2,content:r.content,loc:r.loc},loc:s}}function yc(e,t){const[n,o]=e.options.delimiters,r=e.source.indexOf(o,n.length);if(-1===r)return;const s=Sc(e);kc(e,n.length);const i=Sc(e),l=Sc(e),c=r-n.length,a=e.source.slice(0,c),u=_c(e,c,t),p=u.trim(),f=u.indexOf(p);f>0&&Dl(i,a,f);return Dl(l,a,c-(u.length-p.length-f)),kc(e,o.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:p,loc:xc(e,i,l)},loc:xc(e,s)}}function bc(e,t){const n=3===t?["]]>"]:["<",e.options.delimiters[0]];let o=e.source.length;for(let s=0;st&&(o=t)}const r=Sc(e);return{type:2,content:_c(e,o,t),loc:xc(e,r)}}function _c(e,t,n){const o=e.source.slice(0,t);return kc(e,t),2!==n&&3!==n&&o.includes("&")?e.options.decodeEntities(o,4===n):o}function Sc(e){const{column:t,line:n,offset:o}=e;return{column:t,line:n,offset:o}}function xc(e,t,n){return{start:t,end:n=n||Sc(e),source:e.originalSource.slice(t.offset,n.offset)}}function Cc(e){return e[e.length-1]}function wc(e,t){return e.startsWith(t)}function kc(e,t){const{source:n}=e;Dl(e,n,t),e.source=n.slice(t)}function Tc(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&kc(e,t[0].length)}function Nc(e,t,n){return Hl(t,e.originalSource.slice(t.offset,n),n)}function Ec(e,t,n){const o=e.source;switch(t){case 0:if(wc(o,"=0;--e)if($c(o,n[e].tag))return!0;break;case 1:case 2:{const e=Cc(n);if(e&&$c(o,e.tag))return!0;break}case 3:if(wc(o,"]]>"))return!0}return!o}function $c(e,t){return wc(e,"]/.test(e[2+t.length]||">")}function Oc(e,t){Rc(e,t,Ac(e,e.children[0]))}function Ac(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!Yl(t)}function Rc(e,t,n=!1){const{children:o}=e,r=o.length;let s=0;for(let i=0;i0){if(o>=2){e.codegenNode.patchFlag="-1",e.codegenNode=t.hoist(e.codegenNode),s++;continue}}else{const n=e.codegenNode;if(13===n.type){const o=Bc(n);if((!o||512===o||1===o)&&Vc(e,t)>=2){const o=Ic(e);o&&(n.props=t.hoist(o))}n.dynamicProps&&(n.dynamicProps=t.hoist(n.dynamicProps))}}}else 12===e.type&&Fc(e.content,t)>=2&&(e.codegenNode=t.hoist(e.codegenNode),s++);if(1===e.type){const n=1===e.tagType;n&&t.scopes.vSlot++,Rc(e,t),n&&t.scopes.vSlot--}else if(11===e.type)Rc(e,t,1===e.children.length);else if(9===e.type)for(let n=0;n1)for(let r=0;r`_${Sl[k.helper(e)]}`,replaceNode(e){k.parent.children[k.childIndex]=k.currentNode=e},removeNode(e){const t=e?k.parent.children.indexOf(e):k.currentNode?k.childIndex:-1;e&&e!==k.currentNode?k.childIndex>t&&(k.childIndex--,k.onNodeRemoved()):(k.currentNode=null,k.onNodeRemoved()),k.parent.children.splice(t,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){R(e)&&(e=Nl(e)),k.hoists.push(e);const t=Nl(`_hoisted_${k.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:xl}}(k.cached++,e,t)};return k}function jc(e,t){const n=Lc(e,t);Uc(e,n),t.hoistStatic&&Oc(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:o}=e;if(1===o.length){const n=o[0];if(Ac(e,n)&&n.codegenNode){const o=n.codegenNode;13===o.type&&oc(o,t),e.codegenNode=o}else e.codegenNode=n}else if(o.length>1){let o=64;e.codegenNode=Cl(t,n(Vi),void 0,e.children,o+"",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=[...n.helpers.keys()],e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached}function Uc(e,t){t.currentNode=e;const{nodeTransforms:n}=t,o=[];for(let s=0;s{n--};for(;nt===e:t=>e.test(t);return(e,o)=>{if(1===e.type){const{props:r}=e;if(3===e.tagType&&r.some(ql))return;const s=[];for(let i=0;i`_${Sl[e]}`,push(e,t){d.code+=e},indent(){h(++d.indentLevel)},deindent(e=!1){e?--d.indentLevel:h(--d.indentLevel)},newline(){h(d.indentLevel)}};function h(e){d.push("\n"+" ".repeat(e))}return d}(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:o,push:r,prefixIdentifiers:s,indent:i,deindent:l,newline:c,ssr:a}=n,u=e.helpers.length>0,p=!s&&"module"!==o;!function(e,t){const{push:n,newline:o,runtimeGlobalName:r}=t,s=r,i=e=>`${Sl[e]}: _${Sl[e]}`;if(e.helpers.length>0&&(n(`const _Vue = ${s}\n`),e.hoists.length)){n(`const { ${[Wi,zi,Ki,Gi,qi].filter((t=>e.helpers.includes(t))).map(i).join(", ")} } = _Vue\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:o}=t;o();for(let r=0;r`${Sl[e]}: _${Sl[e]}`)).join(", ")} } = _Vue`),r("\n"),c())),e.components.length&&(zc(e.components,"component",n),(e.directives.length||e.temps>0)&&c()),e.directives.length&&(zc(e.directives,"directive",n),e.temps>0&&c()),e.temps>0){r("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(r("\n"),c()),a||r("return "),e.codegenNode?qc(e.codegenNode,n):r("null"),p&&(l(),r("}")),l(),r("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function zc(e,t,{helper:n,push:o,newline:r,isTS:s}){const i=n("component"===t?Ji:Zi);for(let l=0;l3||!1;t.push("["),n&&t.indent(),Gc(e,t,n),n&&t.deindent(),t.push("]")}function Gc(e,t,n=!1,o=!0){const{push:r,newline:s}=t;for(let i=0;ie||"null"))}([s,i,l,c,a]),t),n(")"),p&&n(")");u&&(n(", "),qc(u,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:o,pure:r}=t,s=R(e.callee)?e.callee:o(e.callee);r&&n(Dc);n(s+"(",e),Gc(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:o,deindent:r,newline:s}=t,{properties:i}=e;if(!i.length)return void n("{}",e);const l=i.length>1||!1;n(l?"{":"{ "),l&&o();for(let c=0;c "),(c||l)&&(n("{"),o());i?(c&&n("return "),N(i)?Kc(i,t):qc(i,t)):l&&qc(l,t);(c||l)&&(r(),n("}"));a&&n(")")}(e,t);break;case 19:!function(e,t){const{test:n,consequent:o,alternate:r,newline:s}=e,{push:i,indent:l,deindent:c,newline:a}=t;if(4===n.type){const e=!Vl(n.content);e&&i("("),Jc(n,t),e&&i(")")}else i("("),qc(n,t),i(")");s&&l(),t.indentLevel++,s||i(" "),i("? "),qc(o,t),t.indentLevel--,s&&a(),s||i(" "),i(": ");const u=19===r.type;u||t.indentLevel++;qc(r,t),u||t.indentLevel--;s&&c(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:o,indent:r,deindent:s,newline:i}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(r(),n(`${o(dl)}(-1),`),i());n(`_cache[${e.index}] = `),qc(e.value,t),e.isVNode&&(n(","),i(),n(`${o(dl)}(1),`),i(),n(`_cache[${e.index}]`),s());n(")")}(e,t);break;case 21:Gc(e.body,t,!0,!1)}}function Jc(e,t){const{content:n,isStatic:o}=e;t.push(o?JSON.stringify(n):n,e)}function Yc(e,t){for(let n=0;nfunction(e,t,n,o){if(!("else"===t.name||t.exp&&t.exp.content.trim())){t.exp=Nl("true",!1,t.exp?t.exp.loc:e.loc)}if("if"===t.name){const r=Xc(e,t),s={type:9,loc:e.loc,branches:[r]};if(n.replaceNode(s),o)return o(s,r,!0)}else{const r=n.parent.children;let s=r.indexOf(e);for(;s-- >=-1;){const i=r[s];if(!i||2!==i.type||i.content.trim().length){if(i&&9===i.type){n.removeNode();const r=Xc(e,t);i.branches.push(r);const s=o&&o(i,r,!1);Uc(r,n),s&&s(),n.currentNode=null}break}n.removeNode(i)}}}(e,t,n,((e,t,o)=>{const r=n.parent.children;let s=r.indexOf(e),i=0;for(;s-- >=0;){const e=r[s];e&&9===e.type&&(i+=e.branches.length)}return()=>{if(o)e.codegenNode=ea(t,i,n);else{const o=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);o.alternate=ea(t,i+e.branches.length-1,n)}}}))));function Xc(e,t){return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:3!==e.tagType||Wl(e,"for")?[e]:e.children,userKey:zl(e,"key")}}function ea(e,t,n){return e.condition?Al(e.condition,ta(e,t,n),$l(n.helper(Ki),['""',"true"])):ta(e,t,n)}function ta(e,t,n){const{helper:o}=n,r=Tl("key",Nl(`${t}`,!1,xl,2)),{children:s}=e,i=s[0];if(1!==s.length||1!==i.type){if(1===s.length&&11===i.type){const e=i.codegenNode;return tc(e,r,n),e}{let t=64;return Cl(n,o(Vi),kl([r]),s,t+"",void 0,void 0,!0,!1,!1,e.loc)}}{const e=i.codegenNode,t=14===(l=e).type&&l.callee===bl?l.arguments[1].returns:l;return 13===t.type&&oc(t,n),tc(t,r,n),e}var l}const na=Hc("for",((e,t,n)=>{const{helper:o,removeHelper:r}=n;return function(e,t,n,o){if(!t.exp)return;const r=ia(t.exp);if(!r)return;const{scopes:s}=n,{source:i,value:l,key:c,index:a}=r,u={type:11,loc:t.loc,source:i,valueAlias:l,keyAlias:c,objectIndexAlias:a,parseResult:r,children:Jl(e)?e.children:[e]};n.replaceNode(u),s.vFor++;const p=o&&o(u);return()=>{s.vFor--,p&&p()}}(e,t,n,(t=>{const s=$l(o(el),[t.source]),i=Jl(e),l=Wl(e,"memo"),c=zl(e,"key"),a=c&&(6===c.type?Nl(c.value.content,!0):c.exp),u=c?Tl("key",a):null,p=4===t.source.type&&t.source.constType>0,f=p?64:c?128:256;return t.codegenNode=Cl(n,o(Vi),void 0,s,f+"",void 0,void 0,!0,!p,!1,e.loc),()=>{let c;const{children:f}=t,d=1!==f.length||1!==f[0].type,h=Yl(e)?e:i&&1===e.children.length&&Yl(e.children[0])?e.children[0]:null;if(h?(c=h.codegenNode,i&&u&&tc(c,u,n)):d?c=Cl(n,o(Vi),u?kl([u]):void 0,e.children,"64",void 0,void 0,!0,void 0,!1):(c=f[0].codegenNode,i&&u&&tc(c,u,n),c.isBlock!==!p&&(c.isBlock?(r(Ui),r(Ql(n.inSSR,c.isComponent))):r(Zl(n.inSSR,c.isComponent))),c.isBlock=!p,c.isBlock?(o(Ui),o(Ql(n.inSSR,c.isComponent))):o(Zl(n.inSSR,c.isComponent))),l){const e=Ol(ca(t.parseResult,[Nl("_cached")]));e.body={type:21,body:[El(["const _memo = (",l.exp,")"]),El(["if (_cached",...a?[" && _cached.key === ",a]:[],` && ${n.helperString(_l)}(_cached, _memo)) return _cached`]),El(["const _item = ",c]),Nl("_item.memo = _memo"),Nl("return _item")],loc:xl},s.arguments.push(e,Nl("_cache"),Nl(String(n.cached++)))}else s.arguments.push(Ol(ca(t.parseResult),c,!0))}}))}));const oa=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ra=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,sa=/^\(|\)$/g;function ia(e,t){const n=e.loc,o=e.content,r=o.match(oa);if(!r)return;const[,s,i]=r,l={source:la(n,i.trim(),o.indexOf(i,s.length)),value:void 0,key:void 0,index:void 0};let c=s.trim().replace(sa,"").trim();const a=s.indexOf(c),u=c.match(ra);if(u){c=c.replace(ra,"").trim();const e=u[1].trim();let t;if(e&&(t=o.indexOf(e,a+c.length),l.key=la(n,e,t)),u[2]){const r=u[2].trim();r&&(l.index=la(n,r,o.indexOf(r,l.key?t+e.length:a+c.length)))}}return c&&(l.value=la(n,c,a)),l}function la(e,t,n){return Nl(t,!1,Ul(e,n,t.length))}function ca({value:e,key:t,index:n},o=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||Nl("_".repeat(t+1),!1)))}([e,t,n,...o])}const aa=Nl("undefined",!1),ua=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=Wl(e,"slot");if(n)return t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},pa=(e,t,n)=>Ol(e,t,!1,!0,t.length?t[0].loc:n);function fa(e,t,n=pa){t.helper(gl);const{children:o,loc:r}=e,s=[],i=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const c=Wl(e,"slot",!0);if(c){const{arg:e,exp:t}=c;e&&!Rl(e)&&(l=!0),s.push(Tl(e||Nl("default",!0),n(t,o,r)))}let a=!1,u=!1;const p=[],f=new Set;for(let m=0;mTl("default",n(e,t,r));a?p.length&&p.some((e=>ma(e)))&&(u||s.push(e(void 0,p))):s.push(e(void 0,o))}const d=l?2:ha(e.children)?3:1;let h=kl(s.concat(Tl("_",Nl(d+"",!1))),r);return i.length&&(h=$l(t.helper(nl),[h,wl(i)])),{slots:h,hasDynamicSlots:l}}function da(e,t){return kl([Tl("name",e),Tl("fn",t)])}function ha(e){for(let t=0;tfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:o}=e,r=1===e.tagType;let s=r?function(e,t,n=!1){let{tag:o}=e;const r=Sa(o),s=zl(e,"is");if(s)if(r){const e=6===s.type?s.value&&Nl(s.value.content,!0):s.exp;if(e)return $l(t.helper(Yi),[e])}else 6===s.type&&s.value.content.startsWith("vue:")&&(o=s.value.content.slice(4));const i=!r&&Wl(e,"is");if(i&&i.exp)return $l(t.helper(Yi),[i.exp]);const l=Pl(o)||t.isBuiltInComponent(o);if(l)return n||t.helper(l),l;return t.helper(Ji),t.components.add(o),nc(o,"component")}(e,t):`"${n}"`;let i,l,c,a,u,p,f=0,d=P(s)&&s.callee===Yi||s===Ii||s===Bi||!r&&("svg"===n||"foreignObject"===n);if(o.length>0){const n=ya(e,t);i=n.props,f=n.patchFlag,u=n.dynamicPropNames;const o=n.directives;p=o&&o.length?wl(o.map((e=>function(e,t){const n=[],o=ga.get(e);o?n.push(t.helperString(o)):(t.helper(Zi),t.directives.add(e.name),n.push(nc(e.name,"directive")));const{loc:r}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=Nl("true",!1,r);n.push(kl(e.modifiers.map((e=>Tl(e,t))),r))}return wl(n,e.loc)}(e,t)))):void 0,n.shouldUseBlock&&(d=!0)}if(e.children.length>0){s===Li&&(d=!0,f|=1024);if(r&&s!==Ii&&s!==Li){const{slots:n,hasDynamicSlots:o}=fa(e,t);l=n,o&&(f|=1024)}else if(1===e.children.length&&s!==Ii){const n=e.children[0],o=n.type,r=5===o||8===o;r&&0===Fc(n,t)&&(f|=1),l=r||2===o?n:e.children}else l=e.children}0!==f&&(c=String(f),u&&u.length&&(a=function(e){let t="[";for(let n=0,o=e.length;n0;let f=!1,d=0,h=!1,m=!1,g=!1,v=!1,y=!1,b=!1;const _=[],x=({key:e,value:n})=>{if(Rl(e)){const o=e.content,r=S(o);if(l||!r||"onclick"===o.toLowerCase()||"onUpdate:modelValue"===o||j(o)||(v=!0),r&&j(o)&&(b=!0),20===n.type||(4===n.type||8===n.type)&&Fc(n,t)>0)return;"ref"===o?h=!0:"class"===o?m=!0:"style"===o?g=!0:"key"===o||_.includes(o)||_.push(o),!l||"class"!==o&&"style"!==o||_.includes(o)||_.push(o)}else y=!0};for(let S=0;S0&&c.push(Tl(Nl("ref_for",!0),Nl("true")))),"is"===n&&(Sa(r)||o&&o.content.startsWith("vue:")))continue;c.push(Tl(Nl(n,!0,Ul(e,0,n.length)),Nl(o?o.content:"",s,o?o.loc:e)))}else{const{name:n,arg:l,exp:d,loc:h}=i,m="bind"===n,g="on"===n;if("slot"===n)continue;if("once"===n||"memo"===n)continue;if("is"===n||m&&Kl(l,"is")&&Sa(r))continue;if(g&&o)continue;if((m&&Kl(l,"key")||g&&p&&Kl(l,"vue:before-update"))&&(f=!0),m&&Kl(l,"ref")&&t.scopes.vFor>0&&c.push(Tl(Nl("ref_for",!0),Nl("true"))),!l&&(m||g)){y=!0,d&&(c.length&&(a.push(kl(ba(c),s)),c=[]),a.push(m?d:{type:14,loc:h,callee:t.helper(al),arguments:[d]}));continue}const v=t.directiveTransforms[n];if(v){const{props:n,needRuntime:r}=v(i,e,t);!o&&n.forEach(x),c.push(...n),r&&(u.push(i),F(r)&&ga.set(i,r))}else u.push(i),p&&(f=!0)}}let C;if(a.length?(c.length&&a.push(kl(ba(c),s)),C=a.length>1?$l(t.helper(rl),a,s):a[0]):c.length&&(C=kl(ba(c),s)),y?d|=16:(m&&!l&&(d|=2),g&&!l&&(d|=4),_.length&&(d|=8),v&&(d|=32)),f||0!==d&&32!==d||!(h||b||u.length>0)||(d|=512),!t.inSSR&&C)switch(C.type){case 15:let e=-1,n=-1,o=!1;for(let t=0;t{if(Yl(e)){const{children:n,loc:o}=e,{slotName:r,slotProps:s}=function(e,t){let n,o='"default"';const r=[];for(let s=0;s0){const{props:o,directives:s}=ya(e,t,r);n=o}return{slotName:o,slotProps:n}}(e,t),i=[t.prefixIdentifiers?"_ctx.$slots":"$slots",r,"{}","undefined","true"];let l=2;s&&(i[2]=s,l=3),n.length&&(i[3]=Ol([],n,!1,!1,o),l=4),t.scopeId&&!t.slotted&&(l=5),i.splice(l),e.codegenNode=$l(t.helper(tl),i,o)}};const Ca=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,wa=(e,t,n,o)=>{const{loc:r,modifiers:s,arg:i}=e;let l;if(4===i.type)if(i.isStatic){let e=i.content;e.startsWith("vue:")&&(e=`vnode-${e.slice(4)}`),l=Nl(G(D(e)),!0,i.loc)}else l=El([`${n.helperString(fl)}(`,i,")"]);else l=i,l.children.unshift(`${n.helperString(fl)}(`),l.children.push(")");let c=e.exp;c&&!c.content.trim()&&(c=void 0);let a=n.cacheHandlers&&!c&&!n.inVOnce;if(c){const e=jl(c.content),t=!(e||Ca.test(c.content)),n=c.content.includes(";");(t||a&&e)&&(c=El([`${t?"$event":"(...args)"} => ${n?"{":"("}`,c,n?"}":")"]))}let u={props:[Tl(l,c||Nl("() => {}",!1,r))]};return o&&(u=o(u)),a&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach((e=>e.key.isHandlerKey=!0)),u},ka=(e,t,n)=>{const{exp:o,modifiers:r,loc:s}=e,i=e.arg;return 4!==i.type?(i.children.unshift("("),i.children.push(') || ""')):i.isStatic||(i.content=`${i.content} || ""`),r.includes("camel")&&(4===i.type?i.content=i.isStatic?D(i.content):`${n.helperString(ul)}(${i.content})`:(i.children.unshift(`${n.helperString(ul)}(`),i.children.push(")"))),n.inSSR||(r.includes("prop")&&Ta(i,"."),r.includes("attr")&&Ta(i,"^")),!o||4===o.type&&!o.content.trim()?{props:[Tl(i,Nl("",!0,s))]}:{props:[Tl(i,o)]}},Ta=(e,t)=>{4===e.type?e.content=e.isStatic?t+e.content:`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},Na=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let o,r=!1;for(let e=0;e7===e.type&&!t.directiveTransforms[e.name])))))for(let e=0;e{if(1===e.type&&Wl(e,"once",!0)){if(Ea.has(e)||t.inVOnce)return;return Ea.add(e),t.inVOnce=!0,t.helper(dl),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},Oa=(e,t,n)=>{const{exp:o,arg:r}=e;if(!o)return Aa();const s=o.loc.source,i=4===o.type?o.content:s;if(!i.trim()||!jl(i))return Aa();const l=r||Nl("modelValue",!0),c=r?Rl(r)?`onUpdate:${r.content}`:El(['"onUpdate:" + ',r]):"onUpdate:modelValue";let a;a=El([`${n.isTS?"($event: any)":"$event"} => ((`,o,") = $event)"]);const u=[Tl(l,e.exp),Tl(c,a)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(Vl(e)?e:JSON.stringify(e))+": true")).join(", "),n=r?Rl(r)?`${r.content}Modifiers`:El([r,' + "Modifiers"']):"modelModifiers";u.push(Tl(n,Nl(`{ ${t} }`,!1,e.loc,2)))}return Aa(u)};function Aa(e=[]){return{props:e}}const Ra=new WeakSet,Fa=(e,t)=>{if(1===e.type){const n=Wl(e,"memo");if(!n||Ra.has(e))return;return Ra.add(e),()=>{const o=e.codegenNode||t.currentNode.codegenNode;o&&13===o.type&&(1!==e.tagType&&oc(o,t),e.codegenNode=$l(t.helper(bl),[n.exp,Ol(void 0,o),"_cache",String(t.cached++)]))}}};function Pa(e,t={}){const n=t.onError||Fi,o="module"===t.mode;!0===t.prefixIdentifiers?n(Mi(46)):o&&n(Mi(47));t.cacheHandlers&&n(Mi(48)),t.scopeId&&!o&&n(Mi(49));const r=R(e)?lc(e,t):e,[s,i]=[[$a,Qc,Fa,na,xa,va,ua,Na],{on:wa,bind:ka,model:Oa}];return jc(r,C({},t,{prefixIdentifiers:false,nodeTransforms:[...s,...t.nodeTransforms||[]],directiveTransforms:C({},i,t.directiveTransforms||{})})),Wc(r,C({},t,{prefixIdentifiers:false}))}const Ma=Symbol(""),Va=Symbol(""),Ia=Symbol(""),Ba=Symbol(""),La=Symbol(""),ja=Symbol(""),Ua=Symbol(""),Ha=Symbol(""),Da=Symbol(""),Wa=Symbol("");var za;let Ka;za={[Ma]:"vModelRadio",[Va]:"vModelCheckbox",[Ia]:"vModelText",[Ba]:"vModelSelect",[La]:"vModelDynamic",[ja]:"withModifiers",[Ua]:"withKeys",[Ha]:"vShow",[Da]:"Transition",[Wa]:"TransitionGroup"},Object.getOwnPropertySymbols(za).forEach((e=>{Sl[e]=za[e]}));const Ga=t("style,iframe,script,noscript",!0),qa={isVoidTag:f,isNativeTag:e=>u(e)||p(e),isPreTag:e=>"pre"===e,decodeEntities:function(e,t=!1){return Ka||(Ka=document.createElement("div")),t?(Ka.innerHTML=`
`,Ka.children[0].getAttribute("foo")):(Ka.innerHTML=e,Ka.textContent)},isBuiltInComponent:e=>Fl(e,"Transition")?Da:Fl(e,"TransitionGroup")?Wa:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(Ga(e))return 2}return 0}},Ja=(e,t)=>{const n=c(e);return Nl(JSON.stringify(n),!1,t,3)};const Ya=t("passive,once,capture"),Za=t("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Qa=t("left,right"),Xa=t("onkeyup,onkeydown,onkeypress",!0),eu=(e,t)=>Rl(e)&&"onclick"===e.content.toLowerCase()?Nl(t,!0):4!==e.type?El(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,tu=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||t.removeNode()},nu=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:Nl("style",!0,t.loc),exp:Ja(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],ou={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[Tl(Nl("innerHTML",!0,r),o||Nl("",!0))]}},text:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[Tl(Nl("textContent",!0),o?$l(n.helperString(ol),[o],r):Nl("",!0))]}},model:(e,t,n)=>{const o=Oa(e,t,n);if(!o.props.length||1===t.tagType)return o;const{tag:r}=t,s=n.isCustomElement(r);if("input"===r||"textarea"===r||"select"===r||s){let e=Ia,i=!1;if("input"===r||s){const n=zl(t,"type");if(n){if(7===n.type)e=La;else if(n.value)switch(n.value.content){case"radio":e=Ma;break;case"checkbox":e=Va;break;case"file":i=!0}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(e=La)}else"select"===r&&(e=Ba);i||(o.needRuntime=n.helper(e))}return o.props=o.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),o},on:(e,t,n)=>wa(e,0,n,(t=>{const{modifiers:o}=e;if(!o.length)return t;let{key:r,value:s}=t.props[0];const{keyModifiers:i,nonKeyModifiers:l,eventOptionModifiers:c}=((e,t,n,o)=>{const r=[],s=[],i=[];for(let l=0;l({props:[],needRuntime:n.helper(Ha)})};const ru=Object.create(null);function su(e,t){if(!R(e)){if(!e.nodeType)return y;e=e.innerHTML}const n=e,o=ru[n];if(o)return o;if("#"===e[0]){const t=document.querySelector(e);e=t?t.innerHTML:""}const{code:r}=function(e,t={}){return Pa(e,C({},qa,t,{nodeTransforms:[tu,...nu,...t.nodeTransforms||[]],directiveTransforms:C({},ou,t.directiveTransforms||{}),transformHoist:null}))}(e,C({hoistStatic:!0,onError:void 0,onWarn:y},t)),s=new Function(r)();return s._rc=!0,ru[n]=s}return ts(su),e.BaseTransition=Un,e.Comment=hr,e.EffectScope=te,e.Fragment=fr,e.KeepAlive=Qn,e.ReactiveEffect=de,e.Static=mr,e.Suspense=wn,e.Teleport=lr,e.Text=dr,e.Transition=Bs,e.TransitionGroup=ni,e.VueElement=Fs,e.callWithAsyncErrorHandling=jt,e.callWithErrorHandling=Lt,e.camelize=D,e.capitalize=K,e.cloneVNode=Rr,e.compatUtils=null,e.compile=su,e.computed=cs,e.createApp=(...e)=>{const t=Ni().createApp(...e),{mount:n}=t;return t.mount=e=>{const o=Ai(e);if(!o)return;const r=t._component;A(r)||r.render||r.template||(r.template=o.innerHTML),o.innerHTML="";const s=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),s},t},e.createBlock=Cr,e.createCommentVNode=function(e="",t=!1){return t?(yr(),Cr(hr,null,e)):Or(hr,null,e)},e.createElementBlock=function(e,t,n,o,r,s){return xr($r(e,t,n,o,r,s,!0))},e.createElementVNode=$r,e.createHydrationRenderer=Xo,e.createPropsRestProxy=function(e,t){const n={};for(const o in e)t.includes(o)||Object.defineProperty(n,o,{enumerable:!0,get:()=>e[o]});return n},e.createRenderer=Qo,e.createSSRApp=(...e)=>{const t=Ei().createApp(...e),{mount:n}=t;return t.mount=e=>{const t=Ai(e);if(t)return n(t,!0,t instanceof SVGElement)},t},e.createSlots=function(e,t){for(let n=0;n{let e;return a||(e=a=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,a=null,p()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==a&&a?a:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),c=t,t))))};return qn({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const e=Kr;if(c)return()=>Yn(c,e);const t=t=>{a=null,Ut(t,e,13,!o)};if(i&&e.suspense)return p().then((t=>()=>Yn(t,e))).catch((e=>(t(e),()=>o?Or(o,{error:e}):null)));const l=Tt(!1),u=Tt(),f=Tt(!!r);return r&&setTimeout((()=>{f.value=!1}),r),null!=s&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${s}ms.`);t(e),u.value=e}}),s),p().then((()=>{l.value=!0,e.parent&&Zn(e.parent.vnode)&&nn(e.parent.update)})).catch((e=>{t(e),u.value=e})),()=>l.value&&c?Yn(c,e):u.value&&o?Or(o,{error:u.value}):n&&!f.value?Or(n):void 0}})},e.defineComponent=qn,e.defineCustomElement=As,e.defineEmits=function(){return null},e.defineExpose=function(e){},e.defineProps=function(){return null},e.defineSSRCustomElement=e=>As(e,Oi),e.effect=function(e,t){e.effect&&(e=e.effect.fn);const n=new de(e);t&&(C(n,t),t.scope&&ne(n,t.scope)),t&&t.lazy||n.run();const o=n.run.bind(n);return o.effect=n,o},e.effectScope=function(e){return new te(e)},e.getCurrentInstance=Gr,e.getCurrentScope=function(){return X},e.getTransitionRawChildren=Gn,e.guardReactiveProps=Ar,e.h=us,e.handleError=Ut,e.hydrate=Oi,e.initCustomFormatter=function(){},e.initDirectivesForSSR=Ri,e.inject=An,e.isMemoSame=fs,e.isProxy=yt,e.isReactive=mt,e.isReadonly=gt,e.isRef=kt,e.isRuntimeOnly=()=>!Zr,e.isShallow=vt,e.isVNode=wr,e.markRaw=_t,e.mergeDefaults=function(e,t){const n=N(e)?e.reduce(((e,t)=>(e[t]={},e)),{}):e;for(const o in t){const e=n[o];e?N(e)||A(e)?n[o]={type:e,default:t[o]}:e.default=t[o]:null===e&&(n[o]={default:t[o]})}return n},e.mergeProps=Ir,e.nextTick=tn,e.normalizeClass=a,e.normalizeProps=function(e){if(!e)return null;let{class:t,style:n}=e;return t&&!R(t)&&(e.class=a(t)),n&&(e.style=s(n)),e},e.normalizeStyle=s,e.onActivated=eo,e.onBeforeMount=co,e.onBeforeUnmount=fo,e.onBeforeUpdate=uo,e.onDeactivated=to,e.onErrorCaptured=yo,e.onMounted=ao,e.onRenderTracked=vo,e.onRenderTriggered=go,e.onScopeDispose=function(e){X&&X.cleanups.push(e)},e.onServerPrefetch=mo,e.onUnmounted=ho,e.onUpdated=po,e.openBlock=yr,e.popScopeId=function(){gn=null},e.provide=On,e.proxyRefs=At,e.pushScopeId=function(e){gn=e},e.queuePostFlushCb=sn,e.reactive=pt,e.readonly=dt,e.ref=Tt,e.registerRuntimeCompiler=ts,e.render=$i,e.renderList=function(e,t,n,o){let r;const s=n&&n[o];if(N(e)||R(e)){r=new Array(e.length);for(let n=0,o=e.length;nt(e,n,void 0,s&&s[n])));else{const n=Object.keys(e);r=new Array(n.length);for(let o=0,i=n.length;oe.devtools.emit(t,...n))),pn=[];else if("undefined"!=typeof window&&window.HTMLElement&&!(null===(s=null===(r=window.navigator)||void 0===r?void 0:r.userAgent)||void 0===s?void 0:s.includes("jsdom"))){(o.__VUE_DEVTOOLS_HOOK_REPLAY__=o.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{t(e,o)})),setTimeout((()=>{e.devtools||(o.__VUE_DEVTOOLS_HOOK_REPLAY__=null,pn=[])}),3e3)}else pn=[]},e.setTransitionHooks=Kn,e.shallowReactive=ft,e.shallowReadonly=function(e){return ht(e,!0,Ie,st,at)},e.shallowRef=function(e){return Nt(e,!0)},e.ssrContextKey=ps,e.ssrUtils=null,e.stop=function(e){e.effect.stop()},e.toDisplayString=e=>null==e?"":N(e)||P(e)&&(e.toString===V||!A(e.toString))?JSON.stringify(e,m,2):String(e),e.toHandlerKey=G,e.toHandlers=function(e){const t={};for(const n in e)t[G(n)]=e[n];return t},e.toRaw=bt,e.toRef=Pt,e.toRefs=function(e){const t=N(e)?new Array(e.length):{};for(const n in e)t[n]=Pt(e,n);return t},e.transformVNodeArgs=function(e){},e.triggerRef=function(e){wt(e)},e.unref=$t,e.useAttrs=function(){return as().attrs},e.useCssModule=function(e="$style"){return g},e.useCssVars=function(e){const t=Gr();if(!t)return;const n=()=>Ps(t.subTree,e(t.proxy));Rn(n),ao((()=>{const e=new MutationObserver(n);e.observe(t.subTree.el.parentNode,{childList:!0}),ho((()=>e.disconnect()))}))},e.useSSRContext=()=>{},e.useSlots=function(){return as().slots},e.useTransitionState=Ln,e.vModelCheckbox=ui,e.vModelDynamic=vi,e.vModelRadio=fi,e.vModelSelect=di,e.vModelText=ai,e.vShow=xi,e.version=ds,e.warn=function(e,...t){ve();const n=Vt.length?Vt[Vt.length-1].component:null,o=n&&n.appContext.config.warnHandler,r=function(){let e=Vt[Vt.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const o=e.component&&e.component.parent;e=o&&o.vnode}return t}();if(o)Lt(o,n,11,[e+t.join(""),n&&n.proxy,r.map((({vnode:e})=>`at <${ls(n,e.type)}>`)).join("\n"),r]);else{const n=[`[Vue warn]: ${e}`,...t];r.length&&n.push("\n",...function(e){const t=[];return e.forEach(((e,n)=>{t.push(...0===n?[]:["\n"],...function({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",o=` at <${ls(e.component,e.type,!!e.component&&null==e.component.parent)}`,r=">"+n;return e.props?[o,...It(e.props),r]:[o+r]}(e))})),t}(r)),console.warn(...n)}ye()},e.watch=Pn,e.watchEffect=function(e,t){return Mn(e,null,t)},e.watchPostEffect=Rn,e.watchSyncEffect=function(e,t){return Mn(e,null,{flush:"sync"})},e.withAsyncContext=function(e){const t=Gr();let n=e();return Jr(),M(n)&&(n=n.catch((e=>{throw qr(t),e}))),[n,()=>qr(t)]},e.withCtx=yn,e.withDefaults=function(e,t){return null},e.withDirectives=function(e,t){if(null===mn)return e;const n=mn.proxy,o=e.dirs||(e.dirs=[]);for(let r=0;rn=>{if(!("key"in n))return;const o=z(n.key);return t.some((e=>e===o||Si[e]===o))?e(n):void 0},e.withMemo=function(e,t,n,o){const r=n[o];if(r&&fs(r,e))return r;const s=t();return s.memo=e.slice(),n[o]=s},e.withModifiers=(e,t)=>(n,...o)=>{for(let e=0;eyn,Object.defineProperty(e,"__esModule",{value:!0}),e}({}); diff --git a/docs/example-zh.md b/docs/example-zh.md index 044ae37c..0ca2471b 100644 --- a/docs/example-zh.md +++ b/docs/example-zh.md @@ -234,52 +234,21 @@ brook relayoverbrook ... --from 127.0.0.1:5353 --to 8.8.8.8:53 brook dnsserveroverbrook ... --listen 127.0.0.1:53 ``` -## brook tproxy 透明代理网关在官网原版 OpenWrt +## Brook OpenWRT 路由器,完美支持 IPv4/IPv6/TCP/UDP,Native IPv6 -**无需操作 iptables!** +https://www.txthinking.com/talks/articles/brook-openwrt.article -``` -opkg update -opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables-mod-tproxy iptables-mod-socket ip6tables iptables -``` - -``` -brook tproxy --link 'brook://...' --dnsListen :5353 -``` - -1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -2. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -3. 默認, OpenWrt 將會下發 router 的 IP 的為電腦或手機的網關和 DNS - -## brook tproxy 透明代理网关在任意 Linux(有线) - -**无需操作 iptables!** - -``` -systemctl stop systemd-resolved -systemctl disable systemd-resolved -echo nameserver 8.8.8.8 > /etc/resolv.conf -``` - -``` -brook tproxy --link 'brook://...' --dnsListen 192.168.1.2:53 --disableAAAA -``` +## 使用 Brook 把 macOS 变成网关 -替换 192.168.1.2 为你的 Linux 的IP. 配置其他机器的网关和 DNS 为这台机器的 IP 即可 +https://www.txthinking.com/talks/articles/brook-macos-gateway.article -## 官网原版 OpenWrt 图形客户端 +## 使用 Brook 把 Windows 变成网关 -**无需操作 iptables!** +https://www.txthinking.com/talks/articles/brook-windows-gateway.article -**端口 9999, 8888, 5353 将会被使用**. 它与 brook server, brook wsserver, brook wssserver, brook quicserver 一起工作. +## 使用 Brook 把 Linux 变成网关 -1. 下載適合你系統的[ipk](https://github.com/txthinking/brook/releases)文件 -2. 上傳並安裝: OpenWrt Web -> System -> Software -> Upload Package... -3. 刷新頁面, 頂部菜單會出現 Brook 按鈕 -4. OpenWrt Web -> Brook -> 輸入後點擊 Connect -5. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -6. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -7. 默認, OpenWrt 將會下發 router 的 IP 為電腦或手機的網關和 DNS +https://www.txthinking.com/talks/articles/brook-linux-gateway.article ## brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver diff --git a/docs/example.md b/docs/example.md index 445d9cf6..7f09831a 100644 --- a/docs/example.md +++ b/docs/example.md @@ -234,52 +234,21 @@ brook relayoverbrook ... --from 127.0.0.1:5353 --to 8.8.8.8:53 brook dnsserveroverbrook ... --listen 127.0.0.1:53 ``` -## brook tproxy Transparent Proxy Gateway on official OpenWrt +## Brook OpenWRT Router: Perfectly supports IPv4/IPv6/TCP/UDP. Native IPv6 -**No need to manipulate iptables!** +https://www.txthinking.com/talks/articles/brook-openwrt-en.article -``` -opkg update -opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables iptables-mod-tproxy iptables-mod-socket ip6tables -``` - -``` -brook tproxy --link 'brook://...' --dnsListen :5353 -``` - -1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -2. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -3. By default, OpenWrt will automatically issue the IP of the router as gateway and DNS for your computers and mobiles - -## brook tproxy Transparent Proxy Gateway on any Linux (wired) - -**No need to manipulate iptables!** - -``` -systemctl stop systemd-resolved -systemctl disable systemd-resolved -echo nameserver 8.8.8.8 > /etc/resolv.conf -``` - -``` -brook tproxy --link 'brook://...' --dnsListen 192.168.1.2:53 --disableAAAA -``` +## Turn macOS into a Gateway with Brook -Replace 192.168.1.2 with your Linux IP. You may need to manually configure the computer or mobile gateway and DNS. +https://www.txthinking.com/talks/articles/brook-macos-gateway-en.article -## GUI for official OpenWrt +## Turn Windows into a Gateway with Brook -**No need to manipulate iptables!** +https://www.txthinking.com/talks/articles/brook-windows-gateway-en.article -port 9999, 8888, 5353 will be used. It work with brook server, brook wsserver, brook wssserver and brook quicserver. +## Turn Linux into a Gateway with Brook -1. Download the [ipk](https://github.com/txthinking/brook/releases) file for your router -2. Upload and install: OpenWrt Web -> System -> Software -> Upload Package... -3. Refresh page, the Brook menu will appear at the top -4. OpenWrt Web -> Brook -> type and Connect -5. And OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353 -6. And OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file -7. By default, OpenWrt will automatically issue the IP of the router as gateway and DNS for your computers and mobiles +https://www.txthinking.com/talks/articles/brook-linux-gateway-en.article ## brook relay can relay a address to a remote address. It can relay any tcp and udp server diff --git a/docs/getting-started.md b/docs/getting-started.md index 7f3653fa..052fc7ab 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -18,9 +18,9 @@ brook server -l :9999 -p hello | iOS | Android | Mac |Windows |Linux |OpenWrt | | --- | --- | --- | --- | --- | --- | -| [![](https://brook.app/images/appstore.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![](https://brook.app/images/android.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.apk) | [![](https://brook.app/images/mac.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![Windows](https://brook.app/images/windows.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.exe) | [![](https://brook.app/images/linux.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.bin) | [![OpenWrt](https://brook.app/images/openwrt.png)](https://github.com/txthinking/brook/releases) | - -> OpenWrt: After installation, you need to refresh the page to see the menu +| [![](https://brook.app/images/appstore.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![](https://brook.app/images/android.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.apk) | [![](https://brook.app/images/mac.png)](https://apps.apple.com/us/app/brook-network-tool/id1216002642) | [![Windows](https://brook.app/images/windows.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.msix) | [![](https://brook.app/images/linux.png)](https://github.com/txthinking/brook/releases/latest/download/Brook.app) | [![OpenWrt](https://brook.app/images/openwrt.png)](https://github.com/txthinking/brook/releases) | +| / | / | [App Mode](https://www.txthinking.com/talks/articles/macos-app-mode-en.article) | [How](https://www.txthinking.com/talks/articles/msix-brook-en.article) | [How](https://www.txthinking.com/talks/articles/linux-app-brook-en.article) | [How](https://www.txthinking.com/talks/articles/brook-openwrt-en.article) | +| / | / | [App 模式](https://www.txthinking.com/talks/articles/macos-app-mode.article) | [如何](https://www.txthinking.com/talks/articles/msix-brook.article) | [如何](https://www.txthinking.com/talks/articles/linux-app-brook.article) | [如何](https://www.txthinking.com/talks/articles/brook-openwrt.article) | ## CLI Client diff --git a/docs/index.html b/docs/index.html index 6672e8b5..b0ba3bff 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1263,9 +1263,10 @@
  • Run brook socks5 with username and password. A stand-alone standard socks5 server
  • brook relayoverbrook can relay a local address to a remote address over brook, both TCP and UDP, it works with brook server wsserver wssserver.
  • brook dnsserveroverbrook can create a encrypted DNS server, both TCP and UDP, it works with brook server wsserver wssserver.
  • -
  • brook tproxy Transparent Proxy Gateway on official OpenWrt
  • -
  • brook tproxy Transparent Proxy Gateway on any Linux (wired)
  • -
  • GUI for official OpenWrt
  • +
  • Brook OpenWRT Router: Perfectly supports IPv4/IPv6/TCP/UDP. Native IPv6
  • +
  • Turn macOS into a Gateway with Brook
  • +
  • Turn Windows into a Gateway with Brook
  • +
  • Turn Linux into a Gateway with Brook
  • brook relay can relay a address to a remote address. It can relay any tcp and udp server
  • brook socks5tohttp can convert a socks5 to a http proxy
  • brook pac creates pac server
  • @@ -1288,9 +1289,10 @@
  • 运行 brook socks5, 一个独立的标准 socks5 server, 指定用户名和密码
  • brook relayoverbrook 中继任何 TCP 和 UDP server, 让其走 brook 协议. 它与 brook server wsserver wssserver 一起工作
  • brook dnsserveroverbrook 用来创建一个加密 DNS Server, TCP and UDP, 它与 brook server wsserver wssserver 一起工作
  • -
  • brook tproxy 透明代理网关在官网原版 OpenWrt
  • -
  • brook tproxy 透明代理网关在任意 Linux(有线)
  • -
  • 官网原版 OpenWrt 图形客户端
  • +
  • Brook OpenWRT 路由器,完美支持 IPv4/IPv6/TCP/UDP,Native IPv6
  • +
  • 使用 Brook 把 macOS 变成网关
  • +
  • 使用 Brook 把 Windows 变成网关
  • +
  • 使用 Brook 把 Linux 变成网关
  • brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver
  • brook socks5tohttp 将 socks5 proxy 转换为 http proxy
  • brook pac 创建一个 pac server
  • @@ -1414,9 +1416,10 @@

    Run brook socks5 with username and password. A stand-alone standard socks5 server
  • brook relayoverbrook can relay a local address to a remote address over brook, both TCP and UDP, it works with brook server wsserver wssserver.
  • brook dnsserveroverbrook can create a encrypted DNS server, both TCP and UDP, it works with brook server wsserver wssserver.
  • -
  • brook tproxy Transparent Proxy Gateway on official OpenWrt
  • -
  • brook tproxy Transparent Proxy Gateway on any Linux (wired)
  • -
  • GUI for official OpenWrt
  • +
  • Brook OpenWRT Router: Perfectly supports IPv4/IPv6/TCP/UDP. Native IPv6
  • +
  • Turn macOS into a Gateway with Brook
  • +
  • Turn Windows into a Gateway with Brook
  • +
  • Turn Linux into a Gateway with Brook
  • brook relay can relay a address to a remote address. It can relay any tcp and udp server
  • brook socks5tohttp can convert a socks5 to a http proxy
  • brook pac creates pac server
  • @@ -1439,9 +1442,10 @@

    运行 brook socks5, 一个独立的标准 socks5 server, 指定用户名和密码
  • brook relayoverbrook 中继任何 TCP 和 UDP server, 让其走 brook 协议. 它与 brook server wsserver wssserver 一起工作
  • brook dnsserveroverbrook 用来创建一个加密 DNS Server, TCP and UDP, 它与 brook server wsserver wssserver 一起工作
  • -
  • brook tproxy 透明代理网关在官网原版 OpenWrt
  • -
  • brook tproxy 透明代理网关在任意 Linux(有线)
  • -
  • 官网原版 OpenWrt 图形客户端
  • +
  • Brook OpenWRT 路由器,完美支持 IPv4/IPv6/TCP/UDP,Native IPv6
  • +
  • 使用 Brook 把 macOS 变成网关
  • +
  • 使用 Brook 把 Windows 变成网关
  • +
  • 使用 Brook 把 Linux 变成网关
  • brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver
  • brook socks5tohttp 将 socks5 proxy 转换为 http proxy
  • brook pac 创建一个 pac server
  • @@ -1493,16 +1497,30 @@

    -Windows - +Windows + OpenWrt + + +/ +/ +App Mode +How +How +How + + + +/ +/ +App 模式 +如何 +如何 +如何 + - -
    -

    OpenWrt: After installation, you need to refresh the page to see the menu

    -

    CLI Client

    @@ -2685,7 +2703,7 @@

    bash -One-click script 一键脚本 +Many one-click scripts @@ -2765,11 +2783,6 @@

    If you prefer CLI brook client - -Pastebin -Create importable many brook links - - Brook Deploy Deploy brook with GUI @@ -3136,7 +3149,7 @@

    tproxy

    -

    Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server/wsserver/wssserver/quicserver <-> dst]

    +

    Run as transparent proxy, a router gateway, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server/wsserver/wssserver/quicserver <-> dst]. OpenWRT: https://www.txthinking.com/talks/articles/brook-openwrt-en.article

    • --address="": When server is brook wsserver or brook wssserver or brook quicserver, specify address instead of resolving addresses from host, such as 1.2.3.4:443

    • @@ -3185,8 +3198,6 @@

      @@ -3760,53 +3771,22 @@

      -brook tproxy Transparent Proxy Gateway on official OpenWrt

      +

      +Brook OpenWRT Router: Perfectly supports IPv4/IPv6/TCP/UDP. Native IPv6

      -

      No need to manipulate iptables!

      +

      https://www.txthinking.com/talks/articles/brook-openwrt-en.article

      +

      +Turn macOS into a Gateway with Brook

      -
      opkg update
      -opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables iptables-mod-tproxy iptables-mod-socket ip6tables
      -
      - -
      brook tproxy --link 'brook://...' --dnsListen :5353
      -
      +

      https://www.txthinking.com/talks/articles/brook-macos-gateway-en.article

      +

      +Turn Windows into a Gateway with Brook

      -
        -
      1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
      2. -
      3. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
      4. -
      5. By default, OpenWrt will automatically issue the IP of the router as gateway and DNS for your computers and mobiles
      6. -
      -

      -brook tproxy Transparent Proxy Gateway on any Linux (wired)

      +

      https://www.txthinking.com/talks/articles/brook-windows-gateway-en.article

      +

      +Turn Linux into a Gateway with Brook

      -

      No need to manipulate iptables!

      - -
      systemctl stop systemd-resolved
      -systemctl disable systemd-resolved
      -echo nameserver 8.8.8.8 > /etc/resolv.conf
      -
      - -
      brook tproxy --link 'brook://...' --dnsListen 192.168.1.2:53 --disableAAAA
      -
      - -

      Replace 192.168.1.2 with your Linux IP. You may need to manually configure the computer or mobile gateway and DNS.

      -

      -GUI for official OpenWrt

      - -

      No need to manipulate iptables!

      - -

      port 9999, 8888, 5353 will be used. It work with brook server, brook wsserver, brook wssserver and brook quicserver.

      - -
        -
      1. Download the ipk file for your router
      2. -
      3. Upload and install: OpenWrt Web -> System -> Software -> Upload Package...
      4. -
      5. Refresh page, the Brook menu will appear at the top
      6. -
      7. OpenWrt Web -> Brook -> type and Connect
      8. -
      9. And OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
      10. -
      11. And OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
      12. -
      13. By default, OpenWrt will automatically issue the IP of the router as gateway and DNS for your computers and mobiles
      14. -
      +

      https://www.txthinking.com/talks/articles/brook-linux-gateway-en.article

      brook relay can relay a address to a remote address. It can relay any tcp and udp server

      @@ -4054,53 +4034,22 @@

      -brook tproxy 透明代理网关在官网原版 OpenWrt

      - -

      无需操作 iptables!

      - -
      opkg update
      -opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables-mod-tproxy iptables-mod-socket ip6tables iptables
      -
      - -
      brook tproxy --link 'brook://...' --dnsListen :5353
      -
      - -
        -
      1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
      2. -
      3. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
      4. -
      5. 默認, OpenWrt 將會下發 router 的 IP 的為電腦或手機的網關和 DNS
      6. -
      -

      -brook tproxy 透明代理网关在任意 Linux(有线)

      - -

      无需操作 iptables!

      - -
      systemctl stop systemd-resolved
      -systemctl disable systemd-resolved
      -echo nameserver 8.8.8.8 > /etc/resolv.conf
      -
      - -
      brook tproxy --link 'brook://...' --dnsListen 192.168.1.2:53 --disableAAAA
      -
      +

      +Brook OpenWRT 路由器,完美支持 IPv4/IPv6/TCP/UDP,Native IPv6

      -

      替换 192.168.1.2 为你的 Linux 的IP. 配置其他机器的网关和 DNS 为这台机器的 IP 即可

      -

      -官网原版 OpenWrt 图形客户端

      +

      https://www.txthinking.com/talks/articles/brook-openwrt.article

      +

      +使用 Brook 把 macOS 变成网关

      -

      无需操作 iptables!

      +

      https://www.txthinking.com/talks/articles/brook-macos-gateway.article

      +

      +使用 Brook 把 Windows 变成网关

      -

      端口 9999, 8888, 5353 将会被使用. 它与 brook server, brook wsserver, brook wssserver, brook quicserver 一起工作.

      +

      https://www.txthinking.com/talks/articles/brook-windows-gateway.article

      +

      +使用 Brook 把 Linux 变成网关

      -
        -
      1. 下載適合你系統的ipk文件
      2. -
      3. 上傳並安裝: OpenWrt Web -> System -> Software -> Upload Package...
      4. -
      5. 刷新頁面, 頂部菜單會出現 Brook 按鈕
      6. -
      7. OpenWrt Web -> Brook -> 輸入後點擊 Connect
      8. -
      9. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
      10. -
      11. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
      12. -
      13. 默認, OpenWrt 將會下發 router 的 IP 為電腦或手機的網關和 DNS
      14. -
      +

      https://www.txthinking.com/talks/articles/brook-linux-gateway.article

      brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver

      diff --git a/docs/resources.md b/docs/resources.md index 85838370..b55d64c4 100644 --- a/docs/resources.md +++ b/docs/resources.md @@ -11,7 +11,7 @@ | [hancock](https://github.com/txthinking/hancock) | Manage multiple remote servers and execute commands remotely | | [sshexec](https://github.com/txthinking/sshexec) | A command-line tool to execute remote command through ssh | | [jb](https://github.com/txthinking/jb) | write script in an easier way than bash | -| [bash](https://github.com/txthinking/bash) | One-click script 一键脚本 | +| [bash](https://github.com/txthinking/bash) | Many one-click scripts | | [pacman](https://archlinux.org/packages/extra/x86_64/brook/) | `pacman -S brook` | | [brew](https://formulae.brew.sh/formula/brook) | `brew install brook` | | [docker](https://hub.docker.com/r/txthinking/brook) | `docker run txthinking/brook` | @@ -29,7 +29,6 @@ | [Announce](https://t.me/s/txthinking_news) | All news you should care | | [GitHub](https://github.com/txthinking) | Other useful repos | | [Socks5 Configurator](https://chromewebstore.google.com/detail/socks5-configurator/hnpgnjkeaobghpjjhaiemlahikgmnghb) | If you prefer CLI brook client | -| [Pastebin](https://paste.brook.app) | Create importable many brook links | | [Brook Deploy](https://www.txthinking.com/deploy.html) | Deploy brook with GUI | | [TxThinking](https://www.txthinking.com) | Everything | diff --git a/ipk/build.sh b/ipk/build.sh deleted file mode 100755 index 2c458c2d..00000000 --- a/ipk/build.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -cd control -tar -czf control.tar.gz * -mv control.tar.gz ../ -cd .. - -cd data -tar -czf data.tar.gz * -mv data.tar.gz ../ -cd .. - -tar -czf brook.ipk control.tar.gz data.tar.gz debian-binary - -rm *.tar.gz diff --git a/ipk/control/control b/ipk/control/control deleted file mode 100644 index 94924388..00000000 --- a/ipk/control/control +++ /dev/null @@ -1,7 +0,0 @@ -Package: brook -Version: 20230606 -Architecture: all -Maintainer: cloud -Homepage: https://github.com/txthinking/brook -Description: A cross-platform programmable network tool -Depends: coreutils-nohup, ca-certificates, openssl-util, ca-bundle, iptables, ip6tables, iptables-mod-tproxy, iptables-mod-socket diff --git a/ipk/control/postinst b/ipk/control/postinst deleted file mode 100755 index 849c7cb4..00000000 --- a/ipk/control/postinst +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -killall brook >/dev/null 2>&1 -s=`cat /etc/rc.local | grep brook`; if [ "$s" == "" ]; then echo 'nohup /usr/bin/brook tproxy --webListen :9999 > /root/.brook.web.err 2>&1 &' > /tmp/brook && cat /etc/rc.local >> /tmp/brook && mv /tmp/brook /etc/rc.local; fi -rm -rf /tmp/luci-* -touch /root/.brook -nohup /usr/bin/brook tproxy --webListen :9999 > /root/.brook.web.err 2>&1 & diff --git a/ipk/control/postrm b/ipk/control/postrm deleted file mode 100755 index 41e3b020..00000000 --- a/ipk/control/postrm +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -rm -rf /root/.brook diff --git a/ipk/data/usr/bin/.gitignore b/ipk/data/usr/bin/.gitignore deleted file mode 100644 index daf4752e..00000000 --- a/ipk/data/usr/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -brook diff --git a/ipk/data/usr/lib/lua/luci/controller/admin/brook.lua b/ipk/data/usr/lib/lua/luci/controller/admin/brook.lua deleted file mode 100644 index f14593d2..00000000 --- a/ipk/data/usr/lib/lua/luci/controller/admin/brook.lua +++ /dev/null @@ -1,4 +0,0 @@ -module("luci.controller.admin.brook", package.seeall) -function index() - entry({"admin", "brook"}, template("brook"),"Brook", 99).index=true -end diff --git a/ipk/data/usr/lib/lua/luci/view/brook.htm b/ipk/data/usr/lib/lua/luci/view/brook.htm deleted file mode 100644 index 2970529c..00000000 --- a/ipk/data/usr/lib/lua/luci/view/brook.htm +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/ipk/debian-binary b/ipk/debian-binary deleted file mode 100644 index cd5ac039..00000000 --- a/ipk/debian-binary +++ /dev/null @@ -1 +0,0 @@ -2.0 diff --git a/ping/ping.json b/ping/ping.json index d16d05dc..3782faec 100644 --- a/ping/ping.json +++ b/ping/ping.json @@ -1,7 +1,7 @@ { - "version": "20230606", - "text": "iOS/iPad/macOS in-app purchase Brook Plus: You only need to buy it once and free restore on other devices.", - "link": "https://www.txthinking.com/brook.html", - "text_zh": "iOS/iPad/macOS 内购 Brook Plus: 只需要购买一次, 在其他设备上可直接免费恢复.", - "link_zh": "https://www.txthinking.com/brook.html" + "version": "20240214", + "text": "", + "link": "", + "text_zh": "", + "link_zh": "" } diff --git a/tproxy/udp_linux.go b/tproxy/udp_linux.go index b5b62e94..eeb73f4e 100644 --- a/tproxy/udp_linux.go +++ b/tproxy/udp_linux.go @@ -125,25 +125,11 @@ func DialUDP(network string, laddr *net.UDPAddr, raddr *net.UDPAddr) (*net.UDPCo if laddr.IP.To4() == nil { lip := [16]byte{} copy(lip[:], laddr.IP.To16()) - zoneID, err := strconv.ParseUint(laddr.Zone, 10, 32) - if err != nil { - i, err := net.InterfaceByName(laddr.Zone) - if err != nil { - return nil, err - } - zoneID = uint64(i.Index) - } + zoneID := 0 laddrs = &syscall.SockaddrInet6{Addr: lip, Port: laddr.Port, ZoneId: uint32(zoneID)} rip := [16]byte{} copy(rip[:], raddr.IP.To16()) - zoneID, err = strconv.ParseUint(raddr.Zone, 10, 32) - if err != nil { - i, err := net.InterfaceByName(raddr.Zone) - if err != nil { - return nil, err - } - zoneID = uint64(i.Index) - } + zoneID = 0 raddrs = &syscall.SockaddrInet6{Addr: rip, Port: raddr.Port, ZoneId: uint32(zoneID)} ai = syscall.AF_INET6 } diff --git a/tproxy_linux.go b/tproxy_linux.go index c22b92d4..0d06172a 100644 --- a/tproxy_linux.go +++ b/tproxy_linux.go @@ -15,11 +15,15 @@ package brook import ( + "bytes" "errors" + "log" "net" "os/exec" "runtime" "strings" + "sync" + "time" "unsafe" "github.com/txthinking/brook/limits" @@ -35,6 +39,8 @@ type Tproxy struct { TCPTimeout int UDPTimeout int RunnerGroup *runnergroup.RunnerGroup + Lock *sync.Mutex + Exited bool } var TproxyGate func(conn net.Conn) (net.Conn, error) = func(conn net.Conn) (net.Conn, error) { @@ -83,6 +89,7 @@ func NewTproxy(addr, link string, tcpTimeout, udpTimeout int) (*Tproxy, error) { UDPTimeout: udpTimeout, RunnerGroup: runnergroup.New(), Blk: r, + Lock: &sync.Mutex{}, } return t, nil } @@ -153,53 +160,98 @@ func (s *Tproxy) RunAutoScripts() error { } // 6 - c = exec.Command("/bin/sh", "-c", "echo 1 > /proc/sys/net/ipv6/conf/all/forwarding") - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) - } - - c = exec.Command("/bin/sh", "-c", "ip -6 route add local ::/0 dev lo table 106") - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) - } - c = exec.Command("/bin/sh", "-c", "ip -6 rule add fwmark 1 table 106") - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) - } + f := func(b6 []byte) error { + c := exec.Command("/bin/sh", "-c", "echo 1 > /proc/sys/net/ipv6/conf/all/forwarding") + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } - c = exec.Command("/bin/sh", "-c", "ip address | grep -w inet6 | awk '{print $2}'") - out, err := c.CombinedOutput() - if err != nil { - return errors.New(string(out) + err.Error()) - } - l := strings.Split(strings.TrimSpace(string(out)), "\n") - for _, v := range l { - c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -d "+v+" -j RETURN") + c = exec.Command("/bin/sh", "-c", "ip -6 route add local ::/0 dev lo table 106") + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } + c = exec.Command("/bin/sh", "-c", "ip -6 rule add fwmark 1 table 106") if out, err := c.CombinedOutput(); err != nil { return errors.New(string(out) + err.Error()) } - } - c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p tcp -m socket -j MARK --set-mark 1") - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) + l := strings.Split(strings.TrimSpace(string(b6)), "\n") + for _, v := range l { + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -d "+v+" -j RETURN") + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } + } + + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p tcp -m socket -j MARK --set-mark 1") + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-ip ::1 --on-port "+s.Addr[1:]) + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p udp -m socket -j MARK --set-mark 1") + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p udp -j TPROXY --tproxy-mark 0x1/0x1 --on-ip ::1 --on-port "+s.Addr[1:]) + if out, err := c.CombinedOutput(); err != nil { + return errors.New(string(out) + err.Error()) + } + return nil } - c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-ip ::1 --on-port "+s.Addr[1:]) - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) + c = exec.Command("/bin/sh", "-c", "ip address | grep -w inet6 | awk '{print $2}'") + b6, err := c.CombinedOutput() + if err != nil { + return errors.New(string(b6) + err.Error()) } - c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p udp -m socket -j MARK --set-mark 1") - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) + if err := f(b6); err != nil { + return err } - c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -A PREROUTING -p udp -j TPROXY --tproxy-mark 0x1/0x1 --on-ip ::1 --on-port "+s.Addr[1:]) - if out, err := c.CombinedOutput(); err != nil { - return errors.New(string(out) + err.Error()) + check := func() error { + s.Lock.Lock() + defer s.Lock.Unlock() + if s.Exited { + return nil + } + c := exec.Command("/bin/sh", "-c", "ip address | grep -w inet6 | awk '{print $2}'") + out, err := c.CombinedOutput() + if err != nil { + return errors.New(string(out) + err.Error()) + } + if bytes.Compare(out, b6) == 0 { + return nil + } + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -F") + c.Run() + c = exec.Command("/bin/sh", "-c", "ip6tables -t mangle -X") + c.Run() + c = exec.Command("/bin/sh", "-c", "ip -6 rule del fwmark 1 table 106") + c.Run() + c = exec.Command("/bin/sh", "-c", "ip -6 route del local ::/0 dev lo table 106") + c.Run() + if err := f(out); err != nil { + return err + } + b6 = out + return nil } + go func() { + for { + time.Sleep(1 * time.Minute) + if err := check(); err != nil { + log.Println(err) + } + } + }() return nil } func (s *Tproxy) ClearAutoScripts() error { + s.Lock.Lock() + defer s.Lock.Unlock() + s.Exited = true c := exec.Command("/bin/sh", "-c", "iptables -t mangle -F") c.Run() c = exec.Command("/bin/sh", "-c", "iptables -t mangle -X")