chore(deps): remove unused Go dependencies

Removed direct dependencies such as github.com/cockroachdb/pebble, github.com/go-chi/chi/v5, and github.com/gosuda/relaydns/sdk/go. Also pruned numerous indirect dependencies (e.g., prometheus, cockroachdb-related libs). Added golang.org/x/crypto to direct requires. This simplifies the module by eliminating unused packages.

lemon-mint committed Oct 27, 2025 at 00:04 UTC 067d258f74cc4ca076eebc6a9b8e44f592d5ff70
3 files changed +527 -242
RELAYSERVER.md new
+525
@@ -0,0 +1,525 @@
1 +# RelayServer 상세 동작 문서
2 +
3 +## 개요
4 +
5 +RelayServer는 DNS 기반 P2P 프록시 레이어로, libp2p 위에 구축된 경량 서비스입니다. 이 서버는 클라이언트 간의 안전한 연결을 중개하고, 리스(lease) 관리, 암호화된 통신, 다양한 프로토콜 지원 등의 기능을 제공합니다.
6 +
7 +## 핵심 구성 요소
8 +
9 +### 1. RelayServer 구조체
10 +
11 +RelayServer는 시스템의 핵심 구조체로, 다음과 같은 주요 필드를 포함합니다:
12 +
13 +```go
14 +type RelayServer struct {
15 + credential *cryptoops.Credential // 암호화 자격 증명
16 + identity *rdsec.Identity // 서버 신원 정보
17 + address []string // 서버 주소 목록
18 +
19 + connidCounter int64 // 연결 ID 카운터
20 + connections map[int64]*Connection // 활성 연결 맵
21 + connectionsLock sync.RWMutex // 연결 맵 락
22 +
23 + leaseConnections map[string]*Connection // 리스-연결 맵
24 + leaseConnectionsLock sync.RWMutex // 리스-연결 맵 락
25 +
26 + relayedConnections map[string][]*yamux.Stream // 릴레이된 연결 맵
27 + relayedConnectionsLock sync.RWMutex // 릴레이된 연결 맵 락
28 +
29 + leaseManager *LeaseManager // 리스 관리자
30 +
31 + stopch chan struct{} // 종료 신호 채널
32 + waitgroup sync.WaitGroup // 대기 그룹
33 +}
34 +```
35 +
36 +### 2. Connection 구조체
37 +
38 +각 클라이언트 연결을 나타내는 구조체입니다:
39 +
40 +```go
41 +type Connection struct {
42 + conn io.ReadWriteCloser // 기본 연결
43 + sess *yamux.Session // 다중화 세션
44 +
45 + streams map[uint32]*yamux.Stream // 스트림 맵
46 + streamsLock sync.Mutex // 스트림 맵 락
47 +}
48 +```
49 +
50 +### 3. LeaseManager
51 +
52 +리스(임대) 정보를 관리하는 컴포넌트로, 만료된 리스를 정리하고 리스 수명을 관리합니다:
53 +
54 +```go
55 +type LeaseManager struct {
56 + leases map[string]*LeaseEntry // 리스 맵 (키: 신원 ID)
57 + leasesLock sync.RWMutex // 리스 맵 락
58 + stopCh chan struct{} // 종료 신호 채널
59 + ttlInterval time.Duration // TTL 확인 간격
60 +}
61 +```
62 +
63 +## 주요 동작
64 +
65 +### 1. 서버 초기화
66 +
67 +서버는 `NewRelayServer` 함수로 초기화됩니다:
68 +
69 +```go
70 +func NewRelayServer(credential *cryptoops.Credential, address []string) *RelayServer
71 +```
72 +
73 +- 암호화 자격 증명과 주소 목록을 받아 RelayServer 인스턴스를 생성
74 +- 내부 맵들과 리스 관리자를 초기화
75 +- 30초 간격의 TTL 확인을 위한 리스 관리자 생성
76 +
77 +### 2. 연결 처리
78 +
79 +#### 2.1 새 연결 수락
80 +
81 +`HandleConnection` 메서드는 새로운 클라이언트 연결을 처리합니다:
82 +
83 +1. yamux 서버 세션을 생성
84 +2. 고유 연결 ID를 할당하고 연결 맵에 저장
85 +3. `handleConn` 고루틴을 시작하여 연결을 비동기적으로 처리
86 +
87 +#### 2.2 연결 관리
88 +
89 +`handleConn` 메서드는 연결의 수명 주기를 관리합니다:
90 +
91 +1. 세션에서 들어오는 스트림을 계속해서 수락
92 +2. 각 스트림에 대해 `handleStream` 고루틴을 시작
93 +3. 연결이 종료될 때 관련 리스를 정리하고 자원을 해제
94 +
95 +### 3. 스트림 처리
96 +
97 +`handleStream` 메서드는 개별 스트림의 요청을 처리합니다:
98 +
99 +1. 스트림에서 패킷을 읽음
100 +2. 패킷 타입에 따라 적절한 핸들러로 분기:
101 + - `PACKET_TYPE_RELAY_INFO_REQUEST`: `handleRelayInfoRequest`
102 + - `PACKET_TYPE_LEASE_UPDATE_REQUEST`: `handleLeaseUpdateRequest`
103 + - `PACKET_TYPE_LEASE_DELETE_REQUEST`: `handleLeaseDeleteRequest`
104 + - `PACKET_TYPE_CONNECTION_REQUEST`: `handleConnectionRequest`
105 +
106 +### 4. 리스 관리
107 +
108 +#### 4.1 리스 업데이트
109 +
110 +`handleLeaseUpdateRequest` 메서드는 리스 업데이트 요청을 처리합니다:
111 +
112 +1. 서명된 페이로드를 검증
113 +2. 리스 만료 시간을 확인
114 +3. 유효한 경우 리스를 업데이트하고 연결 맵에 등록
115 +4. 응답 코드를 반환
116 +
117 +#### 4.2 리스 삭제
118 +
119 +`handleLeaseDeleteRequest` 메서드는 리스 삭제 요청을 처리합니다:
120 +
121 +1. 서명된 페이로드를 검증
122 +2. 해당 리스를 리스 관리자에서 삭제
123 +3. 리스-연결 맵에서도 제거
124 +4. 응답 코드를 반환
125 +
126 +#### 4.3 리스 만료 관리
127 +
128 +LeaseManager는 백그라운드에서 만료된 리스를 정리합니다:
129 +
130 +1. `ttlWorker` 고루틴이 주기적으로 실행
131 +2. 만료된 리스를 자동으로 제거
132 +3. 특정 연결 ID와 관련된 모든 리스를 정리하는 기능 제공
133 +
134 +### 5. 연결 릴레이
135 +
136 +#### 5.1 연결 요청 처리
137 +
138 +`handleConnectionRequest` 메서드는 클라이언트 간의 연결 요청을 처리합니다:
139 +
140 +1. 대상 클라이언트의 리스가 존재하는지 확인
141 +2. 리스 소유자에게 연결 요청을 전달
142 +3. 요청이 수락되면 양방향 포워딩을 설정
143 +
144 +#### 5.2 양방향 포워딩 설정
145 +
146 +`setupBidirectionalForwarding` 메서드는 클라이언트 간의 데이터 포워딩을 설정합니다:
147 +
148 +1. 리스 소유자에게 새 데이터 스트림을 열고 초기화
149 +2. 클라이언트와 리스 소유자 간의 양방향 데이터 복사를 설정
150 +3. 연결이 종료될 때 관련 자원을 정리
151 +
152 +### 6. 암호화 및 보안
153 +
154 +#### 6.1 핸드셰이크 프로토콜
155 +
156 +X25519-ChaCha20Poly1305 기반의 핸드셰이크 프로토콜을 사용합니다:
157 +
158 +1. 클라이언트와 서버가 각각 임시 키 쌍 생성
159 +2. Ed25519로 서명된 초기화 메시지 교환
160 +3. 공유 비밀을 계산하고 세션 키를 파생
161 +4. ChaCha20Poly1305 AEAD 암호화 설정
162 +
163 +#### 6.2 서명 검증
164 +
165 +모든 인증된 요청은 Ed25519 서명을 통해 검증됩니다:
166 +
167 +1. `VerifySignedPayload` 함수로 서명 검증
168 +2. 신원 정보의 유효성 확인
169 +3. 타임스탬프 검증으로 리플레이 공격 방지
170 +
171 +### 7. 프로토콜 메시지
172 +
173 +#### 7.1 패킷 구조
174 +
175 +모든 통신은 다음과 같은 패킷 구조를 사용합니다:
176 +
177 +```protobuf
178 +message Packet {
179 + PacketType type = 1; // 패킷 타입
180 + bytes payload = 2; // 페이로드
181 +}
182 +```
183 +
184 +#### 7.2 패킷 타입
185 +
186 +- `PACKET_TYPE_RELAY_INFO_REQUEST/RESPONSE`: 릴레이 서버 정보 요청
187 +- `PACKET_TYPE_LEASE_UPDATE_REQUEST/RESPONSE`: 리스 업데이트 요청
188 +- `PACKET_TYPE_LEASE_DELETE_REQUEST/RESPONSE`: 리스 삭제 요청
189 +- `PACKET_TYPE_CONNECTION_REQUEST/RESPONSE`: 연결 요청
190 +
191 +#### 7.3 응답 코드
192 +
193 +- `RESPONSE_CODE_ACCEPTED`: 요청 수락
194 +- `RESPONSE_CODE_INVALID_EXPIRES`: 유효하지 않은 만료 시간
195 +- `RESPONSE_CODE_INVALID_IDENTITY`: 유효하지 않은 신원
196 +- `RESPONSE_CODE_INVALID_NAME`: 유효하지 않은 이름
197 +- `RESPONSE_CODE_INVALID_ALPN`: 유효하지 않은 ALPN
198 +- `RESPONSE_CODE_REJECTED`: 요청 거부
199 +
200 +### 8. HTTP 관리 인터페이스
201 +
202 +#### 8.1 관리 UI
203 +
204 +웹 기반 관리 인터페이스를 제공합니다:
205 +
206 +1. `/`: 서버 상태와 연결된 클라이언트 목록 표시
207 +2. `/peer/{peerID}/`: 특정 피어로의 HTTP 프록시
208 +3. `/hosts`: 연결된 호스트 목록 (JSON)
209 +4. `/health`: 서버 상태 확인 (JSON)
210 +
211 +#### 8.2 TCP 프록시
212 +
213 +선택적으로 원시 TCP 연결을 지원합니다:
214 +
215 +1. 지정된 포트에서 수신 대기
216 +2. 들어오는 연결을 선택된 피어로 프록시
217 +3. SSH 등의 TCP 기반 프로토콜 지원
218 +
219 +### 9. 서버 수명 주기
220 +
221 +#### 9.1 시작
222 +
223 +1. `Start` 메서드로 리스 관리자 시작
224 +2. 백그라운드 TTL 확인 고루틴 시작
225 +
226 +#### 9.2 종료
227 +
228 +1. `Stop` 메서드로 종료 신호 전송
229 +2. 리스 관리자 중지
230 +3. 모든 백그라운드 고루틴이 완료될 때까지 대기
231 +
232 +## 동작 흐름 예시
233 +
234 +### 1. 클라이언트 연결 및 리스 등록
235 +
236 +1. 클라이언트가 RelayServer에 연결
237 +2. yamux 세션이 설정되고 연결이 등록됨
238 +3. 클라이언트가 리스 업데이트 요청을 보냄
239 +4. 서버가 서명을 검증하고 리스를 등록
240 +5. 리스-연결 맵이 업데이트됨
241 +
242 +### 2. 클라이언트 간 연결 설정
243 +
244 +1. 클라이언트 A가 클라이언트 B로의 연결을 요청
245 +2. 서버가 클라이언트 B의 리스를 확인
246 +3. 서버가 클라이언트 B에게 연결 요청을 전달
247 +4. 클라이언트 B가 요청을 수락
248 +5. 서버가 양방향 포워딩을 설정
249 +6. 클라이언트 A와 B가 데이터를 교환
250 +
251 +### 3. 연결 종료 및 정리
252 +
253 +1. 클라이언트 연결이 종료됨
254 +2. 관련 리스가 자동으로 정리됨
255 +3. 릴레이된 연결이 모두 닫힘
256 +4. 연결 맵에서 항목이 제거됨
257 +
258 +## 보안 고려사항
259 +
260 +1. **암호화**: 모든 통신은 X25519-ChaCha20Poly1305로 암호화됨
261 +2. **인증**: Ed25519 서명으로 모든 요청의 출처를 검증
262 +3. **리플레이 방지**: 타임스탬프 검증으로 오래된 메시지 거부
263 +4. **신원 검증**: 공개 키에서 파생된 ID와 제공된 ID 일치 확인
264 +5. **세션 키**: 각 연결마다 고유한 세션 키를 사용
265 +
266 +## 암호화 상세
267 +
268 +### 1. 자격 증명(Credential) 시스템
269 +
270 +#### 1.1 자격 증명 생성
271 +
272 +```go
273 +type Credential struct {
274 + privateKey ed25519.PrivateKey // Ed25519 개인 키
275 + publicKey ed25519.PublicKey // Ed25519 공개 키
276 + id string // 파생된 ID
277 +}
278 +```
279 +
280 +- `NewCredential()`: 새로운 Ed25519 키 쌍을 생성하고 자격 증명을 반환
281 +- `NewCredentialFromPrivateKey()`: 기존 개인 키로부터 자격 증명 생성
282 +
283 +#### 1.2 ID 파생
284 +
285 +```go
286 +func DeriveID(publickey ed25519.PublicKey) string
287 +```
288 +
289 +- HMAC-SHA256을 사용하여 공개 키로부터 고유 ID를 파생
290 +- 매직 문자열 "RDVERB_PROTOCOL_VER_01_SHA256_ID" 사용
291 +- Base32 인코딩으로 최종 ID 생성
292 +
293 +#### 1.3 서명 및 검증
294 +
295 +- `Sign(data []byte)`: Ed25519로 데이터에 서명
296 +- `Verify(data, sig []byte)`: Ed25519 서명 검증
297 +- 모든 인증된 메시지는 이 서명 메커니즘을 통해 검증됨
298 +
299 +### 2. 핸드셰이크 프로토콜 상세
300 +
301 +#### 2.1 클라이언트 핸드셰이크
302 +
303 +1. **임시 키 생성**: X25519 임시 키 쌍 생성
304 +2. **ClientInitPayload 생성**:
305 + - 프로토콜 버전, nonce, 타임스탬프
306 + - 클라이언트 신원 정보
307 + - ALPN(Application-Layer Protocol Negotiation) 문자열
308 + - 임시 공개 키
309 +3. **서명 및 전송**: 페이로드를 서명하여 서버로 전송
310 +4. **서버 응답 수신**: ServerInitPayload 수신 및 검증
311 +5. **세션 키 파생**: 클라이언트 암호화/복호화 키 파생
312 +6. **SecureConnection 생성**: 암호화된 연결 설정
313 +
314 +#### 2.2 서버 핸드셰이크
315 +
316 +1. **클라이언트 요청 수신**: ClientInitPayload 수신
317 +2. **클라이언트 검증**:
318 + - 프로토콜 버전 확인
319 + - 타임스탬프 유효성 검증 (30초 이내)
320 + - ALPN 일치 확인
321 + - 신원 정보 유효성 검증
322 + - Ed25519 서명 검증
323 +3. **임시 키 생성**: X25519 임시 키 쌍 생성
324 +4. **ServerInitPayload 생성**: 클라이언트와 유사한 구조로 서버 정보 생성
325 +5. **세션 키 파생**: 서버 암호화/복호화 키 파생
326 +6. **응답 전송 및 SecureConnection 생성**
327 +
328 +#### 2.3 세션 키 파생
329 +
330 +```go
331 +// 클라이언트 측
332 +clientEncryptKey, clientDecryptKey, err := h.deriveClientSessionKeys(
333 + clientPriv, clientPub, serverPub, clientNonce, serverNonce)
334 +
335 +// 서버 측
336 +serverEncryptKey, serverDecryptKey, err := h.deriveServerSessionKeys(
337 + serverPriv, serverPub, clientPub, clientNonce, serverNonce)
338 +```
339 +
340 +- X25519를 사용하여 공유 비밀 계산
341 +- HKDF-SHA256을 사용하여 세션 키 파생
342 +- 클라이언트 암호화 키 = 서버 복호화 키
343 +- 서버 암호화 키 = 클라이언트 복호화 키
344 +- 솔트(salt)로 nonce 조합 사용:
345 + - 클라이언트 암호화: `clientNonce + serverNonce`
346 + - 서버 암호화: `serverNonce + clientNonce`
347 +- 정보 문자열(info): "RDSEC_KEY_CLIENT" / "RDSEC_KEY_SERVER"
348 +
349 +#### 2.4 암호화된 통신
350 +
351 +```go
352 +type SecureConnection struct {
353 + conn io.ReadWriteCloser // 기본 연결
354 + encryptor cipher.AEAD // 암호화기 (ChaCha20Poly1305)
355 + decryptor cipher.AEAD // 복호화기 (ChaCha20Poly1305)
356 + encryptNonce []byte // 암호화용 nonce
357 + decryptNonce []byte // 복호화용 nonce
358 +}
359 +```
360 +
361 +- 각 메시지마다 nonce 증가 (간단한 바이트 단위 증가)
362 +- 길이 접두사가 있는 메시지 형식 사용:
363 + ```
364 + [4바이트 길이][데이터]
365 + ```
366 +- 최대 패킷 크기: 64MB
367 +- EncryptedData protobuf 메시지로 암호화된 데이터 전송:
368 + ```protobuf
369 + message EncryptedData {
370 + bytes nonce = 1; // 12바이트 nonce
371 + bytes payload = 2; // 암호화된 페이로드
372 + }
373 + ```
374 +
375 +#### 2.5 길이 접두사 메시지 처리
376 +
377 +핸드셰이크와 암호화된 통신에서 사용되는 공통 메시지 형식:
378 +
379 +```go
380 +// 쓰기: [4바이트 길이][데이터]
381 +func writeLengthPrefixed(conn io.Writer, data []byte) error
382 +
383 +// 읽기: [4바이트 길이][데이터]
384 +func readLengthPrefixed(conn io.Reader) ([]byte, error)
385 +```
386 +
387 +- 빅 엔디안 형식으로 길이 인코딩
388 +- 패킷 크기 제한으로 메모리 과사용 방지
389 +- 전송 계층에서의 메시지 경계 명확화
390 +
391 +### 3. WebSocket 스트림 지원
392 +
393 +#### 3.1 wsStream 구조체
394 +
395 +```go
396 +type wsStream struct {
397 + c *websocket.Conn // WebSocket 연결
398 + currentReader io.Reader // 현재 읽기 리더
399 +}
400 +```
401 +
402 +#### 3.2 WebSocket 스트림 동작
403 +
404 +1. **읽기 동작**:
405 + - WebSocket 메시지 리더를 가져옴
406 + - 데이터를 버퍼로 읽음
407 + - EOF 발생 시 다음 메시지를 위해 리더 재설정
408 +
409 +2. **쓰기 동작**:
410 + - 바이너리 메시지 타입으로 데이터 전송
411 + - WebSocket 프레이밍 자동 처리
412 +
413 +3. **닫기 동작**:
414 + - WebSocket 연결 종료
415 +
416 +## 프로토콜 상세
417 +
418 +### 1. 패킷 형식
419 +
420 +모든 통신은 다음과 같은 구조를 따릅니다:
421 +
422 +```
423 +[4바이트 길이][패킷 데이터]
424 +```
425 +
426 +패킷 데이터는 protobuf로 직렬화된 `Packet` 메시지:
427 +
428 +```protobuf
429 +message Packet {
430 + PacketType type = 1; // 패킷 타입
431 + bytes payload = 2; // 페이로드
432 +}
433 +```
434 +
435 +### 2. 메시지 타입별 상세
436 +
437 +#### 2.1 릴레이 정보 요청/응답
438 +
439 +- **요청**: `RelayInfoRequest` (빈 메시지)
440 +- **응답**: `RelayInfoResponse`
441 + ```protobuf
442 + message RelayInfo {
443 + rdsec.Identity identity = 1; // 서버 신원
444 + repeated string address = 2; // 서버 주소 목록
445 + repeated string leases = 3; // 활성 리스 ID 목록
446 + }
447 + ```
448 +
449 +#### 2.2 리스 업데이트 요청/응답
450 +
451 +- **요청**: `LeaseUpdateRequest` (SignedPayload로 래핑)
452 + ```protobuf
453 + message LeaseUpdateRequest {
454 + Lease lease = 1; // 리스 정보
455 + bytes nonce = 2; // nonce
456 + int64 timestamp = 3; // 타임스탬프
457 + }
458 +
459 + message Lease {
460 + rdsec.Identity identity = 1; // 클라이언트 신원
461 + int64 expires = 2; // 만료 시간 (Unix 타임스탬프)
462 + string name = 3; // 리스 이름
463 + repeated string alpn = 4; // 지원 ALPN 목록
464 + }
465 + ```
466 +
467 +- **응답**: `LeaseUpdateResponse`
468 + ```protobuf
469 + message LeaseUpdateResponse {
470 + ResponseCode code = 1; // 응답 코드
471 + }
472 + ```
473 +
474 +#### 2.3 리스 삭제 요청/응답
475 +
476 +- **요청**: `LeaseDeleteRequest` (SignedPayload로 래핑)
477 + ```protobuf
478 + message LeaseDeleteRequest {
479 + rdsec.Identity identity = 1; // 삭제할 신원
480 + bytes nonce = 2; // nonce
481 + int64 timestamp = 3; // 타임스탬프
482 + }
483 + ```
484 +
485 +- **응답**: `LeaseDeleteResponse`
486 + ```protobuf
487 + message LeaseDeleteResponse {
488 + ResponseCode code = 1; // 응답 코드
489 + }
490 + ```
491 +
492 +#### 2.4 연결 요청/응답
493 +
494 +- **요청**: `ConnectionRequest`
495 + ```protobuf
496 + message ConnectionRequest {
497 + string lease_id = 1; // 대상 리스 ID
498 + rdsec.Identity client_identity = 2; // 클라이언트 신원
499 + }
500 + ```
501 +
502 +- **응답**: `ConnectionResponse`
503 + ```protobuf
504 + message ConnectionResponse {
505 + ResponseCode code = 1; // 응답 코드
506 + }
507 + ```
508 +
509 +## 성능 최적화
510 +
511 +1. **다중화**: yamux를 사용한 단일 연결 위의 다중 스트림
512 +2. **동시성**: 각 스트림과 연결을 독립적인 고루틴으로 처리
513 +3. **버퍼 풀**: bytebufferpool을 사용한 메모리 할당 최적화
514 +4. **락 최적화**: 읽기/쓰기 락을 사용한 동시 접근 최적화
515 +5. **암호화 최적화**: ChaCha20Poly1305를 사용한 고성능 암호화
516 +6. **네트워크 최적화**: 길이 접두사가 있는 바이너리 프로토콜 사용
517 +
518 +## 확장성 고려사항
519 +
520 +1. **프로토콜 버전 관리**: protobuf를 사용한 안전한 프로토콜 진화
521 +2. **ALPN 지원**: 다양한 애플리케이션 프로토콜 지원
522 +3. **플러그인 아키텍처**: 핸들러 기반의 확장 가능한 요청 처리
523 +4. **모듈형 설계**: 암호화, 리스 관리, 연결 관리의 분리
524 +
525 +이 문서는 RelayServer의 핵심 동작과 구조를 상세하게 설명하며, 시스템의 이해와 유지보수에 도움을 제공합니다.
\ No newline at end of file
go.mod
+2 -30
@@ -3,42 +3,24 @@ module github.com/gosuda/relaydns
3 go 1.25.3
4
5 require (
6 - github.com/cockroachdb/pebble v1.1.5
7 - github.com/go-chi/chi/v5 v5.2.3
6 github.com/gorilla/websocket v1.5.3
9 - github.com/gosuda/relaydns/sdk/go v0.0.0-20251022064639-15f1536463b4
7 github.com/hashicorp/yamux v0.1.2
8 github.com/libp2p/go-libp2p v0.44.0
9 github.com/planetscale/vtprotobuf v0.6.0
10 github.com/rs/zerolog v1.34.0
11 github.com/spf13/cobra v1.10.1
12 github.com/valyala/bytebufferpool v1.0.0
13 + golang.org/x/crypto v0.41.0
14 google.golang.org/protobuf v1.36.6
15 )
16
17 require (
20 - github.com/DataDog/zstd v1.4.5 // indirect
21 - github.com/beorn7/perks v1.0.1 // indirect
22 - github.com/cespare/xxhash/v2 v2.3.0 // indirect
23 - github.com/cockroachdb/errors v1.11.3 // indirect
24 - github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
25 - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
26 - github.com/cockroachdb/redact v1.1.5 // indirect
27 - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
18 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect
29 - github.com/getsentry/sentry-go v0.27.0 // indirect
30 - github.com/gogo/protobuf v1.3.2 // indirect
31 - github.com/golang/snappy v0.0.4 // indirect
32 - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
19 + github.com/google/go-cmp v0.7.0 // indirect
20 github.com/inconshreveable/mousetrap v1.1.0 // indirect
21 github.com/ipfs/go-cid v0.5.0 // indirect
35 - github.com/klauspost/compress v1.18.0 // indirect
22 github.com/klauspost/cpuid/v2 v2.2.10 // indirect
37 - github.com/kr/pretty v0.3.1 // indirect
38 - github.com/kr/text v0.2.0 // indirect
23 github.com/libp2p/go-buffer-pool v0.1.0 // indirect
40 - github.com/libp2p/go-libp2p-pubsub v0.15.0 // indirect
41 - github.com/libp2p/go-msgio v0.3.0 // indirect
24 github.com/mattn/go-colorable v0.1.13 // indirect
25 github.com/mattn/go-isatty v0.0.20 // indirect
26 github.com/minio/sha256-simd v1.0.1 // indirect
@@ -46,24 +28,14 @@ require (
28 github.com/multiformats/go-base32 v0.1.0 // indirect
29 github.com/multiformats/go-base36 v0.2.0 // indirect
30 github.com/multiformats/go-multiaddr v0.16.0 // indirect
49 - github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
31 github.com/multiformats/go-multibase v0.2.0 // indirect
32 github.com/multiformats/go-multicodec v0.9.1 // indirect
33 github.com/multiformats/go-multihash v0.2.3 // indirect
34 github.com/multiformats/go-multistream v0.6.1 // indirect
35 github.com/multiformats/go-varint v0.0.7 // indirect
55 - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
56 - github.com/pkg/errors v0.9.1 // indirect
57 - github.com/prometheus/client_golang v1.22.0 // indirect
58 - github.com/prometheus/client_model v0.6.2 // indirect
59 - github.com/prometheus/common v0.64.0 // indirect
60 - github.com/prometheus/procfs v0.16.1 // indirect
61 - github.com/rogpeppe/go-internal v1.10.0 // indirect
36 github.com/spaolacci/murmur3 v1.1.0 // indirect
37 github.com/spf13/pflag v1.0.9 // indirect
64 - golang.org/x/crypto v0.41.0 // indirect
38 golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 // indirect
39 golang.org/x/sys v0.35.0 // indirect
67 - golang.org/x/text v0.28.0 // indirect
40 lukechampine.com/blake3 v1.4.1 // indirect
41 )
go.sum
-212
@@ -1,217 +1,59 @@
1 -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
2 -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
3 -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o=
4 -github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
5 -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
6 -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
7 -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
8 -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
9 -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=
10 -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
11 -github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I=
12 -github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8=
13 -github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4=
14 -github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M=
15 -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
16 -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
17 -github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw=
18 -github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo=
19 -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
20 -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
21 -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
22 -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
1 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
2 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
25 -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
3 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
28 -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU=
29 -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U=
5 github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8=
6 github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
7 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc=
8 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40=
34 -github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg=
35 -github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag=
36 -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
37 -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
38 -github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
39 -github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
40 -github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE=
41 -github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
42 -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
43 -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
9 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
45 -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
46 -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
47 -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
48 -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
10 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
11 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
51 -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
52 -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
12 github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
13 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
55 -github.com/gosuda/relaydns/sdk/go v0.0.0-20251022064639-15f1536463b4 h1:6Gmf+J6VuKE9DObZnviKL3AldnZROMecDpq/8g9kDTM=
56 -github.com/gosuda/relaydns/sdk/go v0.0.0-20251022064639-15f1536463b4/go.mod h1:NSKO/60gyDV/dOQlPNCB1fZbTehHVu2YcnUfWKSELpk=
57 -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
58 -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
14 github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
15 github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
61 -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
62 -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
16 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
17 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
18 github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg=
19 github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk=
67 -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
68 -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
69 -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk=
70 -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk=
71 -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
72 -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
73 -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
74 -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
20 github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
21 github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
77 -github.com/koron/go-ssdp v0.0.6 h1:Jb0h04599eq/CY7rB5YEqPS83HmRfHP2azkxMN2rFtU=
78 -github.com/koron/go-ssdp v0.0.6/go.mod h1:0R9LfRJGek1zWTjN3JUNlm5INCDYGpRDfAptnct63fI=
79 -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
80 -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
81 -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
82 -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
22 github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
23 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
85 -github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw=
86 -github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc=
24 github.com/libp2p/go-libp2p v0.44.0 h1:5Gtt8OrF8yiXmH+Mx4+/iBeFRMK1TY3a8OrEBDEqAvs=
25 github.com/libp2p/go-libp2p v0.44.0/go.mod h1:NovCojezAt4dnDd4fH048K7PKEqH0UFYYqJRjIIu8zc=
89 -github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94=
90 -github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
91 -github.com/libp2p/go-libp2p-pubsub v0.15.0 h1:cG7Cng2BT82WttmPFMi50gDNV+58K626m/wR00vGL1o=
92 -github.com/libp2p/go-libp2p-pubsub v0.15.0/go.mod h1:lr4oE8bFgQaifRcoc2uWhWWiK6tPdOEKpUuR408GFN4=
93 -github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA=
94 -github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg=
95 -github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0=
96 -github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM=
97 -github.com/libp2p/go-netroute v0.3.0 h1:nqPCXHmeNmgTJnktosJ/sIef9hvwYCrsLxXmfNks/oc=
98 -github.com/libp2p/go-netroute v0.3.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA=
99 -github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s=
100 -github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU=
101 -github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg=
102 -github.com/libp2p/go-yamux/v5 v5.0.1/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU=
103 -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
104 -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
26 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
27 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
28 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
29 github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
30 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
31 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
111 -github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
112 -github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
113 -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
114 -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU=
115 -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc=
116 -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s=
117 -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
118 -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
32 github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
33 github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
121 -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
34 github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
35 github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
36 github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
37 github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
38 github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
39 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
128 -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo=
40 github.com/multiformats/go-multiaddr v0.16.0 h1:oGWEVKioVQcdIOBlYM8BH1rZDWOGJSqr9/BKl6zQ4qc=
41 github.com/multiformats/go-multiaddr v0.16.0/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0=
131 -github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M=
132 -github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc=
133 -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E=
134 -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo=
42 github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
43 github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
44 github.com/multiformats/go-multicodec v0.9.1 h1:x/Fuxr7ZuR4jJV4Os5g444F7xC4XmyUaT/FWtE+9Zjo=
45 github.com/multiformats/go-multicodec v0.9.1/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo=
139 -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew=
46 github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
47 github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
48 github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ=
49 github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw=
50 github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
51 github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
146 -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
147 -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
148 -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
149 -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y=
150 -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
151 -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
152 -github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o=
153 -github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M=
154 -github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk=
155 -github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE=
156 -github.com/pion/dtls/v3 v3.0.6 h1:7Hkd8WhAJNbRgq9RgdNh1aaWlZlGpYTzdqjy9x9sK2E=
157 -github.com/pion/dtls/v3 v3.0.6/go.mod h1:iJxNQ3Uhn1NZWOMWlLxEEHAN5yX7GyPvvKw04v9bzYU=
158 -github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4=
159 -github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw=
160 -github.com/pion/interceptor v0.1.40 h1:e0BjnPcGpr2CFQgKhrQisBU7V3GXK6wrfYrGYaU6Jq4=
161 -github.com/pion/interceptor v0.1.40/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic=
162 -github.com/pion/logging v0.2.3 h1:gHuf0zpoh1GW67Nr6Gj4cv5Z9ZscU7g/EaoC/Ke/igI=
163 -github.com/pion/logging v0.2.3/go.mod h1:z8YfknkquMe1csOrxK5kc+5/ZPAzMxbKLX5aXpbpC90=
164 -github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8=
165 -github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM=
166 -github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA=
167 -github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
168 -github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
169 -github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo=
170 -github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0=
171 -github.com/pion/rtp v1.8.19 h1:jhdO/3XhL/aKm/wARFVmvTfq0lC/CvN1xwYKmduly3c=
172 -github.com/pion/rtp v1.8.19/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk=
173 -github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE=
174 -github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE=
175 -github.com/pion/sdp/v3 v3.0.13 h1:uN3SS2b+QDZnWXgdr69SM8KB4EbcnPnPf2Laxhty/l4=
176 -github.com/pion/sdp/v3 v3.0.13/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E=
177 -github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4=
178 -github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY=
179 -github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4=
180 -github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8=
181 -github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw=
182 -github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU=
183 -github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q=
184 -github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E=
185 -github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0=
186 -github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo=
187 -github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps=
188 -github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs=
189 -github.com/pion/webrtc/v4 v4.1.2 h1:mpuUo/EJ1zMNKGE79fAdYNFZBX790KE7kQQpLMjjR54=
190 -github.com/pion/webrtc/v4 v4.1.2/go.mod h1:xsCXiNAmMEjIdFxAYU0MbB3RwRieJsegSB2JZsGN+8U=
191 -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
192 -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
52 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
53 github.com/planetscale/vtprotobuf v0.6.0 h1:nBeETjudeJ5ZgBHUz1fVHvbqUKnYOXNhsIEabROxmNA=
54 github.com/planetscale/vtprotobuf v0.6.0/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
55 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
56 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
198 -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
199 -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
200 -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
201 -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
202 -github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4=
203 -github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8=
204 -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
205 -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
206 -github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
207 -github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
208 -github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk=
209 -github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U=
210 -github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70=
211 -github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao=
212 -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
213 -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
214 -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
57 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
58 github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
59 github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
@@ -226,69 +68,15 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
68 github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
69 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
70 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
229 -github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU=
230 -github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA=
231 -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
232 -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
233 -go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4=
234 -go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE=
235 -go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg=
236 -go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo=
237 -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
238 -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
239 -go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
240 -go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
241 -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
242 -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
243 -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
244 -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
245 -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
246 -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
247 -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
248 -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
71 golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
72 golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
73 golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 h1:bsqhLWFR6G6xiQcb+JoGqdKdRU6WzPWmK8E0jxTjzo4=
74 golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
253 -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
254 -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
255 -golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
256 -golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
257 -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
258 -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
259 -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
260 -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
261 -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
262 -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
263 -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
264 -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
265 -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
266 -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
267 -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
268 -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
269 -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
270 -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
75 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
76 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
77 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
78 golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
79 golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
276 -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
277 -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
278 -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
279 -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
280 -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
281 -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
282 -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
283 -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
284 -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
285 -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
286 -golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
287 -golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
288 -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
289 -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
290 -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
291 -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
80 google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
81 google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
82 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=