this repo has no description

start logging seattle posts by generated entity ids

+12
cmd/peruse/main.go
···
EnvVars: []string{"PERUSE_SUGGESTED_FOLLOWS_RKEY"},
Required: true,
},
+
&cli.StringFlag{
+
Name: "nervana-endpoint",
+
EnvVars: []string{"PERUSE_NERVANA_ENDPOINT"},
+
Required: true,
+
},
+
&cli.StringFlag{
+
Name: "nervana-api-key",
+
EnvVars: []string{"PERUSE_NERVANA_API_KEY"},
+
Required: true,
+
},
},
Action: run,
}
···
ServiceEndpoint: cmd.String("service-endpoint"),
ChronoFeedRkey: cmd.String("chrono-feed-rkey"),
SuggestedFollowsRkey: cmd.String("suggested-follows-rkey"),
+
NervanaEndpoint: cmd.String("nervana-endpoint"),
+
NervanaApiKey: cmd.String("nervana-api-key"),
})
if err != nil {
logger.Error("error creating server", "error", err)
+30 -2
go.mod
···
require (
github.com/ClickHouse/clickhouse-go/v2 v2.37.2
+
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
github.com/bluesky-social/indigo v0.0.0-20250626183556-5641d3c27325
github.com/golang-jwt/jwt/v5 v5.2.2
-
github.com/haileyok/photocopy v0.0.0-20250630043251-10829c777ef4
+
github.com/gorilla/websocket v1.5.1
+
github.com/haileyok/photocopy v0.0.0-20250708234122-0afc8c7838e1
github.com/hashicorp/golang-lru/v2 v2.0.7
+
github.com/ipfs/go-cid v0.5.0
github.com/joho/godotenv v1.5.1
github.com/labstack/echo/v4 v4.13.4
github.com/samber/slog-echo v1.8.0
···
require (
github.com/ClickHouse/ch-go v0.66.1 // indirect
+
github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect
github.com/andybalholm/brotli v1.1.1 // indirect
+
github.com/benbjohnson/clock v1.3.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/carlmjohnson/versioninfo v0.22.5 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
···
github.com/go-faster/errors v0.7.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+
github.com/gocql/gocql v1.7.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
+
github.com/golang/snappy v0.0.4 // indirect
github.com/google/uuid v1.6.0 // indirect
+
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/ipfs/bbloom v0.0.4 // indirect
github.com/ipfs/go-block-format v0.2.0 // indirect
-
github.com/ipfs/go-cid v0.5.0 // indirect
+
github.com/ipfs/go-blockservice v0.5.2 // indirect
github.com/ipfs/go-datastore v0.6.0 // indirect
github.com/ipfs/go-ipfs-blockstore v1.3.1 // indirect
github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect
+
github.com/ipfs/go-ipfs-exchange-interface v0.2.1 // indirect
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
github.com/ipfs/go-ipld-cbor v0.1.0 // indirect
github.com/ipfs/go-ipld-format v0.6.0 // indirect
+
github.com/ipfs/go-ipld-legacy v0.2.1 // indirect
+
github.com/ipfs/go-libipfs v0.7.0 // indirect
github.com/ipfs/go-log v1.0.5 // indirect
github.com/ipfs/go-log/v2 v2.5.1 // indirect
+
github.com/ipfs/go-merkledag v0.11.0 // indirect
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
+
github.com/ipfs/go-verifcid v0.0.3 // indirect
+
github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4 // indirect
+
github.com/ipld/go-codec-dagpb v1.6.0 // indirect
+
github.com/ipld/go-ipld-prime v0.21.0 // indirect
+
github.com/jackc/pgpassfile v1.0.0 // indirect
+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
+
github.com/jackc/pgx/v5 v5.5.0 // indirect
+
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/jbenet/goprocess v0.1.4 // indirect
+
github.com/jinzhu/inflection v1.0.0 // indirect
+
github.com/jinzhu/now v1.1.5 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/labstack/gommon v0.4.2 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
+
github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/minio/sha256-simd v1.0.1 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
github.com/multiformats/go-base32 v0.1.0 // indirect
···
go.opentelemetry.io/otel/trace v1.36.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
+
go.uber.org/ratelimit v0.3.1 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.39.0 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/net v0.41.0 // indirect
+
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
google.golang.org/protobuf v1.36.6 // indirect
+
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
+
gorm.io/driver/postgres v1.5.7 // indirect
+
gorm.io/gorm v1.30.0 // indirect
lukechampine.com/blake3 v1.2.1 // indirect
)
+148
go.sum
···
github.com/ClickHouse/ch-go v0.66.1/go.mod h1:NEYcg3aOFv2EmTJfo4m2WF7sHB/YFbLUuIWv9iq76xY=
github.com/ClickHouse/clickhouse-go/v2 v2.37.2 h1:wRLNKoynvHQEN4znnVHNLaYnrqVc9sGJmGYg+GGCfto=
github.com/ClickHouse/clickhouse-go/v2 v2.37.2/go.mod h1:pH2zrBGp5Y438DMwAxXMm1neSXPPjSI7tD4MURVULw8=
+
github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b h1:5/++qT1/z812ZqBvqQt6ToRswSuPZ/B33m6xVHRzADU=
+
github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b/go.mod h1:4+EPqMRApwwE/6yo6CxiHoSnBzjRr3jsqer7frxP8y4=
+
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM=
+
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA=
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
+
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
+
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
+
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
+
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
+
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
github.com/bluesky-social/indigo v0.0.0-20250626183556-5641d3c27325 h1:Bftt2EcoLZK2Z2m12Ih5QqbReX8j29hbf4zJU/FKzaY=
github.com/bluesky-social/indigo v0.0.0-20250626183556-5641d3c27325/go.mod h1:8FlFpF5cIq3DQG0kEHqyTkPV/5MDQoaWLcVwza5ZPJU=
+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/carlmjohnson/versioninfo v0.22.5 h1:O00sjOLUAFxYQjlN/bzYTuZiS0y6fWDQjMRvwtKgwwc=
github.com/carlmjohnson/versioninfo v0.22.5/go.mod h1:QT9mph3wcVfISUKd0i9sZfVrPviHuSF+cUtLjm2WSf8=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
···
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
+
github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0=
+
github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
+
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
···
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
+
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
+
github.com/gocql/gocql v1.7.0 h1:O+7U7/1gSN7QTEAaMEsJc1Oq2QHXvCWoF3DFK9HDHus=
+
github.com/gocql/gocql v1.7.0/go.mod h1:vnlvXyFZeLBF0Wy+RS8hrOdbn0UWsWtdg07XJnFxZ+4=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
+
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
+
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
+
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/haileyok/photocopy v0.0.0-20250630043251-10829c777ef4 h1:4SrZuwjrzC3PR3ayzPrv4K4m7fa8SGygre3qrx0wQe0=
github.com/haileyok/photocopy v0.0.0-20250630043251-10829c777ef4/go.mod h1:U4EKU/HqQiO/dPQuOkjSu18Z9ch4F4rNIeANPp44P1s=
+
github.com/haileyok/photocopy v0.0.0-20250708234122-0afc8c7838e1 h1:50dDAJFkhqe7LgpHtaZhfpLW+Q9kfvzxX30ehQCRlUg=
+
github.com/haileyok/photocopy v0.0.0-20250708234122-0afc8c7838e1/go.mod h1:2/5JIKq3I+FWMF6YX91/zwk2g5eMG7b57/o4AH/LsPA=
+
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
+
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
···
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
+
github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ=
+
github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
+
github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ=
+
github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk=
github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs=
github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM=
+
github.com/ipfs/go-blockservice v0.5.2 h1:in9Bc+QcXwd1apOVM7Un9t8tixPKdaHQFdLSUM1Xgk8=
+
github.com/ipfs/go-blockservice v0.5.2/go.mod h1:VpMblFEqG67A/H2sHKAemeH9vlURVavlysbdUI632yk=
+
github.com/ipfs/go-bs-sqlite3 v0.0.0-20221122195556-bfcee1be620d h1:9V+GGXCuOfDiFpdAHz58q9mKLg447xp0cQKvqQrAwYE=
+
github.com/ipfs/go-bs-sqlite3 v0.0.0-20221122195556-bfcee1be620d/go.mod h1:pMbnFyNAGjryYCLCe59YDLRv/ujdN+zGJBT1umlvYRM=
github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg=
github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk=
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
+
github.com/ipfs/go-ds-flatfs v0.5.1 h1:ZCIO/kQOS/PSh3vcF1H6a8fkRGS7pOfwfPdx4n/KJH4=
+
github.com/ipfs/go-ds-flatfs v0.5.1/go.mod h1:RWTV7oZD/yZYBKdbVIFXTX2fdY2Tbvl94NsWqmoyAX4=
github.com/ipfs/go-ipfs-blockstore v1.3.1 h1:cEI9ci7V0sRNivqaOr0elDsamxXFxJMMMy7PTTDQNsQ=
github.com/ipfs/go-ipfs-blockstore v1.3.1/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
+
github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
+
github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk=
+
github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ=
+
github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
github.com/ipfs/go-ipfs-ds-help v1.1.1 h1:B5UJOH52IbcfS56+Ul+sv8jnIV10lbjLF5eOO0C66Nw=
github.com/ipfs/go-ipfs-ds-help v1.1.1/go.mod h1:75vrVCkSdSFidJscs8n4W+77AtTpCIAdDGAwjitJMIo=
+
github.com/ipfs/go-ipfs-exchange-interface v0.2.1 h1:jMzo2VhLKSHbVe+mHNzYgs95n0+t0Q69GQ5WhRDZV/s=
+
github.com/ipfs/go-ipfs-exchange-interface v0.2.1/go.mod h1:MUsYn6rKbG6CTtsDp+lKJPmVt3ZrCViNyH3rfPGsZ2E=
+
github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA=
+
github.com/ipfs/go-ipfs-exchange-offline v0.3.0/go.mod h1:MOdJ9DChbb5u37M1IcbrRB02e++Z7521fMxqCNRrz9s=
+
github.com/ipfs/go-ipfs-pq v0.0.3 h1:YpoHVJB+jzK15mr/xsWC574tyDLkezVrDNeaalQBsTE=
+
github.com/ipfs/go-ipfs-pq v0.0.3/go.mod h1:btNw5hsHBpRcSSgZtiNm/SLj5gYIZ18AKtv3kERkRb4=
+
github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc=
+
github.com/ipfs/go-ipfs-routing v0.3.0/go.mod h1:dKqtTFIql7e1zYsEuWLyuOU+E0WJWW8JjbTPLParDWo=
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs=
github.com/ipfs/go-ipld-cbor v0.1.0 h1:dx0nS0kILVivGhfWuB6dUpMa/LAwElHPw1yOGYopoYs=
github.com/ipfs/go-ipld-cbor v0.1.0/go.mod h1:U2aYlmVrJr2wsUBU67K4KgepApSZddGRDWBYR0H4sCk=
github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U=
github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg=
+
github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk=
+
github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCkTtDtPM51otM=
+
github.com/ipfs/go-libipfs v0.7.0 h1:Mi54WJTODaOL2/ZSm5loi3SwI3jI2OuFWUrQIkJ5cpM=
+
github.com/ipfs/go-libipfs v0.7.0/go.mod h1:KsIf/03CqhICzyRGyGo68tooiBE2iFbI/rXW7FhAYr0=
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
+
github.com/ipfs/go-merkledag v0.11.0 h1:DgzwK5hprESOzS4O1t/wi6JDpyVQdvm9Bs59N/jqfBY=
+
github.com/ipfs/go-merkledag v0.11.0/go.mod h1:Q4f/1ezvBiJV0YCIXvt51W/9/kqJGH4I1LsA7+djsM4=
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
+
github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
+
github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU=
+
github.com/ipfs/go-verifcid v0.0.3 h1:gmRKccqhWDocCRkC+a59g5QW7uJw5bpX9HWBevXa0zs=
+
github.com/ipfs/go-verifcid v0.0.3/go.mod h1:gcCtGniVzelKrbk9ooUSX/pM3xlH73fZZJDzQJRvOUw=
+
github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4 h1:oFo19cBmcP0Cmg3XXbrr0V/c+xU9U1huEZp8+OgBzdI=
+
github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4/go.mod h1:6nkFF8OmR5wLKBzRKi7/YFJpyYR7+oEn1DX+mMWnlLA=
+
github.com/ipld/go-car/v2 v2.13.1 h1:KnlrKvEPEzr5IZHKTXLAEub+tPrzeAFQVRlSQvuxBO4=
+
github.com/ipld/go-car/v2 v2.13.1/go.mod h1:QkdjjFNGit2GIkpQ953KBwowuoukoM75nP/JI1iDJdo=
+
github.com/ipld/go-codec-dagpb v1.6.0 h1:9nYazfyu9B1p3NAgfVdpRco3Fs2nFC72DqVsMj6rOcc=
+
github.com/ipld/go-codec-dagpb v1.6.0/go.mod h1:ANzFhfP2uMJxRBr8CE+WQWs5UsNa0pYtmKZ+agnUw9s=
+
github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E=
+
github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ=
+
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
+
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
+
github.com/jackc/pgx/v5 v5.5.0 h1:NxstgwndsTRy7eq9/kqYc/BZh5w2hHJV86wjvO+1xPw=
+
github.com/jackc/pgx/v5 v5.5.0/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
+
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
+
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
+
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
+
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o=
github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
+
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
···
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+
github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8=
+
github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
···
github.com/labstack/echo/v4 v4.13.4/go.mod h1:g63b33BZ5vZzcIUF8AtRH40DrTlXnx4UMC8rBdndmjQ=
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
+
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
+
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
+
github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c=
+
github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic=
+
github.com/libp2p/go-libp2p v0.25.1 h1:YK+YDCHpYyTvitKWVxa5PfElgIpOONU01X5UcLEwJGA=
+
github.com/libp2p/go-libp2p v0.25.1/go.mod h1:xnK9/1d9+jeQCVvi/f1g12KqtVi/jP/SijtKV1hML3g=
+
github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
+
github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI=
+
github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0=
+
github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk=
+
github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA=
+
github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg=
+
github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0=
+
github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM=
+
github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg=
+
github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM=
+
github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU=
+
github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
+
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
+
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
+
github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
+
github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
···
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
+
github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU=
+
github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs=
+
github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A=
+
github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk=
+
github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E=
+
github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo=
github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
+
github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg=
+
github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k=
github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
+
github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo=
+
github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q=
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
···
github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
+
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk=
+
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw=
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
···
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
···
github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
github.com/samber/slog-echo v1.8.0 h1:DQQRtAliSvQw+ScEdu5gv3jbHu9cCTzvHuTD8GDv7zI=
github.com/samber/slog-echo v1.8.0/go.mod h1:0ab2AwcciQXNAXEcjkHwD9okOh9vEHEYn8xP97ocuhM=
+
github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
···
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
+
github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s=
+
github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y=
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ=
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
+
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0=
+
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ=
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e h1:28X54ciEwwUxyHn9yrZfl5ojgF4CBNLWX7LR0rvBkf4=
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
···
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+
go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0=
+
go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
···
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
+
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
···
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
+
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
···
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
+
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
···
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+
gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM=
+
gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA=
+
gorm.io/driver/sqlite v1.5.5 h1:7MDMtUZhV065SilG62E0MquljeArQZNfJnjd9i9gx3E=
+
gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATavE=
+
gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs=
+
gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
+152
peruse/consumer.go
···
+
package peruse
+
+
import (
+
"bytes"
+
"context"
+
"fmt"
+
"net/http"
+
"net/url"
+
"os"
+
"time"
+
+
"github.com/bluesky-social/indigo/api/atproto"
+
"github.com/bluesky-social/indigo/atproto/syntax"
+
"github.com/bluesky-social/indigo/events"
+
"github.com/bluesky-social/indigo/events/schedulers/parallel"
+
"github.com/bluesky-social/indigo/repo"
+
"github.com/bluesky-social/indigo/repomgr"
+
"github.com/gorilla/websocket"
+
"github.com/ipfs/go-cid"
+
)
+
+
func (s *Server) startConsumer(ctx context.Context, cancel context.CancelFunc) error {
+
defer cancel()
+
+
go func() {
+
ticker := time.NewTicker(5 * time.Second)
+
defer ticker.Stop()
+
+
for range ticker.C {
+
if err := os.WriteFile(s.args.CursorFile, []byte(s.cursor), 0644); err != nil {
+
s.logger.Error("error saving cursor", "error", err)
+
}
+
s.logger.Debug("saving cursor", "seq", s.cursor)
+
}
+
}()
+
+
u, err := url.Parse(s.args.RelayHost)
+
if err != nil {
+
return err
+
}
+
u.Path = "/xrpc/com.atproto.sync.subscribeRepos"
+
+
prevCursor, err := s.loadCursor()
+
if err != nil {
+
if !os.IsNotExist(err) {
+
panic(err)
+
}
+
} else {
+
s.cursor = prevCursor
+
}
+
+
if prevCursor != "" {
+
u.RawQuery = "cursor=" + prevCursor
+
}
+
+
rsc := events.RepoStreamCallbacks{
+
RepoCommit: func(evt *atproto.SyncSubscribeRepos_Commit) error {
+
go s.repoCommit(ctx, evt)
+
return nil
+
},
+
}
+
+
d := websocket.DefaultDialer
+
+
s.logger.Info("connecting to relay", "url", u.String())
+
+
con, _, err := d.Dial(u.String(), http.Header{
+
"user-agent": []string{"photocopy/0.0.0"},
+
})
+
if err != nil {
+
return fmt.Errorf("failed to connect to relay: %w", err)
+
}
+
+
scheduler := parallel.NewScheduler(400, 10, con.RemoteAddr().String(), rsc.EventHandler)
+
+
if err := events.HandleRepoStream(ctx, con, scheduler, s.logger); err != nil {
+
s.logger.Error("repo stream failed", "error", err)
+
}
+
+
s.logger.Info("repo stream shut down")
+
+
return nil
+
}
+
+
func (s *Server) repoCommit(ctx context.Context, evt *atproto.SyncSubscribeRepos_Commit) {
+
s.cursor = fmt.Sprintf("%d", evt.Seq)
+
+
if evt.TooBig {
+
s.logger.Warn("commit too big", "repo", evt.Repo, "seq", evt.Seq)
+
return
+
}
+
+
r, err := repo.ReadRepoFromCar(ctx, bytes.NewReader(evt.Blocks))
+
if err != nil {
+
s.logger.Error("failed to read event repo", "error", err)
+
return
+
}
+
+
did, err := syntax.ParseDID(evt.Repo)
+
if err != nil {
+
s.logger.Error("failed to parse did", "error", err)
+
return
+
}
+
+
for _, op := range evt.Ops {
+
collection, rkey, err := syntax.ParseRepoPath(op.Path)
+
if err != nil {
+
s.logger.Error("invalid path in repo op")
+
continue
+
}
+
+
ek := repomgr.EventKind(op.Action)
+
+
switch ek {
+
case repomgr.EvtKindCreateRecord:
+
if op.Cid == nil {
+
s.logger.Warn("op missing reccid", "path", op.Path, "action", op.Action)
+
continue
+
}
+
+
c := (cid.Cid)(*op.Cid)
+
reccid, rec, err := r.GetRecordBytes(ctx, op.Path)
+
if err != nil {
+
s.logger.Error("failed to get record bytes", "error", err, "path", op.Path)
+
continue
+
}
+
+
if c != reccid {
+
s.logger.Warn("reccid mismatch", "from_event", c, "from_blocks", reccid, "path", op.Path)
+
continue
+
}
+
+
if rec == nil {
+
s.logger.Warn("record not found", "reccid", c, "path", op.Path)
+
continue
+
}
+
+
if err := s.handleCreate(ctx, *rec, evt.Time, evt.Rev, did.String(), collection.String(), rkey.String(), reccid.String(), fmt.Sprintf("%d", evt.Seq)); err != nil {
+
s.logger.Error("error handling create event", "error", err)
+
continue
+
}
+
}
+
}
+
}
+
+
func (s *Server) loadCursor() (string, error) {
+
b, err := os.ReadFile(s.args.CursorFile)
+
if err != nil {
+
return "", err
+
}
+
return string(b), nil
+
}
+14 -1
peruse/handle_baseball_feed.go
···
"time"
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
+
"github.com/bluesky-social/indigo/api/bsky"
"github.com/haileyok/peruse/internal/helpers"
"github.com/labstack/echo/v4"
)
···
return "baseball"
}
-
func (f *BaseballFeed) HandleGetFeedSkeleton(e echo.Context, req FeedSkeletonRequest) error {
+
func (f *BaseballFeed) FeedSkeleton(e echo.Context, req FeedSkeletonRequest) error {
ctx := e.Request().Context()
cursor, err := getTimeBasedCursor(req)
···
Feed: items,
Cursor: &newCursor,
})
+
}
+
+
func (f *BaseballFeed) OnPost(ctx context.Context, post *bsky.FeedPost, uri, did, rkey, cid string, indexedAt time.Time) error {
+
return nil
+
}
+
+
func (f *BaseballFeed) OnLike(ctx context.Context, like *bsky.FeedLike, uri, did, rkey, cid string, indexedAt time.Time) error {
+
return nil
+
}
+
+
func (f *BaseballFeed) OnRepost(ctx context.Context, repost *bsky.FeedRepost, uri, did, rkey, cid string, indexedAt time.Time) error {
+
return nil
}
func (f *BaseballFeed) getPosts(ctx context.Context) ([]RankedFeedPost, error) {
+1 -1
peruse/handle_feed_skeleton.go
···
}
}
-
return feed.HandleGetFeedSkeleton(e, req)
+
return feed.FeedSkeleton(e, req)
}
+167
peruse/handle_record_create.go
···
+
package peruse
+
+
import (
+
"bytes"
+
"context"
+
"fmt"
+
"time"
+
+
"github.com/araddon/dateparse"
+
"github.com/bluesky-social/indigo/api/bsky"
+
"github.com/bluesky-social/indigo/atproto/syntax"
+
)
+
+
func (s *Server) handleCreate(ctx context.Context, recb []byte, indexedAt, rev, did, collection, rkey, cid, seq string) error {
+
iat, err := dateparse.ParseAny(indexedAt)
+
if err != nil {
+
return err
+
}
+
+
switch collection {
+
case "app.bsky.feed.post":
+
return s.handleCreatePost(ctx, rev, recb, uriFromParts(did, collection, rkey), did, collection, rkey, cid, iat)
+
case "app.bsky.feed.like":
+
return s.handleCreateLike(ctx, rev, recb, uriFromParts(did, collection, rkey), did, collection, rkey, cid, iat)
+
case "app.bsky.feed.repost":
+
return s.handleCreateRepost(ctx, rev, recb, uriFromParts(did, collection, rkey), did, collection, rkey, cid, iat)
+
default:
+
return nil
+
}
+
}
+
+
func (s *Server) handleCreatePost(ctx context.Context, rev string, recb []byte, uri, did, collection, rkey, cid string, indexedAt time.Time) error {
+
var rec bsky.FeedPost
+
if err := rec.UnmarshalCBOR(bytes.NewReader(recb)); err != nil {
+
return err
+
}
+
+
for fname, f := range s.feeds {
+
go func() {
+
if err := f.OnPost(ctx, &rec, uri, did, rkey, cid, indexedAt); err != nil {
+
s.logger.Error("error running on post", "feed", fname, "error", err)
+
}
+
}()
+
}
+
+
return nil
+
}
+
+
func (s *Server) handleCreateLike(ctx context.Context, rev string, recb []byte, uri, did, collection, rkey, cid string, indexedAt time.Time) error {
+
var rec bsky.FeedLike
+
if err := rec.UnmarshalCBOR(bytes.NewReader(recb)); err != nil {
+
return err
+
}
+
+
for fname, f := range s.feeds {
+
go func() {
+
if err := f.OnLike(ctx, &rec, uri, did, rkey, cid, indexedAt); err != nil {
+
s.logger.Error("error running on like", "feed", fname, "error", err)
+
}
+
}()
+
}
+
+
return nil
+
}
+
+
func (s *Server) handleCreateRepost(ctx context.Context, rev string, recb []byte, uri, did, collection, rkey, cid string, indexedAt time.Time) error {
+
var rec bsky.FeedRepost
+
if err := rec.UnmarshalCBOR(bytes.NewReader(recb)); err != nil {
+
return err
+
}
+
+
for fname, f := range s.feeds {
+
go func() {
+
if err := f.OnRepost(ctx, &rec, uri, did, rkey, cid, indexedAt); err != nil {
+
s.logger.Error("error running on repost", "feed", fname, "error", err)
+
}
+
}()
+
}
+
+
return nil
+
}
+
+
func uriFromParts(did string, collection string, rkey string) string {
+
return "at://" + did + "/" + collection + "/" + rkey
+
}
+
+
func parseTimeFromRecord(rec any, rkey string) (*time.Time, error) {
+
var rkeyTime time.Time
+
if rkey != "self" {
+
rt, err := syntax.ParseTID(rkey)
+
if err == nil {
+
rkeyTime = rt.Time()
+
}
+
}
+
switch rec := rec.(type) {
+
case *bsky.FeedPost:
+
t, err := dateparse.ParseAny(rec.CreatedAt)
+
if err != nil {
+
return nil, err
+
}
+
+
if inRange(t) {
+
return &t, nil
+
}
+
+
if rkeyTime.IsZero() || !inRange(rkeyTime) {
+
return timePtr(time.Now()), nil
+
}
+
+
return &rkeyTime, nil
+
case *bsky.FeedRepost:
+
t, err := dateparse.ParseAny(rec.CreatedAt)
+
if err != nil {
+
return nil, err
+
}
+
+
if inRange(t) {
+
return timePtr(t), nil
+
}
+
+
if rkeyTime.IsZero() {
+
return nil, fmt.Errorf("failed to get a useful timestamp from record")
+
}
+
+
return &rkeyTime, nil
+
case *bsky.FeedLike:
+
t, err := dateparse.ParseAny(rec.CreatedAt)
+
if err != nil {
+
return nil, err
+
}
+
+
if inRange(t) {
+
return timePtr(t), nil
+
}
+
+
if rkeyTime.IsZero() {
+
return nil, fmt.Errorf("failed to get a useful timestamp from record")
+
}
+
+
return &rkeyTime, nil
+
case *bsky.ActorProfile:
+
// We can't really trust the createdat in the profile record anyway, and its very possible its missing. just use iat for this one
+
return timePtr(time.Now()), nil
+
case *bsky.FeedGenerator:
+
if !rkeyTime.IsZero() && inRange(rkeyTime) {
+
return &rkeyTime, nil
+
}
+
return timePtr(time.Now()), nil
+
default:
+
if !rkeyTime.IsZero() && inRange(rkeyTime) {
+
return &rkeyTime, nil
+
}
+
return timePtr(time.Now()), nil
+
}
+
}
+
+
func inRange(t time.Time) bool {
+
now := time.Now()
+
if t.Before(now) {
+
return now.Sub(t) <= time.Hour*24*365*5
+
}
+
return t.Sub(now) <= time.Hour*24*200
+
}
+
+
func timePtr(t time.Time) *time.Time {
+
return &t
+
}
+90 -4
peruse/handle_seattle_feed.go
···
import (
"context"
+
"encoding/json"
"fmt"
"log/slog"
+
"strings"
"sync"
"time"
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
+
"github.com/bluesky-social/indigo/api/bsky"
"github.com/haileyok/peruse/internal/helpers"
+
"github.com/haileyok/peruse/wikidata"
+
"github.com/haileyok/photocopy/clickhouse_inserter"
+
"github.com/haileyok/photocopy/nervana"
"github.com/labstack/echo/v4"
)
···
cached []RankedFeedPost
cacheExpiresAt time.Time
mu sync.RWMutex
+
nervanaClient *nervana.Client
+
entityIds map[string]bool
+
inserter *clickhouse_inserter.Inserter
}
-
func NewSeattleFeed(s *Server) *SeattleFeed {
+
func NewSeattleFeed(ctx context.Context, s *Server) *SeattleFeed {
logger := s.logger.With("feed", "seattle-feed")
+
+
var entities []wikidata.Entity
+
if err := json.Unmarshal([]byte(wikidata.SeattleEntities), &entities); err != nil {
+
panic(err)
+
}
+
+
entitiyIds := map[string]bool{}
+
for _, e := range entities {
+
pts := strings.Split(e.Entity, "/")
+
if len(pts) == 0 {
+
continue
+
}
+
id := pts[len(pts)-1]
+
if !strings.HasPrefix("Q", id) {
+
continue
+
}
+
entitiyIds[id] = true
+
}
+
+
inserter, err := clickhouse_inserter.New(ctx, &clickhouse_inserter.Args{
+
PrometheusCounterPrefix: "photocopy_follows",
+
BatchSize: 1,
+
Logger: s.logger,
+
Conn: s.conn,
+
Query: "INSERT INTO seattle_post (uri, created_at)",
+
RateLimit: 3,
+
})
+
if err != nil {
+
panic(err)
+
}
+
return &SeattleFeed{
-
conn: s.conn,
-
logger: logger,
+
conn: s.conn,
+
logger: logger,
+
nervanaClient: s.nervanaClient,
+
entityIds: entitiyIds,
+
inserter: inserter,
}
}
···
return "seattle"
}
-
func (f *SeattleFeed) HandleGetFeedSkeleton(e echo.Context, req FeedSkeletonRequest) error {
+
func (f *SeattleFeed) FeedSkeleton(e echo.Context, req FeedSkeletonRequest) error {
ctx := e.Request().Context()
cursor, err := getTimeBasedCursor(req)
···
Feed: items,
Cursor: &newCursor,
})
+
}
+
+
type FeedDatabaseItem struct {
+
Uri string `ch:"uri"`
+
CreatedAt time.Time `ch:"created_at"`
+
}
+
+
func (f *SeattleFeed) OnPost(ctx context.Context, post *bsky.FeedPost, uri, did, rkey, cid string, indexedAt time.Time) error {
+
if post.Reply != nil {
+
return nil
+
}
+
+
if post.Text == "" {
+
return nil
+
}
+
+
nerItems, err := f.nervanaClient.MakeRequest(ctx, post.Text)
+
if err != nil {
+
return err
+
}
+
+
for _, item := range nerItems {
+
if f.entityIds[item.EntityId] {
+
fdi := FeedDatabaseItem{
+
Uri: uri,
+
CreatedAt: indexedAt,
+
}
+
if err := f.inserter.Insert(ctx, fdi); err != nil {
+
return err
+
}
+
break
+
}
+
}
+
+
return nil
+
}
+
+
func (f *SeattleFeed) OnLike(ctx context.Context, like *bsky.FeedLike, uri, did, rkey, cid string, indexedAt time.Time) error {
+
return nil
+
}
+
+
func (f *SeattleFeed) OnRepost(ctx context.Context, repost *bsky.FeedRepost, uri, did, rkey, cid string, indexedAt time.Time) error {
+
return nil
}
func (f *SeattleFeed) getPosts(ctx context.Context) ([]RankedFeedPost, error) {
+27 -13
peruse/peruse.go
···
"github.com/ClickHouse/clickhouse-go/v2"
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
+
"github.com/bluesky-social/indigo/api/bsky"
"github.com/bluesky-social/indigo/atproto/identity"
"github.com/bluesky-social/indigo/xrpc"
"github.com/haileyok/peruse/internal/helpers"
+
"github.com/haileyok/photocopy/nervana"
lru "github.com/hashicorp/golang-lru/v2"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
···
)
type Server struct {
-
httpd *http.Server
-
echo *echo.Echo
-
conn driver.Conn
-
logger *slog.Logger
-
args *ServerArgs
-
keyCache *lru.Cache[string, crypto.PublicKey]
-
directory identity.Directory
-
userManager *UserManager
-
xrpc *xrpc.Client
-
feeds map[string]Feed
+
httpd *http.Server
+
echo *echo.Echo
+
conn driver.Conn
+
logger *slog.Logger
+
args *ServerArgs
+
keyCache *lru.Cache[string, crypto.PublicKey]
+
directory identity.Directory
+
userManager *UserManager
+
xrpc *xrpc.Client
+
feeds map[string]Feed
+
cursor string
+
nervanaClient *nervana.Client
}
type ServerArgs struct {
···
ServiceEndpoint string
ChronoFeedRkey string
SuggestedFollowsRkey string
+
CursorFile string
+
RelayHost string
+
NervanaEndpoint string
+
NervanaApiKey string
}
type Feed interface {
Name() string
-
HandleGetFeedSkeleton(e echo.Context, req FeedSkeletonRequest) error
+
FeedSkeleton(e echo.Context, req FeedSkeletonRequest) error
+
OnPost(ctx context.Context, post *bsky.FeedPost, uri, did, rkey, cid string, indexedAt time.Time) error
+
OnLike(ctx context.Context, like *bsky.FeedLike, uri, did, rkey, cid string, indexedAt time.Time) error
+
OnRepost(ctx context.Context, repost *bsky.FeedRepost, uri, did, rkey, cid string, indexedAt time.Time) error
}
func NewServer(args ServerArgs) (*Server, error) {
···
dir := identity.NewCacheDirectory(&baseDir, 100_000, time.Hour*48, time.Minute*15, time.Minute*15)
+
nervanaClient := nervana.NewClient(args.NervanaEndpoint, args.NervanaApiKey)
+
return &Server{
echo: e,
httpd: httpd,
···
xrpc: &xrpc.Client{
Host: "https://public.api.bsky.app",
},
-
feeds: map[string]Feed{},
+
feeds: map[string]Feed{},
+
nervanaClient: nervanaClient,
}, nil
}
···
defer cancel()
s.addFeed(NewBaseballFeed(s))
-
s.addFeed(NewSeattleFeed(s))
+
s.addFeed(NewSeattleFeed(ctx, s))
s.addRoutes()
+7
wikidata/seattle.go
···
+
package wikidata
+
+
type Entity struct {
+
Entity string `json:"entity"`
+
}
+
+
var SeattleEntities = `[{"entity":"http://www.wikidata.org/entity/Q162005"},{"entity":"http://www.wikidata.org/entity/Q219563"},{"entity":"http://www.wikidata.org/entity/Q330519"},{"entity":"http://www.wikidata.org/entity/Q2607186"},{"entity":"http://www.wikidata.org/entity/Q2899248"},{"entity":"http://www.wikidata.org/entity/Q3435958"},{"entity":"http://www.wikidata.org/entity/Q4848353"},{"entity":"http://www.wikidata.org/entity/Q4977626"},{"entity":"http://www.wikidata.org/entity/Q5545633"},{"entity":"http://www.wikidata.org/entity/Q5585769"},{"entity":"http://www.wikidata.org/entity/Q5730634"},{"entity":"http://www.wikidata.org/entity/Q4708665"},{"entity":"http://www.wikidata.org/entity/Q1431833"},{"entity":"http://www.wikidata.org/entity/Q1544869"},{"entity":"http://www.wikidata.org/entity/Q632511"},{"entity":"http://www.wikidata.org/entity/Q23762614"},{"entity":"http://www.wikidata.org/entity/Q1586688"},{"entity":"http://www.wikidata.org/entity/Q1898180"},{"entity":"http://www.wikidata.org/entity/Q4907978"},{"entity":"http://www.wikidata.org/entity/Q5300944"},{"entity":"http://www.wikidata.org/entity/Q6262560"},{"entity":"http://www.wikidata.org/entity/Q19560384"},{"entity":"http://www.wikidata.org/entity/Q73571559"},{"entity":"http://www.wikidata.org/entity/Q81732213"},{"entity":"http://www.wikidata.org/entity/Q111972824"},{"entity":"http://www.wikidata.org/entity/Q886900"},{"entity":"http://www.wikidata.org/entity/Q1638787"},{"entity":"http://www.wikidata.org/entity/Q73585531"},{"entity":"http://www.wikidata.org/entity/Q111325344"},{"entity":"http://www.wikidata.org/entity/Q112136800"},{"entity":"http://www.wikidata.org/entity/Q134739112"},{"entity":"http://www.wikidata.org/entity/Q1384356"},{"entity":"http://www.wikidata.org/entity/Q6179244"},{"entity":"http://www.wikidata.org/entity/Q7085847"},{"entity":"http://www.wikidata.org/entity/Q7153455"},{"entity":"http://www.wikidata.org/entity/Q7803247"},{"entity":"http://www.wikidata.org/entity/Q7983864"},{"entity":"http://www.wikidata.org/entity/Q15876246"},{"entity":"http://www.wikidata.org/entity/Q15879503"},{"entity":"http://www.wikidata.org/entity/Q16847560"},{"entity":"http://www.wikidata.org/entity/Q1431833"},{"entity":"http://www.wikidata.org/entity/Q6728111"},{"entity":"http://www.wikidata.org/entity/Q47540697"},{"entity":"http://www.wikidata.org/entity/Q57955113"},{"entity":"http://www.wikidata.org/entity/Q61162105"},{"entity":"http://www.wikidata.org/entity/Q4639809"},{"entity":"http://www.wikidata.org/entity/Q4708490"},{"entity":"http://www.wikidata.org/entity/Q6925713"},{"entity":"http://www.wikidata.org/entity/Q3101340"},{"entity":"http://www.wikidata.org/entity/Q1544869"},{"entity":"http://www.wikidata.org/entity/Q2094660"},{"entity":"http://www.wikidata.org/entity/Q3953620"},{"entity":"http://www.wikidata.org/entity/Q3030228"},{"entity":"http://www.wikidata.org/entity/Q1993203"},{"entity":"http://www.wikidata.org/entity/Q3044487"},{"entity":"http://www.wikidata.org/entity/Q3423797"},{"entity":"http://www.wikidata.org/entity/Q3848341"},{"entity":"http://www.wikidata.org/entity/Q21666099"},{"entity":"http://www.wikidata.org/entity/Q14713785"},{"entity":"http://www.wikidata.org/entity/Q16255542"},{"entity":"http://www.wikidata.org/entity/Q16255542"},{"entity":"http://www.wikidata.org/entity/Q3848341"},{"entity":"http://www.wikidata.org/entity/Q4738153"},{"entity":"http://www.wikidata.org/entity/Q4879959"},{"entity":"http://www.wikidata.org/entity/Q4972325"},{"entity":"http://www.wikidata.org/entity/Q5350989"},{"entity":"http://www.wikidata.org/entity/Q5440316"},{"entity":"http://www.wikidata.org/entity/Q48780456"},{"entity":"http://www.wikidata.org/entity/Q5147728"},{"entity":"http://www.wikidata.org/entity/Q5312501"},{"entity":"http://www.wikidata.org/entity/Q5259218"},{"entity":"http://www.wikidata.org/entity/Q55630005"},{"entity":"http://www.wikidata.org/entity/Q56276851"},{"entity":"http://www.wikidata.org/entity/Q60750954"},{"entity":"http://www.wikidata.org/entity/Q60750954"},{"entity":"http://www.wikidata.org/entity/Q61283732"},{"entity":"http://www.wikidata.org/entity/Q61283736"},{"entity":"http://www.wikidata.org/entity/Q5579416"},{"entity":"http://www.wikidata.org/entity/Q5642894"},{"entity":"http://www.wikidata.org/entity/Q61302378"},{"entity":"http://www.wikidata.org/entity/Q61314912"},{"entity":"http://www.wikidata.org/entity/Q61315216"},{"entity":"http://www.wikidata.org/entity/Q61412504"},{"entity":"http://www.wikidata.org/entity/Q61412622"},{"entity":"http://www.wikidata.org/entity/Q61439084"},{"entity":"http://www.wikidata.org/entity/Q61439986"},{"entity":"http://www.wikidata.org/entity/Q84730426"},{"entity":"http://www.wikidata.org/entity/Q90871623"},{"entity":"http://www.wikidata.org/entity/Q5591218"},{"entity":"http://www.wikidata.org/entity/Q5501614"},{"entity":"http://www.wikidata.org/entity/Q5504617"},{"entity":"http://www.wikidata.org/entity/Q6704117"},{"entity":"http://www.wikidata.org/entity/Q5967559"},{"entity":"http://www.wikidata.org/entity/Q6111303"},{"entity":"http://www.wikidata.org/entity/Q6441303"},{"entity":"http://www.wikidata.org/entity/Q111146226"},{"entity":"http://www.wikidata.org/entity/Q6478207"},{"entity":"http://www.wikidata.org/entity/Q6530305"},{"entity":"http://www.wikidata.org/entity/Q6940805"},{"entity":"http://www.wikidata.org/entity/Q6688498"},{"entity":"http://www.wikidata.org/entity/Q6728065"},{"entity":"http://www.wikidata.org/entity/Q6728670"},{"entity":"http://www.wikidata.org/entity/Q6772773"},{"entity":"http://www.wikidata.org/entity/Q7157416"},{"entity":"http://www.wikidata.org/entity/Q7060076"},{"entity":"http://www.wikidata.org/entity/Q7075692"},{"entity":"http://www.wikidata.org/entity/Q6441303"},{"entity":"http://www.wikidata.org/entity/Q7122556"},{"entity":"http://www.wikidata.org/entity/Q7122625"},{"entity":"http://www.wikidata.org/entity/Q7305086"},{"entity":"http://www.wikidata.org/entity/Q7339078"},{"entity":"http://www.wikidata.org/entity/Q7431836"},{"entity":"http://www.wikidata.org/entity/Q7050698"},{"entity":"http://www.wikidata.org/entity/Q7715010"},{"entity":"http://www.wikidata.org/entity/Q7654755"},{"entity":"http://www.wikidata.org/entity/Q7654632"},{"entity":"http://www.wikidata.org/entity/Q7589959"},{"entity":"http://www.wikidata.org/entity/Q7689934"},{"entity":"http://www.wikidata.org/entity/Q7533112"},{"entity":"http://www.wikidata.org/entity/Q131151921"},{"entity":"http://www.wikidata.org/entity/Q7934401"},{"entity":"http://www.wikidata.org/entity/Q7934403"},{"entity":"http://www.wikidata.org/entity/Q7896576"},{"entity":"http://www.wikidata.org/entity/Q10719197"},{"entity":"http://www.wikidata.org/entity/Q12060487"},{"entity":"http://www.wikidata.org/entity/Q15885443"},{"entity":"http://www.wikidata.org/entity/Q28923082"},{"entity":"http://www.wikidata.org/entity/Q7972107"},{"entity":"http://www.wikidata.org/entity/Q8025096"},{"entity":"http://www.wikidata.org/entity/Q19864159"},{"entity":"http://www.wikidata.org/entity/Q14923125"},{"entity":"http://www.wikidata.org/entity/Q10323074"},{"entity":"http://www.wikidata.org/entity/Q12054012"},{"entity":"http://www.wikidata.org/entity/Q12060863"},{"entity":"http://www.wikidata.org/entity/Q7988968"},{"entity":"http://www.wikidata.org/entity/Q7988988"},{"entity":"http://www.wikidata.org/entity/Q16892147"},{"entity":"http://www.wikidata.org/entity/Q16901536"},{"entity":"http://www.wikidata.org/entity/Q15885623"},{"entity":"http://www.wikidata.org/entity/Q15885760"},{"entity":"http://www.wikidata.org/entity/Q14713809"},{"entity":"http://www.wikidata.org/entity/Q21070919"},{"entity":"http://www.wikidata.org/entity/Q16903149"},{"entity":"http://www.wikidata.org/entity/Q24036679"},{"entity":"http://www.wikidata.org/entity/Q24068107"},{"entity":"http://www.wikidata.org/entity/Q17031601"},{"entity":"http://www.wikidata.org/entity/Q25196756"},{"entity":"http://www.wikidata.org/entity/Q26708573"},{"entity":"http://www.wikidata.org/entity/Q536131"},{"entity":"http://www.wikidata.org/entity/Q612736"},{"entity":"http://www.wikidata.org/entity/Q28232682"},{"entity":"http://www.wikidata.org/entity/Q28340084"},{"entity":"http://www.wikidata.org/entity/Q28452046"},{"entity":"http://www.wikidata.org/entity/Q28453148"},{"entity":"http://www.wikidata.org/entity/Q21016048"},{"entity":"http://www.wikidata.org/entity/Q977529"},{"entity":"http://www.wikidata.org/entity/Q990430"},{"entity":"http://www.wikidata.org/entity/Q1136463"},{"entity":"http://www.wikidata.org/entity/Q1193117"},{"entity":"http://www.wikidata.org/entity/Q386819"},{"entity":"http://www.wikidata.org/entity/Q29641856"},{"entity":"http://www.wikidata.org/entity/Q7231262"},{"entity":"http://www.wikidata.org/entity/Q28445714"},{"entity":"http://www.wikidata.org/entity/Q28232763"},{"entity":"http://www.wikidata.org/entity/Q3363536"},{"entity":"http://www.wikidata.org/entity/Q59422166"},{"entity":"http://www.wikidata.org/entity/Q55075027"},{"entity":"http://www.wikidata.org/entity/Q5145768"},{"entity":"http://www.wikidata.org/entity/Q6127401"},{"entity":"http://www.wikidata.org/entity/Q6588210"},{"entity":"http://www.wikidata.org/entity/Q5594668"},{"entity":"http://www.wikidata.org/entity/Q5594850"},{"entity":"http://www.wikidata.org/entity/Q43306735"},{"entity":"http://www.wikidata.org/entity/Q6908241"},{"entity":"http://www.wikidata.org/entity/Q48596158"},{"entity":"http://www.wikidata.org/entity/Q51691912"},{"entity":"http://www.wikidata.org/entity/Q54962876"},{"entity":"http://www.wikidata.org/entity/Q55091780"},{"entity":"http://www.wikidata.org/entity/Q49528855"},{"entity":"http://www.wikidata.org/entity/Q49546704"},{"entity":"http://www.wikidata.org/entity/Q60785759"},{"entity":"http://www.wikidata.org/entity/Q56670195"},{"entity":"http://www.wikidata.org/entity/Q7231262"},{"entity":"http://www.wikidata.org/entity/Q109975486"},{"entity":"http://www.wikidata.org/entity/Q95215957"},{"entity":"http://www.wikidata.org/entity/Q85812269"},{"entity":"http://www.wikidata.org/entity/Q55462282"},{"entity":"http://www.wikidata.org/entity/Q7442077"},{"entity":"http://www.wikidata.org/entity/Q60761290"},{"entity":"http://www.wikidata.org/entity/Q7684822"},{"entity":"http://www.wikidata.org/entity/Q7749676"},{"entity":"http://www.wikidata.org/entity/Q7674023"},{"entity":"http://www.wikidata.org/entity/Q7896583"},{"entity":"http://www.wikidata.org/entity/Q134281331"},{"entity":"http://www.wikidata.org/entity/Q65032367"},{"entity":"http://www.wikidata.org/entity/Q98277901"},{"entity":"http://www.wikidata.org/entity/Q4883918"},{"entity":"http://www.wikidata.org/entity/Q120967614"},{"entity":"http://www.wikidata.org/entity/Q120967614"},{"entity":"http://www.wikidata.org/entity/Q16892147"},{"entity":"http://www.wikidata.org/entity/Q29829461"},{"entity":"http://www.wikidata.org/entity/Q7442144"},{"entity":"http://www.wikidata.org/entity/Q105343857"},{"entity":"http://www.wikidata.org/entity/Q266022"},{"entity":"http://www.wikidata.org/entity/Q43306500"},{"entity":"http://www.wikidata.org/entity/Q43306504"},{"entity":"http://www.wikidata.org/entity/Q43306509"},{"entity":"http://www.wikidata.org/entity/Q43306512"},{"entity":"http://www.wikidata.org/entity/Q43306514"},{"entity":"http://www.wikidata.org/entity/Q43306517"},{"entity":"http://www.wikidata.org/entity/Q43306520"},{"entity":"http://www.wikidata.org/entity/Q43306522"},{"entity":"http://www.wikidata.org/entity/Q43306525"},{"entity":"http://www.wikidata.org/entity/Q108391471"},{"entity":"http://www.wikidata.org/entity/Q43305521"},{"entity":"http://www.wikidata.org/entity/Q43305522"},{"entity":"http://www.wikidata.org/entity/Q43305835"},{"entity":"http://www.wikidata.org/entity/Q43305841"},{"entity":"http://www.wikidata.org/entity/Q43305843"},{"entity":"http://www.wikidata.org/entity/Q43305845"},{"entity":"http://www.wikidata.org/entity/Q43305848"},{"entity":"http://www.wikidata.org/entity/Q43305852"},{"entity":"http://www.wikidata.org/entity/Q43305854"},{"entity":"http://www.wikidata.org/entity/Q43305856"},{"entity":"http://www.wikidata.org/entity/Q43305860"},{"entity":"http://www.wikidata.org/entity/Q43305863"},{"entity":"http://www.wikidata.org/entity/Q43306244"},{"entity":"http://www.wikidata.org/entity/Q43306248"},{"entity":"http://www.wikidata.org/entity/Q43306439"},{"entity":"http://www.wikidata.org/entity/Q43306456"},{"entity":"http://www.wikidata.org/entity/Q43306497"},{"entity":"http://www.wikidata.org/entity/Q109594728"},{"entity":"http://www.wikidata.org/entity/Q111393657"},{"entity":"http://www.wikidata.org/entity/Q111398756"},{"entity":"http://www.wikidata.org/entity/Q111915839"},{"entity":"http://www.wikidata.org/entity/Q43306543"},{"entity":"http://www.wikidata.org/entity/Q43306555"},{"entity":"http://www.wikidata.org/entity/Q43306566"},{"entity":"http://www.wikidata.org/entity/Q43306569"},{"entity":"http://www.wikidata.org/entity/Q43306571"},{"entity":"http://www.wikidata.org/entity/Q43306574"},{"entity":"http://www.wikidata.org/entity/Q43306579"},{"entity":"http://www.wikidata.org/entity/Q43306582"},{"entity":"http://www.wikidata.org/entity/Q43306585"},{"entity":"http://www.wikidata.org/entity/Q108414533"},{"entity":"http://www.wikidata.org/entity/Q108649500"},{"entity":"http://www.wikidata.org/entity/Q43306591"},{"entity":"http://www.wikidata.org/entity/Q43306595"},{"entity":"http://www.wikidata.org/entity/Q43306597"},{"entity":"http://www.wikidata.org/entity/Q43306601"},{"entity":"http://www.wikidata.org/entity/Q43306603"},{"entity":"http://www.wikidata.org/entity/Q43306607"},{"entity":"http://www.wikidata.org/entity/Q43306614"},{"entity":"http://www.wikidata.org/entity/Q43306617"},{"entity":"http://www.wikidata.org/entity/Q43306633"},{"entity":"http://www.wikidata.org/entity/Q43306639"},{"entity":"http://www.wikidata.org/entity/Q43306642"},{"entity":"http://www.wikidata.org/entity/Q43306645"},{"entity":"http://www.wikidata.org/entity/Q43306648"},{"entity":"http://www.wikidata.org/entity/Q43306650"},{"entity":"http://www.wikidata.org/entity/Q43306653"},{"entity":"http://www.wikidata.org/entity/Q43306655"},{"entity":"http://www.wikidata.org/entity/Q43306658"},{"entity":"http://www.wikidata.org/entity/Q43306660"},{"entity":"http://www.wikidata.org/entity/Q112999613"},{"entity":"http://www.wikidata.org/entity/Q115111291"},{"entity":"http://www.wikidata.org/entity/Q115210417"},{"entity":"http://www.wikidata.org/entity/Q115311524"},{"entity":"http://www.wikidata.org/entity/Q115517041"},{"entity":"http://www.wikidata.org/entity/Q114854470"},{"entity":"http://www.wikidata.org/entity/Q114854476"},{"entity":"http://www.wikidata.org/entity/Q114857469"},{"entity":"http://www.wikidata.org/entity/Q43306738"},{"entity":"http://www.wikidata.org/entity/Q43306740"},{"entity":"http://www.wikidata.org/entity/Q43306743"},{"entity":"http://www.wikidata.org/entity/Q43306747"},{"entity":"http://www.wikidata.org/entity/Q43306750"},{"entity":"http://www.wikidata.org/entity/Q43306752"},{"entity":"http://www.wikidata.org/entity/Q43306761"},{"entity":"http://www.wikidata.org/entity/Q43306769"},{"entity":"http://www.wikidata.org/entity/Q43306782"},{"entity":"http://www.wikidata.org/entity/Q114650397"},{"entity":"http://www.wikidata.org/entity/Q114667521"},{"entity":"http://www.wikidata.org/entity/Q116263904"},{"entity":"http://www.wikidata.org/entity/Q43306704"},{"entity":"http://www.wikidata.org/entity/Q43306713"},{"entity":"http://www.wikidata.org/entity/Q43306716"},{"entity":"http://www.wikidata.org/entity/Q43306720"},{"entity":"http://www.wikidata.org/entity/Q43306723"},{"entity":"http://www.wikidata.org/entity/Q43306726"},{"entity":"http://www.wikidata.org/entity/Q43306730"},{"entity":"http://www.wikidata.org/entity/Q43306732"},{"entity":"http://www.wikidata.org/entity/Q43306735"},{"entity":"http://www.wikidata.org/entity/Q118112792"},{"entity":"http://www.wikidata.org/entity/Q115924160"},{"entity":"http://www.wikidata.org/entity/Q115951485"},{"entity":"http://www.wikidata.org/entity/Q43306663"},{"entity":"http://www.wikidata.org/entity/Q43306665"},{"entity":"http://www.wikidata.org/entity/Q43306668"},{"entity":"http://www.wikidata.org/entity/Q43306672"},{"entity":"http://www.wikidata.org/entity/Q43306677"},{"entity":"http://www.wikidata.org/entity/Q43306680"},{"entity":"http://www.wikidata.org/entity/Q43306683"},{"entity":"http://www.wikidata.org/entity/Q43306686"},{"entity":"http://www.wikidata.org/entity/Q43306690"},{"entity":"http://www.wikidata.org/entity/Q43306692"},{"entity":"http://www.wikidata.org/entity/Q118902331"},{"entity":"http://www.wikidata.org/entity/Q43306786"},{"entity":"http://www.wikidata.org/entity/Q43306790"},{"entity":"http://www.wikidata.org/entity/Q43306792"},{"entity":"http://www.wikidata.org/entity/Q43306796"},{"entity":"http://www.wikidata.org/entity/Q43306803"},{"entity":"http://www.wikidata.org/entity/Q119459067"},{"entity":"http://www.wikidata.org/entity/Q118347472"},{"entity":"http://www.wikidata.org/entity/Q116005984"},{"entity":"http://www.wikidata.org/entity/Q116383859"},{"entity":"http://www.wikidata.org/entity/Q116846165"},{"entity":"http://www.wikidata.org/entity/Q88225662"},{"entity":"http://www.wikidata.org/entity/Q120911369"},{"entity":"http://www.wikidata.org/entity/Q120968895"},{"entity":"http://www.wikidata.org/entity/Q121051583"},{"entity":"http://www.wikidata.org/entity/Q78083607"},{"entity":"http://www.wikidata.org/entity/Q120967614"},{"entity":"http://www.wikidata.org/entity/Q120967614"},{"entity":"http://www.wikidata.org/entity/Q124963205"},{"entity":"http://www.wikidata.org/entity/Q122943681"},{"entity":"http://www.wikidata.org/entity/Q122760323"},{"entity":"http://www.wikidata.org/entity/Q130016160"},{"entity":"http://www.wikidata.org/entity/Q125414871"},{"entity":"http://www.wikidata.org/entity/Q130320793"},{"entity":"http://www.wikidata.org/entity/Q130320795"},{"entity":"http://www.wikidata.org/entity/Q130320799"},{"entity":"http://www.wikidata.org/entity/Q130320802"},{"entity":"http://www.wikidata.org/entity/Q130320805"},{"entity":"http://www.wikidata.org/entity/Q130320823"},{"entity":"http://www.wikidata.org/entity/Q123524670"},{"entity":"http://www.wikidata.org/entity/Q125421015"},{"entity":"http://www.wikidata.org/entity/Q126063252"},{"entity":"http://www.wikidata.org/entity/Q134454528"},{"entity":"http://www.wikidata.org/entity/Q130320838"},{"entity":"http://www.wikidata.org/entity/Q130320841"},{"entity":"http://www.wikidata.org/entity/Q130320842"},{"entity":"http://www.wikidata.org/entity/Q130348301"},{"entity":"http://www.wikidata.org/entity/Q6934523"},{"entity":"http://www.wikidata.org/entity/Q134274422"},{"entity":"http://www.wikidata.org/entity/Q115723506"},{"entity":"http://www.wikidata.org/entity/Q7896583"},{"entity":"http://www.wikidata.org/entity/Q119322456"},{"entity":"http://www.wikidata.org/entity/Q118908165"},{"entity":"http://www.wikidata.org/entity/Q4883926"},{"entity":"http://www.wikidata.org/entity/Q13218740"},{"entity":"http://www.wikidata.org/entity/Q38251450"},{"entity":"http://www.wikidata.org/entity/Q125400769"},{"entity":"http://www.wikidata.org/entity/Q7306115"},{"entity":"http://www.wikidata.org/entity/Q130272442"},{"entity":"http://www.wikidata.org/entity/Q49476297"},{"entity":"http://www.wikidata.org/entity/Q49578396"},{"entity":"http://www.wikidata.org/entity/Q123561749"},{"entity":"http://www.wikidata.org/entity/Q49473005"},{"entity":"http://www.wikidata.org/entity/Q49488515"},{"entity":"http://www.wikidata.org/entity/Q115904857"},{"entity":"http://www.wikidata.org/entity/Q115907227"},{"entity":"http://www.wikidata.org/entity/Q115907248"},{"entity":"http://www.wikidata.org/entity/Q115907262"},{"entity":"http://www.wikidata.org/entity/Q115907278"},{"entity":"http://www.wikidata.org/entity/Q115907293"},{"entity":"http://www.wikidata.org/entity/Q115907308"},{"entity":"http://www.wikidata.org/entity/Q115907317"},{"entity":"http://www.wikidata.org/entity/Q7113724"},{"entity":"http://www.wikidata.org/entity/Q4883961"},{"entity":"http://www.wikidata.org/entity/Q49495418"},{"entity":"http://www.wikidata.org/entity/Q49504565"},{"entity":"http://www.wikidata.org/entity/Q49508683"},{"entity":"http://www.wikidata.org/entity/Q49579535"},{"entity":"http://www.wikidata.org/entity/Q49581598"},{"entity":"http://www.wikidata.org/entity/Q68361283"},{"entity":"http://www.wikidata.org/entity/Q118020620"},{"entity":"http://www.wikidata.org/entity/Q115903564"},{"entity":"http://www.wikidata.org/entity/Q115903603"},{"entity":"http://www.wikidata.org/entity/Q115904027"},{"entity":"http://www.wikidata.org/entity/Q115904230"},{"entity":"http://www.wikidata.org/entity/Q115904244"},{"entity":"http://www.wikidata.org/entity/Q115904277"},{"entity":"http://www.wikidata.org/entity/Q99522190"},{"entity":"http://www.wikidata.org/entity/Q115904308"},{"entity":"http://www.wikidata.org/entity/Q115904329"},{"entity":"http://www.wikidata.org/entity/Q115904349"},{"entity":"http://www.wikidata.org/entity/Q115904386"},{"entity":"http://www.wikidata.org/entity/Q115904397"},{"entity":"http://www.wikidata.org/entity/Q115904411"},{"entity":"http://www.wikidata.org/entity/Q115904431"},{"entity":"http://www.wikidata.org/entity/Q115904438"},{"entity":"http://www.wikidata.org/entity/Q115904502"},{"entity":"http://www.wikidata.org/entity/Q4856966"},{"entity":"http://www.wikidata.org/entity/Q115917499"},{"entity":"http://www.wikidata.org/entity/Q114406847"},{"entity":"http://www.wikidata.org/entity/Q24534418"},{"entity":"http://www.wikidata.org/entity/Q5417008"},{"entity":"http://www.wikidata.org/entity/Q7252468"},{"entity":"http://www.wikidata.org/entity/Q7313551"},{"entity":"http://www.wikidata.org/entity/Q125467701"},{"entity":"http://www.wikidata.org/entity/Q3497753"},{"entity":"http://www.wikidata.org/entity/Q266022"},{"entity":"http://www.wikidata.org/entity/Q7988334"},{"entity":"http://www.wikidata.org/entity/Q1570942"},{"entity":"http://www.wikidata.org/entity/Q3097823"},{"entity":"http://www.wikidata.org/entity/Q131038502"},{"entity":"http://www.wikidata.org/entity/Q7673991"},{"entity":"http://www.wikidata.org/entity/Q7886107"},{"entity":"http://www.wikidata.org/entity/Q6783772"},{"entity":"http://www.wikidata.org/entity/Q14713900"},{"entity":"http://www.wikidata.org/entity/Q7322149"},{"entity":"http://www.wikidata.org/entity/Q20712322"},{"entity":"http://www.wikidata.org/entity/Q7596473"},{"entity":"http://www.wikidata.org/entity/Q43305456"},{"entity":"http://www.wikidata.org/entity/Q43305457"},{"entity":"http://www.wikidata.org/entity/Q43305568"},{"entity":"http://www.wikidata.org/entity/Q43305569"},{"entity":"http://www.wikidata.org/entity/Q43305244"},{"entity":"http://www.wikidata.org/entity/Q43305533"},{"entity":"http://www.wikidata.org/entity/Q43305535"},{"entity":"http://www.wikidata.org/entity/Q43306951"},{"entity":"http://www.wikidata.org/entity/Q43306954"},{"entity":"http://www.wikidata.org/entity/Q43306956"},{"entity":"http://www.wikidata.org/entity/Q43306959"},{"entity":"http://www.wikidata.org/entity/Q43306961"},{"entity":"http://www.wikidata.org/entity/Q43306963"},{"entity":"http://www.wikidata.org/entity/Q43306965"},{"entity":"http://www.wikidata.org/entity/Q43306966"},{"entity":"http://www.wikidata.org/entity/Q43306967"},{"entity":"http://www.wikidata.org/entity/Q43306969"},{"entity":"http://www.wikidata.org/entity/Q43306970"},{"entity":"http://www.wikidata.org/entity/Q43306974"},{"entity":"http://www.wikidata.org/entity/Q43306976"},{"entity":"http://www.wikidata.org/entity/Q43305570"},{"entity":"http://www.wikidata.org/entity/Q43305571"},{"entity":"http://www.wikidata.org/entity/Q43305573"},{"entity":"http://www.wikidata.org/entity/Q43305575"},{"entity":"http://www.wikidata.org/entity/Q43305576"},{"entity":"http://www.wikidata.org/entity/Q43305577"},{"entity":"http://www.wikidata.org/entity/Q43305578"},{"entity":"http://www.wikidata.org/entity/Q43305477"},{"entity":"http://www.wikidata.org/entity/Q43305663"},{"entity":"http://www.wikidata.org/entity/Q43305664"},{"entity":"http://www.wikidata.org/entity/Q43305665"},{"entity":"http://www.wikidata.org/entity/Q43305666"},{"entity":"http://www.wikidata.org/entity/Q43305667"},{"entity":"http://www.wikidata.org/entity/Q43305668"},{"entity":"http://www.wikidata.org/entity/Q43305487"},{"entity":"http://www.wikidata.org/entity/Q43305707"},{"entity":"http://www.wikidata.org/entity/Q43305708"},{"entity":"http://www.wikidata.org/entity/Q43305709"},{"entity":"http://www.wikidata.org/entity/Q43305710"},{"entity":"http://www.wikidata.org/entity/Q14713788"},{"entity":"http://www.wikidata.org/entity/Q43305716"},{"entity":"http://www.wikidata.org/entity/Q43305718"},{"entity":"http://www.wikidata.org/entity/Q43305719"},{"entity":"http://www.wikidata.org/entity/Q43305721"},{"entity":"http://www.wikidata.org/entity/Q48812715"},{"entity":"http://www.wikidata.org/entity/Q43305669"},{"entity":"http://www.wikidata.org/entity/Q43305670"},{"entity":"http://www.wikidata.org/entity/Q43305671"},{"entity":"http://www.wikidata.org/entity/Q43305672"},{"entity":"http://www.wikidata.org/entity/Q43306978"},{"entity":"http://www.wikidata.org/entity/Q43306979"},{"entity":"http://www.wikidata.org/entity/Q43306980"},{"entity":"http://www.wikidata.org/entity/Q43306982"},{"entity":"http://www.wikidata.org/entity/Q43306983"},{"entity":"http://www.wikidata.org/entity/Q43306984"},{"entity":"http://www.wikidata.org/entity/Q43306986"},{"entity":"http://www.wikidata.org/entity/Q43306988"},{"entity":"http://www.wikidata.org/entity/Q43306991"},{"entity":"http://www.wikidata.org/entity/Q43306995"},{"entity":"http://www.wikidata.org/entity/Q43306996"},{"entity":"http://www.wikidata.org/entity/Q43306998"},{"entity":"http://www.wikidata.org/entity/Q43307000"},{"entity":"http://www.wikidata.org/entity/Q43307002"},{"entity":"http://www.wikidata.org/entity/Q43307003"},{"entity":"http://www.wikidata.org/entity/Q43307004"},{"entity":"http://www.wikidata.org/entity/Q43307005"},{"entity":"http://www.wikidata.org/entity/Q43307006"},{"entity":"http://www.wikidata.org/entity/Q6391588"},{"entity":"http://www.wikidata.org/entity/Q43305806"},{"entity":"http://www.wikidata.org/entity/Q4819233"},{"entity":"http://www.wikidata.org/entity/Q7148630"},{"entity":"http://www.wikidata.org/entity/Q43305455"},{"entity":"http://www.wikidata.org/entity/Q43305559"},{"entity":"http://www.wikidata.org/entity/Q43305560"},{"entity":"http://www.wikidata.org/entity/Q43305562"},{"entity":"http://www.wikidata.org/entity/Q43305563"},{"entity":"http://www.wikidata.org/entity/Q112669585"},{"entity":"http://www.wikidata.org/entity/Q838219"},{"entity":"http://www.wikidata.org/entity/Q43305322"},{"entity":"http://www.wikidata.org/entity/Q3095760"},{"entity":"http://www.wikidata.org/entity/Q3684032"},{"entity":"http://www.wikidata.org/entity/Q43305337"},{"entity":"http://www.wikidata.org/entity/Q43305812"},{"entity":"http://www.wikidata.org/entity/Q43305813"},{"entity":"http://www.wikidata.org/entity/Q43305815"},{"entity":"http://www.wikidata.org/entity/Q43305816"},{"entity":"http://www.wikidata.org/entity/Q43305817"},{"entity":"http://www.wikidata.org/entity/Q43305819"}]`
+504
wikidata/seattle.json
···
+
[
+
{ "entity": "http://www.wikidata.org/entity/Q162005" },
+
{ "entity": "http://www.wikidata.org/entity/Q219563" },
+
{ "entity": "http://www.wikidata.org/entity/Q330519" },
+
{ "entity": "http://www.wikidata.org/entity/Q2607186" },
+
{ "entity": "http://www.wikidata.org/entity/Q2899248" },
+
{ "entity": "http://www.wikidata.org/entity/Q3435958" },
+
{ "entity": "http://www.wikidata.org/entity/Q4848353" },
+
{ "entity": "http://www.wikidata.org/entity/Q4977626" },
+
{ "entity": "http://www.wikidata.org/entity/Q5545633" },
+
{ "entity": "http://www.wikidata.org/entity/Q5585769" },
+
{ "entity": "http://www.wikidata.org/entity/Q5730634" },
+
{ "entity": "http://www.wikidata.org/entity/Q4708665" },
+
{ "entity": "http://www.wikidata.org/entity/Q1431833" },
+
{ "entity": "http://www.wikidata.org/entity/Q1544869" },
+
{ "entity": "http://www.wikidata.org/entity/Q632511" },
+
{ "entity": "http://www.wikidata.org/entity/Q23762614" },
+
{ "entity": "http://www.wikidata.org/entity/Q1586688" },
+
{ "entity": "http://www.wikidata.org/entity/Q1898180" },
+
{ "entity": "http://www.wikidata.org/entity/Q4907978" },
+
{ "entity": "http://www.wikidata.org/entity/Q5300944" },
+
{ "entity": "http://www.wikidata.org/entity/Q6262560" },
+
{ "entity": "http://www.wikidata.org/entity/Q19560384" },
+
{ "entity": "http://www.wikidata.org/entity/Q73571559" },
+
{ "entity": "http://www.wikidata.org/entity/Q81732213" },
+
{ "entity": "http://www.wikidata.org/entity/Q111972824" },
+
{ "entity": "http://www.wikidata.org/entity/Q886900" },
+
{ "entity": "http://www.wikidata.org/entity/Q1638787" },
+
{ "entity": "http://www.wikidata.org/entity/Q73585531" },
+
{ "entity": "http://www.wikidata.org/entity/Q111325344" },
+
{ "entity": "http://www.wikidata.org/entity/Q112136800" },
+
{ "entity": "http://www.wikidata.org/entity/Q134739112" },
+
{ "entity": "http://www.wikidata.org/entity/Q1384356" },
+
{ "entity": "http://www.wikidata.org/entity/Q6179244" },
+
{ "entity": "http://www.wikidata.org/entity/Q7085847" },
+
{ "entity": "http://www.wikidata.org/entity/Q7153455" },
+
{ "entity": "http://www.wikidata.org/entity/Q7803247" },
+
{ "entity": "http://www.wikidata.org/entity/Q7983864" },
+
{ "entity": "http://www.wikidata.org/entity/Q15876246" },
+
{ "entity": "http://www.wikidata.org/entity/Q15879503" },
+
{ "entity": "http://www.wikidata.org/entity/Q16847560" },
+
{ "entity": "http://www.wikidata.org/entity/Q1431833" },
+
{ "entity": "http://www.wikidata.org/entity/Q6728111" },
+
{ "entity": "http://www.wikidata.org/entity/Q47540697" },
+
{ "entity": "http://www.wikidata.org/entity/Q57955113" },
+
{ "entity": "http://www.wikidata.org/entity/Q61162105" },
+
{ "entity": "http://www.wikidata.org/entity/Q4639809" },
+
{ "entity": "http://www.wikidata.org/entity/Q4708490" },
+
{ "entity": "http://www.wikidata.org/entity/Q6925713" },
+
{ "entity": "http://www.wikidata.org/entity/Q3101340" },
+
{ "entity": "http://www.wikidata.org/entity/Q1544869" },
+
{ "entity": "http://www.wikidata.org/entity/Q2094660" },
+
{ "entity": "http://www.wikidata.org/entity/Q3953620" },
+
{ "entity": "http://www.wikidata.org/entity/Q3030228" },
+
{ "entity": "http://www.wikidata.org/entity/Q1993203" },
+
{ "entity": "http://www.wikidata.org/entity/Q3044487" },
+
{ "entity": "http://www.wikidata.org/entity/Q3423797" },
+
{ "entity": "http://www.wikidata.org/entity/Q3848341" },
+
{ "entity": "http://www.wikidata.org/entity/Q21666099" },
+
{ "entity": "http://www.wikidata.org/entity/Q14713785" },
+
{ "entity": "http://www.wikidata.org/entity/Q16255542" },
+
{ "entity": "http://www.wikidata.org/entity/Q16255542" },
+
{ "entity": "http://www.wikidata.org/entity/Q3848341" },
+
{ "entity": "http://www.wikidata.org/entity/Q4738153" },
+
{ "entity": "http://www.wikidata.org/entity/Q4879959" },
+
{ "entity": "http://www.wikidata.org/entity/Q4972325" },
+
{ "entity": "http://www.wikidata.org/entity/Q5350989" },
+
{ "entity": "http://www.wikidata.org/entity/Q5440316" },
+
{ "entity": "http://www.wikidata.org/entity/Q48780456" },
+
{ "entity": "http://www.wikidata.org/entity/Q5147728" },
+
{ "entity": "http://www.wikidata.org/entity/Q5312501" },
+
{ "entity": "http://www.wikidata.org/entity/Q5259218" },
+
{ "entity": "http://www.wikidata.org/entity/Q55630005" },
+
{ "entity": "http://www.wikidata.org/entity/Q56276851" },
+
{ "entity": "http://www.wikidata.org/entity/Q60750954" },
+
{ "entity": "http://www.wikidata.org/entity/Q60750954" },
+
{ "entity": "http://www.wikidata.org/entity/Q61283732" },
+
{ "entity": "http://www.wikidata.org/entity/Q61283736" },
+
{ "entity": "http://www.wikidata.org/entity/Q5579416" },
+
{ "entity": "http://www.wikidata.org/entity/Q5642894" },
+
{ "entity": "http://www.wikidata.org/entity/Q61302378" },
+
{ "entity": "http://www.wikidata.org/entity/Q61314912" },
+
{ "entity": "http://www.wikidata.org/entity/Q61315216" },
+
{ "entity": "http://www.wikidata.org/entity/Q61412504" },
+
{ "entity": "http://www.wikidata.org/entity/Q61412622" },
+
{ "entity": "http://www.wikidata.org/entity/Q61439084" },
+
{ "entity": "http://www.wikidata.org/entity/Q61439986" },
+
{ "entity": "http://www.wikidata.org/entity/Q84730426" },
+
{ "entity": "http://www.wikidata.org/entity/Q90871623" },
+
{ "entity": "http://www.wikidata.org/entity/Q5591218" },
+
{ "entity": "http://www.wikidata.org/entity/Q5501614" },
+
{ "entity": "http://www.wikidata.org/entity/Q5504617" },
+
{ "entity": "http://www.wikidata.org/entity/Q6704117" },
+
{ "entity": "http://www.wikidata.org/entity/Q5967559" },
+
{ "entity": "http://www.wikidata.org/entity/Q6111303" },
+
{ "entity": "http://www.wikidata.org/entity/Q6441303" },
+
{ "entity": "http://www.wikidata.org/entity/Q111146226" },
+
{ "entity": "http://www.wikidata.org/entity/Q6478207" },
+
{ "entity": "http://www.wikidata.org/entity/Q6530305" },
+
{ "entity": "http://www.wikidata.org/entity/Q6940805" },
+
{ "entity": "http://www.wikidata.org/entity/Q6688498" },
+
{ "entity": "http://www.wikidata.org/entity/Q6728065" },
+
{ "entity": "http://www.wikidata.org/entity/Q6728670" },
+
{ "entity": "http://www.wikidata.org/entity/Q6772773" },
+
{ "entity": "http://www.wikidata.org/entity/Q7157416" },
+
{ "entity": "http://www.wikidata.org/entity/Q7060076" },
+
{ "entity": "http://www.wikidata.org/entity/Q7075692" },
+
{ "entity": "http://www.wikidata.org/entity/Q6441303" },
+
{ "entity": "http://www.wikidata.org/entity/Q7122556" },
+
{ "entity": "http://www.wikidata.org/entity/Q7122625" },
+
{ "entity": "http://www.wikidata.org/entity/Q7305086" },
+
{ "entity": "http://www.wikidata.org/entity/Q7339078" },
+
{ "entity": "http://www.wikidata.org/entity/Q7431836" },
+
{ "entity": "http://www.wikidata.org/entity/Q7050698" },
+
{ "entity": "http://www.wikidata.org/entity/Q7715010" },
+
{ "entity": "http://www.wikidata.org/entity/Q7654755" },
+
{ "entity": "http://www.wikidata.org/entity/Q7654632" },
+
{ "entity": "http://www.wikidata.org/entity/Q7589959" },
+
{ "entity": "http://www.wikidata.org/entity/Q7689934" },
+
{ "entity": "http://www.wikidata.org/entity/Q7533112" },
+
{ "entity": "http://www.wikidata.org/entity/Q131151921" },
+
{ "entity": "http://www.wikidata.org/entity/Q7934401" },
+
{ "entity": "http://www.wikidata.org/entity/Q7934403" },
+
{ "entity": "http://www.wikidata.org/entity/Q7896576" },
+
{ "entity": "http://www.wikidata.org/entity/Q10719197" },
+
{ "entity": "http://www.wikidata.org/entity/Q12060487" },
+
{ "entity": "http://www.wikidata.org/entity/Q15885443" },
+
{ "entity": "http://www.wikidata.org/entity/Q28923082" },
+
{ "entity": "http://www.wikidata.org/entity/Q7972107" },
+
{ "entity": "http://www.wikidata.org/entity/Q8025096" },
+
{ "entity": "http://www.wikidata.org/entity/Q19864159" },
+
{ "entity": "http://www.wikidata.org/entity/Q14923125" },
+
{ "entity": "http://www.wikidata.org/entity/Q10323074" },
+
{ "entity": "http://www.wikidata.org/entity/Q12054012" },
+
{ "entity": "http://www.wikidata.org/entity/Q12060863" },
+
{ "entity": "http://www.wikidata.org/entity/Q7988968" },
+
{ "entity": "http://www.wikidata.org/entity/Q7988988" },
+
{ "entity": "http://www.wikidata.org/entity/Q16892147" },
+
{ "entity": "http://www.wikidata.org/entity/Q16901536" },
+
{ "entity": "http://www.wikidata.org/entity/Q15885623" },
+
{ "entity": "http://www.wikidata.org/entity/Q15885760" },
+
{ "entity": "http://www.wikidata.org/entity/Q14713809" },
+
{ "entity": "http://www.wikidata.org/entity/Q21070919" },
+
{ "entity": "http://www.wikidata.org/entity/Q16903149" },
+
{ "entity": "http://www.wikidata.org/entity/Q24036679" },
+
{ "entity": "http://www.wikidata.org/entity/Q24068107" },
+
{ "entity": "http://www.wikidata.org/entity/Q17031601" },
+
{ "entity": "http://www.wikidata.org/entity/Q25196756" },
+
{ "entity": "http://www.wikidata.org/entity/Q26708573" },
+
{ "entity": "http://www.wikidata.org/entity/Q536131" },
+
{ "entity": "http://www.wikidata.org/entity/Q612736" },
+
{ "entity": "http://www.wikidata.org/entity/Q28232682" },
+
{ "entity": "http://www.wikidata.org/entity/Q28340084" },
+
{ "entity": "http://www.wikidata.org/entity/Q28452046" },
+
{ "entity": "http://www.wikidata.org/entity/Q28453148" },
+
{ "entity": "http://www.wikidata.org/entity/Q21016048" },
+
{ "entity": "http://www.wikidata.org/entity/Q977529" },
+
{ "entity": "http://www.wikidata.org/entity/Q990430" },
+
{ "entity": "http://www.wikidata.org/entity/Q1136463" },
+
{ "entity": "http://www.wikidata.org/entity/Q1193117" },
+
{ "entity": "http://www.wikidata.org/entity/Q386819" },
+
{ "entity": "http://www.wikidata.org/entity/Q29641856" },
+
{ "entity": "http://www.wikidata.org/entity/Q7231262" },
+
{ "entity": "http://www.wikidata.org/entity/Q28445714" },
+
{ "entity": "http://www.wikidata.org/entity/Q28232763" },
+
{ "entity": "http://www.wikidata.org/entity/Q3363536" },
+
{ "entity": "http://www.wikidata.org/entity/Q59422166" },
+
{ "entity": "http://www.wikidata.org/entity/Q55075027" },
+
{ "entity": "http://www.wikidata.org/entity/Q5145768" },
+
{ "entity": "http://www.wikidata.org/entity/Q6127401" },
+
{ "entity": "http://www.wikidata.org/entity/Q6588210" },
+
{ "entity": "http://www.wikidata.org/entity/Q5594668" },
+
{ "entity": "http://www.wikidata.org/entity/Q5594850" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306735" },
+
{ "entity": "http://www.wikidata.org/entity/Q6908241" },
+
{ "entity": "http://www.wikidata.org/entity/Q48596158" },
+
{ "entity": "http://www.wikidata.org/entity/Q51691912" },
+
{ "entity": "http://www.wikidata.org/entity/Q54962876" },
+
{ "entity": "http://www.wikidata.org/entity/Q55091780" },
+
{ "entity": "http://www.wikidata.org/entity/Q49528855" },
+
{ "entity": "http://www.wikidata.org/entity/Q49546704" },
+
{ "entity": "http://www.wikidata.org/entity/Q60785759" },
+
{ "entity": "http://www.wikidata.org/entity/Q56670195" },
+
{ "entity": "http://www.wikidata.org/entity/Q7231262" },
+
{ "entity": "http://www.wikidata.org/entity/Q109975486" },
+
{ "entity": "http://www.wikidata.org/entity/Q95215957" },
+
{ "entity": "http://www.wikidata.org/entity/Q85812269" },
+
{ "entity": "http://www.wikidata.org/entity/Q55462282" },
+
{ "entity": "http://www.wikidata.org/entity/Q7442077" },
+
{ "entity": "http://www.wikidata.org/entity/Q60761290" },
+
{ "entity": "http://www.wikidata.org/entity/Q7684822" },
+
{ "entity": "http://www.wikidata.org/entity/Q7749676" },
+
{ "entity": "http://www.wikidata.org/entity/Q7674023" },
+
{ "entity": "http://www.wikidata.org/entity/Q7896583" },
+
{ "entity": "http://www.wikidata.org/entity/Q134281331" },
+
{ "entity": "http://www.wikidata.org/entity/Q65032367" },
+
{ "entity": "http://www.wikidata.org/entity/Q98277901" },
+
{ "entity": "http://www.wikidata.org/entity/Q4883918" },
+
{ "entity": "http://www.wikidata.org/entity/Q120967614" },
+
{ "entity": "http://www.wikidata.org/entity/Q120967614" },
+
{ "entity": "http://www.wikidata.org/entity/Q16892147" },
+
{ "entity": "http://www.wikidata.org/entity/Q29829461" },
+
{ "entity": "http://www.wikidata.org/entity/Q7442144" },
+
{ "entity": "http://www.wikidata.org/entity/Q105343857" },
+
{ "entity": "http://www.wikidata.org/entity/Q266022" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306500" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306504" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306509" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306512" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306514" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306517" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306520" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306522" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306525" },
+
{ "entity": "http://www.wikidata.org/entity/Q108391471" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305521" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305522" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305835" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305841" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305843" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305845" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305848" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305852" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305854" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305856" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305860" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305863" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306244" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306248" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306439" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306456" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306497" },
+
{ "entity": "http://www.wikidata.org/entity/Q109594728" },
+
{ "entity": "http://www.wikidata.org/entity/Q111393657" },
+
{ "entity": "http://www.wikidata.org/entity/Q111398756" },
+
{ "entity": "http://www.wikidata.org/entity/Q111915839" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306543" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306555" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306566" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306569" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306571" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306574" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306579" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306582" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306585" },
+
{ "entity": "http://www.wikidata.org/entity/Q108414533" },
+
{ "entity": "http://www.wikidata.org/entity/Q108649500" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306591" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306595" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306597" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306601" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306603" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306607" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306614" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306617" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306633" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306639" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306642" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306645" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306648" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306650" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306653" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306655" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306658" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306660" },
+
{ "entity": "http://www.wikidata.org/entity/Q112999613" },
+
{ "entity": "http://www.wikidata.org/entity/Q115111291" },
+
{ "entity": "http://www.wikidata.org/entity/Q115210417" },
+
{ "entity": "http://www.wikidata.org/entity/Q115311524" },
+
{ "entity": "http://www.wikidata.org/entity/Q115517041" },
+
{ "entity": "http://www.wikidata.org/entity/Q114854470" },
+
{ "entity": "http://www.wikidata.org/entity/Q114854476" },
+
{ "entity": "http://www.wikidata.org/entity/Q114857469" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306738" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306740" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306743" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306747" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306750" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306752" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306761" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306769" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306782" },
+
{ "entity": "http://www.wikidata.org/entity/Q114650397" },
+
{ "entity": "http://www.wikidata.org/entity/Q114667521" },
+
{ "entity": "http://www.wikidata.org/entity/Q116263904" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306704" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306713" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306716" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306720" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306723" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306726" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306730" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306732" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306735" },
+
{ "entity": "http://www.wikidata.org/entity/Q118112792" },
+
{ "entity": "http://www.wikidata.org/entity/Q115924160" },
+
{ "entity": "http://www.wikidata.org/entity/Q115951485" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306663" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306665" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306668" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306672" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306677" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306680" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306683" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306686" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306690" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306692" },
+
{ "entity": "http://www.wikidata.org/entity/Q118902331" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306786" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306790" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306792" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306796" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306803" },
+
{ "entity": "http://www.wikidata.org/entity/Q119459067" },
+
{ "entity": "http://www.wikidata.org/entity/Q118347472" },
+
{ "entity": "http://www.wikidata.org/entity/Q116005984" },
+
{ "entity": "http://www.wikidata.org/entity/Q116383859" },
+
{ "entity": "http://www.wikidata.org/entity/Q116846165" },
+
{ "entity": "http://www.wikidata.org/entity/Q88225662" },
+
{ "entity": "http://www.wikidata.org/entity/Q120911369" },
+
{ "entity": "http://www.wikidata.org/entity/Q120968895" },
+
{ "entity": "http://www.wikidata.org/entity/Q121051583" },
+
{ "entity": "http://www.wikidata.org/entity/Q78083607" },
+
{ "entity": "http://www.wikidata.org/entity/Q120967614" },
+
{ "entity": "http://www.wikidata.org/entity/Q120967614" },
+
{ "entity": "http://www.wikidata.org/entity/Q124963205" },
+
{ "entity": "http://www.wikidata.org/entity/Q122943681" },
+
{ "entity": "http://www.wikidata.org/entity/Q122760323" },
+
{ "entity": "http://www.wikidata.org/entity/Q130016160" },
+
{ "entity": "http://www.wikidata.org/entity/Q125414871" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320793" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320795" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320799" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320802" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320805" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320823" },
+
{ "entity": "http://www.wikidata.org/entity/Q123524670" },
+
{ "entity": "http://www.wikidata.org/entity/Q125421015" },
+
{ "entity": "http://www.wikidata.org/entity/Q126063252" },
+
{ "entity": "http://www.wikidata.org/entity/Q134454528" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320838" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320841" },
+
{ "entity": "http://www.wikidata.org/entity/Q130320842" },
+
{ "entity": "http://www.wikidata.org/entity/Q130348301" },
+
{ "entity": "http://www.wikidata.org/entity/Q6934523" },
+
{ "entity": "http://www.wikidata.org/entity/Q134274422" },
+
{ "entity": "http://www.wikidata.org/entity/Q115723506" },
+
{ "entity": "http://www.wikidata.org/entity/Q7896583" },
+
{ "entity": "http://www.wikidata.org/entity/Q119322456" },
+
{ "entity": "http://www.wikidata.org/entity/Q118908165" },
+
{ "entity": "http://www.wikidata.org/entity/Q4883926" },
+
{ "entity": "http://www.wikidata.org/entity/Q13218740" },
+
{ "entity": "http://www.wikidata.org/entity/Q38251450" },
+
{ "entity": "http://www.wikidata.org/entity/Q125400769" },
+
{ "entity": "http://www.wikidata.org/entity/Q7306115" },
+
{ "entity": "http://www.wikidata.org/entity/Q130272442" },
+
{ "entity": "http://www.wikidata.org/entity/Q49476297" },
+
{ "entity": "http://www.wikidata.org/entity/Q49578396" },
+
{ "entity": "http://www.wikidata.org/entity/Q123561749" },
+
{ "entity": "http://www.wikidata.org/entity/Q49473005" },
+
{ "entity": "http://www.wikidata.org/entity/Q49488515" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904857" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907227" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907248" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907262" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907278" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907293" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907308" },
+
{ "entity": "http://www.wikidata.org/entity/Q115907317" },
+
{ "entity": "http://www.wikidata.org/entity/Q7113724" },
+
{ "entity": "http://www.wikidata.org/entity/Q4883961" },
+
{ "entity": "http://www.wikidata.org/entity/Q49495418" },
+
{ "entity": "http://www.wikidata.org/entity/Q49504565" },
+
{ "entity": "http://www.wikidata.org/entity/Q49508683" },
+
{ "entity": "http://www.wikidata.org/entity/Q49579535" },
+
{ "entity": "http://www.wikidata.org/entity/Q49581598" },
+
{ "entity": "http://www.wikidata.org/entity/Q68361283" },
+
{ "entity": "http://www.wikidata.org/entity/Q118020620" },
+
{ "entity": "http://www.wikidata.org/entity/Q115903564" },
+
{ "entity": "http://www.wikidata.org/entity/Q115903603" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904027" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904230" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904244" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904277" },
+
{ "entity": "http://www.wikidata.org/entity/Q99522190" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904308" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904329" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904349" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904386" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904397" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904411" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904431" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904438" },
+
{ "entity": "http://www.wikidata.org/entity/Q115904502" },
+
{ "entity": "http://www.wikidata.org/entity/Q4856966" },
+
{ "entity": "http://www.wikidata.org/entity/Q115917499" },
+
{ "entity": "http://www.wikidata.org/entity/Q114406847" },
+
{ "entity": "http://www.wikidata.org/entity/Q24534418" },
+
{ "entity": "http://www.wikidata.org/entity/Q5417008" },
+
{ "entity": "http://www.wikidata.org/entity/Q7252468" },
+
{ "entity": "http://www.wikidata.org/entity/Q7313551" },
+
{ "entity": "http://www.wikidata.org/entity/Q125467701" },
+
{ "entity": "http://www.wikidata.org/entity/Q3497753" },
+
{ "entity": "http://www.wikidata.org/entity/Q266022" },
+
{ "entity": "http://www.wikidata.org/entity/Q7988334" },
+
{ "entity": "http://www.wikidata.org/entity/Q1570942" },
+
{ "entity": "http://www.wikidata.org/entity/Q3097823" },
+
{ "entity": "http://www.wikidata.org/entity/Q131038502" },
+
{ "entity": "http://www.wikidata.org/entity/Q7673991" },
+
{ "entity": "http://www.wikidata.org/entity/Q7886107" },
+
{ "entity": "http://www.wikidata.org/entity/Q6783772" },
+
{ "entity": "http://www.wikidata.org/entity/Q14713900" },
+
{ "entity": "http://www.wikidata.org/entity/Q7322149" },
+
{ "entity": "http://www.wikidata.org/entity/Q20712322" },
+
{ "entity": "http://www.wikidata.org/entity/Q7596473" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305456" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305457" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305568" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305569" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305244" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305533" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305535" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306951" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306954" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306956" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306959" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306961" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306963" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306965" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306966" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306967" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306969" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306970" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306974" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306976" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305570" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305571" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305573" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305575" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305576" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305577" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305578" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305477" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305663" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305664" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305665" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305666" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305667" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305668" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305487" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305707" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305708" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305709" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305710" },
+
{ "entity": "http://www.wikidata.org/entity/Q14713788" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305716" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305718" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305719" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305721" },
+
{ "entity": "http://www.wikidata.org/entity/Q48812715" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305669" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305670" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305671" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305672" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306978" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306979" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306980" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306982" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306983" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306984" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306986" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306988" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306991" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306995" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306996" },
+
{ "entity": "http://www.wikidata.org/entity/Q43306998" },
+
{ "entity": "http://www.wikidata.org/entity/Q43307000" },
+
{ "entity": "http://www.wikidata.org/entity/Q43307002" },
+
{ "entity": "http://www.wikidata.org/entity/Q43307003" },
+
{ "entity": "http://www.wikidata.org/entity/Q43307004" },
+
{ "entity": "http://www.wikidata.org/entity/Q43307005" },
+
{ "entity": "http://www.wikidata.org/entity/Q43307006" },
+
{ "entity": "http://www.wikidata.org/entity/Q6391588" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305806" },
+
{ "entity": "http://www.wikidata.org/entity/Q4819233" },
+
{ "entity": "http://www.wikidata.org/entity/Q7148630" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305455" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305559" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305560" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305562" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305563" },
+
{ "entity": "http://www.wikidata.org/entity/Q112669585" },
+
{ "entity": "http://www.wikidata.org/entity/Q838219" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305322" },
+
{ "entity": "http://www.wikidata.org/entity/Q3095760" },
+
{ "entity": "http://www.wikidata.org/entity/Q3684032" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305337" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305812" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305813" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305815" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305816" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305817" },
+
{ "entity": "http://www.wikidata.org/entity/Q43305819" }
+
]