aboutsummaryrefslogtreecommitdiff
path: root/multimedia/ringrtc
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia/ringrtc')
-rw-r--r--multimedia/ringrtc/Makefile157
-rw-r--r--multimedia/ringrtc/Makefile.crates332
-rw-r--r--multimedia/ringrtc/distinfo695
-rw-r--r--multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm11
-rw-r--r--multimedia/ringrtc/files/patch-src_rust_build.rs13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn23
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn22
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn45
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn145
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni9
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni15
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn53
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn27
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py10
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_freebsd_BUILD.gn69
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni44
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py17
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_toolchain.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn10
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_ringrtc_opus_BUILD.gn18
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc12
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc15
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc47
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc39
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h19
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn15
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third__nasm_BUILD.gn16
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third__party_libevent_BUILD.gn16
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h102
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn18
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third_party_libvpx_source_libvpx_vpx__ports_aarch64__cpudetect.c29
-rw-r--r--multimedia/ringrtc/pkg-descr2
-rw-r--r--multimedia/ringrtc/update.txt5
-rw-r--r--multimedia/ringrtc/webrtc_fetch.sh129
49 files changed, 2360 insertions, 0 deletions
diff --git a/multimedia/ringrtc/Makefile b/multimedia/ringrtc/Makefile
new file mode 100644
index 000000000000..d06e98d01557
--- /dev/null
+++ b/multimedia/ringrtc/Makefile
@@ -0,0 +1,157 @@
+PORTNAME= ringrtc
+DISTVERSIONPREFIX= v
+DISTVERSION= 2.39.3
+CATEGORIES= multimedia
+MASTER_SITES= LOCAL/mikael/ringrtc/:base \
+ LOCAL/mikael/ringrtc/:boringssl \
+ LOCAL/mikael/ringrtc/:build \
+ LOCAL/mikael/ringrtc/:buildtools \
+ LOCAL/mikael/ringrtc/:catapult \
+ LOCAL/mikael/ringrtc/:icu \
+ LOCAL/mikael/ringrtc/:nasm \
+ LOCAL/mikael/ringrtc/:libjpeg_turbo \
+ LOCAL/mikael/ringrtc/:libsrtp \
+ LOCAL/mikael/ringrtc/:libvpx \
+ LOCAL/mikael/ringrtc/:libyuv \
+ LOCAL/mikael/ringrtc/:third_party \
+ LOCAL/mikael/ringrtc/:testing \
+ LOCAL/mikael/ringrtc/:opus
+DISTFILES= base-${BASE_REV}.tar.gz:base \
+ boringssl-${BORINGSSL_REV}.tar.gz:boringssl \
+ build-${BUILD_REV}.tar.gz:build \
+ buildtools-${BUILDTOOLS_REV}.tar.gz:buildtools \
+ catapult-${CATAPULT_REV}.tar.gz:catapult \
+ icu-${ICU_REV}.tar.gz:icu \
+ nasm-${NASM_REV}.tar.gz:nasm \
+ libjpeg_turbo-${LIBJPEG_TURBO_REV}.tar.gz:libjpeg_turbo \
+ libsrtp-${LIBSRTP_REV}.tar.gz:libsrtp \
+ libvpx-${LIBVPX_REV}.tar.gz:libvpx \
+ libyuv-${LIBYUV_REV}.tar.gz:libyuv \
+ third_party-${THIRD_PARTY_REV}.tar.gz:third_party \
+ testing-${TESTING_REV}.tar.gz:testing \
+ opus-${OPUS_REV}.tar.gz:opus
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Middleware library for Signal-Desktop
+WWW= https://github.com/signalapp/ringrtc
+
+LICENSE= AGPLv3
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+ONLY_FOR_ARCHS= aarch64 amd64
+
+BUILD_DEPENDS= gn:devel/gn \
+ protoc:devel/protobuf
+LIB_DEPENDS= libasound.so:audio/alsa-lib \
+ libfreetype.so:print/freetype2 \
+ libpulse.so:audio/pulseaudio
+
+USES= cargo gnome localbase:ldflags ninja pkgconfig python:build \
+ tar:xz
+USE_GNOME= glib20
+USE_GITHUB= yes
+GH_ACCOUNT= signalapp
+GH_TUPLE= signalapp:ringrtc:${DISTVERSIONPREFIX}${DISTVERSION} \
+ signalapp:webrtc:${WEBRTC_REV}:webrtc
+
+# sh net-im/signal-desktop/get_deps.sh
+WEBRTC_REV= 6261d
+
+# modify webrtc_fetch.sh, then sh webrtc_fetch.sh
+BASE_REV= 36ecc8e397422620def3bb19a7ba392810ca2442
+BORINGSSL_REV= 414f69504d30d0848b69f6453ea7fb5e88004cb4
+BUILD_REV= 28cd6ea727d171ec990e6174308451d4178d7f8e
+BUILDTOOLS_REV= aadc2aa5f7382cdb5bc8e9309971356cf7722773
+CATAPULT_REV= 3e413d7b62c09fda8713146714ba2146a0369d86
+ICU_REV= a622de35ac311c5ad390a7af80724634e5dc61ed
+LIBJPEG_TURBO_REV= 9b894306ec3b28cea46e84c32b56773a98c483da
+LIBSRTP_REV= 5b7c744eb8310250ccc534f3f86a2015b3887a0a
+LIBVPX_REV= b95d17572629c676bdcfd535fb3990b9f6f8fb11
+LIBYUV_REV= 04821d1e7d60845525e8db55c7bcd41ef5be9406
+NASM_REV= f477acb1049f5e043904b87b825c5915084a9a29
+TESTING_REV= 450bfd79ee0369ac1a5465a12820b5d94a5956be
+THIRD_PARTY_REV= 692fab5c0074bc6fa486dce1a4aa7b2cc5609928
+OPUS_REV= 593419e833acab4d15b4901fe156177fb7315468
+
+BINARY_ALIAS= vpython3=${PYTHON_CMD}
+
+# Keep in sync with https://github.com/signalapp/ringrtc/blob/v${DISTVERSION}/bin/build-electron#L101
+# Run "gn args out/Release --list" for all variables.
+# Some parts don't have use_system_* flag, and can be turned on/off by using
+# replace_gn_files.py script, some parts just turned on/off for target host
+# OS "target_os == is_bsd", like libusb, libpci.
+GN_ARGS+= rtc_build_examples=false \
+ rtc_build_tools=false \
+ rtc_include_tests=false \
+ rtc_enable_protobuf=false \
+ rtc_use_x11=false \
+ rtc_enable_sctp=false \
+ rtc_libvpx_build_vp9=true \
+ rtc_include_ilbc=false \
+ use_custom_libcxx=false \
+ is_debug=false \
+ is_clang=true \
+ clang_use_chrome_plugins=false \
+ treat_warnings_as_errors=false \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+NPM_RINGRTC_DIR= npm-@signalapp-ringrtc-2.36.0-67d1b48bd4c1ea31c155ea14a0bd28f04e46eff5-integrity
+NPM_SIGNAL_DIR= npm-@signalapp-libsignal-client-0.39.1-15b41f15c516ae3eecf8a098a9c9c7aac00444d7-integrity
+NPM_SQLITE3_DIR= npm-@signalapp-better-sqlite3-8.6.0-0413f4d0626b99838cd64ad09c88720aa2bec6ed-integrity
+SQLCIPHER= sqlcipher-4.5.5-fts5-fix--3.0.7--0.2.1-ef53ea45ed92b928ecfd33c552d8d405263e86e63dec38e1ec63e1b0193b630b
+
+MAKE_ARGS= -C out/${BUILDTYPE}
+
+WEBRTCDIR= ${WRKDIR}/${PORTNAME}-${DISTVERSION}/src/webrtc/src
+
+CARGO_BUILD_ARGS= --package ringrtc --features electron
+CARGO_INSTALL= no
+
+USE_LDCONFIG= yes
+
+MAKE_ENV= OUTPUT_DIR=${WEBRTCDIR}/out
+
+PLIST_FILES= lib/libringrtc.so
+
+post-extract:
+ ${MKDIR} ${WRKDIR}/${PORTNAME}-${DISTVERSION}/src/webrtc
+ ${MV} ${WRKDIR}/webrtc-${WEBRTC_REV} ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/base ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/build ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/buildtools ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/testing ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/third_party ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/catapult ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/boringssl ${WEBRTCDIR}/third_party/boringssl/src
+ ${MV} ${WRKDIR}/icu ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/libjpeg_turbo ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/libsrtp ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/libvpx ${WEBRTCDIR}/third_party/libvpx/source
+ ${MV} ${WRKDIR}/libyuv ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/nasm ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/opus ${WEBRTCDIR}/ringrtc/opus/src
+
+post-patch:
+ ${REINPLACE_CMD} "s|LOCALBASE|${LOCALBASE}|" \
+ ${WEBRTCDIR}/build/toolchain/gcc_toolchain.gni \
+ ${WEBRTCDIR}/buildtools/third_party/libc++/BUILD.gn
+
+ ${ECHO_CMD} "# Generated from 'DEPS'" > ${WEBRTCDIR}/build/config/gclient_args.gni
+ ${ECHO_CMD} 1591703586 > ${WEBRTCDIR}/build/util/LASTCHANGE.committime
+ ${ECHO_CMD} "qqchose " > ${WEBRTCDIR}/build/util/LASTCHANGE
+
+pre-build:
+ cd ${WEBRTCDIR} && \
+ ${SETENV} ${CONFIGURE_ENV} gn gen out/release --args='${GN_ARGS}'
+
+# build webrtc first, ringrtc needs libwebrtc.a
+ cd ${WEBRTCDIR} \
+ && ${MAKE_ENV} CC=ccache CXX=ccache ninja -C out/release
+
+# it's not intended to be used outside of signal-desktop, put that in
+# /usr/local/share/ringrtc instead?
+do-install:
+ ${INSTALL_LIB} ${CARGO_TARGET_DIR}/${CARGO_BUILD_TARGET}/release/libringrtc.so \
+ ${STAGEDIR}${PREFIX}/lib/
+
+.include <bsd.port.mk>
diff --git a/multimedia/ringrtc/Makefile.crates b/multimedia/ringrtc/Makefile.crates
new file mode 100644
index 000000000000..b3a0137e71cf
--- /dev/null
+++ b/multimedia/ringrtc/Makefile.crates
@@ -0,0 +1,332 @@
+# fetch -qo - https://raw.githubusercontent.com/signalapp/ringrtc/v2.34.4/Cargo.lock | awk -f /usr/ports/Mk/Scripts/cargo-crates.awk | portedit merge -i Makefile.crates
+CARGO_CRATES= addr2line-0.21.0 \
+ adler-1.0.2 \
+ aead-0.5.2 \
+ aes-0.8.4 \
+ aes-gcm-siv-0.11.1 \
+ aho-corasick-1.1.3 \
+ android-tzdata-0.1.1 \
+ android_system_properties-0.1.5 \
+ anstream-0.6.13 \
+ anstyle-1.0.6 \
+ anstyle-parse-0.2.3 \
+ anstyle-query-1.0.2 \
+ anstyle-wincon-3.0.2 \
+ anyhow-1.0.81 \
+ askama-0.12.1 \
+ askama_derive-0.12.5 \
+ askama_escape-0.10.3 \
+ askama_parser-0.2.1 \
+ async-stream-0.3.5 \
+ async-stream-impl-0.3.5 \
+ async-trait-0.1.79 \
+ autocfg-1.1.0 \
+ axum-0.6.20 \
+ axum-core-0.3.4 \
+ backtrace-0.3.71 \
+ base64-0.13.1 \
+ base64-0.21.7 \
+ base64-0.22.0 \
+ basic-toml-0.1.9 \
+ bincode-1.3.3 \
+ bitflags-1.3.2 \
+ bitflags-2.5.0 \
+ bitvec-1.0.1 \
+ block-buffer-0.9.0 \
+ block-buffer-0.10.4 \
+ block-padding-0.3.3 \
+ bollard-0.15.0 \
+ bollard-stubs-1.43.0-rc.2 \
+ bumpalo-3.15.4 \
+ byteorder-1.5.0 \
+ bytes-1.6.0 \
+ bzip2-0.4.4 \
+ bzip2-sys-0.1.11+1.0.8 \
+ cbc-0.1.2 \
+ cc-1.0.90 \
+ cesu8-1.1.0 \
+ cfg-if-1.0.0 \
+ chrono-0.4.35 \
+ cipher-0.4.4 \
+ clap-4.5.3 \
+ clap_builder-4.5.2 \
+ clap_derive-4.5.3 \
+ clap_lex-0.7.0 \
+ colorchoice-1.0.0 \
+ combine-4.6.6 \
+ core-foundation-sys-0.8.6 \
+ cpufeatures-0.2.12 \
+ crc32fast-1.4.0 \
+ crypto-common-0.1.6 \
+ crypto-mac-0.11.0 \
+ ctr-0.9.2 \
+ darling-0.14.4 \
+ darling-0.20.8 \
+ darling_core-0.14.4 \
+ darling_core-0.20.8 \
+ darling_macro-0.14.4 \
+ darling_macro-0.20.8 \
+ deranged-0.3.11 \
+ derive-where-1.2.7 \
+ digest-0.9.0 \
+ digest-0.10.7 \
+ directories-4.0.1 \
+ dirs-sys-0.3.7 \
+ displaydoc-0.2.4 \
+ dunce-1.0.4 \
+ dyn-clone-1.0.17 \
+ either-1.10.0 \
+ env_filter-0.1.0 \
+ env_logger-0.11.3 \
+ equivalent-1.0.1 \
+ erased-serde-0.3.31 \
+ errno-0.3.8 \
+ fastrand-2.0.2 \
+ fern-0.6.2 \
+ fiat-crypto-0.2.7 \
+ fixedbitset-0.4.2 \
+ flate2-1.0.28 \
+ fnv-1.0.7 \
+ form_urlencoded-1.2.1 \
+ funty-2.0.0 \
+ futures-0.3.30 \
+ futures-channel-0.3.30 \
+ futures-core-0.3.30 \
+ futures-executor-0.3.30 \
+ futures-io-0.3.30 \
+ futures-macro-0.3.30 \
+ futures-sink-0.3.30 \
+ futures-task-0.3.30 \
+ futures-util-0.3.30 \
+ generic-array-0.14.7 \
+ getrandom-0.2.12 \
+ ghash-0.5.1 \
+ gimli-0.28.1 \
+ h2-0.3.25 \
+ hashbrown-0.12.3 \
+ hashbrown-0.14.3 \
+ heck-0.4.1 \
+ heck-0.5.0 \
+ hermit-abi-0.3.9 \
+ hex-0.4.3 \
+ hex-literal-0.4.1 \
+ hkdf-0.11.0 \
+ hkdf-0.12.4 \
+ hmac-0.11.0 \
+ hmac-0.12.1 \
+ home-0.5.9 \
+ hound-3.5.1 \
+ http-0.2.12 \
+ http-body-0.4.6 \
+ httparse-1.8.0 \
+ httpdate-1.0.3 \
+ humansize-2.1.3 \
+ humantime-2.1.0 \
+ hyper-0.14.28 \
+ hyper-timeout-0.4.1 \
+ hyperlocal-0.8.0 \
+ iana-time-zone-0.1.60 \
+ iana-time-zone-haiku-0.1.2 \
+ ident_case-1.0.1 \
+ idna-0.5.0 \
+ indexmap-1.9.3 \
+ indexmap-2.2.6 \
+ inout-0.1.3 \
+ itertools-0.11.0 \
+ itertools-0.12.1 \
+ itoa-1.0.10 \
+ jni-0.21.1 \
+ jni-sys-0.3.0 \
+ js-sys-0.3.69 \
+ lazy_static-1.4.0 \
+ libc-0.2.153 \
+ libloading-0.8.3 \
+ libm-0.2.8 \
+ libredox-0.0.1 \
+ linux-raw-sys-0.4.13 \
+ log-0.4.21 \
+ matchit-0.7.3 \
+ memchr-2.7.1 \
+ mime-0.3.17 \
+ mime_guess-2.0.4 \
+ minimal-lexical-0.2.1 \
+ miniz_oxide-0.7.2 \
+ mio-0.8.11 \
+ multimap-0.8.3 \
+ neon-1.0.0 \
+ neon-macros-1.0.0 \
+ nom-7.1.3 \
+ ntapi-0.4.1 \
+ num-conv-0.1.0 \
+ num-traits-0.2.18 \
+ num_cpus-1.16.0 \
+ num_enum-0.6.1 \
+ num_enum-0.7.2 \
+ num_enum_derive-0.6.1 \
+ num_enum_derive-0.7.2 \
+ object-0.32.2 \
+ once_cell-1.19.0 \
+ opaque-debug-0.3.1 \
+ partial-default-0.1.0 \
+ partial-default-derive-0.1.0 \
+ percent-encoding-2.3.1 \
+ petgraph-0.6.4 \
+ pin-project-1.1.5 \
+ pin-project-internal-1.1.5 \
+ pin-project-lite-0.2.13 \
+ pin-utils-0.1.0 \
+ pkg-config-0.3.30 \
+ platforms-3.3.0 \
+ plotly-0.8.4 \
+ plotly_derive-0.8.4 \
+ plotly_kaleido-0.8.4 \
+ polyval-0.6.2 \
+ powerfmt-0.2.0 \
+ ppv-lite86-0.2.17 \
+ prettyplease-0.2.17 \
+ proc-macro-crate-1.3.1 \
+ proc-macro-crate-3.1.0 \
+ proc-macro2-1.0.79 \
+ prost-0.12.3 \
+ prost-build-0.12.3 \
+ prost-derive-0.12.3 \
+ prost-types-0.12.3 \
+ quote-1.0.35 \
+ radium-0.7.0 \
+ rand-0.8.5 \
+ rand_chacha-0.3.1 \
+ rand_core-0.6.4 \
+ redox_syscall-0.4.1 \
+ redox_users-0.4.4 \
+ regex-1.10.4 \
+ regex-automata-0.4.6 \
+ regex-syntax-0.8.2 \
+ relative-path-1.9.2 \
+ ring-0.17.8 \
+ rustc-demangle-0.1.23 \
+ rustc_version-0.4.0 \
+ rustix-0.38.32 \
+ rustls-0.22.3 \
+ rustls-pki-types-1.4.0 \
+ rustls-webpki-0.102.2 \
+ rustversion-1.0.14 \
+ ryu-1.0.17 \
+ same-file-1.0.6 \
+ semver-1.0.22 \
+ send_wrapper-0.6.0 \
+ serde-1.0.197 \
+ serde_derive-1.0.197 \
+ serde_json-1.0.114 \
+ serde_repr-0.1.18 \
+ serde_urlencoded-0.7.1 \
+ serde_with-2.3.3 \
+ serde_with-3.7.0 \
+ serde_with_macros-2.3.3 \
+ serde_with_macros-3.7.0 \
+ sha1-0.10.6 \
+ sha2-0.9.9 \
+ sha2-0.10.8 \
+ signal-hook-registry-1.4.1 \
+ slab-0.4.9 \
+ smallvec-1.13.2 \
+ socket2-0.5.6 \
+ spin-0.9.8 \
+ static_assertions-1.1.0 \
+ strsim-0.10.0 \
+ strsim-0.11.0 \
+ subtle-2.5.0 \
+ syn-1.0.109 \
+ syn-2.0.55 \
+ syn-mid-0.6.0 \
+ sync_wrapper-0.1.2 \
+ sysinfo-0.29.11 \
+ tap-1.0.1 \
+ tempfile-3.10.1 \
+ thiserror-1.0.58 \
+ thiserror-impl-1.0.58 \
+ time-0.1.45 \
+ time-0.3.34 \
+ time-core-0.1.2 \
+ time-macros-0.2.17 \
+ tinyvec-1.6.0 \
+ tinyvec_macros-0.1.1 \
+ tokio-1.36.0 \
+ tokio-io-timeout-1.2.0 \
+ tokio-macros-2.2.0 \
+ tokio-stream-0.1.15 \
+ tokio-util-0.7.10 \
+ toml_datetime-0.6.5 \
+ toml_edit-0.19.15 \
+ toml_edit-0.21.1 \
+ tonic-0.11.0 \
+ tonic-build-0.11.0 \
+ tower-0.4.13 \
+ tower-layer-0.3.2 \
+ tower-service-0.3.2 \
+ tracing-0.1.40 \
+ tracing-attributes-0.1.27 \
+ tracing-core-0.1.32 \
+ try-lock-0.2.5 \
+ typenum-1.17.0 \
+ unicase-2.7.0 \
+ unicode-bidi-0.3.15 \
+ unicode-ident-1.0.12 \
+ unicode-normalization-0.1.23 \
+ universal-hash-0.5.1 \
+ untrusted-0.9.0 \
+ ureq-2.9.6 \
+ url-2.5.0 \
+ utf8parse-0.2.1 \
+ uuid-1.8.0 \
+ version_check-0.9.4 \
+ walkdir-2.5.0 \
+ want-0.3.1 \
+ wasi-0.10.0+wasi-snapshot-preview1 \
+ wasi-0.11.0+wasi-snapshot-preview1 \
+ wasm-bindgen-0.2.92 \
+ wasm-bindgen-backend-0.2.92 \
+ wasm-bindgen-macro-0.2.92 \
+ wasm-bindgen-macro-support-0.2.92 \
+ wasm-bindgen-shared-0.2.92 \
+ webpki-roots-0.26.1 \
+ which-4.4.2 \
+ winapi-0.3.9 \
+ winapi-i686-pc-windows-gnu-0.4.0 \
+ winapi-util-0.1.6 \
+ winapi-x86_64-pc-windows-gnu-0.4.0 \
+ windows-core-0.52.0 \
+ windows-sys-0.45.0 \
+ windows-sys-0.48.0 \
+ windows-sys-0.52.0 \
+ windows-targets-0.42.2 \
+ windows-targets-0.48.5 \
+ windows-targets-0.52.4 \
+ windows_aarch64_gnullvm-0.42.2 \
+ windows_aarch64_gnullvm-0.48.5 \
+ windows_aarch64_gnullvm-0.52.4 \
+ windows_aarch64_msvc-0.42.2 \
+ windows_aarch64_msvc-0.48.5 \
+ windows_aarch64_msvc-0.52.4 \
+ windows_i686_gnu-0.42.2 \
+ windows_i686_gnu-0.48.5 \
+ windows_i686_gnu-0.52.4 \
+ windows_i686_msvc-0.42.2 \
+ windows_i686_msvc-0.48.5 \
+ windows_i686_msvc-0.52.4 \
+ windows_x86_64_gnu-0.42.2 \
+ windows_x86_64_gnu-0.48.5 \
+ windows_x86_64_gnu-0.52.4 \
+ windows_x86_64_gnullvm-0.42.2 \
+ windows_x86_64_gnullvm-0.48.5 \
+ windows_x86_64_gnullvm-0.52.4 \
+ windows_x86_64_msvc-0.42.2 \
+ windows_x86_64_msvc-0.48.5 \
+ windows_x86_64_msvc-0.52.4 \
+ winnow-0.5.40 \
+ wyz-0.5.1 \
+ x25519-dalek-2.0.1 \
+ zeroize-1.7.0 \
+ zeroize_derive-1.4.2 \
+ zip-0.5.13 \
+ libsignal-core,poksho,signal-crypto,zkcredential,zkgroup@git+https://github.com/signalapp/libsignal?tag=v0.37.0\#d47f96abff97d19a0b125376737655c268dd20b9 \
+ curve25519-dalek,curve25519-dalek-derive@git+https://github.com/signalapp/curve25519-dalek?tag=signal-curve25519-4.1.1\#a12ab4e58455bb3dc7cd73a0f9f3443507b2854b
diff --git a/multimedia/ringrtc/distinfo b/multimedia/ringrtc/distinfo
new file mode 100644
index 000000000000..43a2e2e90eb5
--- /dev/null
+++ b/multimedia/ringrtc/distinfo
@@ -0,0 +1,695 @@
+TIMESTAMP = 1713355305
+SHA256 (base-36ecc8e397422620def3bb19a7ba392810ca2442.tar.gz) = ba385d4499e3a3d13b5a76f70425da1c22a8eb3e6d58b8350380b459e06169f5
+SIZE (base-36ecc8e397422620def3bb19a7ba392810ca2442.tar.gz) = 5885707
+SHA256 (boringssl-414f69504d30d0848b69f6453ea7fb5e88004cb4.tar.gz) = 5fce22b30ae7c19649a8f1d8340010e90264ef21ed1085b30d8f41f0be3ab837
+SIZE (boringssl-414f69504d30d0848b69f6453ea7fb5e88004cb4.tar.gz) = 36613551
+SHA256 (build-28cd6ea727d171ec990e6174308451d4178d7f8e.tar.gz) = f7bbd878d311c41be31d0458254513799956b9c5e0cf764a5be0468d521b3edf
+SIZE (build-28cd6ea727d171ec990e6174308451d4178d7f8e.tar.gz) = 1551990
+SHA256 (buildtools-aadc2aa5f7382cdb5bc8e9309971356cf7722773.tar.gz) = 3c8ab9c96887a4106813afc322fde64bdc88f1bd83f98d864b8ee5f8b23427ea
+SIZE (buildtools-aadc2aa5f7382cdb5bc8e9309971356cf7722773.tar.gz) = 93244
+SHA256 (catapult-3e413d7b62c09fda8713146714ba2146a0369d86.tar.gz) = d19b3079828a871b800b1f83170ca0113aad9b6285271e24d92bb492234f8b3d
+SIZE (catapult-3e413d7b62c09fda8713146714ba2146a0369d86.tar.gz) = 165952886
+SHA256 (icu-a622de35ac311c5ad390a7af80724634e5dc61ed.tar.gz) = bcb6c1fc9e8d88123ac6210ee84846d3eadfca163756bcf7bd11ea30769613d3
+SIZE (icu-a622de35ac311c5ad390a7af80724634e5dc61ed.tar.gz) = 52300593
+SHA256 (nasm-f477acb1049f5e043904b87b825c5915084a9a29.tar.gz) = fa0c68caca289e2e9dac4fee0142150faf7c8bf2f15ff156e738e619a9c76bbd
+SIZE (nasm-f477acb1049f5e043904b87b825c5915084a9a29.tar.gz) = 1546897
+SHA256 (libjpeg_turbo-9b894306ec3b28cea46e84c32b56773a98c483da.tar.gz) = 62598a235f4d09b74e8ed3a262c148c0a95cfd5c0c59df92449d1be145c98af0
+SIZE (libjpeg_turbo-9b894306ec3b28cea46e84c32b56773a98c483da.tar.gz) = 2376833
+SHA256 (libsrtp-5b7c744eb8310250ccc534f3f86a2015b3887a0a.tar.gz) = 9bd3de42693cf0d9481da168dff6a83a2151f764c5f192cab36e109d65d86943
+SIZE (libsrtp-5b7c744eb8310250ccc534f3f86a2015b3887a0a.tar.gz) = 142033
+SHA256 (libvpx-b95d17572629c676bdcfd535fb3990b9f6f8fb11.tar.gz) = 7b70965dfaa857db92bf31719aea9c3a572ecc859f04f7110ae5be44f42b5b7a
+SIZE (libvpx-b95d17572629c676bdcfd535fb3990b9f6f8fb11.tar.gz) = 5684787
+SHA256 (libyuv-04821d1e7d60845525e8db55c7bcd41ef5be9406.tar.gz) = 41d50ba3db95cdf9350651deec3aa9ddfc71cbf7608c9d53bf3420ba2cfdf375
+SIZE (libyuv-04821d1e7d60845525e8db55c7bcd41ef5be9406.tar.gz) = 564067
+SHA256 (third_party-692fab5c0074bc6fa486dce1a4aa7b2cc5609928.tar.gz) = dba09b06ade357345cf899075861ed1da073765110fa8ff5cb03b168f38ddbb1
+SIZE (third_party-692fab5c0074bc6fa486dce1a4aa7b2cc5609928.tar.gz) = 826388101
+SHA256 (testing-450bfd79ee0369ac1a5465a12820b5d94a5956be.tar.gz) = 46c66a5b429681ccad1096b9431682cfc6a40f25a2d17d0c4e7e50b3674eb3ee
+SIZE (testing-450bfd79ee0369ac1a5465a12820b5d94a5956be.tar.gz) = 2412905
+SHA256 (opus-593419e833acab4d15b4901fe156177fb7315468.tar.gz) = cf62fdbf33205e3d15e1bee829a2cb275e82fb6944826d2afb7666623470b816
+SIZE (opus-593419e833acab4d15b4901fe156177fb7315468.tar.gz) = 869636
+SHA256 (rust/crates/addr2line-0.21.0.crate) = 8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb
+SIZE (rust/crates/addr2line-0.21.0.crate) = 40807
+SHA256 (rust/crates/adler-1.0.2.crate) = f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe
+SIZE (rust/crates/adler-1.0.2.crate) = 12778
+SHA256 (rust/crates/aead-0.5.2.crate) = d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0
+SIZE (rust/crates/aead-0.5.2.crate) = 15509
+SHA256 (rust/crates/aes-0.8.4.crate) = b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0
+SIZE (rust/crates/aes-0.8.4.crate) = 124812
+SHA256 (rust/crates/aes-gcm-siv-0.11.1.crate) = ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d
+SIZE (rust/crates/aes-gcm-siv-0.11.1.crate) = 26633
+SHA256 (rust/crates/aho-corasick-1.1.3.crate) = 8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916
+SIZE (rust/crates/aho-corasick-1.1.3.crate) = 183311
+SHA256 (rust/crates/android-tzdata-0.1.1.crate) = e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0
+SIZE (rust/crates/android-tzdata-0.1.1.crate) = 7674
+SHA256 (rust/crates/android_system_properties-0.1.5.crate) = 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311
+SIZE (rust/crates/android_system_properties-0.1.5.crate) = 5243
+SHA256 (rust/crates/anstream-0.6.13.crate) = d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb
+SIZE (rust/crates/anstream-0.6.13.crate) = 30928
+SHA256 (rust/crates/anstyle-1.0.6.crate) = 8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc
+SIZE (rust/crates/anstyle-1.0.6.crate) = 14604
+SHA256 (rust/crates/anstyle-parse-0.2.3.crate) = c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c
+SIZE (rust/crates/anstyle-parse-0.2.3.crate) = 24699
+SHA256 (rust/crates/anstyle-query-1.0.2.crate) = e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648
+SIZE (rust/crates/anstyle-query-1.0.2.crate) = 8739
+SHA256 (rust/crates/anstyle-wincon-3.0.2.crate) = 1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7
+SIZE (rust/crates/anstyle-wincon-3.0.2.crate) = 11272
+SHA256 (rust/crates/anyhow-1.0.81.crate) = 0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247
+SIZE (rust/crates/anyhow-1.0.81.crate) = 45142
+SHA256 (rust/crates/askama-0.12.1.crate) = b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28
+SIZE (rust/crates/askama-0.12.1.crate) = 16976
+SHA256 (rust/crates/askama_derive-0.12.5.crate) = 19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83
+SIZE (rust/crates/askama_derive-0.12.5.crate) = 31218
+SHA256 (rust/crates/askama_escape-0.10.3.crate) = 619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341
+SIZE (rust/crates/askama_escape-0.10.3.crate) = 8875
+SHA256 (rust/crates/askama_parser-0.2.1.crate) = acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0
+SIZE (rust/crates/askama_parser-0.2.1.crate) = 20707
+SHA256 (rust/crates/async-stream-0.3.5.crate) = cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51
+SIZE (rust/crates/async-stream-0.3.5.crate) = 11916
+SHA256 (rust/crates/async-stream-impl-0.3.5.crate) = 16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193
+SIZE (rust/crates/async-stream-impl-0.3.5.crate) = 4173
+SHA256 (rust/crates/async-trait-0.1.79.crate) = a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681
+SIZE (rust/crates/async-trait-0.1.79.crate) = 29558
+SHA256 (rust/crates/autocfg-1.1.0.crate) = d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa
+SIZE (rust/crates/autocfg-1.1.0.crate) = 13272
+SHA256 (rust/crates/axum-0.6.20.crate) = 3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf
+SIZE (rust/crates/axum-0.6.20.crate) = 146227
+SHA256 (rust/crates/axum-core-0.3.4.crate) = 759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c
+SIZE (rust/crates/axum-core-0.3.4.crate) = 21088
+SHA256 (rust/crates/backtrace-0.3.71.crate) = 26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d
+SIZE (rust/crates/backtrace-0.3.71.crate) = 86553
+SHA256 (rust/crates/base64-0.13.1.crate) = 9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8
+SIZE (rust/crates/base64-0.13.1.crate) = 61002
+SHA256 (rust/crates/base64-0.21.7.crate) = 9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567
+SIZE (rust/crates/base64-0.21.7.crate) = 82576
+SHA256 (rust/crates/base64-0.22.0.crate) = 9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51
+SIZE (rust/crates/base64-0.22.0.crate) = 81568
+SHA256 (rust/crates/basic-toml-0.1.9.crate) = 823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8
+SIZE (rust/crates/basic-toml-0.1.9.crate) = 50234
+SHA256 (rust/crates/bincode-1.3.3.crate) = b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad
+SIZE (rust/crates/bincode-1.3.3.crate) = 28958
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/bitflags-2.5.0.crate) = cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1
+SIZE (rust/crates/bitflags-2.5.0.crate) = 43821
+SHA256 (rust/crates/bitvec-1.0.1.crate) = 1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c
+SIZE (rust/crates/bitvec-1.0.1.crate) = 224375
+SHA256 (rust/crates/block-buffer-0.9.0.crate) = 4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4
+SIZE (rust/crates/block-buffer-0.9.0.crate) = 7108
+SHA256 (rust/crates/block-buffer-0.10.4.crate) = 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71
+SIZE (rust/crates/block-buffer-0.10.4.crate) = 10538
+SHA256 (rust/crates/block-padding-0.3.3.crate) = a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93
+SIZE (rust/crates/block-padding-0.3.3.crate) = 8504
+SHA256 (rust/crates/bollard-0.15.0.crate) = f03db470b3c0213c47e978da93200259a1eb4dae2e5512cba9955e2b540a6fc6
+SIZE (rust/crates/bollard-0.15.0.crate) = 105321
+SHA256 (rust/crates/bollard-stubs-1.43.0-rc.2.crate) = b58071e8fd9ec1e930efd28e3a90c1251015872a2ce49f81f36421b86466932e
+SIZE (rust/crates/bollard-stubs-1.43.0-rc.2.crate) = 55796
+SHA256 (rust/crates/bumpalo-3.15.4.crate) = 7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa
+SIZE (rust/crates/bumpalo-3.15.4.crate) = 85028
+SHA256 (rust/crates/byteorder-1.5.0.crate) = 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b
+SIZE (rust/crates/byteorder-1.5.0.crate) = 23288
+SHA256 (rust/crates/bytes-1.6.0.crate) = 514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9
+SIZE (rust/crates/bytes-1.6.0.crate) = 60605
+SHA256 (rust/crates/bzip2-0.4.4.crate) = bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8
+SIZE (rust/crates/bzip2-0.4.4.crate) = 34197
+SHA256 (rust/crates/bzip2-sys-0.1.11+1.0.8.crate) = 736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc
+SIZE (rust/crates/bzip2-sys-0.1.11+1.0.8.crate) = 633444
+SHA256 (rust/crates/cbc-0.1.2.crate) = 26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6
+SIZE (rust/crates/cbc-0.1.2.crate) = 23501
+SHA256 (rust/crates/cc-1.0.90.crate) = 8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5
+SIZE (rust/crates/cc-1.0.90.crate) = 73954
+SHA256 (rust/crates/cesu8-1.1.0.crate) = 6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c
+SIZE (rust/crates/cesu8-1.1.0.crate) = 10555
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/chrono-0.4.35.crate) = 8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a
+SIZE (rust/crates/chrono-0.4.35.crate) = 234267
+SHA256 (rust/crates/cipher-0.4.4.crate) = 773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad
+SIZE (rust/crates/cipher-0.4.4.crate) = 19073
+SHA256 (rust/crates/clap-4.5.3.crate) = 949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813
+SIZE (rust/crates/clap-4.5.3.crate) = 55388
+SHA256 (rust/crates/clap_builder-4.5.2.crate) = ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4
+SIZE (rust/crates/clap_builder-4.5.2.crate) = 163566
+SHA256 (rust/crates/clap_derive-4.5.3.crate) = 90239a040c80f5e14809ca132ddc4176ab33d5e17e49691793296e3fcb34d72f
+SIZE (rust/crates/clap_derive-4.5.3.crate) = 29043
+SHA256 (rust/crates/clap_lex-0.7.0.crate) = 98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce
+SIZE (rust/crates/clap_lex-0.7.0.crate) = 11915
+SHA256 (rust/crates/colorchoice-1.0.0.crate) = acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7
+SIZE (rust/crates/colorchoice-1.0.0.crate) = 6857
+SHA256 (rust/crates/combine-4.6.6.crate) = 35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4
+SIZE (rust/crates/combine-4.6.6.crate) = 132428
+SHA256 (rust/crates/core-foundation-sys-0.8.6.crate) = 06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f
+SIZE (rust/crates/core-foundation-sys-0.8.6.crate) = 37629
+SHA256 (rust/crates/cpufeatures-0.2.12.crate) = 53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504
+SIZE (rust/crates/cpufeatures-0.2.12.crate) = 12837
+SHA256 (rust/crates/crc32fast-1.4.0.crate) = b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa
+SIZE (rust/crates/crc32fast-1.4.0.crate) = 38665
+SHA256 (rust/crates/crypto-common-0.1.6.crate) = 1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3
+SIZE (rust/crates/crypto-common-0.1.6.crate) = 8760
+SHA256 (rust/crates/crypto-mac-0.11.0.crate) = 25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e
+SIZE (rust/crates/crypto-mac-0.11.0.crate) = 9457
+SHA256 (rust/crates/ctr-0.9.2.crate) = 0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835
+SIZE (rust/crates/ctr-0.9.2.crate) = 18344
+SHA256 (rust/crates/darling-0.14.4.crate) = 7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850
+SIZE (rust/crates/darling-0.14.4.crate) = 25168
+SHA256 (rust/crates/darling-0.20.8.crate) = 54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391
+SIZE (rust/crates/darling-0.20.8.crate) = 31234
+SHA256 (rust/crates/darling_core-0.14.4.crate) = 109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0
+SIZE (rust/crates/darling_core-0.14.4.crate) = 57485
+SHA256 (rust/crates/darling_core-0.20.8.crate) = 9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f
+SIZE (rust/crates/darling_core-0.20.8.crate) = 64442
+SHA256 (rust/crates/darling_macro-0.14.4.crate) = a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e
+SIZE (rust/crates/darling_macro-0.14.4.crate) = 1896
+SHA256 (rust/crates/darling_macro-0.20.8.crate) = a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f
+SIZE (rust/crates/darling_macro-0.20.8.crate) = 1856
+SHA256 (rust/crates/deranged-0.3.11.crate) = b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4
+SIZE (rust/crates/deranged-0.3.11.crate) = 18043
+SHA256 (rust/crates/derive-where-1.2.7.crate) = 62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25
+SIZE (rust/crates/derive-where-1.2.7.crate) = 46524
+SHA256 (rust/crates/digest-0.9.0.crate) = d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066
+SIZE (rust/crates/digest-0.9.0.crate) = 13247
+SHA256 (rust/crates/digest-0.10.7.crate) = 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292
+SIZE (rust/crates/digest-0.10.7.crate) = 19557
+SHA256 (rust/crates/directories-4.0.1.crate) = f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210
+SIZE (rust/crates/directories-4.0.1.crate) = 16040
+SHA256 (rust/crates/dirs-sys-0.3.7.crate) = 1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6
+SIZE (rust/crates/dirs-sys-0.3.7.crate) = 10597
+SHA256 (rust/crates/displaydoc-0.2.4.crate) = 487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d
+SIZE (rust/crates/displaydoc-0.2.4.crate) = 23200
+SHA256 (rust/crates/dunce-1.0.4.crate) = 56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b
+SIZE (rust/crates/dunce-1.0.4.crate) = 8034
+SHA256 (rust/crates/dyn-clone-1.0.17.crate) = 0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125
+SIZE (rust/crates/dyn-clone-1.0.17.crate) = 11848
+SHA256 (rust/crates/either-1.10.0.crate) = 11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a
+SIZE (rust/crates/either-1.10.0.crate) = 18334
+SHA256 (rust/crates/env_filter-0.1.0.crate) = a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea
+SIZE (rust/crates/env_filter-0.1.0.crate) = 11553
+SHA256 (rust/crates/env_logger-0.11.3.crate) = 38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9
+SIZE (rust/crates/env_logger-0.11.3.crate) = 29704
+SHA256 (rust/crates/equivalent-1.0.1.crate) = 5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5
+SIZE (rust/crates/equivalent-1.0.1.crate) = 6615
+SHA256 (rust/crates/erased-serde-0.3.31.crate) = 6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c
+SIZE (rust/crates/erased-serde-0.3.31.crate) = 24182
+SHA256 (rust/crates/errno-0.3.8.crate) = a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245
+SIZE (rust/crates/errno-0.3.8.crate) = 10645
+SHA256 (rust/crates/fastrand-2.0.2.crate) = 658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984
+SIZE (rust/crates/fastrand-2.0.2.crate) = 14674
+SHA256 (rust/crates/fern-0.6.2.crate) = d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee
+SIZE (rust/crates/fern-0.6.2.crate) = 304626
+SHA256 (rust/crates/fiat-crypto-0.2.7.crate) = c007b1ae3abe1cb6f85a16305acd418b7ca6343b953633fee2b76d8f108b830f
+SIZE (rust/crates/fiat-crypto-0.2.7.crate) = 495388
+SHA256 (rust/crates/fixedbitset-0.4.2.crate) = 0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80
+SIZE (rust/crates/fixedbitset-0.4.2.crate) = 15954
+SHA256 (rust/crates/flate2-1.0.28.crate) = 46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e
+SIZE (rust/crates/flate2-1.0.28.crate) = 73690
+SHA256 (rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1
+SIZE (rust/crates/fnv-1.0.7.crate) = 11266
+SHA256 (rust/crates/form_urlencoded-1.2.1.crate) = e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456
+SIZE (rust/crates/form_urlencoded-1.2.1.crate) = 8969
+SHA256 (rust/crates/funty-2.0.0.crate) = e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c
+SIZE (rust/crates/funty-2.0.0.crate) = 13160
+SHA256 (rust/crates/futures-0.3.30.crate) = 645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0
+SIZE (rust/crates/futures-0.3.30.crate) = 53828
+SHA256 (rust/crates/futures-channel-0.3.30.crate) = eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78
+SIZE (rust/crates/futures-channel-0.3.30.crate) = 31736
+SHA256 (rust/crates/futures-core-0.3.30.crate) = dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d
+SIZE (rust/crates/futures-core-0.3.30.crate) = 14071
+SHA256 (rust/crates/futures-executor-0.3.30.crate) = a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d
+SIZE (rust/crates/futures-executor-0.3.30.crate) = 17744
+SHA256 (rust/crates/futures-io-0.3.30.crate) = a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1
+SIZE (rust/crates/futures-io-0.3.30.crate) = 8910
+SHA256 (rust/crates/futures-macro-0.3.30.crate) = 87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac
+SIZE (rust/crates/futures-macro-0.3.30.crate) = 11278
+SHA256 (rust/crates/futures-sink-0.3.30.crate) = 9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5
+SIZE (rust/crates/futures-sink-0.3.30.crate) = 7852
+SHA256 (rust/crates/futures-task-0.3.30.crate) = 38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004
+SIZE (rust/crates/futures-task-0.3.30.crate) = 11126
+SHA256 (rust/crates/futures-util-0.3.30.crate) = 3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48
+SIZE (rust/crates/futures-util-0.3.30.crate) = 159977
+SHA256 (rust/crates/generic-array-0.14.7.crate) = 85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a
+SIZE (rust/crates/generic-array-0.14.7.crate) = 15950
+SHA256 (rust/crates/getrandom-0.2.12.crate) = 190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5
+SIZE (rust/crates/getrandom-0.2.12.crate) = 36163
+SHA256 (rust/crates/ghash-0.5.1.crate) = f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1
+SIZE (rust/crates/ghash-0.5.1.crate) = 9482
+SHA256 (rust/crates/gimli-0.28.1.crate) = 4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253
+SIZE (rust/crates/gimli-0.28.1.crate) = 270497
+SHA256 (rust/crates/h2-0.3.25.crate) = 4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb
+SIZE (rust/crates/h2-0.3.25.crate) = 167894
+SHA256 (rust/crates/hashbrown-0.12.3.crate) = 8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888
+SIZE (rust/crates/hashbrown-0.12.3.crate) = 102968
+SHA256 (rust/crates/hashbrown-0.14.3.crate) = 290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604
+SIZE (rust/crates/hashbrown-0.14.3.crate) = 141425
+SHA256 (rust/crates/heck-0.4.1.crate) = 95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8
+SIZE (rust/crates/heck-0.4.1.crate) = 11567
+SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
+SIZE (rust/crates/heck-0.5.0.crate) = 11517
+SHA256 (rust/crates/hermit-abi-0.3.9.crate) = d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024
+SIZE (rust/crates/hermit-abi-0.3.9.crate) = 16165
+SHA256 (rust/crates/hex-0.4.3.crate) = 7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70
+SIZE (rust/crates/hex-0.4.3.crate) = 13299
+SHA256 (rust/crates/hex-literal-0.4.1.crate) = 6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46
+SIZE (rust/crates/hex-literal-0.4.1.crate) = 8559
+SHA256 (rust/crates/hkdf-0.11.0.crate) = 01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b
+SIZE (rust/crates/hkdf-0.11.0.crate) = 171707
+SHA256 (rust/crates/hkdf-0.12.4.crate) = 7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7
+SIZE (rust/crates/hkdf-0.12.4.crate) = 171163
+SHA256 (rust/crates/hmac-0.11.0.crate) = 2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b
+SIZE (rust/crates/hmac-0.11.0.crate) = 11385
+SHA256 (rust/crates/hmac-0.12.1.crate) = 6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e
+SIZE (rust/crates/hmac-0.12.1.crate) = 42657
+SHA256 (rust/crates/home-0.5.9.crate) = e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5
+SIZE (rust/crates/home-0.5.9.crate) = 8760
+SHA256 (rust/crates/hound-3.5.1.crate) = 62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f
+SIZE (rust/crates/hound-3.5.1.crate) = 39446
+SHA256 (rust/crates/http-0.2.12.crate) = 601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1
+SIZE (rust/crates/http-0.2.12.crate) = 101964
+SHA256 (rust/crates/http-body-0.4.6.crate) = 7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2
+SIZE (rust/crates/http-body-0.4.6.crate) = 10773
+SHA256 (rust/crates/httparse-1.8.0.crate) = d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904
+SIZE (rust/crates/httparse-1.8.0.crate) = 29954
+SHA256 (rust/crates/httpdate-1.0.3.crate) = df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9
+SIZE (rust/crates/httpdate-1.0.3.crate) = 10639
+SHA256 (rust/crates/humansize-2.1.3.crate) = 6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7
+SIZE (rust/crates/humansize-2.1.3.crate) = 11953
+SHA256 (rust/crates/humantime-2.1.0.crate) = 9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4
+SIZE (rust/crates/humantime-2.1.0.crate) = 16749
+SHA256 (rust/crates/hyper-0.14.28.crate) = bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80
+SIZE (rust/crates/hyper-0.14.28.crate) = 197204
+SHA256 (rust/crates/hyper-timeout-0.4.1.crate) = bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1
+SIZE (rust/crates/hyper-timeout-0.4.1.crate) = 13805
+SHA256 (rust/crates/hyperlocal-0.8.0.crate) = 0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c
+SIZE (rust/crates/hyperlocal-0.8.0.crate) = 11626
+SHA256 (rust/crates/iana-time-zone-0.1.60.crate) = e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141
+SIZE (rust/crates/iana-time-zone-0.1.60.crate) = 27074
+SHA256 (rust/crates/iana-time-zone-haiku-0.1.2.crate) = f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f
+SIZE (rust/crates/iana-time-zone-haiku-0.1.2.crate) = 7185
+SHA256 (rust/crates/ident_case-1.0.1.crate) = b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39
+SIZE (rust/crates/ident_case-1.0.1.crate) = 3492
+SHA256 (rust/crates/idna-0.5.0.crate) = 634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6
+SIZE (rust/crates/idna-0.5.0.crate) = 271940
+SHA256 (rust/crates/indexmap-1.9.3.crate) = bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99
+SIZE (rust/crates/indexmap-1.9.3.crate) = 54653
+SHA256 (rust/crates/indexmap-2.2.6.crate) = 168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26
+SIZE (rust/crates/indexmap-2.2.6.crate) = 82420
+SHA256 (rust/crates/inout-0.1.3.crate) = a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5
+SIZE (rust/crates/inout-0.1.3.crate) = 10743
+SHA256 (rust/crates/itertools-0.11.0.crate) = b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57
+SIZE (rust/crates/itertools-0.11.0.crate) = 125074
+SHA256 (rust/crates/itertools-0.12.1.crate) = ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569
+SIZE (rust/crates/itertools-0.12.1.crate) = 137761
+SHA256 (rust/crates/itoa-1.0.10.crate) = b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c
+SIZE (rust/crates/itoa-1.0.10.crate) = 10534
+SHA256 (rust/crates/jni-0.21.1.crate) = 1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97
+SIZE (rust/crates/jni-0.21.1.crate) = 105028
+SHA256 (rust/crates/jni-sys-0.3.0.crate) = 8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130
+SIZE (rust/crates/jni-sys-0.3.0.crate) = 10232
+SHA256 (rust/crates/js-sys-0.3.69.crate) = 29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d
+SIZE (rust/crates/js-sys-0.3.69.crate) = 81083
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/libc-0.2.153.crate) = 9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd
+SIZE (rust/crates/libc-0.2.153.crate) = 740614
+SHA256 (rust/crates/libloading-0.8.3.crate) = 0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19
+SIZE (rust/crates/libloading-0.8.3.crate) = 28480
+SHA256 (rust/crates/libm-0.2.8.crate) = 4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058
+SIZE (rust/crates/libm-0.2.8.crate) = 113450
+SHA256 (rust/crates/libredox-0.0.1.crate) = 85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8
+SIZE (rust/crates/libredox-0.0.1.crate) = 4212
+SHA256 (rust/crates/linux-raw-sys-0.4.13.crate) = 01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c
+SIZE (rust/crates/linux-raw-sys-0.4.13.crate) = 1493855
+SHA256 (rust/crates/log-0.4.21.crate) = 90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c
+SIZE (rust/crates/log-0.4.21.crate) = 43442
+SHA256 (rust/crates/matchit-0.7.3.crate) = 0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94
+SIZE (rust/crates/matchit-0.7.3.crate) = 30372
+SHA256 (rust/crates/memchr-2.7.1.crate) = 523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149
+SIZE (rust/crates/memchr-2.7.1.crate) = 96307
+SHA256 (rust/crates/mime-0.3.17.crate) = 6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a
+SIZE (rust/crates/mime-0.3.17.crate) = 15712
+SHA256 (rust/crates/mime_guess-2.0.4.crate) = 4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef
+SIZE (rust/crates/mime_guess-2.0.4.crate) = 26399
+SHA256 (rust/crates/minimal-lexical-0.2.1.crate) = 68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a
+SIZE (rust/crates/minimal-lexical-0.2.1.crate) = 94841
+SHA256 (rust/crates/miniz_oxide-0.7.2.crate) = 9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7
+SIZE (rust/crates/miniz_oxide-0.7.2.crate) = 55731
+SHA256 (rust/crates/mio-0.8.11.crate) = a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c
+SIZE (rust/crates/mio-0.8.11.crate) = 102983
+SHA256 (rust/crates/multimap-0.8.3.crate) = e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a
+SIZE (rust/crates/multimap-0.8.3.crate) = 13518
+SHA256 (rust/crates/neon-1.0.0.crate) = 7d75440242411c87dc39847b0e33e961ec1f10326a9d8ecf9c1ea64a3b3c13dc
+SIZE (rust/crates/neon-1.0.0.crate) = 86108
+SHA256 (rust/crates/neon-macros-1.0.0.crate) = c6813fde79b646e47e7ad75f480aa80ef76a5d9599e2717407961531169ee38b
+SIZE (rust/crates/neon-macros-1.0.0.crate) = 5886
+SHA256 (rust/crates/nom-7.1.3.crate) = d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a
+SIZE (rust/crates/nom-7.1.3.crate) = 117570
+SHA256 (rust/crates/ntapi-0.4.1.crate) = e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4
+SIZE (rust/crates/ntapi-0.4.1.crate) = 126552
+SHA256 (rust/crates/num-conv-0.1.0.crate) = 51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9
+SIZE (rust/crates/num-conv-0.1.0.crate) = 7444
+SHA256 (rust/crates/num-traits-0.2.18.crate) = da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a
+SIZE (rust/crates/num-traits-0.2.18.crate) = 51930
+SHA256 (rust/crates/num_cpus-1.16.0.crate) = 4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43
+SIZE (rust/crates/num_cpus-1.16.0.crate) = 15713
+SHA256 (rust/crates/num_enum-0.6.1.crate) = 7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1
+SIZE (rust/crates/num_enum-0.6.1.crate) = 17911
+SHA256 (rust/crates/num_enum-0.7.2.crate) = 02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845
+SIZE (rust/crates/num_enum-0.7.2.crate) = 18571
+SHA256 (rust/crates/num_enum_derive-0.6.1.crate) = 96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6
+SIZE (rust/crates/num_enum_derive-0.6.1.crate) = 15403
+SHA256 (rust/crates/num_enum_derive-0.7.2.crate) = 681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b
+SIZE (rust/crates/num_enum_derive-0.7.2.crate) = 17090
+SHA256 (rust/crates/object-0.32.2.crate) = a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441
+SIZE (rust/crates/object-0.32.2.crate) = 286994
+SHA256 (rust/crates/once_cell-1.19.0.crate) = 3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92
+SIZE (rust/crates/once_cell-1.19.0.crate) = 33046
+SHA256 (rust/crates/opaque-debug-0.3.1.crate) = c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381
+SIZE (rust/crates/opaque-debug-0.3.1.crate) = 7066
+SHA256 (rust/crates/partial-default-0.1.0.crate) = 124dc3c21ffb6fb3a0562d129929a8a54998766ef7adc1ba09ddc467d092c14b
+SIZE (rust/crates/partial-default-0.1.0.crate) = 15031
+SHA256 (rust/crates/partial-default-derive-0.1.0.crate) = 7459127d7a18cb202d418e4b7df1103ffd6d82a106e9b2091c250624c2ace70d
+SIZE (rust/crates/partial-default-derive-0.1.0.crate) = 4842
+SHA256 (rust/crates/percent-encoding-2.3.1.crate) = e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e
+SIZE (rust/crates/percent-encoding-2.3.1.crate) = 10235
+SHA256 (rust/crates/petgraph-0.6.4.crate) = e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9
+SIZE (rust/crates/petgraph-0.6.4.crate) = 185895
+SHA256 (rust/crates/pin-project-1.1.5.crate) = b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3
+SIZE (rust/crates/pin-project-1.1.5.crate) = 54214
+SHA256 (rust/crates/pin-project-internal-1.1.5.crate) = 2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965
+SIZE (rust/crates/pin-project-internal-1.1.5.crate) = 28280
+SHA256 (rust/crates/pin-project-lite-0.2.13.crate) = 8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58
+SIZE (rust/crates/pin-project-lite-0.2.13.crate) = 29141
+SHA256 (rust/crates/pin-utils-0.1.0.crate) = 8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184
+SIZE (rust/crates/pin-utils-0.1.0.crate) = 7580
+SHA256 (rust/crates/pkg-config-0.3.30.crate) = d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec
+SIZE (rust/crates/pkg-config-0.3.30.crate) = 20613
+SHA256 (rust/crates/platforms-3.3.0.crate) = 626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c
+SIZE (rust/crates/platforms-3.3.0.crate) = 28955
+SHA256 (rust/crates/plotly-0.8.4.crate) = b7174c07682d8c13cded3fcdf54d9c1d09249b4e821f26e4ab7a60eb39e9783d
+SIZE (rust/crates/plotly-0.8.4.crate) = 1173311
+SHA256 (rust/crates/plotly_derive-0.8.4.crate) = b2fcc11cdbc83c1a49ed868156cc485037e01c612b03128ce98519e5662ede63
+SIZE (rust/crates/plotly_derive-0.8.4.crate) = 4735
+SHA256 (rust/crates/plotly_kaleido-0.8.4.crate) = 40b8d0cd0d7884dbfe9d986d5c2e372dec74db6ffe825666f72fd91017ff685c
+SIZE (rust/crates/plotly_kaleido-0.8.4.crate) = 4283
+SHA256 (rust/crates/polyval-0.6.2.crate) = 9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25
+SIZE (rust/crates/polyval-0.6.2.crate) = 18425
+SHA256 (rust/crates/powerfmt-0.2.0.crate) = 439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391
+SIZE (rust/crates/powerfmt-0.2.0.crate) = 15165
+SHA256 (rust/crates/ppv-lite86-0.2.17.crate) = 5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de
+SIZE (rust/crates/ppv-lite86-0.2.17.crate) = 22242
+SHA256 (rust/crates/prettyplease-0.2.17.crate) = 8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7
+SIZE (rust/crates/prettyplease-0.2.17.crate) = 57713
+SHA256 (rust/crates/proc-macro-crate-1.3.1.crate) = 7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919
+SIZE (rust/crates/proc-macro-crate-1.3.1.crate) = 9678
+SHA256 (rust/crates/proc-macro-crate-3.1.0.crate) = 6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284
+SIZE (rust/crates/proc-macro-crate-3.1.0.crate) = 11084
+SHA256 (rust/crates/proc-macro2-1.0.79.crate) = e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e
+SIZE (rust/crates/proc-macro2-1.0.79.crate) = 47200
+SHA256 (rust/crates/prost-0.12.3.crate) = 146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a
+SIZE (rust/crates/prost-0.12.3.crate) = 29461
+SHA256 (rust/crates/prost-build-0.12.3.crate) = c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2
+SIZE (rust/crates/prost-build-0.12.3.crate) = 39018
+SHA256 (rust/crates/prost-derive-0.12.3.crate) = efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e
+SIZE (rust/crates/prost-derive-0.12.3.crate) = 19603
+SHA256 (rust/crates/prost-types-0.12.3.crate) = 193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e
+SIZE (rust/crates/prost-types-0.12.3.crate) = 42091
+SHA256 (rust/crates/quote-1.0.35.crate) = 291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef
+SIZE (rust/crates/quote-1.0.35.crate) = 28136
+SHA256 (rust/crates/radium-0.7.0.crate) = dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09
+SIZE (rust/crates/radium-0.7.0.crate) = 10906
+SHA256 (rust/crates/rand-0.8.5.crate) = 34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404
+SIZE (rust/crates/rand-0.8.5.crate) = 87113
+SHA256 (rust/crates/rand_chacha-0.3.1.crate) = e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88
+SIZE (rust/crates/rand_chacha-0.3.1.crate) = 15251
+SHA256 (rust/crates/rand_core-0.6.4.crate) = ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c
+SIZE (rust/crates/rand_core-0.6.4.crate) = 22666
+SHA256 (rust/crates/redox_syscall-0.4.1.crate) = 4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa
+SIZE (rust/crates/redox_syscall-0.4.1.crate) = 24858
+SHA256 (rust/crates/redox_users-0.4.4.crate) = a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4
+SIZE (rust/crates/redox_users-0.4.4.crate) = 15438
+SHA256 (rust/crates/regex-1.10.4.crate) = c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c
+SIZE (rust/crates/regex-1.10.4.crate) = 253191
+SHA256 (rust/crates/regex-automata-0.4.6.crate) = 86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea
+SIZE (rust/crates/regex-automata-0.4.6.crate) = 617565
+SHA256 (rust/crates/regex-syntax-0.8.2.crate) = c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f
+SIZE (rust/crates/regex-syntax-0.8.2.crate) = 347228
+SHA256 (rust/crates/relative-path-1.9.2.crate) = e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc
+SIZE (rust/crates/relative-path-1.9.2.crate) = 22420
+SHA256 (rust/crates/ring-0.17.8.crate) = c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d
+SIZE (rust/crates/ring-0.17.8.crate) = 4188554
+SHA256 (rust/crates/rustc-demangle-0.1.23.crate) = d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76
+SIZE (rust/crates/rustc-demangle-0.1.23.crate) = 28970
+SHA256 (rust/crates/rustc_version-0.4.0.crate) = bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366
+SIZE (rust/crates/rustc_version-0.4.0.crate) = 12175
+SHA256 (rust/crates/rustix-0.38.32.crate) = 65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89
+SIZE (rust/crates/rustix-0.38.32.crate) = 376999
+SHA256 (rust/crates/rustls-0.22.3.crate) = 99008d7ad0bbbea527ec27bddbc0e432c5b87d8175178cee68d2eec9c4a1813c
+SIZE (rust/crates/rustls-0.22.3.crate) = 332877
+SHA256 (rust/crates/rustls-pki-types-1.4.0.crate) = 868e20fada228fefaf6b652e00cc73623d54f8171e7352c18bb281571f2d92da
+SIZE (rust/crates/rustls-pki-types-1.4.0.crate) = 29296
+SHA256 (rust/crates/rustls-webpki-0.102.2.crate) = faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610
+SIZE (rust/crates/rustls-webpki-0.102.2.crate) = 196881
+SHA256 (rust/crates/rustversion-1.0.14.crate) = 7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4
+SIZE (rust/crates/rustversion-1.0.14.crate) = 17261
+SHA256 (rust/crates/ryu-1.0.17.crate) = e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1
+SIZE (rust/crates/ryu-1.0.17.crate) = 47537
+SHA256 (rust/crates/same-file-1.0.6.crate) = 93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502
+SIZE (rust/crates/same-file-1.0.6.crate) = 10183
+SHA256 (rust/crates/semver-1.0.22.crate) = 92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca
+SIZE (rust/crates/semver-1.0.22.crate) = 30446
+SHA256 (rust/crates/send_wrapper-0.6.0.crate) = cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73
+SIZE (rust/crates/send_wrapper-0.6.0.crate) = 10519
+SHA256 (rust/crates/serde-1.0.197.crate) = 3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2
+SIZE (rust/crates/serde-1.0.197.crate) = 77087
+SHA256 (rust/crates/serde_derive-1.0.197.crate) = 7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b
+SIZE (rust/crates/serde_derive-1.0.197.crate) = 55771
+SHA256 (rust/crates/serde_json-1.0.114.crate) = c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0
+SIZE (rust/crates/serde_json-1.0.114.crate) = 146986
+SHA256 (rust/crates/serde_repr-0.1.18.crate) = 0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb
+SIZE (rust/crates/serde_repr-0.1.18.crate) = 9974
+SHA256 (rust/crates/serde_urlencoded-0.7.1.crate) = d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd
+SIZE (rust/crates/serde_urlencoded-0.7.1.crate) = 12822
+SHA256 (rust/crates/serde_with-2.3.3.crate) = 07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe
+SIZE (rust/crates/serde_with-2.3.3.crate) = 123415
+SHA256 (rust/crates/serde_with-3.7.0.crate) = ee80b0e361bbf88fd2f6e242ccd19cfda072cb0faa6ae694ecee08199938569a
+SIZE (rust/crates/serde_with-3.7.0.crate) = 140905
+SHA256 (rust/crates/serde_with_macros-2.3.3.crate) = 881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f
+SIZE (rust/crates/serde_with_macros-2.3.3.crate) = 28198
+SHA256 (rust/crates/serde_with_macros-3.7.0.crate) = 6561dc161a9224638a31d876ccdfefbc1df91d3f3a8342eddb35f055d48c7655
+SIZE (rust/crates/serde_with_macros-3.7.0.crate) = 30834
+SHA256 (rust/crates/sha1-0.10.6.crate) = e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba
+SIZE (rust/crates/sha1-0.10.6.crate) = 13517
+SHA256 (rust/crates/sha2-0.9.9.crate) = 4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800
+SIZE (rust/crates/sha2-0.9.9.crate) = 22247
+SHA256 (rust/crates/sha2-0.10.8.crate) = 793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8
+SIZE (rust/crates/sha2-0.10.8.crate) = 26357
+SHA256 (rust/crates/signal-hook-registry-1.4.1.crate) = d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1
+SIZE (rust/crates/signal-hook-registry-1.4.1.crate) = 17987
+SHA256 (rust/crates/slab-0.4.9.crate) = 8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67
+SIZE (rust/crates/slab-0.4.9.crate) = 17108
+SHA256 (rust/crates/smallvec-1.13.2.crate) = 3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67
+SIZE (rust/crates/smallvec-1.13.2.crate) = 35216
+SHA256 (rust/crates/socket2-0.5.6.crate) = 05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871
+SIZE (rust/crates/socket2-0.5.6.crate) = 55270
+SHA256 (rust/crates/spin-0.9.8.crate) = 6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67
+SIZE (rust/crates/spin-0.9.8.crate) = 38958
+SHA256 (rust/crates/static_assertions-1.1.0.crate) = a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f
+SIZE (rust/crates/static_assertions-1.1.0.crate) = 18480
+SHA256 (rust/crates/strsim-0.10.0.crate) = 73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623
+SIZE (rust/crates/strsim-0.10.0.crate) = 11355
+SHA256 (rust/crates/strsim-0.11.0.crate) = 5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01
+SIZE (rust/crates/strsim-0.11.0.crate) = 13710
+SHA256 (rust/crates/subtle-2.5.0.crate) = 81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc
+SIZE (rust/crates/subtle-2.5.0.crate) = 13909
+SHA256 (rust/crates/syn-1.0.109.crate) = 72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237
+SIZE (rust/crates/syn-1.0.109.crate) = 237611
+SHA256 (rust/crates/syn-2.0.55.crate) = 002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0
+SIZE (rust/crates/syn-2.0.55.crate) = 254901
+SHA256 (rust/crates/syn-mid-0.6.0.crate) = b5dc35bb08dd1ca3dfb09dce91fd2d13294d6711c88897d9a9d60acf39bce049
+SIZE (rust/crates/syn-mid-0.6.0.crate) = 12915
+SHA256 (rust/crates/sync_wrapper-0.1.2.crate) = 2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160
+SIZE (rust/crates/sync_wrapper-0.1.2.crate) = 6933
+SHA256 (rust/crates/sysinfo-0.29.11.crate) = cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666
+SIZE (rust/crates/sysinfo-0.29.11.crate) = 156557
+SHA256 (rust/crates/tap-1.0.1.crate) = 55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369
+SIZE (rust/crates/tap-1.0.1.crate) = 11316
+SHA256 (rust/crates/tempfile-3.10.1.crate) = 85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1
+SIZE (rust/crates/tempfile-3.10.1.crate) = 33653
+SHA256 (rust/crates/thiserror-1.0.58.crate) = 03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297
+SIZE (rust/crates/thiserror-1.0.58.crate) = 21025
+SHA256 (rust/crates/thiserror-impl-1.0.58.crate) = c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7
+SIZE (rust/crates/thiserror-impl-1.0.58.crate) = 15645
+SHA256 (rust/crates/time-0.1.45.crate) = 1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a
+SIZE (rust/crates/time-0.1.45.crate) = 28911
+SHA256 (rust/crates/time-0.3.34.crate) = c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749
+SIZE (rust/crates/time-0.3.34.crate) = 118430
+SHA256 (rust/crates/time-core-0.1.2.crate) = ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3
+SIZE (rust/crates/time-core-0.1.2.crate) = 7191
+SHA256 (rust/crates/time-macros-0.2.17.crate) = 7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774
+SIZE (rust/crates/time-macros-0.2.17.crate) = 24443
+SHA256 (rust/crates/tinyvec-1.6.0.crate) = 87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50
+SIZE (rust/crates/tinyvec-1.6.0.crate) = 45991
+SHA256 (rust/crates/tinyvec_macros-0.1.1.crate) = 1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20
+SIZE (rust/crates/tinyvec_macros-0.1.1.crate) = 5865
+SHA256 (rust/crates/tokio-1.36.0.crate) = 61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931
+SIZE (rust/crates/tokio-1.36.0.crate) = 757286
+SHA256 (rust/crates/tokio-io-timeout-1.2.0.crate) = 30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf
+SIZE (rust/crates/tokio-io-timeout-1.2.0.crate) = 8993
+SHA256 (rust/crates/tokio-macros-2.2.0.crate) = 5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b
+SIZE (rust/crates/tokio-macros-2.2.0.crate) = 11520
+SHA256 (rust/crates/tokio-stream-0.1.15.crate) = 267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af
+SIZE (rust/crates/tokio-stream-0.1.15.crate) = 36284
+SHA256 (rust/crates/tokio-util-0.7.10.crate) = 5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15
+SIZE (rust/crates/tokio-util-0.7.10.crate) = 110508
+SHA256 (rust/crates/toml_datetime-0.6.5.crate) = 3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1
+SIZE (rust/crates/toml_datetime-0.6.5.crate) = 10910
+SHA256 (rust/crates/toml_edit-0.19.15.crate) = 1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421
+SIZE (rust/crates/toml_edit-0.19.15.crate) = 95324
+SHA256 (rust/crates/toml_edit-0.21.1.crate) = 6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1
+SIZE (rust/crates/toml_edit-0.21.1.crate) = 101661
+SHA256 (rust/crates/tonic-0.11.0.crate) = 76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13
+SIZE (rust/crates/tonic-0.11.0.crate) = 92841
+SHA256 (rust/crates/tonic-build-0.11.0.crate) = be4ef6dd70a610078cb4e338a0f79d06bc759ff1b22d2120c2ff02ae264ba9c2
+SIZE (rust/crates/tonic-build-0.11.0.crate) = 17932
+SHA256 (rust/crates/tower-0.4.13.crate) = b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c
+SIZE (rust/crates/tower-0.4.13.crate) = 106906
+SHA256 (rust/crates/tower-layer-0.3.2.crate) = c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0
+SIZE (rust/crates/tower-layer-0.3.2.crate) = 6023
+SHA256 (rust/crates/tower-service-0.3.2.crate) = b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52
+SIZE (rust/crates/tower-service-0.3.2.crate) = 6847
+SHA256 (rust/crates/tracing-0.1.40.crate) = c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef
+SIZE (rust/crates/tracing-0.1.40.crate) = 79459
+SHA256 (rust/crates/tracing-attributes-0.1.27.crate) = 34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7
+SIZE (rust/crates/tracing-attributes-0.1.27.crate) = 32241
+SHA256 (rust/crates/tracing-core-0.1.32.crate) = c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54
+SIZE (rust/crates/tracing-core-0.1.32.crate) = 61221
+SHA256 (rust/crates/try-lock-0.2.5.crate) = e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b
+SIZE (rust/crates/try-lock-0.2.5.crate) = 4314
+SHA256 (rust/crates/typenum-1.17.0.crate) = 42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825
+SIZE (rust/crates/typenum-1.17.0.crate) = 42849
+SHA256 (rust/crates/unicase-2.7.0.crate) = f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89
+SIZE (rust/crates/unicase-2.7.0.crate) = 23783
+SHA256 (rust/crates/unicode-bidi-0.3.15.crate) = 08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75
+SIZE (rust/crates/unicode-bidi-0.3.15.crate) = 56811
+SHA256 (rust/crates/unicode-ident-1.0.12.crate) = 3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b
+SIZE (rust/crates/unicode-ident-1.0.12.crate) = 42168
+SHA256 (rust/crates/unicode-normalization-0.1.23.crate) = a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5
+SIZE (rust/crates/unicode-normalization-0.1.23.crate) = 122649
+SHA256 (rust/crates/universal-hash-0.5.1.crate) = fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea
+SIZE (rust/crates/universal-hash-0.5.1.crate) = 9146
+SHA256 (rust/crates/untrusted-0.9.0.crate) = 8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1
+SIZE (rust/crates/untrusted-0.9.0.crate) = 14447
+SHA256 (rust/crates/ureq-2.9.6.crate) = 11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35
+SIZE (rust/crates/ureq-2.9.6.crate) = 113677
+SHA256 (rust/crates/url-2.5.0.crate) = 31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633
+SIZE (rust/crates/url-2.5.0.crate) = 78605
+SHA256 (rust/crates/utf8parse-0.2.1.crate) = 711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a
+SIZE (rust/crates/utf8parse-0.2.1.crate) = 13435
+SHA256 (rust/crates/uuid-1.8.0.crate) = a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0
+SIZE (rust/crates/uuid-1.8.0.crate) = 44043
+SHA256 (rust/crates/version_check-0.9.4.crate) = 49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f
+SIZE (rust/crates/version_check-0.9.4.crate) = 14895
+SHA256 (rust/crates/walkdir-2.5.0.crate) = 29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b
+SIZE (rust/crates/walkdir-2.5.0.crate) = 23951
+SHA256 (rust/crates/want-0.3.1.crate) = bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e
+SIZE (rust/crates/want-0.3.1.crate) = 6398
+SHA256 (rust/crates/wasi-0.10.0+wasi-snapshot-preview1.crate) = 1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f
+SIZE (rust/crates/wasi-0.10.0+wasi-snapshot-preview1.crate) = 26964
+SHA256 (rust/crates/wasi-0.11.0+wasi-snapshot-preview1.crate) = 9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423
+SIZE (rust/crates/wasi-0.11.0+wasi-snapshot-preview1.crate) = 28131
+SHA256 (rust/crates/wasm-bindgen-0.2.92.crate) = 4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8
+SIZE (rust/crates/wasm-bindgen-0.2.92.crate) = 184119
+SHA256 (rust/crates/wasm-bindgen-backend-0.2.92.crate) = 614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da
+SIZE (rust/crates/wasm-bindgen-backend-0.2.92.crate) = 28348
+SHA256 (rust/crates/wasm-bindgen-macro-0.2.92.crate) = a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726
+SIZE (rust/crates/wasm-bindgen-macro-0.2.92.crate) = 13835
+SHA256 (rust/crates/wasm-bindgen-macro-support-0.2.92.crate) = e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7
+SIZE (rust/crates/wasm-bindgen-macro-support-0.2.92.crate) = 20092
+SHA256 (rust/crates/wasm-bindgen-shared-0.2.92.crate) = af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96
+SIZE (rust/crates/wasm-bindgen-shared-0.2.92.crate) = 7263
+SHA256 (rust/crates/webpki-roots-0.26.1.crate) = b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009
+SIZE (rust/crates/webpki-roots-0.26.1.crate) = 249748
+SHA256 (rust/crates/which-4.4.2.crate) = 87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7
+SIZE (rust/crates/which-4.4.2.crate) = 15953
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-util-0.1.6.crate) = f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596
+SIZE (rust/crates/winapi-util-0.1.6.crate) = 12234
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-core-0.52.0.crate) = 33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9
+SIZE (rust/crates/windows-core-0.52.0.crate) = 42154
+SHA256 (rust/crates/windows-sys-0.45.0.crate) = 75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0
+SIZE (rust/crates/windows-sys-0.45.0.crate) = 2568659
+SHA256 (rust/crates/windows-sys-0.48.0.crate) = 677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9
+SIZE (rust/crates/windows-sys-0.48.0.crate) = 2628884
+SHA256 (rust/crates/windows-sys-0.52.0.crate) = 282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d
+SIZE (rust/crates/windows-sys-0.52.0.crate) = 2576877
+SHA256 (rust/crates/windows-targets-0.42.2.crate) = 8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071
+SIZE (rust/crates/windows-targets-0.42.2.crate) = 5492
+SHA256 (rust/crates/windows-targets-0.48.5.crate) = 9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c
+SIZE (rust/crates/windows-targets-0.48.5.crate) = 6904
+SHA256 (rust/crates/windows-targets-0.52.4.crate) = 7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b
+SIZE (rust/crates/windows-targets-0.52.4.crate) = 6310
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.42.2.crate) = 597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8
+SIZE (rust/crates/windows_aarch64_gnullvm-0.42.2.crate) = 364071
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.48.5.crate) = 2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8
+SIZE (rust/crates/windows_aarch64_gnullvm-0.48.5.crate) = 418492
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.52.4.crate) = bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9
+SIZE (rust/crates/windows_aarch64_gnullvm-0.52.4.crate) = 433373
+SHA256 (rust/crates/windows_aarch64_msvc-0.42.2.crate) = e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43
+SIZE (rust/crates/windows_aarch64_msvc-0.42.2.crate) = 666981
+SHA256 (rust/crates/windows_aarch64_msvc-0.48.5.crate) = dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc
+SIZE (rust/crates/windows_aarch64_msvc-0.48.5.crate) = 798483
+SHA256 (rust/crates/windows_aarch64_msvc-0.52.4.crate) = da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675
+SIZE (rust/crates/windows_aarch64_msvc-0.52.4.crate) = 828055
+SHA256 (rust/crates/windows_i686_gnu-0.42.2.crate) = c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f
+SIZE (rust/crates/windows_i686_gnu-0.42.2.crate) = 736236
+SHA256 (rust/crates/windows_i686_gnu-0.48.5.crate) = a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e
+SIZE (rust/crates/windows_i686_gnu-0.48.5.crate) = 844891
+SHA256 (rust/crates/windows_i686_gnu-0.52.4.crate) = b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3
+SIZE (rust/crates/windows_i686_gnu-0.52.4.crate) = 875736
+SHA256 (rust/crates/windows_i686_msvc-0.42.2.crate) = 44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060
+SIZE (rust/crates/windows_i686_msvc-0.42.2.crate) = 724951
+SHA256 (rust/crates/windows_i686_msvc-0.48.5.crate) = 8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406
+SIZE (rust/crates/windows_i686_msvc-0.48.5.crate) = 864300
+SHA256 (rust/crates/windows_i686_msvc-0.52.4.crate) = 1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02
+SIZE (rust/crates/windows_i686_msvc-0.52.4.crate) = 895530
+SHA256 (rust/crates/windows_x86_64_gnu-0.42.2.crate) = 8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36
+SIZE (rust/crates/windows_x86_64_gnu-0.42.2.crate) = 699373
+SHA256 (rust/crates/windows_x86_64_gnu-0.48.5.crate) = 53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e
+SIZE (rust/crates/windows_x86_64_gnu-0.48.5.crate) = 801619
+SHA256 (rust/crates/windows_x86_64_gnu-0.52.4.crate) = 5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03
+SIZE (rust/crates/windows_x86_64_gnu-0.52.4.crate) = 831627
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.42.2.crate) = 26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3
+SIZE (rust/crates/windows_x86_64_gnullvm-0.42.2.crate) = 364068
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.48.5.crate) = 0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc
+SIZE (rust/crates/windows_x86_64_gnullvm-0.48.5.crate) = 418486
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.52.4.crate) = 77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177
+SIZE (rust/crates/windows_x86_64_gnullvm-0.52.4.crate) = 433358
+SHA256 (rust/crates/windows_x86_64_msvc-0.42.2.crate) = 9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0
+SIZE (rust/crates/windows_x86_64_msvc-0.42.2.crate) = 666936
+SHA256 (rust/crates/windows_x86_64_msvc-0.48.5.crate) = ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538
+SIZE (rust/crates/windows_x86_64_msvc-0.48.5.crate) = 798412
+SHA256 (rust/crates/windows_x86_64_msvc-0.52.4.crate) = 32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8
+SIZE (rust/crates/windows_x86_64_msvc-0.52.4.crate) = 828019
+SHA256 (rust/crates/winnow-0.5.40.crate) = f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876
+SIZE (rust/crates/winnow-0.5.40.crate) = 159316
+SHA256 (rust/crates/wyz-0.5.1.crate) = 05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed
+SIZE (rust/crates/wyz-0.5.1.crate) = 18790
+SHA256 (rust/crates/x25519-dalek-2.0.1.crate) = c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277
+SIZE (rust/crates/x25519-dalek-2.0.1.crate) = 87820
+SHA256 (rust/crates/zeroize-1.7.0.crate) = 525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d
+SIZE (rust/crates/zeroize-1.7.0.crate) = 19039
+SHA256 (rust/crates/zeroize_derive-1.4.2.crate) = ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69
+SIZE (rust/crates/zeroize_derive-1.4.2.crate) = 11141
+SHA256 (rust/crates/zip-0.5.13.crate) = 93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815
+SIZE (rust/crates/zip-0.5.13.crate) = 48237
+SHA256 (signalapp-libsignal-v0.37.0_GH0.tar.gz) = 7943a8ed8f6f75cae63d9de9200649fb62b84beb796260f75f85990f013df4d4
+SIZE (signalapp-libsignal-v0.37.0_GH0.tar.gz) = 1067773
+SHA256 (signalapp-curve25519-dalek-signal-curve25519-4.1.1_GH0.tar.gz) = f129765413794896efd19667acda3645b9cd17b01181700fd781df68b584ec3d
+SIZE (signalapp-curve25519-dalek-signal-curve25519-4.1.1_GH0.tar.gz) = 801981
+SHA256 (signalapp-ringrtc-v2.39.3_GH0.tar.gz) = bd9c7a0325e4198e823a05f79bc681c73bb813ad78377fb342e959c776eea7ee
+SIZE (signalapp-ringrtc-v2.39.3_GH0.tar.gz) = 811359
+SHA256 (signalapp-webrtc-6261d_GH0.tar.gz) = bdd63f731f9e9e6bbe31cc109cc0c74918410f2cb886878e2e5c4904d6f1f5d1
+SIZE (signalapp-webrtc-6261d_GH0.tar.gz) = 39777153
diff --git a/multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm b/multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm
new file mode 100644
index 000000000000..492bd902dbb9
--- /dev/null
+++ b/multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm
@@ -0,0 +1,11 @@
+--- src/webrtc/src/third_party/nasm/config/config-linux.h.orig 2021-04-14 18:43:05 UTC
++++ src/webrtc/src/third_party/nasm/config/config-linux.h
+@@ -336,7 +336,7 @@
+ #define HAVE_MEMORY_H 1
+
+ /* Define to 1 if you have the `mempcpy' function. */
+-#define HAVE_MEMPCPY 1
++/* #undef HAVE_MEMPCPY */
+
+ /* Define to 1 if you have a working `mmap' system call. */
+ #define HAVE_MMAP 1
diff --git a/multimedia/ringrtc/files/patch-src_rust_build.rs b/multimedia/ringrtc/files/patch-src_rust_build.rs
new file mode 100644
index 000000000000..bc67ceba6d2e
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_rust_build.rs
@@ -0,0 +1,13 @@
+--- src/rust/build.rs.orig 2021-03-15 17:47:59 UTC
++++ src/rust/build.rs
+@@ -21,7 +21,9 @@ fn main() {
+ println!("cargo:rustc-link-search=native=src/webrtc/src/out/Release/obj/",);
+ }
+
+- if cfg!(target_os = "macos") {
++ if cfg!(target_os = "freebsd") {
++ println!("cargo:rustc-link-lib=dylib=c++");
++ } else if cfg!(target_os = "macos") {
+ println!("cargo:rustc-link-lib=dylib=c++");
+ println!("cargo:rustc-link-lib=framework=Foundation");
+ println!("cargo:rustc-link-lib=framework=CoreAudio");
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn
new file mode 100644
index 000000000000..3cd0b0a1eb19
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn
@@ -0,0 +1,23 @@
+--- src/webrtc/src/BUILD.gn.orig 2021-03-15 15:09:17 UTC
++++ src/webrtc/src/BUILD.gn
+@@ -188,6 +188,9 @@ config("common_inherited_config") {
+ if (is_linux || is_chromeos) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
+@@ -431,10 +434,6 @@ config("common_config") {
+ "/U_UNICODE",
+ ]
+ }
+-}
+-
+-config("common_objc") {
+- frameworks = [ "Foundation.framework" ]
+ }
+
+ if (!build_with_chromium) {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn
new file mode 100644
index 000000000000..2d1d7d5fec77
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn
@@ -0,0 +1,22 @@
+--- src/webrtc/src/build/config/BUILD.gn.orig 2021-05-26 12:26:11 UTC
++++ src/webrtc/src/build/config/BUILD.gn
+@@ -214,13 +214,17 @@ config("default_libs") {
+ # Targets should choose to explicitly link frameworks they require. Since
+ # linking can have run-time side effects, nothing should be listed here.
+ libs = []
+- } else if (is_linux || is_chromeos) {
++ } else if ((is_linux && !is_bsd) || is_chromeos) {
+ libs = [
+ "dl",
+ "pthread",
+ "rt",
+ ]
+- }
++ } else if (is_bsd) {
++ libs = [
++ "pthread",
++ ]
++ }
+ }
+
+ group("common_deps") {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..bd2e44be0118
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn
@@ -0,0 +1,45 @@
+--- src/webrtc/src/build/config/BUILDCONFIG.gn.orig 2021-11-15 18:52:18 UTC
++++ src/webrtc/src/build/config/BUILDCONFIG.gn
+@@ -139,7 +139,8 @@ declare_args() {
+ is_official_build = false
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "openbsd" ||
++ current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64" &&
+@@ -228,6 +229,10 @@ if (host_toolchain == "") {
+ host_toolchain = "//build/toolchain/aix:$host_cpu"
+ } else if (host_os == "zos") {
+ host_toolchain = "//build/toolchain/zos:$host_cpu"
++ } else if (host_os == "openbsd") {
++ host_toolchain = "//build/toolchain/openbsd:clang_$host_cpu"
++ } else if (host_os == "freebsd") {
++ host_toolchain = "//build/toolchain/freebsd:clang_$host_cpu"
+ } else {
+ assert(false, "Unsupported host_os: $host_os")
+ }
+@@ -271,6 +276,8 @@ if (target_os == "android") {
+ _default_toolchain = "//build/toolchain/aix:$target_cpu"
+ } else if (target_os == "zos") {
+ _default_toolchain = "//build/toolchain/zos:$target_cpu"
++} else if (target_os == "openbsd" || target_os == "freebsd") {
++ _default_toolchain = host_toolchain
+ } else {
+ assert(false, "Unsupported target_os: $target_os")
+ }
+@@ -305,7 +312,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "linux"
++is_linux = current_os == "linux" || current_os == "openbsd" ||
++ current_os == "freebsd"
++is_openbsd = current_os == "openbsd"
++is_freebsd = current_os == "freebsd"
++is_bsd = current_os == "openbsd" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..157729e9eb0a
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn
@@ -0,0 +1,145 @@
+--- src/webrtc/src/build/config/compiler/BUILD.gn.orig 2022-02-16 12:34:12 UTC
++++ src/webrtc/src/build/config/compiler/BUILD.gn
+@@ -204,7 +204,7 @@ declare_args() {
+ # This greatly reduces the size of debug builds, at the cost of
+ # debugging information which is required by some specialized
+ # debugging tools.
+- simple_template_names = is_clang && !is_nacl && !is_win && !is_apple
++ simple_template_names = is_clang && !is_nacl && !is_win && !is_apple && !is_bsd
+ }
+
+ declare_args() {
+@@ -268,13 +268,16 @@ config("no_unresolved_symbols") {
+ # Compiler instrumentation can introduce dependencies in DSOs to symbols in
+ # the executable they are loaded into, so they are unresolved at link-time.
+ config("no_unresolved_symbols") {
+- if (!using_sanitizer &&
++ if (!using_sanitizer && !is_bsd &&
+ (is_linux || is_chromeos || is_android || is_fuchsia)) {
+ ldflags = [
+ "-Wl,-z,defs",
+ "-Wl,--as-needed",
+ ]
+ }
++ if (current_cpu == "x86" && is_openbsd) {
++ ldflags = [ "-Wl,-z,notext" ]
++ }
+ }
+
+ # compiler ---------------------------------------------------------------------
+@@ -520,6 +523,10 @@ config("compiler") {
+ }
+ }
+
++ if (is_openbsd) {
++ ldflags += [ "-Wl,-z,wxneeded" ]
++ }
++
+ # Linux-specific compiler flags setup.
+ # ------------------------------------
+ if (use_gold) {
+@@ -595,7 +602,7 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && current_os != "zos") {
++ if (is_clang && !is_nacl && current_os != "zos" && !is_bsd) {
+ cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+ if (save_reproducers_on_lld_crash && use_lld) {
+ ldflags += [
+@@ -1174,7 +1181,7 @@ config("compiler_cpu_abi") {
+ ]
+ }
+ } else if (current_cpu == "arm") {
+- if (is_clang && !is_android && !is_nacl &&
++ if (is_clang && !is_android && !is_nacl && !is_bsd &&
+ !(is_chromeos_lacros && is_chromeos_device)) {
+ cflags += [ "--target=arm-linux-gnueabihf" ]
+ ldflags += [ "--target=arm-linux-gnueabihf" ]
+@@ -1189,7 +1196,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia &&
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd &&
+ !(is_chromeos_lacros && is_chromeos_device)) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+@@ -1524,7 +1531,7 @@ config("compiler_deterministic") {
+ # different build directory like "out/feature_a" and "out/feature_b" if
+ # we build same files with same compile flag.
+ # Other paths are already given in relative, no need to normalize them.
+- if (is_nacl) {
++ if (is_nacl || is_bsd) {
+ # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
+ cflags += [
+ "-Xclang",
+@@ -1576,7 +1583,7 @@ config("clang_revision") {
+ }
+
+ config("clang_revision") {
+- if (is_clang && clang_base_path == default_clang_base_path) {
++ if (is_clang && !is_bsd && clang_base_path == default_clang_base_path) {
+ update_args = [
+ "--print-revision",
+ "--verify-version=$clang_version",
+@@ -1874,12 +1881,9 @@ config("default_warnings") {
+
+ # TODO(crbug.com/1494809): Evaluate and possibly enable.
+ "-Wno-vla-extension",
+-
+- # TODO(https://crbug.com/1490607): Fix and re-enable.
+- "-Wno-thread-safety-reference-return",
+ ]
+
+- if (!is_nacl) {
++ if (!is_nacl && !is_bsd) {
+ cflags_cc += [
+ # TODO(https://crbug.com/1513724): Fix and re-enable.
+ "-Wno-c++11-narrowing-const-reference",
+@@ -2018,7 +2022,7 @@ config("chromium_code") {
+ ]
+
+ # Thread safety analysis is broken under nacl: https://crbug.com/982423.
+- if (!is_nacl || is_nacl_saigo) {
++ if (!is_bsd && (!is_nacl || is_nacl_saigo)) {
+ cflags += [
+ # Thread safety analysis. See base/thread_annotations.h and
+ # https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
+@@ -2067,7 +2071,7 @@ config("no_chromium_code") {
+ # third-party libraries.
+ "-Wno-c++11-narrowing",
+ ]
+- if (!is_nacl) {
++ if (!is_nacl && !is_freebsd) {
+ cflags += [
+ # Disabled for similar reasons as -Wunused-variable.
+ "-Wno-unused-but-set-variable",
+@@ -2596,7 +2600,7 @@ config("afdo") {
+ # There are some targeted places that AFDO regresses, so we provide a separate
+ # config to allow AFDO to be disabled per-target.
+ config("afdo") {
+- if (is_clang) {
++ if (is_clang && !is_bsd) {
+ cflags = []
+ if (clang_emit_debug_info_for_profiling) {
+ # Add the following flags to generate debug info for profiling.
+@@ -2623,7 +2627,7 @@ config("afdo") {
+ cflags += [ "-Wno-backend-plugin" ]
+ inputs = [ _clang_sample_profile ]
+ }
+- } else if (auto_profile_path != "" && is_a_target_toolchain) {
++ } else if (auto_profile_path != "" && is_a_target_toolchain && !is_bsd) {
+ cflags = [ "-fauto-profile=${auto_profile_path}" ]
+ inputs = [ auto_profile_path ]
+ }
+@@ -2787,7 +2791,8 @@ config("symbols") {
+ configs += [ "//build/config:compress_debug_sections" ]
+ }
+
+- if (is_clang && (!is_nacl || is_nacl_saigo) && current_os != "zos") {
++ if (is_clang && (!is_nacl || is_nacl_saigo) && current_os != "zos" &&
++ !is_bsd) {
+ if (is_apple) {
+ # TODO(https://crbug.com/1050118): Investigate missing debug info on mac.
+ # Make sure we don't use constructor homing on mac.
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..42353cb83d4e
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/config/compiler/compiler.gni.orig 2021-11-15 18:52:18 UTC
++++ src/webrtc/src/build/config/compiler/compiler.gni
+@@ -230,7 +230,7 @@ declare_args() {
+
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+- use_gold = !use_lld && !(is_castos &&
++ use_gold = !is_bsd && !use_lld && !(is_castos &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ (((is_linux || is_chromeos_lacros) &&
+ (current_cpu == "x64" || current_cpu == "x86" ||
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni
new file mode 100644
index 000000000000..fe60d15c1686
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/config/features.gni.orig 2020-09-19 19:50:44 UTC
++++ src/webrtc/src/build/config/features.gni
+@@ -31,7 +31,7 @@ declare_args() {
+ proprietary_codecs = is_chrome_branded || is_castos || is_cast_android
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = (is_linux && !is_castos) || is_chromeos
++ use_udev = !is_bsd && ((is_linux && !is_castos) || is_chromeos)
+
+ use_dbus = is_linux || is_chromeos
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..c0f46decc5a2
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- src/webrtc/src/build/config/freetype/freetype.gni.orig 2019-03-18 08:59:45 UTC
++++ src/webrtc/src/build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+ # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+ # System FreeType configurations other than as described WILL INTRODUCE TEXT
+ # RENDERING AND SECURITY REGRESSIONS.
+- use_system_freetype = false
++ use_system_freetype = true
+ }
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..82d156e8558d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/config/linux/BUILD.gn.orig 2021-10-13 07:49:03 UTC
++++ src/webrtc/src/build/config/linux/BUILD.gn
+@@ -41,7 +41,7 @@ config("runtime_library") {
+ }
+
+ if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..7890572bd313
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/config/linux/pkg-config.py.orig 2019-07-24 18:58:02 UTC
++++ src/webrtc/src/build/config/linux/pkg-config.py
+@@ -108,7 +108,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if not sys.platform.startswith(tuple(['linux', 'openbsd', 'freebsd'])):
+ print("[[],[],[],[],[]]")
+ return 0
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni
new file mode 100644
index 000000000000..49235361b682
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni
@@ -0,0 +1,15 @@
+--- src/webrtc/src/build/config/sysroot.gni.orig 2020-05-13 18:39:36 UTC
++++ src/webrtc/src/build/config/sysroot.gni
+@@ -19,10 +19,10 @@ declare_args() {
+
+ # Controls default is_linux sysroot. If set to true, and sysroot
+ # is empty, default sysroot is calculated.
+- use_sysroot =
++ use_sysroot = !is_bsd && (
+ current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
+ current_cpu == "arm64" || current_cpu == "mipsel" ||
+- current_cpu == "mips64el" || (current_cpu == "riscv64" && is_android)
++ current_cpu == "mips64el" || (current_cpu == "riscv64" && is_android))
+ }
+
+ if (sysroot == "") {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py
new file mode 100644
index 000000000000..9df4617d9ed2
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/detect_host_arch.py.orig 2019-07-24 18:58:02 UTC
++++ src/webrtc/src/build/detect_host_arch.py
+@@ -20,6 +20,8 @@ def HostArch():
+ host_arch = 'ia32'
+ elif host_arch in ['x86_64', 'amd64']:
+ host_arch = 'x64'
++ elif host_arch.startswith('arm64'):
++ host_arch = 'arm64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('aarch64'):
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py
new file mode 100644
index 000000000000..63992f0c889d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/gn_run_binary.py.orig 2019-07-24 18:58:02 UTC
++++ src/webrtc/src/build/gn_run_binary.py
+@@ -23,7 +23,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome","LD_LIBRARY_PATH":"${WRKSRC}/out/Release"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map
new file mode 100644
index 000000000000..c3f97aeafa2c
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map
@@ -0,0 +1,13 @@
+--- src/webrtc/src/build/linux/chrome.map.orig 2021-05-01 21:15:31 UTC
++++ src/webrtc/src/build/linux/chrome.map
+@@ -20,6 +20,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ aligned_alloc;
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..b8a4d07953ef
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- src/webrtc/src/build/linux/libpci/BUILD.gn.orig 2019-03-11 22:00:52 UTC
++++ src/webrtc/src/build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..81f57ef449f9
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- src/webrtc/src/build/linux/unbundle/libusb.gn.orig 2019-03-17 01:47:13 UTC
++++ src/webrtc/src/build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..64f971e383a2
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- src/webrtc/src/build/linux/unbundle/replace_gn_files.py.orig 2021-11-15 18:52:18 UTC
++++ src/webrtc/src/build/linux/unbundle/replace_gn_files.py
+@@ -56,6 +56,7 @@ REPLACEMENTS = {
+ 'libevent': 'third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libsecret' : 'third_party/libsecret/BUILD.gn',
+ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_freebsd_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_freebsd_BUILD.gn
new file mode 100644
index 000000000000..c2f3f8e28d2d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_freebsd_BUILD.gn
@@ -0,0 +1,69 @@
+--- src/webrtc/src/build/toolchain/freebsd/BUILD.gn.orig 2022-02-07 13:39:41 UTC
++++ src/webrtc/src/build/toolchain/freebsd/BUILD.gn
+@@ -0,0 +1,66 @@
++# Copyright 2013 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/sysroot.gni")
++import("//build/toolchain/gcc_toolchain.gni")
++
++clang_toolchain("clang_x86") {
++ toolchain_args = {
++ current_cpu = "x86"
++ current_os = "freebsd"
++ }
++}
++
++gcc_toolchain("x86") {
++ cc = "gcc"
++ cxx = "g++"
++
++ readelf = "readelf"
++ nm = "nm"
++ ar = "ar"
++ ld = cxx
++
++ toolchain_args = {
++ current_cpu = "x86"
++ current_os = "freebsd"
++ is_clang = false
++ }
++}
++
++clang_toolchain("clang_x64") {
++ toolchain_args = {
++ current_cpu = "x64"
++ current_os = "freebsd"
++ }
++}
++
++gcc_toolchain("x64") {
++ cc = "gcc"
++ cxx = "g++"
++
++ readelf = "readelf"
++ nm = "nm"
++ ar = "ar"
++ ld = cxx
++
++ toolchain_args = {
++ current_cpu = "x64"
++ current_os = "freebsd"
++ is_clang = false
++ }
++}
++
++clang_toolchain("clang_arm") {
++ toolchain_args = {
++ current_cpu = "arm64"
++ current_os = "freebsd"
++ }
++}
++
++clang_toolchain("clang_arm64") {
++ toolchain_args = {
++ current_cpu = "arm64"
++ current_os = "freebsd"
++ }
++}
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..e3def33f6fcb
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,44 @@
+--- src/webrtc/src/build/toolchain/gcc_toolchain.gni.orig 2022-02-16 12:34:12 UTC
++++ src/webrtc/src/build/toolchain/gcc_toolchain.gni
+@@ -53,6 +53,13 @@ if (enable_resource_allowlist_generation) {
+ "enable_resource_allowlist_generation=true does not work for target_os=$target_os")
+ }
+
++declare_args() {
++ extra_cflags = ""
++ extra_cppflags = ""
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -825,22 +832,12 @@ template("gcc_toolchain") {
+ # use_gold too.
+ template("clang_toolchain") {
+ gcc_toolchain(target_name) {
+- _path = "$clang_base_path/bin"
+- _is_path_absolute = get_path_info(_path, "abspath") == _path
+-
+- # Preserve absolute paths for tools like distcc.
+- if (_is_path_absolute && filter_include([ _path ], [ "//*" ]) == []) {
+- prefix = _path
+- } else {
+- prefix = rebase_path(_path, root_build_dir)
+- }
+-
+- cc = "${prefix}/clang"
+- cxx = "${prefix}/clang++"
++ cc = "cc"
++ cxx = "c++"
+ ld = cxx
+- readelf = "${prefix}/llvm-readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${prefix}/llvm-nm"
++ readelf = "llvm-readelf"
++ ar = "llvm-ar"
++ nm = "llvm-nm"
+
+ forward_variables_from(invoker,
+ [
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..adb6cc98db76
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- src/webrtc/src/build/toolchain/get_concurrent_links.py.orig 2021-05-01 21:15:31 UTC
++++ src/webrtc/src/build/toolchain/get_concurrent_links.py
+@@ -53,6 +53,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_toolchain.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_toolchain.gni
new file mode 100644
index 000000000000..1936f91498d1
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_toolchain.gni
@@ -0,0 +1,11 @@
+--- src/webrtc/src/build/toolchain/toolchain.gni.orig 2023-12-10 09:44:57 UTC
++++ src/webrtc/src/build/toolchain/toolchain.gni
+@@ -67,7 +67,7 @@ if (host_os == "mac") {
+ host_shlib_extension = ".dylib"
+ } else if (host_os == "win") {
+ host_shlib_extension = ".dll"
+-} else if (host_os == "linux" || host_os == "aix") {
++} else if (host_os == "freebsd" || host_os == "linux" || host_os == "aix") {
+ host_shlib_extension = ".so"
+ } else {
+ assert(false, "Host platform not supported")
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn
new file mode 100644
index 000000000000..b4be3b72062b
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn
@@ -0,0 +1,10 @@
+--- src/webrtc/src/buildtools/third_party/libc++/BUILD.gn.orig 2021-09-19 10:01:13 UTC
++++ src/webrtc/src/buildtools/third_party/libc++/BUILD.gn
+@@ -21,6 +21,7 @@ config("config") {
+ # upstream libc++ requires C++20 so we have to make an exception here.
+ # No other target should override the default -std= flag.
+ "-std:c++20",
++ "-I%%LOCALBASE%%/include",
+ ]
+ } else {
+ cflags += [ "-fPIC" ]
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..d71efbe545a0
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- src/webrtc/src/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -13,6 +13,7 @@
+ #include <string.h>
+
+ #include <algorithm>
++#include <cstdlib>
+ #include <utility>
+
+ #include "absl/algorithm/container.h"
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn
new file mode 100644
index 000000000000..3938185b8a8a
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn
@@ -0,0 +1,11 @@
+--- src/webrtc/src/modules/video_capture/BUILD.gn.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/modules/video_capture/BUILD.gn
+@@ -69,7 +69,7 @@ if (!build_with_chromium || is_linux || is_chromeos) {
+ "video_capture_options.h",
+ ]
+
+- if (is_linux || is_chromeos) {
++ if ((is_linux || is_chromeos) && !is_bsd) {
+ sources += [
+ "linux/device_info_linux.cc",
+ "linux/device_info_v4l2.cc",
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_ringrtc_opus_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_ringrtc_opus_BUILD.gn
new file mode 100644
index 000000000000..e807b8274b70
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_ringrtc_opus_BUILD.gn
@@ -0,0 +1,18 @@
+Use VAR_ARRAYS on FreeBSD (same as audio/opus)
+
+--- src/webrtc/src/ringrtc/opus/BUILD.gn 2021-03-15 17:51:55 UTC
++++ src/webrtc/src/ringrtc/opus/BUILD.gn
+@@ -37,10 +37,11 @@ config("opus_private_config") {
+ "OPUS_EXPORT=",
+ "ENABLE_HARDENING",
+
++ "VAR_ARRAYS",
+ # Prefer alloca() over variable length arrays which are often inefficient;
+ # the opus code will automatically handle this correctly per-platform.
+- "USE_ALLOCA",
+- "HAVE_ALLOCA_H",
++# "USE_ALLOCA",
++# "HAVE_ALLOCA_H",
+ ]
+
+ include_dirs = [
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h
new file mode 100644
index 000000000000..1bb643da9177
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h
@@ -0,0 +1,11 @@
+--- src/webrtc/src/rtc_base/byte_order.h.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/byte_order.h
+@@ -89,7 +89,7 @@
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #else
+ #error "Missing byte order functions for this arch."
+ #endif // defined(WEBRTC_MAC)
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..f27dd1ac6f4f
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- src/webrtc/src/rtc_base/ifaddrs_converter.h.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs_android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc
new file mode 100644
index 000000000000..bba5d3e1eeaf
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc
@@ -0,0 +1,12 @@
+--- src/webrtc/src/rtc_base/ip_address.cc.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/ip_address.cc
+@@ -11,6 +11,9 @@
+ #if defined(WEBRTC_POSIX)
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
+
+ #include "absl/strings/string_view.h"
+ #ifdef OPENBSD
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h
new file mode 100644
index 000000000000..4b39705e5cc2
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h
@@ -0,0 +1,13 @@
+--- src/webrtc/src/rtc_base/ip_address.h.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/ip_address.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc
new file mode 100644
index 000000000000..51cf980a4976
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc
@@ -0,0 +1,15 @@
+--- src/webrtc/src/rtc_base/network.cc.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/network.cc
+@@ -244,7 +244,12 @@ AdapterType GetAdapterTypeFromName(const char* network
+ }
+ #endif
+
++#if defined(WEBRTC_BSD)
++ // Treat all other network interface names as ethernet on BSD
++ return ADAPTER_TYPE_ETHERNET;
++#else
+ return ADAPTER_TYPE_UNKNOWN;
++#endif
+ }
+
+ NetworkManager::NetworkManager() {}
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h
new file mode 100644
index 000000000000..0d80db98eb29
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- src/webrtc/src/rtc_base/network.h.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/network.h
+@@ -26,6 +26,10 @@
+ #include "rtc_base/system/rtc_export.h"
+ #include "rtc_base/third_party/sigslot/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc
new file mode 100644
index 000000000000..496f00d8f61e
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc
@@ -0,0 +1,47 @@
+--- src/webrtc/src/rtc_base/physical_socket_server.cc.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/physical_socket_server.cc
+@@ -50,7 +50,7 @@
+ #include "rtc_base/null_socket_server.h"
+ #include "rtc_base/time_utils.h"
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/sockios.h>
+ #endif
+
+@@ -69,7 +69,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -291,7 +291,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ return -1;
+ }
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ } else if (opt == OPT_DSCP) {
+@@ -309,7 +309,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ } else if (opt == OPT_DSCP) {
+@@ -550,7 +550,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h
new file mode 100644
index 000000000000..3992028b009d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h
@@ -0,0 +1,11 @@
+--- src/webrtc/src/rtc_base/physical_socket_server.h.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/physical_socket_server.h
+@@ -14,7 +14,7 @@
+ #include "api/units/time_delta.h"
+
+ #if defined(WEBRTC_POSIX)
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ // On Linux, use epoll.
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..9afe13c478b9
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc
@@ -0,0 +1,39 @@
+--- src/webrtc/src/rtc_base/platform_thread_types.cc.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,11 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#else
++#include <pthread_np.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -44,6 +48,8 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
++#elif defined(__FreeBSD__)
++ return pthread_getthreadid_np();
+ #elif defined(WEBRTC_LINUX)
+ return syscall(__NR_gettid);
+ #elif defined(__EMSCRIPTEN__)
+@@ -74,6 +80,7 @@ void SetCurrentThreadName(const char* name) {
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ // The SetThreadDescription API works even if no debugger is attached.
+ // The names set with this API also show up in ETW traces. Very handy.
+@@ -120,6 +127,7 @@ void SetCurrentThreadName(const char* name) {
+ zx_status_t status = zx_object_set_property(zx_thread_self(), ZX_PROP_NAME,
+ name, strlen(name));
+ RTC_DCHECK_EQ(status, ZX_OK);
++#endif
+ #endif
+ }
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h
new file mode 100644
index 000000000000..b864485827e3
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h
@@ -0,0 +1,19 @@
+--- src/webrtc/src/rtc_base/third_party/sigslot/sigslot.h.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/rtc_base/third_party/sigslot/sigslot.h
+@@ -178,6 +178,8 @@ class multi_threaded_local {
+ #endif // _SIGSLOT_HAS_WIN32_THREADS
+
+ #ifdef _SIGSLOT_HAS_POSIX_THREADS
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wthread-safety-analysis"
+ // The multi threading policies only get compiled in if they are enabled.
+ class multi_threaded_global {
+ public:
+@@ -201,6 +203,7 @@ class multi_threaded_local {
+ private:
+ pthread_mutex_t m_mutex;
+ };
++#pragma GCC diagnostic pop
+ #endif // _SIGSLOT_HAS_POSIX_THREADS
+
+ template <class mt_policy>
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..b34b0548b661
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn
@@ -0,0 +1,15 @@
+--- src/webrtc/src/system_wrappers/BUILD.gn.orig 2021-01-28 23:16:17 UTC
++++ src/webrtc/src/system_wrappers/BUILD.gn
+@@ -58,11 +58,9 @@ rtc_library("system_wrappers") {
+ }
+
+ if (is_linux || is_chromeos) {
+- if (!build_with_chromium) {
++ if (!build_with_chromium && !is_bsd) {
+ sources += [ "source/cpu_features_linux.cc" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_win) {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni
new file mode 100644
index 000000000000..133fddbcdd19
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni
@@ -0,0 +1,11 @@
+--- src/webrtc/src/testing/test.gni.orig 2022-02-18 09:31:19 UTC
++++ src/webrtc/src/testing/test.gni
+@@ -17,7 +17,7 @@ declare_args() {
+ # "location_tags.json", and so we don't want to try and upload the tags
+ # for their tests.
+ # And, some build configs may simply turn off generation altogether.
+- tests_have_location_tags = generate_location_tags
++ tests_have_location_tags = false
+ }
+
+ if (is_android) {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third__nasm_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_third__nasm_BUILD.gn
new file mode 100644
index 000000000000..2877c76d5fc1
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third__nasm_BUILD.gn
@@ -0,0 +1,16 @@
+--- src/webrtc/src/third_party/nasm/BUILD.gn.orig 2023-02-01 18:45:20 UTC
++++ src/webrtc/src/third_party/nasm/BUILD.gn
+@@ -63,6 +63,13 @@ config("nasm_config") {
+
+ defines = [ "HAVE_CONFIG_H" ]
+
++ _string_h_lines =
++ read_file("/usr/include/string.h", "list lines")
++ _mempcpy = filter_include(_string_h_lines, [ "*\*mempcpy*" ])
++ if (_mempcpy != []) {
++ defines += [ "HAVE_MEMPCPY=1" ]
++ }
++
+ if (is_clang) {
+ cflags = [
+ # The inline functions in NASM's headers flag this.
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_libevent_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..4c2a5a7a8e61
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_libevent_BUILD.gn
@@ -0,0 +1,16 @@
+--- src/webrtc/src/third_party/libevent/BUILD.gn.orig 2021-03-15 17:07:00 UTC
++++ src/webrtc/src/third_party/libevent/BUILD.gn
+@@ -48,6 +48,13 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs += [ "mac" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_linux || is_chromeos) {
+ sources += [
+ "epoll.c",
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h
new file mode 100644
index 000000000000..30f2390890d4
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h
@@ -0,0 +1,102 @@
+--- src/webrtc/src/third_party/nasm/config/config-linux.h 2021-03-15 17:51:55 UTC
++++ src/webrtc/src/third_party/nasm/config/config-linux.h
+@@ -160,7 +160,7 @@
+
+ /* Define to 1 if you have the declaration of `strlcpy', and to 0 if you
+ don't. */
+-#define HAVE_DECL_STRLCPY 0
++#define HAVE_DECL_STRLCPY 1
+
+ /* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you
+ don't. */
+@@ -183,7 +183,7 @@
+ #define HAVE_DECL_STRSEP 1
+
+ /* Define to 1 if you have the <endian.h> header file. */
+-#define HAVE_ENDIAN_H 1
++/* #undef HAVE_ENDIAN_H */
+
+ /* Define to 1 if you have the `faccessat' function. */
+ #define HAVE_FACCESSAT 1
+@@ -327,16 +327,16 @@
+ #define HAVE_ISASCII 1
+
+ /* Define to 1 if you have the `iscntrl' function. */
+-/* #undef HAVE_ISCNTRL */
++#define HAVE_ISCNTRL 1
+
+ /* Define to 1 if you have the <machine/endian.h> header file. */
+-/* #undef HAVE_MACHINE_ENDIAN_H */
++#define HAVE_MACHINE_ENDIAN_H 1
+
+ /* Define to 1 if you have the <memory.h> header file. */
+ #define HAVE_MEMORY_H 1
+
+ /* Define to 1 if you have the `mempcpy' function. */
+-#define HAVE_MEMPCPY 1
++/* #undef HAVE_MEMPCPY */
+
+ /* Define to 1 if you have a working `mmap' system call. */
+ #define HAVE_MMAP 1
+@@ -357,7 +357,7 @@
+ #define HAVE_STDARG_H 1
+
+ /* Define to 1 if stdbool.h conforms to C99. */
+-/* #undef HAVE_STDBOOL_H */
++#define HAVE_STDBOOL_H 1
+
+ /* Define to 1 if your compiler supports C99 extern inline */
+ #define HAVE_STDC_INLINE 1
+@@ -384,7 +384,7 @@
+ #define HAVE_STRING_H 1
+
+ /* Define to 1 if you have the `strlcpy' function. */
+-/* #undef HAVE_STRLCPY */
++#define HAVE_STRLCPY 1
+
+ /* Define to 1 if you have the `strncasecmp' function. */
+ #define HAVE_STRNCASECMP 1
+@@ -411,7 +411,7 @@
+ #define HAVE_SYSCONF 1
+
+ /* Define to 1 if you have the <sys/endian.h> header file. */
+-/* #undef HAVE_SYS_ENDIAN_H */
++#define HAVE_SYS_ENDIAN_H 1
+
+ /* Define to 1 if you have the <sys/mman.h> header file. */
+ #define HAVE_SYS_MMAN_H 1
+@@ -486,13 +486,13 @@
+ /* #undef HAVE__STATI64 */
+
+ /* Define to 1 if you have the `__bswap_16' intrinsic function. */
+-#define HAVE___BSWAP_16 1
++/* #undef HAVE___BSWAP_16 */
+
+ /* Define to 1 if you have the `__bswap_32' intrinsic function. */
+-#define HAVE___BSWAP_32 1
++/* #undef HAVE___BSWAP_32 */
+
+ /* Define to 1 if you have the `__bswap_64' intrinsic function. */
+-#define HAVE___BSWAP_64 1
++/* #undef HAVE___BSWAP_64 */
+
+ /* Define to 1 if you have the `__builtin_bswap16' intrinsic function. */
+ #define HAVE___BUILTIN_BSWAP16 1
+@@ -620,7 +620,7 @@
+ /* Define to the equivalent of the C99 'restrict' keyword, or to
+ nothing if this is not supported. Do not define if restrict is
+ supported directly. */
+-#define restrict __restrict
++#define restrict __restrict__
+ /* Work around a bug in Sun C++: it does not support _Restrict or
+ __restrict__, even though the corresponding Sun C compiler ends up with
+ "#define restrict _Restrict" or "#define restrict __restrict__" in the
+@@ -637,7 +637,7 @@
+ /* Define if your snprintf function is not named snprintf. */
+ /* #undef snprintf */
+
+-/* Define if your typeof operator is not named typeof. */
++/* Define if your typeof operator is not named `typeof'. */
+ #define typeof __typeof
+
+ /* Define to the type of an unsigned integer type wide enough to hold a
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn
new file mode 100644
index 000000000000..c218cd9ce6f3
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn
@@ -0,0 +1,18 @@
+Use VAR_ARRAYS on FreeBSD (same as audio/opus)
+
+--- src/webrtc/src/third_party/opus/BUILD.gn 2021-03-15 17:51:55 UTC
++++ src/webrtc/src/third_party/opus/BUILD.gn
+@@ -37,10 +37,11 @@ config("opus_private_config") {
+ "OPUS_EXPORT=",
+ "ENABLE_HARDENING",
+
++ "VAR_ARRAYS",
+ # Prefer alloca() over variable length arrays which are often inefficient;
+ # the opus code will automatically handle this correctly per-platform.
+- "USE_ALLOCA",
+- "HAVE_ALLOCA_H",
++# "USE_ALLOCA",
++# "HAVE_ALLOCA_H",
+ ]
+
+ include_dirs = [
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third_party_libvpx_source_libvpx_vpx__ports_aarch64__cpudetect.c b/multimedia/ringrtc/files/patch-src_webrtc_src_third_party_libvpx_source_libvpx_vpx__ports_aarch64__cpudetect.c
new file mode 100644
index 000000000000..a56242ca4220
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third_party_libvpx_source_libvpx_vpx__ports_aarch64__cpudetect.c
@@ -0,0 +1,29 @@
+- Implement runtime detection on FreeBSD
+
+--- src/webrtc/src/third_party/libvpx/source/libvpx/vpx_ports/aarch64_cpudetect.c.orig 2024-02-09 17:15:31 UTC
++++ src/webrtc/src/third_party/libvpx/source/libvpx/vpx_ports/aarch64_cpudetect.c
+@@ -91,9 +91,23 @@ static int arm_get_cpu_caps(void) {
+ return flags;
+ }
+
+-#elif defined(__linux__) // end defined(VPX_USE_ANDROID_CPU_FEATURES)
++#elif defined(__linux__) || defined(__FreeBSD__) // end defined(VPX_USE_ANDROID_CPU_FEATURES)
+
+ #include <sys/auxv.h>
++
++#if defined(__FreeBSD__)
++static unsigned long getauxval(unsigned long type)
++{
++ /* Only AT_HWCAP* return unsigned long */
++ if (type != AT_HWCAP && type != AT_HWCAP2) {
++ return 0;
++ }
++
++ unsigned long ret = 0;
++ elf_aux_info(type, &ret, sizeof(ret));
++ return ret;
++}
++#endif
+
+ // Define hwcap values ourselves: building with an old auxv header where these
+ // hwcap values are not defined should not prevent features from being enabled.
diff --git a/multimedia/ringrtc/pkg-descr b/multimedia/ringrtc/pkg-descr
new file mode 100644
index 000000000000..b14d99297cff
--- /dev/null
+++ b/multimedia/ringrtc/pkg-descr
@@ -0,0 +1,2 @@
+RingRTC is a middleware library providing Signal Messenger applications
+with video and voice calling services built on top of WebRTC.
diff --git a/multimedia/ringrtc/update.txt b/multimedia/ringrtc/update.txt
new file mode 100644
index 000000000000..eed05b228665
--- /dev/null
+++ b/multimedia/ringrtc/update.txt
@@ -0,0 +1,5 @@
+To update this port:
+Bump DISTVERSION
+eventually bump WEBRTC_REV (sh net-im/signal-desktop/get_deps.sh)
+eventually update *_REV (sh multimedia/ringrtc/webrtc_fetch.sh)
+eventually update CARGO_CRATES (fetch -qo - https://raw.githubusercontent.com/signalapp/ringrtc/v2.39.3/Cargo.lock | awk -f /usr/ports/Mk/Scripts/cargo-crates.awk | portedit merge -i Makefile.crates)
diff --git a/multimedia/ringrtc/webrtc_fetch.sh b/multimedia/ringrtc/webrtc_fetch.sh
new file mode 100644
index 000000000000..c8e59d32d1d4
--- /dev/null
+++ b/multimedia/ringrtc/webrtc_fetch.sh
@@ -0,0 +1,129 @@
+#!/bin/sh
+
+WEBRTC_REV=6261d
+OPUS_BRANCH=6261
+# XXX also change fetch opus
+
+base_url="https://chromium.googlesource.com/chromium/src/base.git/+archive/"
+boringssl_url="https://boringssl.googlesource.com/boringssl.git/+archive/"
+build_url="https://chromium.googlesource.com/chromium/src/build.git/+archive/"
+buildtools_url="https://chromium.googlesource.com/chromium/src/buildtools.git/+archive/"
+catapult_url="https://chromium.googlesource.com/catapult.git/+archive/"
+icu_url="https://chromium.googlesource.com/chromium/deps/icu.git/+archive/"
+libjpeg_turbo_url="https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git/+archive/"
+libsrtp_url="https://chromium.googlesource.com/chromium/deps/libsrtp.git/+archive/"
+libvpx_url="https://chromium.googlesource.com/webm/libvpx.git/+archive/"
+libyuv_url="https://chromium.googlesource.com/libyuv/libyuv.git/+archive/"
+nasm_url="https://chromium.googlesource.com/chromium/deps/nasm.git/+archive/"
+testing_url="https://chromium.googlesource.com/chromium/src/testing.git/+archive/"
+third_party_url="https://chromium.googlesource.com/chromium/src/third_party.git/+archive/"
+
+fetch -q -o /tmp/DEPS https://raw.githubusercontent.com/signalapp/webrtc/${WEBRTC_REV}/DEPS
+
+base_hash=$(grep 'base@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BASE_REV=\t${base_hash}\n"
+printf "BASE_REV=\t${base_hash}\n" | portedit merge -i Makefile
+
+boringssl_hash=$(grep 'boringssl.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BORINGSSL_REV=\t${boringssl_hash}\n"
+printf "BORINGSSL_REV=\t${boringssl_hash}\n" | portedit merge -i Makefile
+
+build_hash=$(grep 'build@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BUILD_REV=\t${build_hash}\n"
+printf "BUILD_REV=\t${build_hash}\n" | portedit merge -i Makefile
+
+buildtools_hash=$(grep 'buildtools@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BUILDTOOLS_REV=\t${buildtools_hash}\n"
+printf "BUILDTOOLS_REV=\t${buildtools_hash}\n" | portedit merge -i Makefile
+
+catapult_hash=$(grep 'catapult.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "CATAPULT_REV=\t${catapult_hash}\n"
+printf "CATAPULT_REV=\t${catapult_hash}\n" | portedit merge -i Makefile
+
+icu_hash=$(grep 'icu.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "ICU_REV=\t${icu_hash}\n"
+printf "ICU_REV=\t${icu_hash}\n" | portedit merge -i Makefile
+
+libjpeg_turbo_hash=$(grep 'libjpeg_turbo.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBJPEG_TURBO_REV=\t${libjpeg_turbo_hash}\n"
+printf "LIBJPEG_TURBO_REV=\t${libjpeg_turbo_hash}\n" | portedit merge -i Makefile
+
+libsrtp_hash=$(grep 'libsrtp.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBSRTP_REV=\t${libsrtp_hash}\n"
+printf "LIBSRTP_REV=\t${libsrtp_hash}\n" | portedit merge -i Makefile
+
+libvpx_hash=$(grep 'libvpx.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBVPX_REV=\t${libvpx_hash}\n"
+printf "LIBVPX_REV=\t${libvpx_hash}\n" | portedit merge -i Makefile
+
+libyuv_hash=$(grep 'libyuv.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBYUV_REV=\t${libyuv_hash}\n"
+printf "LIBYUV_REV=\t${libyuv_hash}\n" | portedit merge -i Makefile
+
+nasm_hash=$(grep 'nasm.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "NASM_REV=\t${nasm_hash}\n"
+printf "NASM_REV=\t${nasm_hash}\n" | portedit merge -i Makefile
+
+opus_hash=$(grep 'opus.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "OPUS_REV=\t${opus_hash}\n"
+printf "OPUS_REV=\t${opus_hash}\n" | portedit merge -i Makefile
+
+testing_hash=$(grep 'testing@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "TESTING_REV=\t${testing_hash}\n"
+printf "TESTING_REV=\t${testing_hash}\n" | portedit merge -i Makefile
+
+third_party_hash=$(grep 'third_party@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "THIRD_PARTY_REV=\t${third_party_hash}\n"
+printf "THIRD_PARTY_REV=\t${third_party_hash}\n" | portedit merge -i Makefile
+
+mkdir dist_tmp
+echo "fetch -o dist_tmp/base-${base_hash}.tar.gz ${base_url}${base_hash}.tar.gz"
+echo "fetch -o dist_tmp/boringssl-${boringssl_hash}.tar.gz ${boringssl_url}${boringssl_hash}.tar.gz"
+echo "fetch -o dist_tmp/build-${build_hash}.tar.gz ${build_url}${build_hash}.tar.gz"
+echo "fetch -o dist_tmp/buildtools-${buildtools_hash}.tar.gz ${buildtools_url}${buildtools_hash}.tar.gz"
+echo "fetch -o dist_tmp/catapult-${catapult_hash}.tar.gz ${catapult_url}${catapult_hash}.tar.gz"
+echo "fetch -o dist_tmp/icu-${icu_hash}.tar.gz ${icu_url}${icu_hash}.tar.gz"
+echo "fetch -o dist_tmp/libjpeg_turbo-${libjpeg_turbo_hash}.tar.gz ${libjpeg_turbo_url}${libjpeg_turbo_hash}.tar.gz"
+echo "fetch -o dist_tmp/libsrtp-${libsrtp_hash}.tar.gz ${libsrtp_url}${libsrtp_hash}.tar.gz"
+echo "fetch -o dist_tmp/libvpx-${libvpx_hash}.tar.gz ${libvpx_url}${libvpx_hash}.tar.gz"
+echo "fetch -o dist_tmp/libyuv-${libyuv_hash}.tar.gz ${libyuv_url}${libyuv_hash}.tar.gz"
+echo "fetch -o dist_tmp/nasm-${nasm_hash}.tar.gz ${nasm_url}${nasm_hash}.tar.gz"
+echo "fetch -o dist_tmp/opus-${opus_hash}.tar.gz https://codeload.github.com/signalapp/opus/tar.gz/webrtc-${OPUS_BRANCH}?dummy=/"
+echo "fetch -o dist_tmp/testing-${testing_hash}.tar.gz ${testing_url}${testing_hash}.tar.gz"
+echo "fetch -o dist_tmp/third_party-${third_party_hash}.tar.gz ${third_party_url}${third_party_hash}.tar.gz"
+
+exit
+
+mkdir -p base boringssl build buildtools catapult icu libjpeg_turbo libsrtp libvpx libyuv nasm opus testing third_party
+tar xf dist_tmp/base-${base_hash}.tar.gz -C base
+tar xf dist_tmp/boringssl-${boringssl_hash}.tar.gz -C boringssl
+tar xf dist_tmp/build-${build_hash}.tar.gz -C build
+tar xf dist_tmp/buildtools-${buildtools_hash}.tar.gz -C buildtools
+tar xf dist_tmp/catapult-${catapult_hash}.tar.gz -C catapult
+tar xf dist_tmp/icu-${icu_hash}.tar.gz -C icu
+tar xf dist_tmp/libjpeg_turbo-${libjpeg_turbo_hash}.tar.gz -C libjpeg_turbo
+tar xf dist_tmp/libsrtp-${libsrtp_hash}.tar.gz -C libsrtp
+tar xf dist_tmp/libvpx-${libvpx_hash}.tar.gz -C libvpx
+tar xf dist_tmp/libyuv-${libyuv_hash}.tar.gz -C libyuv
+tar xf dist_tmp/nasm-${nasm_hash}.tar.gz -C nasm
+tar xf dist_tmp/opus-${opus_hash}.tar.gz -C opus --strip-components 1
+tar xf dist_tmp/testing-${testing_hash}.tar.gz -C testing
+tar xf dist_tmp/third_party-${third_party_hash}.tar.gz -C third_party
+
+mkdir dist_good
+tar czf dist_good/base-${base_hash}.tar.gz base
+tar czf dist_good/boringssl-${boringssl_hash}.tar.gz boringssl
+tar czf dist_good/build-${build_hash}.tar.gz build
+tar czf dist_good/buildtools-${buildtools_hash}.tar.gz buildtools
+tar czf dist_good/catapult-${catapult_hash}.tar.gz catapult
+tar czf dist_good/icu-${icu_hash}.tar.gz icu
+tar czf dist_good/libjpeg_turbo-${libjpeg_turbo_hash}.tar.gz libjpeg_turbo
+tar czf dist_good/libsrtp-${libsrtp_hash}.tar.gz libsrtp
+tar czf dist_good/libvpx-${libvpx_hash}.tar.gz libvpx
+tar czf dist_good/libyuv-${libyuv_hash}.tar.gz libyuv
+tar czf dist_good/nasm-${nasm_hash}.tar.gz nasm
+tar czf dist_good/opus-${opus_hash}.tar.gz opus
+tar czf dist_good/testing-${testing_hash}.tar.gz testing
+tar czf dist_good/third_party-${third_party_hash}.tar.gz third_party
+
+rm -rf base boringssl build buildtools catapult icu libjpeg_turbo libsrtp libvpx libyuv nasm opus testing third_party