From 6f7498b6228211fc3c5770001af1bb707fcc4372 Mon Sep 17 00:00:00 2001 From: Phi-rjan Date: Tue, 12 Mar 2024 10:33:58 +0100 Subject: [PATCH] chore: Merge nv22 into master (#11699) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [WIP] feat: Add nv22 skeleton Addition of Network Version 22 skeleton * update FFI * feat: drand: refactor round verification * feat: sealing: Support nv22 DDO features in the sealing pipeline (#11226) * Initial work supporting DDO pieces in lotus-miner * sealing: Update pipeline input to operate on UniversalPiece * sealing: Update pipeline checks/sealing states to operate on UniversalPiece * sealing: Make pipeline build with UniversalPiece * move PieceDealInfo out of api * make gen * make sealing pipeline unit tests pass * fix itest ensemble build * don't panic in SectorsStatus with deals * stop linter from complaining about checkPieces * fix sector import tests * mod tidy * sealing: Add logic for (pre)committing DDO sectors * sealing: state-types with method defs * DDO non-snap pipeline works(?), DDO Itests * DDO support in snapdeals pipeline * make gen * update actor bundles * update the gst market fix * fix: chain: use PreCommitSectorsBatch2 when setting up genesis * some bug fixes * integration working changes * update actor bundles * Make TestOnboardRawPieceSnap pass * Appease the linter * Make deadlines test pass with v12 actors * Update go-state-types, abstract market DealState * make gen * mod tidy, lint fixes * Fix some more tests * Bump version in master Bump version in master * Make gen Make gen * fix sender * fix: lotus-provider: Fix winning PoSt * fix: sql Scan cannot write to an object * Actually show miner-addrs in info-log Actually show miner-addrs in lotus-provider info-log * [WIP] feat: Add nv22 skeleton Addition of Network Version 22 skeleton * update FFI * ddo is now nv22 * make gen * temp actor bundle with ddo * use working go-state-types * gst with v13 market migration * update bundle, builtin.MethodsMiner.ProveCommitSectors2 -> 3 * actually working v13 migration, v13 migration itest * Address review * sealing: Correct DDO snap pledge math * itests: Mixed ddo itest * pipeline: Fix sectorWeight * sealing: convert market deals into PAMs in mixed sectors * sealing: make market to ddo conversion work * fix lint * update gst * Update actors and GST to lastest integ branch * commit batcher: Update ProveCommitSectors3Params builder logic * make gen * use builtin-actors master * ddo: address review * itests: Add commd assertions to ddo tests * make gen * gst with fixed types * config knobs for RequireActivationSuccess * storage: Drop obsolete flaky tasts --------- Co-authored-by: Jennifer Wang Co-authored-by: Aayush Co-authored-by: Shrenuj Bansal Co-authored-by: Phi Co-authored-by: Andrew Jackson (Ajax) Co-authored-by: TippyFlits * feat: implement FIP-0063 * chore: deps: update to go-multiaddr v0.12.2 (#11602) * feat: fvm: update the FVM/FFI to v4.1 (#11608) (#11612) This: 1. Adds nv22 support. 2. Updates the message tracing format. Co-authored-by: Steven Allen * AggregateProofType nil when doing batch updates Use latest nv22 go-state-types version with matching update * Update to v13.0.0-rc.2 bundle * chore: Upgrade heights and codename Update upgrade heights Co-Authored-By: Steven Allen * Update epoch after nv22 DRAND switch Update epoch after nv22 DRAND switch * Update Mango codename to Phoneix Make the codename for the Drand-change inline with Dragon style. * Add UpgradePhoenixHeight to API params * set UpgradePhoenixHeight to be one hour after Dragon * Make gen Make gen and UpgradePhoenixHeight in butterfly and local devnet to be in line with Calibration and Mainnet * Update epoch heights (#11637) Update epoch heights * new: add forest bootstrap nodes (#11636) Signed-off-by: samuelarogbonlo * Merge pull request #11491 from filecoin-project/fix/remove-decommissioned-pl-bootstrap-nodes Remove PL operated bootstrap nodes from mainnet.pi * feat: api: new verified registry methods to get all allocations and claims (#11631) * new verireg methods * update changelog and add itest * update itest and cli * update new method's support till v9 * remove gateway APIs * fix cli internal var names * chore:: backport #11609 to the feat/nv22 branch (#11644) * feat: api: improve the correctness of Eth's trace_block (#11609) * Improve the correctness of Eth's trace_block - Improve encoding/decoding of parameters and return values: - Encode "native" parameters and return values with Solidity ABI. - Correctly decode parameters to "create" calls. - Use the correct (ish) output for "create" calls. - Handle all forms of "create". - Make robust with respect to reverts: - Use the actor ID/address from the trace instead of looking it up in the state-tree (may not exist in the state-tree due to a revert). - Gracefully handle failed actor/contract creation. - Improve performance: - We avoid looking anything up in the state-tree when translating the trace, which should significantly improve performance. - Improve code readability: - Remove all "backtracking" logic. - Use an "environment" struct to store temporary state instead of attaching it to the trace. - Fix random bugs: - Fix an allocation bug in the "address" logic (need to set the capacity before modifying the slice). - Improved error checking/handling. - Use correct types for `trace_block` action/results (create, call, etc.). - And use the correct types for Result/Action structs instead of reusing the same "Call" action every time. - Improve error messages. * Make gen Make gen --------- Co-authored-by: Steven Allen * fix: add UpgradePhoenixHeight to StateGetNetworkParams (#11648) * chore: deps: update to go-state-types v13.0.0-rc.1 * do NOT update the cache when running the real migration * Merge pull request #11632 from hanabi1224/hm/drand-test feat: drand quicknet: allow scheduling drand quicknet upgrade before nv22 on 2k devnet * chore: deps: update to go-state-types v13.0.0-rc.2 chore: deps: update to go-state-types v13.0.0-rc.2 * feat: set migration config UpgradeEpoch for v13 actors upgrade * Built-in actor events first draft * itest for DDO non-market verified data w/ builtin actor events * Tests for builtin actor events API * Clean up DDO+Events tests, add lots of explainer comments * Minor tweaks to events types * Avoid duplicate messages when looking for receipts * Rename internal events modules for clarity * Adjust actor event API after review * s/ActorEvents/Events/g in global config * Manage event sending rate for SubscribeActorEvents * Terminate SubscribeActorEvents chan when at max height * Document future API changes * More clarity in actor event API docs * More post-review changes, lots of tests for SubscribeActorEvents Use BlockDelay as the window for receiving events on the SubscribeActorEvents channel. We expect the user to have received the initial batch of historical events (if any) in one block's time. For real-time events we expect them to not fall behind by roughly one block's time. * Remove duplicate code from actor event type marshalling tests Reduce verbosity and remove duplicate test logic from actor event types JSON marshalling tests. * Rename actor events test to follow go convention Add missing `s` to `actor_events` test file to follow golang convention used across the repo. * Run actor events table tests in deterministic order Refactor `map` usage for actor event table tests to ensure deterministic test execution order, making debugging potential issues easier. If non-determinism is a target, leverage Go's built-in parallel testing capabilities. * Reduce scope for filter removal failure when getting actor events Use a fresh context to remove the temporary filter installed solely to get the actor events. This should reduce chances of failure in a case where the original context may be expired/cancelled. Refactor removal into a `defer` statement for a more readable, concise return statement. * Use fixed RNG seed for actor event tests Improve determinism in actor event tests by using a fixed RNG seed. This makes up a more reproducible test suit. * Use provided libraries to assert eventual conditions Use the functionalities already provided by `testify` to assert eventual conditions, and remove the use of `time.Sleep`. Remove duplicate code in utility functions that are already defined. Refactor assertion helper functions to use consistent terminology: "require" implies fatal error, whereas "assert" implies error where the test may proceed executing. * Update changelog for actor events APIs * Fix concerns and docs identified by review * Update actor bundle to v13.0.0-rc3 Update actor bundle to v13.0.0-rc3 * Prep Lotus v1.26.0-rc1 - For sanity reverting the mainnet upgrade epoch to 99999999, and then only set it when cutting the final release -Update Calibnet CIDs to v13.0.0-rc3 - Add GetActorEvents, SubscribeActorEvents, GetAllClaims and GetAllAllocations methods to the changelog Co-Authored-By: Jiaying Wang <42981373+jennijuju@users.noreply.github.com> * Update CHANGELOG.md Co-authored-by: Masih H. Derkani * Make gen Make gen * fix: beacon: validate drand change at nv16 correctly * bump to v1.26.0-rc2 * test: cleanup ddo verified itest, extract steps to functions also add allocation-removed event case * test: extract verified DDO test to separate file, add more checks * test: add additional actor events checks * Add verification for "deal-activated" actor event * docs(drand): document the meaning of "IsChained" (#11692) * Resolve conflicts I encountered multiple issues when trying to run make gen. And these changes fixed a couple of them: - go mod tidy - Remove RaftState/RaftLeader - Revert `if ts.Height() > claim.TermMax+claim.TermStart || !cctx.IsSet("expired")` to the what is in the release/v1.26.0: `if tsHeight > val.TermMax || !expired` * fixup imports, make jen * Update version Update version in master to v1.27.0-dev * Update node/impl/full/dummy.go Co-authored-by: Łukasz Magiera * Adjust ListClaimsCmd Adjust ListClaimsCmd according to review --------- Signed-off-by: samuelarogbonlo Co-authored-by: TippyFlits Co-authored-by: Aayush Co-authored-by: Łukasz Magiera Co-authored-by: Jennifer Wang Co-authored-by: Shrenuj Bansal Co-authored-by: Andrew Jackson (Ajax) Co-authored-by: Steven Allen Co-authored-by: Rod Vagg Co-authored-by: Samuel Arogbonlo <47984109+samuelarogbonlo@users.noreply.github.com> Co-authored-by: LexLuthr <88259624+LexLuthr@users.noreply.github.com> Co-authored-by: tom123222 <160735201+tom123222@users.noreply.github.com> Co-authored-by: Aarsh Shah Co-authored-by: Masih H. Derkani Co-authored-by: Jiaying Wang <42981373+jennijuju@users.noreply.github.com> --- .circleci/config.yml | 12 + CHANGELOG.md | 132 ++- api/api_full.go | 76 +- api/api_gateway.go | 3 + api/api_storage.go | 40 +- api/cbor_gen.go | 472 +-------- api/docgen/docgen.go | 33 +- api/mocks/mock_full.go | 77 +- api/proxy_gen.go | 99 +- api/types.go | 2 + api/v0api/full.go | 4 + api/v0api/proxy_gen.go | 26 + api/v0api/v0mocks/mock_full.go | 32 +- blockstore/cbor_gen.go | 35 +- build/actors/v13.tar.zst | Bin 0 -> 1646614 bytes build/builtin_actors_gen.go | 217 +++- build/drand.go | 26 +- build/openrpc/full.json | 943 +++++++++++++----- build/openrpc/gateway.json | 380 +++++-- build/openrpc/miner.json | 447 ++++++--- build/openrpc/worker.json | 76 +- build/params_2k.go | 34 +- build/params_butterfly.go | 10 +- build/params_calibnet.go | 9 +- build/params_interop.go | 8 +- build/params_mainnet.go | 19 +- build/params_shared_vals.go | 2 +- build/params_testground.go | 5 +- build/version.go | 2 +- chain/actors/builtin/account/account.go | 11 +- chain/actors/builtin/account/v13.go | 62 ++ chain/actors/builtin/cron/cron.go | 13 +- chain/actors/builtin/cron/v13.go | 57 ++ chain/actors/builtin/datacap/datacap.go | 13 +- chain/actors/builtin/datacap/v13.go | 82 ++ chain/actors/builtin/evm/evm.go | 10 +- chain/actors/builtin/evm/v13.go | 72 ++ chain/actors/builtin/init/init.go | 13 +- chain/actors/builtin/init/v13.go | 147 +++ chain/actors/builtin/market/actor.go.template | 58 +- chain/actors/builtin/market/diff.go | 6 +- chain/actors/builtin/market/market.go | 67 +- chain/actors/builtin/market/state.go.template | 56 +- chain/actors/builtin/market/v0.go | 51 +- chain/actors/builtin/market/v10.go | 51 +- chain/actors/builtin/market/v11.go | 51 +- chain/actors/builtin/market/v12.go | 51 +- chain/actors/builtin/market/v13.go | 404 ++++++++ chain/actors/builtin/market/v2.go | 51 +- chain/actors/builtin/market/v3.go | 51 +- chain/actors/builtin/market/v4.go | 51 +- chain/actors/builtin/market/v5.go | 51 +- chain/actors/builtin/market/v6.go | 51 +- chain/actors/builtin/market/v7.go | 51 +- chain/actors/builtin/market/v8.go | 51 +- chain/actors/builtin/market/v9.go | 51 +- chain/actors/builtin/miner/actor.go.template | 14 +- chain/actors/builtin/miner/miner.go | 20 +- chain/actors/builtin/miner/v13.go | 594 +++++++++++ chain/actors/builtin/multisig/message10.go | 4 +- chain/actors/builtin/multisig/message11.go | 4 +- chain/actors/builtin/multisig/message12.go | 4 +- chain/actors/builtin/multisig/message13.go | 77 ++ chain/actors/builtin/multisig/message8.go | 4 +- chain/actors/builtin/multisig/message9.go | 4 +- chain/actors/builtin/multisig/multisig.go | 24 +- chain/actors/builtin/multisig/v13.go | 138 +++ chain/actors/builtin/paych/message13.go | 109 ++ chain/actors/builtin/paych/paych.go | 7 + chain/actors/builtin/paych/v13.go | 135 +++ chain/actors/builtin/power/power.go | 13 +- chain/actors/builtin/power/v13.go | 207 ++++ chain/actors/builtin/registry.go | 120 +++ chain/actors/builtin/reward/reward.go | 13 +- chain/actors/builtin/reward/v13.go | 120 +++ chain/actors/builtin/system/system.go | 11 +- chain/actors/builtin/system/v13.go | 72 ++ .../actors/builtin/verifreg/actor.go.template | 2 + .../actors/builtin/verifreg/state.go.template | 31 + chain/actors/builtin/verifreg/v0.go | 12 + chain/actors/builtin/verifreg/v10.go | 26 + chain/actors/builtin/verifreg/v11.go | 26 + chain/actors/builtin/verifreg/v12.go | 26 + chain/actors/builtin/verifreg/v13.go | 196 ++++ chain/actors/builtin/verifreg/v2.go | 12 + chain/actors/builtin/verifreg/v3.go | 12 + chain/actors/builtin/verifreg/v4.go | 12 + chain/actors/builtin/verifreg/v5.go | 12 + chain/actors/builtin/verifreg/v6.go | 12 + chain/actors/builtin/verifreg/v7.go | 12 + chain/actors/builtin/verifreg/v8.go | 12 + chain/actors/builtin/verifreg/v9.go | 26 + chain/actors/builtin/verifreg/verifreg.go | 15 +- chain/actors/policy/policy.go | 73 +- chain/actors/version.go | 5 +- chain/beacon/beacon.go | 104 +- chain/beacon/drand/drand.go | 48 +- chain/beacon/drand/drand_test.go | 8 + chain/beacon/mock.go | 6 +- chain/consensus/compute_state.go | 1 + chain/consensus/filcns/filecoin.go | 1 + chain/consensus/filcns/upgrades.go | 125 ++- chain/events/cache.go | 2 +- chain/events/events.go | 6 +- chain/events/events_called.go | 12 +- chain/events/events_height.go | 4 +- chain/events/events_test.go | 2 +- chain/events/filter/event.go | 83 +- chain/events/filter/event_test.go | 75 +- chain/events/filter/index.go | 10 +- chain/events/filter/index_test.go | 218 ++-- chain/events/message_cache.go | 4 +- chain/events/observer.go | 2 +- chain/events/state/predicates.go | 2 +- chain/events/state/predicates_test.go | 14 +- chain/exchange/cbor_gen.go | 44 +- chain/gen/genesis/miners.go | 36 +- chain/state/statetree.go | 2 +- chain/stmgr/actors.go | 2 +- chain/stmgr/forks.go | 4 - chain/types/actor_event.go | 67 ++ chain/types/actor_event_test.go | 125 +++ chain/types/cbor_gen.go | 155 +-- chain/types/ethtypes/eth_types.go | 2 +- chain/types/event.go | 2 +- cli/client.go | 20 +- cli/filplus.go | 266 +++-- cli/util.go | 12 + cmd/lotus-bench/amt_internal.go | 312 ------ cmd/lotus-bench/main.go | 218 ---- cmd/lotus-miner/init.go | 11 +- cmd/lotus-shed/fip-0036.go | 554 ---------- cmd/lotus-shed/indexes.go | 14 +- cmd/lotus-shed/main.go | 1 - cmd/lotus-shed/market.go | 2 +- cmd/lotus-shed/shedgen/cbor_gen.go | 9 +- conformance/chaos/cbor_gen.go | 63 +- documentation/en/api-v0-methods-miner.md | 32 +- documentation/en/api-v0-methods-provider.md | 8 + documentation/en/api-v0-methods.md | 62 +- documentation/en/api-v1-unstable-methods.md | 227 ++++- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-provider.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 11 +- documentation/en/default-lotus-config.toml | 16 +- .../en/default-lotus-miner-config.toml | 24 + gateway/node.go | 3 + gateway/proxy_fil.go | 14 + gen/inlinegen-data.json | 8 +- gen/main.go | 12 +- go.mod | 38 +- go.sum | 133 ++- itests/deadlines_test.go | 42 +- itests/direct_data_onboard_test.go | 408 ++++++++ itests/direct_data_onboard_verified_test.go | 713 +++++++++++++ itests/kit/ensemble.go | 6 +- itests/kit/ensemble_opts_nv.go | 6 +- itests/kit/log.go | 1 + itests/kit/node_opts.go | 4 + itests/pending_deal_allocation_test.go | 4 - itests/sector_terminate_test.go | 33 + itests/verifreg_test.go | 149 +++ lib/result/result.go | 12 + .../ondealsectorcommitted_test.go | 12 +- markets/storageadapter/provider.go | 5 +- node/builder_chain.go | 16 +- node/config/def.go | 3 + node/config/doc_gen.go | 48 +- node/config/types.go | 24 +- node/hello/cbor_gen.go | 13 +- node/impl/full.go | 1 + node/impl/full/actor_events.go | 376 +++++++ node/impl/full/actor_events_test.go | 780 +++++++++++++++ node/impl/full/dummy.go | 15 + node/impl/full/eth.go | 167 ++-- .../impl/full/{eth_event.go => eth_events.go} | 0 node/impl/full/eth_test.go | 76 ++ node/impl/full/state.go | 57 +- node/impl/storminer.go | 5 +- node/modules/actorevent.go | 98 +- node/modules/dtypes/beacon.go | 1 + node/modules/ethmodule.go | 4 +- node/modules/storageminer.go | 10 + paychmgr/cbor_gen.go | 76 +- storage/pipeline/cbor_gen.go | 215 ++-- storage/pipeline/checks.go | 129 ++- storage/pipeline/commit_batch.go | 246 ++++- storage/pipeline/commit_batch_test.go | 498 --------- storage/pipeline/currentdealinfo_test.go | 6 +- storage/pipeline/fsm_events.go | 13 +- storage/pipeline/input.go | 203 ++-- storage/pipeline/mocks/api.go | 91 +- .../pipeline/mocks/mock_precommit_batcher.go | 15 + storage/pipeline/piece/cbor_gen.go | 451 +++++++++ storage/pipeline/piece/piece_info.go | 186 ++++ storage/pipeline/pledge.go | 114 +++ storage/pipeline/precommit_batch.go | 20 +- storage/pipeline/precommit_batch_test.go | 291 ------ storage/pipeline/precommit_policy.go | 18 +- storage/pipeline/precommit_policy_test.go | 94 +- storage/pipeline/receive.go | 24 +- storage/pipeline/sealiface/config.go | 5 + storage/pipeline/sealing.go | 49 +- storage/pipeline/states_failed.go | 118 ++- storage/pipeline/states_failed_test.go | 9 +- storage/pipeline/states_replica_update.go | 127 ++- storage/pipeline/states_sealing.go | 170 +++- storage/pipeline/types.go | 160 ++- storage/pipeline/types_test.go | 13 +- storage/pipeline/upgrade_queue.go | 2 +- storage/sealer/cbor_gen.go | 56 +- storage/sealer/storiface/cbor_gen.go | 44 +- storage/sectorblocks/blocks.go | 5 +- storage/wdpost/wdpost_run_test.go | 8 +- 215 files changed, 12390 insertions(+), 4517 deletions(-) create mode 100644 build/actors/v13.tar.zst create mode 100644 chain/actors/builtin/account/v13.go create mode 100644 chain/actors/builtin/cron/v13.go create mode 100644 chain/actors/builtin/datacap/v13.go create mode 100644 chain/actors/builtin/evm/v13.go create mode 100644 chain/actors/builtin/init/v13.go create mode 100644 chain/actors/builtin/market/v13.go create mode 100644 chain/actors/builtin/miner/v13.go create mode 100644 chain/actors/builtin/multisig/message13.go create mode 100644 chain/actors/builtin/multisig/v13.go create mode 100644 chain/actors/builtin/paych/message13.go create mode 100644 chain/actors/builtin/paych/v13.go create mode 100644 chain/actors/builtin/power/v13.go create mode 100644 chain/actors/builtin/reward/v13.go create mode 100644 chain/actors/builtin/system/v13.go create mode 100644 chain/actors/builtin/verifreg/v13.go create mode 100644 chain/types/actor_event.go create mode 100644 chain/types/actor_event_test.go delete mode 100644 cmd/lotus-bench/amt_internal.go delete mode 100644 cmd/lotus-shed/fip-0036.go create mode 100644 itests/direct_data_onboard_test.go create mode 100644 itests/direct_data_onboard_verified_test.go create mode 100644 node/impl/full/actor_events.go create mode 100644 node/impl/full/actor_events_test.go rename node/impl/full/{eth_event.go => eth_events.go} (100%) delete mode 100644 storage/pipeline/commit_batch_test.go create mode 100644 storage/pipeline/piece/cbor_gen.go create mode 100644 storage/pipeline/piece/piece_info.go create mode 100644 storage/pipeline/pledge.go delete mode 100644 storage/pipeline/precommit_batch_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 6ca0353c5ae..7b67d4a7f92 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -657,6 +657,18 @@ workflows: - build suite: itest-decode_params target: "./itests/decode_params_test.go" + - test: + name: test-itest-direct_data_onboard + requires: + - build + suite: itest-direct_data_onboard + target: "./itests/direct_data_onboard_test.go" + - test: + name: test-itest-direct_data_onboard_verified + requires: + - build + suite: itest-direct_data_onboard_verified + target: "./itests/direct_data_onboard_verified_test.go" - test: name: test-itest-dup_mpool_messages requires: diff --git a/CHANGELOG.md b/CHANGELOG.md index 21943bc6ae1..eca451ecdbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,74 @@ # UNRELEASED +## New features + +## Improvements + +# v1.26.0-rc2 / 2024-03-0y + +This is a release candidate of the upcoming MANDATORY Lotus v1.26.0 release, which will deliver the Filecoin network version 22, codenamed Dragon 🐉. + +**This release candidate sets the calibration network to upgrade at epoch 1427974, which is 2024-03-11T14:00:00Z** +This release does NOT set the mainnet upgrade epoch yet, in which will be updated in the final release. +The Filecoin network version 22 delivers the following FIPs: + +- [FIP-0063: Switching to new Drand mainnet network](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0063.md) +- [FIP-0074: Remove cron-based automatic deal settlement](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0074.md) +- [FIP-0076: Direct data onboarding](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0076.md) +- [FIP-0083: Add built-in Actor events in the Verified Registry, Miner and Market Actors](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0083.md) + +## v13 Builtin Actor Bundle + +The actor bundles for the **calibration network** can be checked as follows: + +``` +lotus state actor-cids --network-version=22 +Network Version: 22 +Actor Version: 13 +Manifest CID: bafy2bzacea4firkyvt2zzdwqjrws5pyeluaesh6uaid246tommayr4337xpmi + +Actor CID +account bafk2bzaceb3j36ri5y5mfklgp5emlvrms6g4733ss2j3l7jismrxq6ng3tcc6 +cron bafk2bzaceaz6rocamdxehgpwcbku6wlapwpgzyyvkrploj66mlqptsulf52bs +datacap bafk2bzacea22nv5g3yngpxvonqfj4r2nkfk64y6yw2malicm7odk77x7zuads +eam bafk2bzaceatqtjzj7623i426noaslouvluhz6e3md3vvquqzku5qj3532uaxg +ethaccount bafk2bzacean3hs7ga5csw6g3uu7watxfnqv5uvxviebn3ba6vg4sagwdur5pu +evm bafk2bzacec5ibmbtzuzjgwjmksm2n6zfq3gkicxqywwu7tsscqgdzajpfctxk +init bafk2bzaced5sq72oemz6qwi6yssxwlos2g54zfprslrx5qfhhx2vlgsbvdpcs +multisig bafk2bzacedbgei6jkx36fwdgvoohce4aghvpohqdhoco7p4thszgssms7olv2 +paymentchannel bafk2bzaceasmgmfsi4mjanxlowsub65fmevhzky4toeqbtw4kp6tmu4kxjpgq +placeholder bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro +reward bafk2bzacedjyp6ll5ez27dfgldjj4tntxfvyp4pa5zkk7s5uhipzqjyx2gmuc +storagemarket bafk2bzaceabolct6qdnefwcrtati2us3sxtxfghyqk6aamfhl6byyefmtssqi +storageminer bafk2bzaceckzw3v7wqliyggvjvihz4wywchnnsie4frfvkm3fm5znb64mofri +storagepower bafk2bzacea7t4wynzjajl442mpdqbnh3wusjusqtnzgpvefvweh4n2tgzgqhu +system bafk2bzacedjnrb5glewazsxpcx6rwiuhl4kwrfcqolyprn6rrjtlzmthlhdq6 +verifiedregistry bafk2bzacednskl3bykz5qpo54z2j2p4q44t5of4ktd6vs6ymmg2zebsbxazkm +``` + +## Migration + +We are expecting a bit heavier than normal state migration for this upgrade due to the amount of state changes introduced with Direct Data Onboarding. + +All node operators, including storage providers, should be aware that ONE pre-migration is being scheduled 120 epochs before the upgrade. It will take around 10-20 minutes for the pre-migration and less than 30 seconds for the final migration, depending on the amount of historical state in the node blockstore and the hardware specs the node is running on. During this time, expect slower block validation times, increased CPU and memory usage, and longer delays for API queries + +We recommend node operators (who haven't enabled splitstore discard mode) that do not care about historical chain states, to prune the chain blockstore by syncing from a snapshot 1-2 days before the upgrade. + +You can test out the migration by running running the [`benchmarking a network migration` tutorial.](https://lotus.filecoin.io/kb/test-migration/) + +For certain node operators, such as full archival nodes or systems that need to keep large amounts of state (RPC providers), completing the pre-migration in time before the network upgrade might not be achievable. For those node operators, it is recommended to skip the pre-migration and run the non-cached migration (i.e., just running the migration at the exact upgrade epoch), and schedule for some downtime during the upgrade epoch. Operators of such nodes can read the [`How to disable premigration in network upgrade` tutorial.](https://lotus.filecoin.io/kb/disable-premigration/) + +## New features +- feat: api: new verified registry methods to get all allocations and claims (#11631) ([filecoin-project/lotus#11631](https://github.com/filecoin-project/lotus/pull/11631)) +- new: add forest bootstrap nodes (#11636) ([filecoin-project/lotus#11636](https://github.com/filecoin-project/lotus/pull/11636)) +- feat: sealing: Support nv22 DDO features in the sealing pipeline (#11226) ([filecoin-project/lotus#11226](https://github.com/filecoin-project/lotus/pull/11226)) +- feat: implement FIP-0063 ([filecoin-project/lotus#11572](https://github.com/filecoin-project/lotus/pull/11572)) +- feat: events: Add Lotus APIs to consume smart contract and built-in actor events ([filecoin-project/lotus#11618](https://github.com/filecoin-project/lotus/pull/11618)) + ## Improvements -### Tracing API +## Tracing API Replace the `CodeCid` field in the message trace (added in 1.23.4) with an `InvokedActor` field. @@ -67,6 +132,71 @@ Additionally, Filecoin is not Ethereum no matter how much we try to provide API/ [handlefilecoinmethod]: https://fips.filecoin.io/FIPS/fip-0054.html#handlefilecoinmethod-general-handler-for-method-numbers--1024 +### GetActorEvents and SubscribeActorEvents + +[FIP-0049](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0049.md) introduced _Actor Events_ that can be emitted by user programmed actors. [FIP-0083](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0083.md) introduces new events emitted by the builtin Verified Registry, Miner and Market Actors. These new events for builtin actors are being activated with network version 22 to coincide with _Direct Data Onboarding_ as defined in [FIP-0076](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0076.md) which introduces additional flexibility for data onboarding. Sector, Deal and DataCap lifecycles can be tracked with these events, providing visibility and options for programmatic responses to changes in state. + +Actor events are available on message receipts, but can now be retrieved from a node using the new `GetActorEvents` and `SubscribeActorEvents` methods. These methods allow for querying and subscribing to actor events, respectively. They depend on the Lotus node both collecting events (with `Fevm.Events.RealTimeFilterAPI` and `Fevm.Events.HistoricFilterAPI`) and being enabled with the new configuration option `Events.EnableActorEventsAPI`. Note that a Lotus node can only respond to requests for historic events that it retains in its event store. + +Both `GetActorEvents` and `SubscribeActorEvents` take a filter parameter which can optionally filter events on: + +* `Addresses` of the actor(s) emitting the event +* Specific `Fields` within the event +* `FromHeight` and `ToHeight` to filter events by block height +* `TipSetKey` to restrict events contained within a specific tipset + +`GetActorEvents` provides a one-time query for actor events, while `SubscribeActorEvents` provides a long-lived connection (via websockets) to the Lotus node, allowing for real-time updates on actor events. The subscription can be cancelled by the client at any time. + +### GetAllClaims and GetAllAlocations +Additionally the methods `GetAllAllocations` and `GetAllClaims` has been added to the Lotus API. These methods lists all the available allocations and claims available in the actor state. + +### Lotus CLI + +The `filplus` commands used for listing allocations and claims have been updated. If no argument is provided to the either command, they will list out all the allocations and claims in the verified registry actor. +The output list columns have been modified to `AllocationID` and `ClaimID` instead of ID. + +```shell +lotus filplus list-allocations --help +NAME: + lotus filplus list-allocations - List allocations available in verified registry actor or made by a client if specified + +USAGE: + lotus filplus list-allocations [command options] clientAddress + +OPTIONS: + --expired list only expired allocations (default: false) + --json output results in json format (default: false) + --help, -h show help + + +lotus filplus list-claims --help +NAME: + lotus filplus list-claims - List claims available in verified registry actor or made by provider if specified + +USAGE: + lotus filplus list-claims [command options] providerAddress + +OPTIONS: + --expired list only expired claims (default: false) + --help, -h show help +``` + +## Dependencies +- github.com/filecoin-project/go-state-types (v0.12.8 -> v0.13.0-rc.2) +- chore: deps: update to go-state-types v13.0.0-rc.1 ([filecoin-project/lotus#11662](https://github.com/filecoin-project/lotus/pull/11662)) +- chore: deps: update to go-state-types v13.0.0-rc.2 ([filecoin-project/lotus#11675](https://github.com/filecoin-project/lotus/pull/11675)) +- chore: deps: update to go-multiaddr v0.12.2 (#11602) ([filecoin-project/lotus#11602](https://github.com/filecoin-project/lotus/pull/11602)) +- feat: fvm: update the FVM/FFI to v4.1 (#11608) (#11612) ([filecoin-project/lotus#11612](https://github.com/filecoin-project/lotus/pull/11612)) + +## Others +- Remove PL operated bootstrap nodes from mainnet.pi ([filecoin-project/lotus#11491](https://github.com/filecoin-project/lotus/pull/11491)) +- Update epoch heights (#11637) ([filecoin-project/lotus#11637](https://github.com/filecoin-project/lotus/pull/11637)) +- chore: Set upgrade heights and change codename ([filecoin-project/lotus#11599](https://github.com/filecoin-project/lotus/pull/11599)) +- chore:: backport #11609 to the feat/nv22 branch (#11644) ([filecoin-project/lotus#11644](https://github.com/filecoin-project/lotus/pull/11644)) +- fix: add UpgradePhoenixHeight to StateGetNetworkParams (#11648) ([filecoin-project/lotus#11648](https://github.com/filecoin-project/lotus/pull/11648)) +- feat: drand quicknet: allow scheduling drand quicknet upgrade before nv22 on 2k devnet ([filecoin-project/lotus#11667]https://github.com/filecoin-project/lotus/pull/11667) +- chore: backport #11632 to release/v1.26.0 ([filecoin-project/lotus#11667](https://github.com/filecoin-project/lotus/pull/11667)) + # v1.25.2 / 2024-01-11 This is an optional but **highly recommended feature release** of Lotus, as it includes fixes for synchronizations issues that users have experienced. The feature release also introduces `Lotus-Provider` in its alpha testing phase, as well as the ability to call external PC2-binaries during the sealing process. diff --git a/api/api_full.go b/api/api_full.go index a9adb1c4bd6..e61bb0dedef 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -20,7 +20,6 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin/v8/paych" - "github.com/filecoin-project/go-state-types/builtin/v9/market" verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" @@ -28,8 +27,10 @@ import ( apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/chain/actors/builtin" + "github.com/filecoin-project/lotus/chain/actors/builtin/market" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/builtin/power" + "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/node/modules/dtypes" @@ -552,14 +553,20 @@ type FullNode interface { // StateGetAllocationForPendingDeal returns the allocation for a given deal ID of a pending deal. Returns nil if // pending allocation is not found. StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read + // StateGetAllocationIdForPendingDeal is like StateGetAllocationForPendingDeal except it returns the allocation ID + StateGetAllocationIdForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (verifreg.AllocationId, error) //perm:read // StateGetAllocation returns the allocation for a given address and allocation ID. StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read // StateGetAllocations returns the all the allocations for a given client. StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read + // StateGetAllAllocations returns the all the allocations available in verified registry actor. + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read // StateGetClaim returns the claim for a given address and claim ID. StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read // StateGetClaims returns the all the claims for a given provider. StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read + // StateGetAllClaims returns the all the claims available in verified registry actor. + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read // StateComputeDataCID computes DataCID from a set of on-chain deals StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) //perm:read // StateLookupID retrieves the ID address of the given address @@ -896,6 +903,33 @@ type FullNode interface { // LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that // the path specified when calling CreateBackup is within the base path CreateBackup(ctx context.Context, fpath string) error //perm:admin + + // Actor events + + // GetActorEvents returns all user-programmed and built-in actor events that match the given + // filter. + // This is a request/response API. + // Results available from this API may be limited by the MaxFilterResults and MaxFilterHeightRange + // configuration options and also the amount of historical data available in the node. + // + // This is an EXPERIMENTAL API and may be subject to change. + GetActorEvents(ctx context.Context, filter *types.ActorEventFilter) ([]*types.ActorEvent, error) //perm:read + + // SubscribeActorEvents returns a long-lived stream of all user-programmed and built-in actor + // events that match the given filter. + // Events that match the given filter are written to the stream in real-time as they are emitted + // from the FVM. + // The response stream is closed when the client disconnects, when a ToHeight is specified and is + // reached, or if there is an error while writing an event to the stream. + // This API also allows clients to read all historical events matching the given filter before any + // real-time events are written to the response stream if the filter specifies an earlier + // FromHeight. + // Results available from this API may be limited by the MaxFilterResults and MaxFilterHeightRange + // configuration options and also the amount of historical data available in the node. + // + // Note: this API is only available via websocket connections. + // This is an EXPERIMENTAL API and may be subject to change. + SubscribeActorEvents(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) //perm:read } // reverse interface to the client, called after EthSubscribe @@ -1131,9 +1165,47 @@ type MarketBalance struct { Locked big.Int } +type MarketDealState struct { + SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector + LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated + SlashEpoch abi.ChainEpoch // -1 if deal never slashed +} + +func MakeDealState(mds market.DealState) MarketDealState { + return MarketDealState{ + SectorStartEpoch: mds.SectorStartEpoch(), + LastUpdatedEpoch: mds.LastUpdatedEpoch(), + SlashEpoch: mds.SlashEpoch(), + } +} + +type mstate struct { + s MarketDealState +} + +func (m mstate) SectorStartEpoch() abi.ChainEpoch { + return m.s.SectorStartEpoch +} + +func (m mstate) LastUpdatedEpoch() abi.ChainEpoch { + return m.s.LastUpdatedEpoch +} + +func (m mstate) SlashEpoch() abi.ChainEpoch { + return m.s.SlashEpoch +} + +func (m mstate) Equals(o market.DealState) bool { + return market.DealStatesEqual(m, o) +} + +func (m MarketDealState) Iface() market.DealState { + return mstate{m} +} + type MarketDeal struct { Proposal market.DealProposal - State market.DealState + State MarketDealState } type RetrievalOrder struct { diff --git a/api/api_gateway.go b/api/api_gateway.go index 238bf43abfe..e71a8b712fc 100644 --- a/api/api_gateway.go +++ b/api/api_gateway.go @@ -129,4 +129,7 @@ type Gateway interface { Web3ClientVersion(ctx context.Context) (string, error) EthTraceBlock(ctx context.Context, blkNum string) ([]*ethtypes.EthTraceBlock, error) EthTraceReplayBlockTransactions(ctx context.Context, blkNum string, traceTypes []string) ([]*ethtypes.EthTraceReplayBlockTransaction, error) + + GetActorEvents(ctx context.Context, filter *types.ActorEventFilter) ([]*types.ActorEvent, error) + SubscribeActorEvents(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) } diff --git a/api/api_storage.go b/api/api_storage.go index d5b3d5c1d67..b24ee2af39e 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -24,6 +24,7 @@ import ( builtinactors "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" "github.com/filecoin-project/lotus/storage/sealer/fsutil" "github.com/filecoin-project/lotus/storage/sealer/storiface" @@ -75,7 +76,7 @@ type StorageMiner interface { // Add piece to an open sector. If no sectors with enough space are open, // either a new sector will be created, or this call will block until more // sectors can be created. - SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storiface.Data, d PieceDealInfo) (SectorOffset, error) //perm:admin + SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storiface.Data, d piece.PieceDealInfo) (SectorOffset, error) //perm:admin SectorsUnsealPiece(ctx context.Context, sector storiface.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize, randomness abi.SealRandomness, commd *cid.Cid) error //perm:admin @@ -353,10 +354,21 @@ type SectorLog struct { } type SectorPiece struct { - Piece abi.PieceInfo - DealInfo *PieceDealInfo // nil for pieces which do not appear in deals (e.g. filler pieces) + Piece abi.PieceInfo + + // DealInfo is nil for pieces which do not appear in deals (e.g. filler pieces) + // NOTE: DDO pieces which aren't associated with a market deal and have no + // verified allocation will still have a non-nil DealInfo. + // nil DealInfo indicates that the piece is a filler, and has zero piece commitment. + DealInfo *piece.PieceDealInfo } +// DEPRECATED: Use piece.PieceDealInfo instead +type PieceDealInfo = piece.PieceDealInfo + +// DEPRECATED: Use piece.DealSchedule instead +type DealSchedule = piece.DealSchedule + type SectorInfo struct { SectorID abi.SectorNumber State SectorState @@ -459,28 +471,6 @@ type SectorOffset struct { Offset abi.PaddedPieceSize } -// DealInfo is a tuple of deal identity and its schedule -type PieceDealInfo struct { - // "Old" builtin-market deal info - PublishCid *cid.Cid - DealID abi.DealID - DealProposal *market.DealProposal - - // Common deal info - DealSchedule DealSchedule - - // Best-effort deal asks - KeepUnsealed bool -} - -// DealSchedule communicates the time interval of a storage deal. The deal must -// appear in a sealed (proven) sector no later than StartEpoch, otherwise it -// is invalid. -type DealSchedule struct { - StartEpoch abi.ChainEpoch - EndEpoch abi.ChainEpoch -} - // DagstoreShardInfo is the serialized form of dagstore.DagstoreShardInfo that // we expose through JSON-RPC to avoid clients having to depend on the // dagstore lib. diff --git a/api/cbor_gen.go b/api/cbor_gen.go index fd2cb30b496..7a3f97e5980 100644 --- a/api/cbor_gen.go +++ b/api/cbor_gen.go @@ -14,7 +14,8 @@ import ( abi "github.com/filecoin-project/go-state-types/abi" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" - market "github.com/filecoin-project/go-state-types/builtin/v9/market" + + piece "github.com/filecoin-project/lotus/storage/pipeline/piece" ) var _ = xerrors.Errorf @@ -35,7 +36,7 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { } // t.Channel (address.Address) (struct) - if len("Channel") > cbg.MaxLength { + if len("Channel") > 8192 { return xerrors.Errorf("Value in field \"Channel\" was too long") } @@ -51,7 +52,7 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { } // t.Vouchers ([]*paych.SignedVoucher) (slice) - if len("Vouchers") > cbg.MaxLength { + if len("Vouchers") > 8192 { return xerrors.Errorf("Value in field \"Vouchers\" was too long") } @@ -62,7 +63,7 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Vouchers) > cbg.MaxLength { + if len(t.Vouchers) > 8192 { return xerrors.Errorf("Slice value in field t.Vouchers was too long") } @@ -73,10 +74,11 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.WaitSentinel (cid.Cid) (struct) - if len("WaitSentinel") > cbg.MaxLength { + if len("WaitSentinel") > 8192 { return xerrors.Errorf("Value in field \"WaitSentinel\" was too long") } @@ -123,7 +125,7 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -150,7 +152,7 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Vouchers: array too large (%d)", extra) } @@ -188,9 +190,9 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.WaitSentinel (cid.Cid) (struct) case "WaitSentinel": @@ -226,7 +228,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error { } // t.Size (abi.UnpaddedPieceSize) (uint64) - if len("Size") > cbg.MaxLength { + if len("Size") > 8192 { return xerrors.Errorf("Value in field \"Size\" was too long") } @@ -242,7 +244,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error { } // t.Offset (abi.PaddedPieceSize) (uint64) - if len("Offset") > cbg.MaxLength { + if len("Offset") > 8192 { return xerrors.Errorf("Value in field \"Offset\" was too long") } @@ -258,7 +260,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error { } // t.SectorID (abi.SectorNumber) (uint64) - if len("SectorID") > cbg.MaxLength { + if len("SectorID") > 8192 { return xerrors.Errorf("Value in field \"SectorID\" was too long") } @@ -305,7 +307,7 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -381,7 +383,7 @@ func (t *SealedRefs) MarshalCBOR(w io.Writer) error { } // t.Refs ([]api.SealedRef) (slice) - if len("Refs") > cbg.MaxLength { + if len("Refs") > 8192 { return xerrors.Errorf("Value in field \"Refs\" was too long") } @@ -392,7 +394,7 @@ func (t *SealedRefs) MarshalCBOR(w io.Writer) error { return err } - if len(t.Refs) > cbg.MaxLength { + if len(t.Refs) > 8192 { return xerrors.Errorf("Slice value in field t.Refs was too long") } @@ -403,6 +405,7 @@ func (t *SealedRefs) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -436,7 +439,7 @@ func (t *SealedRefs) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -453,7 +456,7 @@ func (t *SealedRefs) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Refs: array too large (%d)", extra) } @@ -481,6 +484,7 @@ func (t *SealedRefs) UnmarshalCBOR(r io.Reader) (err error) { } } + } } @@ -505,7 +509,7 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error { } // t.Epoch (abi.ChainEpoch) (int64) - if len("Epoch") > cbg.MaxLength { + if len("Epoch") > 8192 { return xerrors.Errorf("Value in field \"Epoch\" was too long") } @@ -527,7 +531,7 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error { } // t.Value (abi.SealRandomness) (slice) - if len("Value") > cbg.MaxLength { + if len("Value") > 8192 { return xerrors.Errorf("Value in field \"Value\" was too long") } @@ -538,7 +542,7 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error { return err } - if len(t.Value) > cbg.ByteArrayMaxLen { + if len(t.Value) > 2097152 { return xerrors.Errorf("Byte array in field t.Value was too long") } @@ -546,9 +550,10 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Value[:]); err != nil { + if _, err := cw.Write(t.Value); err != nil { return err } + return nil } @@ -581,7 +586,7 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -594,10 +599,10 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) (err error) { case "Epoch": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -624,7 +629,7 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Value: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -635,7 +640,7 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) (err error) { t.Value = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Value[:]); err != nil { + if _, err := io.ReadFull(cr, t.Value); err != nil { return err } @@ -660,7 +665,7 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error { } // t.Epoch (abi.ChainEpoch) (int64) - if len("Epoch") > cbg.MaxLength { + if len("Epoch") > 8192 { return xerrors.Errorf("Value in field \"Epoch\" was too long") } @@ -682,7 +687,7 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error { } // t.Value (abi.InteractiveSealRandomness) (slice) - if len("Value") > cbg.MaxLength { + if len("Value") > 8192 { return xerrors.Errorf("Value in field \"Value\" was too long") } @@ -693,7 +698,7 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error { return err } - if len(t.Value) > cbg.ByteArrayMaxLen { + if len(t.Value) > 2097152 { return xerrors.Errorf("Byte array in field t.Value was too long") } @@ -701,9 +706,10 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Value[:]); err != nil { + if _, err := cw.Write(t.Value); err != nil { return err } + return nil } @@ -736,7 +742,7 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -749,10 +755,10 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) { case "Epoch": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -779,7 +785,7 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Value: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -790,7 +796,7 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) { t.Value = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Value[:]); err != nil { + if _, err := io.ReadFull(cr, t.Value); err != nil { return err } @@ -802,239 +808,6 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *PieceDealInfo) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - - cw := cbg.NewCborWriter(w) - - if _, err := cw.Write([]byte{165}); err != nil { - return err - } - - // t.DealID (abi.DealID) (uint64) - if len("DealID") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"DealID\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealID"))); err != nil { - return err - } - if _, err := cw.WriteString(string("DealID")); err != nil { - return err - } - - if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.DealID)); err != nil { - return err - } - - // t.PublishCid (cid.Cid) (struct) - if len("PublishCid") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"PublishCid\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("PublishCid"))); err != nil { - return err - } - if _, err := cw.WriteString(string("PublishCid")); err != nil { - return err - } - - if t.PublishCid == nil { - if _, err := cw.Write(cbg.CborNull); err != nil { - return err - } - } else { - if err := cbg.WriteCid(cw, *t.PublishCid); err != nil { - return xerrors.Errorf("failed to write cid field t.PublishCid: %w", err) - } - } - - // t.DealProposal (market.DealProposal) (struct) - if len("DealProposal") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"DealProposal\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealProposal"))); err != nil { - return err - } - if _, err := cw.WriteString(string("DealProposal")); err != nil { - return err - } - - if err := t.DealProposal.MarshalCBOR(cw); err != nil { - return err - } - - // t.DealSchedule (api.DealSchedule) (struct) - if len("DealSchedule") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"DealSchedule\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealSchedule"))); err != nil { - return err - } - if _, err := cw.WriteString(string("DealSchedule")); err != nil { - return err - } - - if err := t.DealSchedule.MarshalCBOR(cw); err != nil { - return err - } - - // t.KeepUnsealed (bool) (bool) - if len("KeepUnsealed") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"KeepUnsealed\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("KeepUnsealed"))); err != nil { - return err - } - if _, err := cw.WriteString(string("KeepUnsealed")); err != nil { - return err - } - - if err := cbg.WriteBool(w, t.KeepUnsealed); err != nil { - return err - } - return nil -} - -func (t *PieceDealInfo) UnmarshalCBOR(r io.Reader) (err error) { - *t = PieceDealInfo{} - - cr := cbg.NewCborReader(r) - - maj, extra, err := cr.ReadHeader() - if err != nil { - return err - } - defer func() { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - }() - - if maj != cbg.MajMap { - return fmt.Errorf("cbor input should be of type map") - } - - if extra > cbg.MaxLength { - return fmt.Errorf("PieceDealInfo: map struct too large (%d)", extra) - } - - var name string - n := extra - - for i := uint64(0); i < n; i++ { - - { - sval, err := cbg.ReadString(cr) - if err != nil { - return err - } - - name = string(sval) - } - - switch name { - // t.DealID (abi.DealID) (uint64) - case "DealID": - - { - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.DealID = abi.DealID(extra) - - } - // t.PublishCid (cid.Cid) (struct) - case "PublishCid": - - { - - b, err := cr.ReadByte() - if err != nil { - return err - } - if b != cbg.CborNull[0] { - if err := cr.UnreadByte(); err != nil { - return err - } - - c, err := cbg.ReadCid(cr) - if err != nil { - return xerrors.Errorf("failed to read cid field t.PublishCid: %w", err) - } - - t.PublishCid = &c - } - - } - // t.DealProposal (market.DealProposal) (struct) - case "DealProposal": - - { - - b, err := cr.ReadByte() - if err != nil { - return err - } - if b != cbg.CborNull[0] { - if err := cr.UnreadByte(); err != nil { - return err - } - t.DealProposal = new(market.DealProposal) - if err := t.DealProposal.UnmarshalCBOR(cr); err != nil { - return xerrors.Errorf("unmarshaling t.DealProposal pointer: %w", err) - } - } - - } - // t.DealSchedule (api.DealSchedule) (struct) - case "DealSchedule": - - { - - if err := t.DealSchedule.UnmarshalCBOR(cr); err != nil { - return xerrors.Errorf("unmarshaling t.DealSchedule: %w", err) - } - - } - // t.KeepUnsealed (bool) (bool) - case "KeepUnsealed": - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - if maj != cbg.MajOther { - return fmt.Errorf("booleans must be major type 7") - } - switch extra { - case 20: - t.KeepUnsealed = false - case 21: - t.KeepUnsealed = true - default: - return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) - } - - default: - // Field doesn't exist on this type, so ignore it - cbg.ScanForLinks(r, func(cid.Cid) {}) - } - } - - return nil -} func (t *SectorPiece) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) @@ -1048,7 +821,7 @@ func (t *SectorPiece) MarshalCBOR(w io.Writer) error { } // t.Piece (abi.PieceInfo) (struct) - if len("Piece") > cbg.MaxLength { + if len("Piece") > 8192 { return xerrors.Errorf("Value in field \"Piece\" was too long") } @@ -1063,8 +836,8 @@ func (t *SectorPiece) MarshalCBOR(w io.Writer) error { return err } - // t.DealInfo (api.PieceDealInfo) (struct) - if len("DealInfo") > cbg.MaxLength { + // t.DealInfo (piece.PieceDealInfo) (struct) + if len("DealInfo") > 8192 { return xerrors.Errorf("Value in field \"DealInfo\" was too long") } @@ -1110,7 +883,7 @@ func (t *SectorPiece) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1129,7 +902,7 @@ func (t *SectorPiece) UnmarshalCBOR(r io.Reader) (err error) { } } - // t.DealInfo (api.PieceDealInfo) (struct) + // t.DealInfo (piece.PieceDealInfo) (struct) case "DealInfo": { @@ -1142,7 +915,7 @@ func (t *SectorPiece) UnmarshalCBOR(r io.Reader) (err error) { if err := cr.UnreadByte(); err != nil { return err } - t.DealInfo = new(PieceDealInfo) + t.DealInfo = new(piece.PieceDealInfo) if err := t.DealInfo.UnmarshalCBOR(cr); err != nil { return xerrors.Errorf("unmarshaling t.DealInfo pointer: %w", err) } @@ -1158,160 +931,3 @@ func (t *SectorPiece) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *DealSchedule) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - - cw := cbg.NewCborWriter(w) - - if _, err := cw.Write([]byte{162}); err != nil { - return err - } - - // t.EndEpoch (abi.ChainEpoch) (int64) - if len("EndEpoch") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"EndEpoch\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("EndEpoch"))); err != nil { - return err - } - if _, err := cw.WriteString(string("EndEpoch")); err != nil { - return err - } - - if t.EndEpoch >= 0 { - if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.EndEpoch)); err != nil { - return err - } - } else { - if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.EndEpoch-1)); err != nil { - return err - } - } - - // t.StartEpoch (abi.ChainEpoch) (int64) - if len("StartEpoch") > cbg.MaxLength { - return xerrors.Errorf("Value in field \"StartEpoch\" was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("StartEpoch"))); err != nil { - return err - } - if _, err := cw.WriteString(string("StartEpoch")); err != nil { - return err - } - - if t.StartEpoch >= 0 { - if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.StartEpoch)); err != nil { - return err - } - } else { - if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.StartEpoch-1)); err != nil { - return err - } - } - return nil -} - -func (t *DealSchedule) UnmarshalCBOR(r io.Reader) (err error) { - *t = DealSchedule{} - - cr := cbg.NewCborReader(r) - - maj, extra, err := cr.ReadHeader() - if err != nil { - return err - } - defer func() { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - }() - - if maj != cbg.MajMap { - return fmt.Errorf("cbor input should be of type map") - } - - if extra > cbg.MaxLength { - return fmt.Errorf("DealSchedule: map struct too large (%d)", extra) - } - - var name string - n := extra - - for i := uint64(0); i < n; i++ { - - { - sval, err := cbg.ReadString(cr) - if err != nil { - return err - } - - name = string(sval) - } - - switch name { - // t.EndEpoch (abi.ChainEpoch) (int64) - case "EndEpoch": - { - maj, extra, err := cr.ReadHeader() - var extraI int64 - if err != nil { - return err - } - switch maj { - case cbg.MajUnsignedInt: - extraI = int64(extra) - if extraI < 0 { - return fmt.Errorf("int64 positive overflow") - } - case cbg.MajNegativeInt: - extraI = int64(extra) - if extraI < 0 { - return fmt.Errorf("int64 negative overflow") - } - extraI = -1 - extraI - default: - return fmt.Errorf("wrong type for int64 field: %d", maj) - } - - t.EndEpoch = abi.ChainEpoch(extraI) - } - // t.StartEpoch (abi.ChainEpoch) (int64) - case "StartEpoch": - { - maj, extra, err := cr.ReadHeader() - var extraI int64 - if err != nil { - return err - } - switch maj { - case cbg.MajUnsignedInt: - extraI = int64(extra) - if extraI < 0 { - return fmt.Errorf("int64 positive overflow") - } - case cbg.MajNegativeInt: - extraI = int64(extra) - if extraI < 0 { - return fmt.Errorf("int64 negative overflow") - } - extraI = -1 - extraI - default: - return fmt.Errorf("wrong type for int64 field: %d", maj) - } - - t.StartEpoch = abi.ChainEpoch(extraI) - } - - default: - // Field doesn't exist on this type, so ignore it - cbg.ScanForLinks(r, func(cid.Cid) {}) - } - } - - return nil -} diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 6028a40f250..29ac1d3e8d8 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -32,7 +32,6 @@ import ( "github.com/filecoin-project/go-fil-markets/retrievalmarket" "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v12/miner" "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/exitcode" @@ -41,6 +40,7 @@ import ( apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/node/modules/dtypes" @@ -404,6 +404,32 @@ func init() { percent := types.Percent(123) addExample(percent) addExample(&percent) + + addExample(&miner.PieceActivationManifest{ + CID: c, + Size: 2032, + VerifiedAllocationKey: nil, + Notify: nil, + }) + + addExample(&types.ActorEventBlock{ + Codec: 0x51, + Value: []byte("ddata"), + }) + + addExample(&types.ActorEventFilter{ + Addresses: []address.Address{addr}, + Fields: map[string][]types.ActorEventBlock{ + "abc": { + { + Codec: 0x51, + Value: []byte("ddata"), + }, + }, + }, + FromHeight: epochPtr(1010), + ToHeight: epochPtr(1020), + }) } func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) { @@ -509,6 +535,11 @@ func exampleStruct(method string, t, parent reflect.Type) interface{} { return ns.Interface() } +func epochPtr(ei int64) *abi.ChainEpoch { + ep := abi.ChainEpoch(ei) + return &ep +} + type Visitor struct { Root string Methods map[string]ast.Node diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index f4a9832bb3f..215ccdfebdf 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -27,7 +27,7 @@ import ( auth "github.com/filecoin-project/go-jsonrpc/auth" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v12/miner" + miner "github.com/filecoin-project/go-state-types/builtin/v13/miner" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" miner0 "github.com/filecoin-project/go-state-types/builtin/v9/miner" verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" @@ -1627,6 +1627,21 @@ func (mr *MockFullNodeMockRecorder) GasEstimateMessageGas(arg0, arg1, arg2, arg3 return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateMessageGas", reflect.TypeOf((*MockFullNode)(nil).GasEstimateMessageGas), arg0, arg1, arg2, arg3) } +// GetActorEvents mocks base method. +func (m *MockFullNode) GetActorEvents(arg0 context.Context, arg1 *types.ActorEventFilter) ([]*types.ActorEvent, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetActorEvents", arg0, arg1) + ret0, _ := ret[0].([]*types.ActorEvent) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetActorEvents indicates an expected call of GetActorEvents. +func (mr *MockFullNodeMockRecorder) GetActorEvents(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetActorEvents", reflect.TypeOf((*MockFullNode)(nil).GetActorEvents), arg0, arg1) +} + // ID mocks base method. func (m *MockFullNode) ID(arg0 context.Context) (peer.ID, error) { m.ctrl.T.Helper() @@ -3159,6 +3174,36 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetAllAllocations mocks base method. +func (m *MockFullNode) StateGetAllAllocations(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllAllocations", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllAllocations indicates an expected call of StateGetAllAllocations. +func (mr *MockFullNodeMockRecorder) StateGetAllAllocations(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllAllocations), arg0, arg1) +} + +// StateGetAllClaims mocks base method. +func (m *MockFullNode) StateGetAllClaims(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllClaims", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllClaims indicates an expected call of StateGetAllClaims. +func (mr *MockFullNodeMockRecorder) StateGetAllClaims(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetAllClaims), arg0, arg1) +} + // StateGetAllocation mocks base method. func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) { m.ctrl.T.Helper() @@ -3189,6 +3234,21 @@ func (mr *MockFullNodeMockRecorder) StateGetAllocationForPendingDeal(arg0, arg1, return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationForPendingDeal", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocationForPendingDeal), arg0, arg1, arg2) } +// StateGetAllocationIdForPendingDeal mocks base method. +func (m *MockFullNode) StateGetAllocationIdForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (verifreg.AllocationId, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllocationIdForPendingDeal", arg0, arg1, arg2) + ret0, _ := ret[0].(verifreg.AllocationId) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllocationIdForPendingDeal indicates an expected call of StateGetAllocationIdForPendingDeal. +func (mr *MockFullNodeMockRecorder) StateGetAllocationIdForPendingDeal(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationIdForPendingDeal", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocationIdForPendingDeal), arg0, arg1, arg2) +} + // StateGetAllocations mocks base method. func (m *MockFullNode) StateGetAllocations(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { m.ctrl.T.Helper() @@ -3894,6 +3954,21 @@ func (mr *MockFullNodeMockRecorder) StateWaitMsg(arg0, arg1, arg2, arg3, arg4 in return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateWaitMsg", reflect.TypeOf((*MockFullNode)(nil).StateWaitMsg), arg0, arg1, arg2, arg3, arg4) } +// SubscribeActorEvents mocks base method. +func (m *MockFullNode) SubscribeActorEvents(arg0 context.Context, arg1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SubscribeActorEvents", arg0, arg1) + ret0, _ := ret[0].(<-chan *types.ActorEvent) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SubscribeActorEvents indicates an expected call of SubscribeActorEvents. +func (mr *MockFullNodeMockRecorder) SubscribeActorEvents(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SubscribeActorEvents", reflect.TypeOf((*MockFullNode)(nil).SubscribeActorEvents), arg0, arg1) +} + // SyncCheckBad mocks base method. func (m *MockFullNode) SyncCheckBad(arg0 context.Context, arg1 cid.Cid) (string, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 97e441bbe6e..bd33ae445be 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -37,11 +37,13 @@ import ( apitypes "github.com/filecoin-project/lotus/api/types" builtinactors "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/journal/alerting" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" "github.com/filecoin-project/lotus/storage/sealer/fsutil" "github.com/filecoin-project/lotus/storage/sealer/sealtasks" @@ -335,6 +337,8 @@ type FullNodeMethods struct { GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"` + GetActorEvents func(p0 context.Context, p1 *types.ActorEventFilter) ([]*types.ActorEvent, error) `perm:"read"` + MarketAddBalance func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"` MarketGetReserved func(p0 context.Context, p1 address.Address) (types.BigInt, error) `perm:"sign"` @@ -481,10 +485,16 @@ type FullNodeMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"` + + StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"` + StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` + StateGetAllocationIdForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (verifreg.AllocationId, error) `perm:"read"` + StateGetAllocations func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"` StateGetBeaconEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"` @@ -579,6 +589,8 @@ type FullNodeMethods struct { StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch, p4 bool) (*MsgLookup, error) `perm:"read"` + SubscribeActorEvents func(p0 context.Context, p1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) `perm:"read"` + SyncCheckBad func(p0 context.Context, p1 cid.Cid) (string, error) `perm:"read"` SyncCheckpoint func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"` @@ -745,6 +757,8 @@ type GatewayMethods struct { GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `` + GetActorEvents func(p0 context.Context, p1 *types.ActorEventFilter) ([]*types.ActorEvent, error) `` + MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*MiningBaseInfo, error) `` MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `` @@ -819,6 +833,8 @@ type GatewayMethods struct { StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch, p4 bool) (*MsgLookup, error) `` + SubscribeActorEvents func(p0 context.Context, p1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) `` + Version func(p0 context.Context) (APIVersion, error) `` WalletBalance func(p0 context.Context, p1 address.Address) (types.BigInt, error) `` @@ -1099,7 +1115,7 @@ type StorageMinerMethods struct { SectorAbortUpgrade func(p0 context.Context, p1 abi.SectorNumber) error `perm:"admin"` - SectorAddPieceToAny func(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data, p3 PieceDealInfo) (SectorOffset, error) `perm:"admin"` + SectorAddPieceToAny func(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data, p3 piece.PieceDealInfo) (SectorOffset, error) `perm:"admin"` SectorCommitFlush func(p0 context.Context) ([]sealiface.CommitBatchRes, error) `perm:"admin"` @@ -2590,6 +2606,17 @@ func (s *FullNodeStub) GasEstimateMessageGas(p0 context.Context, p1 *types.Messa return nil, ErrNotSupported } +func (s *FullNodeStruct) GetActorEvents(p0 context.Context, p1 *types.ActorEventFilter) ([]*types.ActorEvent, error) { + if s.Internal.GetActorEvents == nil { + return *new([]*types.ActorEvent), ErrNotSupported + } + return s.Internal.GetActorEvents(p0, p1) +} + +func (s *FullNodeStub) GetActorEvents(p0 context.Context, p1 *types.ActorEventFilter) ([]*types.ActorEvent, error) { + return *new([]*types.ActorEvent), ErrNotSupported +} + func (s *FullNodeStruct) MarketAddBalance(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) { if s.Internal.MarketAddBalance == nil { return *new(cid.Cid), ErrNotSupported @@ -3393,6 +3420,28 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if s.Internal.StateGetAllAllocations == nil { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported + } + return s.Internal.StateGetAllAllocations(p0, p1) +} + +func (s *FullNodeStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported +} + +func (s *FullNodeStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if s.Internal.StateGetAllClaims == nil { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported + } + return s.Internal.StateGetAllClaims(p0, p1) +} + +func (s *FullNodeStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported +} + func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported @@ -3415,6 +3464,17 @@ func (s *FullNodeStub) StateGetAllocationForPendingDeal(p0 context.Context, p1 a return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetAllocationIdForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (verifreg.AllocationId, error) { + if s.Internal.StateGetAllocationIdForPendingDeal == nil { + return *new(verifreg.AllocationId), ErrNotSupported + } + return s.Internal.StateGetAllocationIdForPendingDeal(p0, p1, p2) +} + +func (s *FullNodeStub) StateGetAllocationIdForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (verifreg.AllocationId, error) { + return *new(verifreg.AllocationId), ErrNotSupported +} + func (s *FullNodeStruct) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { if s.Internal.StateGetAllocations == nil { return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported @@ -3932,6 +3992,17 @@ func (s *FullNodeStub) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64, p return nil, ErrNotSupported } +func (s *FullNodeStruct) SubscribeActorEvents(p0 context.Context, p1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + if s.Internal.SubscribeActorEvents == nil { + return nil, ErrNotSupported + } + return s.Internal.SubscribeActorEvents(p0, p1) +} + +func (s *FullNodeStub) SubscribeActorEvents(p0 context.Context, p1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + return nil, ErrNotSupported +} + func (s *FullNodeStruct) SyncCheckBad(p0 context.Context, p1 cid.Cid) (string, error) { if s.Internal.SyncCheckBad == nil { return "", ErrNotSupported @@ -4779,6 +4850,17 @@ func (s *GatewayStub) GasEstimateMessageGas(p0 context.Context, p1 *types.Messag return nil, ErrNotSupported } +func (s *GatewayStruct) GetActorEvents(p0 context.Context, p1 *types.ActorEventFilter) ([]*types.ActorEvent, error) { + if s.Internal.GetActorEvents == nil { + return *new([]*types.ActorEvent), ErrNotSupported + } + return s.Internal.GetActorEvents(p0, p1) +} + +func (s *GatewayStub) GetActorEvents(p0 context.Context, p1 *types.ActorEventFilter) ([]*types.ActorEvent, error) { + return *new([]*types.ActorEvent), ErrNotSupported +} + func (s *GatewayStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*MiningBaseInfo, error) { if s.Internal.MinerGetBaseInfo == nil { return nil, ErrNotSupported @@ -5186,6 +5268,17 @@ func (s *GatewayStub) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64, p3 return nil, ErrNotSupported } +func (s *GatewayStruct) SubscribeActorEvents(p0 context.Context, p1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + if s.Internal.SubscribeActorEvents == nil { + return nil, ErrNotSupported + } + return s.Internal.SubscribeActorEvents(p0, p1) +} + +func (s *GatewayStub) SubscribeActorEvents(p0 context.Context, p1 *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + return nil, ErrNotSupported +} + func (s *GatewayStruct) Version(p0 context.Context) (APIVersion, error) { if s.Internal.Version == nil { return *new(APIVersion), ErrNotSupported @@ -6506,14 +6599,14 @@ func (s *StorageMinerStub) SectorAbortUpgrade(p0 context.Context, p1 abi.SectorN return ErrNotSupported } -func (s *StorageMinerStruct) SectorAddPieceToAny(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data, p3 PieceDealInfo) (SectorOffset, error) { +func (s *StorageMinerStruct) SectorAddPieceToAny(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data, p3 piece.PieceDealInfo) (SectorOffset, error) { if s.Internal.SectorAddPieceToAny == nil { return *new(SectorOffset), ErrNotSupported } return s.Internal.SectorAddPieceToAny(p0, p1, p2, p3) } -func (s *StorageMinerStub) SectorAddPieceToAny(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data, p3 PieceDealInfo) (SectorOffset, error) { +func (s *StorageMinerStub) SectorAddPieceToAny(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data, p3 piece.PieceDealInfo) (SectorOffset, error) { return *new(SectorOffset), ErrNotSupported } diff --git a/api/types.go b/api/types.go index 7fd60775019..b7dbe7b3625 100644 --- a/api/types.go +++ b/api/types.go @@ -344,6 +344,8 @@ type ForkUpgradeParams struct { UpgradeLightningHeight abi.ChainEpoch UpgradeThunderHeight abi.ChainEpoch UpgradeWatermelonHeight abi.ChainEpoch + UpgradeDragonHeight abi.ChainEpoch + UpgradePhoenixHeight abi.ChainEpoch } // ChainExportConfig holds configuration for chain ranged exports. diff --git a/api/v0api/full.go b/api/v0api/full.go index d92d5a95c8e..db84ddc8745 100644 --- a/api/v0api/full.go +++ b/api/v0api/full.go @@ -537,10 +537,14 @@ type FullNode interface { StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read // StateGetAllocations returns the all the allocations for a given client. StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read + // StateGetAllAllocations returns the all the allocations available in verified registry actor. + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read // StateGetClaim returns the claim for a given address and claim ID. StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read // StateGetClaims returns the all the claims for a given provider. StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read + // StateGetAllClaims returns the all the claims available in verified registry actor. + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read // StateLookupID retrieves the ID address of the given address StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read // StateAccountKey returns the public key address of the given ID address diff --git a/api/v0api/proxy_gen.go b/api/v0api/proxy_gen.go index bd37f64298d..90c25d4a774 100644 --- a/api/v0api/proxy_gen.go +++ b/api/v0api/proxy_gen.go @@ -280,6 +280,10 @@ type FullNodeMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"` + + StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"` + StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` @@ -1837,6 +1841,28 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if s.Internal.StateGetAllAllocations == nil { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported + } + return s.Internal.StateGetAllAllocations(p0, p1) +} + +func (s *FullNodeStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported +} + +func (s *FullNodeStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if s.Internal.StateGetAllClaims == nil { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported + } + return s.Internal.StateGetAllClaims(p0, p1) +} + +func (s *FullNodeStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported +} + func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 151b1dbc124..df67d087656 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -26,7 +26,7 @@ import ( auth "github.com/filecoin-project/go-jsonrpc/auth" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v12/miner" + miner "github.com/filecoin-project/go-state-types/builtin/v13/miner" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" miner0 "github.com/filecoin-project/go-state-types/builtin/v9/miner" verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" @@ -2339,6 +2339,36 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetAllAllocations mocks base method. +func (m *MockFullNode) StateGetAllAllocations(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllAllocations", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllAllocations indicates an expected call of StateGetAllAllocations. +func (mr *MockFullNodeMockRecorder) StateGetAllAllocations(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllAllocations), arg0, arg1) +} + +// StateGetAllClaims mocks base method. +func (m *MockFullNode) StateGetAllClaims(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllClaims", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllClaims indicates an expected call of StateGetAllClaims. +func (mr *MockFullNodeMockRecorder) StateGetAllClaims(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetAllClaims), arg0, arg1) +} + // StateGetAllocation mocks base method. func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) { m.ctrl.T.Helper() diff --git a/blockstore/cbor_gen.go b/blockstore/cbor_gen.go index 221f136762d..c53e9e85061 100644 --- a/blockstore/cbor_gen.go +++ b/blockstore/cbor_gen.go @@ -44,7 +44,7 @@ func (t *NetRpcReq) MarshalCBOR(w io.Writer) error { } // t.Cid ([]cid.Cid) (slice) - if len(t.Cid) > cbg.MaxLength { + if len(t.Cid) > 8192 { return xerrors.Errorf("Slice value in field t.Cid was too long") } @@ -60,7 +60,7 @@ func (t *NetRpcReq) MarshalCBOR(w io.Writer) error { } // t.Data ([][]uint8) (slice) - if len(t.Data) > cbg.MaxLength { + if len(t.Data) > 8192 { return xerrors.Errorf("Slice value in field t.Data was too long") } @@ -68,7 +68,7 @@ func (t *NetRpcReq) MarshalCBOR(w io.Writer) error { return err } for _, v := range t.Data { - if len(v) > cbg.ByteArrayMaxLen { + if len(v) > 2097152 { return xerrors.Errorf("Byte array in field v was too long") } @@ -76,9 +76,10 @@ func (t *NetRpcReq) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(v[:]); err != nil { + if _, err := cw.Write(v); err != nil { return err } + } return nil } @@ -140,7 +141,7 @@ func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Cid: array too large (%d)", extra) } @@ -171,9 +172,9 @@ func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) { t.Cid[i] = c } + } } - // t.Data ([][]uint8) (slice) maj, extra, err = cr.ReadHeader() @@ -181,7 +182,7 @@ func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Data: array too large (%d)", extra) } @@ -207,7 +208,7 @@ func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Data[i]: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -218,12 +219,12 @@ func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) { t.Data[i] = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Data[i][:]); err != nil { + if _, err := io.ReadFull(cr, t.Data[i]); err != nil { return err } + } } - return nil } @@ -253,7 +254,7 @@ func (t *NetRpcResp) MarshalCBOR(w io.Writer) error { } // t.Data ([]uint8) (slice) - if len(t.Data) > cbg.ByteArrayMaxLen { + if len(t.Data) > 2097152 { return xerrors.Errorf("Byte array in field t.Data was too long") } @@ -261,9 +262,10 @@ func (t *NetRpcResp) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Data[:]); err != nil { + if _, err := cw.Write(t.Data); err != nil { return err } + return nil } @@ -324,7 +326,7 @@ func (t *NetRpcResp) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Data: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -335,9 +337,10 @@ func (t *NetRpcResp) UnmarshalCBOR(r io.Reader) (err error) { t.Data = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Data[:]); err != nil { + if _, err := io.ReadFull(cr, t.Data); err != nil { return err } + return nil } @@ -361,7 +364,7 @@ func (t *NetRpcErr) MarshalCBOR(w io.Writer) error { } // t.Msg (string) (string) - if len(t.Msg) > cbg.MaxLength { + if len(t.Msg) > 8192 { return xerrors.Errorf("Value in field t.Msg was too long") } @@ -426,7 +429,7 @@ func (t *NetRpcErr) UnmarshalCBOR(r io.Reader) (err error) { // t.Msg (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } diff --git a/build/actors/v13.tar.zst b/build/actors/v13.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..77565abc97bbc3ad6a3c69e801b2f147a2c777cc GIT binary patch literal 1646614 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

aeW%I}N0n{`QjH|Peca{2G75iU1i6%%) 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�v&2ZbR>qRBtq4U+KsNiu>hDq6{5U9iO@25#G%1i8#m}gWM*q0L@baE zB5#{_3WXvj@~h%6HTw;l?F_t0<3{h&s-hlOm`c0|Wsl|>Vzu{H&M!9P_f+9l9w!7= z-Bv6V5&DvZ7|ByKHYdpdQp<9Q@&5!vt8WI0ig|-N#kq~nZm4+wkM0_nRtM;LA#Rt6 z{bb!Ph4p$CEl@4EvY5$?)+-6(<(>%crzKgJ7H3153PKbDiUVRR8OUP4BMlgY!OI4u zAWR9`FhlaB>Y%+*?^U8cAX_YyRBmlmB5Bqa>DUX3iH^cYHnzj^z9^+v=np*VvNDA^ z$d@$$d>qPsmb1bq_@2T+Szg%3$Yy=VA)66Q&||7PMyUrFHs1l5NcB#92HXER-JE1JT5u)0*7Px?_@Q1EO}y+?CchURbhV=wn_e4N?@c&=)#V z7AzJZG%Xbw595Zapf71w2gNjuphDV+BwBrWoV~P&Fb`6OqSm{i#vOQqmV*sO;r?+% zjq$&1o67KrY#-0$rZw_C=s3%cOPjP5evfEGk5h&a!ZQ?Pv=XIS^K^aQgLmjEZw{Ky~%|idXLdv{%+Nn|mR`Gr}zvVjw~z zzeX9jlXl#Ys*}h$oh<)seVs!bce-0hqf(jL`n%;qi>ba?h%!lC0t)MyyA3HH8||2Zf<)6e+SM12Q4iGjE&%)u2JIqJgz%a8dd(2vqqtN4}Q&WvR{ zpn3w;xREfZ6mRtb>GADA+P)^Z2l+y06_dE9MWJ?5Y`Ivn?RITZ)*W09`yWTiyClwu zm@uDJg^mRMq(};hJ4j0}aLvq0!0F!$dDt#3o7)%m#rdKnPCA?XapT!?u`c&wK zeQX^s9R8dH+^?~4PQth6nBs)d5Bk6BjI1xVE#w;y+b}pT2Rglz@V$Eq^+cm4p@a~x zMB3+@q8ETpNr~@MD}($0$=nm6MU3{o4lc#~%P(M0p4W`c@Z}0sss=czP4hFW80WVJ zND6+nJTbG@AV;wQR^gRl>f*sKf^ z$pRf=vXzwC&A5=T~2A#HiWChx=}96EiL#XgoN$~3> z6%g964ZWYX$W=guC?NOl|NI&|1o3Jxo>5hSEqGi{cG|RvFGchK*>D!@cYbos&7e^F zQC}`Mi2@UasW^otO=6mlaL|`~Mg~P+9!Pe;$_?|KT6m*V%q_7xQ)+NMJB>Gr?q(CV zdONaF28Ob}>n6k;gRM|Q-2Ay;R)1!}rD$O}P?uZ)A$z#faOY~*=i(|{hQNCvk{pE- zBp)s4(4WA2lTNjwgc+{QV5Zjy?4+xRjSm&@<#Yy(WFpZem&q(2)0a>~Y%a%NhlAsF zr7d2H9ao*aebn;1pHQ|IBh}u`uDwhC-g~B?0w`VnXjjpY6{BhlNh1 z2P}+OVJ9Z-fj7QhrR3o#2BuW-rabJyIy0p@RQbbJMuv4B$r>2LapfGy3uMY*gocad zTFnxCgC7E)8l{fBNN5o^p&Xrq-*P`si22yq~)3|6y{IWNa5 z*4k1g|DdMN$wrRCUV-!aEP#>{zo6#;aX^h49der5l{hN_?5SatA2HO%zdD#cu=9np zUKrn7D2TiXSw+2!WHZ!kkc-$)b(hdbc9DF+pOuP>W1a!x3a4+;!SDo6A1x^LhGjcP zgKj8kDG4-X2EwqnG{|b~3YOk^^&8>?bD`X(i4s0j;#^gok%pr(R9x`%q1%{=CQ&bA zi-kn*_DLBRpp?X47BeFl01gQsES9C5H{;e|npb;F{n~OmW)r6#NAKB5m;|udqD=;T zHPej(GFHVIRh_C$fX4zjaOpp;4AyKBy0{KT6j{wwF0;E^XSi#kE|-R$ypOv!C?{#^^SRxiSnl+1hU|>ZFOpy@QtX zj+yEq6Xa!dj$LpSZ8qwF<=JZz*6c?W$IK915wdBT!V9H0MUx2NtXAHtxP|QG) z7n@;NEhQy5ST2PLbYX-PuZBZ!(C$o#u3`$L zZ7fDP)dcA2t9a*j;^J7x>G}Jxtgj<%8c`<*ng-$-Kvk;1=R_JjAqscZQD~4dfzKlw zm}V~s2%%bn)XAfLIF4_(M!F(@HfjL}SvZF%QzFn$ZVa^C7LG05*bvE<5XOsPGtxxN zXh+vKDfu`o>(mkq{^v85n6dOQgv7T18FYRsWHa<9z;Q$vfoHn z*#|_>_Hy7V1g3+Z4tyaunhEInYnIjZ!Wo*_4PQs}14D}N0tr6++Xuij;3ub9rFT!K zEbfoL8%`nQ;h9V}nJVY% zp^~~Ln_p%IFw^HE8~lC`&@1oA_9C4Kw93_IM$r^RH9)k)#B|YLhpL81AEV@IuYFnkOO_?kFO( zEvOy2B-=ERcPw}hd0*UKUS9rIKIx%}SWPe*SUrLjVbO{AZPrFdWXOyuOC<3_{t~L~ zLJpVw=i*bm1u&~(fSI0(2f&4&3N`{k;+Jl^Y&6f#poLLwMR@IBT3GcDf}-qTzlE{~ zh)L6umvqH@;_yFMLxhD6it%bSb)|F|yVX~D&w=)Ty_il7dWS%v+&1gpGdzi{`VB87 z*kN_qTI>m6$1}ZrPXACam=X&GB>5p~^@Y?@v~4gy#8bNB&X$|*y_X@dt2Fn(5r~0+ zU_;|VPZV4EmaIRGaWw;xlG55T8_{b<64RD&DkQk}!*dmN|BIKreig~tYc$Pp%`*y` zz{Zy@0LV+?)~o z6GQRFcH8{ly3Ms9XSbms#2{ zS4Y2|KjSH!iR{Ab5x80xM9+1|i^xym<9xT=_Gp(Ep=m>(X^~1<*^k(WUfj53A(Dmn z!|Nrz3Dwf~M6)_$0MCOx)1%|*7EYZknAoSL&bos=TG*X_RYWhfCD!YXCeQnc^cXEU zo?Px2JWJY8y8x{Yuz@-oD#(qz)-deNk-F282TxZ(h(Ad!qhy!G9sAt=OD`I|i7-)D<28(lXBH_xI+Ih#*Usnqd>*qAbcKABJx!_p zQx3kd`0wGk+{=O`9||}XM8L|akOZuy#^7B1(oL_xy)J$C95ILNi)jjm(q8a@i`$g7 za^G#kk?Ye)8%h#PbM`Rn4vRB=V=A0a#QG|4#}yi49jxGTg~bQ=wARM?{-Bakt> zTESqp+eDpbe*7iv4Cn)Z%5p7K)9um5=(T`$w=*wz#|6~i4>%cF2TsTM3mug8rl!n0 zF{d0k1HK%#iN%2llUJ(-3qGhN=0%97QaUa{l=G?MALtvr_J!ULwdF_OP0Ks!nmlAL z?F^0PLm&>U0kg_UUWI`*wz!F;SK;oZImy%YLbSJ8N=_}E-AU_s&WO|aoF|{i5|DZf z0^EqJ;Hh5CYxnNi>AG}FUJ?bz6x6I7S(2uxXB9&|0<_$Iv#@t=YxFIw_1+MC_bk zlfq1Gjqg4%_P9gsiYYs}L{&6S14Pq%0I_A3Y(xjqt+aF9O5ZRrRjmSuDNMF8*M1;PLNVhL-g**h^@Fsgt2mq<_$nCE93@|7PUo9&2x%UrFH@L;@9&w zib6)xR}ptdsI9?#d&Qn&y6ss5?E~@j_)&}|T!T#H>|01CzF-Ce{Ot6i02X5WX$Uk% zzxvpYjO-9Gw+fJ#IAejB_LaGUDE&QYo1^UkRDgTRdV5g)<@SVIJBL=0YT~y&(^26` zO|7?pE(EI%z`TSfsP3pN0Jom=W0uMO+o#BM)ATq7vTbYDn4$sy=%&DWzh}3h79B}q zgYqD0(lWC&$e9k~>LhAKcyLAmp)nEN;3sS>Tr-fB9i&%i- zgCJLT0yWO31{$;($(#z1#Yl65fpB=DUVb#~B;bZ2D}dc;+=L(cEFxkUjxT}6*_i6` zB>beyuWZH0q7r)}aNL8&JD%r3E-`r#QuXhbw7$JxPk^g)gp_UVy5j`p2Vpt7;TJx; zkDueZ21lPv?S$yFmG!hx;17bzM!fZ#{r9ibwb3UZIPql814YAEg^#;Sl8@8VqYe*P zTQ;WO478@z-7U3#W8WAZ((zt`LrJ^JJQr1 zW&P#rJCfdOb!c(!Sl{o1&~w|Sdt6#4Y{yAr+Kv_7K1RcKol&C2$Vm%fI2clWjwDB8c{{Z#jP-!;tXZ-Mrs?7bm_%-cI) z@Y6Iw>ECDQ@^GWVw}i`J;=(=%W$Bm{JGl5u!IK^TQs72O<5bPq~6i5Q3j8; z3%gPGwJPI+yVu+7{umas`VH6Nl9GJk-Z#5e7THfT5Go57>Auy6GB=FWA-NLH1};Us zg(>E02C%klv7s79Sj)~+hzG;6H2oG2q{(Me5ug!L;ZQ_P!P%mii!1&)fFUOW#u8w= zSOWr@Fy>lex&HaQVO>}VqxeSj)C^&8dvwDyQEyJGN^*^ZmwVwjZno#oTt#x8uLLXfs9QXHz^=dWP!{oP9f zr*b9=FcSuW(&bV=R?9wZ86v(JiTX*e>UAu7fIF$p5vr||cS3T9hI&|x*c9AD5j5*@ zv1`ion->IY6$0AK1s)4>BjPCq5Qi)|uuFXY1_}t3rWA(UnLYnGV<1CR@R|@(aMI4P z3+{zAqQWeAZyuab2{L?ZaHm_fS_Lr4CHkLl)4{SW$bdBxWn+!i4E*c-9tnA!ysDIM=Wq!M|o(s4Iz< zK)o7Y5dmAM2P^3L#P<6-eLpX^zeTia6YMEaTa8zBlD549O7ETB2w192c<=P(@(XPm zo?#d3pgDMJ3)=x9Uch@vZ-jwNS>@h%0JxqGp41j50;Rpdj@B(GcFGJ=8yAFy$Kj9# zTVp{!;I9r@`foalGKv4;vv>)iLJx#thu=l6VWjf74U@@$b$HXs zJSK98+2NH)H*FhP!=ZZh4#P`?3O5vdU%?3wPWZy@N5DUryG-vvj}f;S8A0hBXtPbO1*{xWDm0ADy|#eX*4dB-c=>T4bEX z;|(3V8>u=F8c0&vF?#?8_bY$)*N*AM_lYTJ(HRnuOZuO2tD~${iq;jEErJeaz<;xW z2CvQ<%>+yb&y)N5V0sCKxhe;HhqQxN9WI~p3)YM3O=l~L)IDf~U*blmfWqZNn)~?4 z{z!8(*Jlx>q0>ZzOnfBWp!$INmnbQEJloEU<*0iXnJNd&L4!*v-UQOk zrzCzgMjI0*b^c@?p|BeCk@~`_<%zmAwzGFiwP-xVcB3;+E4LaPap!j61zKcAfQSur=PU@IY3N%iAcTRUY?>| zw`G{AK6RMbIvKGou%1Be*3Q`Yk;AUmjF3(5WVZ8 zr(aQG0}6C5P`sZtliZ2~AI-Qdadu^_*x?sRm}m?rA_iks^n0BcY`k=`0voie@<)KG zAi9>Eqf93_ua#&^c+DUJRc26jR%7UF!h7n{B?i#xV{b5tMxFY|#+B;I++b3eKzW-` zO??=X;>s!=$Mvi4I$HY8m}(4XriE2Fg&@Eq^k0HbVo)WdHBgHmx^ zmmx?Wr>VYq#YmdDf*3^g0TGHDR)hq*4QEiER-6p*^K|3YUv|qBor$2n)vg_oYX_)>jNN?r1wSmMuKCS zgHF~VNd$+vD9Rs6kT}Ty*5RC|D{Uy+u}!HAyi_>E?3e_1Vi7_3{iTo3322W5HTmA> zemb@z=m8TcI(QPPIAEVWhS(f?ug_vT?@34roWmWbus&H zWT?sis52}@e8AsuB%vlIWJwV6fsc{JT>4>n1`_M`iDV+ltR8Vg^r*VY6*V? zvitQ>M1GjnR_DRct*+d5U14Z=8XcZFp8C}XF3QddbqSIDUX(^x^NKuB`gUB^J<~$mMdPvmtQxlahLL2rfs9-wa z;K&(R8#w9*lu8V1)(-Z2ejsZEKx$i zppjcoM$E~#GVc^ZLOZq|w~)ebH-?i1R-l7_4XSfTJe$L#$XTc%FzU4zqRuSK$#=L~ zslB8WtKP&3C5!Jcp0nD~i$&HYQ{Wgo;lq66Ows;d?J4QaH_Xq_yc}YJ(oZ9#n$B|l z)8Q4*WT3P~_O{A($LIn2=_@)eFH3QKt%XYL`T#h#4;^jNv|$aYcXtyhtP#%7LPa z4GZ6pJvk8q+_}ql1_!JRBn{!dO;aO#${*+1hhj0v%%6{W`Gy7Dr0p-Iz1DjaENRDW z(>3Jtz0loi}6ZlK}FWk@?tLeX5S}utnwN$9pbpl0&~+Ha)7c(BXLn<)JEkOV>Gsf zusEB%^|e$cFF3?1%M82Ao=<*$ZMYe7A>nbIXzn<7-`U2!BY5uqX^Ex}O1YeEYO6B~ zxKVz+p3{J8QdEFowo8e52@-|!mko@DVfI|^!nY-1ByhmU+eUV_4~KTrVKFA?W?~kd zS?uu(M}jiH(uT>xMG>Iuzzl97AYkU9GC?#v5fMYs34soIdXzxl=eYHXj;s!C8DzOo z4sKTZQPctGi%iIHqr*`T5Ncs8RJQM&_>wMQMdwauOKYX6D$v8znYQ9zL#Fy?ul<$5!bQ)H$&x+90Y(Bvc8l!Wdgvai(_0!4l7b4N@??52KN1KJ?f9ow*$ma z=ii2wj;#|aP42u2)+Eik-n->-C&u{Ob()`^wJ*MH%vr>?qj+Z7S0Nf$JRdF{Iudsq)~4rU-8Q$41# z;}`N>Sg5A{_BLoQ)nY-4n3Om4pvPe#kG$o!zgaA_3BxI#IK7((}VxA~YzJClZreH6elK*u%XV4UBY5h^B#k!dL)H}x=xhPd(M0ZlN!MCiA!=Pf` zXaEg1;_JEUouXTPMFNy9bP>rJ!=inM1K#0}yX%o>S*cdAUCr?A#HBJOSU^pU<-%FJWYe@DawPdU<)vCj$eP6rVNitl;G6$mDex z>ZN7~lnv#+iCXKf_bai$SlNRmz;sXGP}yMUgYkB!xAVQ`C2RVqAP+L|w9AeVtTeHU zO_idtVl5;}ekp&1X#HFT7s=~A-O?x2#4LH?;0D7r>5!v>l&G13%ts?KL{c`6V?)=Z zENm<$sqg24=|Y9VVn zO$4;{MqV8rW-C_iLD=dzMBix+)9mRqGJSV3=!4U#_OSDtWoRWF9Mxrmg&jOlZ`k=P zmY$|qUu&Oqm!#W`uz~_QV|`bbq@8v>By_sHwMHTYa>hMC6f!3rC;ruq8|*%A5ymiL@B5tQ&ljW*^zPsp1)G57|+o5;&{N z+x9%!iB2Zw9q&h2$+@pl5JM&~T^{f-%xkx!;e(B!pS+uSys;AZIY81{mJoi!=L3j4#l-2JITjL+lBXIVv!u;NkMvc)*tOve@-nZk=A&+oDnRCQhpwa(~_(5Nq$%ek>GD zIB%eLGRdIaC%y?s?FxJu^wR)ThG1(kC!)cw{v>x9r&1<>erbxLBsjUVaS-L?NN_6h zQ+tL8(+=&*(_=ARJTO+V@J+!vd*U-kOqN&M6C83)zNW&`-H?mAHOg$p^Flaxc~7?| zh({AGxH~cT0BiyBDOFdvq<*%K7XyGiYlp_+9$G!$kP&$#;gON7hQd3$dHN9VHYD5d z7pW{8+%doWOJp1JOwhkC=N#2CJMz8!%vcXK=_{KO&nD5mJ=DI@UH zhc|xk`l&BG%E7Z$=hUBFvCcpv9p8ws25@A=B$@^7j3H|>ptOWn7_cN%0mPm%255=| zv_(Sv4c_vBd(DHOrQ_;loSOlf2}_~)z4)-wnJ^5ri$~kxaR7zRv3(P|H#d&4Bh5;3 zQfVVaS1{|ETJ020Ye!I|HS$0uIrc>1Brp`L5{<4t(qQ$o()_kTLWzz)40AS*9@FaR z;#+!m0ObxWxVj20mHR+c!3Ye6Jn&YwsM(j*0)Y;69gg*L7$FmnbrWLltS5+7)kbuP z#%vWcVx+TB;f*(PPdE^umOgVFs-c1ZOBG-rm5!tNdgYON#F^`@4P9$S5*&TjeUixX zCUAv_I6(lpw&IOPld(Q(ctOHXD>9Y<*x>8+-+YA3YZVfnQUVs(CYo?4fbG6<8KDC> zTVJ0BKebz*{_xZ(ncA}PL4k$sI$EfEjcz5LQcGGNFq00xUaB-2H1?#+fsmkVjNTL;kP(OqZ#wgM9i*&#v|*J?1eM)bDAw>62IRtw`H1c(ptJPSq5E znEGu3bjFySZGL!bf1n8a_|(vFYHqgtQKbW`=|&PQkI!Kp|v(&>^R zT@;vzcE#jfiU%ff+U-aiK6c~|T|BfkL-cL@%Gb4;QdA^Yhe6L|+LisEWKuQpfJSTw zT2hhh`E7IOjro`o0KXBzGzPa_s^5tP?Ysb4L+JpJs$3gTK$9rmnD*|c0*W$6Pc~G6mgF=*o1&b}+4 zk;~H$6*R&yk|B?*lgt&Gv5@zIwIKnc9=?G*-W=H^Nuyf6w*9Erp9PrfN^zUbTdJZ& z9w<6^wbSc}r`DX9*I*K59vVyD9rDQ6w1Pqm5b(5eQEWd7g^;TO%yhS7$ISx4ca|Xi z;7D~OQF@Ur_Al9N&1C#RI;v?dvi#?#0@QUDfmIWyr$8834^3AvMc0hlZl;bqDJd_7 zdW-5U+39h@?jl5gBpiXQ#MltpuPDpo)$w6&olEK*QJ15Augm~N^d*kF$aOS_xp)G@ zcy|R*9IF8tBoukd>5CK#AefbF3Ea$JFgi56B!(v_2T$0zAT6xb$-Q} zDb>Uafap6SL|NkeCL<&`M}CH(qiluHhg(Q0kZ$L62eHzXC>|E9yq613QX4C;DgV!W zG()8_t<3O#uQo9Fwwuq)tash;mF0sydl$4ht$<`Qujq)bO@UU*;EXC53u`q?wpw97ACk6I8~7Nzl2*Ghl4#d(d_ zZ43C@x?YKp+44RakV6h?ZB+Hp^VWuxL}J}BV%j-$r5^6zbyt~TgQ%uu{mR_oMe@X%0wDYCF%fie~?`@n$P#; z%zr|cRMDRbKWO;!eDk=kC!z;S2&kK169Vc5>ODk>Wlnketb(g@UZx!AE{Uq{t4&j+ zvKm$%s&p7Y!u3qn_Q9$lD;Up1=C9NNnJhnwl*C_QGHVdu_Y-Au5{B@~im5+>`qM0A zL{(5m>L0WrBrHX^5BW;})glw zY3b&)p3(7#K!YuJ%@aY>PnK8aS;i_=*_tTmhLEC)}K$V7@yty)KV*c}pz;8k{

`m-OVQJckh6iU`B@1GDPsuEOmahPPpj5i7wCPa0lviMutj@rtFi58w(3 zn2`fmHl-#Wgmje|{L-Z6i{x4{36e2A;>vlT7zeBfRX%?fpr8M5@311dBf|}Wd6|DW zC;KOG7Bp?_&p?is|{`3XrlPIZ>9ZQ~P_ej>W*!5;dZ z-9NgZ;9BhI@PTonOVnY!wyQw9cf}0W+z77tQ;q$P-Ax=E$B7N{gfgTU+#9K@ViEJ~ zqL>@7NdV3}$bON=?tAdi4es77%cO#iHMg7ib861$gaa5V=u8RfIEf|LiG{o*OR?^bBa*n#jgy_X;TeV6fD7sXMh8Em@dz{C_27|SFr7|bX(Gk2 z#U=>6zc47@17wb~yfXmA{*5R+Fx_evx1bc_^9bcTYq?CdFa=6~Uc*xKQv3+#R`xFD zv|uCZ5HsQb@`q&Now3Y>C|c~I1bBEuz`hGNv!m8&|BCrN>{65*!WyrfpPGelkkA}p zKQ||%bX`$ZFh~6JGlASI;X8?!`a2k(O0j^k@!|0Ue{2ZZFK&fuzbo#8k<;j2LUzQg zVqp9-3Q|m44&tdXDbEKdUVw)BEOL}i#{g~$LqUEzOv*;DPM_rj#RmQ{Bva^lpnGq% z_Hld5=ZfF`s!ueiNT>JR$S6#cXc!bp_<5M<{j`j zh3SMTSn8QtcC?ak^;{!2|9)jiOp(1yCT5x=7nu>t=YddZsH;*qGv92+1v0Ld%_BKT zMG$brt5d-8>P3urKx0%t2D)bN#ZW+P5vMeLsPaNMD(J&Qv%knG9M^FDX6{pPk4>TG z2I%ZLci-0LX5o!!#~hm!Qc05MJO-B@DEGjJu68IY^WZy#4`CDQB^Y3GjK*%D3?Q!B z@9`Far?8Um_VJw_>2^R|QvC3_ZAu?3J>QjQI3MrFIUx_SN0PyKgt)n%h%lJFz{Fu0 z`PwQ~tv67NOiPg#+DK(toN?W#6uAon7#LZf3|0^ptyMdZ!JDf+%Z4(CG|g(s`wDjG zSum<6gA>`nlaY5xHU)K%i@T>W7Pp}mphxWXc&1Og{S`JJfj?(^!V!i!QOZVZ2{2d9 ziLx}a3xPFc|Lpz+OcC~hgE1+%&W{^{+x*p5{-;@4OOl(%gGO!}x(#r2i%gGcj40#; z<#OZBUG#MgplF6!LPcrP6P!}T2-+G}{pTu1$}05ru?%sYk1$&Ziq7IuJge~HdB(32 zh7RY{BB%duL_c)p1qcv4?U=IGTZx5fk}Ca>5o- z;qLs&u1bC@j-gBMcZIVibVi$xNl_J-g@Lx%KCaRipuj{kIfEUnI5I~IxeI6U(B-5c zx2x#31jWCnCJ2fZx(bx(EA z9xWvikm8&J%>q+LgDndyCDQ6dne{3`tpuO?q4pR~92r#RdP+$!_?o`FM+irL9>S8V8OPCcgxlVt*Jy<#LJ9L)^rPoDpM}5qOvCKlfl@Fy6RfZnq70Su_&KIwny2(bixD>50b#71}m5PgQ!7m-DQfp7?)>b~OR z7_K`cbCEDadadO>Hi<8V6Y$A04mOtaT&Iu~YftJ?I8f86zf&}7WBYZ_M)fJ+QKY^E6SG>g-eRsdkAU=?dV4hb6R+J4= zLbjgy{m%cBT&-JIwPU7gyI*neP8@t-7th$P3uD=L0x*+{0;0?D{$?b-8tM z$xL~u3cd0SMKVNRTW@lBe5YxQBCzJH-E#ln9^ZwYHTbfAM?Ngl8{tSpv_Ykmo`C z=R;GAX;^b4ha+m@=v@63ywvM&pnP(N3xcQ23UogA1sIM7LjfAd=i7i|}>}8Eu ztDB@XrH3Gy{)$Af(iCqliSS5s6tY8o5j=tom~UxOzo8KC6qChB>hN@Rf3ED;ulkfl zZ+OkeD|w$4KU~2B);k?2LlqSokX`Y4Y+ihjWGOlvgRflGWM}Lcxz*RM>9AuQdE@M> z44V~@u8B8U)7pO&a$vd__RbaiBL-vN!@wzy9C-ktu9f+2@{ML&bLRUP?GhaHX->?> z-WLG|$^Y&6Gr3R9maR+kRJ3|A0=qaZ-?^>73&MeU9WN$&B z;C;-e2n99F7Zx5z^XNp(=)9)YHaIx#(pT-52s%o0BLS9rnT0O_TJ^Zkvt@2{u;mYr zmAg4vt2<$APexYh3nVc10rdB7IjX9bf}w1d4RMq9pnt>)Vhrb$k-@<*Fz2>jkBpG&`$neCebpEVz(z` zqlQiiG#=`RMF`lD)zUT;iBLK+qvW)el|!k&Dz?xJ^+(=qE35s0vcI!o#j$izS5C#} zx5T@x#sS${AZh&I;o+u0QFM?6y$0gJ-2{)K4nANBiR}>wa;wD(4&!lJgkh8)d`Wpe zFLywWlfOgLAfz!G&wS={ldH46MHAhtSY)hzovtbj*P+>aJZz8EL~AA=FkI2XlS&s# zo*5>eP;q^QWnz#Fy~57x7)Eu$bCAj5z)%LOwpVrR6W=E&DyWE=G7STf4ok#@u$Vyx zyTDYb5wwLU1jZPYdkZlaTW<+OJm!FC!AvZERZGiCXTLO zGLF}(1xagi2!-33aNIW}^af4ZRgN!oYFw2B1Klr3UDWkM6>-8Co?8y5uV|@@uC?pB zX!0Q+LQ%*~jJ3Hx)2j3R1$!8GgwcPbin#W=LChTx4sZeo<#((f{}z(%mi0npi%p^N z(J^7EaB+mM=5p=_wGSsLgKI+^!DqTI6jSk&Y4MX%0H4v(IfL@DzT=M*{56+TMjW1w zFN>(e8((5w4p3G9sBh6$97<-4m$4~?3St@|B_qf>B(e|FOC1i*$p&tHsEtW%shtV* zlq*@v!UHHfs-9ycicDbV$1X=Lq>#JOK3Y1mW&E?jIt@pHn;2ACFjk%0N4Y zl#K_+Yg1$%GMl-FWzGNm*7v$K9IRdI6s2eM>MLtmg?4z^#8=$niGsrhQSttgMyrfP z@h^=ssO#=gv098{XMj;%ZaDapG^=P{G;4vqSKYN!1NMAX3lkG^oTtPFHVi{rEB^SA zJ3F*9;6Q}Ihlh<}=2LlDK&2w)L-=b+#3y-C>_=C*{y;(^{&axAOd8_2l&e~9`(9VT zhl+Z|*{ifSqUJX7%47Bc9M^>0djiOOA{B&AUvg*}529E#Xy(`p_0*gHN;L14@;FA? zd-#$hlC;cjn7nLl>;!fb>=T|qW1Tqn@a)4WY!Wk`fkrq|2`l_SpL_=e@#KX6GuY>p zanS^f|AhX1b#HnI`EdV(AJziWnrV45WZ?JhNd!C;>jQ}_jGz?kU; zR0H;8NC;3DBiPLZlmfw={{#_9ga+GEY|Ss3IP9XiMcH0VS7`z*;{G?9L*cz=UYQq> z%y_oaaP`r}|7xto1*uz2kyIK0jG`L%>ko1_q7xC2(MZOm|H|ITQ5i@dGUOw>w%aVy zvmpyweUYC$T*179ngaEG*A3yQP$ZysN-pK3v5)| zK~E;e``3q6EFc6<;6AKPKQ?MngE8Vd$4;;jso;;&IiOBoX3STd&e};iC9(!9^GM+= ze{kK53>5(!Gt1GY&nNhE%^-{D`3K=)@tdtZUkreP_r=D{0B@ajKR7j~uRR)%x4&xO zvg`A#HU@bmw3w^9$qVrRf8PBu%?;hOj? z3KX1X7v&^>6LP@{yW^nG0uKNT2Z{tc!^6B3K8r5sOCq||trqiK>wRLo$AX5{Imfu+|`?DC@)r_XrMvaqM*lw{xqS3&W1J+9SL|?e;}tyd-c`) z=SF$=&z%GugkTiWAxzauq@e`er8BRG(YRXpYmChe7Ceg_KRV3ZdA(#cVZ+I8F{YC8 zl!SX;bz|J7c8ffD>d?H(Q=`QRV-nw`DP&&}ME2uD>khxu$#MKf8n@kN6b6&_Z;AbBf5*uxiRSK%0V&!X7xW#ESSbMa ziCsrGaPU`luRtY}Q;!9hkYvKnwc5Dj?^NeBV}Z29UWvJlS{cdD@21xnONDYS5|e3o zTj_obbI2KumLg?ZnqEJErKwS5-A3WjvLgFsaTDqLdzws{EzH9uFio*cC$vi(KXEr} zEzMbR{y$Y;KN+vA!azhxuC1D8#ekP{;?lWS*_X+kX(Z`O*~*6kYzC0Oav?8VDS`=g z3*TQTskcL|EMK2VA1GHZ*)YSoEXWHOlBgpH#Yi*+y|6zp4YSS0C<(aJqP8+St}W&K zx&Ka)V@H90!E7%Xi)YQJ)Qa5ghxfc6Sc(`Me%sbzrW=5)22FBL!4s; zd<~_gUfhQ0TBtLkCLLsDi|kjYPuxyh5$=I+ZIh}mJNtZiXhc;`XTM?{do;H`E5(Qt z_^?5jitEgy7ZIZXQR1PMbGtODxo3!l=RCf*xe#B=?dr_MCNIxbnc!|c+@K+!(K$@m zBdeS9(~IiQ7E@qn=q_xh#e0XXNPJBJ06*pc^t+Mo80v33n!_1SU8o-969If6fQ9c~ z=sodd$-|hqOBBSl&nO0XrY*?Wx4TWMyqaVg<#b(c^lo;9vK}=bO}Joem`aH-DwM=^ z9^VFWIq?Ituv3*zKNQs{Zi%ikE>bc`rekH#1QcC09frORGwoPo-XXOHX!2onpX!ni7hsspZP}qeqDM}6U zIGDnYh6R9gKC5SL01FOYR0N%w5h%(isqc8Lqqp`UB&ao8b>&c~DdSjvt^^>7LCYQ_ zwy3m#Pq>V~3jmD$hjMssdO?5@e_BC?EvDFvv|D3A(7zCXzMuentzE1_Z)PkY1x}iy zhp${Xy;-90|11L5Sh`q1tsT66B1lHggAd;&4Gi}rcAm;%W<+~x3 zUticKpGryzqL`BM3-3rrX}Z+7x&G1QWtczyAKv$`b4PPe?k`Ne`ZYhcM$Io zEY{?cv!;5O-@B^gfT{`(xsd?|-bR{Xc9%S}_k3S4#qtau}i&=z zVfU?%R0m^0VcR`RQU^_lzbzNx>d*A`w=??2I^+Xr4nDlCzNx;9H3w3@7(E<+2%$)B za-HOA@hu+(R-x@uTMX+9fMqz3v%TyeJraKn0$LynyX+{?*a>bvn0cROvi_BH_#HeM zpIDZv^{_ynZ2Y`epnfTiYnNNT{2!KY>yEVZ^fgDjI*>{nFzZJ@2vU&xzDg+lU3#{S za$hz)Lt(s=EGr6J4u8!l?cP|op|{DgBD(3td&YFja&X?V^z^CigU^0;Jqh22i@(%Q z#{1IJn*~y|?7o`Fn(imFXc)_IXtn5?heUe-vYk1y?MykWV{C$mvyeT7 zE>iKGIDT0(sP5lzinvreq@Py-A`7FN(C(r`Q3yR{n+DqsuQl3GjC&s$LputoU%3et z@HEzMsbxFt_N;+KpM{^6`^R_ex5MY+H(YlWS9-NSW(-sfIatnga8QMinK%0$o9#hK zoQKR#5#b9x#f~)zZSDmr>H(Jf4*8m4`RdRW3@`IVFTbgtZ|j5I8tJw{g3xCw^E}5o zYUt3kq1~Es?kqTMmQ0hKoYpe+K0YG;ynzvTnLi;%XVeUcWnfQcgLh_kB`Zce=}P3R zLO$2c7-c)m z4ILEyqxT6c1bIhY_+l!O%^~#w+9ZnQ^ONkE#A3!qWHAL{f`8AKuX3+W=#Lh3(L&*u zq6*8-IKj@kZd#rCzG=8kvH4)K9C%P^#Tgth#LV36?>rH5j)~^^`svVDXvv=r5=?= z7@l+D52F zYUD?&W@~$GzPp&+F8*}>xP=A=iG!6Zes8t%n&Kdje$|L~#H`(k$m(X8*$rg9i*r6M zKR1s{NN>$FONu+3;dJ%iX9N+3d*8qvJIii$ z$_F2$`;Az7GJFFky`8cpWw(ddHYl+I2XHanb{j}YQXi$614elwsFkaI3t0wUp=0PT zPX^7vgJ;?rF=*JAe_nRaua@ToU zOEHG>a1~UEzja2TJCuQ+dt0fJM+gCo^sOxmVh;myu#$f!-t4Fn!|aE3dS_6ej+Nw0 zSQ4A?uG9hgPTc7DLM5~Zt-z#rD^|rLrQ3NSRMo5alO0L|5POpaj3JXbhzJ`%uP>!} z!Fz_vU_>nz6xmCZVMr`SON=&>_G~2-`-+maibV#s-tq zjXiEm>wQr(Kao4+9RS@1Jq=);*Ze;Ez3>*lol1;BK!-?`80hX6 z)C2yW8fd1;+J4ai zeQz=|$NeTEQ02G;U=6hM9YTp8hwdOyP(KQ^flz16;=J!@Tr5_}{#P}{g_wlkAMSYr zgD=AhcjNwZobg>jfyGzigxxaFqM%)7eastC=v2!0-7Ad8IE;E3#2W}8GnNd?{f@zm z*$qE~lDnX?TSCk%eD{7#9(cy1tWC4xP()1Phb5tNu|LL_+{pEq<3`SK8V0v(^Qp_c zZDat3m0aDJxa{Rz(Mof;H<^u2JFxoUgAx}9XA==dJYra@EcP<=T#jXFd^dA-PG?ez z5h)t8X4z^Tbl%8Xl(pspA?T;(f&f~KJ{n)E6kp^vd4Gw(3XV)La6iV}-A02Yu+Iet z^1k-g2WM^{WoHT9w=_>}1mwUJb=Vimr0*%we)!)irgle5MWXQTTe-|*C`|bbAC!{; zL|F*j*d1!^qOU@$R0Fc*WQ5c1Gi?m(yD8Cq)~5VbaU z9?zGob7Is?n{Hs(!Dz7a$?-o);0m$jmwh*0h93#}FO@G^WCebtG$?enqS}&t2a|5#+hO50@}K8?+eT@>={))SkY#^Ow8Fzk#wPBy_|$b zN`#^k%4SOV?r_{zBxLrb-=0U2C6j{?>=cPylQP7-Zkq%5a*e5KV}L zC8azG$$YFSzN(taF7U^^CFYFLQ;A45C9TQhu8)q}3MxzS7Y2dK1oDM7H-QrylK_Do zkOQ1uZClpNUhnP*N$w+*h)8w}ped3L^r|+Ggf%L-jd@B>4@jD(3QvW;%8)>CM?R$> zx>fSJkKr+(-esH>B}3rWaUNbJahAC8VQawjS1elN(Gk;N^jYMq{4{6gIbkSmY@9~y zVmUX*`MGb`ZsUb^c-CCuA`b+b+02<~l?EO~{~UG=fnOH9m)!6w4I`h{2Va7!6VwnV zlFUDh0QH0_;)WFDbLLQp4+2b+WGMba&fI|}J(x(_@EEyCrWdFL>$AzqS+pRd#fWSb zp4MiwPviEUo>-wkh1fa3MTc@cOfv#U`3Nh6wl?@C!n4r z+mWCZx}$5;LZf0mx5<2=*#hc2FuRSi|62hls>0Hu!ODbN$maoE<3wECz>+eXI1Uv? zOB`PtC8_;q?!X7d;#+bl&^1yqYU=u?oJ2;{xdqS6WG8T8pyJ6)@|-ArPD>QFAl#0; z*xlt7wV+;uaHKC6QWM5lqgpiQWK6(HJKw4Ll2e~g`KH%!6UidbQ|2PAXX}nF7&fH| z9+=Ec?!ruGM+>~iHwl*ojwmTZZ4;3t;e(sidAztw3rK*6G z5e&2Xi3B?l{O0LiP+)?tkiF=Gs;l##mC=wXJ@9$}qkR%b$|d5x;S-Z54OG$##%{Na z{AK%Oc)~fr=M~>=v+xP(EZB6Ih*3mF#+$!eS#iJYC6LBzTUqbrw9vvdR)e7PI?qMc z9Wz0OY+g3=ioCG;O#F5eFfu?mi!0WC1<#8`E;q_2A1q=X+V~-|%u}Kw`iSZv!kdjK zB%~=8)u#(V22RYjc(88k7%1r0xFmSS36;!Fxa9s|{C|LLte7wc zBIQNLbVM-fCmFhq#-|~qoI5rmj9XhGo{(RtFp6q0;<;5Q)wnCz9?#4BM=JsR6k!>n z`fy-55$3@bO#qOaN!eQ{&ttxC0~xV$PMOa2(<4)|K$wm1xIa#7n;S?+t2Y25R!3$1 zdk{vkc$GY4mEcwdL?^#gVi;T#?dfJprjAU$4Y5_}%E3s5a97<}lNT4adXylSHmltJ z=_rHHjtO!*cQeU$y@TQ1D0LMHd%(xx5ib;PyXIv+%XjV#4vozz6*>(+?~P*pwAs=GxA1A)3e?FM`C% zLUO)V1soabLk&PlP!zG3_TqZ{2pR|%(9IPSRI(CKNRu!zi1dOYajnNYf1~>F%F)dX zCc?nZ>QbZi`w={`3OfFPqilO96)bLlbD%U*egky@29rI8T(%0Nml-po9b6G|@IbtK zMf@ zMHNI8y*Yg=i)R$9VyQ+y)s1k+#6A%iY`#4zzH45KrCJfiv2wUzGpbqcN^C=|``sD_ zhm|i3i8iI;hSiNr`k7+oa-X7oN2p3dtd1B|@DYo65$ImG zwaB2jh|k9xI>Pcdresd2fZQBtd4h+uBwx z^$hYR(Uk^c0+TJY{giwRKnNkR)V_w4Tq^r@i{i-B9Q4k4k}}xB%81;cqDaN^wwP=$ z_^GFp)g8~7l^Z)ztIw}Qy*OtmKL&t35t*TfQ{n70ng}h`hc*QzgcN+3{p?W48U~#N zLFck5M}R&5Q_aEF4V?`FSk+)fa2!yhd*}HxAQIcWJ&m)|f`kdIPj!JmI&~tU4TM+h z(A3UvM9`8n6+JCHkv2JKc_!rQ4DeX*2sfDnKnRZPFo z6gJpBJAP{9?c@Eldw`{4X-^Mj4f=?(*$4pltAO~V=`^NMw(Mdl4 z>JhDnUhhY`OR@0br{{{rMEAvrw-xMo#yxdo%` z02i$KYh*Bso#aHqSI+9f#;^hbD|fcNw2{|yhB$W9iumlX^8DV0_P$!WoRm#Rym6VO zF3@?T)vD#GB{zK%-(MB%NcBe{R*u97;EX@6s*CW~f54O5oIgUoARWLAN1b{~vFBUC2l|F1l0{_14Y7PousvmVfOs3Xjuuwh z|AP#5oW`bmi3`TvRcP>b8+a3CJe4jT+F$@~TC}rcnz;sko#fQ%F03viY%~2l{^>lL zm@P7QuLEAlZH&W+IX>u>?7~20)PNoJhs26^v-D3F7|UVM87uaLt%rM=yJdG5cQn0c zbcEiuMB<>ftD?5-1Z)mn8KI7^zvvY%@*uQXk-kLlwC|moZ!SY{6r&jPsWynTqHx=i zvIvt)o^ZcY*l6!lD~0B{FpdykwX#}L%d~B=&SSoKSjUmyUg`7F6swfX%_=QK;Q5yRB1Do+@!cN9K5lv)}%T8ON9xp*1IlM*sr#2 z3PAl=?;3>HC{3%4N_^X>#Ay<1?Dy*(2J84YEWj~ z*y@F5D&ST+vjZPLShxZJJB_<+8lI3omNS{D2izbuoiWCkMow4*uX$|xM!kCO@n?HB zRQ6ZNTycN4wiAaYL#S4zjw{#x=F~dX?@Xi#bmQn&RSFFmSv1xq2aX&GJ~Vs878THw zl>q}oa>F%fac=16$*#Bt_%GqB8Y%e44WVzF;9`vcCz!>##yCwEMx|cg;HMRA*=eVx zyxU>XPb^gh4h6`_R+mQGEs7qy*Byw6(b-L<#uJY|9f7t9Fj3X6HJ(5X;?>=Vd%$r% z1dGR)yl~B*j`YYI_88kO7dY*(>v#zL!wUn8Pg@gL6ol+n2z6CS_i|M^6f+5>D0FsA z>ajEqT<9x~h^t`93fmOzLCt_WX3b`m24bbmE+jB^GO_!M6Vl36q2@#~1j4=B+Y|^? zB=0cyemn5KH3Uwv#QOwu7@c$Alf~HWLN>wVIvwpQD@di8=k)>FWddEVoe1GZ`oCD@ zdgQo0Er*w8(1&$om3&zC?-YQGHA~u)nBX2==d~|Nm8?=LxmL-78(ldoQm$2IU$w>8 z;W;g(p>v2^##v^?c#ta{pPFSVq#R!sqbAC}wu3PZB*gjLDEx~(5day-vaWd6A$C&C zh#B8T2`KPZ)x8^@=+k)yCGD+{6I^%C=uodK_zNkdTHtB8RvW~0dXPFz^8XLi z&gMmTVF~(Uf^3>#Vb}hC-Hu?@_4bIdfj}&@U+F-tJTlOTO)PYZObC}&f07!p!W{lV z-vxdfgH0C7{XJRW+R=t*qYQpx*6qh0%(OC2vqO8!<}5YTo$JEmY?Ct}tm%G^sYptf@lwZFvSFQANLu7Z7YMd1)jDsmc_xcq%#nB=TDGo+Jg)D5ywNm+UR@ zJ^v&Z5sm~(B1v4!TPX@Suf2>QB1rVy3NCxcMkE_k<`c_j91tjKeMXF+~5)bv7j!xF08>%3tVwDFfKx{Oc{FX11v=`koDiO+0;G5DZw5W7^gE+CZSvrg3d2!Fe(C>GDk^1Fu;Y)0t6FOBopsR z%oqa!%c8rf_(vw{X;ls(1V+S;o&s3^o50zSvZ*khsWhO#QQHh1m}vzkSvps}u|;8vs^7slVbt&*GZdGTQJ~CssRZUeK&19E%#HSK2K3rKL;cCCNoqEff#bF(QND z(c<($@eX!o*y@rn&1ENWyNX%*khatO%3iN5BN$w17|Iqlzw(}0n_9^;U)~GzK1=wd ztA&fSK)ht6X}jPFm+Me~eX;-a!Z(h6VR8icRR85vkUB?Cu19cTxC5nf72>z06G1q(#cp7qoek(ztcao${&M3-TtST z9`vTdfAO<45SqXZDEyp{Gerx6K^+gr2t3PyO0_|4vi0yPbI{07hKsG-OR8)CEb zw6P?hiRijQGij=q^%r7p27Efe_isaB3`-9Io-o$Ph$|hF86U6Yzq3)Il?ipN#j*$nD;s2GZW?@r;%k27VO*bY<0~H0xAd*%Csu-6QR5(+KjoP z5tU~+gJ_M2JvU+~G(-}VDiqoXgMw0Vs$5lEd?H*%FRmpIj5n8a&>U<~*4*w-hw+?( zK*aal4I=qVY{Ud#=vqZODB~AfKuXy{Ha!iZxnV<9G3tX23x&P}^Ga|9{{xdNXZz%k z-v3_r>K(_AisepnoW_aB(k&hoR!^n*>PDEsmG#0?>)8%PqKaNB$>-% z({Zm^>CdV0@cLc$ZNX&q^= z`h1MHyHqz!eYLpYfWYcrM_SW9#`I~dIBr%8k+y2&9Yk(Jo;5uwfov+b(SKYKTg;<; zaNA+!)i&Np2>Xffo2A}}|1GeSF+3XkR%k~r-+e%x&c}zL?mCvQ(}JV!#nhm8>N-f+)V16${+&5diioY0FePt1 z&NTv$6V7TG;P@GzIQx7poqwnOfiYVA7~x~dc(BbDy`XT*&Z#+ZqT^dg zeD$E1&gc#|G?uY!<#|+Xy_*x1Fm?1YYai`Ao-*^sSsQm(aYqRHDJU()<4G$Q4;x4d zF+RGA>I@zEy@|FphoDz!m-n49&e^|+2L==w`cdVI$k-dzkr!U|E~b=Oz6b(wr&**3Qeg>= zohGXx)Y$PG?FPN+;V|euq#2GPR)jy(g(EZy#A35y^TS_Xar`K$p^P?;Y4Pv~#P|376lb8XV|lC3^E?}^O} zF6cGcC))F0oOm)-g!hewRz?+SjCoQ;HP6t}98{)) z=;!wv1MdW=mirP96y)2wLZ3k%9zOSt#^-Ai95zhmVLLy7=vg%s&cK8iA-*a;93|)_ z+?q$QVwIu5>wts%5jYw{%h(0;dofdg3y)96G#>M*kmD6@E&-Y(CN^tR5&>A8T2Tj$ z_>_hFM6<0AH%<%sXPhVQX>i*(W$I|DFlk?GU0atvxX;~KR_CVdBdDp)QL!;VTetN= z9oIG>I{gMqck@B%kmm;NZ=s?!08=Tyl5iK;ZvU+v4$r>H)W7mUL3BK9mV<;nse}j0 zl3Xjkha%DaW+elP5;YQTH-M;YH@{!??ksv}rN<>B*nX>Jz847}4e7lL4ZMXwGry*> zoLF(qfzJf!z53}gWiQs?xbJZ>70_cjYrRfzBG(<&kgErzM=k^<6y9ucAx0_60`$Al zyI)k(Y?(oR`aAqnJrgmYx;mg5 zP7}?#>NWVZup*H^Dw79Oq{L?X1K(ZYmkn}Q6p}MT({^l>bk?X3UBbSjnO}Y_FZ83n zAq)kxt>~~Ccf4h08~SL26a-OvPsGei9T8UL(9E%E z7$V@7dhqr@fAl83-BLx^IAr2ZD$~9f*dX17RN`H@5Kr(^_#o>j8AHjHwB-{MgM#;n z;(3Rd&q)&@oyn}}@X6{yOi|{+IbRbA+I+$gO`1a*Q;77ZX}|_JMyDJKd$kdROvIyu z@sAKZVzI#B`MMXu)a3@HU3c1U#-gi_(LOTD=#F?h^rE;^>cZ_Z&~@3^QC#46>ce3N z4U4g4-pttLRA4OWa)4Ib{Juu(33V?akZO_3my-%ak;qp$1XMo`BBGq2L=9I5o~@O` z2Mm@|9BHtqg&qnmP2>!4IyH6imSSK*WxY`$eE2FknADOa{%+ugsnbk#FDq!@$O#z; zXKq5KCKS}|c3VvMnOJ%0f(A=@vt1F91ndd@nyHm$gtd`rDHQ261krdO9TNfnX-q&8 z(g4V3AfjX?ft`nLz!q4_JD)p@%NFy#zWc_-H`;E5^FpWjB_a3w&Kv#qG=xY6tCcp& zti4?+h!>2A7&vu6OxJaD=|4;OoQ5IPv&p!RXMg zgGopBx9fiBoOrbMYj_1=eJBusb@$!fxixBnBmv%%gxGn8RA1p9Q(QwktW->Ae5~K; zzwDJOdu4ZTDRKuM2*3vz2xP1V8$=B!tV(TTsNT#~o`5SALFIFiDZ-l>^(acWhsr#O z-*sdDoURx;bwi+q#*Q2B6>X=`h;7)$qLepm2fB`n9xNQ7HLTX>Vp%jA($&cpuRo?9 z9M_Eh5uxx(RP#V#j7i&Q-f{H!G4xj)$51Ggb9Irgv6C;g^Fe1S6SCZ?o<<+w>utp- z9yLp|S(KC(s${HMulOEa6eDsm78AQjmUhu65_ORaKgvQ;s4Y}!*4V)sjWwIiL~$mT zN*`8%e8gsx-qM^utSWOBd79IkZzygK%cItPhnC8~j-ozU=k!71{Z#Xt-kfGpO@u=# zynv14K2H6CvUk5P6Ld*TBh-0PzoGZsWs|s3`CwzFI@E|)Il zip6C3g};~k>2nT+h>envPFl!-**CP|u~AH>QtAIZZ&GYw?|YxW!G*E6P(VpY zCoN?3029NyLOX>M+!dPOI_m@qiiilP!vPnghZZFCTHB1hQ-Felk#T~p?YnZ@ScP3^ zT^9?u%dw2@&G~d?C^w3eC2vfW8KvmH;H|tBufq$T*8z@~CjR&;8LZu!{VE*YnJQfe z1&7knIxc{26+GtZ#=t%+ZNZWORqx5tTHP8vCO$Ne*LAb{o!PNsZKqdTyBG;LyR?|} z#;QG>y%i4!4o>!l{Kmkpi}6%msykI!ebq2LOQw?@6T7lIb7iqujO^Z+8@n(Uc3&>n zm3bR39v1}Ty-%6U<+awO!kO6VzPe7;t)w+9HDOtv%2HPsmrC~JYOS?oI;pE_tMzh~ zF?N;VO4^Aa$56sUa{#8DzpR>@{k1wX#~c84ox}LshYHF|g8W3eK+s zep2QOZ6IIIYV_}#+G<1DZ3{S*+)10ZDn;aaQx$ih3wG5UAq&?Z)F9MU9isaT)-e2X ziKKpGck|;K^0ThKtQFhPKn)_QwY6BP&8Vu~vMi>7@!qFB-_t4h&M;d%(2AVDaZHm_ zXDfSy!|e-e4ySWC=9{&~mUeI+|EZ9GLwSyaIY@AL=yGU-!{L%~V~$n0 z-xY}S@o+fa`E_0Q*W-jWIQ`CukU8LpYntD|rj7E+I;$w_;&fy6{1f0uNFlO;dGE{k3*72Rrm!H9o&L+G2`|hixETjK->JHa4ZiiYU@lGq9Y*z-dtw zMe+V9%D7pS7`_c_2~?yw#jclhktEH=6lBl?BAj#|#R?kX-l(~O2AC5rkiq461f7l1 zvS`bHjMeYPVV`H|F-dBk-S>Uyb>f5Gt-l&Sj@BRu zf*j6y+M2B&8J1HbS*giEuI4}L*_{rwd+`4M-YdW7%$WAS8g{?6tQnw}9`*P67$JhX ztu*_lX`1HM<`zVv4~X+YkS6H)&V!!c9WH14S!-7~RTVNpAN<|EHzOsbW`=!X-@`ba zgPxe6C(wBnSF0-M01y!}xOt%Irw??hTrrvb8t;5`B<|1G+ zb#(O4j0JI7TuWWGuw0e`R?xxEu)z-ffDeoUold_c$;mbVk%H@F>+Mt3mD=~!Mgv;4 zfg)8}SV{7ckFk9sthFG%??10%RF#6VlvRv(@nhUC2$~uUpCs%h%x!!ZNcjN*ruA4- zW-WQC5-P8HMtB^s8dGC3Zd8s>GM;b)R1znwlKs*M?o^ymM-vA`@s1mueY6f0e!X4J zrizhs_vgHAwz(v^tEi7XvU?p1ZF*z3~I<IcM3QTqK zR`qKYU*w6$ldLv8hV^R|mSsQ3xA`2rCQ6*ZND+%5-QiP`MS%uqtHn z=$_+3Phi602tpZbmjl0mFfW!<$iFZKdxu|M$1nP;UF#W%$s1Yra%8nPYYPAd>I9q* zCf&#L7AFVi13GUlc-Wyt)miDRZim%r>9}+{FCCaiOs4|}8^`4kK?rvI_;@0jvzf>y z{r7cT(81Dy0jGn->ENKC!YIwQj1`*&VTPlE4w@V^S8dyFsFbQ!PJxSI-jq?4DpZMj z!GVk6iNUK~V`uAMuvZx)hZD?|B0ns)QtfG{ES7qa+Qu@io>ZNtUDBkjUo-szJDn70 zJAFPKsndVDKHpm80dfHq?VRf(-j8#sb>2OTV$b9DS|B}hAySS25e<#C2cdC)3=)Jz zH&^pcM_dnqMUX#7DA(btfucOl2Tn|V;-v09Y4;ekLn z#psE%4C@%&)3*cBzYX=ZNzskdAAo40dqM3FnmWEd$KW zecLcQh{0)eo*^O-knbRCa=6yE!$IC-%rP+t=xt(u&yxdkWkcZct?je-d4AW$bRZEP zft)`Yy*C==Ok(^Uir*vOCfWdj%%GjM(ZqgdxL@+E&E{rrR7f}O%JUPHqW>hUF}7ta zGrKgmhCQ`QyRtijp}8~O431yp4;#rf-6@p5Z(m zpO`-$J;oSCyLUhqUu*8sV(LLbr}f~Y{QU<cN&h1L56od)J3r;;ThPvF&YI&| zgHrxjo7{t6>yAC?Yn*x>4gBzhSnln~GQ_!R5;}Jzs5PTFx@uM7b4I=;4Lg2?J zc*__+YUKGcMPufd=#I{RYW+5rbLV_BmNWiS<4;|WNf6d&*Z6WyLVu)5Q{3;{;W6&t z4kRDXD8?Q25|j%5$N zbN-&BbCHDezWkntN5A*H5ufLKFMl?t^dqGo!_!O9F_ToA_#O5%r;B+e6X(zEasKqW z7)m@(k$XDmFK4tzUvD>7lQ-ILym@N}fI5_I{uFyU7>CM3dQbiz)w_A{kO%T3NbkJ` z@7Vm{CTML}01@}6AB8)5Fr~6%oCT2lImrKy`jhe&zt>vr=B1A-fTA5uI|M|b{Gbrz#ot?V zyt&9xka(UQ1$Fd4MSJ=k6hy=zk9H$K9@LHKFJ=(lN1cECXoR1GKR!IzlRfyuiy-|u z#6^#B=tUTRhkh}1>ahq6+9ywkhn!v7NU@6>i#(GY49B)91)oQ}jT%IVIvn!`&Ke;` z0_^N3!^>XHfvv;%+q<4#35gGUrg2tN%HB|MDSzO&&-R>dQuT z4G>|0s-o+7BQ?7m_X2At9ee2*96x~FF6=5kIDEF6O0{OjEQVwL@4gjFr$E%lVgoJ5 zWibS^818+ZcLeVZ+^KK}vgjM(TUNeg*Y!$^e$g+z`fQ%|>`ZIgouR=s+vdc<4Oe=Q zlWu)B?b6aQEe5S;`sF?iP72$%>N@z@wC#RelH+bSawd!kL&L67m@r&#HnulzuXla# zeDj!t6JLyZOyOqn8%-xE1qfmY>#8)gTPpLYeK$6mB|@oSE=pZ4^07G0l4yYT3~BIN<{{8+zIst##8!Z*4=~NCQweg zXcd+&dN?B3GAbj1!~^6+R2JWLqf0eD z3UV-kkN?sCsC%UFw|J7rU-BLQ@n9ue}?(S*z~9ow@#o3WX7e;|!l|C+kdh7Bs!`)xfF7CuXnQy~{^;?29US*7P0$UCv- z6Kf}tX1$Rm+BS<;MT<$a5oz|nZqqs&Vxg;IziFGN=dox`wx)5bb%A~Fz6rQjv84bt z!-Dtw`V)5DmFCL0MveP@O^uC8t%gcj)V-EvFUz_#09$}ffnmL=Y+{Hz4{VFoaob{9 zuI{_o9Baq%zPAQ7X&plS%W1ua|yO;>^Y2c5D3v^$nd4Q?!22ANEL%bpcPPxU8C&$?T$p&+ zq2wcJv003WhT>kj32|q~cR_`=z?#kf74>DB-SM3TiNtRw&o@`*HScLbsxQ3O}T0d#` zCQA|HT5~pe$Ug3!_Z~^^lQT(738W;CFmGf4Sew`vb|7gGRo|u#+|H=pNI| zU#pqPuVx=f^D8eqntWTy$Kh|XYh62K>5X3v!!qZ+Ih))iAM5Lq978eWO;{TQ$H~Tf z{-Dz`g&CAwqzpOQ!bmoXjbcVJyE19)3S$?3ab%1FaH$kT{?nwf+;JunjqGaF1=HfN zOqeyh3RAX;%>`O@sj72tym$W0LYc_lXjj!$MKDz~8u2`u#YQ1j2Re&bEh3S7-okrt zjIGCY_CtS$LT^1LxKa^3i+;`>V{FrFGFt$JEf*ed;xXeK#aS}D#alc_Oy+#&^#J+{ zV0Y{X8J((ma`hLgyH+>-MFuVr7?GFA3#z12N^w;PFJ9VHkhe}mu)Q$`_da>?H;%H+ zaM*C{u{;j;mgQKFeF&Ve}py$N`5;URVyJZ zAuS;}Vz{&QY1&Z-!26f+``>mOw{dG*wN$HCY{a5sm0Gx!lKqZ;6XoOK9v|Hl0OSse z;Ep!UM=|;D(tB1!qy{20*=&0u31mfx$XFU-A#;^f<^U6N3n_`%`b@;e&D0r6WCou^ zW+JnhP0yL#Vcn&_I!upsne|dTV7xaEJft^!96nlww=!lw=+FMQTCcHBP@%FgtBO1S zB8u-d(S!8{qw|8FxZoxpXm%iJ!D57$Qe%!Q3qe&9taJW+^dale9{hgFy$t0qqsh!@ zzV@~g4Nvr~&rwxoJ%q+zT?#!7nc*$&GDTb>FPXjdQWUv96BASltM=+-eXI0D&1EtP zwY0oP;V%63@`26}Z^`gh$Sl*0Vj?b*rqg=OBx7FB*kT!$h$Uk26U40s|3igkoz`nw zMlFvU=hmva6s2Ho)|JQKyQ;uWqjj2IyVhE3c`IgBHU>((LVIH(k?dM)t+g?WT`-dd z<0oiZFn+O--w69-tz*f&aeCqmwj{`ztM%6nq@0Yf-1{(-81Ir7=1$hIi}u3U*))t|1_VBQ(Dw8PdKdL(a%iY!ow+g&{LzSVs|8jUi$L&N+95 zoVPN6aTo4=$Xh%IcX5}?Tcg%u%IO1Hd|}6&E&j1*kMl8<$&}=nmsLsOTPoulU2RyaIvs1RwON~5uWax0%tP3m0D5a}x$Eu? zZEw1Jh9L?ByIV_@V`Xi|CdT-24Zl|LRJeOAmWOJ6Cy#FQYPq}dlZ_DGBVY&!(9pQ+ z?ARaee?nI@uNvdutZ@gt#%s8(hu%X;y^}gh>ZHH6vphrnLm^U0Doau)`4Hl#57!5> zj3Gf(wvXG*3swG30$Ew9v9aN9s>%yq#!4B<<@!*M)Q8POh4R~n?Zd|72Cs3OiN??v zROW^HM{5aPm|kJ$DxJper+9)3SRBg#d(s5<4(;|WO0X){gKm3|B+j7Vt*TaPgelO{|pEg+?Q_T^C}8|;X^1TB$6SckFa9&lFbLs zLL`QM%EqWj?9-lVMeXzH=PaGPCzLwbtM{^W`3Jyh2_*pV0w!h!0D#s$0l-IEFZf6a z#;K=LT7cp8nb$cB8LzXDq0sOmCvRoTXf0H=n+|fUq};S%k@75PQaTG76u23s(#LC; zNbMyxa&zI&LN(Gd!lFbYJtlQhCv}^hV$TryDnf!65O~pF1+v2X5YKy&(g=$dB;J>> zV38uV%JNl~FC&ja>7$ZAs)*6;G`f`|H%3z57cr7*btoS%f#Sp9nZ$bX|5Kyeqdsh% z%f;h;x-gyIR=G@A<(E(D-gRaCVuQWAY)4sNNAruSlkefSTQMIeCfvmiA2u>a2?=kJ zVv%D+RzlSfz5+(-HuyzsqYsqF$_gq_79%U6)(P55c>Y6n>behDH=;0fh33$&Fl3>! zt%k_MJM+ZOv8uY?8)Fr?B7G~;w|I@$cn!DRZ@KKvR`cgEo(#30!)5_4K?ETO#bM)|ZsGM_an8uIp+tZ0Ehn8}VM=%c<^@?yL8~00q}1 zT2S6h^TgdyTgAdGjD_(TpTQ*#f8$y+2wJdKDsQE&yeVx;D#|KwSwmwX`660Tw3||3 zuvqMh)pD`cTuGA5AMz0QFh$yNzun!kcCPo1UWr{VP@yy^421%f0{R3RLuVaIs~`s- z-_IX7a$CJs+qsia*2-F}tf>}jA*_oFHb?&Ohk#yTv?-giwA*=t6MzQ_E&v}HpqJte zACBGN;kb$p$F^{VXR;UvOEH~ThcQ+QMu`;MOnBlyK*_9R#5SABDfTiDs&q zV74^tE>71|&bE#@fgd7`PWRCnYO9 zJSizB7jW8%lI&V>((>4zFxwK<$2_edl(ShS`?b7cxvZaiazRT)1!ndd5FX{%$ywNebjMTA8NO-F4UNC8b(f;m_zj<|T69+-hs>R*-WVw~;6c zi|rMs$#5DJ6#V>ZTb9$9I!jFLp`M|dsu zcm1Jc+N{>Qp`1hADiu|hHs!5^1BXKX{>-3-4ARLZJvVrs_nybu9j!uH*0>a03@%t7 z7hc$C42lI#^iUZ}qXjFXgiCNJC>{tj8d+@d8^RtqQVz>Q87COAnZ{~hI z)_9GLo4oo9SxL%73B9`@lceT0HQa9}H`o{4R;}%LAuCH*I5;VjSB+uv+9fRIid-43 zeIYA}LCK2}6U`I(4IXwTnu(?)RiaXYx~mcttFHKr&-e_dp}5AbxK(%;RMSEv!1MWJqr7Fu!2eW zKpHeGpj9drD0aRfV6bs>qLFc|TZKwfVFP#)!3Syu!QMm$xRMCG&E4!O!;i;(J?{iA zT(+8aQ-=E&hkfw#E)G>U zvaPjNl(pXyxx3Yv`d0C zbQVkjyUvw#K@*hVCT@^(uu)^|ZBsZSWo2x`I2el-<5EeKtvrmqfA4x9iYwL~ z^_ayGW!saI)_&27TsED7BMy2 zZiuPceSh9lhBE2S6MazY3}oHakXC%i5IbsIPb|j;_>k=-$nniqtuF-6T7_I8? zENWKy&)b@0LU!4uLAB*g2`~Xn;=%eJf+wc-6kvfYTN|4p%AHUPF^S?eQKfw2nFMBY zYuo$#%Q|6}8sUv0IQk?o70~G-U3}E14P@s{mM}Wsc;u8hpuJyu}$Onwp9C|=@&^;yP z$XlMDhEuj;*967mV;$xgyQ-W8Lp}E?b>f5U-1L3{K{e|aaq`Q)o=r@uLwz8d(qA@$ z6|goGqooJ1q)rRD%>&uSL#7AV{jXkauwgWB45rRq4_Eh;GbiLWFcl8mmqeg0jG~f5=i%cVVHnG1QZPj>^7UC=Sc>~4zxZl3FYRMtx{AZpGEo$cxAoiK z{R-;AVq@2=?n-)(RD2tnhjKZrqbZ!;sZ{o%sByZbcu2~;LZ}H>rXYA zYBGr9PTbXwqbb=?BmDP3fJT>K5K=Kec;BoFJXfSeZ?ZS=pV+Ij;hI;R*|mp$APg9d zcB~k1iVbPQW=2mkoTTk3Q@o|zZ=YKdf|0ACuQ|V%=$F3^OYFqFj{+LU${N zW1K(flR@nuB9c-ni9W*N5xF79I2rXV?No`0rvuo~!Mo88o|jVI-8`!dz!Hfl29ul2 zCV~%xf~1C0-V6qAEg_9CY5(v(?+AG3(Ib~zqI~HR^5wnvNGK#B&WiaDz;zKq6Qd~g z;gTIW?_kA47xdZ(8ob8kPC;QrgBh?cMyXif408$hg`asxPEwT!g1IZo65fSuUH7O+ zSI3JvraPdTsG5(M-u$!2=87V8E2T`WK3s4KZs&*m=*n=1IrEz*SKf8fV#B-&xfiEUeoKl>z z7})EQk}!4Bu{xbx8R$FGR~uNtJjvm?(e5TtG=Y#Yb?QmPR9;K@c&O5S~agcGCi+562TNopySWz9*)j z?F1>NEh|fQO|zCg0(2s8t;HXdX|gN;d+@eKe9y$OOpJVhf-ySBZ`i+tl^sc29H7~#ler6?D zm73Uxs!QjbgrWwV)!gnHQ%0P~cRC`qkk@y0F3ny{O)$PBMmg0QP`vqxACR3%_0u(xkv zE0Dk0Y6<@x3Vk1ZYQqeIh#J3-6$f-pO~f~xno2TW<$_ygF8#qp6n@cMSU_gL+YudV zCMaUrHt|d*Sw{O$ySgJ0eIn`){LR|Ddv~+ZRS^yt(*f238P|3zaG`j7J!y*A1$vso zR81pSd5kQodC`g%Vku=au46Q8lq$2(?6^V2PMXUC=?OwqUYlm;6l)*O31;X?HPe~v zmKKm=gjB&(4o@#cgcm(M$7yn($HZ*+VBh1;qj=ii0z9x*W)D4xCjC>p?!#7 z?$SGoM2>zm!x9vHprjxJgP;0Y6`;T$r%{|VtZo0!v&M1jb|Xk=uJFu$P<9|Nd-KV`DU1jncvviSz$o z4;=Bw5EA3NKS$5W=Az5%vf4y~8)b({u?SE6e!`%W^m)az=j*0UCPR~Wj^9`GzR)3| z)y!9cFXJezP8gW{3(9RM>+yzmwcm&8iI0nqQ@HC+EW@!d5K7n0=M&+IIf3FK2)nbz zq4k~o@4SaVI4-D6^+x@knm{{Q=C-yPWONPPH7H0UWj}0>YvMDVRB*Df zdpz$H%R3D{OSgac%hsge2NrP`*=j$&WRm%#iYD}nrGk1*Jt6{2#=9}Q!jfB$utG85 z4dG^PxeQWhg>@U0Tbs~GBtBmpl!M3>pP9J5_Vt7`=grF7#b+%w79R2fo} zN=*24%(fkqfh9ff!f(M4=(Y_puHA8Kq5|S%r)>!xB9WuCcmKo4#GWjG9G>!@DzQ*@ zg;f7zYZS!tc-Fk;Q>@jSTghOdcyv7j!hMqN*2k7xscL()l?W|K;T!|UCvc23U`E9Q z0R5Didh5n%pjH?lP~={|G3BlFw6?MO-%hq0x|zQX?MPPs^2T|Cf#YdQllELJ!jSBE z?aG284PxhV+-L!)SZ}`37Kn_bDCtyG{UcR_ugy;2Z)k^Wjj{X-+VFjo8lzWB9}Avw zOlu=e-iQ@>DCS5($W3`uJt_{`dsgBRHSM~<^8|U~8(K+CEo@JRsdSKBC9A!%8O-b z#|nuqe-gsVUaKh;NP&kNK_v#TS;YB4{LEJroG%g#B*Qv7A#SOL=Rr2nyB1xG`9t~CS-y{|8xp&cSf zj^k4dRcVjR|1Ce33!Bkov7AYqOw~yTL{tAs@jH{}fOAo{5bRRMOf(Idcuw#5^@Qi+ zpT8cbtS#FcE^NQr7Tbw9&Nvy*yggxOH21g+eITb_uecLR1M1k8@~jcG3z+qSY|A3F zv758J>6$lx(Xu~7o|03{FDSWAc|09B52FWgLG}kk53M??uZ~?~@5o4uK=e$DOZ#W! z6y3&wq&-0_)ig!Gi=~O&9pw_A`^-DD0DZs$$Ync&3`?D%tLK@~lo}OTIDn~X{G5}h z<}E{D-Nd`Yi)(9!n-YOZ_J%$1_v#uus+X-Jn_-E|X6b|J4F+y<+s5^z13L+Ca%O%A zj1A8JWa!fyxbO}Py54*!gM0(yy!%Ws5Jc!av$&xHWAN`o1@}DOEOz&l>pEp?2Q6G0 z{YWS8CgyJ3F&iOO3B7|74;+*u08l^v)rRJFRztQ$_@qiVmTBn=!Z0W*O5e6Szt|x7 z)r;o(2rTp*MzBkCRd0WATkHSmIX|Y4zMzFS!bylxvwg(qm-?+Nas{)#Z;iCGp@d`h=qNPdE0nOTKpy}HNpDzi?a;ab zg3ihe{>v>zASHT}7th>Mv-$S*^nJm$3_^B(KH?0Faugxrs^fB4Ty4_UU=L<6aX9o< zEl&5z_m|3)xnRBsP-+xPSaE*+NpBVQ_J!HesHEt103P+x20=Xz}-k-F$jkOcXbnV8!fRMxwE&BB0=WyP9X(IR8i&% zG1?uUgQ(!X4-wmU`maC^R>TL)4M@7rm_4_|5SE`W1E|M85r{mRUQ!xIvHEskyzM@f zwvc4XTnEdY0J5jkA2p-65i(pOs~05K!M4l^{-jGq2M9Eqt-83rQ=`c~D-)uodmkh8RQEtby5(LXT;>l|Pzx*=?>;du* zOdb0LJ&7@mV~W^r@?oN46D=#U2eddK9=?&7N->KILb8dE3gCii0-%v&X=smeiTj2*oXIU>>Ml)b!{A-Nrm-;Q$ z=h2*)!IQf7QA>8(KhUU1tk{u2(}Xxt*V=tKZ;BfaKO^`>+x`=-+ki<7RaPN+kcT|< z;Y|2jfc1K3W#E!Xm7OAbS(KFVACxG)Xg!1brFQQUqZQ z21xpkhqm85&vC;K9rA{>JOy+$1O6GDW2@i(29QGnbuNL^-z{wgvd9GDfXMivAL@-S zti4D&CR}~N+c!ndu1qsp@~BoPt($n88z;b;qrobT0m=7|V$@LZA*B+T4vE?a3JsCh zGbA>72JsyG;~I&ZgLX!KSb=}lN5tMQQDOazn{AMSm^7;JJL5ItZuQ4@D=HIZtY5g= zT$vg6F8h7Zeh|5HN=i73`285C@ww ze=!`R@vWTvPlRrF6`p3Wq8uU$t`~dq{EC-F zrwk(=#2A$P`Ja_A{!it_dS)=>l}-VSJq5iJHKzq(2xSVi&Q(Nna9b>JStQc>$B1hy zIf+qU{_<&{l0|PTLbn6qWz$)Gl({~DCyADB+i2lXdpd#pN*E2oI7zKu=!t=-588`y z%B0qosT5s6N71O4Y;KZeln~m&Hq;SOh8j!30g)yRElD^dxsb8N9&sU+WW`qJwr40|D`Y;+1C=L> z(Q6U{*4>lBA-L^Tf~)1I4hv**So?4s4WZYtHUR4Sp@1b-digm7F^MG3cw6n^o9y#^ z3C67j4?zQ3!1zIYqBKJh1L;c4#s2x?R>nxfYP@E&y{PFXip}>>7TPsVGX~JHe*Qxx z=rEezkv-AW&s2{yI~w9VAQnc9U?khPaRfh{sI6GuAbr*+GK6jBQH;HoIwf5a(PoRik9thdwGUUphpR{Cj>nbs80&MyRkv4DxQvf4gsY>vEdo$DzYPD<7Wg-!lTnN}7dAHT zl;O1Yi%BdIg_Pk}Y+$rM@eBr?IuL|8t_S7@;4SVxB{J3=4u(s9sy?pj`^w##wMW1G zx3X_Hs%o^w$QnSmQ>fX~BHDa_gbK^09xo)r_1LY_2h`~b0h{6p%^MEmV`>4OqAWXHPe3tCEojeNeTFnS0H-SwLe1*= z!6c+Eq&jM0t~SannH<7IEl1gLsu%)au=5Kh;ScN+4TiUUh86c zZio4Pw4=@M_@Lq4tg?xQEf`Zk&{kt6tl6>|=>C-gxMF-e3D3rD?(;OQw__YBbbDml zfi01%Uqod)YM>)-b`aE_lR^xB&_4-cb_gsCVtBXW@~s$hc5bcsu<#T^YL>M^RA(_2Qfj$bFxPk$Ay;q*&$(rR_Zu0?5P$|N zirb@-sa^}Ki(cz)aqgKw+1%AfwdJU>DCQ?Mtx&TMr>p5=N1kOYuhC1iW4dhu7TQ^uuqQgJ;v>EKzvgXiSv5m(jb5lFN} zNZPZCTQD`JBh~8tclsbP==pJ#$X^!x^ z`|$topgKKw4GVa_A|&$DiYkOQRv{frZ-^O{l$GhK;z0Zaob_Rr>%P`S*KEih;OsAo z;q)5Aj3QBG+M}x0s-8&UfoBLkE(vCAg}ol^I)~?^!=u~W?#j28_-v)Pd@Jy3DM)HE zqAyQ4y8aAf$FhBMPN&9d>kgnadq{t4h(=|99kKSUXU7c;wZn|~7RQbJ{H@4>4FAFS zFz-N?==m`9PU?_nE?!(ge8&|U!u`f4NsO!j`iV%>|0q7REQd!0rgIQNB|lvNrl;Gkd@S8zxyKb1R+HxQlKa;W z8jqwoS^1yKc}bfc-T*Hq5^*y}g1zC0awF4xx&%P{ec~kHI^5X5}$Ou43QGh$WM4`dG`@sUPj}2!(Gl zc}o;`tb?af_a~*1GFE%bwWR?(-`RS~fMs0aTM5ShE@N&(-8^h8o_kuFpzb9i+z0=l zo&@09Nv3wbC2mg*&av<^78+V3t7O?Q;E&i1+ZOb+SqOsR*aZ;N%5gXXPOe&f7OJ(C z7XBzl3Y|4?@|F#|(Ba7K<--~{E2K8yfBV)eX;Jiv3AG~%9XvD$8)6PvdoL8qlN@$@ zYCtdZLz$1e2+rVQt zJ{wHK7Choj(a;Cv)l(YiloZ1ybd;oN(h%7wUF$rM5aTArwByFoI1YY zE}(jm&nieq(8`QZtwy~NkwQm?idrLea-;*PZ>TFATN(c~VWo5;Fv(t^&4-2l66Ju6 zK>-MT9Y-&>j)!lG2WU!0Y%RVj+ldPaE$UO;gF+Ao?~XSYChn(?ej|tKAQK9K*L4$L zf`hqY{G(B_(pmm3A|-#`kg5kD%;HPmOQYXC{zdF_a+D|N0NZSQdISl@*=5iaS#B<< zSft@`EKxSp#vHmpDi@W~#R_~#|4lvT*eR)y)gng^~ zGO(SHR@VaI;;f7i6Ge-;|LR{8d!tFv*#sE*oqW>KAl)c|*gk?Hq4Xh$ z%|`cF2@hk;^ zc=bb!?hH6A)#+)yczX9PNQz9Nugx63S;a(>4fVPILEtQ6L1Jp7H!#D<8d>7_AZy=V zi0gf$)oc`)(XT7DIMIo^%@%ba6vVMF+^Y0g?5g|xgt2$%QI_}t#D0p~i{T+FseP&h zlNz7RjxU_erf(?NLJ*uHrRVodl&SNKof>-m8yp>}@d0bV5rixbOTxE6#&}MWpg^aC z;HD4W=w)L}VE4mAeyYz_UkO+*bw9+K&WCDe;B8Khv`K?)wdP6;J%Np_ z6%yFHE(7w6+!|EWYH&^D@&w)U8mVPvNH0-bC*tadovhu-r>hF60DIzq!JAThZ;))s zE;j-XxP*s;#V_^67+`5=jzbH$DhV=_p-cnmv#N7A5B&_os?e4(voA9u9nNMho5Drrwf^Z zBH)5D%+#$Xk0}M1#XFDdv}GU2n0p&5&KpXeAf@dFu8=matcb8}TZ!7qZuW98_gM?F=I^-&WY zyH$Q~98%*WsHyU3Dce(e)(&x*JkUwkKT%LQOlZM&G>_*>5U%a0+_ws~)R7V7glwZa zx+sm1uvth{7lZ&L4#oqFJ|eXpYsg@ylY)B9o680bkr{ZRYyn-JiXvMgxPb^fl0g7i z4ohS*WVqk*3v~pl5;9q@ZA~zv zi`=)j;;N#p%KxnSu?i7x27~Y4VWAFTBr~)~gx@kqr9Y93<$YogPyHA?k#456X*34X zPyj}x`+MhWXjE4*{})K498Jv?w7Zz>@BA@6MxP299So6ug+xu3cGs-OPL|P>Q+b~| ztu?|-RU=i|=^afoWa+X;kWbrF`HK+Nf%zuon^c<~Pt3t~aDuL`^;~b@WbyK9;!FB@ zN))8)%7Rn1NP3}vGH{C9;KR@9fp@`*g_&ojLq~+YoOe-YS<%_Q((r}p!tzF0vzj)u z7O27rm9?spg4|nZ-um!LKPAE9W~QjhR9www-$M_>0Y!hcXrtoAlSdrI;)DkW7__AL z)LD%52_KHANf}*#H^`r|E)Scv_D;O6 ziV8~R_;ZpJq6K*Wma@tTZ`Yi|dHi@m9s#t=?zN5eJwn3yf<9>GdPE6+W8tNEA-&{M$6Dv93??CrRN)#Qgt&!35l^;cJ|FoO)(gP-qKel}K^8Y%mFdQfuc9u1zVty=aJ zKDUxp*?W)?4`V2Ii0IX{sc>eo?gs!0L=r7H;>XFCP=m=imDsV&b=SvvoQVe92|DI4 zn@yA3CpS2vhwR>q-|8Yz07L9`gHxnfhe6YvO63VINJ;JO*Lid+aAW{iaPzxitwhIl z4SKjG$gXk6qy+GofdfmeHOpcJqq1K_G%odoc@p5I);qZ=cU~oqu(kcF8g@t%bMf3o zp#T?`cSYCTjJcON9iY9FX=2yDGQ{F3F|zU`7uph~iJH%2HWC8b$BBH_mz}wwYDZJ) zHIR8Bb)(AHJaXF`08T>r;yL9uqIz@}^9r}_Nqc~PV@&(nOr>?!rxjN;zJBNl&Qev$ zMtK1N#5*|+{>jA9eG^T+nNap{ux7s!@DUyELL8hj>3k~F(*@Ag!k^wrJ9V>Gn}bDp zCwOA7_)!ctclhsL&d{D(z-~}6L9=WKpE@^1etz52lWvN|_E*xop}GZ{3RNjV{h4!c z<8_RL2+062`j{uoqPPg5J#0z|AEceL*B$<@Pe!}+ShyPimr~VyDJ(X{N?mpl2?48) zK~-@(N`($t?D}OfkJ<1zMPe=dG)pm+C{R4mrVJ&ZMCx(h4u;;OPNrV~+w)8OcIs_M zV7f3H^g#?gcN(@l6C(8!QHa+k0zz?5W>cwLg9bG-39=6CJpx6Q;`__zn~9$|-j8GM<8Zby>T6;f$}ZOl*61? zr4QvO!;$6HCqkgRT0z-Ead)X0c9P^?URMRVQ4fXWgPJC&a-y%v9|K_AcR3u<9Nu!` zhls|2;`5bPk>+Hb0GHAYwM%_J_aY7u*#WtCSrdR=(pF3n&0D1?SQZk`mWT z?W)xcjWSl`1Vf|gq)(kKD0wrIVfZl$qt348AA~x)%9b+Acz*ZE{GtpwyPLVFf)6KeR3vjO=_@a=9njJcZtJ^^AZA!&v&iHw#jm5x^P zokFvcX z%1Bf^3eNZ+E!*Ed%E{LOap8~tZW`hknAX6QGAy`^$lFCuNuBs+xUZd6&*tW~V5j)10}^I;fcd{XkZV#y zVkgNhs*6Fl%opr>z!n9Y%&|8o27ImFAiaJQ?ZOvQb`!mZ7#QnwJ6{C4Sd`4EtvOms z2^r3lm}ln;jLR#hb3~`3o-9vdQMAne+e>@j5jm$!Sovc=?QE5mNs5=BsDVIRFO@m!OJY|gZZLNGFCjaNm;vfrZK1#v- zK8`x5yBj3<9w#|-LVuMC#TfkO4CAJ>Roq5;0ocb9fYW0}K083igV<+{tBH|%~iTf z!x3jG^31HUsNtj6@R*d#XE_FVDq>D#7<88?RE(MLjfhXdx1XC$8R%E0-*onqV?me` z^36jC-_kB|hZ4wP7YFtTN*V$-?qW8^vBHU_)*(CuW7FL2maK`cK|DErR}jZBi*ZGf z28u3{cWTDD^G-0X_`Rd^E{z*w1zFW=VN$u)fo4NP7v{C&6GS5$AeO8_+gObWeZ$BQ z_l58?wg)xkqaAKK#Cz}ZlSYm#a5bR8BEEL$vEgtP^N|oGEqc)dffYhX(u?)IihWGv zYJfsBy4Wkt1$ivUc z&^9x@rO?E(78y0`1nGeIU>9C6#k-c_fbEd<#Sv1K&#P}Lbd#k?QV0*trTseah+bBB zw0))yayujv-#IUSK53EAGZQ-&seURHx#CicX~|GogasWo4|FH7dCTr%@9EIm_+*9B zw=o(M!iSnqM9U~;-(PgjYdd8URyJ71xvUCEKyOEBb++n%lfPrE{=3Ez6X0-Y0u>!$bZZszG- zxFdE_2`wdrg z(>k*3-|5|vGq&8%ey6KD#1kl#*YuU*&u5#JQT7bl5F^m@|0`90BQPl)q7_3@Jwz^M zwde49QFvo8Qa5Pk*b1KQ52Vc!5ro03@)258t>b^2Z%to#wfEp_mPnFAn#{TXvO$$; zPP+C|=&+H^$eS^03%0`4d(BF$s5;al9S{WR$eOY$@V&UXJ`Z6B&NY`Fa)ZbK&Zq#} zT}0>IR<*s)H~=hWD{GN&$9X$8pXYixps^t0avQt{=$Vj|uuY_mg049Y#;j1Ry43UB zBNuQ|>0?;$CV-VyQ^`iZ=R&K9Vs$@~n^F+KUET~Nsux+t?wuHp)y0w66$XXkR32I6 zKleW#uDZIK{ACbfc!{Ax;0ujD7FOM?YcXdEv=9aEJ|bn=Upy=HIj#rBG4l^FEXAui zC%ZB`7Tcc2V+B!GdSE*kct*Ck?&>g|Sm>Hv)X-d2LAQ4xGSo_%Iw_sGKtE!S z(Bn?hEIi|S&94+Z*km)Hm+8yg$ivKxjBEMvT0?6(`pC|Gdgb|o-`{2LjT%QBYnEZn ztNjkfk3_!`Hn6Us(i|qZhN`1&Oa_OGcSXWnXjR9(%`D3YsDpA*jY`?0q9NC{-R{q74b9hA@9G~N;JPeMpT zr26uzOE(6y4oqMf`rF7zAwvo6BcCtLdTK|rA@#qmdC~{q{v3?u&LU$iQf@%1(;)yuAul&mwg8}ampis zW0GGD&^3N~5xXgM%QY;D}IDlU!<%!4=td&VuW762O7+yR7*IUQdQa{5s zSEX}F8WP1UEKyisjnkrnh7E0@n2|a|U_TkCXn9=Z#>=%fs%uJOleRknAp-r^;mBY& z3)j{oDo_@4Mqf$Hr+Gc7&G1{^^Je*G(W;$c^|Qn2pvJ4w%!K z2;^plc_`wTa3S}e?*e3rLOC&g?O%4fI2P=Y_9sn9NUWWzRz`3v!+_UMHu!LHau%?K z)*n^BM9nNJQa=n$JJZaxv7WRcBUjUSIo6C!Oc};aK4g|l*<3mw%>YS~wU4aGrnKR7 z|Cg}~HE0=CMg-b$$D5a=Ntm_p$&riR;-m>i)!utNI&DwWb&eIEjpagrV&Pfo#gQtJ z$vFL-1&}L62;L$SN*3=kxlkLS*{2>O^>&3Cc&RADHuPbvPX3l=<5V;WQgrD+9 zk8LFaX)qlcn`KZ=gEB0yC9ZkI^M`pLLAlylGb>F2!+3fiv0ESruY{T*TBakJ%Dv~n8#?lLitUDLigamHNQo&ju;T-DW>A?+D6vBQ`~H(PPaW&M zXgo&<>-r7-n=8g*7X@hay2H#ts%V?f#YyNJ@fn4E(3doA-KNIk;Up^ZC?4%)v2;b% zy_R@iEODz@GEVFv?WdI}GY{u(bQ*cFJW#KGQy@-|L>9SIZjxasOQ%18bLz(Qd}tN~0(c3K=7wea-7Dc2Ld7r_yBEVIB44w0VU&J| zo4dcT^OBe>TxO}{t;pfo6cC2GkXG!8GgxkrWaC6aMb!B~W7t*ctgFKy$z;p$azDU( zD{pkcMMgtDf?Yhg8qGf=09FRRLcZ1HruRxNxGq7jfMViqh}YZFyP@X{SEo0whK~wQ z)<|W@*oWh=8_HG0y2QVy$wFGU3^Z#ggIE^3c>y3B1os()GV#O+o|*bsq-OJmBB|k` z)NWu*YF3^h+my2o#=gN$aKa5kVG4EphrBTCW%~!-Q4mQ#wv%rmETxVfo5<)ct}-E{ z?}^6uW)q&4Hunt3+haHxcpSdd40JYxgGOh+= z5wO#^4e8CUB{+tX(+ijt)$bC4Pk#=!mh7IN9Sir`|0cVFH+bSdGSmLs zWbo$)C~Jxx!ZJU5c5)03!d}pP0fp-;e~7`ph0n{16zcE~B^J5&;gT0T-7+jf2l1sJ z;7&;9%cR)Y>5U;(@MPn1PZUL@+)?7?iyuO-Ay+c@ix1E0yuyrSnxNbz+A%=hOy*Xw*< zvk1pEqcW|zmkrJccbTN-*B^NJvo}%ON|$Z~Z>hv_w4u0!rVc80|4vekH!E_Ia%yy5 zyU3OS48B1n8=ec~tGDOq2~)?Yg>-@tgyO>T9=J#iDbh2s7IDjBNy|z|-y0jCk@-OA zhZ&!Jd50m+)#4Z=${odnKOp<)Ztj>>!nU!k9X(uLN#r!Yo!NPL2T%LpchTa*s(UA} z#s{lB6>DTXi{gxSw+gvrH!3mX8Kz50?Jr8$;oH!15UK(2ZcD4A=~g@1mtcPwLm3Gh zNY=u?k~!c8P$ArDWEfoGbY&#ByOH!HuYzDR}$IUN&sR4;wl_|T0f1;!|k+&J86+N}P05 zYb0~GBzs4y|7e`IN}5Sgohw63wmsjPY@Y&YBf zs6=nXtU?bnuZ$ouI0)*%uUd1e*tG!@ zIkBj6b;)KyURoQ_*=-vcs702JO43eg!50$%R+}h-jAs?nO#;i=wG!7)$mR;K29q}R zFmMoEK?H)L+LvT~7)!6ZQVYHFdoc*l6#;)db)Pf4E%guym+Y4uqi2*nU96 zTaKl)s7~pPPHertor(#|imaLSF^y5dw(kKi(1&CT`RG$_*Tu~HxJHTq+Zp%rq&3ZR zslngYDNHpFTs+o1#c~t_5_A$wU9$!9bT?@Aq{sfSB6%zR!W}j$r{Q{7SI!DZ+uGe; z@GO<0QXezp7=n~`MPDJ)%QnCb$8Q?@?aE`?t)FKZ^Dk=TS7#~<*N-#fA_!CN7Q(br z2)mQ;*FqEq>MtR}EQ>ZFh)IJ~*sm*r7wR)Ovz*ZOH!{B)ki|&&ri93f_WuL`q*Rj; zNqcVhWo(VwHzuYV@@<}8*yE{nQjcCXe%1EvZJtMx5AF3uM4Jjr)i9Be9ez7`c!bt;{R}8-YGxVN_UFJB(Dy821J2o#3*bak2jq#(tb5{~j~AB}Mhb0b}I5NMPfssBKZa~zBo z06pc=zfZ$C;Oa{W_Xavf&l4=0Nz8GX9b_y7-(iL80QCIJNWGE}>g1vZ;dtx}m;mZ{ z%uS=r?{OUXGj45y20iwP^K!;{!>39Kk# zZ(`w|b>C>%vW1@I(`@?^FWMj=$OAD(n0z`)BpSPbuPC^otx@WIYDz7)+j4JBCt3ug z2~fT2ApA4e$h8vP(pZ`!v!2c}qAGErl9-)4igY;~#F8&D<4V-l3Du;s8a!b5&|*oX zGE4!}2oG?9IJnd2SiidW_(x6bH1g{{tupl8gaqg!W(S!;(~k!EfP^_@6ejwI;}>mc zvfj5vzb$yO)|9>$u%`nwA)Ud{dgM9w8fBUva;(vWw1#rWV#$&=BJwd__&EcHhUd!? zI~Qv5y&p&dp*EK`PF0CaqO+S*_X2!GsvL9?!MUa7AKB}{ zHCeudrmYw5h^UZnPmqLUifmAjYewA545^3|jT2-})9)y;X}@>IA8fI-aD^(uzFmq)mh>QE%U?V z)x-+zb{37z=RS^YKnnS6o4qzrVNg8ZWOrx#Oit-2Lm4!jV;<>t5tH_&6clRX+KH{$ zRSsp<>TuhR8oU)_{Cb$z_LPK`qUnp;329dz;?7E%N{!62s7#86MoZrlMfgbfiOb~P z5*Cc&AeD08Y8$T?J1+Mrv8X$F@aM^rRAeFPu@*v-v+j53C5!CDTXQSe2Bsu8ZahkK z_l$GZQf}3JF$|OP4TwOII5J%hsXHQ18HPu-&7mTs7Y$lVY&0tqZ>3Hl8?{qL!?>Fv z@M*Ej%PqP>XnV?e!#uVYXqI%+vrCMckjNf24wSxy!zYRYt8nx?R_R|7LOL1!Wh&|P zLB@RcZY`>1^K%_%(UyIeq?DjEDtmrP5V^pH$sV9>90J4Dtb_QwJ0oGw331L+gx2DZ z`*j$@LEG`tLfl1NX(5>e59$p9%QqqjLJ*i-43|$&NqYB1+ zVu-0=vb!L!HTUp8<&%G@V3?@kN{_EF14tO?%Ftj5cd$F+>?m+b-{no>8T3EZ&5MRy zOr0XzY90^?gkQuD-sQ8Xs<4=LHiBzN=KPCad#FC?|Mf5qaoFR$m=4&6>=+uvDhCJc z>qwp-$Ex_<`{0)mELkN409h5P(cH8cZNqf?7b$DWqs3Ft?iM7J(?Wf}xPysBIf^|t zqqPHc;-i(;$um(j{{?$J?00>Gr&8tj_)Z3*rHqWgBjt`V?GOhQ2`q09)Y4ED65=E^ z-BlDuM2YlGPgejC=F08B$Aip5;k6hDWrLvZZwCfz?|zBmG-gHl3@X)zRR)#J`oVgw z5Ztwe=DU`9MvQgEB7D`Ej_(L1x=>IPM?IWrdDXB5elf_PkkWOtjU$}?cc;5$R*(vb z>;R0jqvtuS0JP{$;B8nwaspd`z;AX*A-Ii1Z-0O1)N!VW>=SJG>PJ;xx1?c5gf((J zCy0zlTe>a>;jR7@|0*mna#LMgFx>x%1lbDrJ(0o;P@51p3ok$UwIQ_7M^=bktXd)x z=}v2kh?KzBbRrx#7=A+C_h&iFw)IweEMGy%imm8oek=6gCy~hNUwrdYJM^UA4Cj&| z64?WD1q1S+;j%Ta>Vb>0$b{(T$lfArb$hdCsn*@JD;K5An}<-4$K!*^yig^6|bVBno0=<>pL-;8AYyAm*KtPmJb ztr_64Qa?;ZB2{C3SN=dYLCp&8Q8bzJnb&dENi!k$qB=nV4CKB!g`~!yENk?zw!LEW zKE(j+u;n0MuUg{{)S))4_!;>Q!nxn$q!2!F??$^_ry>>O0Wz38fE`gC-GlpGj-J zKMl3U?o~3b;dR1yLg_62NhDbA|HXvBK5jU8u$$4oQE|ekYA~S6#^VJU?aJ*uFe8dy zoFoR93lh^*gB#95O@=;yUmUk2bxN`v7c!i>?mUN~$d5s@7V<~M@vUYiqYju(S9s&( zxi9j4_D~@z4W6`7^uU!w~gT#V}iEE#na&l z;sCwzB4f@TsR|YU>h$6`vh~~69g)Uh18E^h8=6pQ($6b8k3{)uNi)+7eKb=;1L5Jn z$F2w#i`8=~gy`9jqsou=jdR~s*PJ}9QaTkB!PX795D=WH3*R|>NIBxldJW&>UbsoD zABhD9U-4Qj6_7dtlrajjOTb3V6T1ia3qD7qs`{#*!(P0E>%~<;EY9aHjcW#a&i+Y- zEk=i}LED5$%KaMZuWXQAth0)w&zaLgi~0+|b1TD<)M8$rPn89Xl)y>ExNvC%v)MJz z9sNBDd-Bz3wMR<(Kg9j}qcMHP5w^l#dInhhx!BVobN!}^cFFbu{o3pdEbr;Y8k3bF zK90v<-H2RCBlJ!l8GXp%-(r`!PDHH{(?+vo&ID#%rIyR(>v2%Q-XmUVy~nUhuKXsy zrs+SqrtUGw`wgv$NGs82lk#>Ftx1E3Yi4dQQ1K5sLIfH270XhZmY}IJXvgkWWLCMt zbTP0CY=(4EFM`l7=tQ5UZ+Ld;3F?1=t@L`kKv0clBcSZO>V%I_L&GyV0%L-K0tzfV zX2H=(boV+WAx!-pe$(9xZaVe16o#)Vu<(-`495bBa0^%YlXu8(2bsNiQZ@2mQVzhB zSWHB2y0~|bRLvpgL)~@KMGim$?Mi!bCQY@+PRITFvrI%RIDJ;Hb2cCRbZRtm5U+{r zLLzPH*V*J5Q`H+VNYsd|-fMMET@E#~_>yhMKnbT`0AHz4Q?noXkNg$FrP(6GukIp1 zPO7#4A8bO{qeU>OoJ8M+>#j8lpt_|sc!0tQ|A=AWV*DQnRWVIUFg%Go>&G9J`(1GW z#^a`17L!vVqX$(nb_qIn*A5qU=%3s6>x8qzO|sn$mlfI71@3d&vI?+ES0YFf#;%r1vu=5`darON#Q}GE5HB!qeXeaGX;W=S zGZKBPpBkZ|m!)mP!K1+u*PBJEVMR@xGHH1z-!j(41p?8p%pxYRR{%^J0WcSim%!zc zJyT(MSft++9u>N)fW3v~8g#i(Qh-sS0e{3e_3nII{`nPeZm&j|SSW>g($XXH)iT8U zx5%20MX=Dw5#v$)kYF-dzFyU^Tjj!3kvh=pug8be)ptbSTZtIqQ>6kK==AOJI{J_; zH~VGEAOhtxE25phf9@oEBA!lk*T0AGZl)7i7X%&*4&8w!H)91Htd&D^$EwtRn{S`O z`~@ts{wzrw6~p8&sU7_EXrp0c=L_fXQ%1ttMD~VGd`j=b*|jP6e#c@|wv&z%`hGzY zkQ!gOKW2|oR=I8LkwG|AND-@Ii|7yK*_kIdRRE&f zW)qUd!j#x=EyM=Tm1&KWo3FNpJ zj64X>ij5LeDM!JuP{L?@)HNkwhfABcgmz?~=yE_$64c2kNpGSs5I#%zUu8a2KP=0r zif0s?h!!<#bEkIk=m>5CSD*8553nveZHq7H|0qU>_-dtUwH;S7q6wpzp$VLhBf&29 ziI~BZE0T0f(KBWGG1k%=IVl9KJ+~Q7IpxOo4hl9~j}A`)>$(OadT_PV3y#VQ-=}yu zx~{Rtq2NhBy>lnw7|WPGYBl9f>sqZjUPQ%ov7ikE*i}TLF6>qJ-NEY$ElfP1W*h;6 zW%8bahKhqaV0UtllSy#oQ@IMA1@}%G`yt3I!O@&09(_q+0?eGK=^JE2vJ4@-;i!^W z$F`3?vW#Xz+Lck_5Xeyvm`}qaHvNc80a({)Dm2`wxO=i& zb4+Tf(pg_uNm{;PA_G)ZBdHn2t+t1u%MPl9%gbNM?`0?7Ag^5pC`3*X!;1dnNV_OjXVh-IXja=;kXQ1 z(E$g@jjmUlSJ*C zaT4vm9w>$ZBG6ZH}Vb#9AZQxTdTxk*0m-^xky^%sbz&62Ry{@2xp@D z;3MUYxU+-u<{~Znevh#p;FK|DIYHT>>t(X(zS0<#*4cihaOwi0iKu(SxCmPjpey#^ zosDgRl%_oggKQX|f=_nCGHpa^anECZ%eG97G?!MLbhwZl~+ z$7Z5q3+K86pC5r?sbeJ^%E*;{7g7NlQwq9mx|6zMMwL>xKwgUoqjwl6MwNo(m+F;t zpe@z02UZA}128oarBWZU=r7!0a3E1J)$ARCiUFTxgrxst%gGIs>2&CNEdl$WCp<+R zq!tq!8?dd3vEao2%N79`Nva2=E=TJKVIGj>yZUf3G3vtr+t&!<(i7xYm#QEiHz6W) ziyrfCs7HPtJieZ+ZjteP{Ktd?!?S5}VdIb%#mvEg*dS-Bl}^CE!C#G|(`6{4C!HCo zz_u-@@*9-w&G7Fdg_3M7XR72}mwIr-vuZpot=$LCm1$36Slelk!(3ZJwQDd#>aGO1 z+zKlgwGwvm0-^RZa$(HcSCW^5;eK!;uLewUo{)>RFABj^G0v=DE}`twxDVkA`U5i( z?o5^`es})nf@NvGQcSS!$@uf^fdqOu2x9`^rsN7|$C&S{S-}XJkc^48-JW)H0qDI? zD6|8*^ea&G#892J)E=|pm=|?UXIZBgbHFtljQ~O#%EAjqONa&@5Q<$>+6#1O^`tF@ zAzXhT3K-+^Fu`QFp4iMOJLI@>5j-ipf(G)~)VQk{n>W7S&gDP?pko;y6eh5fEaMoH z-P{=Y>zsj#=tn)Qt@MVZ<04oxw8zqj>CHK~qEV8a=m%}H?NsZ`fzRBxXlLjZfp^H7NhaU$`gE-fYF~a z)seo2T@XyNAzEP{z=*RXIG4rhSR`{jK4$Rz6$U$SFcrtNO>yl%V}DB7TO-Ef0t_7) zoXP7G&NR!BjHwOs5AEYKHz=lKpPU6A)693%kgp4iedQAVGvN5{D=y?%>T`<$o*R zv1!?1hRe${eT?V4RD9;mq7RtSNpU)oR$|Hpy?l(%>mTYw6~6L?fotn;m92{sCV ziz0El+x-BSO#80LY8RO5uTitAcui>K6J`yJ-o}wz zV*>1Six*W6n6nM#<*_(VUdw1cQ7SA6&NE}iQ5jMUN~0$726n{o19pnqr?!hM+{wCq z8ZVu;b~5{jiZC;aUCik3m*`}A2s(mWEZ+(XTeN0vC=VserY`A08haX`h)nc_TY z^JiF{R6j)(^U&+AGhZJ>&5_=qP36Xj^{Kwg0oL@41v^TTF~9i`*oVMgM{5jTW-Kzg z1Tt6XK=%-%H)}8n~ZT-bp$0fZ%5#DHxbj%vl{+0F(YmB#y;(!Ed{q;%eMkR@)$I#O-Ll5CIFz6qz`a?}YX0IbnCDDvW zWz-N2#AQFU)#(Fd8wcz99aQ!s2erGM7XVympD>|!qMF`h62A~dVsw1FWr;UIYO)%? z@QeJ3g3k5B3C>O!V+QjjAcS~xh~p=W@A!6C2+#GukkPXX2LbR7E+~FEMk~rw=n5IL z4IO?t4%~@Sc<)zU(i`jeCuNqQHd%&5A>L%aJ%kiNJq&#>F0SUz*!`};GXf;oo|X*f z$Xd|jrMzBeaDq)VNN#O&W$xKQKjxPIdwkxpYeCkb0P;QR(n=Ft#b6rh-nzqVpv|;n zmkN@-OXWhzG>>xCBDj*}A7FfuwQ>W}RTCpS7(~YS_Lg#Vc&vZl%RSmZ9r~a0;Oe*> z7ZFExh4so&D&5L?HE(!4x7#!V7lfWs^?!TMUGj9e-&0RdasNR_0~ru5Mk)Kni^^=| zf(-$;4vu;CVN!!G`$popo->TV6rcJ5_EF({6hV@E1~&H0>9}exfI`!HK964=J29rj zgS|0zFC+MxLE1}9)>?&2F2+ni6usyK1uUzO0Aa-th( zlSpv}XJeCO%9$mtq}q5wVu%T!Lev2sGy8fCr|t{+MU{z~ku0vvV~If1-F9BRqEx?Q z9Wzk~Qj$}z#YfN9V>-xr@VjQqXrH6O@_@H6)5b5=u6yWv5!;w}_iFWOUY3+ZF^wS6 z1M^Y$K^Wk8+r{OD0Fg8<_tMTctqIw-J8Pq>0?Ob=u_p{We#!3yE2KyIWxBMamf4O; z3rNG4CY3IGuGB$vfGn>t^JngpuLZb+;Qq2`Rp^-;)QjO78>Pnjl#M9jyT$Vu)v?y7 z)P3<{1I4*tzgES#&m^3QRW{ytmwnn7>tW?F-;hY^*1;!Tpwo1Onq=?xad=oaC0 z-mU+tVB7jfq2d#11y1XXn0;1{RiV-3Y9SBJRqCK3SlipP%7yJM07*n3YsA$j9Y8<} z$PR`Uw88468;ZHQxbb420FEG$^w^D>$D4z6ILHvW$6pJ;Nh|FqZ`g7x+z!>`K@JWF zbz$kBfWs?w$^zDi@W9ep`#|1ArW&rhp)w$5n$|$z$WoURczW2;SMspA*esaHAG{1m zoKBf}L{6Ao!n}}ymTax5sin{zsat`kkYMsPVxUfL21|Zgj~zWPlGd;)0V5FFTxiaE z+(ueP5?G8S1Kg&@a<40v?FXOS$VdhbMhnK=)=f*tm{Y7$(>1y0sK^D*!coGF{vqhz zQo;SefGsU~EVC~Gq7^+asT={!`_22o?ZwrP|AB(r7Ht#t)&ZL`Q)nrk^6Pn+*^@fB ziO_1n)Bf1Ui%E&Rcm6v&yAq4lIL=|q(8m5%zg$6t7_8ft0*|IF@)edf;A0E>SlXB2 zqF}g8YNkOHhb!e_rn?o^C8#vMrB0mP)IPF|-p99E)K$x-9G?9_@@AgKP#=OS zLy$~-uB*JQ1WNQeagtP8=FrB1@`BL5i2crnaPppxmcL@z+GK*?@tAr7e1QO`G4uIK z;#4UzAzdnN7jQ^{+tIFLip^lxx1(!&fioyThO8Ln2=UvXB3N0SDga+l8ycP}`yf(V zsFdtTqZaFGTiAyQdS5hdbwY_(Qu{Asn|slvpLhB5(H$RniSp3U+R(~zS#6{@sFYuJ zTW^vjow%}TeUt-P)(zUNVx#gl+!>;;D-7d~1*LyVi@x)M8^FOzP6@cR1yrU6j2ymv zUjv-*JW}6LPlJNoi&nNOI^wJ!$Y7+nDw`wGG0a+yuExV-{B&gEiztT?r(}9}9KmBj zE()H6St~26-lqt)o|=D+o=@#UK2x=v4j(OEZN+dT7tV)~m}e?3dJIaMphP`26* zz64#A*frvcS415fN%J}cKt2e4N{lih3NfUT`lgSGV6?);K7Vv#MV4aI0jiz=Tr6;} zrvN0uFioR`DI{JY5T49VFs-W-u;fPmh0Lv+hH(af5_M=C=Q$BeSz<`XJgn%Yx)xu3 zIRxA2M7_Ln#RbnV?&+BMdNeE7w5_muQSrt(xEP}a$s_>4m1MD4!HZ$w?1Mkq54;w2 zD)dsCM5oR-y8jKVTyuYdKS{y4a2Pq9-$w0Ql8)cSjQtBBb(OS86?hWpjG;1PCElCN zY0SB3Aq7acBigT5CrCE#M9)e2N{)lbZ$7c#mVIXA+;@->+GwguM z`zujqC+brp8duj(nP-YY@V*b6=;;=08&7$zZ!FSf4Oj1RXCx6kjOqBqnOMk4{u#$mRjG6 z81?2w8u9NW$P}Rhmpt6%4S>M~cn_Dv@d#v69RYoMC~pjElrT9{tao*CI@Eibz@9ut zPm?rcnaR?<4h#b!9zNgL9X5VbE2)M(+5Gd@Qe`h;SSMkuGnm1BcmW_)3%8?cqnAM~ zb|n093;PjA2GSTQsZPw`f&mL>8qpE2n{54>9__4`t!px-eJL|28%+^uBoVjA?n6h> zw!gN9OFfOCGmqecRN-sfg?r4gch{|7W-J-KEy&;X$A$#OW;+SBT$(iXG$>dxDcLc~ zEzE-~IhNO#JnMF8_*=e|f}2@9F}@Z+Mk)?fkm(>H|9;zpI5?qr%!8{zGwNL&} zZxGU|JN3Zr=T|gsR0wxH`@Z4A=0Je;0bySAIA;_icr1oe$s1*q{NV0DMnVIER4W=a zc`Y*&$S^Gw?k`%Kl=!i{oYfFf72!a2UaYlY&6ea`9VHGr51>rppZBzMOQTV=gP>J| z3$bIV+hFt!V^=RFNqixO53zY1Q503qi%sgAMibU)(IFs z=w5lBqE_wccIq0=Rn0z2s8#F9F9GJ@N+3SVfk5(Dbv`G#XRvM1kw#$6pPQlr=2AMlQ412Y=&kXpFfr%l+vUI?P;PmG!`J>|%)0|X>)1+7*(PbpC`&GVV z97Ea)*W&_zDq8<|5@drDsA-($G@0+9Wz@r=Km9}oPMJJw!bX7r6df!)fq`u02#MU=e+134Y&fFg^qHZ%C z-x8jJKZdwYa7=_%n>Uj7E!Csk5OZulv<{Awrs}+Nqimd6fAd;+3@nh<#YsF(^RuQK zf=dx=yzB26-M_I{i~}f3!5Jq19&O$+-F7@f^kAsOFc}9{jnzd@FNnDUX{daLVLUYqIM>rE|}m<(7rqPr&iL15ES_F}xa4`vw+{<(M0HK=~M+RkQH^{hESJVggR z$~mOoItE@~aOZ0L`C8_8Bt0=EdPIt3R0WBJSWl9(XftQaL_$G=Z6ZLyN-PXbhbAwj zaB>nM2F#pZyUz@*jy-9tI1?)i&oCX~-2?p;WUCk7`0)o+(hvcj_d2Gheuls>f&WMw zsgpXmQ>&GNABvye-46SPv`EsrT!jsnW0Tl&I0oeZQ#&wY+yLpkj`7h?k%vG)4&Bq4nIF(j|=+B*`gUQ?y2UCr(ao zBz!h<2+Y<|d~TNpLmRhRTwf|^o_~9K zA6j>G#kB7o0?TNnTl9c^voc95Pgwj-6JKpCzb7=^FryCN63TpIZy@j_hm>9Fn4Rq>fOnT3Re)yU*1f_Mb3LoUE2uE8%)~$UtXRq z0O`1Q2Dt41?GC!THANl0g;aVA;-qLej?FteE#`55N$)v4)cx)VdCOS=2J>v`HL{L$ z4w2Z5n9g6N(<_M-kYE0i5E)HtKEsk96Fcce(SURNFM63VAeyq1U5C2)C2@rO{?1cg zLzC1dv65+QH^pc^G0Ump>Fx6zsZau^RamIZxoOQFB~B*buKow#6%B~NgamIzijS$w zJA#%JQvkL4Ty9Rr5|sFI96(iiC5hpO6TB+rLQz^~vHUzk{nJ~3mC~#YE&BmeF|h2L zI*e1l&V$EB!wVm#tipfZyV=WTYSY23Dw^LZj)|z`*dix?P}PlW!-O(IWU-1U9-pH6 zdREJv`Xr!VX@f`NlM0$|HUJB=5tqtwnnkhyCn;RMp=;YqS z!{akGC~txgxQJgFR*dTV?r}lSCFu=&2%VxWGYy|admNb@#AaWA!%uJg+DfaLIuF6h z!C596E2!{s@@I-(?vxn)RY;&*Lq2HDwG0MRM`FhU6EDRweDwF&0Zs*9a6>8-OiZyc z6`mC8I4szm&T+j3gM4s?1ig~?<)Z?S5DCWD{82S~Hv$ciMy>d@bfr=^WP2Jit3WXy zq`7nTp*BN5?u-w$UUQQr_nUtwa!FynEU4G=U_w(TTi0SD&6MvshXZ|UmYV~?T3dFL zDm(e8+;6xg1s2RhybuMKK^TO)2ug6m0``-AK2RNt;|WV0jUuKtBjq6F^!!>4aDM653@qr#rp>@e$0hqaK@)>`+s+*^I zb0d;{&7p=GgEu|NYrH8ywH61VeabRh7{G&OVt*S#OlN<(U`S%16^L3=Ym7W(Sbi3W zB(s%EEviD){EInC|FAaEO%pgN{R5_FV9n6J@?=UUbz8JhNOqgWdDHF;w*o((U$Y&y z=b`)9w9FQReGFM}|D9j#M`;xR@3X+3cTwn3diO#QCK~Hx`1u2@kEJa467qOTF7fZh z?>Evrlp)}~+$!l!&`WjNq?2RMLc&J?t_)5jWgxujkY)iDLXmI@mc_@^Qe9|wU1~*? zf|@;Nnr%r#HA^QHDWo_?l$Cq~E}^k|G?wT^h_s_Qb@9YJs+q}}l?RasBdKLKV>JEgJ}Fn`9cGn7bR&r@|Gxz2+DW+YoYUC|JXeKKk#L2mG~y~Va1zsO(cM7Tp_>gTm>)#@X?;4X zQ)putaBH$`VvUq6+ZZjV=b|2DrQ*I$z(iyQ3_bgrOXqb?3v-{z8k2%d*=wi;0aL+puMXPP|Q-|TiX@&qwEBqbrJ zk-$h#vGQiO1S4p(!}tWc^L(Vu^Q!L*2Y6=Q35uj3+jKG<@E8GP73S9TUIn!uFOe}c zEt@E*N)`fRXxjEjsOjR!PhGSP(hpb8#v82~06-?*nxHV!&W1Vi4=QOF- z_d7tvtA1m)(8|{zY9oRcjpKQ^vUkE4za`!pu?I;!HDd23y=7Jz6a*yUW~4ge4u{)e z>pP2Q58c&6l*!vDr+H!LEUZw^Nmp;(5y`=q1;>)|!a!v;c3lRo6L9ztvrR{}&#)zV zzM|y7Fd!UZ*McmE4Q18e!ruu`JN6RM)#E38%rPwVZ*`*;dCL{BdUY;EMqgK8X@fl~ z#@v$<7~B%jJq9n%xCs5wu2Y|2^;WPQ&;yuX;7`ED66ChO+h&kXhS><(H+Vy+D-^!8 z;|5|G2zeS|^96(SI7x;oT?uu!^UXUeE|Fh#@h z>~oEla^V4!fG7ieL>D^Ow7Qzn6Zg;^(6vYc^|7}w2DC$CWtWF?xn9(sx<)6gOv2L(xqo7 zd}t*i=XE}_P2v_oX-});wTRV{$*Sh?Z)`vfN1}gh4C$^Q#wLhVxy?Wm)}C?Gf55S{Ggj7e>KW z7l;PWHPN{6#N@rcv(7z{dP`7{fsTQ_JlB|S-MN4nGU$rfju_wlQVa-q@#W&p=(%>= zVZO@*u7vo8agHePn{52F$S_rW`t9l&jg4}=mUui3pgJiLr0#{l0r2>kIDR+Kk*~h- zkWLF{7ApaNufX-Sm(Eod>z93&x|tpcmEqOS9XLK_^}*gmsij9FtW1dLSgv2-sIPbi zdx{W#uhG~IT+YmUXzsc0hR&)TFC4D|JbHm)5^2oJbG^lb042pyWsC5h`K9_C0={gku zxu*h{${EfT#JB1y6KS{Be)}E)Y704_IP+K;JqL6R<>oScarnHYKB~u3)|=_esmR6) z;0#~X9H31zbHN+i*1Q+!n&TwBJ?VQgTcx?BX7qZsCi;tL$LjB0*r zK!Tx(h-CV)!TuZ=&uoX1x@3cJ9Hn4^4<+2xs6&J}k8od$_gDT~ps%sCwaSYqXTo5u zf3pe;kga2bVF_moiSkh3*TqVDECP>ZOLJLv|3{P0@-l3L-^6U*$@vbq0v9OMSP;W2 zd(%B-;mGb6q?Bv%W{OKMzy|OFMfF(ZM{B1dsGlD~epdwRdi4FXf!;l!O(T)Dt70eS z$=lPwoEz@|r#JYhu2JHtvpVt%5_hPLCcKE|Oh8)~eYL0RnKYid*tNcS>U4^|r2O5^ z`^Ff7P|Jf@%Dc^<@>gRh`-AU$#+GL#Ng4H87eZQ^*;^N}>;_z;3#C|O*eoe~5Yu-0 zT;l6~A7SLVl4W+{PmPHK`n9qf1y0}E~8^(p9WikdD!Ts zNjo?DcJuF%Bo@(*v9qeLLVSZ z?sis-H%mwBS}V%>E}#i23%y-vHsL!2?#c}xpjNyWwt*z>W&zH{ZuTSQK*m}X`Ia>D zzL+hbF`uoP>NyiW#oVDXE0h}S;LNHX)ca}k!S5Xq+@g62Ez|$^0gEC}M#66u&+-Oe zlbxy}`qW7&)SmkD;F^p?YYpZw5rtx|u9IYV2|&!lF5b@0CE?i5XY+piVed_O4t>7y zMd}G}lcn;}KyW3swF!zS;)j0rU7np%R?kA}qO*6?9h;$j$9$jnJZM@eY#D^HS-{t3 zBQIZmvuV!=!9`W~Fn~BzZ*GZdI>IpAK#78EG%lifa?;jps&qt?p@1a4KxOMgU-UFg z+2W>OzOiVJAH;HG_f0NSAec-wx$BdB(vxylXu&*wyAC8UcZ`0DCtsgiv}Yzmj&F{G z7vLw&-{|Th(>Oai&&(;k`skIE5pd0l7-os5>Accz6PHE^oLReH$-y!4M4&$>E^0hOl-v=g>UPp zHN;1&UM8hel5$DRMQvdbrvH&7;rtSKF#hz9el0?Hh!zdH(gyywp+nRu+VRfI$ED4$ zmLql*#QA+znG}Y z7zg<4Y%;Wb<8|o4*ad<4?Es=kWi9GRshb$1fPVl~Vijtg1zsq6#-&KfM_CsZw|JID zmF!36&ZkUIfCt*P6Eg-Rp`Gzjw%{bfCpj<2k@vBp#fex2mXMPuq*>#I>hKWE%*1`Q=C=00^a z>R3`O8egQA9^$6E7J1A4xTJ;!td|@4(9G!o)gG&sxvcu~NRyEiAex&-eFbGI20N`n zqQ2U*C#{|hfNu&cA5SDqw5S<^91^hlZ0rLVxCHA5@lw26p${9JHNjSG6TAS6N2t;r zr=s{X3NYS55`t_*$|I1-oeXkQgA{jkc1E}^d!k9i{g;B zS;>Q#-7QNhM8X!Ag-JpvckQJnhVdOh>Wla@_#~_eG#9J}uqP-XeFRX2i$Vu;PhejM z8zjd5)dkE81_A}5`nS45U|N&V{A1a{tjKeM^ksJcX&#<60^PCyJ{GY4x|880mz@uI zXb6bUb#aqfcSKwOvAzvHtaO4Z4`_nIqKH^CMGi;^v8Hp2*$1Cw4e2GM2z$BG{q>SX zevYi|O>!lU^Bq};ECd`ppvR(!VEW1~WB58>s{GY2U96o?JZap2$W8DSAuo*38TC$D zAqd&EsJOo(#R-haj2=Otx~|u2dz;{KD#$1LUSEG z%Do5G5+{=N$V*`+sQ$5}-*X#cc39DO9d2KEqs?G|8p85XMINcZ&{m3Q0dzwSc!#%X zJQj>>(Ke*f`rR#vQFJ*8%=TWTk)ZF08ZOm&9v5xWwm(2JJ@Htws|&_A$d zb%nSBkRwuK9|5@exsGU4T&sIX(14Qre}hx|`xQ}+K8zF?>s}w6JdSc~o5k}1d1dG< z->p}+FT_EZ+_8GR7ijZn2MQWhA1E}s=}AsH* z)R{tQ7MEoOhzW9(&k}>ZtSC^yH|LmbrFxPY<;ZKcFcE>{6Csxy<^WMOpQzw&vKvkm zm`eeXJo05FPSNNe>I&uj-lUE^Jx@jk7t$8Mmxh1f(Phh!W8<6>=L`No8bx0z2}xzI zNkeOiq2aa zVWL@ueIhC^30+3f9~9v45k>McEY5fecd5n3r>EgwMpVC7f5(uyVZ#iPyHcguQ;JC- zi@K{I0a(?t;pUO5=NRdZ9gozdKXQm&yX)!5@+=KK#3Ca8i)HyuI``UH zk~|d3@6!g=I&4MwwL0)srq#Dfl9<6O>18FSUc{!6yXPiAjH2d2sg%k2GBZ$D@#Qdk zrBg!Hn{tV6Tq^zb`6>y~@eE|P!L+)3Ykf!CbO`A#@PH;6l#wh##a2yp0gq!C+CfKI z7-l5der>e7VyemYiH`p*-s`31LQVF;;04kgDz*~UP#|kUBf3Ubz;NOq7rsbjx4(@D zWz_X$SSKhOf>S{x%@-^v<}r=zRvU|}Xh@DrcU7!b2^H#(Z#|U{-_ArW2KlEs2Qwsx zbBA@hHs7Y&mafrcE2)V?bSg>Fnb^&9<&{XCWoon9>Jd4o5h4gq^gee9!&?T93Lpf| zZJ3znIR*w$KMo>A?J{H~TTsh8{@UDBIm;H@3F-S5&SqwqN;o{;-j%F2c0PYC1k z3*6Kwr6OcF^_iI#I>t$TC496WIv2v?c}fZQ4P$3#0Cv3>9$I5cIX(rn_FOpTuNSy+ z5lUNkkUrWn$T#ZT*$|K1X(z?wf45d?qElaHMCmMGZv+~=60@J)D8QzYk?ytTP;ALsLGkY9oa$!jBaPY69>pQZ_Fu@A9>RpG@rfVt zyR%Aur}GII(Ymx4FksqNybWlp4j_tFRWG1gsGhJLXd2>x7y(2$!|l){9D1sVXNKVc z0rtKzQKXL|5cSUjnqFlo#npAknfz#q)S{Jm0_9pu)j_2Qi5rd;={m1yJ4RPPW7^de zk-FnH2Ag<|38zzBr2>N1GABu^dr(vIoN-O;J$h~nL5OVN*Z`vSOoi zV>G|VgG9zWXx&tZJ!aCC4t}j-yH)hoWMI)Uu{#jPo-P%5*v7Oq2X)0{9sytu?tY_b z9DW=jVkG8H`ZyKi`;LdK2P2*PFAk|t3LvaR5-j>+jAm?N#WDyq$8m>NQ$CVlWtzBB zhPG}R6ltBe*?C6fpf=)a5>IsB21S`d{C54=2h*wJks5>X#LcN@D2?N@M9V#Rp|qp} zVg>TS<(kNqp89hsIQR{*@B@m?WmxQ-z*L8ZvZ;(EAnJ0?kZ-QpNFvl8?Us4mGA?Zd z=IMaP1VA~28s!x_aM@RI&^^J*!2*2^@{y$`tF6Sshx+=*p|AMAsS3AUxdJtPx3T7a zc1}Yt4P=T9TnleW6|QVry1H3l`nFt1cF< zHv@?B^WWL@&R93_Vp92&5Oi9WCP^4g_>j<3$gQ}Vn4#SHqv&3Q0`|P1f(Pz)0 z+k$dDOi3E!k9S?yP%(%A-UAW2-VbZzys77!U!=m*K!oCpa`B6e7DBVq%5+#lJOJWtf17`7T^N2E3jgCV! z0A=8XbW3ARG0r#AdY=nrfPLC-t5xmsnB3#>@^5H2w%YIF%tL*}SYmmMk_LHPQwpSx zU~{F==dBbN4nW0h%vO-Y#`y7zpfH*6OsLj0qHe9C0&Mn`t>8VcV%ic5Iv(s$2mu!% z-3t-45j0cMH>p`vH)PNM;UGt+QVN}%o_$ppJ9QVEmMuJnvnnt3P6E@_{0GA-BPRg5 zhPRGwZ>w=3G@VKmCBY@lcz?4v^@bPiNT5qS%aYUSHC4_bfVfPTYlidRhkD1trl3{{ z!-!Tm2`(oUE6Yv5opr@HenBBYD{(@ ztPpntWca3zKMf=bo#cVy1c>6Hl`D*Xo#^QLjuKAyC2RQOYWIO!E5Tq$bITcWjXxCJ z($4vVE)bA!7h=anqBtN1psLa|WyL4`wRZS8&Nh(CC8^<~C|E62!aF?ASwA&r{HCat z)Da_zX?U8*r#akh@f4A;L%T5=c`-bLE*+uW_d1IWY&+}50y+x5Rs@g_Y7h`WR_!AVbeI%*C-XSWu2nmKcNUDLl@GNqZrsd|?t z=7_!dGbJxBvXSpFAx+U4^(sUNks!kSg4pmCh!s3BucSL>d&AUgz-UhT!|1Ijx2?qT zV_z$>4q3RZl;l=jbFx->KL*Q*P!bhK!jHE!L{u#Z%mzb!4k8hPI=Z1mL=#Ko#uQ>H zqlo1-$SzW7EU(pcfvhd2hzvonAM%DkM+|?1+wn1V|xBBuU`Xw?6>cYz8>Rj{;UJ7)8B3id=}7 z4n9aS!BL=eO~c`1?-}l}-xK!-5#ao92=KD=+{A1 z9O4-)JD>BIj_EseM_Ko4K0-E(qrwCX0%XDjYJIAOS}+<>bq;xLqD&NFZV4V=tXxE1 zt_)ZLoKB1e5UK!mZs1o)TPeRbFaT{}H~awz3kxpHH78H;*t>vVSq=P!_*eC>_H{w@ zY)Hj*-KJqZdRnrwdu8{^Epi7>2u}z%2ru4jIW|#8v)yR5o0!auY?i7)@lZX~Pb!r{ z*-WvQ>9uNVF|`E13~f>libz51+c8C?6ff2blUO|rxQ3Y6oyeAY5|&5lHD$%>NKQE+ zmX;H*lPm`s9T;n10>?-S86_Mq5fiGBa7H{;3xF1*lNv7g44o6iM+NsL+a#womCfOD zwAzi0rqWaybw-t`DzBHOqFh=_Z+cAK2hFV?JiACJO{i@{p`AzzxF;7{^+Ia8L);AL zzOK+_Rdu~*2qpHgIg|_Sgbx!F6QX#u(QI&P+xCqsrNg@hqgBN|+Jo*;9lC?&R*q6% zN1!3p6VwdUbflHku4{-5<-Sc2*UJxZ(81u@t?*X(u(MU?b!uiW8mtzxWto@#60!_F zKW>GGE=>9`R|JlxLnwm7kR88W24vXLhUFvsId`9*{JMpT_*z8>;pC8XH5;uqqseBW z&n#^*N7Pwm>kQWRifDiSb*f=`?2hdjWi#4n^VP=93u7R?_qvWu0S2KC=G;qV=t6lKUiEZ1F4O9V4MVGJrCDb84t5nYpMRO&7h2~JVNA2WLIj9@!zeOX9iG_UYLBJM`fw4Re4uC88srQkCX?x=77ERJV57vwXgA{7A`uD^iMG;7HR4T!eEaVry$NXtr4Ol* zg2w4hB3nv}KWTB2yRsIjH{3n~*9wS2@z!-+*VWwNxbnTO>$J>7nn$juxG3g@xrTp94?f;5%0O4_B6A>8ahfE;WO50KAM((Pmqg zI?+%(n|7xunYQ>iui2s;-f%XU4B4$+kT-M%tZfB$NaoP?5fy(+RIT zT)TM7siCieEBMbmjEBvbVX7Nk^UqD_WedIFnBcje?FsQ%pWQEdqdQaG8-I;%OEOr{j>h7FQPCFON%&>NTM4{A}Ov)$5rg*BB)Fbj)U-J-bUi< zmG|{p6jg=AMF$U$UF?^NQTN=jG3@N@PTYO8fxF*(Z)SLNe(W;tGN7@Hj$(qp)n7M+ z;w^#^L*y@XhB}U&OUSe^#DyTnG9o?!?!hyz3x;UQ{+;EtpJ&H0lq|DNew=B!#_z3# z+dO3^IWvY~7-E|%mUY%=$iYC6#MSyf9s2SBa>GLcb_PN4uYSF@@Iuis1a*drWWX2o_n>?5A>^UnoU8K!6BCZQuou3>aO^Dm`{(w?C$-HgiW$??$b?`G)IuK34CcU` z9LNLi*ni1y5&=F=wt**iYu#a31{TY`O9b1oY~}d{_Q0Pk!?aI>J@(eFYL;OcrrD;N zs-PDiMuFKwIBs+0d1u5e@)AB2DQJRjfzoO^Z0o@wmVtPdvCKV35|`K1<4ibm6D>E2 zj^o}SbUZ=mMmGvVw|bg89QRhsu{_Tfx6q6W&yFHg&oSjH$A##BYJyVrL(wzmTsiiP z%dQ<+gEz7hAscZhBO{Rj)9y8Z4qiYHV3={g``v4^aqM3Fv@4_4E)L#2oZMw|70hLT zH*^8sH03ow4u(&I2NXPpT?P$&<_m*)6Rk@lL|K4-Q-eL|a&r0P*4T%<03Xbp!JHRh znx^)l2N@)fG0MPxL*1&kdwKZgaChhOc&}Ow$IO{WgOFpCdV4+@$CzOb?|FMS(_${H zF=z`WjnAbtPsXyJsOAeijr~tKr`z|19o!)|_scEs4@X`)3_@lO^QfmVf$883NWXq=*nbv=AK}Lbk9U2I2?t@9gD)VK;b2+5p`XpbSJ=M*&JbVV0ue#vM5C4Xe>nQn z6x1CqXG?iRG!eeRh_(ReRu+t!`S{)e3*3XdQ+pg z5AXF?f9br#bZlx4dXbP2(BJ)Gs${9uRXog3g!DpuTB+x$SbE~XjUhqjfGcGJ9ERa7 zBqSu{^bvl@8G1j_K0*?YN29pUUok`^28)m&4dI7`@VJkS?=;srAv_Q$4FBUJ1(WhX zn8UE^*vaX=t9ZSeF%1666-9IWlks~uJ6GwstE8ZX-^q(7_=Z3JUwo09bn*Ncg*$|! z>;+|%6bF+TncYTePN#1s6-)75s(O1N!VgwmCP~M1%sn-#rctWeS%eXCT|G4Dm_mAPO~4=z#qRy~U_A6;@igQ03QIo!>LVgiD8oElXtBS_%FMi>zj`3~ZT z5UQ5Ksc1P+2L!X`sZ?PNh<*(de{5EV)mm%z%@Q(2$hk0jMa-Tfp3!d9!@`_wOvln} zXbr~oP}(l!x`oY5P*8ZQnaLHwOexMP$3?RFm25Rz)tGwWDy9onOoB0qOpw+6@SM># zy3wvT`g!#ioR%{(5)BCk-;0uIme3P5&+^-$3W5tHwIx&}GEH;mlq&D=#VMa5Ms?>& zR|-!pjcPiXC2>6UTf#1s1;UWcWvErCPoYYwwvTV(EpwCFkkp2pbZWy^*EpHGEwyc1 zYQJQftCCYI9T%O2xY{R-H$}kTCK!;wuy&4YR7yf2qIlir11-Fk*o7s{Uw5QCSGWiB}>b7y2& zthqW}$a8D(&BdU$b9YQ@Rc-MpW5?fOR|f(<@Fd|9@$H7N`XYiS4!L`4A&yrBK@jJh zF%I$V;#Are#5too_vOBbpyKdD8;KL%b`I{;!MXHx;qC?cp=_klGq5J4<-b8gUd}5A zaUJ;j%uqeKs$vvloJ)6fFo|(U?i>>bi=ilrwerRW=N!($8k%t?isrrf-jF1`w4Q5o zYxWqTT5BA#@l?W?_oEx#C_0|zD4w8+SI#rdAS#|GI{w(Qg*hF?W?4RpqUa{gPbtgC z`GO~kqCL#HfQto***XD$3m#|(;`IWHaW4pBoO^GX7cF*U?kvQ3=Mac6=OcJX!0bD> z*VUr_Owlww(^H3NcIDi#-;n5oajzcx&5vUs$mV=9@D;C#iFvP#3&Z8Z7rWdM=Q3i9 z@fhmBc*KqO?w~`*eHl0zG*rgX<;HNqT{L%a(cuDqNP_6zc!wdG$sFoy-rJgyQA6mv zJIL?<)-@)!b1?Ku&#&gXuB*9%i#?(!=D=+O()P-)Siu1Y9oNR~9TPiW&R6KJvquYI z{+ipN5O34&*?sWg;>s+ z>--50O8DP5$AB?jGFBZI(M3xnIFIWtfxWUmms*V_-kW%*y8bi_9ix<(6NFpEUMy>5fil>56o!}}A z3s*T;U)0x#ySNFi=A1tscp>3+{-`%9T&>mMG&l%XYf`v6v%x`*zW4w}15{N3?PUdX z!KgE!6c2IKiHBZFXX`n;;w&#k+rq?8`j7B`g|zJ7yT3|vQ2`wC?%0p`5Q%sIaqaye z557s{U9h{9r=hm2`)4idrlC>OV$(sGv%0F)9v(V(-vu?hv~(!;gu* zw67JLsH;fpG#r}^O~rQS+%I1Ox=+hG^e- zk)E12_zhipqo*pXx>=PM`Rq*^RUHy1;c%p`-VYbA2F}3boN;Fm5)bJH>q9qA%y2!* z)ln&Kgy4x|f`Pk6jT$5u?bmpihppJ%dO~`Z)Y;LW{BH3!{#PIGQjL7@3l_8SHdZ!T z)@5TA`nVwyy0MW+p!h}HT0!2Aoz3`?fSiNH&2h>RzZ zLDB*>hZmh}!W6%4ihGR{Z>^|JQR%-jTFwBO5svGVvdM} z&qeAA-%aH(<0Nys;ZFoETA*wTY(hl}6CA43JfwKyN&1`XKH(~U zw$J*k*K`^!7rQcdhKDG+cq<5)+EAR-hZ1+B&Sw&ZME#)XO(mYrv^6nk7JE*tSH zQ7w)yqNmtTpK7Z5)cPaEZxzK)udhFm#bW$^N`zzn|m7p(_o{ye7v`;L2{QrLRTu zMU=d+|L(5I@WRxDT>U=$g>Wdsg3Sp(KP>kP@txNAV^Nyur}|^2xQl*~0QHU~gr`h6#pTF8pJ`!BISx6_AX_ z>w#h*8juWV#zzFI)Xz^6Hk8i}-(s3CJ6njDk>oX02wZx1V5T~rG_;R~#s#iq2{f=1 z`ff2}k05MdW+lZSyGLgRGOEYhK0oFidTN*2jo?W2h-?ut)zjes254IdU}A^g;Y(an ztyapXbWw}w2e8A7PP8Pd3ki-y#{sxbg*zdDXE|YjuEPL2cF0ix@yuPSIXN+=_{{80XRyxcMgu?JayQ}@hcr=ntKNuDW?_QsfV(ieqt{wC!G!|wG~y& z#H7{wZ(CJOsTe>^{T5Dok!1IEVnS6xEI=$&v<|c=vE<}MEG(#<=mRpE(QJPP&2#__ zV239_Z~2u0aMVxgrK0g%eg~QkJ%_4903|6aC>{%MLG4;Ns^=t!aW1|^&&BK0kFhbv zMWzFe)DA^vMpoOeVZ4CxFGe^z1`Lz5N9Q@lRF#xB$JjVC&QMbNNT!NW#a^^n?UY-+ z^nO$~s+bC=(g6eSlxxZ10*b}Jw217HSLtf_6io*{s-;%^UhyL>og|YZ#f7^7xBSY+ z-S)<*cw1-hz+k+>(uo*t`bZmNW6UUX)5&c1&B1o^k!(aWnw@8EXSeWd0NB9d(m_2Z z2kCO)AfA?;@;E*R9G!@izF9WQR)0n1cZv;ub^32y8-Jr$!1Xrz=yLsxr=jvY0RJ<* z!+=Z&unHNNK^}m{tMr>A&p#31@oR=kf7SR~r^CrXmIP@5Mqih;AI1R2602CLO zA%ovAJ^(;F&RqkFixwxG#flb+ldhyyO@Ky3daYdus{{q*hSCg+vPm(1`I`_Hz-6Yay zGn-yC+c&d|%o)`9{@%G1b0<9zWuHJviWDqYO8qzQW{T{Fp zJ@+n496bzk#`$hhMIviZ7BUy~7hVKl6)-R(WJ1CsMiTi+dU}MQ8L}6~uxAT*hXWoI z2#E^?a>5i|Z~+V73DDI;s5v8{(s8_;jt@L;2=mf#eQ>;8j&9e3ySXfcd@#jan&4Wu z4^enTxkZ3DE)xWCIFI6vOf&oD3a;KijIQyq=J}4f z@5uc->3vnu^56zPV7vf^VL}WP6A}{^Ag$2|B*1WC|5~k9tJP|SvNq_w_hOc&V@xBH z+P0#2XEaJXIqCz{<_4v)HY~08)9dwgOuJ5-0i}h| z9ja0Eyd3}8iLk)8n?VB%%1X9W>a5wIT9vA~R9FmsR{p3#EMVpb8IW*yk&oXfGpHi0 z8b#PNU*obo&+|OblcOF*@rj-%ssvH+Jn2(UQ}j$9v;y&!PY)>XS%k0dYn5UxkbHf0 z#NtS9npyjZ*Nis$X7o=3^5AU6Tk%vE3J15QD5hidY2_dP>skWzERZT9l7Wvu8V*rim|#b{#bOBjw16zuC3=rAo!|iTAlTi9&G{qbW{ND$a`F zC-JxNbNnj)jXwlGh_yEeFHr*Iaqs72{LyCu#z9>k>+mjPg`oB%C|ilc3Wnx>oU=%9I8r=zMjmPf?-p7&~=C}h4&nE67QFB6t`A(j;R716Vo zc_j`XbH1Y_LhESUjJD(5-s=T}#c(W#3=DdiuMyku4Xb1fp3&r4qGhRuJ%q?5KlS;# zJKpWJufO`{Xhb^|J9$-;#5r3FNSpl38qy?9@^Plj3+9StY*~(5L zB8VAnc55yGQ9!Q04OfEg3VLV&#)KX{IMCB01K6fw{93>v6MA$2mIN3Qa9yWaJbY-W zv|3eftri?55h+TLzB`5Aliyj+N+)x~vLv<(*x)Z$(9K}RDF--H{>3-og^E96v3LVis8I1Sp2gyX1?!~mQ1LLH#kXL=V(}V2 z#*2qx@-@6bVVR)(im#ytlolu}_vK==!o|&PxWm%RBr};zqn*iQVqrZ$Bi?T0!@{&s zkzFiISSwbLCM!&OOH;vFJSAkYSS*u~iqYs*n6OGpRNUfQ2fB@bZXl5^1s4$!Imy2R z|LXpN!4q%dgc+7fbR`m4%oJmiDV0d0(PJ_1R4(6DX4N|D2vzFe@0Bp>S?J#$|uwG`yz2dQ69Pm@$OYsGErz4z&oS zLZJ}O#O>-U{YiJNbcgazh-$Vj|Hx>U>WF3-WVKjnt_7wy)~j0mSt1;S=Um@CLtwqt zNY8!rfvr}1-;;%bq8iamG&9{=9MH|iG^+vSggKwJ|8K$StzOQ`9c3Adfp;Wls55R> zU^D8;^xM%(iai z8GA;bkjH1oTwzU0$>QLLuzKe85(abw|z_M9esFk355Xwrjg*`|KZC zYoYW!%&2+CP7f#|7f4`r!;@&b@i&{xQjRZ_JIlaX0e9nvgc;cr)6zrq6a-DYR6;uu+%$xHIN35F2w{XQC{i z_X3W%_ul>EcS9cG52NOym_v6E@}V$7c&9J5Z&l5hNAJ%ko#u~B_2nf29yjL3#A}m* z;A8Ohfq|SN?khu`G<$Q`d&03yxtj@R+A-;{Y9X;4?L$+mY*aLS!eRwJp;AOpPdIR= z9+kR%)@wRV_rO9>&6`4jSUD`rN_F7X`|1H7|0HF}SFkwIww(?EqivY9$tS5W zMi?nfYa`I}2(GP?fGWsFjiHd&y2q2`|36mQRJF~-tcP8e0CEE#hrHIR+P43#RtQV= zB_R4Ho&VGMa6TIg6Oa$7;Ee%6FF62_;FBb&1Tuf*W@Qlw^O1}3rz9p@9}2Z=i80PP zSq~4+tpvkff?V4)jtogt86JFPE7%^;k82^78V!%+hnfr_d?=_v)ZARW}-PUpX zt%JNw(G=VD%uH*JRb$zN(BK{-WA$Dy+0G~AB?M+ih|Crei^YV5d^j9C>tyjInb)=2ATkE@A`-cr%OZB4p*(nTyVy5e-g^)7}m z%l3&MVtL5L+T8@V)u?oDH@6G`02*VI02~$y#={YD8b&!sxy1+6B1%UmlZ5k0CdN2r zj3NpM3;+NC00000003A(50`xpl(gP*sS?lel|K+YoL=tG^?5B5l$71;BsJbFhRgom zZ$tIj@_$w1m7lu~KAbhrsCjjrMkaM}_%}USC!TU2^nJjt!K58ak_x0ZY{_Li!bc*Q z@i))^@YWGf4ahELj5}y5q$N8ubLvQ(B8Z#;?G_d>Kds{gsI-_+giex5^}JCGD2;4{ zyUFAN`|JPaha|p@#PN{ymNIPMoHauh2Y`96G^{Z^5L zRt;}1nlMthAj&7;>*;(MRHcABBlm%BNqZN9pdMm+XFoh3>f$`t_riM)q!Lujbp8W!z zr%{0TKmxT(85C?6zWyCZlrD=m_6__M_&qF)`F6$xc+Vw$frNMi<}4E-ZW7PFT@>E- za-+4Jkmg5_ZGcXp1!Np8bahz68z zO4BZLfgeFGmebFwRVqC5DeJl$BF{BXJQYZ|HV_CVa-af7vqqX7L;y_{{u$S`FHOXA zTtOh|@UDhqXSRE7HcuR|WBtJ>sXo8yWVte7&hk#Ke#1g$XeH(%7*%x0@Q6ZfQFK*5 zpr9ecPqYrMI}9|}GVG;gyJ%v~@Lnp1rHTX_tALXf^?8}Em1U`(*leVTLW&aMI`bD8+pF#KfMl8}d{S znXy}ZDn2lcN1(YV?PqM|%Sl|filB}_I^(A9n@u6)Afdf2LDt|A;-Nzbo%0!RN~S#> z0AC+ZqF)0u?&L`{$v>IIb`)+a9ZSZH^s0BZlgYuSk}hdV5{YJ;M9jp6Ai$ok6>{SDG3Q-p{IB+b&3M|25&Nz*+8tN0uA z^tY@{Sba?Wc?gDS(sBaJnLCI_x8o}X;9J1zrJ?M?IuVl0B~^IvyH!{yE{Ev~9wumV zl-CBBil3n?S)$YF9^-~jbM3LUz!7s}H&AjS#9pc7NXbgfXCJ~d$}x;nI5 zp=Zrag{5>(cxksc0(8(`hzMnX+Z(sD_DmPH2QnuFRCt3WiM~$0#AFk8CPWzZkKbke zCV@s}%Co?*(JlY(V!huSai@ADgYc>U`tYQcNg#{uejMrH$yl7{@Oykh4Ar)a}XEB6B2Wt~BtrP_j-=ts$=LMeWI)vZ#n=o*9mWERdgADl8N)KS8PQC~dVn(YGC@&CW%oY|}GXD02Bs``**o zdPf+MZq06;(np?QJqA)7j}RAP=mSWc&}VROoEku4DL5#35=flA0tV#kz=B^409F5( z{?vLgYGP zc)`?!&acw~xcq&Rv-?5_^>KYBD;F_56WITvt^+#Bd4x!_v;1}RDu@h;_kdC473!ms z)2${sUvKNN5&x+n2t7k5HtXAghRBP@KE|kiZj4<^;*uhCjsH zAZN;7?E+PG-7i)-R0W`SGMk7DI(8&2RFZ;3N|YVo-r;*%iw0?9FPVL^h+-FEX{3NT zX5n2`{%`M6E!uDhaQbt#NRk2+;v}OMEM3><^)^`Zj6liIUp~!g_j(>3?U&`OU)&R> zlrrxCRkX_zdA3D>fpVNNgv}>zN3;}K_gbK~OGi!XdFUkak;!0pv7Y>JcTwN-LSVDC z$HooJFWy;*rcmhA(nejutd;OUETcuD2SxeB-RU;o;gP{SC~)+vFY4I~g0>RBe>K=G z-?`6L>A^xeUulqBq8UQsYe5

Frq6vOXx;#_Ma^oC_}iyo%(XK@y+6zkrKlO@@0& z=I>M9RgIhfoV`SQZ0Y|%%aiVnk)OCFO@kTGvD>)_!U?^mrR08{wgqC(U{;tKSOXjA zsz@{9rQQ^SDIO-SYJ)(b$CTmXZ7S;B0YQD?nuV1=EY0mQq^R;y6TP7h-|nWAFnQYC z0RN^z_)yx`661im{<)s(OH$JiQ#w*;g4wVH6*-;x1%S9K02=p8zdNK&-rrT{sd$n0qPA%7l0mJ^|?;2 z9El8ILnZ)&Y*JhTM{h9rjpvv1|p03wFA5B`-I z@ECrqh!lv|G6Mw@R%(I5GhV@WjYq7E0_I- z`gpE@X4tQ&NTBaMMYfmE3}m=najSni2YZ@?YlM1xQsyHhr&)0Ia690-NN*z%L*3me zss+XTptHO@$|iKYD_ozyRqM=q%sD~>Kmjfr&)3UWA8UX+!<=cK6Am9Ot zc|bglnocWHM+aB>6P$|is=%S()?!!kgO&5`cqZb5Zu_1K#w(tk-L9vt_PiH|UR!1a}KP%;ST3z%}bFhkFc-d0N%o+); zuoL<8uyQe-ltE~Ryn_S3hiYhEktTV}YLus=jCiAuBGhqaNj)XZ`Apn!p2|#uRQSl> zdlXRK>X5X7q-}>{Umarufp$%t{h3IQUD`S6lG77pXFTX!AuU)*w8Dbsz=f{o>t_DW zL68?EYD4LgKtsz-DoGKXeD#$u3zPs(&p!hIDo^&Y`*&uywJ98}P0cU&oyo}zu@hBH zt|bPXQT$h7Fw6>utC7zPUL+|!{;0UesEY40wTTPg)r28@er>)!)edRzzxSZKE@ zeNdQZTewyPBmnF~!il%ts4gxc+5b$-JVGr@LaI)3wwC{rt_721aA2})rp<%cJTguR zdI9qOQw`4W1t#zPCHfuoRw&CeROvQ%u3cmbp;|%RL9?;s$@W&j2=US#n(7=LS2FQ6 zxr0|YYc@Lok`@`v>FftG2d2ss*{{vX3d`kwnG@fOelG~j;)jMyTjruP;IFVwc`V>( zp7%UNFeE=)N#&-Qb4$l5Fg!jU$>Y`!^XLOD44yuaeuF}H(b!YQ3D@Fba29i;+N8pv zy(==;V7dyYVpJ+S%Fmta(WA#BnIye#QB&wq{mY0taCAMNBDTzB)6OUwH^L>~((NeJP0Jzu)He1u3Zmr?Sz~>F z5kwg=5FhhlqmU0G_c{H#lEW>`pi$IGhul5Zi(oR1pFz}E&WWZ$#<-*YskVO^9EI-^ z*vGL=K5TfNpDAAy^2)eTLdkD>UYXjTk~I5!qAEa!nweUD-^U*Q?USkp@`PeQ#o5Am z&PG&LBIC^D5c=Fzr7Bf>-Rn=qvf47qa91uMZ)gbo%p<-Z#-aE~%76u1V8$FXQe}#z zIS>2;ju3YEV-RE23NFE8>CQ?gaQh=lfJ+<2$?2JP8f0c&bH>c4sr8oaGb;+G<@w%v zPtYcYnc@9C-4pqUtZ6dg8o!Uaeqzy}XHZtn(N}ZHGw3U?0Y#XEWl4-G{`Rl3w{K<*0#*Kr@7Tu$I$`PGt5|JrXE z9f=-&j>j?XG83GKR6{cCWX!?d@KzeM2O|h$3JusDBRAq}nDuZ{+7#5w8Iji|jP-A1 zYpf#GG)Q{qjsm zdon%|H?2W&72+RDAV8qYc?>UK7CnV43s_X?A>@2V%l^tf(&dK1d#Nde?+}bHIgRgo zPBPy``fnN8mx+@IeqncT8b0MQ4{OX|>$C?>Pr48TTXZ3cFH37Y zun;7qrqeFIlCh6aIx3Kr&-4uxFJaRljQm2buF#B*;LJU{agYvLu5> ztT@0JnTzE~tV^kezDWWM0FN8|jm282aF)sWZ7)j&t;U?HQ0unAp%r77Wp%VY}vLEC4ivzD31vCE+Jr@&o~plS*X zdZ8)UzmGV?Mo`?--b~GXx~*9*i{8n1VQ(?g+Vo**lR;wE>dmJ+gmgD4@oju0>_L~d zHZJUseR{2_Ur-0r2W5CuFw_o8e_N&Hk$nXN#Y050yxHXir~HKr!YA&_LCjI=CXbVagVn#Q17yH<4j0 zZp}|+;O95NkRxcj-*>eKhaEwDM$cW2A%G^4g}%Z@2k85JP;9XS8j9MRw8YRS%j{kW zKH=f4H8k$0T!KtN`k1_yo{{%9tng6bq=@96{)oLDM=$W*=YEO^STeb678q< z$VtY{-tP6S)|1lg&X{6H4ah~zPDa$#O=_VJTaL>}VR`Fb9*N8$sqg)9o%BhnNQJeU z&UMzZ%}-CuhInEh^>C}Kaj+*@OHTjetAD58bgOXjcWg26O6y#92^Xq1@Zn<=!we=BIK**vG5;-r41kBd0C6c``le-!0L@8T zO0uEJHp~TU0I$I>mTAt^(|8s@EqR0S%az<3aOr@i4txpWKuRp@gjZk@D2yb zuR(4lWB(C)_28umoyA|~(T!(|MFyePw@zf;m0}&xKOS?cNvCs^7oNak<-&sn$}<~b zXS)P<$IeFzZ7VP_;T9ur<~UMx@^g$|$^(^Ip0@m?pqgT`6F z7>P*yqT0=K=K9B0XhZ<0C@1Gk$d2@oYpa<>nq+_+)+*JF@K?qh!FA3MoUJpu)j^rjVNi`m8le!%`sB!N*TSrnu zPU8lOv%FK#Yfk+=g&hSKU-?kfX0wWrho)eA1kgg+x$_blzg_f@&7&TWYD{F<5^ zKyfJG6m<*DWxK^f5wjEBGy#=`ZF4|I)*M^6tPKm1Zn0<=ii&AP<|19C77Y;Kt^~L8 z_`Yfnfj4#?282ku;Yjvl#PaHHJ#}4JK>Dz2!-#lWVS5^In5QrZ(241 zzoh2h;bIDkYL^aO&%-SQ1%T=q&r;u64|zsJ|LVHg7RmZTw=O{uos-!|U1V-`!lPbA zr}esd?v*J1yKsucfC%dUB*G3AiC1oe#@wN2XfrB4$ZU8gDKg}$ZN&X&5#9w3Z{MH3 zborE<(f6Hk4)J1^b5yC}#f4D59l>sNW+!kGJEWmLd}4#EUb1;dhIZ!h7yt!86qr2c zTAFY=_NJZIztE5_I=I2teqEzZ_Jjb1b)xCWoumv&?0s`Z)&V7vqS);N>^s(gIdI<<@E{d#MhIU6(KmyQl-sUj*F=RSzLws2>K zAisoVCb}n^qqV^dJ3OroaeiT`>i-lPF6eLFd9|He3C8uPJz~KGH(MSrW)>EC{eR^* z7cz66xC_!Up8Af6#0LQ}n^HfPv7r{Vl`Xum_h<1-kycnF+mLh&(fe(6Y=E9se1o{U z4S2s{Vlaf5Y6!efL1V_?0_ zO~)oO*9ISdsS)~?gaB7o3A}CYTAh79Y}|_fL_aP{rMUw`Eb)f>t6gDM>BLNq`&2!W zaXrbr5NDSHm1Oy#hMfbSx;$c!N|LySOSs!#NI4= z19$X&q7;)>4&5nLB(f_%rP6@SdCl2B9^Zwzze)ONH^i51q9?MwF+9ttifTe9D1)w5 z(YH?yIS)>lljK3_FG*?W2UoxI@_hh>qmv3-$~(`w>6=@w%xIaX(`|_LdFFb&d@u=+ zZ@5L&eqG3bqB2%A#tUDzscD=JY|SG1n`iQOn?mu55vK0>M5ysi?JZTE+EY*$=qq65 z@`B^?I}!P}kZ(=2&Ufad@R7oNSO}eG*o$C1?EVhmb+GMP0%?0RnBmQ*;+*iUXXCCe%suO#Fq%B%?QAx3EQ#(7ElXzsGJ(M{+<)_jXZmQ15?5soLDBu5I<%B=~4<@Ei;;#4#IzhK@&%b`+Lb13ThlDxWe_88bqk69>e$yCO*b4^4=)g_h9pCWu>}_{O z%1o=?a{W zX?Ym5F^mp`xv2K%VqVyDLU?+eJn=fTnS>m2rWJ?Fzl3IR-cpLTYgRJ|Ru~XysV9r) zx9Jq0KT?SxvD9}Tn{qLg&_rp-A^1?FCAEdI1DGlelEuNO8S+^CRc`cvxfR5=l@=)n zyfOt;`7uJ~HFM4EWM)=@rwpg;-+T2zEhfI)@t%5XOV_7cj9q!&@MKRsc7Hc@GJN^m z!8B+b;<#6mtj2ds?Ps9cs3;(_;RBWgcvpo3W4$Ye;~BeFpl>Q*2ya--XKj2?1472a zafqut`6dIy-Zarw_3IRPe8!{9^(-9Rxys>mX2{5-zbp0@bD?kM(-tyk+-4}#fFJ^( z1qr4Gin7nmPJeMZ$}S-?&>~st#S=(i`wRXlt(G>@-2uw96R?Yk_>I<9P+d$Kq!Vdw zPm|N^GIw-z40S$V9INHT+&8m0&?vGZCDum{`hw}>_1<4!X1aur9X=L77Cm-IILLN- z7_H^>yD>DlokZTqh#;+SMExrbE|1M2f>Zg9#=wUQ(-4;gxK|DZz=L za}rVOP*sP!nqE;2ciZHlzc80UOqT=0C0uWiZ4~Z^!J>4;W?9rUY86M=e;K$@Q{_hF z%Bd;rU)4Fl)KNU|*}ubo0*N(YH;|ojD(dci7keu_j2s+t)D4LK?{IJ7d(N4pZ_j|+B{^DhkH_S^u{iofb={En_f@}` zV0ho5=qiaGjP3iWhc}#+WrB6yg)Uc%MnlO%PbSHIy(+0JOsLL3meC+jop*(-&NZ7F z5sZLLmF2e1(jR%uWSZgVhnhY#mZeVEsWW(G2lJsmV??La#uf@PLQm*3Q(tFG_$=fY zy|7lBxPsO^9>MI74{FP(_c1Y)n=~=5Xa&)xkx36OZAzX^ zE!SIWe883a#Wt;O4@)WT-#Boa%b!ce>&#RUkI0g#A=Mf3yGY$gY4?g8>g;#ueu)_l z{RrzNr*koqemCQphLwimiZm?&j4>Q~!g1498hq zp+&0kNG{9(GKbdRk2)i|t54pWTThnbhU|hHw>q$HH^?3>5U_- zF7*@rVVJL`jrV-$@xaM9L?2+vn%S-biRjOBsIv#NX)HFaRYEwNJYZkw7Lqu;{J}J7 zfG}qnN+3*-mD!mPgsB<6oK^_l0Kn9BBc&lr;7BPyes)KW3@Zjs|E8`LipklHK!pS6Q8MBMi$OtQ;@-fYn6i|;4TvcMgxJ#EMe5noJlB?k@xzKW8!HS`5A8DG5B3NjQr*?;Z9To|F?Lbu3~$aq**^=OT+s-W z`nf|Z12XZ)yDg(OnhqBB9mII)Fs)MQ4+H|j!U2ZRGP{_p#os$Ki5GI<3cvigYiqLW zz8s+S4)oGb`XNaztPDhrgL4kZ+LVzJz#MXg5W9vj{n~iU8>GQ^D5+Vwlw1LXf+0@IfwZGbRDU4{>Gfbl3hhg1vP9X?e>wh) zPQ=^6fYO4f6d?T>AE1x>1hTeXMCdR+siq8H6=~?q;aOwA8`H4G!$pOH@1#%Pij5wjy=iOtiWmFoASf@6;|RhX=7O`Z4cX+`MB0%QPYb0U_WFVNX;Jiqc!oA5`?Ptu-LX}VZV3YwPM zWq9Jh!9qh=NB0qdO32Xiqo_Y_rOjbcrY+^dF>nnAd2dh)kEqo6--e_GhAxHz=I;On z$Q6Q(#8rhu=Pqun0G#p#hq{ZL7%V9+qw{7hZ=$c+HA}>cqgeeLCvTSMgrQ#Zu~EiP zun)%_M)W5JhaVYjYR)~src`mhS5B)?a)-mv7~ZOsJx-*1;BAgH_WnSALASD9&YDgT zzPag!Jb}tr?{;DV2LTDotE!r*(^TDDmPN{SVLu5MXP3r?7-U(Se-z(hE@hW#r`9{H zutsG?Ag7!LNgjmASZsDK#T?)0flCLnako;2XDfBpl`d}^VVIbUV`~wbh)#+0$n0+M z=5Zx`d#!G_`dlWMCODKiO?X_T{FXl3qLB@2MiyV^e4{$>0w$t#nJ#e4f=>bnuI}!Z zm)(m>Z<4YzD1eGL}^!M!>iClTIm*JoxxRa*y-X~3aIrSzebZx_LV=Qz>f zT%d9too^T28>d{gq3a-_el#x8yvwE}-t)qz7)14@ z)6)s&M{qachs5;E{PJ|P@KOCFbb}s!GFr3S@tAogjoY!;J6Ughy+m@fo#HSl0ce1< z8ndAr*}=tEz{ab;=&wu7Dl#Ee9l| zmXL}Nbm$k}MWDkw>Sg}80EytRo=+BMakWTE!b+X)T(sVv80n0pwNhrym=I0p;r)?{ zC9;jzc>W~A61*w>%YqL`P}`eUbLpX)9>6tgX5u`@*2)tvTK(zhM{vtz2Eg8%CD0I0 zQ#FDSY4lsDBloUoU~qr%%4v`#8xA^cudc3gSH;;>=T}%T@qg1)h^Xj+>^;N=f?!?DWJdB>vzvWm5sXArSHY*4|x9; z7Fr$y=HnE^u0hRBycH`E(0)C`)C>kwBoB$3eIJFU6#XQEX6dX7gckejnqaC zO*}4$yJ@hNCFsmhyw9z(h6lFx-a{;ohWvPXuwKLWW;lRRG8?yfIJpCKBTO_!*ByMY zD#apx9IXC~+o$J52vBf-ST281!?7< zVhOJjhe4mn_SYrep7kdQNfnb@SOJ{oG#;)GU%kmmgcC2P)o)>Q+#pL=ay6O6hmQ+F zFgMP18Xx=lQ^(osnR$-whNrHXM&7&Ozm9(vq3HeeoGBbjZ?Xp}(Jd_5{Z7_Z?@}+R zzMA(0FZY1l<8V`&wYCUtJi5JowjH^Q?7x%{A729}&ezbgc5G2u9iNjE@65gk&B?vM z&olvaHtqeP^{ttH-0a!c!%O-|w8w=)GZj48Uu~I|1V?o8?rYit`EM^GJ_vC>sM*VM zwzL3j5n(B&Bn%}dqn0v{``Ewu=RhP=^}OX6T+e@Pf(%|#U)wOW^4oH1%86@1f=moau)dpyTeMk)|u!{&IVUz3A9>7N`OYbOEc0alpfJh?dP z|JC@DtRIShdJmfJmN+IYoSow)?4P@V|?Rv^)~@A+6xz>$+Nd$=i{P$m2p_qWraJFP6kADA4<#g^Re zoP9-%Zyb&9PuvJCn5@Y)1nK@BcCGdxfp)6wK^D~!h1r>SrFRczu7eTIBN6Z}6=ow+ zXYssVchu=@G}Yya z@*hr~RYQmU?p}|)Mw9k)UcZ(I#8&z)f5fq%GZoa00A9}*WL-}~T{Lz;I{`$(&KcAV z@|(`Yi&8&r{JR%kA0^lsRO{IaLkO8Lf>}qfX8=+co8KPO;6I_BJqqSQ*FN1MrNz` zs!n)zE2yg&$B=al1)1ob_Zhe1NjA7XT2!JqjZH#&!9s~>yZxF-A_IzXQi{ore!~+i z@2|u+=HAZiED0t1{oX?R~;@5E?;s+;3Ds++s_`&_i7Di=U$~B33 z_jOS%5LTi`Au{_}dc?&EOgtF}BhC~+SAI+;riTA6wEI~)S|bDI_Qy6G9V4kSc@(BV#y-jFeF zqSw%jo=*LGeR1vr=Mjz%eJpSme8$_`SrI3^G6;cp<^W+(3-w+tpH4y`pQOTBL_XG( z613DEgf?^<)PFa`sA}6zxCAMHoQAXD&T$_LgN5CRy@e@bNY1~JotC$R%r?Kof%%#6 z0{`fhsAoy8>!fFl{-#U!P%~~B5NBAD{U3ExGAn1!X12-6?@~0t}&ERF(d%d zXt$AtdH!H9&Tx*&DKbQh`hsKwq@ccBch!;dtj!=hx%pau zz@d5ndz^cjDv+6FX3IW&XzsAC5-`dFN&N~`{`e06Rur1V%9C(bjNPs$TW$cEdFt^l zRnAYmJ^5SHI7&BxOFKW+U7I*H0KVo{zru%56^EvZ#B+3h7N%_4=lky5kAkfI;(@ z64kb=VCH6jTZY`!+O$;PuywC_f_)~KY1KO8OXaR=k93%nX@(AnO3?)^F``pEMu>ii zLASffrF^0{F9EWyxW;{8B@O!UC4`W`a2~owy@>NHU#DbR1My~ePhe{F`llHOPfr&R z>wf)0-VC)0g$+(%xxFZ5J)c~4>~1|1m^@Pr3v6{=l54fu%WJE#w7g)LBnzMcAp5K| z6>iq8wYFu_rI^{~%q^IFiEru`=QJAy4EHFn1tq!-vh{dveA8^7pM#plL8abwe7*Wo zGWmPr8k&^}!-QcW$JVkv6j7!*i71CK>8~tORKY~RictNVPhnMw_xmn&jF!{L#Z4>y z*%A_QnCxYDqUYt}!Ya+-4p7UbRYq|H{jzR~Q`(?+D%8L%A$?cs1Yw*g?6>0nb{x2F zUGCS}Rm`GU4(+rQfMDbQcW2mYaHD5HY?l)xW~rJ7|B-gA`)Lyk7%vuWH_8ipy~^>j z`MrI*+pM&?DD%avru1ph(|aMqmZ2G2$+ww0#^`4vJ+U>3D~iIoTXZZi-y}4 zWL}KZ2}j9eKGNc)sA!Cm)zc^%K0`@ML484o195EmPSi{m&OxE1q4k-f%O29MYieki z^k6~0Qpj6)Z9`f36G*Nvr*DW|rLf_KMLn3m zWT&m(Xq~<)$DBD}oW6{KRT5S?JEt!+Z#txmJJX0s8}Ct}>3j8$LAr)uRi)KUwCUTi zY_<9#;`Gf5l2X--YmuEiS)qW~8EPSQ$E{YD86=WaGT1ChCWCd=c-Mg7+?TAmFIKKS z8^0lG_khsT7%f1R-68)ES%Qr%vi92Z@d;3Vd3BOUgzPCy@Kw>hI%kL2#yj{!-TlXN z>)1uCLHs5Cd;3=uZ4oo)Vn2~>1b|1O!k|^_w%W2NVMP?tP&XUONg>nNf_%_V2QZ}I zH%_a0D!%63A=4ijWRgc+Asi$KaeW94A(rIw|AwMYNPPh>h#YfHAEh;dyCukUUw#z> zuGnJ<$dpQ~BUb1ZNc23bVaZD)$ zW;d6eLql6EUl~%&)RG)&{IaK~G$eQKzU)>wOVjxMnFomEKY?{W9gq2SY{IHZ%(u5aJ-MUgCoFPCt$5=+#v0N=_`h@Gst40HhBFGChCe6 z!hj-I(#JC<{LK^MVa>5e9YJ|-Mw@pE=(Q@5aRcmy1pdSwQyBtKoq_z(UwN+!S- zd{F_NehdW?b^U)%DIoH&{Fy~hnENk+l%6_EHiW=+IO6k0K-VlA0kK&15h&=rQ@(l! znx7F^Twk@cX5@IR{3Ml|;Gq+;WBUOM2+Pp~N}|(KzSiWwecvXOnR#H#l!+>zW_y)v z-87Dp9V8wFIU!c;;bRi(pVlo)>ykS_TK1KcR^)|oOILKwol~vxmk1@`B1(ne)C^Vu zDjIL#aB`D{$v5j!GF;>p<1N26ugz9Bff=zxiga2JfIx;i7iX@0x6k` zz_hjCL~*0|2O}~TAo(PG8u}_9^E^YT+7w~S8=8@@B3tQ89MiD96gY-8=x;531Z!Dx zqs@7>1kku<>7OdShuDq6wUad7_KP7L?0tg0Yq;*y!6`egLApuQ9qJ|1DRfa*cuymv zy<)io;k^-r5{}T@;Arbk|M`?bXk3Ng1=B6f?=L^&Ol_=#k8!N11^}*c${N@TR^OP- zi=AVs8=?*s>bMm?pOSO~m*4U!yJZ zKP&ors`t)SH6IRzHy~p==n+S4eI9Wv5o87=5)u7@Eb(HqnQBJ7uWO?fTx&KT7~<|P zo<%DP!$55Gv}*!=>EY#Hgp6scxOS3nMMB?}PVbJWLXT1A1dux#J{lo-Jv|dZzVS@u zwAX?V;`{^paTqeq0;0- zEubsp+T~w!J0z&A%)Fdom}iimc`RPHbBIv|bhs9Ob)jiH&_DrQ)kRtb_>ua~H|z*J zx%^2w-MDhu#YtNQBmy;5-{K1`al!qrZqv}>m=63XJ&Hfl*n{7Rb8r9AOo^Mg6b3*> zrS>vixfB8Wbq2xoEpLv5jfMs)ti;K#kWRxSF5C4>T@`V z)1%qWFeei(B%sm&7!tZ2>}~wKt5_J+D4t^gsv-GF^( z$gSnsaTOC&$V5?ftqVrWrj7~L$oV>pwwS^suR&TdPN{C}eHR9G$AR&lIR)WNa098W z^j!Di6DD)w;XS3%WllCq~wgnGir_(JJmN7O)VUwu=!Rdf}o5|X;kgUo5>YqwT1WoSbEk> zeJ?9SeV6SZ*yjVFyq})-tEGH(#@RP=kt>8?Lek0_NkFuot>wgIs-^na-9Z0s3yfiz z1d&0#F{1IP*cDd3-_@}_4NMSDp;W$pDek`NU&K>Ig^dwQTn-ThV#{Z~eowgy`8B~^ zKgHrxV#4zTPTz`+wov>RCYhQ=nbdm3ep`d8@9a_5DHPc(^0vjORWoR3YeaEHdYy}3 z-ljppVtd^pE*;nS7s5((Gvmc#-Mj~%egY7vsKj`+X554 zrqcPH8AFM{v0OthRa6wUv7&9yc`aKvQ&2UWqIHK#dgy!4rIuzv z#zy8EL2?{)ul69xHq4_66_f^?Zroj&}A>uo2h_gS+mS zVC=JFDL13D)K*Urp-OMQuM3QSWGK^Ejh*>9&pXZ*qmkRAy{Fdat_C+EPiC)E-EgLq z1JV3BjEU^JWQBfUrF0E_gixscY*R^E*E96j_&xa;6`mjv4&YGZx_viK$AL;X!X6Iw zPCp)L!lQ1c@R{s5^qeKXClnEsUcxeB+B-m-op#%9fNsrKRk`9X$yU8sP@R0;iKr^w2m zr)>Kp9m?}7CZgoox7g^+sTKxY^lYnMhG1QqCF^Y;79O#SR#5MA-+~+nc7~f&9}Rvg zRv&;^RCsYFJ^OZp%Wm1*(-6lSH3+v>jN2j(SmH7z?&Qw{zT`N&8q>Tga+3c!-sH>x zD1H&?vKrVn>umW95gc`b*eB|SR+ME~uOAInSI9F6_A+54t3Lex16d1!v-vQjMbFP5% z`k+?x1#f-@A6S&~@yN?FPwE(t7Mb$4j%$yj&JgRr>1o3yMS)$H{9?{)3qku-7HnuT zP1=!FTou1vi8@$EgkaeV8c{@q6}_(FN$rG{D&aLr{cM!~R!sqxc(1*X^VQ35H#5+a zq-#>50F(?1nS&m*1C7Kt_>K=lsph}48;txGA-gi@Ae%~JgfK!uLTM^o_cUX8EjwD$ z6J2@BA3-EL6Gb~l4dzb^$=Fox4GeF@-Y2LKivyhjCC7>drOflwA2#YqU07y~tk(vh zF11Z29>x58=sC8uDO4KB-1WE`W75hqu87Tz@{UOK$NQb!#vdyg@wX;7M!> z^Y90`Kx3bQ#nw-tN22szl=G2gKtMb_??nkl;7q+_Y9jCp<)AcOF`)|c^EESlMStNT zBk-%k`VO8KIKK4R`AK(}_-e#*XYBg00V_9{``0JMGqU!WYOu8@S%#k77}Dftswq64 zh+U=9aWvN8mn;;9g+}%9ZWi$189C3Mt(cJ!Q|@yGIJ>8( z1ZQj+jrlf^#+tW$#bG+I*}R-p$OA`MpzxeUUh`|vb~ZP4$8ZCV48=6;b*NT#=T^sO zR-_T~%?w|S68cxCch#11B<4RbRZltKrX-p~ThXG2pku8K0%9a7b^8GgBl+4%S<}c^ zON?YHf_&I9#6o@`2LE$HM;=)H$i}h~rb-tH=AjwE8iuB@=@fR!c*ZuE;@HT-v`SuG zwcSc}ga_3S)66(L2{tprTa4kOVL|UkBU()pqX<7I;D+q~oQ4XQgeIkz4h? z>DhqU(@5SZq~JA%uw8ew*!dsTaZ! zweIS+04&;g)roLud1O%dUPdEV-Mrkgy#L{M$Ls;Y60r2I&asD#-cDwU z1A6)#eJ;xZVBacIzf_Y#4}-#*wdhbQ&Hde%Dh^8RT~-NI1ZM)0RXXy(@8d9}XALGO zBH8$7Vtpz6$6E z0(@v+epewo|GU0Gb-3}GffuBK1LzLCJ0+$jW{@)ClPPR45JAg7L16+I7%a@>$zf{x z*QUkXMF_&d>HK>>IhA#DUw57CD2Fn|oqz9dM3ckVPD;~*^M}LSs}NuykpYBLr&H1{ zZKff;bq!8?@EniFi|4&3I-|J>6L4Mi!y}|c8mM)t+jy?f)6L-Sp>Lnl#BKTP%g3Yj zDBiY`^uL(3p@=ZQCGct>cGyehjbm-%%z{i5EZ{iup7De4Z>09$qd#L)qg|uh8|z1u zR23x;t<$=^c=A2lMjfffFUa~}LlcO^)1`9WE>%9ZrEZEqVU?P+OBIbb6J*uXoJ47V z2)D*dO^D1J)I7s%sxNn-D!UvrDs5#T$>K@I{G)ReRr5bE`iq{ed9$%SyH-5E3lEYS zGr7BCm@6s@h2L>7m{?i{J8|*_HJ>)plw#EYHNaYftbN_F^zQ&kT*~al~P0ns~Bhcy5gl*@1CR?*0120*JC4^#$q*YnY3X? zOFZ^u3Dhdn!p9JQs#ST&a`%)89{PERq0P~kUA~iy8_crB`ioXMwz1tsN%>+y9(;S( zqrXC{1oj-cPrXd=!5eR?sp^Ry8^Pj)!hxy?9um2Wv1Fyf}7gPqB-9)&GH zTh)_){5eowN-8!`94gcvg5a1Dn}bkoUwAY;Mwumbw0wfMp>bHPNqRWSOvJ%sr_BI~ z^_cFn48kLp)De&{ZP0pj$--9x#5eoR_Vk{*D%?*+D^$q@>{s>-?avKisS!j9C_S^%n+gK3d_tZ_;C#yi4H>|bt&gMl0(>+~GMbzkq6wOai_(wWZ` z6ersE*P=+ruUN`(JT6P6{BJNyNhBWGtCHpAn{_(d*gt(1%VJMc#u|uV*gMSwS?It{ zEBe4U_^HQ=zlvm zb4rNB6&fRq354GhBpP$S;9H+ z9GZR3R|CHEAi}m9z;T~GvM<4sby^bS*|i_>6$cQ0E%+83mvOqgF~L-kUG9MDP{x)k z`@7kWe>iJ+*KXw(114YUdmu+KAEce&7eNSoO_iA3W7pFY$AL7giDnHzvzpZ#p64N_a zCCW(@GiliK^-z|Cu|q(~Oy(0b_!cSd z39?vVs(j5-lVcr-%Cd~-1z2)nNFQj|$V?yFo&Tp6C8>7D%@e$-sx97D3TiTaa?!7x=@a~Oa02*0M7W8G zjM-uECXUb{eXJsr#xDjpRbXJLiIIi4>IpYVLAp7ddLTl{6o4*2pw0=BMM(?mQ;!u> zybK?@jEh8>*$nj*QfitY#r*;tjHAtXrr^bGrl15UT;Y~ALVNeNc(I2zG+XDz;k>8A zb5}NQkJiodxuz=a4`nM|-E^DTGb37g+c)}wsK@}y6DYWD44GW>TJz$+OGl8Z&5aaX zm7rff;a|OdODD=B#DLYhE}Z<5f#AV!v^ed!IEQiQ#+U4m|G&L0L)9jaa; zu%k40to$6OyOCZOKQc9Ot$BGhH4S>u$ahpdD2ftq-?ssUSB+nInSx1z%Kq@pn^-$p zvET<-L{=^DAyv5o(c@=Vg%T9k5zfoEd~mE?yXneJZ5deOmWDO(jwsscQ{XOr{tMZv zC~C3pxhfBwvNf~34JC|<$B$axApSsMCMrW784BTEZOvF> zJS_-Y)YAe#*(uvIZ`y22J`(L1K){=C_AH<&^&dXLknT|*X8+79u=s+N8?xl&uH=2p zHa}UOO2dr^ve6o%Xg8a(Ln}}r{X4M`=~RWPwC^vPR;491uqt^fT8zw^qh+L)SEVhu zqj0z{Tw7+iwLNkOnu=YBqv9d7`JtSpeV-lXyj5-KZ_hDu>)EMh2M%Z`q8u=Od{7w9 ziE+3rfmq@6Ez1ehAFQA&!%bNV=o8|*q+gcdb|`dZ%m6Kyaw4w8x|$?&K%K;bVNGNc zmEBDP?=}FP*!G*ymjswU4AJw|Pj>qaX%bnQ8nAgupW6 z07sw4AaAlKddu%zz%eZt+lrF8+>X)`>hc*2<|bPrpUkjv<#m1+&SyAv2(4Sb1-&mF zXVt(G?Li|T4kWrd2u%qSEnCn)!pD}uM*~>EoBkUz6c7%l)M0N&L6dnyN@N}wJeJ`W z?~j#GsRWKrN6DrAGEY94ycf=RzCU;03KRFCgVMNoa zj|a*Qe3mK>ULHkS^{9|_U&r(8Ln`0Vb{crn0nJ$U+Gy;|Pl$>aUXB|+uXilLLQ3|z zH<$ZCMemchc4n?RA;0w$@vk*Ub4)6-ZGNBTihGFWM`CuaEAY-1`@uNHq4Ffh6U+3s zFJ-ScgxO|YQK3Md4nplU0RQ)C=q${zQ5KYmO(qwe5_Z9MTPB88&YoBuNUxgA)BDht z)SE0Y=suts!L&q`4Fs7QcMg^E31d&M`RbY&-4CdRg2v~_ z&IYkf;0(_&|7i(%&}_%c1T;t&1eK2bdXE%*vcq^jqU;X*h2uu>=9T2)$%x>Kv*6H$`R%t; zw+u;@9_dA*99g!&uU1$^Q6^^G&bkdx5eU`J$hv_l%71Ca2zG%3T^q1URNf0Y_A(i~ z|G(p#Q4F_gNP%dZgsCRj4Q#TM$2_dX)OiEd`f7bAPp}DANLnyC7YcsWT9yLNK?GGq z^x$>#7w+iWPfq&pXtF=tX^_u18$%!$D(`*s(OJ@ve(Ow)gvxuH$9YuqdP?_1$UV~g z^+1fSJukgH(sBiy@?78iia%m;86cyhl{Tg;IV$R-il=2x{(~7Hor50Gt+>^;MNO|GJ3(yZWcO)?4&|g=qmF2QbbZGv~_m zKK@A_OVRVVq%FWWATC<&awT65Y>VF!Q2sC~R1+N#R+Gdi2bEKWKfdh0_H6A<=I?S= z3c}Pory@2*%O=o4WZ3x@?@W?Yj#pVlFdZh5x3T~*#s?8A#ZmhXPlP8LY4tq3N_p5G z7Cj$e#O)AcH<<(pUKq833n2p3F+k4`fxcJR|BKlpZlz{=Wo`ZRdP+ToBYn%X2){W_;gW{ToVZJB{ewm4ZR>fzK#2D$1N9zM#UmiW)>+YOrw7S| zQ|u60_8uR^6Alg`T7U=73YdVX;2_jaNK-OUSbcHUo{#W&0Z-fNO<&xyFuj z&-S&!{W$fuTnJGRX?x|3lHX3oQ%U8F6(h$Ch#C!5o5W8{d1PY^%Ov=c`CO_1zU!xC z@wzdNdB(q~3`Z4NQj{iK5H?RyK%ck?yRl}rmsI4+;Qod%X_eu#g540m4txSp63>q! zbaqH7q!Qys)}2h`Un*Xn_u~D_eZpVnI{GGTvJG>{P^Y&$zMZmy?(J&varydJcm6nn zjwh!^9xf;!Hu{6>XG|LWs-et@q5d#yQ#hdjh$cv2;7ni083CmyA zaeq0s_KAzMsk9!P+98m89zaBmo!07b{04RY_@_LPyu=MLcA;k{a0^LvXLhQQ3J2l# zVxuP69A#3;A2<4nZf{wH#J!JI;OZ;qz{|h*%-~J9Eif6J5wD4_m>(S?#YLIkt6SRH zbqTC^GvagJ@o9X#gY5RHnTQc1qXlmRPL_%pqqYa*wNW|&5w;g;uD}F%;{Af6e)@JM zKgm$V&h)5HD)GtS^LiBKn0YNv$vh?8?qD_SjX5bXMlU)4-2*M3XrtoHJyL)Ut^}M; zL;C2$qXim(+&|IFK+zsWT)y@RKTnLZ3R^<&A&NUNK)$Cll^U8WvO?d0FUgKn&F_-K zLUuQ{C!3Cy8YMyx>{2=R#d$cm7oHDJL01C63FD1cOuA!4_$4soSGtX+|M$5_3f*?NF z<%E18Jr%VzUvs9@i505JG$-T={Vo`Q-Wxv5NVhL;v4n&9VyJ9kqK)Z65}(u0u?fV8 zlS%GLk~DnAg9$GCA}?!JB9zY`KGHS5P zzb=McS7Tm|&r)5JL?x3B31|GEl=Nu}AmsM~&8m5MY+~Bx5J>Lo zA)S6@ERE${(v-HZbjoChK2V1r;etKpA$7-SqDo45G^6h6D;bch8`Y02`zH*F33$~< znA9DKu3oTou75?lIq2&Ce@vfft~|H3_~Q7_V`{H2@%v~Qc6#eYb|u7hA% zC6FphfpnbCW~$L^e1U2&vLr;^c#y$QGNGk#nISLd0qNx_HMC|7FE27>n+3ey{#O^GWr!5(V+nEn9&yjJaBO@qJ)wg02@&S#cZh zPr5!~ySE{AbrovyUmkGLOY3lNiqEgy6?}R;grr*3-%-O^emcV8_Pd;n(##@-2PtgJ zz=V!VWb$89$d^%kAR%A02i237MlX+EzReszU0M>0hPp>T8MZSyYd^Kj5oQF@?hHorZG!sZt zEYG^+wf=h>u6Fz&)n8nwJh>U8E+qksT>ezS!`G!;R2wuWgaQQV#Q6xQ+w2NV!d8h3 zlqE80C@xe{f8vk>-f$l{@DehvVUq8?(7%K5##cj^&dW7%)fHl+Q1dz>*Lh2mF_gg*z*%x=j?q!^)DD8{ypaq5p~7?r%j6>T#=UfAF#&1!cyK=d!>R+jCFXUO zG_4@SW47t0^?he4TH$t1NqAmCdBW7)x$BYOH36Xs$WjooE@Ry6o2>oOGWv+l>2^7? z!}qy8wJ}97oKRWN@guJM58-u^bCS0zh_O#mW*o#Bu5SGwU<#UISCgCJp){|4LFRjo z5S4de1!wmoNVWM&QSO|jG5?dEZ4{n^v4!=LY@I##Cvw9_Qc{U&RA!g1sMT+@iEn9i zRAjpG$DbsA=;>DUX<1Aj2+Wf{3&Z6<6QDn}*bmxZX{(IW_(g(!y<&V73|cQzDHr_N zM9qRsD}#1vtQ?g)&S8w#m47-!bq{s+y9fDC#}|0)EC8)dL+#TNLpi8%!?-eIj-4go z6A3XEP0GPq-X)XwQHA_(pv%hKrp3KN?=lcP3|2ZkYS0GN2wQ4ZsOYa$JhUp*bOuYI z8tV9o0B^<%nzwz@r$I2uAbMaOuJ|5SXxhmhIc7 z$S00MC+Fyof2xs#Sws@$P?pb|2OE(%4a+l#wbi`+NVHx~pIvZBrv}p)xce0g2wVT; z!=;jM(G36yU6r;`sNB97hKePA#crrrM!PKi2m5#<1+IKt6rbbynyzK zA#JD2Zi-Mz(U%kvnQe2m!UpJ4S*{kcY;S1;VU5s|z-^J*9&_aN(D~sT-Iw zi_C6JZM|@`Tf2V+cSIx(JQ^pvLl`-_7_6}xAls%o1YEr8eHJ(!P;L2CZA#7LW|W?s zLZg$k(Dzmh^ZiCap#PmGaUM0`naTmq47{*U*B3*2xAU=UIl_6Akq2nt&T@OWRmuxT zplE+Si~8jL18jhCh@5V{X2$~PG%+ws*Tsk4A4~d#7qfAWQwUOEE7%w;NDd)I^}H?) zNs*OafP@G9+Y!W&z+gL2<|ehTD^%H%$L8|`Af^{o!oVGjznXpN-hr*!TfA59UJI^8&}JS&FTq377dy`E&R9Edvva}2N7gbr zZYfW;!o@z?qVETA0KMC##z%V>ICO5_Lxi@hdQs%_J~u#kIdCcQrGpgVF2PH%`G1@o zz!j$p7(736fW*1ennIM&Qt z*d;gM1_i@QBAtHAF}W%3CS}9GelJ0w8BcJL<$yYT4U-$WL+{E^G{8L%8kwx!yRxqX zeg~V!jM*Z8VI#o?!2o{zDm%={Fbh5=t8XeQI}=f#et7t1S3R@1L-8%@K_k5SN;}o) zbO$^5Kt$=OM}u`K`#-B#&jb=V;1Tm)7@{6Ox>4N~=h>ubQf!m^YY&>TdJ)9(Sg zXSt!aw`Dqt{33i}XW;ToRK;My@pG)j67ThWu`>yH)AWT%XVy1VMnqV1b0qDxJs=J& zt&Z9-SC$n^E)Zq&i(gCL1X!ElUTgTA*z~atP>|JYR-}-@S`PD3e#OlTfKY#XHYG5z zeTB}@1|!=DWu;BiCQPta27<`6(yAi_VtNX-pdXZV;S=_4VRANqRh}t$wmR}5Uxn8E zB$^2QI#u!DD2Q7yW9z44vhuOQ6R%r|wi-2k?1nu5PQRzc&i_Zk!*xWx+9pVHA;@70 zf?RuxRIJS-TB7J6qBq{;rubLU%r>I|!Sr1jBqGMA3jjHx9OwR?_hQBm;)qp6#5wkV z`8%2UnPyU)-p6IzGHxc45}?h|pt^yB<&R~9EO%-NX+?VVSTrI_?W9;uGNj907<*+$ zShr_fI-n2tNzNVWAk$J$89{FesQOWQL+CxD97QLcAC@Y&-ZMC+4H64IgVk|1!x9`y zu%CV!dK{4nnu>PP1l;ssC=+9jcZ>HahQPTBv<#?rrp~mHdYdVFLxE<$x+(U4kZeoH zHOnBFI+A08S<%IHVX=qeR9>8_(FV%tiol?sIEprf#L9WR=hwYDMlq4k;RdqtqB_-> zSE2nk?(kpjoKd8%H+OLt;T}~C%O+!zc4J>Iq3UrSl%xMqha>8e6Po7*^=va**GISL zJfO-W|4)z^0@!*>m&tUlw|mOzZY~G9qBRE9x%qS>izJ%3eTAFnchlibu(+G!S^H=^ zg++9YMFHw=XHHYSsjfu}VYfO`9G?~1JD%P*3=2_obJ++3l;5V^O#agnU${J#mQS5& zvB;#)ksBXEy~Be7PfS2N0V13skYc@g61dCACf(wZ_2M&0diq)~S-T&e&rgk2ONZq`O{lQ!17k{P z1rx(EP?QXA)8aCD=7@eaX}l%GnCUqETm%;Zvf^`wrw7uXwjw^bP4`nUJtoK@mB0se zq5r@4*|vTX+BNCP>_-G3rf`%J1asdmL3k$mfrv+99Uth=S-G;9{%h(!j{Di`58zkD(Th~ z$Oi<*-_fYCg+IXj42rr$w(K;9MpuFTak^yjXFc4t%Q9T-Z+bXIeTmt%olZ^MT~W3S zK1BbE_@Velnv4e{ zE`SYn2AV05AUmyn`qke{F#ULE7u>4IYe>Ygb0q*k9Sn=O_gQYrf|iH%Qj>SPE9sSd z)5bZsN@2n29S7@mxxHDeBF2>7iQ~5zkwA&^Sn;8}6JCRh>0Uqb!20hWy#7D`3Y#ft z9Vuz`zpD>hi;cdbuVOp$yvqUbGLw;l#adwILu6qE&~M#g=pvn>(3@s^pI-SX5SyU9 z?xz^=$hyBga&D9*cCll}sOHYG^a&0*(TlLdddjNmXeyP2_9AQex%V7=I>GIEzVMMh znfV00BTEr3W3weVe>aj&P#Be$|MvHC1gCBJoZlpYW!Gy8-*1`{R~{K)v_dHLqAI}e%e8&j8{2Loq67oexlC0W! zIB4|oB@K}gsS$|A@Q~iZ_*%4~bI*0*b-5YK)CVa4v#njocZu_QPrq=3V%*#U+Y~TqxIEyMLSL+Q zV9`*C=e{?$K$2Xg4JWPAh7+zVvcx6a(A7$%nL6{M{(D%O%S=HRl?22h2KO1EY~>XOZ-j`F>6$jjp+vGSV4>g?2Ugb*2an zt=M2T`lF}*-<+;7-Htd7@Q&o<<@U&$b_4(^ZTkCS6vfMelJmai8Iyyb7dc(;Afv^K zB0_Agd~Hoq|AmxgQb>oK%ZUO-5T!#{C2jj59%($ssyy3TNOB)>n?e{43mCH<@v@O4 zpiBsoslECBdOxj*D^oxHLDi|mWemwFQ{Gdu5Ty#nDY3L}ZaswxGo_IZNXtNEV~e3S z{XrqK_Yx(RwsDPIr@=fZ%4r4ot4hO~g96ySs`!PvK$vLg6Q!ri7Nok`j|Oh#A{cCf zvZS}xLy)~)h@>JTqCNG+KeOF7i!C&7Rsa$Nd$C+#5{D9k^dfm6&DYj%@H6fRHO(T%zcok{(XVeSdn~f=Ynq%`J!92LWbTvn$#semq9m4+_0g$ z&7>_-=ftN%=lJVcwq7Qnk>zYN$WskyX^%8Tka#SgbB77EV@BZD{02MBPko|h6woGV zI-#>u1Hj8s;w^iQjVdEPjlPLFPjt}-Y&tTSa3H_@UYip4vv=ynjhX$76);J;8?P+l zAn99a*rEgcg^OnhUPX&DHJvI%Fw3RhbJfuCGJ2S zoRhkaHf&;+DMw;N)4LC#Sqy3Q@ukR@oFi;!uP8?4q8hzyj9Sldr;@bS-sxhr<;|uH zJmj#3x>d@roarNt8wg;<=$tXGVa|}n*P`RV9MJCoFo_W1$X3#$acv6L@|K$d(%M6M zlGy;w(&M25Ds%@^b>q9>fB7pMiM6IM@(j$!O?1fW*d&Vmxs5hI6Sa6vQCCTyfYwYe zvY`@mE2u7>2nVDKD6yT~h}+d}YFctJ60+GSx9{oCDa^o6H)MqGIk(y#@A`y_lh%N?gD#&5O)bc{CF!#i8S(CHe;WP|ain2uRE$_ov&7%3Zo*DrYHEtn)!VOU z?-T`smV)U*T(>zbEm1Z9>T#Li}83^8qEpLB3 z7j|Z(a0`p^9TPyojdjt1(>K5986n)8W1Ygg9+tAqon3umn%fFRm0dUB#RKZh~l^vgETFcy#>MdVAZpauUeR|qaMLqXw zW?z}<@1R6cC;0R9GSWk$6DfU=aLLtc7AfkSgrM6}7_Gy{*Mi$Utj6?9QCCo&bfl8t zvNAU`p#oUDf|a~BOgM#rTrS1(Ud|4AXIrM3W=+0rP(c{kd9p-T!_Fi8c2F7}eNTk4 zE)aDGN<_FNd+5>G#Hj-1b_`cmD~l)(IvFdMk%WX&X>DPIDvPkBN+i@#gOQ;e#3tOq zCQ71nteL(-{+0pG%sI!xeZfLBGyh&XduAm5>+8~N!Cqc*88l`fGC(ZvOqgHTAqqVY zBUwyoeAq^Lvg0aVMWLt-D8$wLdd6gtqcmV64CKuTcs98fv16(@T5n#p%_#pw$Y)!*bO0P#09J-L91FEp_g# zo?~drDa{5(EK$cqZ30A4FHbL$sPSfBR&t)<{0cAng`T6C^!XWjjvfP;@XI(5w@qf5 zYu>wPM+^PaIUT@YqEOHmA-ctBWU8_(|YyqC(6tP8>} zfpf^80d;wtlV1tIn%Yrk8Fi&_gwh%&i*@io8^mLptgtEkLy0%ECtx*%;?96|<$~jA zvGXtJg9;nS{=Cbk`9H)%Io*60C!8h*?q%8#$;)ChI~&vR@@B}z0`0|*>tZ4RzQ-}$ z`-pRZm|Hv9`Zlb%wdvlMb(i*~*=tPZWZ~Dyl9qE+{4e0v0|o_F(Bj=D?Mz(?vCO8E#g1)LqFxl&d1AY=$Eaj zrQU@8dM62~Ku`4BpG~|%I1&U0|5UL0jt^T7PBOIGSfv!0l&9x>)X8}^+qTALf8ZBH z<7CuTZK0&b)WNl(lSD++WIr{A0s;Bbtx;1IoDjot)B@+33^NdcUh3r^0(=<5QGET6 z+26w`daA;6)F2(lXn2~U1I>->SePD#E+L(bxfPJ}aOafsmS^Z68&!IBm>6|a8vr3L zZ|n(7CEh^od$n zHNTFrWvuGzn)K>t8<7}yQL~zPU3{Qe)F@=^LE9ddtlR-4 zK^mfur^2Vk6id8^tqi_cigGQU(90Zr#%XOw=6};nkEt5UZU(YFV?=P?zI+ng)&*Ug zJMUuokC}j;9D3mWtY<(lR=M|N6{3X;)f)%~1m2Z(G#CYY zkOdE-y0%JH7lWq9BwQ{Ur^?Y`t>eUhL~N+3_OTvZn9nxZ6mAamAviV9KGm)}dOgfT zXsY>tb9~_UZ&pys7K7cm>mnpK(e%~l$f?(KpjSJUAnPdEn;{_0od@r;!xa;Iv zeV0r9+G>Sq4IEeI`Rv7YQ^|rDqrH%Nh)ivS?;FUV3|Mjpk>_CX_tWWB2*A>e#-+Yhhv3D&y4nLwEq1Hji3k6%~I7_b8(e z?+H^Q03_E2wIBf9Kn-}@74BD0NO`!N#iJmBABys@%(3S}LODpBTtuq~1x;ye8ThQT zz4=L8E>-oZBCNOfHUQ)m@9Ljyif6O9KzH6?iAt`4HqaD(;4;y<0OUZX0yIe!HF4cA<4;h1NODgFC81mjRZc-p9wASLH#P=Axu+6a?i_cO z%XlHPe+N2nk3QafTwBizXTwWX?0L6FC0~SYwP!Omhi%C^9^~Xi;%*ns0#{(j? zoT28IN_tTt9-r2RXhdtob;c??ZV*Jj=R*4T0pz|Z3QRLr!w>w(rJ?soHD!O|_ZHKi zLuV3&IY}bW1BT;eq%MocXEcU(zuyrl8}}M6 zdQ6$tz6St&;Ql0STU)x-3*Dsu_KEGZ3pQ)&)I#579Y;q<_MFJk<7Z*H^htV>kqY|&4Qcy1)bl&a%-3oa`2agPpZNxByya$zxG zB!^cb3UT~Lbdk}WWRENpgl?0lD03K`0cp{VY#N_qA1{I(5&%Ts#hl?&dyT(>t+xTQ~gV7F;#a9#vOgeB=DKA0H zfUjYCS_n%GUUms@J;~pQJAevV*b0)&?4NJlxOfvZZG<+e@&jHn)cRH-7;2r(fXR!- zm%9W>tdXo8QHX0Ju1GlS=4J7}@K*PZZ$X$p3d=UGW!i&hD5HsG;KDIWXf*c@SI&Od zp>;5PLFwUFBOm7YS3?8T`7yHU<9Fuqu_vX;CdN=g+Fd;s#VF$(-&qi78IE5W26kFL^*++pI#Q_wT1FE?RTw5>}7P$d=j4a+BF?Uh6OA)b@ ztG6LHnbfOA4LfND;3AlLR?}8{t(xyH47HEWa?fkqy&V&q*(xHuMmBB@*d_$PBtqc? zFxqTO6hZVKYe*t@$|O^!lqqGB0l5X$1%CxAc%u3qUKC4oQWei*4DSj_C}NBim^QD$ zpl1p+GCYqR{2pBuH#bN`o`(>6kr)*^@IhD-#mo#q2>Tw|iX0msljo6Qfej+(du%^a znBm0Wc^rYOK?{i#s7_t`9yklv6K+PH2NBBZf+oLen)Y>kuYKP69@mQ|RAFR>=aEG9 zJzOdn!Nv7GU@G*W2_t0RgGPcBtk7da3@~sP)5cvWk+_U1{ygHKyFD+1djyOX21O*X zf;@&Vvl`_H_R@rBL76rI^fT7 zO8`0940p=mzn-~^BnW9Dy{Vj8DJ=7T5Mv5XEz*%RQ=TjvE5x``!(_@2Bui^d)#TqU}oL1ay+BAC%g$I=HDg zY)YQG%*4lyt4#ufk>j}TaviQ+2)<6V)(4B$T9VD9H$CRkHk93Oi{6U#$mX~IY~7C%C4OsWm*P-yS{%TUN` zG)hYUqQ6m}6aVL%*lF)A0KT>PZ|RCNtFbM-`Ug~Q58Np-&{B@HSZ{SH4Z=QwV(9RzLw zQb4W09uAEsAn=QAnC)`98gx2)SN{9=op;;s@UC;NJ*$eo<#jf^y=QUH@>14blyM6g zvikb_%w@qhfZUQSwwcqBV}(W3qC58Xl*5js29eaPP$!yr!igrF2=c|98R3J&5TfOq zG>Mz>HRd*Rn|GGWcR+KN) zeFbgT*OHcXXNeUM^3g@Ab2heBv{x|XfcJD#a^SI8r-*NW} zAwq9>Z!0}l{0-a4QG>O$Vu08BJ&&&D&8n>ZBL?&g2U;rdp@98+!Fsoi+w9-2h})_S z)!uq>s29Bd-r!apAcw~pwf+ENhYyk@Nm7JoPL=yPb7Bo72wEcC+afaYpgK&eRMq_i zJHQ%>mn>PbWJ$+)cejmyzR}&5t}Satx7 zjM}d|Yb|JNtvJQ5opbPl)(|6XVjbXEO5E6fWvddUmB`_8kd(C|M#5XgSh5ycrYP6T z!tVc3Vuu8+6-k~>|BFNzXFQ@xH0gBRw%wb>f5WLOemHP#H~)12*d|B~*!?=ozs|}M zg-WH&m|cOkS&$Uq6h5(uZ?MNHoWiNCYFn%mxdm|w+u#&;F-i|=rZ~a`)dP$YF@$Rv z;KUuY>c1U9Is51^(MeFD(}P1Z^zCU+duC0ATbicbtg|!IHzH18PkUNZ1Tbr3Pa=xg zh*-f%6gPFlT4HBNYIPIDh>OBW>}gMXo;)~vVyxnf*b`@)1hgRsHZXmnLt1OCdkyE^ zN^joDoH_5U)0wK-6gp9#rdDw+?##O~rN0*KkZ_bSisD$B`h~gl9L=&^!(78-2_=$j z*mzmOi7;K1mQ)Dlu!DT2$&O$JsqZ9gCrq=I`a<0a?V8L6ODxC^=gU}+VxN4n#dHI%&Ct6eQ*i*zaj(y3;%nPE^~uW z^&uGDX$(6NNli+mG16~5c`j4f!|iX-D8ZIP4kB#iVVHCNq3v4b>XA8RRylAw=%7`a z7C8>5<)1Uk5jSk1q_+NozU+uZ*XP1!GAME;Q<6L~H8M0?dSMrKV>+c{Ax)cdlaYsJ z*{blUq$)6&%>*1W)FtRIiv9R>qX;%~)l{c*>>OR}M3HPJ619klKHa@5uY2#YRxJdt zzAkv?ba#iDZT`n-6~W{P?w#1925gVK#=!Q>S}1F;_oFRGFw{#uO!f!6(2cx%(Qvd#W zAGJ8@8Feu_f)&YNqaIdD4T~wY$>y&N-4f7;HSa@RTYj(a`y3cYUk zFeoRFk~;OzqX_XhprG=2LRDgQTg8;98VjRgn#81HY--s2<&&K8*4n55Gbo2>&N+*n z_|2XgF8#8yVyIJVtyc80!{yS2=2OE*r!=hpXqjHZihrxYXqcHxr?=i?w|^$BSV~Jg zrB%hjn-C(4H0qtHOPB4?q>z__96Zmni z-zBB8go4RAPmsa6V#r*QEES++01f}FWulOw1mkf*XT}9xMCL}bv=ME};NUuPVHb1? z9ZQ)<7ezaoq3w5fobwGjfvG>lA^;r&xZ#Eybm-v22OoUU!2v%W@PG$6KmtHaU;-16 zz$U^OxtiDu?fVy-P5hOC=Z)m2M?kYH3Y_pFL;qX;+wywwS@uD!D`{4m5PNUMOkohUnsQ z5na6K;u3TDagmu=rXwShXgXhby(Mm?h(!!oQK8Jt$wIwHdaO7b$N)}42E07E!o zw#<#psaZ zC}EzI6#M3m-LL6!#N!xgk50lrmgFMj1)09!Loch1TloUNiNETf_22ZsylR*=R5YwG z?4zW5^w4Eaof<`0OpMGJFbCk_rG=9vvz#R=pQ((VN#qXzAGBY!6$=vzz_1_sSdKK` z)b<1u3cXI~$@PMs(wm;s7z(}W55aJ${rki72lVs^|0eiN4RcuK8+R6mjU$(a>TDWK zE3ssjRMvE3MBq&?4-5XLGP4CVplcDfSr`n1VILf;Ex=TgtA-Yuk{>t&s;0G+Tuzi! z4AFu>{}F^GNDVg7fnXtm1~Vuk2gQYu6HGBg1~pO`!9qb4Cg_!hWJIq+WE=s73NXzl zLL>||2)1~&(RAv*l+;uj7Cev73L-ivGKF_bFUpmYcpJZ+$|+xmqLdNk3spj6tv>aO zPxNpoMA0D#hV0EVD@q>BTomU*UeEQEh@R_OSSVCCu~v>xCwr?4k2boV$U3$*8zN6O z`1fTddDdT8NrhQ^YkgH%Zh{u0wW(EECPWXB$Iva*u{*Wi|74$_pV(u)!}_a=y$Afb zsl{$~RbO>hccmhyobHAncOU?_9 z)>~Vi?Z$C6cTS`HaJ@w+qU`b$?wj{K3QUZlykI(RW9pys8U>}d-nMd;FO?;l9F3#5 zJ~0gZ{04GdI(hy?DX5{n=NDf1UnBxSy|=Z!R0DpQ6$k?D$e`a0)35P_Xsy-swRgjo z$1Z|IP#k;bo)M)QOQta_p4FKn#p0Wii-1_|GhWg-1p7>26t$0&_0o=xhL0I>yc{&1YU>uqW2r3IF?0{Aei&sIcJ?o z8sFFp!=(tkBZzr$iA(E+Hc@=>w)V;~hS?m0`6dj^$Y-P^XDvot)WAOb|NRPh-;Q3} zR=QBH6s&4KQleot;IM@|))*Ap05gH#6Mn)$qWA-fHE6I1yKzG%##zy$_6EQN9-vQBXRs^Sn?5 z#Sjf(jT$vxUS>IK&biihgArR=kG%FBJfUOCnoiPqds>E$f0Q47C}XLEnSC%X=L?R7 zfjPUrb2__WqNAiqjn@pb8D#s^)wp7YFgUkyIh_H8Jx|P<^INU%x^M68vOOuJ2YIzy zz23e!j5Ml0xtdH#9cBL6hTr28FQ(pEWYu?vqFj?!iq3@gaL6H z3OF$|TRfqsol|;ponE#ZOEM-kR@aly2}Y(bEFRQL&I=Cs*-wh~|DtjP$rD(e7y|>- z_3PrDSMut*9fOLgsob7y@BLok@$O;0Qfm2E3Q_gT%SvmVv1^7HN_Y3~&wFUhm)mX= zxeX;$zZyl0v?z+=7P3MqQnX5q(qf!qoNiu>^*NQWE@JG|N3-OKFd z3R(*eO<#5DMPS&_5;H9lezhW>=^y!AIb4szXt{G)AF%rNw}wq5kzz8a)MjbVDj0VWGYrC36SSg}AQdSb3rCu&pZD)lm3 zFC{CMPL7#=G_`uURxcbDntqY4de9nl_(|oOL%3Pr< za|dOuP;`fw6MTrEHhY)<>$7vDA}5CGD3}NQn%V_Yb`-tvaqnQV9%_z zdQqZ2{W8I`yjgjs)g|jpv2se3P0dMyHCD1#C5r}So;W3rd9tAcnxF}`PL^3?tTIKp zQnQk##-_$)UcF3PV>f8oj0e7Wr!jyL5!%*8zV)0{HUlOKfHXTrs}MyidvZ}nwy#; zLl_BSp6Pj>tnxfhR#{_bX_lwTM3ttgx=GQLC{#&PmL^W8GEMVTnJs2Z%JfW6<((~C zkJha?^$C8mL7q+)md0$%%F-EHbDU|0)>>zY9{0y{Vm5%6LA`|G^(uk&rkktMv3A2gWe^ZI=EVh})1DxS?=-+wURU*|o;$R(-qaQMgRmk)Q54789Gox*hGV}p zr{$TXGRX9@jB<+#vHiT0vy11tZC}%B*!#!!Ip4Nz<6pYN^?f#F3uBuYLZO=dr#m{W z%G&4m@qDmQcB6(76aJ)#F~i3&jHP(7miF-+O3~lRlcG901(w4t2E!|QqLyvq-g)TzHXpJ%5ycniPh=-C{=3;jDU=r~zmpj#1+oF<6xQecZsI&Z zN>*N+udG&5R+^Qn)+`pW)2vU7HgO11`A~w5n&jwP}4a%UD1(_flP|D7HU;3eFM)OWiS7bM0 z7_AjZt+m!$&6>LRqAu#9ZtCiav5k9!)Bwa($&Dl9VD=g)W*X}21%hJEKX)7Y_G;Zc zv3~1p^PlMAF%DQI73O(=@6G!VaNBX;_v#C~v0C}|7u#*inosr3-kNK-!PBYtFpJij zK+kWe2FJZ|vfb3RxkI+hNv0N1=wwfjy(geZgG(#5v7SX>+P{r)Zg0Twn_J`#G2%aG z-B$0t&zuZV-6ZGPD_t!K?CT&|n^rV~j<-ziR)Z#O|2Y z6e&y8jh8V36KxXeA&V6O@SR!HLyYZCTKSvEz8A4LrE?Q-ajkY#KA|R%2F$DPDjW zt0CAiCc&4Q)mwOVPG~E+47cQeW!nklJxYZWrhvKR)F!SoLA=OU3>`&~N~u8EZjrtUAsc zL?QvidX>Q(lcn)slt@pkTz@<+9aB%PD;523+V$Yjj-IQ=b<#fDvKU2Gc zU)#EAmU;cYEJA>wAzhD4kVZ-Ep1N~jcL*XW6f&K#?$qe6kPX|`8S$YG5SLP~+-KO+ zpmVRV(|l5u|N6QuI}&ioXvc}n-Nv~E0M$lCWM%)=vfcxuj_v|Q-J|3+!X9|Hh#U84 zuC^fFYl5?jz#sM~%_T}tBw0bYImIk@rm-hKHXPHC1;$$}IFrvkQ=T3njopkys7DEG zd+PjaQGCfp zn|w5KuXkTYLum!(w1R1gTR0OC_LWgRxIw;vUbeTS6~AM>N0``hs_PX7;hC=PImVe0 zZNYLnixQe+lt~|!3F0hArR85P;f+mQIW7Ql+BHSjq_u&c)E(~)3md@1*6}{vE>TEg z<~dRHC#wU?jQ5s9u9+=EVsJk$!dv_+liP#>uxIi4df8t$LkrjTYGUr8 z7!VnY4ycm6pZu-Q%BmY32!-#xX=yxMOnBw%l=i32s8hN~(^o!Lv%fmcu?t^WwBJ3) z(!-BA@7SWnUth17WN4lEd=qQ`hO*OvR!-fbuNU(eSM)R-I#3`ovipg-F&iN%SP8yM zBSepm7{JV}CD3OYfUtX|9pt$-!=%;;z&wf7{04JmyY!%yHpYu%(jD^-`-{GtZfu&T zpygE|3dB;6G!0AQRY^yL5xxg%im!dgP)cUIjaV@QDvp$jtn19J5%xfP9+6&OMTbBl zp(ML;Xv}+Jz-suSH*o+@=+m;&_Xe3=TJ z;!mdySETs%f@+C^x*6;EN^mWDVPfG-q4uf+&FrT;>P!74JELQvPAW}$Ie-Bh1M5nt z&E`G}iA6x;sL$|GQ(L0R53HV1_>rw@=j3>;hY$NHRe&#sslVx@N4?Msd*z@XdM-b> zdR6b_fdDmNIj0}EPX8iz01E$g0>`VX5{{HQa~9RBSGSiTR({xCYB`vP zLDI3wzMMrV_p`nHjVkUb^+*={dJaR5*WYW{e2fg@^G8xK6Yt7Ae@pq zGiq-MdT_Y7g`5)uJ7h>N#oX&!Q_OFo??bQzqz?}T*mMMEW}|uxUd1QOjQ6w%e4NTi z44&6q(l3XEu^ibqZMQJhw3z`4aUf*d<0}l<5!$Hydgq^$>=M7W!UW%iGXub!qIO(0 z?bw8;OPm=9M`vdF790T-WBp1`s^d$r|BhY0P;phsv#l~XGv_EH;%02Akr}Rz4Ka_- ztzT=b_`{ijYYLs2rImU%N{6qJA(~Lf$5F`xa1;eItlv+1gfjg+YraDaWxhyZ+I^iU z=pc~N)mdt5eqI}-u7D0IbY{94a90vYXxkbwiSNXP^~}}nJp&8=oQ+*g#@tUjGeZ~V z^|46K&@($TDrI+P=5&5?Bbj6Px+L9N(Li^MLVn5)WVzxP}C~O?HRH2 zVNInA8l4o{LM+Jv*~hJI677am!<{N2UHPS1SID#=8+ix~fg}iMmg#?#e`h9J!~iA( z5yb8SQ|afeq192JN}d^|X0lH`l|L-8v1!r7a(QOjs?O0x)JKG7#d?0%@%{{I1rU!0 zn&wqRyH~2a!Z?@o3pgSWJS_w~j&e0pP4h8EY{f$Q-J1bS)K@39Q_H9o-+RF^@nHe0 zva)U|FQ_K!jleEr%!p5C);QH%+svui7VBQ}?-e9YI4wY}Gf7R|tzh(E(%*pQ>@}W`sYvr=o^IP=Ozp-4mKjn@5|0vZ z(sV3lhaJ}J^9x2h(Zbn6Ud^I&33BOlqj0G(3C$HEY8G*HEQg6`lVMHR4%7KZw<87F z9M`sO?;^k3bx*n_uM0?}EtKCh*a;Y}nY}bTkb!G^Q}q5zvy%%@N3#s2QL5)YYlDPY zdKTOD|8z9R;}@=Q=EhapOnaH;l5)~cow3(hix>L06^$O^?gmd-y;dZt5;6Wj5Dpr} z6TeNJH1~yh#M9nNJ-Nfx`c4p-05wvn$v8uUVx-e!)0yK>?lwPHzi{fK_-&pOF03!- zZ3 zCwKu>BtM{@A!|81rP+%11vGo^P?GAo>c+;^v7B*03D}S|X{F#LQ-9Bt-z0!*F?{7L zlv$f;*)xlZDR#u$w;lxPD^JsSBAPtE9D7~dyYZ?0h|zqMzBkQDvn9>jZLc?!KZ$UhZKWf3ki3vWfTKol_MSVW z@co*_a-O_0!mzSVX2SgjZ?q??imcELb5+QgR4`A@&55 z1Ab1R0BiS1+I^BVmcb zV2a!{twSwD1yj8Y5^E~|aF-}nzW5Sz*bj2U6z0-rXu=rM0V)~;jWTmH-?LqOS)an} z?KYk3pNX#=#!ft;-tttmO?*Q^a2CXJtX3vU@Sews_dL;Yj|puPZ;T}GQ4I$Z;8qZT)KFMobZA($8`t2H$^qG&{j)9HwkPsZ8L2Q zt!x9pLZU4AnSR_GD1~Q&0A5S7j6I1M6RI}nh{S|M*y557F0IMQEe-h7dObISH>C)R zw*g@-uM`?^h&MdOLwLyK@v5Y53vEgUW<}VRTAy?Lv3y<}G%PY+bWIM|ufg zTRB5DdP{xz#`s3QJS$q+6rfL(f#zt$skfz{k5RZAwPYK*-aD8t9vy7B}d1dd7zfN6^p=h_&u3iSQ zX%R3+tLuOEqbL&_IlVvJF2OAife96y;ZXeMq)VHk8$x`k*xJhji5S(=q+qn>Z};ih ze;26Lf33vAn6C)*qb#3~tPzPBXDWc_+e za?%f{o@YA{i!K6n_&{|)wVe<$qy6-;JCB-TiDc8PAQu`iBC$q9NQH$QJ;4e<(g#FI z@;cR0|6*74Ip0Yowk?CMm{nfa)erjDuY&q;yam|X1nhvw&w!A9nQ*T{Y=Z*JIcA=6 z^Bg(-;+ZkUJhSX|=cWdm&fekd+c$gJxkc!m;wqhZam&)MmF)gt7pIR=ECBc44!Ug- zz^Bx3!ysg!e?F7MN6UAV&j!TCSE9pU0$v|WU#8*KsMIA9Az@^A6`Ftu{-gsHJlFXR3M@Ub2*?h5OyWu6lw3xo zG^mFd0gx7zK0>qHvz}ITIk*&bDNVgu-_erTv-TiN4hDYG9%lwKl1FVMShI$;QswiB zr@TBqQayjbbu~0Uq&?C1Y}+-=2SkS)Y|&y{oPJp+x+qswrk(977k2(CDmG{iG0vOU zjJ{ILTf1&APc1~svhr*&<=vT^!}n9qPpi}vEL@D;8k_yZs5@EJnjQe$c+SHa0ferU zxVl4Unw{C_jcrNdM!3Z6^Gw0aR@G|oztW-h8gpg3H#vHMg4E5}VWpG<%`7lnjhR8dDwhyskHxCPpof2;S=FWxa)Z>*KD&dI8}RaFZV1yRoq<5oFv-Qhm6 z({q5;1XH>{Ca@yRdpoBV9fj#-{V@VqcLZ$A7#H9X%j=^MNhD(h%v;Cl0=hlh0hr&5 zHxkL28wg%d4U}m`*0PpQ3=tXf?eCo7f9TPQ((#c!@Yr%ynN=tk?u$SU>(;0)zvC5dm!`4256*tgMPZnX@Uk446TS9%Sw2+cu; z?q)(sVAA@EP4a5bs52Y3`Ov-d94rNI!St^EqRuLfj1MnR<#pF}UzI`dBw~`aeS-Ac z3e`U`!=yZAyp=xN*Vk(NBLJ-srC-79IKQOoBvcN>7ka6%>s`|H?nOg$!_$onl|EW| zCDI2Vq0=#qd7VOjVVtuiKp^x)XojY_6mErd0$(K>M-aD_h*>Y#rf8dK$0zYNs}5_k zo?YHXZ7^(wAVq7-fHUj*{Zu#OVsLdH{A*&5z8n}M0Msl!NivNrAMsp@sK*Q{xyyxUdpQ#;0=q5s^T8mKttdi?kHg`ztLKSiBsp?UMWphWbA^�gF0h*%7G@3<_|~ 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 }z3VOKEGA`k(z&yedK=8yB#AT|(9i}|m< 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

dgjBEK4-H3WXlo*oafUXh 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�&4M@ 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

)K&5te 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 z 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 bjexrV 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�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�@YWXv*u>;u zPIa3im_IAJC(=)K`oc`;QxUfwbnnp}_m^9R(Br&J8Kk8AQdiZ52JOK_NMPBbxG)O9 z0uBD(?xbj9bfiNbj<-8it7nmFt+3hb)V9h>?QqJEZdRAD>;0_0TJoBmJ!7T*?6aDF zC-2$4Y3-=EvB5RsF|siV@=T>3e;+yb@J?&7ab7p%$fWo66DVpeEnaCs-wZpoNOUDG z>JEwrIFTq7^%#(-ha-taQxCXni;8{|TdA)U%3wvAiae^}Xhjtjk?EX&N2vI#9XtfL zNE%+Uisu7aZ5`ZhFdt)-kog3(@Bggi?67+EBWr>x7+OEcHrUlb<%Z=dpZ)#l37AK% z9HK8#i_p=ga}t&AlkQ_m!FsxsrSG2qZKgpQ7K^v~{*mfP<2YgEG!x!$JSkQA_x9dz zvyYB1;{`TH?i!yf6CeKF=Pu)i41=Zc!Mj|b=vxuw$%pXhfjlnm7In|A^v+FU*UhH4 z&-chhnY`*5Yn|~`eDj2yjoEBBvL-^}2D$NIm!6eiE! z$?qECSY>wph^frdfA_caw`BDF&JD_>@XdD)gjE z$*Me!-O6Clm@#0>iYJw@}s#Ju**8(RFKE1}VdW#47IN^iqu&1>C=6MxDv+A?XI$tX*{hialw6a8Xfq>g^Y$6Nu! z%yIS-3F9<_eSpF!i`Qi3`~UShKr0zl}x4wA_Zc#jft5G`}E<}tF>dFaX)QbQQ?)zp!RcL^@49? z42!{-%9xJREi%QpXseU*X6W>KDCf+RKj|e#rR#1bQ!#;c!&}va!zQw8r-xLSdzW5Xos2o;s8BP75`XJ*Y+e6EW zvmtlqr7{a-eU%*B*bA|UEJh5L<=B=(^%uFJTPBUS;f3qKiJABlGX*t9pFB@JHtJ&z zFVS%$JcDLMf?IQr`UpGynXKJmOea-snNB-PF!TG}SrsqKuIPiEYlH@Z zcGtoGCQbPv}CbnUs$N2!F=MUL$_Xakt-G*Inl4+k>j0rl)^Dx zd1voBP(8)zbzV%&Z5wcPXOC`Yx*2fjGg8pju%aBzdkyyU;;yKVNh)`Tl&yUEROn*_ zTU4B?ig}A{mE?|}`r0{ye;@%3+-8@bUF+CbY)1j32%O9oo!~^(08PN>Y#)@fB}z2V zxpiVdrU!@yljeI^5ug>A`mbk_i~~m1^XXr=Rw@>?tUhs+$TAzkwDc9}{-W4kgr6Ac z$b794zD+9->^^k3Tq-L6Auo__Nw=-*VnD5M3!<|0eZ zf=`I!X~C*JBjP=ng}nU1x# z<~~jwPK&zGTB0`buM0cuoXqhiM%NH^w;(gt?HIgqRL?rHQwUuteHtfZg}PjW#WuzQmpygAc6C{*ScmpW zvSt(7$9&#fS@5CFE86%p-md2N)oooq*NT0Wwij^5bKmO5mhDY}r!8eU)c13n!xK?a zeL*Ej84lW9fJdfm%{XQ{!BL3!b)MD^{R)PuQ|sXg#e1R>MtcNjaf^X0?tb{Dbi1Ri zB0NIgHenjsiIwO= zEJs!!RdhAXG2{H=tuaLhoC=k-EqGy1^Tg3jq4MV9d^hAB{8LYBIb+|!W)DMcNC+E` z+io?m8#-{Nw!8wbGDy+Q&n@KDr<$9?DrmyumxrMsq#rsIW9h-pcwS5hmsQ_&K|*S4y=Ws<{aG3 zbCX9)xIY06uXJkOq(J$RpQ_Qd>&WPj_O__C%PSM$z#;F^CXPrvD2PaLvAS!w8`1zH z41M8FVYv~zi);Ih2#>VO{y>8pHs%)XMw(@a(1WsKXBR?`e-k*u*vC6@k71F;DAB+i zSfrP^XILAfjkO_B;E~R~_DB}k(+Z(D!zT8`viujbkBy?j;X_pQc+neAv?^W2k@D<4 zBQnDV0~-RX3}bi}7YJ0?rsfgpqe};zqF7K$(m%Gcfll@l&u5NfFP~FLgCjO^K}%1y zHNa97dr9ucCvIGZzNL`GiyPmmdIDER;4C~5F4+fpEG&7m!xbv^C&l&Zs#SakmrG70 zrDIVyAk*4WfLaU0?%QM}Vu5W@Bqa=C;7mZq1xi0dA&2yA4~UX(JYUYvOEM4)kyVo@ z{1D!XED*W)^4ua0y1!ax+U7}uDp`SKc3FSoTqZQau-69caYAe*_O*Wdo3w+#f3wA0 zUNYIc@hiKNv583{y8~Y1wdEIBUP6h;S@(1KXH8iZamD-k(fVgDmD8wORYvr(`7E4k zOTcM=r+Tp%ob>jDwC7Y$b}RnSq1*uBPYPmKCLvO$8i-&CY|WT$xG=|wPpejFuLvm; z62zdVgcfXnX@vRQ*{oyivtY(&=xod(+$E zi8eD^Nmz*s!%GaNJqxa9lhe!5(CyY}{3F(&a;tL$T4HbD;+OkBe0W4;6$o40n_)~U zmKL)Nc<+mZm~%{J$UB%r9BgVhIh0B4t9WxnKRc~e&JNIt0LQ!CZY8lc^?3HP`rl&# z!_~$Of{EBlfUbPiq-EhlU92`erl$6gV7QD=%eDj9>|n3?(lTye0+(^l$0MDKxJs)n z$Oj?nBemrxD}Tob&Pn(IE{!lGDu9?HJWq49*)}C$fpN0>|GRpsb94FF~l?DaCy-{n7|4VwS>q-crhs@mlq5Gl|`H!p$(wumx-vX+WT3$#i6 zr$;)t!8>vNy279$5x3GAIdggaV`cYG52}V?S}~`pMlQ^7Q~3%|Ys}(>^ILBUI48}ORQGJytq85zd$crj+x?{-{N{hp^Vpuzsd8EMrKgIRj(a2N~8f0PbkC201$ z1p5j$TVB+Ktybpk@|=(DUr5ZUsNeAcuYN9;1~}t`o|EC z_*)^2by|+NUx%OA%Cbtc#b~qw4 zziB10%|%ucTlg2a=+iNmC{1+b$H2|$0f}A(dUJ$V>LyGS7D8|7SGsDLnWrCQh2XrT z!4)ad1)1hBu4TySJU2}Kyipe*#%uhas!5;yM;$n|#gx$M&nPkK!^INTEp|pp2$-Rx zJcbUoJzV^_snS-5zx}wc4KU-Ow#FH?LGzL3a0K)H1Hh_Mb>h0Iq+4ABhwrt2Cz#J$ zA3W$@Go~03Wg%2&h%XzB^WKL~v4olD%hwQh5T0zg34l*;XMP26GeMp7ZOz$)vxP+B zLB6fEZzmR*%VC7KgLxVvY_*?$)VAx^tp2I?JKRV^bbcA!N|{@h^btB~tq4}{P#y!@ zmQI<`7c6FgZ1T&8q^YJ=w9gzoA`;j!R?Ew5HO1ugnj_Gdl|iheEICb{#68)#u;Ceu zC!GfAL)J9uD@PF&3h!K-niq!E1PuX$2C{`S^^5lP!8474V^wjLD;oAe$GTL7UGX!B z;I-)|$CZ^D-)9TQnA{+cE#T(uH(jydh0fZw>J~QHHR%q>BQa)BAHvl~Iyw)EGZ}i}dKp}iXuUmxF+Eb+tX9jG#y}V8OFDEUjqzJulJ@)SF0p1x zT|ISnsE~NFE*a2Y;n_A%pjSYbaRD_s_-C}eA!o~J9Y!F(4z^6u7*iTE8$2oBjtZZn zpetJ*ts&^=(bv-r1fB!sWm2Ty=p!wHT|xxQ?%aefM`DU8Eera(bZTObX<>9Sv1_R| zYKBQFO1rQU%FhDEa#*o|j$(&4lw==N^dvQ@N);)bxZ-NH7!~94)uiV(nSZ?dOykge z>vdA1YNqMS|C9^1N(Puft?0i!h>c%c#`>{#K!ak|_&12uLW9V>p`MFT_kgpCnu2AAW*@vUxc7BKo`$ z_-o`axmOV?wpe)*+TEF@<`eo8=Y)i~9VLXf@h_h5`H{!@K{u2)l-Ji{V*184+Kmv- z9rbnfiaDAOCR%6uFZz`_F9dS#G|JTtXR@tlIEx!PFZwUJmLV|W6(V)h0}HN@-qlp? zmVIL+AKelL<&k3J81((wO%)N(J323ZFV+S;iZ!V#*3lGfhfG$sFMc*^Hr4KR3pP** zSuHz$8#iS92V~y%=p%5*OsG+RJ-R;FcVK7bMA+(2?>u;OvlMG?OiBqVgzA;&wu)V8 zJKHTSb4QytusKc+uTsV3guDsjMxB$&kgh&>IlGf~6nH}dwSo#alerpO10KmF$pAJwUR`>^ZPxp=X+?^dhYhr$Dg>K9V=p&KixgAi$8Y+)6n&V!vvZ6u$} zrjN5|h>p4rNtr|z1wQ<%d;6k84J5M$AqMoYwps@mx2xeU!DwH(wEDojx%}9ULPAoA zw|hG8|9D-i_p#;PCY6x*Q1UkCp^LAbdES~^w*93kV15zw{@3a6;3)fv)2T=eH!Tuj zQe0>@is{J$mN26*GXdsoWY`po)=1OU*}q~ElNMKrVW`PBMd>luAVr5}-9HW;wnJ&G-r1mJIQU9&d)yHp_HADEFcb+EU!pkYaVZVODil9N4_CxY};UqB1kimt! z<{zru{N3(smvEKUj_FBJeg@yqS5w8y%GJy!DzeqG0#Dl5nz6NZWw(1$p@y%hJxR5- z?*d-4_YH+u?8es(MaPR>1AdUn+;_eltK7Et6@}Q>mwm%&#d0p?>M68K&-0uRCNoUO8ITVh?ptB{)#rafZ8ODt-)!IXPc6AQ}n`GN=qJFaSC@2m}Ob z5QGT}>6=mk1z^MBfeRPiTFSD_EVbYO;IR<-LKr)}qcws8; zh^>E3V*Dx;bqwb_O}_vPBZ+ru{#hw_@nn^aRdUl0&H%YMXBMB4mDQ<@*w9Gr$EBWR zE&NMxDWx9P3WPSoicAz4IrkP>K{J2p4JoV2&n2K-rj^vumX9$?6GW@_?|Bew%jLV&7ByEFnY6rkFSy3;Gp(PY~rV=$C)&} z6TC@_$GyZ#i!alWp@3Tjwi`!=!zhKbMoxxEe*Bzb%l9m5pH_&PhX14SP6rOY25?+r zvj0OKr_QrK>hpUWiS8qxm592xbo|~Uo751r>G-&&qPNVg&zT`UdL|@PjJcw-larpj zObZxj4yJ&kq|6dnOC5?ko2F-QO%;eu9INq|3Hc8&YVev+;F?N7j(8@Fzv}qOB8&zG zEmNlJzfX7_FTM-ujkMkZ%M(;vMz ze!$$csx}$SN+H=;cahx>OM!4xY5GHXa;8{-Ok#A_V6PaxDc|O-^K{=fu`IkQ+d!yE zx2wyC75ebO$$1zRhU_12A4LoNzh_)X6En%X1M^PhLpjxGh%E;10%dNQiPgmSJKus|ld$u-JS_`@brQnnb4_!qxYrS*{XLUNaU2N8j=+KEXtw1U%Q zUzAR|B5fw?pO}z~rZ8ZZH6pf;^94k?oIr_ zmZ=4g9h&qj!m-XyXyuxP&8s~gJ>8kGG$=;YpMpx#hU;KM6xXn$h=*g=*0n6Lwsz>^ ze1bUDo>PVATJ{T>h=ZzkmZCbeHTosQYI+7YfJQ)n<+EHU;$VFJqw{fTP*YCXL=xTp zl2&GPC{eKbTKxh(!qF)~w7SgGLS zdbgCKaFlY9fdPzU-aKU;$f7Kq>QzH-FfREBZgTZtW0g>E(jCJ z;Nb~r>cphZKCU)VxY_eV?NCrd;}^_|6{nYw5*zy?yce{&wP6@2vOMTDrMLSbWve;V z&u!0-AE)74*deu)(%~ij*%NWN>Av>hz;>nBkXJ7-hB{a)1w>wlnMCsVy|-457E+1P z*!%p}ZgJS3OeRzbqa-EzfU5W(t1Ujq`HTk;97dp>c(=s^D?cIp!uwz9a5YM`Ja(++ z(QO2<4Zl3Xw~y9l*4hXx&;z@OS!$dipHSX;{ZB2DL$;=b^xy>S>WaP`W^h%%T97Do zktZG7@+nbS9I6mgxjL>!NA9Ls*3_4mA6Y-%yvmABQ*ARp3u4PViRQ(p*f5zCqGOp5 zb3ziw1@-tk+uRn>P%KJd*TqjLi%=rhMhJwqUad49W=V+{PqtwaCGZ*FywEfEjp<*l zLh0uiMP$89L=lMOGW;$4b!gx4ix3IH%8fk1@4+>b!;ZIGjrj?lOf+!VXm3l=eEAFP$nsMc`<{{fxiVgNUoLG*Ra z#MTXXIz$abwFn@f7Ni`L6()Tg2KOqWd(apld-^K49?;USx`m4a)~#_pybP@+u#dgc zI8K84dUV1oX#z1oKM>D5+;A7teyPJfCs+No5Pes}409Q(lb7Sm^1Rmcggzn>#i?Wi zNPjVC7*a!0d66Ab!-;=2Re- z&*u*+*5KwV1Vx3JvbsmYcV|*?J^Q3>(UMA0OmohU`bTqLU)`58U$LM_j_aUH^?}GW zrx0tlh#PGmA;;!%^6;tM&^eUx!Jj>KR@i0-5KI@YyV3;No_uDm(5@Z!(To&LKR9cP zY;UtMuC$+I>0~w>$5E4H$YXW@mNQe=ZL_5eeJpbSa-S4m^t^NDB1mQ%+>+o(a_8R3 zddJ}iRKeDWDf5LcY$e72=<12S895b1O?>(CUH%bsWde~B(hPW!>;Yiu>n2y*XWM)h zhOn=_TD)K4^+Wij#OFU?PJ>`-C=;+l?|)q$GY2@oN>)5DfLh~VcqF_V>#Q?~;D8gq zrC~9aL-@6g@K?Ah;}J0p6*NeQ?j&m4=_I)PvP17mUAvV9t>Jtk9IJ5r zwL*T1WzRj6HGiN>;7n_@J6y7>yP80%F;_NTU1W~foOJnembFyAZ12IWK|0v$9I-P2 z7N*4kO2~Sr7!e`ukAG_AyCKafNrL+J>@*@&$wA27b)dhoB`4S99@niBYK+Vy>vYqNgW0p8d{i5h=wTTcx%xX(Wt#Rjg?c)amJd^T-7s#}s9$ zd3oo7BZ7BGWh_x>?1>0RE_i95O%HO`%k#Zu0f1k*Ph}gaT+J^L(NOg*|&s z+`G4c9%oD>N4ob<&pkeIP%yQdnJ)IUKvP-AOW}{b0IQjCT_;L@B&0Ua80>txm%auk zFT)47JI}c!+k^2f)%j+0>(jGOF;IwBFlcP>mOi6rD+ND z(iGf*DC&Tg^Xziy%t)=tu@#e3%$;8#F)9gw-Va(}IGN6~b4p6Xb4%pdE*^GU!=vZ$xL;Hd zP-v0bc72)GK>T}N^SpD1z-a%xx~;K|{}h|WsHf)+-@$LdcT^iS({b^;H}+3$XVTA` z)9FTeYrLZ)75k6(^V8nE>oM2r7vo3d6$4(E&SvYDdmweqMJm@2(e-Whdezj7)oeGo zB19jYBy`&pBwkxNju*^QY{x`C!#7yzVPRn>HyWC(GD}-9Orq_zw+8z9`s#kle8Wyh zTTN{_lY@eSBD6Hd%0ORVU%jbWyV`tlMH?F%J3~jNXx@@WJ5zRY#gJX`7*BR8nMhWO z@yXm;@4#ZR4Z)TX_ad=nnYwB#Axm2@k&Bac_o|eO6L)ev7m8d$7(u~$NrI2#yg09P zjbuVbH2YG@Zo!zxRyj-{hmZeBy-52X)sPtc=i#XeC9-1!{mSsi@($0xWqohT_f-Qz zPxsR|pT}h}1@^T)wQap6iH(HNTzonzQ>K7PWO7XUa0OLKJIR-ojc%^yE92%>bciD zJWed`2W^iI6z^z%De~Gbx)1g252$LC1Em$AI|#_jyRzL}`J^Em@AI5rLs9vR$|4r4 zte3GTb5d*@H>zm=>PHt=O~aM7IuPq3ZdN&1gYC#a_;mL}^UN>$1hIxH^q_YJXHl-E ztt2UYEWZBk{Pp^WNZ@JJD2WZhX+@!wquFDHZ!S+f`*NJ$bzTkL&EvkRZ0GI#R3^>e zMp=-ZLgkTv2Z$+*;rQlooa&h>Wr}=A{u7=d+;Bi|eJqQ97{d|{0$s_m-yYA)I8eBN z3WsJwoGILor0_I?iYqjhG8C2#hU6fE1q2;gMt%kv1?A8fi$G6PtZ+7HPHoGE7(b;( z;*Tx_fmZzfJf$)+wI{jbal5?Tv7~xVr7#cvHz?s_HnosFR#nV_wG(Q;Z>w1o2dGZa zWcy!Tx$|L)snd}<@i30oh*)Jan;w$;7Bop@>Jl#t!TQycx$25@x3M_KcpDQE=UK+R zSvVug9bgPZS<{#ztyjzp(9AIN`+nF)f_rASih1BYE*dEM_-6TxuPF3SG!J9 zAR*oKrY;E_Sesl7VPv3km(3g3oo292qBXKJdlcj%`lsi7d@v6kAs!4{h2Vsl;R1<(!9;L@#3M*SNXp^F zBbWJYyEO23;l!YW+Q)mH`;*c`TO8gU<46%HiJ4iZw`;+c?7?V{NYgbg!Pdv(<8;>v z-)bZg3W)Wjv(gr%GvI-wId#Ekw*@(()KbQq?ca<}B4gW>iMve4O2>c7ySi$^TWLR> zM(RWr;UslBU}HZPX9Xj$UOj{~&`E6GFY+s%8y(VX4;oURIV<4IMdvGkUIp){$7*20%0=g53+fp(J4hc$W&=}Kn}`o@%=;|_QPPB7Sd zS!jr2{rKe9B-BsIYh`zILZ~f-7!134+YnYkq8HWenKT=9sT-N-8nyf&rOHh?_s2|5GxLcy=R!E%7a;UeRhyB4hbjrEWtl6Bjv(!G==K$ z^&qu=MT{@|eH}isZ;z0hSRSbfa}ek{h73H&M>q7}_dZF^Nz9mFIVwQbl`N6{1cmWK z84)C{k|1Q(hn(esjlTU0nuKimS+sd0BnnAg1{+Wx`CB#0{rawqoR@wmX0yo%sY0et ztlfh!%dI|hI?|un`*pm1+{?@3fMN!#*j}HVO+^6guoLOFjRJEr-uYVPW$dd3fsy{# zJ}O9@{lTBsjMvO+o5Q4TN&2WHN;-@=MfaKEakhh6o;Qjx#?8M&C5{EI`|#ZO4IUzK z0=@jB2`(tr21)f^3r#6R6sK@{D~+B?MHDr^luX|B#?B7i?NT?Z$#y`@1KU4BDYMTwmhg zi54XO^dN^e<{Z^hG^m7}yPxz)vL;3g@N_AQeyWuwh7hRxWj3#lgPh&ha(R{!Nk_gR0 zrl5Qny~=Ol2h=6g9h6g|8&b+52|DF^RyYr7jFm~MJ1#S(>%xgp;mWt)$5in+HM8R+ z)mmRS1ab$<*xEi1JVkgfi%Wx_m_qn;x3f6ytps`6ZLR6MPu;ad}*TS6aG|Ha>i|9YH27QR+qs z`q9+uK?4KzGs<^bxKTD-&?&?6pV`DXsk|lyhFz1Ux(hV45Fp9k{i0-&wc}dD!W5%g zyLgYYr4hHkX5u}shX9YNMa;++^&vZU4X+FN2reqd6r4YHb7R4)2cryIZ68Qh$O7yRdT&|*Z&{_(RB zqbRr6fFR=!Pgh)fmSgh9{&Nr<7WpL)-qndh;1CXChrxrHi%3ZsGIV>CuZSm)hZ8wC zE=A1D%S}yZj3w_H)9e_Ew(-!N9sq(TzyU@|2@h^`S)7k1-J0WUc$Tk-28Rz92Z~zWa#zU=?4XzD3nOS6z`bY&RZP30|6|wLS#hJ#l8%JN z?H|DuH z6+{TRzCa>H#XlA~X(su;s!ICacpt8Q2!atPIxgT9iXqFKxADV&SlreO-o z*L!VWN3k zv+wTKoczup5w%a@kdmdZDGzPHg;U4<2M^HVeB zrT@isMf7XP{|-w_AO3@?`|r3ER-Ka_nv)Z{SDD{F_Y|@c8aq1^8ylOqly_dV()1is z_dFFk-PJyoot>YaAN}yJ@8P~}B6e-5cyR4GWNP|3Wa$1Vz2>aOf2lny>!|)dD=Rmz z?LMpg{$ImqNcC$-`%cqm$W!&uYsgz~^mnbD{Zm+eV4N{FQXr$0pZV~uc0rYPw%0f>9RnOQZgV&ei;@RKnE-y3;@m# zt_bc6UJPCb4h{hU0U3=R#?pmdOg{wm3PlC10=7Vd!Jxws!|=k$!#KdC!}KkI!^+aZ z${NDT2E#VN&fy`!<%2rFdBYXM5deWeSs(yG5FrGCkcgOM4nY!;l#Bw4at@JJ6$y(j z7KlvWk3ublDvLISwt@DFhQ+|hh2B7l##GMC%1p(I# zk+P8Tl3sz55s~%C-Xf6?u0B$s$}&;7P()MYO#P8v2B#V{p(^va#G)3ZcA(Dg3k?I% zghzYOM#m?>(bb!G55SK`CnhB&r>3Q6WNu|;XB99oFhW=|FERVDfU=UYvayM>$+1O8 zTNV~am$b1Ru^qFWvYoR5;Mkc6*?s7vOUufIIM6upICQy;;>Up8O(ay@%{48p|Cayh zPPv7*5rqqCE;%d(FJ&(^Eln*QE&W?U6C@H86zmWZ>IC!(_xAM<3Q>@Xo>M+nonM$=(wPD44A$02}}TfP?~G`n>oc`I7sJ`r7)I`$9nj zU|`|k5fG68$iBAP(myECfp6YOfaCR<_TrQ<7kP{iFC@Up#{6h&ewe4NrXo8fCdlRf zWKU!MFMoXnK?Zze;Oj3Wz}4Z(RBvNpe4wqNnw%&%119X3-|^~X*Y8}}gwOyN6w@Hd zAQZ}_pnpL+!S=!Y!2-c`!BoL07$}%1SU*F4hOCAD|DYHf9Uq_YKO`oSfRKVD{tpRB zBp~FJN#96LN={DsM(Tf&mX?-~o}QTgpOlf2k@%hRi1PACKp4g>H@8v4v*WYBzpD;Y zuVX+&vVjGP#3tgBWORp+iwQ()g212wDXeHwBygkeg;tQjg@IVX!bqV)@y7B(A?Ggo zd*COfg3|4kuw&sRF55vaJVsMtc<#FjUq5UWQSY>V12=HcZe{}HDNn7bKj8!pk`WVR z1vP<@CHkN^r!7!SnsPAW6lB;q8!VH;iifc~F_8*h7LiM%H*ok={A&c0S>a?Fa<_|1 z7O$LO*gA^U0e{ywf{|al!GAjw*>hZl!t)i~f9?7H5nWqCw&+Mrqn#vMT4#gSPu%xS zy?g!H;0wxkK^zOFt(0sR)YLLEMicZ0q(Wxiv&s@9sq_}7bOyn{5Fi`z3(dpr63k9P{FlhnUt?=Z6EN|jEY_H&S@g=f2?6eoODfbiO;#G~-{rbWt;Ri?KNs`2JACK)VE8vT}koemNQ^#`gLOTv`Tbi)hp2H zdy3=0i$D_eCpk!HCS9_!o&{5;XS1Nd!fy%X(beOG^1ux*Kex-kjOW$)@8CT<;Lu$l z_>tao?B$fLI5!(Z53Gv0i_B zt5a=s$;|H0XB&IYY{1;d4oe|y62z?s}+!z_E z)+HS$YFdaSi7D=*7^@o==@}Y2U%t%YS?mShAi<%1p)IDxFED#CF9^9JQ!>c_r`_gX zG-2Lg>UtADmzK*;y+QCs@rE8zzFjUPDq&Rl^FB{bK9CCUD_X1dA#$+h{n=^@+hd{9o0FE>v}ux^DM6F zcW;C&CQ~7U3D1tZ2Xeg~ZIfS8CFLNszWlvuwmj_aD1hx$=(w46T>tV|t_#Vo{D-QL z)|M%jf=Yeg+h4yE;KN?7@WS6N7gl`_^{KNZsk9<{tG-dr`H6_8vfdb`J>l3Cg8>uw zmaRhV&aXAT{_o<-IH^jrO+#nr_s#Tb!k|z3x%-j#pW>DUM)uC}o1%lL8; z$`YrQqIYsS%T|))fECV;841~-Ye7_A3LVWxKgxMq!O3`e(U%~8yh3u=RFZ$Czp{xp z?~=E7@*W>0vZgeKBYuX^>sLRJ?`!h4;XpPldl3IL1mgkzq8Ty`Sa39jCXvmvJKPT; z3U*;O68UM{m8Bf4HW7mJOMI}38#9^iB-nYpoSOP&2JN3y;Xql_HD_hT2GyLn&@em4 zXvQSBuSkl1OzscKAKx;HNS&ENw-#$19r=)PLH8s|0u*GYbQRvwipEU?*7E0kbHH@A zl60uJJ08z2!`fd;R)N@kIs1<~cqLv!)q+&mCfD0gJ$t5-Xjn;(#9vyWcArC(AAQaZ z&R4aXq@iY4$eFwvr@>}=6gaLf4!1Tanx~*E%bC7jCdN%$MO7@g2%RPG)s0W?jNCe~ zSraQ$3vvB`KL#Z#a4Ko|Xp+4_1W?bs9LziVU0VTiASFiG?BcOr=VU zO3}R+pzCXu?}wZLA8&OF1`foiJ1?2EQpdR+_#w^YmU28b{~aYDcu&UAVxgo$h0OQ` z4XMXVTH?TG=nlX`3^yA0a1M9yK1ZQ}(Jr!1Ko5f;Xh79hVTDq!GosW9i8xQ#HX#}$ zttePrQuKV3Zs!tfW8V;ruNh~-2Od=6zJ0yR%VyjU<3G=@{LKNn2BYD1Nt4t~Vn7G)REs#p#Gi$vY1=^WKUDxf@>{w<;Yf5-;{&_LpQQkp@}9~}k1KRO0}f7fgb{`!4=_+2vBc0V5!`S~nF+25B-_@0U& z-tW7AJ`^C%$9k!X@N^Uqeo%!vv5Bxp7T_LJz3c>ib-!f2*jW0l5#4iEX}oN+i0P|@{!egNiJLzs$@{ShJ5EaZUu;jtowMV}hBP1s+COKD+=Ad6Vi`hGjvN zl+cwle$M={+DhdSLJ2KGm0Z#SUcxd7C=R|@xX4Ko!eoCpGzxy)!`LPq2eV^r#Z(Mo zZAG#shT2aDeIi>&NzZoORunc;RRnv7?`|s}-f*wiXlQ*QwWXX*ftGizkWSeF({@;dkp6;fwruELwx9;8~k=y+g z#bV~1>GvIsKpK1l&meL4gn0-j3%;g=I<)Jts6#+BmEP|iGQ<4&ezDpzkENX-ahFFB z^h`%ltTT#iv_EiYo6t35Q15~pcM6QcVr<~4WhXW_JqLcrSMMJ=mk6TMWA8(^vLU&Q zuTC$7KqbgYTzwlJKo_ye>2 z+f;3NCDm}yR?nchs&WEFB9b~+^ zmUTj2y#3qW%+MbI$dre64%g(Y6iSVBd6EAeY-n_@i%pll*)o3$Jw2gG!Aq=DklAcp zPr@0~D4awqUjK*N7!MBLoQ<&W6034%nCcKgH5kX&<2 zRJAh#CS;3+9 z3-bbDzOh(`&(w578Gc7wHlPVHQFG$jWsyP)nW-|=oZN)4d(2KBD>5cMM`DF&H%I8) zXO^qD!3P)QA4VM`i@F*nxHL#f-@t{?;EgMeP}-#T(V2Ekxr7vaa5cfF9?ue&A=R>Q zrAsCbI>fjwD%S&{7wIi;H(_K$DPs5v7HrBX8qMM%#+OXh0jWj$;KG`xDX7y7A4Bv) z-j|_0s`uNf;Wq$Du#R~oW!zXUXJu9>pSURoU#hlIcYn>zn}#So>A%6MZr}@EJUxf* zHW*9_$RE2YBa@4kRFwDUs8JRrmyGLo#07UhFbnPgPx_O-sBgK@8pAb?E>k5LVbP@U~#EzWxNcg;HtL(<{55t z=7IOH9>cIOLJvV>zn3o!C$sT5;%mvD9Fm?CEm&m8ZxZF89^}okCLqy9zHbU~%NXf2 zh+6k+W`DNB=I~7i!dl3!a9K$nnsy^$81sD^3HlG+HzL~3nF3R_6SWtpu6}@CZ$MNJ zfEV1h5%HdQqe@hR|I|_d$R&7yh3|lt0hy5BuoD&`q$QUg`V*MvF2_w^Ai>e?%%KPW zXpJW`Tt`QdXj%{=qjyAz0iSC1q*s`$fRqkRir6xVq>R_%7dwMFPNvMNZ5ua6REixn zNrm7dm>(p=g4jT7{5=jaRmW&%HvSFt_UMxVmsek z^$=~zz7!@Dl5v_(*j%m1{8W3giF3#K@&}6sMDN&sahCgvprFlY#RjQ|WSfIC4@0<$ z;sNkIgx@fMhqPPa)3kjQ<5qA%#EWw zZBB3L)1Je)3Tb2z?{7h{9$#_k`twd3;<0|ljs3fY59j~KRhu?l2!Y*mpj*!txa?lYyT#8-QohtQ2I>?A6&xe{w_xm|9t4td<=kv2 z<+L&b_R_##K%=E#u~wmcvVgW$u{v}STcqW5Px+Die|SQ3Mm(wA;y}~+nx#yP_5|5D zogS_>zw9#FNUKpti<)gKQw@bi+!LdtojQ$>Rf}Aggw8bFitxFu3@@NDk}AACAg%Dn zW!@*%S{cR_^LeXPiL`RbNN#gnelp)WlEGHAtkO)%)Ot&TQ ze1=1nqf-$w>v@W4iTVIOS}h`4^u?n>Xa?>SGQ_J)6C+2rWx#Y!IiL?-gE66MSprY(OG3eR$A_LxExsU zk~VRRl4btmrnJ8OBotd=PvkW^2`wS60R%n(_V~3!Fl(F+fS)>feBgk|!5h@8LUbZW zP>=E-k%%!(LAt~za9V#TYbpUgMN9BUnSt_e0LSK3@@KcuT(T^hEaC)TJP`Bw0y7@A@WdQrGG z?TAx^)gngTA}TD^!+Y+TlPhhG?m!sh%9S@>oGdj-NTzE*ZI@zd%WWw zb54+FTv=lw*;3+r@#1XK+FS&!&BdDxl=|Yuix)56l#$%VGOlcK(KKsw6IY1{TX4M? zpM|+v)M^kAl9b#^>GqPLn4rK^GL=h(8LMa$41xsVJ^X1hX}~toxY9m~(yVz0*ZB}) z^E+uDMfsiGeH2&PN8NJ^w@_&xbM1CtQ*3!YtJ@9=wN*H_GZZ zA<$D1B15Ey43#_{sD82#hceIybU_oK>+^jid@_7Eh%(WRE~8915k|r*+eoB}!RpFv zBZJN;Wsn&m-~_0F8c6y=zVhSvKHv6LjLfTE^)`%1x9K$9*m>R9ojO&Afs=3;PJ*l8 zI8MY>;5KyJVI2aCv6|KFwI!=r&uSL4AY~(VWlI~6axRC& z0dc&E4Cmr(osb2*-EDPoFSLuzMRs8eUo4u%k_m$$xRUbx0U|I65kU|NMi2rBK@fyu z5ClOG1VIplLJT2<5TqDnPP5g^S{*o*{m{Plw4}P@F)WDJaJ=R0qr21#IjnYdJhd7;|RLv zg+senW&RROQ3(@Uf~gc_q?STo#K@LlDg~K-!NAO7iHS}2;mi}aB!W@1XT#WvW2>6; zQ82Tq`94W^AYO179}-mmPUF$=?g3%FA)T?~$H&Hv54}@MN#TfA1VsV(by}%lf;A2 zM}|dVT2eC){esGuRkKb#og#~2+9yU)AkDw9Y=)lHQAkbb$e+};eFFp<*Vz`7Qsfo; z1!JWg{>5oTUb~*x+!=k85gNZlrq&BeaSurCR1ObrJgk*QXYpic0KUeh;n}-1`a3O~ zLGcqW`D|Czjtz5hSI7uWdnbh5yDBQFv-9ow%cBZyBjb7**O3wlr%918CZ(X7ma17ojw4 zzX=2B2#v@)1aNqNd$yOCf~?+M>4KxbKSrAOXj|IVqo2eOnGqjN)v;)ZS!UGTR6FD- z&ZYkWeB6q+rTmmMc5sv)(z4$ z?ihU%rpI<_O%P_UFj@pLIvPT6r#XFLN=_lo;H0O*S6lN7^s@{PCrBEXKzn9s=z`h^~ zm0sJ$&1Q}*Sx{s@JFgo|qY6-bx3i#CqX}g=LdgoyUl&FnnYeC{&5<}+i$z7V+NmY5 zFG?Q+m{=}s4wY~m<%EGd>iDHz(6)1RO&CR@N#h)bZkr3Hb?lNR2~KbO-x`Hh#dUqL zFMVYC<5K2OijPOTpPx7Xg`8FAAP8-f5;L%VXDl!dp-UVluxQgd77OeEx6{5}1WsM1 zCF@NufWYohUCMZY0O&&m35pWcCjlWODgW@u4~cWHkULZjwAuOPdZrX7Ub! zen-dJk2C$&$c}Few3=j-F+>FeX;!=B_-k9zRj=j(&7559Z%;OjfzPEQ+tKJ2pLwadrH z#}`i@*6{MN;WZ1=c&x`-%0}5h$r4CF0#FbzVSoez5hjuW2NW!*o~JV>6B7vKL0O4u z0)fCmJ(L4Or&Dc{2n$PrC|kiwR#*iwc_bzbk{J*#>D=pQW6yn_`+R-fzBPQX;e)TA zujd;3t>J0I2Oo9qTElA%A9i|r`uh0zt>NYACjbKlFlvH=6`Ul~Bl3tKkwbEHL_-aT z0m0bwm;1wQ-9|f9RvBm1Fl>UNDkzzz$m0QtBFW*1=zd$b(GHbW#u=a1*oQs5yc*Y8 zje2N!;LdiSvMGy@MPv{cSwSmc1z)5~cadB=7b)X1n#IhLQ5xeCbwnZK(^ErQvMS3q zp2pLWj#Q}1RGBPDS0bybFsurjE%l=#4e6<+jx>CHynOxa-hFG>@bndPTwDXL#7ea) zOJs3i`PEiueYp0DF3AN^Oeiu?WY=2V1-Swjl*VC-GFOEP6NhetCNvq7frKp*GuH*Z z;5ZCUb0RHjeL-<3XX0=hv{jol8BAz0Hr$48A}{Y|;@wcZyu6!e(;J3{)6mSt%NH;X zUS3{)z{|_a%d3f+NfYrhq@j3ud3iN$K`o+%!vc~~Qc{wQOqZ#di(_thA z!%zW(A*kY$eiAN$AXGFmn-qpQA}9!$Ll_2#5DY^MA&3wnAcP1AA&d}02qDB6L{>$O z0YLaGRBuW*lMSJDO^aG6^7{LRnP4XknwA~Npu4vFAI%|+nd84P2N_U1*h#~)FlheN z;>L?B?RIrI1QV{DXuG^*#b!^?EUwOAV3C(-0N+$*3}5z;6ch0{$U8rh9wl%7e5X|( z7TsG|GFR|;t5^fNnd~5xOoqRv0CnahTnPjf32m8}x2DaGB+u##o}ibadB31)sH$F` zHUKsWg~6rboNZ2qey~Mt)Jkt!p+Zv-!k196w!Wjn$}Ct~FjS^xJ6PLMl2thdH_B{) zJU`B&CWX};chuY~)-euiMw$UV#^eu-17Y!SWFR?bDtMLrU)9t$t;9(Fqev!~eu#uz z`Ofie_bt2&6>pkTJm!j-Jt8@Z$~U#kRP265ccK84U*|2K|v)buq0s z`Y?ZD2?ZnR6M}Nwac0VYm(f(aLNF#2^L^Dx1*8fta7u|soU_e!z8*ovW5w(D{1WWJ zkhtRCX+i;=gG#7ukR)Rb^{lYrLG?MP;YJgt1a?p&iiCV)fic8`;}Ezc}!`QY1YpA`uS4B|N+O00Z_SKqCTns?13?vsMn` z*O+oFO&uYM3z74W$5Qv_oWFDoaUIIesFGQL@Tv3c-iG%)`jn;|Lliz^+Lpa#FA4N1 z%_(s#h0CN1H!0t2gj$`j2EkjK&xd8iKh11@Ag+x4_0x!-YB>#i7@E;&TkiObQ z*cqtBiPh(O-GdBgyG76V`@hyIYV4qU#T9RIWT42d&!KIbLLt;Sl0}L^ZV)8NWP)I9 z=k)T96yT2rPVUc_B?JjkidQriwfN!c*)2%0b_4eE?p5S6K`yqz4F&k%W;Ur&T-;Ge z;*NHw%E3(HOT)7!4*k$UCv?3{rw!JOm2&?%`&T40@6xlRFv{@jFob8>Y9)n?+G{L*3d+u@BbA^6BEZC^b5)1EtY*Z z30Jb_h%ZA8{u_bQhJO=jdpPuO7#!QFn$8?c%5kT z)a;-zQQ^5u==SGfie}JzZ|BBORhgT5l01-{!YC?SGXU1AsZ6kx*#_g$O9-V3DFC8` z;J`o%#8$HlZhksEcQemPNLx*4M`q?di-Idhpv+8ttq_W++!YlvMiQ0 z`n`ahEo~<@PDzFUlmMInFVfqAc0A78@mgLRouf6PzbLR5{r9%Np>%WyErJ$7TWH&P zZ~IT@_wRDo^|t?Xe*eyI=^gF77yb83{LwqTxBcyrp56bR@{`AN=+j^5>^W(t(AoOh zFY!mu^t5N;``=LeXxFw3B(mM5=27*^tyeVl z0u8}oki`wMz=FZvyK2^r31B&LtmLe)eh5y~6{=0mpk7cbs4q2j6cYYs0A2WicrEwo zG2!DcINXGl;3W8nxBdMl-ym=N`gn)Bu^0XK(%1LGh#FrVo&O%6{=!dx`fYpBf493y zFszsN1%UK-CQC*KtJ(#FvO(=L&^3oGwicKI3du<18Z46HB>1O8&OT1l z%ifFN7%g%-OmMCyCzDgbpUFlKR{|Hqv2X(Z4-_e%6B@pexY2H~+svuRNy&azc_MOB zvP10bvN86CWwECdF`fc(9LI4SlZe^r*?}3CG!iUuK%wn$AQ?eIMIlD)DJsQ)>M~&i z2%Z$Z7&nCKqY)B2fXaapH#MD_OAV!z90Czy1b;|StLLr0@A|QkiLIi{mLx>@S7=sKl2sees_yM36^HXuTXp^K_1aE0A zM-MMaGW3lpcI3gFp`%XONF{tBK4|p^h<`7MJ(7j-qq~nC!9c$U{;oZiM1LUgDR@a2 z61(QGl-qpue;IIKoQ^!&-tQymX4<+K0KuchLGcjI>$XD#aWxId9M9o7qS?Bsj4-{e z7IsH9`d}C2oIVlFau(fOgYK|S1JZB~N~^$t0UDX&)$9wavD3G@JPSjN(%mpIL%yjD z3iN*;YLM5zkpo0uq+S7jj4PCkd8~jxMpyyu6zZ@WGG2mi8fxecATJ^J828iUDqan9 z^b?r)u`zg}9NPJM4gd<#>3$?QgCfhn%{U7o7(U>{oU{QarvC{9Vwi5u*F3Z!BZ51j zgMj>)%EvoBRKD$d?)*doat}VUTzP?LDws0*2Rn=hcC7w@Rn!#n?^`{b^VqK;+F%5S zaTeLlI%J8~!`)0+(&GEu6zOoc^rKb1eN+-X$9$QJhtM%17>f)tBXNnC$N2gg{1KevY61NiS4d;-=OYUKX!h@i z4I6F^UrOD)$ z7wbKOX)8>zK_67^#9fAtc&ppavT8U462qDu1ss;LFLTaZnZsgavKWkAMJ>cC6ZAlV@NxktHX;eO{X=SE)EWB8 z5dsJ_P`9853#f3ILP_S56K}=rJe%Od?c5~yXrgIipL=;7t5Mv+2H3`{F4Bcg;>}kE z)R1Z9qJ;E}7MCUhN`|amy7G^BB5&e^b!`aF=@|OizK9VfA0KSRE|K>ARYV3CFiD`+Bt2e+iLo z>a-{r4?~lKHXDy>=gjl(Z7zP$;hf|ZnbOL|Ck3pO{270QhOB`Hll6Xd;^!DEW!t7H zjp@0$JQr5`q|-LSn@j)z2tfe={Qo%+0!#n^2mk>9{Qo%+0`y@3N=tAMOW@Er2ipNh z5oCj3yMeCA6&fDUltbHDmorL)&UFs00Hd)?*M7eXZ(7=)dkm&hB(BzX*PA@x2XYXg$NVOXU1xu|Q`R-|?!*<5vf_ZM^`&7550#&h=#z0M()>#)Uf*5o*A za-20e&YB!&O(DyP#KW`TiG(6Kdp#1I9Xa|T0P-;aK>-J@KOhiLJv=@JFz~40Vc@y z3$v0dxsofnk}J8AE4h-e+!^-m&E*YdxD)QYt9B1Q_~3&Nj(G6F2NhiOrmkWdB}+z~ zM6PkkVqw@9*oL*DGS0@?IL^iyie&>@!DUAER8mkYQZ++KPc-asnM*kn5sR=wSXJZE z!B~Y+a80UW7mR~XU>0}4Fx#U$qJMp#N7+TYSZ=p@ySJvSsr9sq>$i*cQOpXaciOwXdlS=US(P(;wOQM> zUz=sOU~;e=$zJW1c9AYus|OofyPK9S`d(6bKelMCRO^I|x}=I~OKi#gZK<`SE4+Wa zKZrUOn@Q}V7j=CfboD`3U&K`uT0TitUq<=aqK8!2+v65trKP&sw#(g$7)`7586w9sXl zie-}+%?O%&a+WowS@R*y+qWX}NlFIOpnX?}#LPuM=Xq3BeID~oS6zJ_9o(YC1>V6U z?os&T`tJCg&%q$_IbQUpu0O|BY?|n08QVo&yLR<+?wV_Ot}p89*Ia)sEO`~KUAqqb zOV`Y1&UiPeoAjoJB6+X`%a{#Ecfw^(0hCe1Fb>`ckN#%-SgROKMw7WRjpu8y3fIU` zxW)y#!zyiTCTw=Lv2i-_vCO=KL*x@0g%0<_BQt3kg-rH3mTj=I8pfQ8w%A z4$a6e>MGDx-J$&)Ok9>>U05z_?-ByxGQ-TPDtXq2ywF~!mnibr1;}Oh{~{anODsff zbnV&$gx;t#H?uzzn*<1pkr+crAu}?;WH*xlQBXM$3Ww1^Kv)=tFdV`#2!mh4N-@mb)f5^7XZ1|{AwI21P^zKqh8^58bjz9y+!yxb*_IBN>OAz*jr^fGBET5* z@~p`6^5XJiqjp5`Ez?q2fPkZRN`h4xoRrV>F{q@NxzPplDo5Ttv@*RUj`NaUu0FEB zd7Stn(~RsDh~^y7n**9AmEPy2-T$KgYXh=@X6q&z7!kLdATQ-R4VF*2+sX|i4RaE@ zg!*4djMAfC+s;iHs7Kolq@K_7w#s8~b(^PI&qZS=xERRBmF_RyCOBz#|+x z+W_So24Ra3)4m+T|IxgvE~nbezR7JAp@AXmfGf$6C;|sZSp3pIy0&L#zF9i7j23k> z*X*uY##wfF=#yZoR5wi{#fISr8iX3ScSLw|nM(ywVpS$$bXFH1~quVQpL{nQ} zElVZ{RAJXOkl|jz%q54A6jHUyiMk_)9KyR+%(x8d2!oMy2iDcm22aM#{whh$^-vmn zU@CNb9V6KjyoPmGPtq_5FS@&w&-Mu;or*Fv`T|e)c>^twKth0W`WQSrX#@z3i;7gF*l8E0iXx7fb{8vj--meU>yK(C(a53gAsNrbr3Px>98tjqSC!C|qEK z7Ydccx*z37A~LtCN!As}U0ezq8p67%>4JrpQ$StZ@XKNAaksXip-Pkm$A4?BNp{4u0V57lplWSqefaq#@g-nO?lb4D85BwU;&rux5c4ihk zfiO69*vo)|Q_elqEX445(eNawo{i>xav&db!Vr#N5Un1<`Ou-lYnk*X3?Et2lyq5- zO1C%YNa_GajVVeuX!ui^3T>L?0Bli>8#y_Cb2HB?P_hQqfs)@iP>>=shant63N@6Z zbtLXMp0%`Jm6i+VIfj*c5=@yxcH0svqsTjfEYXm(;SPdsY=zL~^d|gtSx?1}MP9K5 zI~GB90?e}4e%mU`1udYOy?Bn|Y%~VxVfP}8D5CNpu`S4pGI>K4-a($i8vUmBmH7Gd zsz^-u?9&)2^{o4yN_FZ*;e%2R6hI=!PAoh4{X<+~-!RzMxjQ;xC}AEGWIQy?;=MLI z7a<%dNux1TEqTlMvt(5b{i06G9y-Wf#iY{JOM$gJU=l5HMp+*)E5`bHr(wlR1L+J+&g7-=_9W= zoq%C0Vs5(X{%q)!C+X!fno4kv;exv{S=8)oZh^I(?tNf$=B*9(4^J=d1@E%F2)%~wcwqzC zi9P$4xtO7>9OD1k!{zHs^ZD=S9oe6?JW+pE$3ZH79->o9OR}7tDAx6~sRooH?}w*b zjO~mU;TY#3tcB3^1T(~#H=s1`NrhyLW!1Kq7l|6a+-mjZV8FM*ODe9v)qf{@RS?E2 zZ5u1Y)x*<4H;<0;Q-(4+0vGYKksQy6C&j%e>rrUz!5}8w?$84IU#~{!m%xI^-e#`d{~*zf!;y(G>Iv@Z#@-343lnIPSJxpWGP||gfy*M`bWuVN?f+-U z+yfjdWQ8vhDxZz7e6$SZS1pvivbk-FY$;gZB*bTo@1~@niV8Mfl69Z{e3`*qCJsck z;%*-Y0aEfml&HQI7ybYV_fM4eD#)Z+k2m}$0EhBrJR;i|X4`;ZR(}nhf`jEor6QaIaik$yBc_EUM-Dlh5THFJukT858nQ`V#-<8?Z$e~nNDN!kZX;u4OiEFq6$<f%1IP~lkf$eA?iQ&_VjPx;jBS+I1;#i3|D&)@+jzw*PF8Uxza# zyeSZwy)a8;N{Z~pIuN+#--!Z{cvfx)aSm; z(xs>l)p-JjVHk#y7N>fuD{i@i69$I}DTT;7KsG=gfGijQD#1!K5Qu{y=qRm}P)a2G z5;WrQjY2NuRv|a7V}xPjp_=gjppIQ&U8o$gK?BW@A;Sm9Cw#JXJV<=9X`xVQ3yp+C zQZ}>+9vl)lghe>DX%RvtpGyNQQvAOsfQLmEpMv5kC^*J391e%W;go!8$;L^;B39qZ z#On&& zRaF%{cv2rKjs1M?uea}2@Gx8&o`);H__cKDK3A?j#r@{}mc3cJ-?Dva`%Go8KhnVA`&#x{e20N zA<1pZR2eZ;5K;(fIEn6g5g}P1<0GA;on&Y3IJJxceva_!Ah$r&k$kbJJU-<|#Ty=(Wm zl>{df)jx^!N9><8!_J?(nNCx?--k-yMFH_*`$_XLt77-{0Tg??5s^Rj($fI{W|U zkYzkljEj9b@DLPl0XqrLUP%PYTWJ@P;n0T{!7;PkS(yzQLtd*S z5mso$F2urZJx^x^5_>pw{OB!ycwoS!-)7+CKdwQ8ZvWTmUr9ZwIBiFd_u7IR5FuZo&X)e zWEn0}2TuhGeKZ00dcHBs@u9NTOUf!*`P>#5`;YeS;p83{29pt#raTK5!* z%5bG_xibHzStui(C5m6ue-ljogRH*;|JOWcIMWSJl$}ULgAS+b5%orLE4K=SH`r~i zMn#DbRA54paPy?%lS4Z1{{J^|tfH?dWm&Ke@Kd!XUG!_C+J}+Ryz@|5@YmVem6AS$ z34NZcyquur?;!T(4xm+?3q${l(CSz)sWo0y`*9ST#lrK5W6sHF~b(xpIk@gZ}?5V<_4E=wir2ag$?Lb(s7=|P9-J}JcpDDYiha~Ej&~HTYzLOx1?>mbt>HY z#D}?qm0iX(ZdZzFUr9%jj(il;Mmx7WMTuIJsG`Kx(;lJSqz)O)mn2rozmY#hlAu_` z6Y6FcgqpQ0(&g|u1@+Mny=S@9zdIb;!B@PYMo}ojBV>$0N0D6Ap-NR$U5|p$iSkhM zoKoVj@nWN)iTu~#fGsUhkTm>fLO& z%+y;{a25%dBA;1^Ma5BJD5FP)WKe96A8G z#P4PxlpH4uH>%(Rp^zOYAh^YGNGD7r^7{(vxm#7}`LJ*+9f1s=8Th;|2Xcpp1n^E2 zv)U9xw|JG6JZgCl+7mVMhECkK0_$-eB|hl=Hw!eDJ%m#5GVjD#$9`#u6Xa`5(pyPv z;m}v-0r2P)L|nY@;TmMwj}?}5;q&v6%{re(@pN8V7Uhb6Au7z$Zxk}_tslxD8|0i= z6Q^eD|EXjmr+b6jB#>kLQVu^Zjx&{uG4KM`@`92!FWPNQ?}@NqoT=Z>$@;CZ>nuZj z0O8-hX0H1_dGc0VDgdZ9uQpW~rH&x0cLbj|$)8CvG!y zOF*;wKmb^aQlecGDQj5SbOb4~kc2||k0O}HpVFY1Q3j#Vm(qmvz=KjX?`;0vjUJ|x z1zAF^mq%i6WjD6*)kTFTs3EG~Rqf6LaRvE}X*8sI6Jr=sOCmdKE_{Z}ZFMu*7RN-0 zN>)hoDQ_l`RWU#v6-+IWb793)_L$w>B~LMdm)~wyxnP9(uL5{WjliRLA(LN?^LxI6 znEhp$gzy(=fZs|wn>ersoCB*vVKoHM;e>s}tdI=N+Bb`@*V{}ZcfKQv*G?D5fH-gm zWYv;&H`CW0z{>Ad7zQYAzo^+VNtCYiJpmRS%{e()44W42Mmy7te_c;i?Nv zjIjXPX0W3sSewCCO@ZXYoR02B0JIGvM~aBa^Qlx`i%^#P<<8iubVr^L>uR-l76b%P z0P0G#4oL8>IE?{frK~MaOPy?|Ov%xXa}Ydr3+f*jMu+!ekb>z0uq_WK0ts|L24Vjtc zPjR!elQox|Tk{Z?F1-T3Eq8a{R(*15$x&AJg)wY$x8&~bs!w(|ec^7C-Eeo;3}LH2 z*&8%B%BQ_eD_e3G{8skr?u|?4PHkLr>eH-QYrI27oMpC}0PK)g_>Q)!gdQkcKp*A)TQ$6o$f37z#s43PWq? z(xpq6uAnt^q$3^aNLkR4)=-g(RHPy;1K>Ak%{RRIbjl>aFZ@E+-pazSFmG0BtMa%C`BjLX&XeJh^VQmHx=Dm5}<8jU(c zIyTYv34J;;noK90$#`a_%*G^7a?1^6;^*#8^xUmla?QCdXRznpmRs(*yF2L98`j+O zlexRQw>ivBG8ekSm9Qmrh2JM)XYSROd)^&h>AIsLs2>oD1=2V#UeCtk0hNZDLhayJ{ZLO1ObtFNSO`3vmwHOU(vYDD)r4X+sGQijMABGD zutHjue8uKw9a%_7o0t_A4@>A7k+P1PmE5c(icUlm*|aF6C~QiXH(_)+VUti($yaP{ z*0GM2tm8Bz*fgWjG$T*QIZa48GYS?@i0IM8+X&HAvQky4ARaSREg2&dPqmeN#C*Iy zzQ>FYRL0|nmLWPbehsT+tddo>OC^5|Ga&MKxGGu6U1FXHun4FKn_t6X;E6|%(j(;| z`y~bwJK^FXs^l)mHemuH0?|M=A1*#h5)jiVJUU7cMe@Maac#10?@89(kzT`VN4JS3E$^0xilBOwIMX4zP25I&m){Y zj|^JfowGHPQwZd0jG%D~& z0vrXF9_eNL0jFR4l4^M@14^y*YfxO{sef_t2zxM-1#EASf4)TOb0kAKkuaE4DPi|$ z8mNTzIn#+jm5As^ufLjnxc!{FsQq|mSx4-Iv+)_oH25{}&je2Ijg3;A{kPjj27dB^ z^Q-M0YIfP1WLJ4<)Y_9NVs1%$fHy25MrW}96#CW=axAw6JWg%i9 zv3V%q-8JqUq&kXY5`$WhO-&aOGW9C{!bwTS24IG9hpTe0JEJ%eM(@uqCry|7MauTz ziwn)kf>^IttPn30+qF7DP5^FY*Um1EsB*$2BEXvR0W;S0Q@9i8Y)!)eYzMXU1&~P) zkxNHrL|X`i@1Y$>gG?GcM?+ynUn2{}$*9#L>4|uq0%PSZoUhSUCR&7er1Z;+4c@C9 zLx-g|okTP=Ci&5QU&YZUR>@1BnJ_5C+BC$ZGhE`11 z0$nV#q(hV_5MSLqhJ@;(>Ev82(;q+MxK!>k#H1T4w`>8F_s#DWm2VY``zHs+H>37o zo~_{vRHzDEc>sEB-4~F+R)$8Oeg!6=;(eDr6t!b4|9Y0YYGXKikn}vq2vN)xKOAV% z$}<)2pZOZ<_?SWO4ZdMO0c|zY#+9k7%+47ovixJ2*DMBB8>SPCFB+!KfV$H{R@IP) zGV8>85pc08q{krFs6}{!hr1N&T83=)yVhmqiJZ5(i<#)$@9NhXFtdKClL-D&F9>@t z%ESm0?h%rSeUUl0EE0WTzb{^4l*@cqU(J-x|Au*q89A5VZeJz5FAg%=ofo#Y>8@~FOUi-X!5Z_Q4m_2!PX_#Jm<*t ziMVSS0-ukYZXZ~8x9sTWdPm`cz@uC;rd4MKg9x+iCTfr+Ca4>^=zZu!K*Q}617@Tm zV5H$$B=q`G&ETWO8KF^$AcLGG4={g{t3sclEphk@M!GA&)kUK(dsl?nBq@}~)j%L~a&LBCzx8lu~n zh~zcKfZdWaO0aj+gU@A46b(!dT|EH&kFZ|esc2G18}H~t0e@0Hudq%>r(!CprQmjZ zWnWCE@}@;7oB=6KF%EnmG>y-I*5PzGq5o;Q3>3*ccS{`D{R!=t!J%W`fkTJVav4~X zdG3~Iw9XZV5DwR{VQf19mUF*MpjO!&2r7Mn;0-=?fe+i@h9BK7K$afyQ8Yz|cvROB zEKg8BH->DwKQBl!w+t@xzx7}zZg|bj zJoaO|-gumQY3ek!2OJFIkv{x)l_>r4HX>wOFJ22GPfhHl6(D7e{2fDQmGB ztFG#+5h5aT*cMYuWwx3RZB-*gJ83amO4HGRI#x5fBs2J=0XbZY)l#AlYdSJ*Yh`Kv z#bl>!)zivveop}~?*9Kd_ha7i;!cON&mC|FJi1(d+?B2xFVZ`|`K8IjJj_G(#lF~= z!)@FaVP7%*8mC#U(>L^uj;Y0ZYoF%n9sP^xt$muOw?_SmFL5D<^^oR?X`klltxYche;J@zFwO)PnS8LQpCjbIkIR$YwQ+l-o0Ekc*OSH!ay7}{8RmU3(v@-J z*2zKAwPj%u`!XY=V@Ae{^k!dKn1yb+n!jOs;-1&x-%N!Se>7Q$ICqRh)qNTqk z5S!C1OMlHDL9;AzS|9A9^h}=V#>~sxjTzYP_-J)r+TYH=HpsE%(Jjyj(T!UoXX|W- zl$n>e8+Xi&n}+-zxei&)-vMW;CAA{Ol4_7zkW!FJfCOc6!NP(C1uW*}GG(w88b`!W6>9fH)cv=n15C}d3lUZUQ5wsP|!2}=@?7^H-1A>L!DSl!>n!cm- zTz5M*y$18Rxd{4uFn4U$gE`Y=L5!w?&lp~9FWLzs3-~=h_#5g%w>Q-5AD$E%Pj#VVF0s0Ouvr8NPsGZ zHBL+*GVUv7>VZfRUHtatw0;5ax9{_yiILj?_>O@In@;Xw)gucJh_Xj>>Gj30gMN9| z_WsK^j56{=msWQ0jf0LUWye>G^naD9x|?0f9{}UucloxAtM;of zYH|G3)&m)(97|l`m)#>q@bQ8B)q@w`hK>oco1D~md0_v? z{tFEROuS9RAhO+cI;^uiph+wu*5d&FjUb|2@sJD_e%&| zLZd-vX^i}AE%G-&YVYlG`Kdrp;qSvG>)uj?0Yy0Gu9#W#7zfmEMY_~sUV``l%oLYn z!fM~;;;)H=7V66-!SELnlB%cuT_Gd&ylwkTo_Ptj_)dW$^gz&N89;5%VYcRwCN?zLU21&htE>{Xornj+LCFgB2P|$Y ztpzB|l4Dsv1sDs!RIP2*^>bM6Wxr;-gh8x`j7LT04(B)%N}JRz7H7Rb0k!E=hAgCt z5D(HD|3GROQq>r$$9aB?7%%dA`9c)1tl>AqO?Eh-^;~Z90m}m$;H#R?^@f!BvO=>Mpbtq?KnL zVi6K9;QiT=7#7#6WvVS|XvG^JT@U+-Hr)_Tq<~#~zEoTi%O>6qhZfmFubbXlTH1g4 zx$w^;&N1rqG%_b3jGPUHhJWxy6=A2NQ2BwpqwUAgXfDsllAYQ&r)8$?pXc_E>p67R zN+E6E<)!&QBDhgsabJ3b{GVtc4k1(+VASibz1K&3Bahj;xUsh|ppua^IZx2exsQxv z@k1^av28H5_Fe99K}6Vryu<{2I1-tl_$Q4o^)roTs*<9C}oFPavGB%PANLwR2oA3>(T5WiWN;=nl$Hs zRCh{04yB646)7lTTHonzLagZ+WpY`MVVW9y}Oz^61e1zZZ zz_-w}&vite!;>*61NNMQyi;7o#ou&hXFo(3Nfd?IV4b^56`woyIdr5w=$^(J-v3rX zop*K5ItBsg^bqvuu(yqwC8%+sHw3&tsMiH+_7{vC;!{tzXC7Fr*~W{hr->&$Gxi?7 zGrc;BduDkGyQ%A~u~X`+w87zSrFt@>daeOJmVv$21ivO|mk4OUVO}La7UUJSl$$F&KIFcZ?U$#BYob{!m;j=FZWCCLBjo6bNhirppf6hD|l(jR|pNU1;Ly|P-v zn0>7H#9u7B#}fO&GQ|6xf~6*ZZ4{Vz0qg+)xFE>S$j`*jxX--L#LvLb$j`XXywKp8 z6!1mRj-o|x;(OhpSnRJNd_A@Ui#a)*tx8!8ypga$ja?UK0^~ISq#pssg2#fZf~$qE zudlDKxQLjjg|M)&u&}VOu&}V$(8$l&==g}xn5ekO--F+T(XOK*#e$rGncahe z@X`2#ywItP(xlSR($u*VowK`S|(Q_k!1g_=3RJ!0g$;zL5OYse^;u+V|J@)Pnnj)6~F_ z)z^a8*Vosu->BcogP*X2_JY-$pNEmXgN%ou)#!%lh7$gRorkHYrQ(8vhtqjna>>jl*61SG8LjROQAiuCD=Bp?I=sOgRY-~f++>5tQb z)`EoDgM#OTp^fc=xe4Itz>qW;FbBku2BeZ8EJ#c+2#N^o=Rg=NFeC&7la!ML12EX; zG{`st7>kJJEXV)>xaEt=gPn)fpNE^Bhp4Fnf-$J#s`&xpBLsmMigOGRLkJ;->~3;E z43dK|4rU+*!;~S05JCuHgoucUh=>SDNs@L0ahmF^TrfdkRP|7-gD~ZbA0sN(bVIA; z+1HGsLpuW}Md(D7Yg#hXSVRF8e!9W#ECO6Is?frxM~PavPAGZR{`ZEJ-Bh3L&>@!u z2INR0T-)BQp!DkuByn79qGk?3in{U;-?f8|*S75qCGpq>zpgAjIGY#Jzg$@8?Tn>3 zYEKqdHh0*Q+>kyFnbRE{`)rbSM^!Auc{z^NWzA&TpX|scy`SieFI@(YF>+G_vG za~jglu*)xr9s=!nD}R4r!xj)DlOnXOS0%&sXj(!{sta5Rj~&6IC1blz6BXFAB^8Sd z8o4xK{tc3q(o(|Lzw#h}6E(Hw(#4Qd*Fp);$;*`iOe;v4idS;%VOF{J+cnaC|u4v2X&#CH&=e8Lpd&}d>S|=7@F@7H>6qh z6;Q>BN4z22bl($Z@z2G*FAPt1u`1Cgfe*Iqg}|2xQK;G}HMzY;-;_n;BoE(7fPiak zMKr}*XksFEF9lu8?~iSuLDIrFLfuZQH%#2@j~kfJB&|MY%?Tv0Y{Gf}#8T9)E@y6a zL>5QWsdZQ;9!xlUs^=^N?mqc63I}KAw>%ipLoj>H%w_>nx0y?zy9bU_HYi7r%nzg^ zXL4cQ`VdKWfT(N#aV6WxEm|`XxLh#2DGrU>7Whm*)yT;%zo!1*Xsd# zQBT>#@?0=jY<#KjMY;iXSraZ<6B_NtCQ+pC!W;=~3ZU2ZL|+{R(4RVOQ%u!xqJg2} zgcCY2YP~nU*u=cEDTexW3f)-Pgx_{KZK}#KG!RaqMD(?Vniq7P57g%C^-69Z4FP3m zR-Y}((dVK-Q>a;~#8<~Gi>QE_IS9uxxH-$5a|Qs|(N^P7^Gb|hfb zzb^VDPUj(w7EViGM1V$blbmhlBdjmfPChrLaxg- zuBC~7bIC0&Sh3)ZTB5MgG|S`(5F*)VYxosmPpsIczu>I#pWBH5wS+TCf$)l28)6xA zo`ZHLLBibN3L|q16MVIzm&``GePaWzNFTS*J26#Mxr`hR0B3t|v(^lyKQx`BSWM-9 zaW>oln9t2X>AZpeqSV(!;91s9*e+$t5m0V!2IsqQhVi8oVeqGB3=w~_d|RnbB+mef zkhC9IpiY_T%6lWpzQdd#F-o!q3K9w(gKbCfF=G-a>DcLxUgSr`oYP=&k|fNvwA;<_ z+bt!z9r>adFRTTxgOwu=Ua>CCu<=j-bP>z0SDP0;Zf(BEzW0|M{?xB)S>A5vXB z)NZM}RZ~$J|2fODG9*}FAe1p?tzf_5%fxBAd4>=OnPj6%;Y7VAtEh7BZD;374gB@jUw^6uIuV6QirVF$l)zM zFar0DzDn zO8^nUG6amIxiY+!7*H94rI=V>JRB83}-b6$TGpjKm8;jf6lD5gZ@Rma=j!R|(7rbg^{T;@F}l#RZ=Pw;%~QnWhlLIRJU|G>mA- zAmU-B%nlBv0VEQL$)S7zgGyzhOr}%HEqNvpj}%Jvp(=ftN+yeSL8Vf8uv7?K@E;$m z(&=E0vThJ6RA)~=Y+ev z^Qf4eoTNEw$xQPTjCZx7i_Y%&Lsxv==rT3mnb1Nwr$o36yHge%AdF0U?sH42y-1Of zxOs5*>^NjZ52bigbhYIsNF0WQzdoXOo%voL(P!i<`iOi*A>O_6`d;6Q9pyyEe!Voi z59914>=;XN$70wq#yDu7Xa_o3PuOkJb06PtwqLprug_&MdKpMqD*She3fh&fTfa&4ZT8Qji54 zex#8O3@5YP$-rCJedXNUwQF}9oBVFe0p_%18*GEKYpik3UW0LtCCBo&zx^$JTef9wf@WGba6u_< zubV!eiW^Wwl?F(&Lv!P&Y^w;WsJdTN6!mQwWTx#-@LY`Ue(JykVcwGz5Eumo<-~&z zK0r%s{{h;gqA%L!r%|4LLWa73@+v7Pi5GjV7mh&QQ@A zH1L^&MhhqlB}XcnJW@@NEfb?)%cK=6_KLUSY?rXMOlG;63AbIsd4W|bl~M|zI4DgG zoFC?w50n)+@Ie4cgr$baiO4V_-I&s=OJxaxl_vE_x&v`F+0p?TG>nX7$RL7Y0TW4^ z2Z)HIfWRQK;rC}R=)$yaFqK}E{us%k*jmK8ig-meHcDM1M)4SdjC((xL zB6<;dU?GYj3gJgRiH6jZ=%}7CPW6oO0Xuf}93EBlgrRk4Hsl*Jf%t)#iJRzxC?iIZ zJA4(gsp%G~sETeObf}_RXbY((*i{lLx`nn-jj88;_bbHigxnWw#>k=lA>=uQ?o;<8YbwKAg7LbqL{eroF#U%W2P(F)q_`#yKAdzrRoGfv~&3 zPkw)&+>h`hgs~CMD0Arc}gHafUattYi5Fx6&0W^U_f*6T|1qPdg1OtbMVL*5o5Q70> za3Bl}0>@zBAQ*^4ahgbZaFzgpePK0xkFbAJp(wiDs9$c#_XNQIjb%;Bn^9SoIwYrx zOY+d3pXy&DDJRFpoS4^HR+YkQLYTtic?~Rg|MP%@Rl4_P+>P95NRhfRdQgc={&#)h zfnNljzmWS41debU%4OpnQu`ZcUjtE}vbTq4M!T2n@Et!QTk5%6!X3bz-?JcEuSvha zb9CDq^JTExd-sC{j0957J2{t1ZV}gu5U(7)uJ%)jIpW=l)U=p20qjwH1|-{CPe4mz zt>=+dNG)V@k?jmgikKlsg@1f2d(ak22zJDG8P)UGQ2>L{*sG$cbQHHS^xEQyk~-WJ ze}l6zN2J#RCD29@NCOi%vNz_?RRCg525|@=#(wd^qtAIA8k={Mhfd%%61Dtk##W*{teWdxRZAHY&!3; zw1u6U-r)0ZbMqC5+;zxr(xsv~_u=kl=bTa7PV1+2H z%&sh>Q@g&Ce}3?_#x&l$L9=QCmoh~e7~!~vgiVzFF$W3u^jd(WEz;>$EVlk@zlp2C zcSl*7RqPe=8IdmkZVmVonb8iS!y{<$thnfC?Y#C$#?3v_Bz2Ma^OTuu0dc%l76div zVLulX0MVQI50FdSTHsj(sq*==MY_PxiY)#P)QQ$ff1ea^f}YH0VQlZ}+=-0jCK!9+_Zg$QEM=BK9wf{gNT2n20m=b@b%jlfbTZ;~sdpjD z#f_ZQy4c$Z6L)?yNl@&iP@^b9`{axaH!^0>P_ECaX2y7cBB`XhDABgg=S?`9=k<{S z3olP}w^0`Qj$ESUJ9o`A11nR%q#$CBa!`o+F5oYGckx;z$fY#a%8})eh2{^0ePcsx z9g0-(x8aPgjR!b}bYL%tCy;F!vPv&gx*afd$T$!c!BYQ>J!^ z%eiM0DXp*UL3r|rDj5bo`W}r}tV7$=z_(*9B8c6+p@R)8nt?IF%B`P3EbmBs;rm72Mx?d-q#$FiFP*w-X>r$-*qI;XcP_jdlCY8gQp) zz?K1l7(v+|K=;x@F^r~Rmw?aMAY-bXQOBTouDsULxVbN$X8e!Ijj1aJ#n~K-DuF!N zf}(|&Ft~AfrTx=bNC$zU4-cpX93&V(E}07@xc6n%!Je_fSkF&m5SebS00X-XZ^JSY z)ujd43btI-oAonkiqb=F_-UkDL`QaQB7M+bPN5`0S~SbrN2SXIveGdKd4c$RA@}-g|zVwtEIaET>KM$MKcLUOKupz z+u0;AXTIo4#V+0(@z@s*cY|&>sC+Rjnr#7SZhOzve-R7C0P08K$I3@}9ZHMO>>Lc$ zYo6UFkKv@!IpjMm6}th+JP7GqX*#xEM>|pPJi`fOv<(c-y34PF2$?bfs^UjDB>P&+ z3VH;xaQ;@=fzw{~$Mn-u29%I=b?9UtRt8F`-))L-|HEh(K_X(iqPwL0HCT*uivH*B zdfhF@YFiSe`=EucIRWq|m5V&J#NZZwnb?`iz5*wgV*b-c|4HD%C=!&+jgt>6!!Eg# zrVpfI&|IsIiJ+@331mlZJ149z^uzzrXBHK?b76emflKE6nNRQz{K&xi_QWK3&=1yw zc4XV{&Yzgo_Rl!h8RMFQG0<;@%Se3SLWzcxtJLG5%kJvA+@D_xz~+Ctvf&dbXd^p7 znM&D?#|$ZL(fWANQp+|?@G*D2Y!^-gy9KtSZ$A& z1kSHR(-1Dp?rw^%d(;&Rn<36c$7Q%MveGLiBl2v5*_loP+v~X3B z314Q@Ps1*QGi}Im>q6_87~c_LW!4fgqnySS*b-w5O{hcjZ|}RA>Up$+hpM7GA~*Ll z^dh-=`!#QqC09T&Z8#0TMtZWajWaX-Iz&b0w-fbD2qeq#=F_DO4{TEK!LNKAqCF*X&_cW>hEJbQ~=Clb%k_`NT@}>VF?35|Z*hF^c40|psO%^rQ zT&aFeR*&qa)Tv@3sGiB%`5LwHln$oj7>{jmjd0n8x|oS-Fc-55 z5B7091?VG-D0(AL9-VP4!S|(FK)vO4fMGhm}4I)@J*iqfxcmNCJkw4 zYM~Qc2BMTVjX+Xz)nObvSeOJ{JaAX-+og%_6M_5#aKcxu5x^a3c;>~gKJEaOxk|Ed z62`E&Z9hFZ4k{hxLwpW98j=O%*n8meN#%wyHa|C6)#^%*S~`_?JLsdiF_Ck}?|>fQ z2Ul0^RU&6p3+a-cOF4k;n=nL?FAyKEtVIl2s|*kcQFt0cF%~(S2ISDl!ifI244L0H zvP%&-w9jV4h$9l-rtTCAPcPfDJh4bBC#ehx>C$-SVK_qEDrQXsL|@f;o)BDV)GtE= zKCg9P!fStliG-eA)BiAf?XPH+cdgD^84vlVTIbWv{H5SyS*U>yURC9Tn9u%!ivDE+ zqklyDUY>ChK{SphbwAa5tpj>(^;P5Lm|P%+FMnvA05+D`P1H#;uyMYH(H<1Kn)#p%qpTA)12uZPr>@(Z|udd_D5*_2J}p{T+5(A z;N+HYkJBHPPM^x3FAJ@@?py@(8CGu}XH;7(4;>hZDxAx0=??bq4#>(g&ZwKERNi-- z9+dCrQ6T>`_b1;lt);=Tr|eF8LkYrFR$LlTY>MgQymk_`PEbHI9Lf9(n7LiNNR?06 z0pD&_@l|@!u(KHcXWk60xyuw`7I7etB7vq#{9=jM)bMs*_9ISx14!gJTL0@PWvQkz zTFJRxc7Dq^2GqR|^BU!H2?`S$v}DCp1m1={k2Na8L$`Qie<-ijty0cqUvTF)ZlbLi zH1IKLy%anyk=+HKjh=+w#@g|VqP6okMO?<8^?$fce45t*O?cIG=tHd3dy7_Ryk z)S>qmh#P`&7lAh9HlasdZr2A18`dceT$4{@Y?4$&ylxo+0x%G!qF{nl?Remkpq1ATffHTZ z`O+GV0*mx=nuHgL6IQHA##{~hqh3ZEVFxk}FB-HH)>3+l|9STfU!GDYVO51=&xLPe z>a?X3mi`=bov@|)jJFYeI$=wr&7!FG>CLeE(2(%sOp7bZ*by-l{z^A01;c$_3r!$L z0+jYt*> zh?M=BG_((Q#O%SMj&iLeVEXz5^s{{YPNq zl1zeQQLb*txCa~;C4}9f17{$^GSNI z?G*?wx41P~gb3}*xYO;EJ8dF_NHeui$*0LM9V(m-BdY`$8t3K5!x_A=*Q^4WM>BoZ zp3a@h3nyWHy>Jnv&RCGoTz>*FrjCGJL-Xtq0Ky(~em>3d9#%ewbg60X7w)*FGjs6i~Pk9WhJICB2In3OD7Z z%iWQU`Rxic&6J}>hO&vSdj-&6x=b|UV)GNH;lw+~e!DUwru>(%y$NZizVsDCi5R-2 z4(AB&y{_>8&hoTl)l&!T^uZNr=&|cvKnYnAWKLZP9oIJve?UHSg(nszLq4N}h;K|l z`@b14gF~?h$ZkFcMfsfwOGD4_K3<=)w-EfuxFYA`167EB@UHodlu3a{#Lc`^7vR6H zu8ED*Xthg;Rd&tieOttlH-?36MXBY)oDRgB1ie=sxsElta`u^Fg>>Dt9tFCoT5n;y zy2b(9wzo&~*Qu=_rCC#pY)u7vhi+ooMV#47+NCa34|jh&;-?4K6;q&2)raxt)ZfoE zu3(DM7EHjIu7=a$u5q}X&NgjoAI&aWuKH2!cGy{C9i>x*n7M&c9GkRg2>)AwX$Yk= z3}qJCPFI!6VHST0@th4rIpUKw;f`W&up)T^2VcVz3_#PQv+3fm_lp3*iFtWtKCwZi z+jr;pO;IvN;_zSFQT^f!Yl#7z2M~Hma$fV+w3rW=B!xpi!0o<9nX$_e>pdOE+A8{8 z%@f7$V?ey(Cn3hv!R!-1n3Y@rn;CFr7!ym;GC4}({hYv1xyl}6L=*f`cbqA8E{K%P zk_NiWt@WF!s)mO^I{H1N+(dTvP&iL~VubL(^D-%2 z5Rpx_%9%8+9%b>nOsljTZ`D z8Dj}5FctgN+^>#A@y+dA-@ry2s6rkcY5n%sxr^vlP}PZ!5{zGjd$Q_i`N4zHRS3xE zinHD%99W!*f1viLfO`@U^naKlLE0f!#AHy*As;k=wVXjxvjDgN z6@TGM7-kiRajxe+RgIo2h5Ovqb=Y^txvT5A3HJ`z$a8f+-6yhA8JNdP%OL;w_W2OQ`abcBS6D^w5&1meh@PN&n6J6R+WiBQ>O zGMPAJQzl80%#c5y&u2saMjpjMq)Q5|;8tY9kSO{7m*5|JU#sMDcRR}h6Ll2dXt9}Q*$ zBW6TA;tQU4ds{uNy2fHC(i8+mUH>f>ORH3?(+NeAoRXvYXfPWXF(cv;Uk}jZnp^eo zwyDNEtZJ^0`OMhou*r{~$-zxeM0-@YjteS4~>>M%*fcX+P;!ee;fxldJs zBd6*x{Ke;)>R&S^i3I*pX1mMY14?=b7lQk+tx_$ppV)Z!ZZEbFZC9MNz?DEiLSkJT zmu|Z%ZHRjtvn4p2I><)MA};TwNm4D!Ez=^|sCnK5&*POe&qqAQVK2V*5tO&SKm53X zMin^F=w&p~_ujte+c)LK41COEhha48ufI;oE)FzmqGnn-SC4V7m2=f-rD72+X3SxK zCH~6({+(#2>aWKbjZV(}H-p>oTMWQJfmn(nMM2PaJ*&l1Y1L_UA_E{AAB~L0RWE;0 zT_)r*m$}SkE=6p4OKI7#WOA9y%BI2@Io_s%Dhxpo1UD$1}_^MxPz1q;vd`7o)YtwABP29wd#?n*_+jSG%2M$E3r5b9}E6wuP zTEAZT>sHBu5B%ffJmv6|gUeh*=dP~9zEAZ^I*dEt=YH?4ySfhh9)Em{v1Q;Jf<`r( z`76`@zQ^GV^iA;(PXmOQtfThr2Xl-B2r}pt(aa>3bTIeuWPgGjqj%`nxwuYHwmtDAljcGk1>`58bC5uWSR8l`eP38ct`-Nl?eI$hmTu2U zH0h@CG@Jb`VNAJHK_Cd({BbA{Og^5~P&P#5mxNIcm+|J8Kzev9@|0vLG9{4jd2=Yd zIp2DgJ~typxJije`NFe#K%rN0T6v+p!~{qK#1-1bF>r!0)efu+FFJi(tLzSO(;9#_ z2F>6tZh*uem=QyD!zwfVi;pc<)f_xp4T-9G6f~RC`rg4)&gs%A?EHNS&3}~d_fDUI zeDKXfZ^e>hlgL&CzjA#pRVt9!q0HIWw>ac#_;z#C3^fcPW?gTXK_uBt4a;GmZ&7`r zeebVqib{xJiS**{dapUfY2|O7dLZJMdxlda_DVTO&Qfy@)>~Y7ljt{;{ zGLVUiWkz1lc`?e7Y|YO=SWun(@4-@Ci&trFHqyQktcnmSB!1W(X2_b`04x+ea^S=HT0sNdzs8^< z@2<+e{`J>;_pA_5!Y+QMC4)jvT{%yfnihh2I|=_n%C+c z=90JV5o#un&M?Mz{f3c(3aS~P$%VfWu>q+t8|~?t$3v)zQW-TV{0;TmB_ea+5FXe1 z+BQeMc`B2m`Z@K=sZ5T_=hQc+VmYdxXTo9zq)HSiT#pOm9e*m!YL)wUewO-V)GSZ! zS?ZIew!EVLSxjK$;3x@3RroG&Vx3S%5N|b5cMp{fLqrMbFC-7{j@^$LHC^1Pvw>oV zG$y=-Pkoow5xFpP%Xh+aKs>^JeYPdGYC6d!(S9ss@wgfdPqV^n- zTZ4@D?c%Wic`ABy)&9F6%Iz0tOvG*7em8ylrkLfmn{kk+)04Ox7{rqjph(CD=x#^? zM=LdOA(KevzL2ralF?_;b=Jq*(`hMe7i3xzQ#%4JX`{kNB%9cob6MC};Jy_Y&L)b5 zCdC!_jK0D-!v1|JazP+gHrZi{$K_dsq>X-|sgy)t)3|n^e!ns1;A@au6D_xC0%xxe z{($=lGd5m~A#)0Vu0NBz74$ED>XyZA3ntT=kMBG5GN_`Kk=zF~z0eevl3RG5I;#_F zO9b*Qd3(AFvzpA_lgDtml=F)}^T|O|KC55uT%WIB`+|(3gAODzBRUH(w}`z2^8L$h z^taD~S;s`;6QwsU@SB@-xhTO(^F=Guqb~4k${>2>kFN^~!*qS&Zi{27>gpzrodUTE}S)YC3j6P7Ae=;ZJ~6Bro`3 z3cp+QtqFY_6MC=uWpPU`nFM?P6$fRr^ut#y5B~|j$JL`h(PfNxw4i{0N1ul})&y78 zi4GP0$7(*5>Yoc#{TnlH72J#9n9>UG4+yB=;8P zyy@-sbqa}`_BZHy;(G)7h0uTNpW==0EBT6u^~6Een|358MS7gx-fzjy&uLj4oJ{6$ zXP1scZKspi=R>N@-{E~((A~z%PvyX#->y`%!Uf1=lO71Z2MW?`avI5AEwcwE8%UIi z!Lwd`>jxv(eZ5Zp8D4Q3D)Rgj4;n5;yw?_M_L9esbZ#+r3Uu^P9lO9I_MfA0c2akv zGwO|0kSDifW8d!qEH3~iaIs9#(l`e~;UYRo`FsUvxvs)J!!jKpPxo*7X*3qI5W>(W zp>jkN1ZEqw@0Sf&V)0F3~n0GmgK zPajNUvGTPShE#P(+h|^Wc~oR7$JNW3D8+H%W~1pcU8s?lraG>kmMR8`syLK0rtpl5 zg|cicm9=YuGFZiqwQ8ZQn3k=jj;dBq91?>>RkVqyh(CY+EXI8PEUrF({w#vwE>uHX zh|ah^e-Iho=g*%%$LG(VKYtE!7!!h@Ux%yDpFe;8{CP)%(qLY*yYb`4j~_pN{P%;?U1M{h8k7UMb|E(^cYHgLYwuCyI$vEicWzD6v@u~|8a`jC z*ZE?-K+g{3+H-#T4i~yvovU&!b0zKuE=VZS2a*R;2NDO;m+P@niM)uE5NT%BNyLC1ke%!w>2}z!3u$T#Czr3@I)o3JPTc3IQCr zlajU8T5GMf7DZ9?kL4?UAwf4z zQ_5t*)Y5~Q4!}$SG>il!*+7z@h(v@}M5M_P5hD~v8jOUfI(v`3QmR)9Q38QL1MUTa zOsE3V{^Fj9W+q9pvj!p{1W*b=7>+>@5JCtL3PBJAK@b9jK^TN6VhAxzDI_hU#$+Ox zV1u32&&aJ2ZEtxHLyr$eH_l?p%9(*Qfb16JnFFar-Hz7p<@ydtlGBLz;jZ=#EPpxH zuixoW^>aT8J6K+l$nd~NyIvo8I~S=_*csJ$ynJ;C|0b%&E@{{{LfFsbt4S^0#4M z2e*a$cQfozogz`wNkDg0V19hE<(zbOM=ayHj->)zhz8n;V`E##$T^zP0UgSb*i2)R zcP0skO%JFBs-#Q!gx;b#H7>9xmVphAO#-17QMCuAN|tCK11R9F?t%;1MwEG&o`{G5wN(=bK%22<*ZS%|DV#MqY;lKB=}o8y7V^3Zx}R*dg4F1n$(0QreId{Bs^6%tzPxhVFKiENhdZd?*DO7rjY z0=o635Mv^z_;#~BficLk(J~(w5OZTR6f^%2C$P-nkqqXZR6|Tq#Xl9GrxPzA5yq4c zVw7FZ0Gr8RxU;13{BzK7<)}vuSzr;X3LiQHM|z3_WB9EEZ61}sXys}MaKF(9cCcb# z+E*%*(~gM5E+fuE5TjeK&zoCgK1z6fO+Vf~MWXx#jjnPm*h4_I<{=*$yi$u(E zyNYnt{NQ>-zj`!xsf1;Vqe!)kyril=HMEY~Lxye;eWEIl$f0(nVcf8UV-RG7V^n1 z0QK$U+0M7CpN)lgYg|b_>@g-G6oLeY=yZpi`wxiT-%yCi-VKR(itzC8@bD~@^f;A2 zl~|SZh_JEL^fQ)BmR^=>mXP$c371%xh?me9m>8H;nf@@ELYj1%l&Z+xKb3+^s4`T2 z4dOl#sw@Yh2_hkaAfkX6Lj;5n0U-iHh)75zA|fI)BSz^e#56(E(Z&Hb)Os-LW+L)$ z`0Av;BM#Es(Rn)JOMM&Y;~AmZhQ&$XuOKI#)fQwU+AxPeiCFGQc$ET#H#bk>K{uDs)=`29aY{sPnmp6zn}%zJJ; z{~Pl+aMl&!{IXH;GCF&^k6?zhf6ft)ZMu&&T}J1`ew*RCU*^onQZv3zdfyq@txrNS zi})iA?=_?6{g^F3I>E?x8?UjR%$czb)yZLggI7-hDi|>-jQp9A3yNEhaX-q<^oUj* zIp;ro97J6Ie4avO_scQBJ$Y0i7;y53#pnM(mvjH*rxE_}1Ds~U;ufB%u)xmlmC`+3 zU!lS=jqf^9_a#xMzVRX~ryzrlbQ1?9VdZej=$RXK|FJ&TSvA1!-qPb@hFsLs_tgCw z`!~~cBmlgVp-%Ybi;8XO%x|%29I~~@z!aJvFLJr30J+$!1>)LsVPiz-kRM|F$JQ!uAl9lQYRyIM^gg=xbnhamt@arN$(+H>zSqH#}< z-Rs8PCte`O;{YaZ!<+()001Z`^!fDp1JD5f#<_{I3G+R4000;Q@W2AVC3hfK8li&_ z6jK0Z|KdvEvN#7IFb-fy;tdXL7!7j4F@c9#75c0Ww0kYcL%2i_5wgvYtwIo3FiR?w zQqs1wh%v?tGt4l<2!bFr7zkt3yvGG%6-TuHI@18t0M7t1<+uBWz?{A%6y`zv5JFrNSBSM<0iE|p7lKk+1UYJr~bw*az%`PAc>uy9dZYKzsiPA#W8 z;{xkTopFJ+rM{|5b*V2Ob*6O&1=UvTtgb7=B^4B8ces4jR&71(S%QY5DEguGf-u2zO|&^^QX)tL znppDdVdB`5-;SBFSF994&nAvhj$^FY{eHks*gk>!b{JBW5~RRIU@>%oz!hSFLSeR? zENMy47Es5i&z!-}WeiEih$|dmQq@muW5eg1t~LATNBG*73~H z%*oPRRc6;f<{UYAAY!1PfoOzaL4$vhp=lY=^9K|YqP${kF}qf%1G53)Wy!`H>G*_E zv*go!jbq1-zvfN6iI)YL!Q(>nl)ALKtkrB>md=41cV|`a?C6~xUE`|g8g|D>d)a-- zVdbQZNF*d9qzW&>+~h7jZ*rIE&i<@amULXRDf>hF5IX0xE7}J0D-ZX)ED;o8HkJAh zpAZ-XBw(nq#jc7J6cwlq-;dcjJAwLkH6cpP3kODnXG?l^OyGqW4tX|l5S||=gXfR& zH!em{MhZb4iex5vL(#HQ0BKYjjfjX)M!6SI@;ZO=C#g=uS}qOKjy>}rNzXdRo^_5L zJ2rQmq3(3~=vuB-WooCM|O1jE(xkClXARl%7sAEfdex2jjIku$d=i%6~sWMgH z^F8;(#|J2dR9a9%4k7uVN=QaXMj|4nk}1FlfKtf>B-gVtnM@`U5~)N2A}V=*<7?QJ zp7D8vG!B;AqH!9haT=#_S4HDA&hwWjQOTil;$@Aul1?s1^n6w7o*^`2=xOS#hK{SO z#wzS=Pp!kv%xj2mO$U5*fbk{Ijd+=0?}C%b985W!d>+`T>H(bjGz zTM7+)azOpoms9(S03f6C64KI_3u2D;HD>MWHX!)|2oT8HYaQF=WFgqH%)$B6EkJ)4 z>g=rk+mqOs98?Zd`R?yEZ7kfN3~2VjFaycY!_5O;r)m$4$)Wjt%gNWUQFsEH3VJ;g zOT?aHb&u>Q!HOg$YeE-@mH9+A-84#ep^k&M4XD0HrgW|kkBbU2?nihD+hj$WJq1gI zJwCiqIw01Gy!~f>|38tyW^)yJq!@J(KT7v$4(iA#2xRKb31-jm2g)D!ow_r;SL#iaV``r zLBJ|GF^sZ{&>2CqIW!lKM*ZZ);dctWSF1bbXPfL1Bc zr@cSh%1L^{dk%0QSD)`yy$Knup0hXoF%E#Y=qY5W5%qci%lfZ>{~ED&b8+wlIPGn3 z1KR^U{KyI{Cq}eG2_k<_17LWY$nvC6j`qdqr>94@9Cq>6WdgK)DLH;AdTMhIx%zNM z;Opm(wVz_6G8qsc5NV{fTtkjGx`!Li;TTLY%o9t-1^~Pj1Minuq*Sius)Dh$Gkiwnt|L- zhfzu~(x9vWkXI=L93>3kk9z_=c(vKu7+--!N~C}c{Ct0jvG(_%N=mW8hHoZdg3>Y7q7tkuG2b$ma)~biq`xqG?#v$o!5m)6 z291u5pCl?Z(|Nlc4@m&&I3g*0EY`@lfDdc*FgrP|CD>_ieJ|hz3clD;+0YFkOdACR z#q(i7VZsl058QOStzgmx5;7&=<6u~@P~bn~J%K^hMIn*8gg*U_+~K;Ln^Oj4Btbjz zQ@B;8Unt{cCx2=B!qcA_9$o=_Uj)P-!nQ!G8Mw;20;qn$)wW@LiLa3Xa;?1FcsSN( zivL*OS8@ED*hkDu^g^Jbj51!zH+Ps*N+@8|8}xjcn+V>Uy^* zHv%Jq3-$if@TGO9-LN%OYxeWij0f!AXV6)*`qqeeaYvvh%(Fdhoe_NLN0%=WA#VKT zdgs*yfy2BSwmc+gqC0hALr_!d1J4bcaRmx@4<(0{&h6ac^}f0I9;Zc#7|nG!6uHh$ zuIyIp_}F_28~e#hV1mR9Il6jP_l13R9(D(KR)+3pM6)Md57vwSEi^Uz>_oI`=<@0E zY_XVFn z1LdasiVNbAmUC`bwnS0F^_czM6+@0V1t>J=F5>jbB^K6*iIb}|Q}%y^(|cd!6YiZ6 zh=00J=tWGSu$4!W&Ua%2^A9C?|0V&&^@kTvvkN;lJCnkHly1VGD(%`c`sMS&UZP8e zD5jpF{H!1KY0?r;=OVRT=n}f(f|$pP_oHiVjw!ml(XomgdC@orwB_|3vbTC zLG^BfH0J0YaSv;?H33|T09sUp5=^j^bq)hI;Fh$g^NDGY`dhyR9wHE4@9w?!&m*4p z6#*(mVG9UWB|;{XH9VUkQs#9b{SW)YJ~@Lox~$Ru5dZ$HMv!H-g!D>HkU9$i83F$Q zEfmT;TQD}Tk}0r~A+VAeu#y?E6TmU& z(vb~U=2QIqU59)<5XT2GL!2u!m@UgT11l>#e`DIM!;BV@f6D zF-^1e^0Fa^YRI)TykLyt1`pJgBuAX4C<=;EP;(qvX$mT(RM7+?OczuIven>RrTD~W zic=~V3>UD9{|g?+6tX1G5}&8JB1sdEBX2xM3MM{F6@{`qvFVS`^W3d&iB5{ef@$J2 zJyYX21|2|Pwwy390#MTf2n1=mN>5H;Rw#;^Da$lj2Ub*AM$>Y~mM{mC1OXD>bt^pyvwPGK{9oh;fU_!f?T)f=dMxTLgTv zVAPZgYIHCGpB&N=pD7E~p%fy;l6EXCtp+VJ&hFjs$KQ1~uE|-QjcU3Xd*i(IcXAtl z+;BVVZrt9#9@XWnxBgCUqq>~+_xE?&-ugS~R9Ag_>+huN@#So9{kN0b`1||&`{(R* zewz1_xiz6%3;O%}`}2Ssw|&n3dj3Q8l_aRXg8u&A?smTY^VWh$NdBs;_vG)dy3`V? ztJm{?dh&mI`u&cMip65FSoCS0PewEw>izU=yxvR^Ot|Z9|8;xozwQ<1>`6;X!HCJ1 zN`-=gaSKji6bhf90Fz`fT%nS`q zhr~5P!b8Yg<9TZ|BuTF$p>dn-@2v;7nND$|-E4SpZa8iWbZa*rO$NeM3~6FU7?og` z>h>}ciS4CWC2I#tuIL+@kC2@#$ra1-3EIIO5C$YH1OqQAesxy4*fd+A~_9Y$6ZVbt((V}WzA)~v(VkfzyqG>)ddhGrT^(`a5p zYP$}JDu8Y(azdK+v+A2$Y-<|YrM8;(D)RHfX&ETZEd`7i?75ou+M2dC3m!K8LTfQz zM0C!qhQAJ&a7NQ$J(<4Qw-hiNOz4Dd=tJbQ)Kk(?f-Mo1eB9cSP!SAh$!AGt3AWS% zDG4bNiDpVYX9I>jsIzw6Y1lI}m2h6bMywOiaedSE;`sz9$~7VqpPn4)p#We6m&tX7Z77# zEOyS(PL{g}r=Ne&pO|6OgI8P_oyS=Fjd`&uuD$}JNXk`gEDmv0lT8<&V&YbIbKK<^ zZkg%Go^njJgA^R-MgXPLVoRFQ&agMl`Z<78=1edQwf_D?q6$c@Cos?;kg8{3fI%R= z9>Ac%L8_j>K!ZVAJ%NpNBI#VQ8dvlHIDC8l;oT^BIN{Vud$#b|Q>0T)xZfgkohK%w zNcFprWTqojL9}Bs7~1mc%2^@Ba++I5s7TV+3lSRyM(KfcCEpdO=>+$@7G2f=?qF3% z7K+_Z(I@rea64tG!jCI67Vs}Rh-2Y}jaMh@63fN@z|4k=)&%I{jzb53qV2An0B|u{ z%K2VMlb^-MJB1r7eLt5yJJK@(aCzBFpf7?pM?BpxoiOPU@8vZvc(z*|wJKpN zD<6|Ln|H(AE@W@D*R{^OBlFS4;rl=Av zcd}+-gD1nc4r#_8JPL0Y)-x3LgloRe>4B7dId9Au0?FWjbV|=cuBt2)?GGK)r*uE) z;vyeouuL*b9SYD@ivny(^COP}NgsR2Lt1Ef7rYM}l}7kSH`m9g*4_siiZB3ue7X>G zWnjWRAb2N^*~Yd&H`ycVaUpXt37sP071Q#9R2c?;}_i^|G&Q_fYmp5l*KLY0PV-Mg7&rh1vrw_1lh5=Fu z45W5`zq2J5qZZK@O-5cY(Ra|*%(FK&S{V0ra^H=uOH+RNR5gGnib0+B0`%{6Me70hhK_=%>^EF4h+Ro19AmC+6!ebalv%uxbR@4->0HT6{gxVL`N++_pK%Z6)U9`Au?hI&NhoV+I zrxr?IPGc|G1sEKYiFec-LP?~pKMrP?frYKy8rv5JvmomrY`oW=!*9(zXp+QS7{V<- zJQ&Y@#C|N~^X`b1E=ch=p&?PmXWJn{@_gd)P(<8w}c^&bPu>2qICiuF0Tu03IhpCrLd-7_c-)D{m7AjmtSh&`2sFlP2ix5+4+ znl-~kx7oP%c7`pVxf;BIdEU*&s5m<7gx0Ftgc_U&XrASyEd>NoFW4mvPyRWs$5hZN zfKKoxyU0)H6-F9nfh1Yepbqk267bSsh6oD6#uSwHr(wxh>02KF{O16I=_~h}P)VBT z+)Q$q=y(D!)w#K60>JYO37`X7;^7YetpTN0&+19(9oJWVXI_|ybXyL%39dAelb`hW zEN~qWafjL6Me}IyjNT*f&;B>wWiw*gPhHH|wGLv>3B0bAnJW)e6sJwF2*E@@@slTT zO2DgoVtgn`84=s}AI~(SwC2q+Z(DS24QxOgCp3<)xCySpz^u;bqXu0k-H=kR@p>YP zlideO++jqd^2jM~kF;!~B21csg_M9Ip-3Zh7BSi5q*Q5(&zv$5gdJiC-XIJ!-@!pk z05wgCKif@_UEXvXpX~AhlEV`_IBgxvkjxV=p|UgjCfIN@a@~L!>Se!=FPym{Ss@!g zhW|eq#k$8RzfkDM852R!Cw=cvHK-5dIs?N+DkYs!KJb4$argG7B6Wb0tbzsbj*3?H z(82Pq2+`hk<;87+M_VM<;^OpMs@@hkHl){mht=c{UTW}THpZD@r-Qgqx!yRTp_deC z!ctI)`h_>g+FXoVvox~sw=xOk)* z=$8?ch7JS?(ji${IBkz}ruF&C1`6m!rQYI_Q2J3YOGS3AYS5bcMV&tLMLl3JQeuRY z7`$+Ld@R6V-rJ9q<8Fal8paI;lGYMi7lCpU2xRitSZn?Wv{MT$|25)JohDO&ywJga z2NU#^>dAp%VT+cz5kfG6_q zt;9v>qceTNh>As&J%FM>g#ZWR{D+W_597)3D>lY{g>y+0N*T6TU7>H1Z3V+aIhoj~ z6omj!5t2>tqO$jkH_|TVSvN9^2IB!Vzmm zV~PyyA3M$Oh`d89-*`)*E*Puy+HOx~M#JY>=V&iotUerQyS~h%+$CysEUSH~2ySY* z5|e@PZvX4zbGa+mrc%QrF=Ih?ceJ2(%&GQW&|B86qh znkX-LN+pBQhPTg&b*ul#OZ2KO`T9`5VvFlzY~G;B0!cu zC%6gf%?Wv0P2ZWphom0HQ<|a%iwN=@E~>FwT15X|;MJB_8PVynCSU-1f?Sj~xrpGv zsxyi{DxHMZNRC7*5+@@hDmW~&whU4-J{N>uM)SZl4mY+9^_v3skvT5`W`}1O`Cy`S8zO?&i<}qPF zd3FBhj)Oxur9$I1KT`S3MXkO9Bsn^1&7AS*E~~X=(`+9AA?#x0q zT@vbBsgzyR^8%96c#{pdS;2oeNz2u_;@pNg%OOx*2tJyA)pD?{5kK}6mk{AV3z~9~ z<`05AU1)-mX%0OAf!tWBO41M?PhR z2=!DLj`M-K$EEDA<+$T8)+%Y?{I-SyZs7}S%W_EePeZY0J|qMkER5%pIQrww<~?_+ zXwSVm$8eJ?G(OC%;ii~P=pLGLy03D~Ljw0Rc$wfU&uRdTxC+jDB2v1JThd`=n{k2S z)zS|bk~FU)AqaKi9uS~c%&RXC!lri+&ngYjy)8^yM50&yXL zye(^)a2&kFP@*09;T2@+Eh33~LywRPq(5op@u97c1<<~MH#0;>t_5%OhJdF1qbxgi zl5F8@20XB{Kw_rGo(K$zMkbux0U1tt8h%kXWGOr=eyU87xthI2sLiGwP@XC40gb}T zPpMa1F5--hVld?cW(mj`%ne~b+hT$%)wn3LXf)0HnmhP$^Rt+v(IkL5siLjXk11uQ zrE_^WPz1^bKy(6A8^>aBr?0}*M(3j`cYSlyfHqX{kFhMuasYXsY!=-=!5Kb2s9UiI z=*X-pK}kE5LU4c--2#|HJ;62y?s#C)T@DT%YHi_c7>YzNYHvjI+)Ip2d?;{~qHa^u zO`Jh|TA-v^&a2MijM_Kb=}M&+87%fx1&+C^E!KqeGw0(4n_&U2JvsXfovX`iy0sEk z3N9SW_mw=R7Uvz)wA`F#{gNkg-G%qpEXfN6GI6|Sk+CvR!h68yHWvWa90Eqz;VYw( z6O8Tr7~^;fIEv=4CQpWzT=}0q$#Tzn6#cklo=zEJseTpLXhMv)uqgLJPQv-TC^hzJ zhw$;`98k&;@>&(9)8VtjtBe=b1|7p*3}XN~N?;F3@UA!=602q}25yn(YmburRXo=d zY~2M>xKQTCqtAdvb}g7>_QS|z(Y*p-4~IEG_5Mnw$MFb&f%&B`jPtg^~9 zm20?$Yq(|wx46YEZn29N!x+XehOyw3Q%*T$S;{j!!!tZ%!!eF=jAJcg{NfkC`1OKi zScYX-hG#PTVi+lpR~!R$vr169LXZ&Vfhh%2=9wO;dYsF7AkQPRQeUkYjHYHrCXG=` z(2WZQec@1?;3~{mF$*4uXQ2b($UrKHs|<0;QX#33>&>{{O(^}{)8#|3-B&v7@#9mT zp+x`&3V0u)j}FvzJ{_(-&DCmsYqaLjW;e5xMaoiHE7wYes!FpQUB-|MKk)-SPxSEt z>bg&-85vh%gZ+Jq3xP%moCK~?}FeZKe1hl{hj0D zOHTg#$yILZ@T7}3`FGP*+ONmfJL%$4_q=rS;88beu*3e?uEC#fdMTf9fA3!>sgaY- zgXOT?H})7r3wNF^QrfwqE4rd;xhl&tEWNU8 zSx7jk(AjKV&vRwfl1o>sxw>Gq^IXvtUC|X)OAZ|ePL&!{91V3riDalxi_T{2dYAxfs&cXudv*e~sO1M`6&d z1HG%CrB0e!0goPL>)>n^UjAAktsKS6NxJCIpLmH&V)9I#i5qE*v@2o?pMtbtM(v8I zh$s04w!>bQGisFej7D3>XmoVz_>5HOL^cYBJ*bm7^AD4Y1Plq1(lJIfNs{4H&_Hlf z3=W76K^#dj2m&Jrf*=TkAPm9~V~8=tD5Q{TwgGu-Y%&pKaP>=atcZ5)k3SkW8MFU; zW88H>HEy*$&$MYln?%_J9m)`;Au9N=_Qp}U1 z9&qq`0kXzbfV_;W!PboZx}8FU0gbxsd3lN}HQLx{Ov`x(;_cXB$Fw}K+tmD7m-*fv z;IYUaD8xSo2Ktx>o#Cc6vm=*vzGzLR--lbUv1i!bGYYv);+%)Lys`^)nICLGFd|!| zY>a_u;eOwPz5oRoTtv7^A{4t0+E@Maz*0V<`6F2~*|%4b%>s^GTTO9i0qEnlvvNFm zi5D(5GE zf>RZv>T#%=@}-l;1{z$!K^VXDj?$^2TQxHt0|B=xas4ad^aK!t&LbYG{M(W-r( zhKu4Zx0zt8r&huvhYv}(3ueT@O+d3n2Bj!E9?zy`vYpVQpBefP=B(LlN7(*%IPqf{ znGYG~Gc_cM_4`2v7e9qbBA%yTSH-%l#=!D4cG<3!{aFms+b-SaD0tRvNL)zx9Eywl zX3W_QxKMpC$ju)K;#-iv;U3A)7{9oFA5xO>=+ot4!j4iH8J}N;;=g9_+Mi6~sbtwm zQru+lmonp!@)Tug*k1{0Nx-JhXkOdGAAPw&-)V)dhNVrHU;XI*ow=IRb+;7vX$aQX zZUJmf^yx%DLZSvR0#${4jC|`zMB;NV%E5q{`e7bz3VJCp0O(e0NhE^zg3rH{?0)!|1-`^{?LI7 zuA(3qWnE!(LV>K`GJ_Cu+lG~Tmj3wT%NN;h&N&$)LNQE}10-V9nCeHNZb!}%5?Qdm zbp4gAh}EN^teig=ZZyl_+X;w=yJ7CHA9jMKH4xbhOBzJmI!$@h=s;8AqtffhROAu} z2glpZ*yx(M5%!$O_1|AoHReO1CHR7pHzrzJ9fKs0w^acg_^ikDJ^P- ztjryiZ(8K}QC0YM0dOnp0N@cGvq7ow)oV2UYjqH)RIy@s7PZu_iQj-!5}>_Y7`$`n z5`{~@Zw1ez=)wCu7^vxPt*}_!^BR+nLeMp)l-donm>wrqr!Xat!EqU8r+0N?5gVH* zsE+uvyW)vugJ24cHDGGS!-Gl9L)>|zI(gzNmcXh+)Bvf%!|)T0nh>Ve!ZsEccs7m9 z;fF@$)Ko_=#!dH_!mx@N=rDjZGmvI#u!0FCi+x{VDJEE923AZ!jp51uu6@m^%)JI< zRCqBix2vVj57L*8PWOY$ z0;fCYC8_ddLLmrlW^>9TSAeShX1PtSxWJUY(E+RiQFJ|@RB$_4E=AOC=TLT_9ZB&5 z0bn)82B!HsHvkTYIvXJ{0xn{Z2c+X=n-N|5SAvWNs@!82V+LYTK_rRCTDV;Xmds}$ z36g2qjD^C|O(xJsofctU(f3eMVCIYpsJ;sroJSFIK*2qpcVL?M^>c*ZPjbRAc+o8j z9SSTv{oGJQs6eSDYTcb*PEWn-2ET>pdKA2h+6&BBLdzzcToy|q62)4Dk(+VEYg6yr`u#(P0h!2czmCsI{w4FbEaVxmCJS3rBxW2b3>D&Btpsjt!lw4bJBmJJ&f z#9^TO(yB!slh3$ibhxGtR^LqfEsIQ|^bhi2r2n*KCYX`z9d+`RXtd15h9o0PA=}(| zX*ASOLnSBK66TG|@=6cd`2ppdR8{iu_ZNX0&PELuZ)%W;eiwcX0rh6Rvz9|vLv#O% zplC*SKT8Se9(IIVf$NBnXzR{cj3`yJ8wErjjokTUTJ!mGc>{(qmiH<|;;cZadRYtc z=5e!UFGp>*oB{=iuh`{KJS)&Iq|3LD6mQt11XvLp4u{ZgLW03iS<@c&tXDaI7Fcre zsL!4SmM&;>KsD ztKYs7JVSEW6C}q@;{YRGtJltE><$mOhh%kdqQ+u%HK=&2*eZ4uoV>jo59EzBm0Jx` zez1$L_7{jS^?pJf-Te5xbI4i|&;JcrgTr@ImLyZ*so0XJ9K%x`bfi8uj(u{zPRLfN zNFTzS!*j-#^Id)wunT&xS#DI=h#BgMJnZd~L$?|r4upXgi}uDm<1*b=aB2FGN0k#_ zS(pfek{s@1D`J>F-tGTKHm9kU@A8^h5YH{#M&0gVBg0bd@y z;yPzfKHmMqy#4mg|Hj8N!;>9ln9Xc-ZkeCI9ow9<2PwB?G6IpTH2*$IMj-7igljzu z*pnn}t<_UQ+|2GDV7)oBv7x^}LLSB&n)5qv+-I6EsV;=DHeLkL?e?H!_Kle!b zaG&U;KkN~E!vCgU>TB~?Uw_4E$**3O%=9-Mr%&pajgViluJ7rWRsMHJ<6EE9*I#iX zT3>&~{r=Va<{nA^e_bE$3;W+M>62h7)Vn+uHX=6WHLdz(BOOoH%ly5+_xJwZ-|-E9 z!+IILOaIo*IR0<`WARCdNRrrS+PWjv*v zSWYZVJPbccUFc#nXdJ{BluxNsYSw$Uy*_OvC5^~tv)P=#s)0qP)WDk>*@~bvLO&4R zWI1Udw3ip#b-H|)AtR>E_GNM%spU|~4!pQCvlC@JK4G6DA8T2&2SB73*%(Yz!gbtQ3fTySK0Qo$ z8-TH{E}bbI20B31G-y~73m!;wx|VP>j&^`wm2h?>_Z19kd!;H;u?gBvGd3j!bxo?B z=~V5E4NR?s^n)AgcDt_xZkl)>CG@gVVMJeCgKU@-Hm%tB)JWD4ddT+t0D-yCt`O~6 zFqL|4_#5J5qWbAD01Zmie4YznZQV{q=kB~d)x2bDWKZmS@ofodvx7gM&*u&P#GgV_ zA?SDJI9{bvuT-#`bo!LyZBa0FIt7EFZ&uIg6r5l9Pazx;QMakv&QyxQN87f5RX4ib zLZdd(D7_W+cl=j2yvuJR?;-g+un_y7 zM}SA%h{YnN#NrU$tUc>1%PMOJ3yjr;1X01Qc!dpjdAiLFjHH4a7~hmVxg4c>6(3jw55t_@S%a01Bj^W)Np5vGpD0uPTEi+ z3(1J=Oo4O~BU07uh{)(2md*O4y-t!6?jqQk$r@#$ITA$8C2(qw!V*TVeUZt@2?T@d zl~I>##XxB5VZoJ2t2%W)q0{Ko#(5*1Myt+g^$CqSYi^o0PaNm8#tEf9rBEE4s)KVA zrY51fBvcdyqiC`bQqjTdT5Vtj5n$*;b;zni0y(P@gaHe%L`THZ%mTO|;&z{|K6JTJ zP*PP<+$MEE8`VP*%4Ksm3?swyXGW|>ye6O{MBPE68`afWO|$sB=G@5LgYY&Pc! zmI;~=)Fu(63P#`KuX7U1Kox;qffxdh90PI3GhSt7Wu}fTcqf%N$S;Dg%mibv_PeGVnv+X4!|N&`p7S1 znm7U_3|tasY+t#&KfxqXAj6=^aiEFIbt1;jSHua=e&atyO;}>${k_K z;h1d59XFHn_P@W_y}Q;9wIA&~Gq8Mo|Lbc%_5*#Z?#;(yR$BtH$ApB#^v2niwW7F3){nf*f;DgEUOH*h5YhndhK37 zV-wnQ2`svS>8eZH@N!&}&TE`#lfy|RtJ zt6)J@c^&Y?>aJu6k%P+$i;$IcKzU11wc1ZH)Kvx*0HBVfbmTe zdy*RKeX1(rX3?8EIMfE)=bGfGru^YI3-@OE;${7k9!0`)x4!~%=5eHU3LJpuuQl2Z zJlWHF*e9;d=Y3+*+4sEr4sTT9`A0ANJ&X?bUgf_&eUqcSzG0{x-mA&|yQ7s+f)J@b}hbVsTr?0`r57IHwr^xELX} z^Ul_y*nW%((NjZOOIur3EDW!bFvsZZ{dUooO? zh=j(Zyc^;(Z_jr81Yp#gdP>vk&XrrtwZ{oxy8j5mg-Yh{zfdE{1uCWzK*suP>%1Fw zc?%T%`A0Vs_i>liOQRX#oSr!H9X&N2WiHr90EuMGq78iN<{b#suC78!bKUm^*qEO# z37}Q}?M4I-&aYHzacnB?d4g5aeCBYHspJ>7)uH?Ve+N+vx%@%rsueCYK59|xO5=xG zzHT+b9aTJRx4Cx5Y;2!!8=T+-i<)T*eNP2Y8sIeNDIWArA!V3q0^eC-@^LWN-KSIs9i+j~V&>gRu_HVD#DLoi6P~KaH2iq;{B`vUxzg zBKOGfg99DT`bdatcT|C~d!(2%#Gz zbZN?mDM=l&!JXV_uMz0-0~}*^HbO-Z>)HG)I{u&PUp!Kb*rEFHZAM&MGc@8dV_<+d zj`xe?fh>&M-u+y3)Jc|M!vq84#3;6tb{VbP##r{YnDMPlo%bXWs2LOw*dx52xSRh=v}#Btk`_2g(=7NL&>nv( zx&>mqtVVvN1tu}3o5;`iVCO!yC22KJs^K8pz6+Npy)Aw{Me!4RF4XYO{l>!O|H*+0 zA(QHidE_oVt{FxWf{FK9IL20csnkReU0~Kt1xNv>7?I|1@XycDFVm}KaTA#Z73~*0 z*N|%2uGZ?g0QmSNF@X5OaNNt%Kc_a%oXRwAb}ISb3@ZhIrp0}WAxTnrJwJcdNN`B` z8w<-xv;6dPIvm9W-SHNo>Anq)TVsa*pCs}FP4k{2ACx17-C*PCgC{2)5q(lY?zDrJ ze9?2T+AABGq}OWKE6 zfltP8zF>!}fQi|w*e#Rcyh>jlyA<>@saw2x6+egq*h@1LAyzn=GJ;`QS)Bn&N7WVtCLxVQHuRDeTeip%lpYN>9aK@&4m(TQI zI$3SsL;hGSjxs#er}6vUc0t}j1#UOxWawYNY()mLOhpMIV5?Ac47Plz1|LGX^btNp zWBqpD1rT|9IMd2MOe3#jKslDbC!J~nIhJ*x$c>0-lGXcnq)?mYV7tIFBh;UmZ{Yr- z@;1k_$aW!4nOVN5f+Cf0>yUBy<($mR;vARJmQG8r2`-!p$X1e0;VO|eq zk~7gjnGUt3*at873c zKfB9zjcaDq^Qv`eEo&|Ri!%HMdK-J@2+IYCcI4qJ$`%s$&gfdNc2@E(xk26|75k2J~|M7%} zTzpbS9|H1)mvO-dJ*TP?hdpK)fY@JnqV{MUeZgORh};b2><+w&bF708SG8X;=VwF< zXe;;j)K;vP+UgW)*tV`RwkCnC zyR-SYn=&8l;IsRX3^uFM8OOp~7wTu`L>=1GZSdB`o}GljTb*SS80X&O9^0=`51*D# zDQTMCrqE;pW}#a9A%V?)BQSDz*Mu=~jkkMazbF#r!E=sT#?Ogg@c9Q!cMl8WQGK_a zX9pNH;8jXZG&jV0xCB0oYc7KEPOcOo83xyo5LwSlmkajxSg1b3u!Z^Y<$1{q4R+n- z9}uu0bnBj(`rD-oTh5|kwHndyOGLKPf7c&g-%<5;iBKfSnufQt(kv=Ua+xCS_X-5Z^?jAD! zW$^uHT49|`cB|`5=%2U&Q`F}wY$5}L|L2-742+p!F>w@+wO>!OU=)$27&xzCO|qu^ zzlX5m*6DDuT^>exn6=%!^nA;*mI4K_xd$MqQ3Yx+9wqpT7OB`hN`{T>Rwr5`e8`rt z*6Ux64Yx;;3A)|il+I=2@=?Btf>5I4b2e|0^|SuvymYETjrWziu$EHt--8EcK&xDE ziv~;zK9U|wya7I#3+^USipuVv+rMkbg3sy0oO2;IfA+H-Z}4fvfY>@s&PN{FM#^*Q zbmsB&Ne(`ElCG@y-r&;^Zs3w5S#5SP-)rHRv423zmd%pWR&U*gnYVS(BOi57F^bVn zz$6&R!k_tgTvx*~Oxik=IEj(rRi356oi%p|UE%k3xhT{@J{^jHoB}%I1RGsHjC!(v zQH7=j-JO&P*Dt{kM7-_Tdh4=s=cm>t!7!l2zd6x&Q;L)$#>=1?^FUJ{QS9pPDki3U zpa&uC;8tnu+xN#9-A{9~iZnDq$1eh1I!N&bG8*#$s|M@RG%q3Dpedl=*k=_`iZ`W@ z160_KmcS8Mr|aD(5ii|-9Q{lV0crizZdy*@eRDt~QV2*p4w|EsAmu~$PXS6}7M}15 zP@x!j4!5GAz5c^g`2rkB2ov13E=^ooK)5#{<$}sp9p|v@ ziyna2cUcUbzWv};eEa$`ZX;z)3ylRw2nBmRkgLTQP1dZcgaV*)4q&U7g8Amlrj$0;;&UQXPZwYGS~i zK|oYnR+9xy7168H9t-I|2UUULwGYb%?jU;20M+JrIv*#SDoy^tUbcs7W0yJ(`Twps zkp6(ly*o{0tW(oF@Jx|vz8toDvLLEV&xr=CuS06HT8EE;5(OW1Cob^MI={X5nuSUM9U)Cy=~f@xZF93>eMkexaq9`q-QNN zfQv`%(YDjR5keH($!mZV-O4v2dDP|Gt-z)|!<{mCR+58U=)5^BbT1=f%jU7a3OOV@_iY zqJQoDPS@a~E}P3aBLIFU#3JQ03)NS|6_pVUXNwH9=2(LGAKrd6qTub2zc3S_SQ4{B zl9DmDE^3D2450yd;^sUQS4xuuhOf{d8vWA5ijRzmJ?$xdGVN=SW@aY2)lPF^n?N{E zgkrIAwFU%y07_pp6i5JZtOJPaWH96-MJSMGGXsl;`87pkQ>Weq#Q@Fd0<2X9gI(-n zzK1O$7D8*3X(WoUCuuOi|NsC0|NsC0zpJV;bX{V7SPeA+IRO~~orONpLMwF_t`28q zFO^FDeM|NV>ni{TB%yDMsI>cmFbyPz8rSWrfz&K}cHK4vjAWv5FF);SXD5;N5Gw6%4SU6nt+MBRqqAAc`TI7joOf%( zl;5X;BCkx7X*k-)gXnplx4m6sd*%kMq07*@WET=Lk2aBs;2nENr}6zS-Cj@=>=Ok5 zRBUej5!}FJShS8{6bgkxp-?Cksx*R|Kb=meQ>jI_Y>wTaK;{|#v)WIwL{`Y+tjydp z0s~AC02=Ti;7JWQuo6{VDQzZVGYHv8e#-^os&}hy<|*lna2Cy>N<3?oS*1)7-{eRiSF^FN}HP;F!KL zj8F`hX^X!X=E>G-CGDcin6=ZlVKBJYhV7S>D)pw+e(D>hepJ-kPa$hEVTw(%33lQq z2PH3-6wV|TwHNWnX1vBOVwBAEA)1&(CZ-RrtCh4#k2~$EtyW4^8jO?o#iqj@)=WCw zVeRg2GM|Vg4z6{u{e*TklT4(yn+C2{5Z(Dj?=$+{rc@S!)BFB70dCPdRdrNTeYvKIwUnAS= zg|aZKwrXFynVRT-{P6ehpMLr(DxxDALc@PQ{q`a zJef!PsG#rje%?>_>AcxSumkXYI6f;LfX~c3wIzpx38yUYwW1dh-Z+OwyxjE3a32qNl?M z^T+C`JQ_cKB7m7pgbjuc27j#G+J(9g1BS4ZKeUF^Xbs2bV`Mwxj@d(daF1|}{p{tr;Yq2V+-BWK{uO7hH@d6H+q%mxF)$QU>iL2|N0(jCc3PNF0yImtbO3@KTXwd7ZW*l!v2ihgbi z^;a|tkDOt7o~We3{QTc9ldBRN68udWEwRWfZQoup?YXj!_s0Wua4La0C6|#0ZvJx z5qZgct)T{BG^K0oF>{W12Qu%8*0&kL%rXDWTM49TR(%#Is#ra$TAa( zM8`6~-_pmVYwKm5eDZQIz`wr$&XHnwfs+}IoM z#2divm(r=!8qK-~l3+{X7D^OwD@M|P?jiI`|s zaaNwX1COMDG3dj=>cR#5U`Lub{r#!N(ff_))fEXb2{S_2+U~GSdfcb@lwISs^Jw@{ z$6*eV*lI_&IA9*8Wd`=$^wivc(QUyM-8zambi!NAvAr7sBjX&{$j-wC%hL7(@hptu z9&Xk&{EGQa|1TI{E*M;*iu4?UAC~14lj%WE0H|tSBJ@62;R)cGVY6l3#aHnk%_M*5 znVO_Fk#dVzcv5zQDbK6(3f?ecgQ zq4?N)jDL5>{PG2^FxN3ytd5-|bA5G(ID#6x9sa`4*8bzP?I69>dFbeJ6s}vt)n+>4 z#ddVX>8V?eZk>w5v5~EGQ^WG*jca5*IQGJh8GY3k7v`&clY(a#;DfOxs4777FK}nZ z0TEg9+4*~6G4hI)uN@eKvjH7MQp2M(vjhhHIiyuhv$YV4BD3q|EeT$>F0qJQu&azr z&Txk!)L2~@QL7Vj7h+BTT6&&t-z0Vo^Qk?a{?{6b5CS^8VM! z2&{XgNF6jU)M;+W#4@T2dcBmRFo4u6bI92T3!ksH6|b=+i;gw=vEiQ``Hw74v2%Q8#Iinfk<;AhsqCdfO*$PcqxXiH&08l;_+ zH6k{!r*uaCl4=X2xRxD%PPjjALFpGorMneM#r4zF6x~5x*>o>CV7GyVdRS*RZOMDl z6K8+b;#_6+4jiLD+TU@$Z;hE#0{k5yEW11>CrDL@oJqvZNQeh6# z2Yc2J2r*5$XBVn3lSeqyJ%-=@Ty~nQ)+1A-P!L^{NWTE29l*;rj47KFuKcvg-z}bD z3*nuOk$7qn;Q>=m$O26IpBBP+1{CIf8R5jppx{Q*vl0}>O9QX(?36RL1^p`5hWrah z<9PSrI~;b;NoR*F2acEhP1|f}OP~L6VN8I-U_GOsz)xevK!7M`>Qze%$`Uh-yg#tN zZKo5lIX;9fZIPxR)w+5^S%N*Hci=*8z5V=PFK8dl+A`ErswRh4uV5&un+kzN8xrl+C;R-^FJOL zCPE7IC{6|$bWqTd7<(rOt4B|)U?K9Mjb-Fk26?6Pz4@h!eSM{z_WdMOiEiw6>Cma2 z9>lH1OVaR*oobhz%Lmve3=Cm(nZ|d@geF#)XRwhdgpyuBPKMfHp-_qY&ok5ug7*l{+2-+i1JPFj+!ksT{-A| zP1COZ76W$Teat7z?6Bv@A~}59n>(yd6bM2aM@AnSz2Az~ZhAw$^%7|fDM3P8vI;}- z7-D!x)h0q|*VPr5WOr`ACXmIJ;VZp0rmpg7qq2%g;BQRI0u5enrbtGMh2m!CWzHH3 zZ#r@$Ncb-IMU)6Lv5cM{(_HdftaElbH9Y{9;;g^l=()&}7-K29pnKHBzqKlHK~A9m z2+<&^-;4zln@^ZSX?}KL71S(EMo_eJv13&mffp>1V4;&yv@P>{z^PeBlvO{B3g@oZ z2Ozb0>HyTxLpRr|7t}i;2p%N(qkjALM;4E}ord6B4sY7~@{c>SBze1s_B>aR%x?Fc zxp#J;4s3MpFnjrfLK4a5c+kMyy%&nd32Cz@Azk}{KvE!Pf2F<%g~@Q7WGd|vxhQvg zucWqK2z)yW)+CXV3$j0Xi{oSoON2Y3noPn(@-<$Z#o=7Ug9M>(x(l357w}Nl5KBy` z@7nr#E;ZW6E#N10w1(X(Iw_x@KfJ~6-x1S5P%A#is027FM(vb778k*%hk5(L;GWk$ zWVim^_8qYuI}89dz<~r#B%_$r8oK9W24Uw{9ITi|&|RqG8#>T8AV~5Wzub!mHX`h| zkhnc^Q7~}82X3D>X#D!5*bWe?*c>O5i&Yy8-3`i~TZ;AaN^s#P`9?%e7#A;YY0EaA;`m6{p7 z$O;(iCxZ!Xu3pqe!=9A6w$Ol$vtKLxYkI4a>9FZh$_n`PNk;bTH!EjCwX^IH4 z#k>kP9(3aJp@ z6cCx9>vG!ZO9OiAP+YV_HHtYkiZO}hf1FjA(M^)|d*sOIRRqo^YOZ!Zw5!{_qw88U z-0I3I%rJ%gGPxcJ+facd&gD^4B(WW@cYG;9>>D-maucvrFXwS`|Abp_MI;2jBApjR z2OvcSaBfWH3KDJ-QlkL2rY-LTLbwBbma=4E`|>GtKU>5_u+}}BW<*U#+r);Mcb6uw zBj(%SA)Z5h1ypUZw2K;Zp_bfmS4PPH$+F}BqgT4ajPA5auB9+YDyCBs|7dc?&x#}3DI<2(r#$@LP{A?PONz7aV6LVwVw%lH-u8`o* z#@o{%Fi=ujqGBDb!)@7*NTnt+#N6@zC}gg#_`!fTfmMqv_9bCwsm_ACUYPeVY%m6U zMWvZJQfJZvXa`gS$c;7!gj7G8_#>#Os3HJgqD(K~2s9%TG!qk1uBqs8;&5qq+{D3g z5Qu0V`jA470E5Bq@`c5%UQWKW-mOaLKEL#*8i)-u zxTpW0u1)&w$2c!rdl6mx7Dw}$)+31@Io6MNYn6Np4_?Jme+jZ%9DlTUxwVPfy4rJw z9ydIjiHnb1|IO=G?KoGUuqh>Ab-hq-){e8{G#3-2XQ)6i7Y}&ZteX#L{~{kRRCK3E zl{juk=1#GcWlL@UTjSKlkel>*u-MA>kAk2}<<*V>e%@9<|F#o4I;jb(36>?dhDP}~ zAG0IBjtQ3G{WkfR9$v=9EireUnJE^!1|MJ~59OUo{FEFBRL}naP=l@ph zZKrtKCD)5-?90-6Q^hpX)$9uxST2+{8@Sk+0g51W6tvB81}C-n06ehA@({v!#%ioi%z$tmn}%GE~v<3$U@& zBud|&cB&y-ehm58Sf^x}WlNW5SthHa#;NXbbWfBtnyC}FoJQpmb3DXRC^MhBhjio4 zXG9^}apgQTDNeO@`{wI}b4gc#x|$>3oFWxUrMK!yw{F_l^aTlVlC;RZa+8oK!H8++ zt=2zAqpKvADyhz=n$bc5^I zK{i1bOxd+emfVm$er2>pZhSyL7tPVtCQ^9;^Ix#Px&*aK8y^+^gPwGMv|#)gK{e)d zoqLDuUHS_Z{of4fvAzDHN#4`fUZW-7>}?2QITg@I44c9zEBDUej&jdefEIR!PYBiT zl+=K_E!!rR>W4XE+p>C+JXM5zJoT`P@XInvd1o`?5CvvqaR=Kn!Jjj&MAnqNV!$j5 z$u)07vW%z>m3Kmz8onIDj0EwpZA14Xl8*p z1@w=YNMHyhW$170&a1tqjOgZD9zf>vx4ZndI&TwM+b-8@{GyQC?E<2oF+lD1PjmAE z;Bd+atXX;M;=5S{a?XY{QBeJ4eBxK4@JqjGczgoz!1m=VCTGFLF$Lw548MJ^&lZFV zv!b~RC#fMOJZlG%7KQGuEM&n8AmL$<`B|9BgA~C^Mj-hSa8P$!f=N(X6(J>HZmlPr zI6z~0P9*ahyU%uih9_$y*E*Crm=?#KNw5YBE-`Z+ksrgcG4H?ei*`uuVXC16IPkyaBA~wOm6>VS<-3RTBg^vna zi8MBrAhqhx&O|NDSagduCgsd-9RRj(6x%Op7>#!q5z^X*8ndob-a_|fx1e8oy?XvU z!SiW^iKF~U{$flTOR+17Mn=H{c}@Q|J=xnM5kM=T-6S{Ni~IW)K2=~?F@o7_;MHUO zC?nF=np%3Oco>4rvrw|Z&MVauD?#Iyu7wdSLRFX(1&oNJ0aHm7O+-!NFqQ1ZQ+{~1 zojllkg)ZogC|*Q#AJw22nc4RsdaPQA&a#VTEJDy=AQ}FdKU*gwPS=OpB_0SbZQ-g< zKDiZWy@+hVntlHO)9^b7AWaGyOlL2EP9V{s|fm@B(-Oc0XU^0}c8vFG?&M^)D}qV)FTYAs=KL-@8w{8X`2F zkl>mtDQaS;@RC6R%0UqDi9z6mV8M}af1AwWAhpEtAaPZeNFj))*lAjlG0%fF5~B^e zW&3tzM?lr<_QNq8Rn&)MxMAq>q&4ZxtA*04wzF&0h|poCAdW=DmE@6fF`B4l;EnqI zUhgX`=YWsycjjQGLI>j=u00KZ_z(^nvzMx}$z?*Mh?U8Uk=}$7+#+NbDl*6MJp{+{ zeEaJk*yDy9YnN^QpJ&hsuvMn9Ri{lMhZ6{0?vB3W*86{)tv&oM*oE>Cg5RzX`1*j^ zE8XxT{E*7X?0Ez28%f zfZyrq)iy1>F=HGAIXg+O1lJgBLrjWI$W6S6GmWR|uc-5XzApUvF2L{W3~sw`_w(#v zu7c?E&$GGVZOE!9(!0;8@lN{?ik!E14&in=mAn@^0c^KCS~83jX-c8~PobjXn#6)p z(%}%0<6A0{gE1VzfcS|s`{uMfE!c>Cr42K>4Wp_$y~`1m+7b2ZjYIkHIEalWhrBpb zybjwk`&|jyx-h&eu#0)=_Q<;RO8e%OCrs^>60i*P~Tq= z(A)q}N)TbGC3txi?Xf1DMw`;i-oNV28h%L=;&n-$tlcix1YG0Codg!20^uhz8iXt_ zRxI9VX1sw*Yx+;Po!b^n)y-blf_EkMh#ex^u!haU937j-zRPOl6f`6)N$ZD5F{ciw z|1kUs}TQJ%A0p5f=Exi#KeHH$5)@lWIDe7ws5~S%5R2^ z#Jm>5qNzRpF18c1$;Mj0nDQK)LlIJC^{5%1&JI4Y^n+dr(HZGH%Ml6o??!|TC}7n@ z-yJ&Xg;TX>Z8sSvPqaxqchd1I&-{ezPZnU!_3qupuR>&suauWV9S+3Ub+wu9da6;dzsg@>T}NEL{#$JldB-GTipJ{=HJ^ zpZTc#pl#d(qAH=$DZfMfKnA5{A6`5KIBiwQ5t<~lCQr$8k#!nCIaS|Hi;Uk;6QF%& zQe3?;DqGA;YtpdcgfmCOAe8hS;M+zFBCEkk!tKGrCPbFbcm$AXvL$kMGhy>1PsTsO zfLj1oP@+Mg7SJI-^p;UPBnRG0(dydxLhS*lX_E?o?rJD|JBIvVX0Rg&12`eQ6z&B% zoDuA0ELiMYSANbl4ZMs4CDh4{yo@)^5SuvcBHp z;7}dD=Jm9^7R)`Di9TsvbxG{@%JW?cfo1{f=YK>N2YQ~U`;|Hr!H>fwD(0&-r)`O!t5CI6`=Gz6= zK-n3YR&zn!={5s^8=3UpN2JZV9ulxmi!%&f@_#fnutdMu#v8|dS6j3ZsS2?26_7mp z1UOVjV%>d7_$cwHX)C{Z?gn|9s663Jeu<2R_s$#TgU1PS|G-*N5V zuN@>uRQjY}DHkrOu*Y{-q~Ly-#GylZ$gdIv0J?~#ZpgA?7TKf91AzT&j^BZVfSEEE z}OkT={~CM?e_*L0kP?XFs5 zqGjq3uasWF_)SX${T*^H5sx&0qzp=6&t^6J-v3e0=;FZZ1g;aW>bJ6Xv2NMuU1f zTpnnxD$0xtu{Bf`=Ak1({=6?dT3?#5BUd8dWT9ZDFrtX0h@z;Sen+RIq-3Sk@}vCq zZKOrbN3B2|L|xea_l%i>g@%tti_(t9hbDlgad{h_mYeqDW8#Dvk)4Z;lZ%Cun3;of z6u)T1QSCIL_A&Ic%K{0D6af&r@1G$MYYmihOk;Ss&%xq-D~(-NO}WbG|fP|E?)XbnC1{H-^Cf|A-Ps=om2iR z$>79_;9^>e`~KG?A@t}-*M35aSuxDQfJzW4ZQ)kZ3}DO;L^?`X)HdO+DD@txIPTau z+U=sD5U%YZP|b0FMj9%uF(c1lOmkCeJGtRX=1<4wX-04Ql}W(x`Ft@zD7J~*O6z^* z3*^;)M=m*C1L91(khAAOGMKNyw;bMozk+q8g=esl;z3Y9LyvV?HT~ga(VV%Q72BUN z4IC&KHRq!YjplozE&3Y~L_pzvM!-M0hpw^4mXR8pC+?^{k1Q059rhrMk1@K#pqyVL zT-{SC2(+}&7~}Ww&wt`;I0~3U*K!&s2w0u`g$;_wzk~&@iP)qFpcnlQH-10;c+mra z3agZ#yF_`<-^7BxkF40dc%!ot?PuRwB7tEb*e()2f*|cI{c)b+A~+(SKDYwU5m!tt z$Sel{KnsHaK7c&Pp#R|`|Cd(-001C>PvEzd8H2_C_l5@m`u}4uNdb^9jZ(J?6=3kk z@q7^}d4z{Z`!nFeZ%C5}BIz8KKOcG64cftuyysPHXB=&zhL$rC+2CV_{}Yx1F(x@b zNnQ(~COzn4gSCvD3M&tg14swp@lbjX^0FYKvDg;8M8tSR;ko@Lt%EzZDiu%}z@0WN zNzd=mknS{-YZ8kqf@J_(&%8Eec-6yXY_b-c8VYOr@3lwaGxP@oTsitz0yWz)MW|IXq_oToQ9#3 zq1PC{#C9@*0B0uNJ&GYw3M%sIxLP3KCmD6imXmI&;+6ev`e|}(q3R+0Z9WfaBOLC(4U1>*aU=rx=9nq>(;i<~XAhH`?%t6JL$U6v)af;o2d zYUbQ7az=Y2dKJm{0KfhY@@ar%b&PX!h<$kvuiO}C_!cqYBUs;QI#`?;5oxFMrzQUI z-f|u8dNLa)Bvey8jvXB4{??aM7uQ|aVegfD-&2xb)7(EIrU0z%1AU@<;<-17ejmuM zLuJGx>Apj{%`@FDSSJ0+i;h8a{4r~R?iow`$w3W8_cY1dG+XYlYww@3xAR;d;xU`S zf~V^WTYu&9iZve>>m#yPMCvXIInRqJ7sTW_>+OB)a%Zix`#9{&&AXSmDC8H(7#155 zt()ZEO7%Y%8X(VL<4`feYa5Yk=_x5$($7_=OweU8sHiB>rJTX1KnRx5+TzK0#!L=j z?uJW3PPHC8vFMQU!*=|pjm$~bSL{(UIfB~p)(_g1K73#pDjtCis0!Yv9h zO9i4&eYa2I0-l8h_k9)jWAdN79p8ew3Ku%XgjJLjl!X^TniT#6^+7r%{i9O~=5LN~ zv$xbpa=Kuoxp=j>Sw25ZM)!*{D|1a%tO%hhpxp};Ll#&#=vry47L8F|UO>;cbjv@X zsxfoO393;X`-!E?zYo=q&{!rDMVR9D6($Yc!P+d()tGfg;O;0~UUphSvJE;|Vc;dVWR42R4|FGsFAlrJww)bhC5xu8$ zFy&mRi8%Sp%^}bP4rnw7c?ub2`OE{4eu0BBSr4h!=V*9O_3g4nz?2Sc`8MtxtSqHr z=7J!6s&%aya(myUVy&_LtRkg`+MN^OGhfnSU>;M7`?yV2j~0RPvH{aUbrTDDM&QL~ z^;WvJQzv|juKS^|#fJx~rw{1XRznd7G;rJQe73dLFrR`aui@nQ?gisBE8#=n^p;hG zW9BtFYm8|g9Fg($lx(L49wKpeLUE>i{lA-z{k3-ha1b<*g8T3My?^CiHtyBeb)^Q1CXa7hke7CIDf@L`1RYbs$IU%s1n@9o{YbEv37ruB zsR8SLV|GO*4ub}cd&+LT6JwPfx zX$<$qtsOM4Zm_+ug=H1iZoL;gSE68%hYY~#Vv93JkGVYZ5i`5X)}-| zt5TNHW>(f=GS79^@S5p)n{gyg(HOtgT5&&w6TvLEQaI;{oYCsfSMGhE>$dNnK_`%W z5m<0PQGY=#l_)sQTC6K?6}P58|8QHr;F@sO<#au?@#2eho_|&OrJ&k&SrqBn z-lG~zYwfW;e9a+$%e(7oy^6GdVO?1~VC9g)0sRSi3P> zUdZU%oz_BoT|$K5;JZ>FFRYM&Ae2^X!lcLpMz^B)3lV(D5^EOw64mBvWwP3~pKZ&H z8VYs)gQG_4b!)g>$l}A&%`QO^n!IF(xvVp+W2Tl-fvSnQV#=9VvA0Nn zJ=C*MO7hx@25n`@fmo5_mbCkO(SjFmeM$!w!zjNQcVg47%ojA`Q&7_)cNYEW+lI8i zA!9!u8MG2Dl;$)nWY{?=ewbSRXVCT?n>81g`weXN|CtVpEtG%o>PB7(=Vlbg%C1oN zmJOucsf_g3`K#3%v%}8#RKnk&$6};Om2jiAWy`b5ZZlQdIZrqiA$&*v<>QSJ^63*QRp4kw zdk;KEdG|^Jhcpf7AV;G4_YQDJ2hN+AHlRRYU@l;Ay(%huK$Fz-5(w0l6-UJ2QF~NM z5*0_n;8(K~5=X<3S7TRR5c@v{d`fFs<;RuRBndBv?H_^R{O{6^!;DkP=4fsnzK3{{ z3V14#_f!ukWfHf15Z|MCE52dW|XNz z*wIO_Oyw*C%K-U_TlvQs_`sMH87q}zc7hf(AT%h1Y&2j*3=aOpJ{RJ+30WJRJjKLtj_UoAA>_$O4Bh64ZNU{3GkE4++0n9;8H5t3Y*pXZ;1G3D;k=ZR_kda2$q0aT{uS0yrZIc0 zdO`&pKkgdSZ?9StE+&CXlTq^wR;wBvH13N6|W+WcU#2eaecDEnlQ z*6-c-N3WS{>0{<0?=<-6`Q_E?!Mg%NbMqye~Mk=}Taue`BkVW}rzT6uzf*!MoY@GSAHboF+DFKmOo z7+aQ^T*WsV)VqZQ*IHrscVjUNqMTSJHN^de8EL(ncTM)N%jHh%Tn5w_ABG9%W7yAe z%0;(6D0vgP`5AIrN68Dh$jg7H5}MY&@KwQ27=Ktw=>dA((0RqK4$MMBmYCwH@Obmw z5#7+u`xvJvwxCG(FHno+{@k8~W}+m9`$vn^viukja0a-`xo`k-POuh}R2Tt6x5+QL zn^%gOvOwF?r&>faQwxH$GDWl*G0KdZpRRTklf{bd)RdON8GY|iE+Awg7)Mr;1Z2y8!+H!72Pyw=|kyvWQ_8g~OLeB~|{J6b@A(H^kbEV=#29t-8V$%1Jjw-g{D zB<1b=;@Ge-hXq|u>Pd1e@IFcPI8NaEnJgkol*TXA$ryFgY@vw*j{mgS+x+f`@Rfmv z1|R%#yrmG0TD#7oN#^-2vGA`IV@=YAlj{63l*yP<`o*5t+abmJGv!zBFYP4RUf885uviqWu_GJ5qUQqbhvT41=Lo1mZn3+DhqEr&IWYIGL~Yq zv}eUiDp^kgRnlLwl*QY@#@nX7m+c6crcjd`6U}@F;Ks=&@U^ehpit^iwfomT6+S^m zx6JRlc0QRIpvt>o$?KcAQA5jYLpy3})V?RLv@l_UJm$qfaN?@F$u0L54Z7wy2=Vkw zN{JIMPTo7^c_hXW-#h`vN_QW7E+dYDc>I}c3jF+NYG{3~P`BRFrhW(iu;^|x*<)5> zD8ns2_`-&5GEu*5Lz5@94Zunv7`vRh5NqC2_7oXZvDv*RXwgXUAY~*D^*D06k~9h9 zS2b1>pgaTdJnBBS$sU?xoyv?=wXH7 zSGW3O^}g=&H6pG4?0=C+f8k&0HY{d4Ypsl}j&krvO@1CpxOEA_IMX8Q%+p?xd$n-Z zsJmj*XFPCP4@yMOcbs^j>9_QXwNOj1>qX>eWBxUogeTACwjyf)F?e*H^)98Ey!3qM zP=QcX`~KjzoeWI6G`^q$X!Gef=^P|1sD$&({2)4_dcIgvm2teX)eTr|)Dw_a8-;`C zRKSd#fQ3lsOVIWLv|!6C%14U3yFajvOb^DT@!p_u>bfwu6AWZM6G%pxoSzVW2q}c- zvnE@LHWcO(sY`)Yvj)9hoAG&|IH%tu7}2j4SDZhYdT3eJ)Y8smd`(lE2*a3-o1Q3>osL`99EbqR`@q zNAOzYQ9EMcVSIQDxxtBJM>Ukq&Dq029s&lwHF+es2Q_$CtrjS~854Mt1;t+_{RxlT;U;u@XV<}%*%F~S2^aX_b8O^;q zJfw8DqF$q&!*nRfGv($`<+o;JXlr7eN%CfJ9Z`0qJ;D^_jDoZN*YHdrOd!G_2c?iL zsovgszPiK63#QLz)>mjhPiWr7zBW4Y={fexP1?I!yVTNth8VTj+{oqX=}9O{=IGck zsHfR6+S1mJR?7f&ZChqoAMUqfOncZxczCHfJJc}fsuz#gMW~tZTp00ePfOk4l2w9> z2kCDj^57~vl#u{qmy;}`#Yp1pqM zH?3U!^IE=l;3G^J&lx}X7yHeeh>B+(5xk1bKEwb>#iBofuD7H|TK1k_Fj79~iU(3$ z&h9Mr%&GpQ^ntbQz8F)~=OSxVCjYH*9G>O9w7k~RYpw0*l$qM}{akRVw$5^&TCbj% zTQ=UXHpr4kpxxpS^|{?go9AH^Umj=dK5eS<->k+an~M%zn=94)oDj*ekZ7!!G*~PY z{;~UrX2lWu2DU^qTuUO$VwEK8U!M>UAB_r0oe z1)fi9=6Cx@s{7bT+j@G){16px)Nb?SrNYWk{(H1~#o){Yv%xQ}`0jtM5XrF+d4?v z0|cPB`Ve2k0`rS5(O7<8z>{ZvPXf5pQq04R&KXC;7*1QoD{bq-kj0_@oezhu#Ao@w z0BQR6e;a{=z0{qNr|i!%!`hQt5I|rKql+C7$ohrzjC2jegDx#qMq_e!!hihY$0ZaiMarffq9xvn(eKdrmVz3v z=#tLp+P&JUrku9tojEdKI444*5MUI6wDTPO%ij}CBT7-iR}X>|m7 z$^#G}WCTEpstsP~{7?CR5|AGj zbXOaeP{$t9uxBhmaWc7`;ILL5+00`wxvLM|8s*q3RfGsh3RhI*=6$h)X7Vi*RmWcDDCAOnhjy zL@KP>0C7nl2zut|*cz8Q{j6cesZr9I%ICZw!YBpTrgcx(|Gn5c_;Aq$5b3 zolW_WYbT+Xca%b2sid8TiYm%*MO4)1o9C3I*G{7A2TStET6dIie6s%Hq zEjEn*+M_IkRQ+373`b{EDV*Fc=%8(`h`rvd926WBVe&fO%qFFt3oDd|O`aPc43ZW( z`M{!y;=rhqpaUnq$u4^}E_w!eQ^s(0pRo|{bLHtMjVBawu5(^f5`BRY=*?W|*19&E z=nzfXeoOK^(d@FbCT2gi5E}BwTPmA^_Sx{!JHJr6RmT`Lc(_Ja#iQ^dEFq2}zv z#g>ce5(0|!EG(@BJt$XOG@W^d_aYkjXX|M(21==VKg&V8TQds5!W8!nYcHa&M$GkO z#l>N=#`C7|P_VZMA`qnSr!p7{6g?$CNZZdJlt{9hENtYwTR0AIWz=I%%)ado->kDOJuwK8%EXu(>`(`2J!(f z&$P-`=c|u4dU#hPIq-EI9Z9txQ}B_gfP{%G$TyO$&OT^zq-S4KUv0;R4=~_5PI6D< zDLGZa=L>^VQ&CITNK*=jo?RAmmv@2*j&+1Y5n@^uri&S(BkmyIoE0iEQl1WHwO-tq~$26$cmin$l7h`zg`ZZ zC~9XgnM-6i$l>PIDp`LV$cpASX&FA{b_Qt+hLMB62Ow3`A4LE)*ba5VUT#y}^;1tI z@;eHR|B3V99ng4=L*~1z%)Te!x~ahz+6SNXh_LR_cvAgBmWLe+d~aB`%_!icII2$< zb!8RLckzUo9#8`KNnp0m!7^-rG>ZEXsOtl@l%Zh;ZjRH7N2cSvW0;vxM6xo-eT&%@ zkf|dQQmvq+iijO2sNlG^{V&XIlX@@FVreJ;!LA^~x0yyA3!!&yu35eMNkONBr8}FG z6oX)Zbp6!Soxl#6z_;Is4U-Z}m5L^zq3t$NOi+pPZl9Y(AC7HF^M%u z$})1|`j)Z|#o<^iO0}jl91)n( zjs~{;K1apm5JPcD4pea=rN%8hUpGl5k~W|_^%HbYHKt*i0TEr3vWN(-7=3-bA6Eca z@VfdO6r-!Tccwf7-UO~XnbdFh_;j$~2@&e&EV(7*{`}?G; zx@iksXJq4i!{M)>nWGf$aRTOX=xuUf(RP^isO^fSD)#ZcGPx3i$U&H(wFo+|yjJ}` zCX;ol*yv);db5-&*s$`miVRxjeywr$s@!}sPkT~Lw79I0=#`Fh#(PbZg?H=E92Id6g;qnPz;SG z>_uJlq?{ASV=pT~_x9>(SAx4-YP2vFBe|jx$gwhtW;qPGs;ZO%eS2OxGo?A?(~!~a zZY7EKG`Kx(Z(6MAIl$xvg{n~!JVLk|8(gnHrIV9&__rUzZ&b^(vK136YD>W31BLa5 z14XPCq#-$`$B8Pa+!LPju7@9=x(lCmAU7n?*Tas{jngWFhrnOYFXm_cK0Rv%=%K^| zWF-ja?|jG^i@8IZU_RV`z3W~f9=9ORU*qp-tq*Q3Uj%$;vU(7JmIWXneWd z3U698QmafojTteOaETYOFmG%$Xh-|RDEs%;LQkNoW_*&(o_<$9bcf;RlD6MqzrIi( zW56S+f;J_F-_ax90LPl`{8MMiWvG-U)Yb4>7TzYXO$ZYYER0dD+(Df_+*Q!hChdNlfm5+WcTf^~zkhkbV%vbLrak*mr_>zss$~Oc z1Nrb|=iz@q<&=bBB|<7wf&^Hr;-~h9R^J?grt8Lw&gnqcp>cjX5uoQqLDaLo6QOaU zpN)d~-2n{w2C$Goz&)LsamgB?V})3LG*{^tfwX~?g8Vpl7{8wP0A73aY+YmIYh_8D zd9#5ZS5oqc>=4g>M_XlTvOy=@92mf!oJJr`uou>(kt)VR*@;wB|1YJ1Z-ms}#y#JE zlZXlDpCcz4W+4>ju}&+$1aXTb8LVH?X5uv6QX(kJ;@Hs+`0VgJsNlvkNXGFf?+uQT zMw1v#U)Z(YT0mffi`(UIAaDgDblxNeBKj_+B92C4CwWEFPd1463+R3Xyzmp(p6|&4 zRFy@!Ko`h372dq}9nq0e4#n_OBt>PwXnThol=|@~NUeSVyoHLjUyGdzdyn7y9IyNh zUt|GMkBmNwnL)RL!4SgbCwT2~T~ zvSP!)sUkR*zx7T;55R`^@6B+OBzAdYW^B8kLq_ND;ZXyNIN4tiDLAlb!DVdhzp!2~l`ydZF#a8B5BVgTO zdAFb3oW?BT`JA@XxRTPFv2)y`;qCx~O9>B`E(x9=g^-XCAA^C|5E5z>3ZEKcm^grl zj)vWb2!U4(uL=T*1p%=`B(Lo3>|_QZHe$85vdUy-#AF_rsASHP!^NgVK!_)y6AF?J zk|qNib~A=`+AFpSgZu3aVy^I1TcklniXLsl5+{VL*qjo6A3lJR;@M0&Ps3NGMUiF= zK6IMOVoHX8e%2SsX!J^zk}^%uEsB_7Iw9;9QU9LK9k@!M8?DVM%Ovk;--{4rPjw`19KJ;CfPH(6D0bOSrt0=Exf87N*K&0jBis6fIa8 zs`J8)5TFF7i^qAY!;s<|NXgdaNy)ZmGanRg(@ptzIf&hkdpX32{TT}(^j-ERxu+&% zhHp)Ib-;fUgSz{IRV!v(x_ai8LV3tRTW4irA*X}Jv&vCOHo@1HY+BXe$ZnHbc!W4q z5L|3542|PdS$O%QlP63%!S#JUt=iNX#n>-)Lzhi^gP_gfQl2QS4|i0ArH>;fX3Jzl zZo?Fhbn1acnaC{mh%ADy(jvWtWNCYq{27autagnMyf#{{iju6s>8$q6DM176NpuYd zJD!~DvA<0WoH=#w*4BfDHHpF}Fm&ESGEvaiVkn#DUFhhJMTIX>`WQDb6RL!xZ zzuB^WBXBrRR@!xl+TKr2UWrMBq=W|j%jt!Qho|Zx;nAh@)QA&Dcgdnfb);>F9qV{S zc2z_}lq+KqaHUq@+dlTqT3Ie@b-ZtODFnq}5(l zKS0K|y*5@5t5cU(YwcL_eOkeJ#^x7<$6{civi_w|#GRd?Q}2esMXC&lME>_#seG z@ZTf!#jj8BEwB^|mb?U=J9i(bcOCWSo*1jr8!x~+L=!;p$-AydK=6!{Yk`{u6g0Q9 z)2cy600k|UDXRQac#UqcX=%aA6Z|urgLJ=-HIyTVWvn)HnKwN(OttnOaDnIu=gF5! zGg_aKfwmV42rPIoZ32yq`R+PSAX*%#QKHDi^t6;T^g4*59kC6&R-i;rDEJ_@(S5Aa z0;G?}Z}Un=b4HL|&-U1*#%)$4QPZ?{TDT)dI0k>NZM3@uP%?MG#1APS&E0LM%+VVF zAW7J$6DATW9b8rj8NN@{RAO^liP$=o#ehjt*lwYYW&Rr5f}qyZgZc1Szjo9ITx<>1 zR+|uYEen9x8ut`zWjE%*$IyYmd@oUM6{EZtyK7sW;oL?XAAXE_;C%3D259bApExe; z65|F>{F@$U^U31H&e}!HqP-D72iDn!=f+|qqy~#qoZq&@21#=*&3~`ju2&|(4+aM% zF)nRP>qzYme|^W3Ab%=)!u76oH!lDs?uWbMur3|6|4z3=+AlICE@J!BSTqF0OTB%G zEG%2R#e#y{Y!K#nfv7$b9z;>C93yE;8C1=JpY~%?qUibUa8(Z7inl89Z(aC(kF~51 z`!k+0|J-7`mK+9DrHkKkt84NAQsX*_J0OxS4V$4AdCi3sVxBSdlr&#+XPsf-9df$2 zgrBisu(1Rk99cz6CDA#O(b@aF+}^4!al#>*y+zW-a=~&1%c(bTdC67O-UlJ_vJ{g9 zvN+RrhOWXniaI&yotjBO_F)mZRlef00M5RN`>}U*q!&zxq&H*eFC#=(atp+!_thE> zN$}m+xGKjW30bwYiNWe1+n(%d@0`74x9mHgeK7VH~QZL2 zX9v3qyowta^4mXBxn~H-I?ATevE4ikdV9rxc-k;Bi6r|;8HnkeTl zCj|Gw-QC^Y-Q6KTa1HJjc=P@Dt@ZBPQ&Z=R^z`W?y{4TsOsr<{&@6B_GB}Xw&%YfnpN^bgRFN|^?7-H>J$#| z23Eq5AVD#v6t8hN^=dU%H#S_}r+kXib(#5MG9hP?!Zw4mBlXo1h>MqluaifM3TPZ}%{3ccULB}_N4h?^XQ;B)AGW$E> zkfPWF8KE`6_;d>287=()K@LR|@u1lS$sKVnIJ^cW&u)u8-0Xeah)8mLWkGAU0XdpL z>E3228G$gCZXfC`A5MY`X=MzdtT)AdMM3JO>#4oB>TBb>G}!%u@e9@=vT4miH6z>2 zWSTs_()ADl+B%#OSko@*xR?Zg?Z!@onS5Ydh(SNNbMAP|J#q_gy!kP}e!`VVEGREV z9-$WrLSd?qIbXXO>CB;UUnFW-)>Q(7dxHl|_!Ye10Dr-@U$q5*R~qfgd+kR~MhHsF zU?9Jj)e|#66b^Tt)W8_a{mU?1--nlGSK}C?^7PF!?3FKdi~ft{ zXPietoFU5WYo!BSE7tOErf7Yy>*$wA9jOkTDZ9r%ANd9BqER_7$_$Lhnh&eP{#5)% zw@lfs8L;G4q<_3gz2s;y*p5%_F|Hy{y17AUceuFjcv>`_fH~gGaf60~!mXx&4wxyO zQ7X4F_8Yv*SmOZt0b4fkhtU>4$m3*V&7T+>a0x_%b?I2*oJ<_yQ6druJT0s{1%Y!j zvb8xiFLlg!%N#$VC1j_v3=8RYGSY(B-U8n9N2N)#c*TDB%UJ!H3T;rVzd{1V6+)4T zB^5}K7hrO#%mxnpO>N$c6K7RnNT~EEaim~RsuvC&CL}S5^nuk!YUpYbp(20wUMX!} zcksW|UepDgx+D@EKLYF}lU_{+%Tyt?QPXzv3wM$C#1u+^>ZCzvH-=cy_!c4Q>3G0z z%<}Qg)Jtka*dQ+B%^!G_!m?w(Tg3s`Dkp(ykoh~#Tcj6YUa;kHQV^vQkWm4_f5>{+ z*-mR$k`l-Wt;_z3tvYcyL`2I`_Y{PUoL*0(!z|OTp^h*Z?9dTa{5V=zmW65-T)64r zM>IDoIT$z>6)K|2fCn=gkOwbGH{;#HGm9V$1E83qKO0UP^c7(P~gik5hP$^H!r zX9+{Y&%R*=!45-qw|ohwSI8ryO5S*UBBprW>MMl_xgFUC%j zZwstz)2qGmrpTF9Q2jRqc>y$^{mY&WZVp0A8~!ypUT+ko**z)ZW$^Y7B#qN<(4MhU z;PXb&d7THhp+WG#_yGG_v%nGB{zjj*+K?#e`EVl`n4}Ku(znGrD!c-$<0S#Z|P zE=HjM?iQljR;A%X|5ZqtT&{Y_6x+Y?lsLKR2NGP<@~Inx#pqj}vmVD&zMie`6kgutcS2xw?|XRlIT?ps zv{btB{G9eF7Z14Pf=3ErY07^XFV`(T^GTEJBr5hM+iXggkWFJE9IVD-8jIpb4!~%! zts>sSO4gd5LeiVf_#3B}nh4QW$k}Xc%2LWsP_kxF&RW^rb;8^L2yNv82Ap`z;k7Y$ z(9ONmJ5FAUXu<;2B(k)Jc?b$5VhXTV@%}jtC`9WJ7uhV!?4GUEFCL$kFK2WsBrU+< zBoz-5VwWcqDdzoKjpbC_l5T?V&9d9yEKbUB254==vzkL*!tpo%KL~0G)S3dR*C|tx{C0MY zJB+^-21p25@W~BOYrz=Db`4DRTa#eUFz^?!kVcM8OA`H{iDmiNAHUd)0L#9Wl*(^? zBz#>AI4n8Sb;&I~ z1Wvhi#JZvgAnZ(21n|2>6s-0AiGd(8tQ#{+A0Yqrla)2voHnIpX!e9_9*XLogjMB( zWqKC@BOx401h?9vQiUX3wY-d3x3!&(GnhjbhJ)7s-i-WicU~Aci{nNIOAVA|se(<0 zW@m3=XP2#|hcAR`rZri%KW~D!+6{r18F3NI!8lVAbzc~4N+c%Eqb-|eKxFQgx0F%( znR=Y$k{TAcg%MM1?5MW0t%Mx6^Cq+}_$kb@8W@568T)nmw1!LsRrginZ*`7&{e}ws zK@$uXwpM#|R$ri)eu%A8k>$xO+Dm7TE)5t*HH$O1{ru5^@GSTTb5Cx!_) zi0PWL+(w^_Zlll4A(Vs@lrUAXc#_7%5AVN}a0ExIM^B%A+*JFtwk7a8-8B!eA)a`uzX(8VU;kQCFs!Z9GB!=-X6hWl%7QT}k5eL%KT#Y2KNw0i- z`I~7z*vOmu`-$=@WL67rdOb($*5}v504vqu#u+onCGi|n7hb(IU+C`xty2pd1C-ts z+q|IYhyN1*A*5TEQpeP^U3gHJH1hR8b(y(eEwaChFMVew z{=-j=vL##2pzr3C)AQtdl+$p$5+V{FK)UI5QflNzafQM-)FfGRwifaaD%A=N&@Jlz zufVS&&ku@d=4cs8j0z3Ge6>AZOUziPwuztzAu^m z)4m0NO3L@H_pWC*X$hu@&#Rti51&(`+duC+-(IhU7i-&}{~+J_obrEmkvtFd6`iy{ z$AZ4&c;hGY5$ny}KG62l>4DHQ7|`t*{4Bm>@*7=|goGs1V?=+;+jHa}=ojpw-TcHq zu7}pg{(~(%N(1fcd90ozL2d^^pT&0ti;mM3+Ptk z#?i4nkO$~79WgJSatNR32k2if2~h)cgK_?$w+PS&NukcMp{!OW(}U@u4af||5NiL* zoisQrkupNSy&3Bvs^Rcpi_t{9@B>KQ3sv8sxcPMp^7Hc#*;3?6#@RGWi;Ii9lNmw4 zmP>UZ977lD(5unHoYd@SY;43Ruy4_;No~|@)L~4OKXd6Yz>w3fC@d@#E6}LWsDv%4 z)SzoaNO^;AaB{)T4v-U2=|%f@g$^|YYN|&5(u)n zyb%7pThM3J=YPv-NuOK>W2go7X)SWpr>G1%`sR-cJ0S z+x`MIUjt?<+uTiJ^qXvCZ`Zti+I|RW6z0D0y8)I#RqBe3K!OTod<-&bl=p1}CJwfU z2<7jm@Ug$~r93>@NNE`k=>zM=Mh{VTk^?P#E!9fJw-OMbsfhe%p$9;C+dW3)d-}(F z#CyYA`WZBnb5Mm3{#>Jd0se7!dIk$zlYNG^5Bzg*3I=TLz*3Mm66(hOI$my_si>(e ztc(Q7AFW^EL)(sRo7*~1rDlq|?M!4#RGRFWdFc zLAI+9X0XYLi{LEpN%q`2o71eQ!7gGfvk}Ahl{Mr()g=za|CQnaD!$7any!_Zl_1z& zJt4?_7qyARqK({NU8nEbp3T4Z(9_6n)CM_C%c-|(a9OBxYHH@_%zC-B=VU|nzU)Ua zw~7P?iQA9VFlj5L9%OCW0|;h2S{FF=ruuEIZEd+`6r?QIcI~;cN;77dE~TP2*c>wJ z0geYwEChJ7mQ6X+P_>piEmx;Ab=h04Muz9DIezC{ZcJx`Y?7drvZQB+xw<5%xXF=Zxu}o{|Mx8S zV#Ldw);5sMtAOGKK7_wH_8%fe*liu26w<+c(zBoi_nrRY@eMG2 zLZeH<)&vz{Rh|srfokReksq%H1j2wJfN}H>51^)oK||xggoZ_O?Y$N;=ar?bOe0 zi0>+xf4kEEc%UlG=}LJW{2;5o@{CMDm}Id=Cujo>{%+1K_4{8IR-g~f#|9?0T-R*z+(MD=s*Xrt6k3>>%~e6E5cvKhpcb1UG}c{$ln zrqRaZ3#b(BsEIgme0~lI7Y+paHDLdpAafY}P{n|6f~g;^=On8F!gpr2#jrhU5S2=H zE}M-9dvMYJ{kT4y6iZu?8J-YawFv(FUL2EM3Y>oOj~?jyV8%p$5!-QbA52jFXgWI{ zn{o)}6D>$AtJAxQ;w_~PAlMj~5GS7i8<3?X-xW|7#h6Ww(1*c?)aRL~wIM{*s7It% z{!FdOnK`B1F8~HdhNhI%dz!ySl}5MH3X^VB7Y*JvKkAYlT4E#?!hFBB>l3HL<5H`8 z*l#tFM$94Gcds9BuU`~1lE!$nB7WzC(bp6D=e9Y+gtxB-i>2)pBk>R7Y1sqnoS@Q6 zeP{Cd&_Z4|uel)v=JBZ{mGrU1(7}>wQbC-zyA8#^y<66p$`jg-P;e`Z$O4tELy~C>IpUHVqqpb% z)JtG|`Ig&UChL6XzEdRp-8BWwgeX%uqAO`ALGWtZUMYSQ@Kal^y3z93@1>$n$zChv|Yfq&(-sJ>c81cy^ZVGUD0QF15chnrPk6cL}e7d{fT2^k z7;-q}?{&R-{~(HSls~b6ii*fe>PYw22RYiq28lbZ+A0jQBNsONxJISJ9BZFcCi3So zfXGv%6QAM26~%QsHO#{$`~D2sL`}+cMrHse135}anEvPou2JVU+dffvX*;76rm~Uc ziH$XDYkq!3vz3RX*a?}z`|V$1R7(>imCukUTs1CKI=3;c#S2}$(I=Ktmb0?iW8*VR zOnRT*{Gz6>-8fu8Ka$On%V&p}tC>^+iyX`g%T-f<_P(VCyHvh!usGyl|_s=xkk`ZluWX1p&NF@{z z+~Xvfjlzvkcc!HhHveEO`a#h$Q`HZcIx46!Fw)6XGMnn&N>;$d;%CjXcw5KH@X4si zNStnX?m5e)g9FGNXNpt+!{g`pY>ZG&QL%IsBYC(aIAN*uepX7}#p=ZpTUL!}s9dF~ z5X(B*vR)UCq5n9b8CRZAHNpFxG;OtjT#>{G}MwQ7gHX!H}$mOMpkUdUm@dNs#YGF}ZWn$tdDa9=}-y*U2 z%Vx7g84}^+fuH28OEq!v%}?$-2^)c&mH6|ZIuvXDM6=2myJ!1X-@wGeA#FYua>bC= z_9e*#(QKWDU%5~;3J>3pw1?9Wk_%G%o*YTpbtKAzyJsXUiXIJyg2Xqeq&gk*G-TQ zWj$iWRl;#l`mUzbH2LQ0_ICi!sIF_kaY#)FXjF1t&hO-~=wZw|4!4S54|M*0Q_l&6 zpYqpaLW@R^!;HoTJ<*vDkOCX*m!{IJo~GtTC#mF z!>7fu?JM;VPpj0GQ0L%fj(k%ReoaG;MN5|EiQnG$WZ$m@7*tWj%G; zX=2{o@AN0$(*zU;Z zgyk0%)oz*!(CKaN+`6n=xU9y$1yQUOL${vf|A6pL6U}RRhZo;kKshcEttGuD-^FUo zSn3$jrS_pSof$ym7}TqFdda1|HZA?5VcwxJRj64rZ4*{L9psG~>%KdnB0*{YmT&8B zEjD1ENlt0gK-fa|$Z!A=bj5h{(}%Ah0(LTR1YEMIoLuSea*#ho8?grInlZ6NLUK4` zg#12ku%4RfoIEm=o(P^Ojjs)kj{`^IE4es8I^)MqyZ-K$*=m6F3)8}7W?`AHbC`1X z$lnQ>iM`rVHdXVR)9O$4aXtbuwVlbf%6?oc^3C&s+-2&nwP9CreN6KMTN1NBW=kGU z6pVo>PM7Knlv(9JjvTp7+||M1R?k=dIJQAiZf5(5b&bRMQ4b$YPk(pd`d$vn7gJ0W4mi-~tUD&30o&!yl)262_M_+x=4L&B3;XZsmK;)g6 z8J$jCdG%L{7e{)>0u<&xfVsdbtV2n7V}%m4kgo(dazSCb)N2_izhhrK$XISOs#9<% zTAo4#xbRwMkU52T4xg7-5`y)vx}ZCWW_csc9t>JZddCwohSE)g!0z2+sy0w^%WEh zJOdRcJ!cauLt((`^NI8RmGhyer;F{4r|O;M>Kzc)m!FclxTUpDParo}acs zpN9m825&4?fp)O@yuJMi!tm(G(8Sj#2P=ROKm;HLkN`*lWB_ss00%226*Ubl9X$hp z5x@dq1+W3wIXJnvd3Xf`i8%nmqG&i`yy6m)QnGULrwWRQO3G?#>Kd9_+B&*A06l#J zLj!=(cViP{Q!{f5OA9M&8(SMYdk4oKj!sU_NuhvbKnfrgkOoKxWB@V&S%7RlQsVS< z5gmFN5SGDcIIJUO##i|?-O|VF*RklS=tW%0%j?M*6`VZM-tAJG522VCt>c?d8J+Or z$1kB+>Lpn0>$|r(SdF9Gsc6_3;n<_2l{A#q<0YrzI3)sJtTDJbc=PjRW^exg024qH zz!%^U2>Bno&=o6({R>U@Fr$L-o^XiB+11%Ko@lgawmlq zUf*`#Ki-u=Q2GCG2LXNu39h87s;Z`jOrwSZ3yzAWt^w*yO>Oib!Ro}oKJY<7F;a4L z^n~OEw?Tv{a~Jk#w63*{IBp3FVo9KAxMau{t58A!-3r>ZM99!!JSfxvkpp~)-asse zVF^S=q%E`tzKfab7gAo97=97kTl%w_1MyFQc4v>Pos{-(g4O_HdqnRMgLGy~jJ@Yz zJ7!%DRme(<$YRZMeLn@$j-mK`zMMT{h3&9`y0yl8bhoaQihE)M&Us~3eN&T6h|v&0;GjF(?sET;Ialwh)*m0k$lK6(v_`=cEd z3WLP&aBJhA(F_h=lvADxx+7%RAK1o%1S#BKcnJ@Gc9mK_P@qNN#!~-^UKbC@O_I(* zXa!j)K*-dqQLE4}8m@-^`(wM>{EiLfz-*WKh0`aiy8sdm_bWk|q>L4KL=llHUIYwcD2xC&Ljs-2mw{Yl1F@VZA>00s$1OwV9cd zm70xsgX?uM#YmO0a|khZghLbAnH)3i_&M|Eg7P~x0Bm`WlNruDPZUzG&OjQC&cELa z<`ON-3gM}&kY-!EzDZ;4x8^R=Z!*hVjrAUcj5Cj@n0Sl!w#YE&KGyphg|s)VD?2A= z)D(uUs{$*(LkON>Wara*-%Q+Wm4RA>pf|16o%jjm+;KH~&q?(=k17&;p|yEr{?K(t zj;>I$DHX|cH1tdGg-8-z(uVexjJMulXCMXGejHsP=}RcLS@x6nZX5zxd5C}wu#R1e zwGr+W@Nk@*l~TlKXcQywEbg3P#Iwtua|H-6S+nH z&f+}FWvzH3<{deWNZr(QCuUTf%!lovBg$_P{cYYdhR78)UJ2-Zv2nh5xC~Jv!l}5_tT5HcIK_tG1~F2P{q0*(s;UeG zawz#c+GJzlen64Sf7Uf*JjPuoEGG=oT?1S=D2S3`9ato+b+mP)^#FUusmkif|3qk| z?9E3*0Pa63l)3|u3JDJj8@(5pyB9zmIUF7ik%h+~8gn+}4l0(ASPLZu7aepa9P>S$ zw%-Ifo*iHP-(Whpx&o0{{J&%ut9ttXry3J+J0FOD24$g}`k%lDk)A@DMYE3L{ijUu z!u}`!5e$HY97zG@9=CP0z2Deq6tp8}Lh1UEDLB^w4y0)vAPX9lD4MyhYDX`~A@{oL zKOZyDEdkI%mfI8Ed;R*Fy#Mbo!2i30A?8&~$is(m9wJsSn?#Xwg1iV~sXlYdRia6n zFlW02ZT7!y|5N{Wlm8O&+uC!q;%C`pmfB=mDvoQZQ&5afOC?gu{wE;Qr0ak7$^TR% zQjk!&+6`*q_xR>7n0<7JFe$i1DAD#1wEr=dkwKWsP?8V8EdXg_z@bh=Vi{$}V~hX3 zS}n&bigjw3q+J#~xJX6hKmmClRIJhR;ITgeS4eq*>?I22f@jdR$cm9%p6um-!R0q}VdmuX$;e+)wIx&J!%JgL&2C=-F|lzme@F zl2+X?@jVkk7_K^p2~iP-!wm|g$r3xbNx{3JGtC@d-Tz&86+F-cJF(;Up@yv{&ab9Ko82! z2gWuk4&Kzs$6<_FWVD-8*^>(4^g-lq{x5wpy_u^}kWVbBO!)A|B^V)`^zPGXf?Hh* z%|2+9G~ks^H*id;s`LykOvDg`rzB=Vq!8s7C1i?-`9yi5b_)X?*pTio)tmKp$oC5a=xIVQDFQuV7S&9Y{{9Fc z5D52T*2uN{WMW)kk7_|^eo8yrCuR2G=_=z-dp7b7g%1PYQ`*-Z(%?+C$;NI4_$Ti7 zjv9;>m;{&rcg&-wgbNH0=NBw#$B3{Wzl#EDW2$&2mWO+Djv|Io-DZ9=o z(Ai~?Vk|W=$SkR0dtI%wcGJypZNts5?aa-?iEvDk>A$(oWjnvllZ|K+VpjT~52wtk z*coZQ5uDl_ei`i38&~Z+L1>IDg=OlJhxDN8ExOE&OB?Y1w=2&`lTNLK`lsg6q)W>Wt*_W2INq%hNq){@fHH+_!awduqdBl3QO^Ob8j_Y zKf`y-+VgQRny`)4;<4UCU`wt&*D8`iGBptc_1p4~2&T0DAm-KS7Y)J=*q>GEh1e{3 z6MwxKagRV&Ot8zQC2RD)dD=vaJ-7Mqd$B3%`09Q$0S>>F)q)2Smz!8fCsKwYWq~{6 zi^-5xqRXl!yEQgo9gOPX45$)N#Kl`Q8_MU zUbn{@3iO?A9Mj}Opjhb?KMEv<`3yVSuj|2}PllDWwc5Bf(E<_js?v)8u&+3u5ft=U z@2jh97pSOSxv*xgmboc@M?+>xqX15s@HwqlBSiAalNn3`9($CRkyg(pBWoF8%;}L( zRsdCZV2mRI{DvJuXpw0?Zbu#hc-HxyrR5b(eyKNH-Zoq#XK?0mqEb>7upO=Bdhklx zOphZNQCTgJn6*~cuO$Mj&r_yKg?|9gI?}~bv~tI>g4q>Sj4qvx9;m^K0ktbTd2M3| z_!L4Ehi*qMr`fe1@a-+`W^v%#fBL%~PImRn4kw72Ctuglt=3+&7#=Ue3Qti2TqiX1 zXZU|C1H0XZ+4_^TA?p}n_HiIKIm&ZEEvO~Taeh$#IhSj@574sZ)An+MCc==YUGY>2 z$6m=vl1x9HPOWnLl@;=QQqX#Ji6)(hpKq*e{1(r;mpm|z>Psw&O^WNJ@Zp$UYan|% zIxM@z4#~ckAp=Fn`;Lq0zd-K@Z5N`eXV}r=Gzi_I!W>|_kEBR2wIC>2mi$oA~^3V`iL_vJ0 znJ$_FIHe^iUOoa(=B=@2fatnds1jr>BP$raoIRS{JWB;6Md}M=>K!4$Bwk9*^uR@v z4qPO-C4YVwUClQW^{r*&<<3Qt;?HtW;Nr_ZxL^Cg1*VHT9P>|YhL?S^LI!;~I*UX$ z^^hm9W3U@Ag_M%apQ+3%DVh76_J|~RRp*7_r}Bti$*9+G0eJ2!@F_vc9Z0yH7=C+N znnCifr9>!?qTG9;!e`;ad!-4Z?HpV&$}JGYopvDv6|y$VQh#_5YYKRt2gI%?n7;6Z ze_qUP@49GQCvuY13Hvb^h!qcvhG(%(hMb{Q!*zC7)f??=d&5FUW zi07`}Y;Ui6Wm1;4l(QtNgB11) zZ{PdY8Zn5J-5dGGduE>(;Qj~do^tN9pzvJ-_iN6{YrLmd^4ja4V4sk+CV>n6-a}!( zBlX-vs&46+$^kyj3i_Dv*R(XvYQ2y2G%xL$w^%*RIwpA{gsS8|Df(X;{zgFrudp8k z4Ws+YuL#dh7)*!cxoj{$;$gjj{?Y0ONYb~l=%)-tPSb@t8Zue5%UIiwl2Of(pQq~B zx`q7+YKCqyN#z>I1=`Dz^r|$Vd?iE$y3H^ag{sMuLs^w_F}qCJlT|)a-zvU+1_k|G zh(M{P!49I}P36~2Cb-XBx>3VVFS?5$Ob%s>vL}xkCw0-(N>Dw-&X6#gBy&NpnBv!^ zxj#hdps72=NlevrVU!+c%m`@~S&heFLH};TU@)wzg8=D_^f4rxE^B5&=@Sw&PWZHk z?*net&u3stATWeiyX@Q9&(J*t7-nh8+FLb1YU}3c+5dfYS!e*q?V-~BJ!eX83-P~$D&%IHo%DhdnQRb;xadq_EJ{G!Bcy;W_KJKW2 z?E%z@R@J?JpKn4vfyS?|_8qqpI=y6$mya`fn28ntA%vz)2kc5IC~$lz?U zTy+GDf!;xuO54Piv(L6kZAZrBwXwKNcJA7+x18aaQNw8z_n`AWGHOo?$5k0;nrbX| zICartLu3YUOq;Wc?@d=UȆ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 to type DealStateChange struct { ID abi.DealID - From *DealState - To *DealState + From DealState + To DealState } type DealProposalChanges struct { @@ -172,12 +182,36 @@ type ProposalIDState struct { Proposal markettypes.DealProposal } -func EmptyDealState() *DealState { - return &DealState{ - SectorStartEpoch: -1, - SlashEpoch: -1, - LastUpdatedEpoch: -1, + +type emptyDealState struct{} + +func (e *emptyDealState) SectorStartEpoch() abi.ChainEpoch { + return -1 +} + +func (e *emptyDealState) LastUpdatedEpoch() abi.ChainEpoch { + return -1 +} + +func (e *emptyDealState) SlashEpoch() abi.ChainEpoch { + return -1 +} + +func (e *emptyDealState) Equals(other DealState) bool { + if e.SectorStartEpoch() != other.SectorStartEpoch() { + return false } + if e.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if e.SlashEpoch() != other.SlashEpoch() { + return false + } + return true +} + +func EmptyDealState() DealState { + return &emptyDealState{} } // returns the earned fees and pending fees for a given deal @@ -196,8 +230,8 @@ func GetDealFees(deal markettypes.DealProposal, height abi.ChainEpoch) (abi.Toke return ef, big.Sub(tf, ef) } -func IsDealActive(state markettypes.DealState) bool { - return state.SectorStartEpoch > -1 && state.SlashEpoch == -1 +func IsDealActive(state DealState) bool { + return state.SectorStartEpoch() > -1 && state.SlashEpoch() == -1 } func labelFromGoString(s string) (markettypes.DealLabel, error) { diff --git a/chain/actors/builtin/market/diff.go b/chain/actors/builtin/market/diff.go index ef3c2c28d7c..292299790e3 100644 --- a/chain/actors/builtin/market/diff.go +++ b/chain/actors/builtin/market/diff.go @@ -64,7 +64,7 @@ func (d *marketStatesDiffer) Add(key uint64, val *cbg.Deferred) error { if err != nil { return err } - d.Results.Added = append(d.Results.Added, DealIDState{abi.DealID(key), *ds}) + d.Results.Added = append(d.Results.Added, DealIDState{abi.DealID(key), ds}) return nil } @@ -77,7 +77,7 @@ func (d *marketStatesDiffer) Modify(key uint64, from, to *cbg.Deferred) error { if err != nil { return err } - if *dsFrom != *dsTo { + if !dsFrom.Equals(dsTo) { d.Results.Modified = append(d.Results.Modified, DealStateChange{abi.DealID(key), dsFrom, dsTo}) } return nil @@ -88,6 +88,6 @@ func (d *marketStatesDiffer) Remove(key uint64, val *cbg.Deferred) error { if err != nil { return err } - d.Results.Removed = append(d.Results.Removed, DealIDState{abi.DealID(key), *ds}) + d.Results.Removed = append(d.Results.Removed, DealIDState{abi.DealID(key), ds}) return nil } diff --git a/chain/actors/builtin/market/market.go b/chain/actors/builtin/market/market.go index 39473d56062..13c09f91bcf 100644 --- a/chain/actors/builtin/market/market.go +++ b/chain/actors/builtin/market/market.go @@ -58,6 +58,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -128,6 +131,9 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { case actorstypes.Version12: return make12(store) + case actorstypes.Version13: + return make13(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -162,10 +168,10 @@ type BalanceTable interface { type DealStates interface { ForEach(cb func(id abi.DealID, ds DealState) error) error - Get(id abi.DealID) (*DealState, bool, error) + Get(id abi.DealID) (DealState, bool, error) array() adt.Array - decode(*cbg.Deferred) (*DealState, error) + decode(*cbg.Deferred) (DealState, error) } type DealProposals interface { @@ -226,6 +232,9 @@ func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStora case actorstypes.Version12: return decodePublishStorageDealsReturn12(b) + case actorstypes.Version13: + return decodePublishStorageDealsReturn13(b) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -233,7 +242,17 @@ func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStora type DealProposal = markettypes.DealProposal type DealLabel = markettypes.DealLabel -type DealState = markettypes.DealState +type DealState interface { + SectorStartEpoch() abi.ChainEpoch // -1 if not yet included in proven sector + LastUpdatedEpoch() abi.ChainEpoch // -1 if deal state never updated + SlashEpoch() abi.ChainEpoch // -1 if deal never slashed + + Equals(other DealState) bool +} + +func DealStatesEqual(a, b DealState) bool { + return DealStatesEqual(a, b) +} type DealStateChanges struct { Added []DealIDState @@ -249,8 +268,8 @@ type DealIDState struct { // DealStateChange is a change in deal state from -> to type DealStateChange struct { ID abi.DealID - From *DealState - To *DealState + From DealState + To DealState } type DealProposalChanges struct { @@ -263,12 +282,35 @@ type ProposalIDState struct { Proposal markettypes.DealProposal } -func EmptyDealState() *DealState { - return &DealState{ - SectorStartEpoch: -1, - SlashEpoch: -1, - LastUpdatedEpoch: -1, +type emptyDealState struct{} + +func (e *emptyDealState) SectorStartEpoch() abi.ChainEpoch { + return -1 +} + +func (e *emptyDealState) LastUpdatedEpoch() abi.ChainEpoch { + return -1 +} + +func (e *emptyDealState) SlashEpoch() abi.ChainEpoch { + return -1 +} + +func (e *emptyDealState) Equals(other DealState) bool { + if e.SectorStartEpoch() != other.SectorStartEpoch() { + return false } + if e.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if e.SlashEpoch() != other.SlashEpoch() { + return false + } + return true +} + +func EmptyDealState() DealState { + return &emptyDealState{} } // returns the earned fees and pending fees for a given deal @@ -287,8 +329,8 @@ func GetDealFees(deal markettypes.DealProposal, height abi.ChainEpoch) (abi.Toke return ef, big.Sub(tf, ef) } -func IsDealActive(state markettypes.DealState) bool { - return state.SectorStartEpoch > -1 && state.SlashEpoch == -1 +func IsDealActive(state DealState) bool { + return state.SectorStartEpoch() > -1 && state.SlashEpoch() == -1 } func labelFromGoString(s string) (markettypes.DealLabel, error) { @@ -313,5 +355,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/market/state.go.template b/chain/actors/builtin/market/state.go.template index 1eab9d74335..4670576602d 100644 --- a/chain/actors/builtin/market/state.go.template +++ b/chain/actors/builtin/market/state.go.template @@ -175,7 +175,7 @@ type dealStates{{.v}} struct { adt.Array } -func (s *dealStates{{.v}}) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates{{.v}}) Get(dealID abi.DealID) (DealState, bool, error) { var deal{{.v}} market{{.v}}.DealState found, err := s.Array.Get(uint64(dealID), &deal{{.v}}) if err != nil { @@ -185,7 +185,7 @@ func (s *dealStates{{.v}}) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV{{.v}}DealState(deal{{.v}}) - return &deal, true, nil + return deal, true, nil } func (s *dealStates{{.v}}) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -195,31 +195,57 @@ func (s *dealStates{{.v}}) ForEach(cb func(dealID abi.DealID, ds DealState) erro }) } -func (s *dealStates{{.v}}) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates{{.v}}) decode(val *cbg.Deferred) (DealState, error) { var ds{{.v}} market{{.v}}.DealState if err := ds{{.v}}.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV{{.v}}DealState(ds{{.v}}) - return &ds, nil + return ds, nil } func (s *dealStates{{.v}}) array() adt.Array { return s.Array } -func fromV{{.v}}DealState(v{{.v}} market{{.v}}.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v{{.v}}.SectorStartEpoch, - LastUpdatedEpoch: v{{.v}}.LastUpdatedEpoch, - SlashEpoch: v{{.v}}.SlashEpoch, - VerifiedClaim: 0, - } - {{if (ge .v 9)}} - ret.VerifiedClaim = verifregtypes.AllocationId(v{{.v}}.VerifiedClaim) - {{end}} +type dealStateV{{.v}} struct { + ds{{.v}} market{{.v}}.DealState +} + +func (d dealStateV{{.v}}) SectorStartEpoch() abi.ChainEpoch { + return d.ds{{.v}}.SectorStartEpoch +} + +func (d dealStateV{{.v}}) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds{{.v}}.LastUpdatedEpoch +} + +func (d dealStateV{{.v}}) SlashEpoch() abi.ChainEpoch { + return d.ds{{.v}}.SlashEpoch +} - return ret +func (d dealStateV{{.v}}) Equals(other DealState) bool { + if ov{{.v}}, ok := other.(dealStateV{{.v}}); ok { + return d.ds{{.v}} == ov{{.v}}.ds{{.v}} + } + + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV{{.v}})(nil) + +func fromV{{.v}}DealState(v{{.v}} market{{.v}}.DealState) DealState { + return dealStateV{{.v}}{v{{.v}}} } type dealProposals{{.v}} struct { diff --git a/chain/actors/builtin/market/v0.go b/chain/actors/builtin/market/v0.go index ca6970dfaa1..d797d53f8c6 100644 --- a/chain/actors/builtin/market/v0.go +++ b/chain/actors/builtin/market/v0.go @@ -154,7 +154,7 @@ type dealStates0 struct { adt.Array } -func (s *dealStates0) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates0) Get(dealID abi.DealID) (DealState, bool, error) { var deal0 market0.DealState found, err := s.Array.Get(uint64(dealID), &deal0) if err != nil { @@ -164,7 +164,7 @@ func (s *dealStates0) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV0DealState(deal0) - return &deal, true, nil + return deal, true, nil } func (s *dealStates0) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -174,28 +174,57 @@ func (s *dealStates0) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates0) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates0) decode(val *cbg.Deferred) (DealState, error) { var ds0 market0.DealState if err := ds0.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV0DealState(ds0) - return &ds, nil + return ds, nil } func (s *dealStates0) array() adt.Array { return s.Array } -func fromV0DealState(v0 market0.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v0.SectorStartEpoch, - LastUpdatedEpoch: v0.LastUpdatedEpoch, - SlashEpoch: v0.SlashEpoch, - VerifiedClaim: 0, +type dealStateV0 struct { + ds0 market0.DealState +} + +func (d dealStateV0) SectorStartEpoch() abi.ChainEpoch { + return d.ds0.SectorStartEpoch +} + +func (d dealStateV0) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds0.LastUpdatedEpoch +} + +func (d dealStateV0) SlashEpoch() abi.ChainEpoch { + return d.ds0.SlashEpoch +} + +func (d dealStateV0) Equals(other DealState) bool { + if ov0, ok := other.(dealStateV0); ok { + return d.ds0 == ov0.ds0 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV0)(nil) + +func fromV0DealState(v0 market0.DealState) DealState { + return dealStateV0{v0} } type dealProposals0 struct { diff --git a/chain/actors/builtin/market/v10.go b/chain/actors/builtin/market/v10.go index 878f0d46584..290c17d092f 100644 --- a/chain/actors/builtin/market/v10.go +++ b/chain/actors/builtin/market/v10.go @@ -153,7 +153,7 @@ type dealStates10 struct { adt.Array } -func (s *dealStates10) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates10) Get(dealID abi.DealID) (DealState, bool, error) { var deal10 market10.DealState found, err := s.Array.Get(uint64(dealID), &deal10) if err != nil { @@ -163,7 +163,7 @@ func (s *dealStates10) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV10DealState(deal10) - return &deal, true, nil + return deal, true, nil } func (s *dealStates10) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -173,30 +173,57 @@ func (s *dealStates10) ForEach(cb func(dealID abi.DealID, ds DealState) error) e }) } -func (s *dealStates10) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates10) decode(val *cbg.Deferred) (DealState, error) { var ds10 market10.DealState if err := ds10.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV10DealState(ds10) - return &ds, nil + return ds, nil } func (s *dealStates10) array() adt.Array { return s.Array } -func fromV10DealState(v10 market10.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v10.SectorStartEpoch, - LastUpdatedEpoch: v10.LastUpdatedEpoch, - SlashEpoch: v10.SlashEpoch, - VerifiedClaim: 0, +type dealStateV10 struct { + ds10 market10.DealState +} + +func (d dealStateV10) SectorStartEpoch() abi.ChainEpoch { + return d.ds10.SectorStartEpoch +} + +func (d dealStateV10) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds10.LastUpdatedEpoch +} + +func (d dealStateV10) SlashEpoch() abi.ChainEpoch { + return d.ds10.SlashEpoch +} + +func (d dealStateV10) Equals(other DealState) bool { + if ov10, ok := other.(dealStateV10); ok { + return d.ds10 == ov10.ds10 + } + + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} - ret.VerifiedClaim = verifregtypes.AllocationId(v10.VerifiedClaim) +var _ DealState = (*dealStateV10)(nil) - return ret +func fromV10DealState(v10 market10.DealState) DealState { + return dealStateV10{v10} } type dealProposals10 struct { diff --git a/chain/actors/builtin/market/v11.go b/chain/actors/builtin/market/v11.go index a6427220972..56a4c6038de 100644 --- a/chain/actors/builtin/market/v11.go +++ b/chain/actors/builtin/market/v11.go @@ -153,7 +153,7 @@ type dealStates11 struct { adt.Array } -func (s *dealStates11) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates11) Get(dealID abi.DealID) (DealState, bool, error) { var deal11 market11.DealState found, err := s.Array.Get(uint64(dealID), &deal11) if err != nil { @@ -163,7 +163,7 @@ func (s *dealStates11) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV11DealState(deal11) - return &deal, true, nil + return deal, true, nil } func (s *dealStates11) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -173,30 +173,57 @@ func (s *dealStates11) ForEach(cb func(dealID abi.DealID, ds DealState) error) e }) } -func (s *dealStates11) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates11) decode(val *cbg.Deferred) (DealState, error) { var ds11 market11.DealState if err := ds11.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV11DealState(ds11) - return &ds, nil + return ds, nil } func (s *dealStates11) array() adt.Array { return s.Array } -func fromV11DealState(v11 market11.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v11.SectorStartEpoch, - LastUpdatedEpoch: v11.LastUpdatedEpoch, - SlashEpoch: v11.SlashEpoch, - VerifiedClaim: 0, +type dealStateV11 struct { + ds11 market11.DealState +} + +func (d dealStateV11) SectorStartEpoch() abi.ChainEpoch { + return d.ds11.SectorStartEpoch +} + +func (d dealStateV11) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds11.LastUpdatedEpoch +} + +func (d dealStateV11) SlashEpoch() abi.ChainEpoch { + return d.ds11.SlashEpoch +} + +func (d dealStateV11) Equals(other DealState) bool { + if ov11, ok := other.(dealStateV11); ok { + return d.ds11 == ov11.ds11 + } + + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} - ret.VerifiedClaim = verifregtypes.AllocationId(v11.VerifiedClaim) +var _ DealState = (*dealStateV11)(nil) - return ret +func fromV11DealState(v11 market11.DealState) DealState { + return dealStateV11{v11} } type dealProposals11 struct { diff --git a/chain/actors/builtin/market/v12.go b/chain/actors/builtin/market/v12.go index 56e651a9be5..cf7687203f9 100644 --- a/chain/actors/builtin/market/v12.go +++ b/chain/actors/builtin/market/v12.go @@ -153,7 +153,7 @@ type dealStates12 struct { adt.Array } -func (s *dealStates12) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates12) Get(dealID abi.DealID) (DealState, bool, error) { var deal12 market12.DealState found, err := s.Array.Get(uint64(dealID), &deal12) if err != nil { @@ -163,7 +163,7 @@ func (s *dealStates12) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV12DealState(deal12) - return &deal, true, nil + return deal, true, nil } func (s *dealStates12) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -173,30 +173,57 @@ func (s *dealStates12) ForEach(cb func(dealID abi.DealID, ds DealState) error) e }) } -func (s *dealStates12) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates12) decode(val *cbg.Deferred) (DealState, error) { var ds12 market12.DealState if err := ds12.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV12DealState(ds12) - return &ds, nil + return ds, nil } func (s *dealStates12) array() adt.Array { return s.Array } -func fromV12DealState(v12 market12.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v12.SectorStartEpoch, - LastUpdatedEpoch: v12.LastUpdatedEpoch, - SlashEpoch: v12.SlashEpoch, - VerifiedClaim: 0, +type dealStateV12 struct { + ds12 market12.DealState +} + +func (d dealStateV12) SectorStartEpoch() abi.ChainEpoch { + return d.ds12.SectorStartEpoch +} + +func (d dealStateV12) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds12.LastUpdatedEpoch +} + +func (d dealStateV12) SlashEpoch() abi.ChainEpoch { + return d.ds12.SlashEpoch +} + +func (d dealStateV12) Equals(other DealState) bool { + if ov12, ok := other.(dealStateV12); ok { + return d.ds12 == ov12.ds12 + } + + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} - ret.VerifiedClaim = verifregtypes.AllocationId(v12.VerifiedClaim) +var _ DealState = (*dealStateV12)(nil) - return ret +func fromV12DealState(v12 market12.DealState) DealState { + return dealStateV12{v12} } type dealProposals12 struct { diff --git a/chain/actors/builtin/market/v13.go b/chain/actors/builtin/market/v13.go new file mode 100644 index 00000000000..d270319ce6f --- /dev/null +++ b/chain/actors/builtin/market/v13.go @@ -0,0 +1,404 @@ +package market + +import ( + "bytes" + "fmt" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rlepluslazy "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/filecoin-project/go-state-types/builtin" + market13 "github.com/filecoin-project/go-state-types/builtin/v13/market" + adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt" + markettypes "github.com/filecoin-project/go-state-types/builtin/v9/market" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" + verifregtypes "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" + "github.com/filecoin-project/lotus/chain/types" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store) (State, error) { + out := state13{store: store} + + s, err := market13.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state13 struct { + market13.State + store adt.Store +} + +func (s *state13) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state13) BalancesChanged(otherState State) (bool, error) { + otherState13, ok := otherState.(*state13) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState13.State.EscrowTable) || !s.State.LockedTable.Equals(otherState13.State.LockedTable), nil +} + +func (s *state13) StatesChanged(otherState State) (bool, error) { + otherState13, ok := otherState.(*state13) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState13.State.States), nil +} + +func (s *state13) States() (DealStates, error) { + stateArray, err := adt13.AsArray(s.store, s.State.States, market13.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates13{stateArray}, nil +} + +func (s *state13) ProposalsChanged(otherState State) (bool, error) { + otherState13, ok := otherState.(*state13) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState13.State.Proposals), nil +} + +func (s *state13) Proposals() (DealProposals, error) { + proposalArray, err := adt13.AsArray(s.store, s.State.Proposals, market13.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals13{proposalArray}, nil +} + +func (s *state13) EscrowTable() (BalanceTable, error) { + bt, err := adt13.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable13{bt}, nil +} + +func (s *state13) LockedTable() (BalanceTable, error) { + bt, err := adt13.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable13{bt}, nil +} + +func (s *state13) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market13.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state13) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable13 struct { + *adt13.BalanceTable +} + +func (bt *balanceTable13) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt13.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates13 struct { + adt.Array +} + +func (s *dealStates13) Get(dealID abi.DealID) (DealState, bool, error) { + var deal13 market13.DealState + found, err := s.Array.Get(uint64(dealID), &deal13) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV13DealState(deal13) + return deal, true, nil +} + +func (s *dealStates13) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds13 market13.DealState + return s.Array.ForEach(&ds13, func(idx int64) error { + return cb(abi.DealID(idx), fromV13DealState(ds13)) + }) +} + +func (s *dealStates13) decode(val *cbg.Deferred) (DealState, error) { + var ds13 market13.DealState + if err := ds13.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV13DealState(ds13) + return ds, nil +} + +func (s *dealStates13) array() adt.Array { + return s.Array +} + +type dealStateV13 struct { + ds13 market13.DealState +} + +func (d dealStateV13) SectorStartEpoch() abi.ChainEpoch { + return d.ds13.SectorStartEpoch +} + +func (d dealStateV13) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds13.LastUpdatedEpoch +} + +func (d dealStateV13) SlashEpoch() abi.ChainEpoch { + return d.ds13.SlashEpoch +} + +func (d dealStateV13) Equals(other DealState) bool { + if ov13, ok := other.(dealStateV13); ok { + return d.ds13 == ov13.ds13 + } + + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV13)(nil) + +func fromV13DealState(v13 market13.DealState) DealState { + return dealStateV13{v13} +} + +type dealProposals13 struct { + adt.Array +} + +func (s *dealProposals13) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal13 market13.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal13) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + + proposal, err := fromV13DealProposal(proposal13) + if err != nil { + return nil, true, xerrors.Errorf("decoding proposal: %w", err) + } + + return &proposal, true, nil +} + +func (s *dealProposals13) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp13 market13.DealProposal + return s.Array.ForEach(&dp13, func(idx int64) error { + dp, err := fromV13DealProposal(dp13) + if err != nil { + return xerrors.Errorf("decoding proposal: %w", err) + } + + return cb(abi.DealID(idx), dp) + }) +} + +func (s *dealProposals13) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp13 market13.DealProposal + if err := dp13.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + + dp, err := fromV13DealProposal(dp13) + if err != nil { + return nil, err + } + + return &dp, nil +} + +func (s *dealProposals13) array() adt.Array { + return s.Array +} + +func fromV13DealProposal(v13 market13.DealProposal) (DealProposal, error) { + + label, err := fromV13Label(v13.Label) + + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } + + return DealProposal{ + PieceCID: v13.PieceCID, + PieceSize: v13.PieceSize, + VerifiedDeal: v13.VerifiedDeal, + Client: v13.Client, + Provider: v13.Provider, + + Label: label, + + StartEpoch: v13.StartEpoch, + EndEpoch: v13.EndEpoch, + StoragePricePerEpoch: v13.StoragePricePerEpoch, + + ProviderCollateral: v13.ProviderCollateral, + ClientCollateral: v13.ClientCollateral, + }, nil +} + +func fromV13Label(v13 market13.DealLabel) (DealLabel, error) { + if v13.IsString() { + str, err := v13.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v13.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn13)(nil) + +func decodePublishStorageDealsReturn13(b []byte) (PublishStorageDealsReturn, error) { + var retval market13.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn13{retval}, nil +} + +type publishStorageDealsReturn13 struct { + market13.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn13) IsDealValid(index uint64) (bool, int, error) { + + set, err := r.ValidDeals.IsSet(index) + if err != nil || !set { + return false, -1, err + } + maskBf, err := bitfield.NewFromIter(&rlepluslazy.RunSliceIterator{ + Runs: []rlepluslazy.Run{rlepluslazy.Run{Val: true, Len: index}}}) + if err != nil { + return false, -1, err + } + before, err := bitfield.IntersectBitField(maskBf, r.ValidDeals) + if err != nil { + return false, -1, err + } + outIdx, err := before.Count() + if err != nil { + return false, -1, err + } + return set, int(outIdx), nil + +} + +func (r *publishStorageDealsReturn13) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} + +func (s *state13) GetAllocationIdForPendingDeal(dealId abi.DealID) (verifregtypes.AllocationId, error) { + + allocations, err := adt13.AsMap(s.store, s.PendingDealAllocationIds, builtin.DefaultHamtBitwidth) + if err != nil { + return verifregtypes.NoAllocationID, xerrors.Errorf("failed to load allocation id for %d: %w", dealId, err) + } + + var allocationId cbg.CborInt + found, err := allocations.Get(abi.UIntKey(uint64(dealId)), &allocationId) + if err != nil { + return verifregtypes.NoAllocationID, xerrors.Errorf("failed to load allocation id for %d: %w", dealId, err) + } + if !found { + return verifregtypes.NoAllocationID, nil + } + + return verifregtypes.AllocationId(allocationId), nil + +} + +func (s *state13) ActorKey() string { + return manifest.MarketKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/market/v2.go b/chain/actors/builtin/market/v2.go index ba84e3b03a0..5ced3c8a337 100644 --- a/chain/actors/builtin/market/v2.go +++ b/chain/actors/builtin/market/v2.go @@ -154,7 +154,7 @@ type dealStates2 struct { adt.Array } -func (s *dealStates2) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates2) Get(dealID abi.DealID) (DealState, bool, error) { var deal2 market2.DealState found, err := s.Array.Get(uint64(dealID), &deal2) if err != nil { @@ -164,7 +164,7 @@ func (s *dealStates2) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV2DealState(deal2) - return &deal, true, nil + return deal, true, nil } func (s *dealStates2) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -174,28 +174,57 @@ func (s *dealStates2) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates2) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates2) decode(val *cbg.Deferred) (DealState, error) { var ds2 market2.DealState if err := ds2.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV2DealState(ds2) - return &ds, nil + return ds, nil } func (s *dealStates2) array() adt.Array { return s.Array } -func fromV2DealState(v2 market2.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v2.SectorStartEpoch, - LastUpdatedEpoch: v2.LastUpdatedEpoch, - SlashEpoch: v2.SlashEpoch, - VerifiedClaim: 0, +type dealStateV2 struct { + ds2 market2.DealState +} + +func (d dealStateV2) SectorStartEpoch() abi.ChainEpoch { + return d.ds2.SectorStartEpoch +} + +func (d dealStateV2) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds2.LastUpdatedEpoch +} + +func (d dealStateV2) SlashEpoch() abi.ChainEpoch { + return d.ds2.SlashEpoch +} + +func (d dealStateV2) Equals(other DealState) bool { + if ov2, ok := other.(dealStateV2); ok { + return d.ds2 == ov2.ds2 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV2)(nil) + +func fromV2DealState(v2 market2.DealState) DealState { + return dealStateV2{v2} } type dealProposals2 struct { diff --git a/chain/actors/builtin/market/v3.go b/chain/actors/builtin/market/v3.go index f6a0891e730..35dd9c29a55 100644 --- a/chain/actors/builtin/market/v3.go +++ b/chain/actors/builtin/market/v3.go @@ -149,7 +149,7 @@ type dealStates3 struct { adt.Array } -func (s *dealStates3) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates3) Get(dealID abi.DealID) (DealState, bool, error) { var deal3 market3.DealState found, err := s.Array.Get(uint64(dealID), &deal3) if err != nil { @@ -159,7 +159,7 @@ func (s *dealStates3) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV3DealState(deal3) - return &deal, true, nil + return deal, true, nil } func (s *dealStates3) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -169,28 +169,57 @@ func (s *dealStates3) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates3) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates3) decode(val *cbg.Deferred) (DealState, error) { var ds3 market3.DealState if err := ds3.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV3DealState(ds3) - return &ds, nil + return ds, nil } func (s *dealStates3) array() adt.Array { return s.Array } -func fromV3DealState(v3 market3.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v3.SectorStartEpoch, - LastUpdatedEpoch: v3.LastUpdatedEpoch, - SlashEpoch: v3.SlashEpoch, - VerifiedClaim: 0, +type dealStateV3 struct { + ds3 market3.DealState +} + +func (d dealStateV3) SectorStartEpoch() abi.ChainEpoch { + return d.ds3.SectorStartEpoch +} + +func (d dealStateV3) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds3.LastUpdatedEpoch +} + +func (d dealStateV3) SlashEpoch() abi.ChainEpoch { + return d.ds3.SlashEpoch +} + +func (d dealStateV3) Equals(other DealState) bool { + if ov3, ok := other.(dealStateV3); ok { + return d.ds3 == ov3.ds3 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV3)(nil) + +func fromV3DealState(v3 market3.DealState) DealState { + return dealStateV3{v3} } type dealProposals3 struct { diff --git a/chain/actors/builtin/market/v4.go b/chain/actors/builtin/market/v4.go index 629e833b67b..bc9e61c8888 100644 --- a/chain/actors/builtin/market/v4.go +++ b/chain/actors/builtin/market/v4.go @@ -149,7 +149,7 @@ type dealStates4 struct { adt.Array } -func (s *dealStates4) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates4) Get(dealID abi.DealID) (DealState, bool, error) { var deal4 market4.DealState found, err := s.Array.Get(uint64(dealID), &deal4) if err != nil { @@ -159,7 +159,7 @@ func (s *dealStates4) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV4DealState(deal4) - return &deal, true, nil + return deal, true, nil } func (s *dealStates4) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -169,28 +169,57 @@ func (s *dealStates4) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates4) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates4) decode(val *cbg.Deferred) (DealState, error) { var ds4 market4.DealState if err := ds4.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV4DealState(ds4) - return &ds, nil + return ds, nil } func (s *dealStates4) array() adt.Array { return s.Array } -func fromV4DealState(v4 market4.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v4.SectorStartEpoch, - LastUpdatedEpoch: v4.LastUpdatedEpoch, - SlashEpoch: v4.SlashEpoch, - VerifiedClaim: 0, +type dealStateV4 struct { + ds4 market4.DealState +} + +func (d dealStateV4) SectorStartEpoch() abi.ChainEpoch { + return d.ds4.SectorStartEpoch +} + +func (d dealStateV4) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds4.LastUpdatedEpoch +} + +func (d dealStateV4) SlashEpoch() abi.ChainEpoch { + return d.ds4.SlashEpoch +} + +func (d dealStateV4) Equals(other DealState) bool { + if ov4, ok := other.(dealStateV4); ok { + return d.ds4 == ov4.ds4 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV4)(nil) + +func fromV4DealState(v4 market4.DealState) DealState { + return dealStateV4{v4} } type dealProposals4 struct { diff --git a/chain/actors/builtin/market/v5.go b/chain/actors/builtin/market/v5.go index 8925889791f..63743ba8d10 100644 --- a/chain/actors/builtin/market/v5.go +++ b/chain/actors/builtin/market/v5.go @@ -149,7 +149,7 @@ type dealStates5 struct { adt.Array } -func (s *dealStates5) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates5) Get(dealID abi.DealID) (DealState, bool, error) { var deal5 market5.DealState found, err := s.Array.Get(uint64(dealID), &deal5) if err != nil { @@ -159,7 +159,7 @@ func (s *dealStates5) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV5DealState(deal5) - return &deal, true, nil + return deal, true, nil } func (s *dealStates5) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -169,28 +169,57 @@ func (s *dealStates5) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates5) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates5) decode(val *cbg.Deferred) (DealState, error) { var ds5 market5.DealState if err := ds5.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV5DealState(ds5) - return &ds, nil + return ds, nil } func (s *dealStates5) array() adt.Array { return s.Array } -func fromV5DealState(v5 market5.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v5.SectorStartEpoch, - LastUpdatedEpoch: v5.LastUpdatedEpoch, - SlashEpoch: v5.SlashEpoch, - VerifiedClaim: 0, +type dealStateV5 struct { + ds5 market5.DealState +} + +func (d dealStateV5) SectorStartEpoch() abi.ChainEpoch { + return d.ds5.SectorStartEpoch +} + +func (d dealStateV5) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds5.LastUpdatedEpoch +} + +func (d dealStateV5) SlashEpoch() abi.ChainEpoch { + return d.ds5.SlashEpoch +} + +func (d dealStateV5) Equals(other DealState) bool { + if ov5, ok := other.(dealStateV5); ok { + return d.ds5 == ov5.ds5 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV5)(nil) + +func fromV5DealState(v5 market5.DealState) DealState { + return dealStateV5{v5} } type dealProposals5 struct { diff --git a/chain/actors/builtin/market/v6.go b/chain/actors/builtin/market/v6.go index b57d49f9117..5900eace953 100644 --- a/chain/actors/builtin/market/v6.go +++ b/chain/actors/builtin/market/v6.go @@ -151,7 +151,7 @@ type dealStates6 struct { adt.Array } -func (s *dealStates6) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates6) Get(dealID abi.DealID) (DealState, bool, error) { var deal6 market6.DealState found, err := s.Array.Get(uint64(dealID), &deal6) if err != nil { @@ -161,7 +161,7 @@ func (s *dealStates6) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV6DealState(deal6) - return &deal, true, nil + return deal, true, nil } func (s *dealStates6) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -171,28 +171,57 @@ func (s *dealStates6) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates6) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates6) decode(val *cbg.Deferred) (DealState, error) { var ds6 market6.DealState if err := ds6.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV6DealState(ds6) - return &ds, nil + return ds, nil } func (s *dealStates6) array() adt.Array { return s.Array } -func fromV6DealState(v6 market6.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v6.SectorStartEpoch, - LastUpdatedEpoch: v6.LastUpdatedEpoch, - SlashEpoch: v6.SlashEpoch, - VerifiedClaim: 0, +type dealStateV6 struct { + ds6 market6.DealState +} + +func (d dealStateV6) SectorStartEpoch() abi.ChainEpoch { + return d.ds6.SectorStartEpoch +} + +func (d dealStateV6) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds6.LastUpdatedEpoch +} + +func (d dealStateV6) SlashEpoch() abi.ChainEpoch { + return d.ds6.SlashEpoch +} + +func (d dealStateV6) Equals(other DealState) bool { + if ov6, ok := other.(dealStateV6); ok { + return d.ds6 == ov6.ds6 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV6)(nil) + +func fromV6DealState(v6 market6.DealState) DealState { + return dealStateV6{v6} } type dealProposals6 struct { diff --git a/chain/actors/builtin/market/v7.go b/chain/actors/builtin/market/v7.go index 56a1db328f9..f51f070c7f2 100644 --- a/chain/actors/builtin/market/v7.go +++ b/chain/actors/builtin/market/v7.go @@ -151,7 +151,7 @@ type dealStates7 struct { adt.Array } -func (s *dealStates7) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates7) Get(dealID abi.DealID) (DealState, bool, error) { var deal7 market7.DealState found, err := s.Array.Get(uint64(dealID), &deal7) if err != nil { @@ -161,7 +161,7 @@ func (s *dealStates7) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV7DealState(deal7) - return &deal, true, nil + return deal, true, nil } func (s *dealStates7) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -171,28 +171,57 @@ func (s *dealStates7) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates7) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates7) decode(val *cbg.Deferred) (DealState, error) { var ds7 market7.DealState if err := ds7.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV7DealState(ds7) - return &ds, nil + return ds, nil } func (s *dealStates7) array() adt.Array { return s.Array } -func fromV7DealState(v7 market7.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v7.SectorStartEpoch, - LastUpdatedEpoch: v7.LastUpdatedEpoch, - SlashEpoch: v7.SlashEpoch, - VerifiedClaim: 0, +type dealStateV7 struct { + ds7 market7.DealState +} + +func (d dealStateV7) SectorStartEpoch() abi.ChainEpoch { + return d.ds7.SectorStartEpoch +} + +func (d dealStateV7) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds7.LastUpdatedEpoch +} + +func (d dealStateV7) SlashEpoch() abi.ChainEpoch { + return d.ds7.SlashEpoch +} + +func (d dealStateV7) Equals(other DealState) bool { + if ov7, ok := other.(dealStateV7); ok { + return d.ds7 == ov7.ds7 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV7)(nil) + +func fromV7DealState(v7 market7.DealState) DealState { + return dealStateV7{v7} } type dealProposals7 struct { diff --git a/chain/actors/builtin/market/v8.go b/chain/actors/builtin/market/v8.go index 9c68ee1fd86..f9bf25f9c7f 100644 --- a/chain/actors/builtin/market/v8.go +++ b/chain/actors/builtin/market/v8.go @@ -152,7 +152,7 @@ type dealStates8 struct { adt.Array } -func (s *dealStates8) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates8) Get(dealID abi.DealID) (DealState, bool, error) { var deal8 market8.DealState found, err := s.Array.Get(uint64(dealID), &deal8) if err != nil { @@ -162,7 +162,7 @@ func (s *dealStates8) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV8DealState(deal8) - return &deal, true, nil + return deal, true, nil } func (s *dealStates8) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -172,28 +172,57 @@ func (s *dealStates8) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates8) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates8) decode(val *cbg.Deferred) (DealState, error) { var ds8 market8.DealState if err := ds8.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV8DealState(ds8) - return &ds, nil + return ds, nil } func (s *dealStates8) array() adt.Array { return s.Array } -func fromV8DealState(v8 market8.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v8.SectorStartEpoch, - LastUpdatedEpoch: v8.LastUpdatedEpoch, - SlashEpoch: v8.SlashEpoch, - VerifiedClaim: 0, +type dealStateV8 struct { + ds8 market8.DealState +} + +func (d dealStateV8) SectorStartEpoch() abi.ChainEpoch { + return d.ds8.SectorStartEpoch +} + +func (d dealStateV8) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds8.LastUpdatedEpoch +} + +func (d dealStateV8) SlashEpoch() abi.ChainEpoch { + return d.ds8.SlashEpoch +} + +func (d dealStateV8) Equals(other DealState) bool { + if ov8, ok := other.(dealStateV8); ok { + return d.ds8 == ov8.ds8 } - return ret + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false + } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} + +var _ DealState = (*dealStateV8)(nil) + +func fromV8DealState(v8 market8.DealState) DealState { + return dealStateV8{v8} } type dealProposals8 struct { diff --git a/chain/actors/builtin/market/v9.go b/chain/actors/builtin/market/v9.go index d692c15ccb7..3b5be4dfa26 100644 --- a/chain/actors/builtin/market/v9.go +++ b/chain/actors/builtin/market/v9.go @@ -153,7 +153,7 @@ type dealStates9 struct { adt.Array } -func (s *dealStates9) Get(dealID abi.DealID) (*DealState, bool, error) { +func (s *dealStates9) Get(dealID abi.DealID) (DealState, bool, error) { var deal9 market9.DealState found, err := s.Array.Get(uint64(dealID), &deal9) if err != nil { @@ -163,7 +163,7 @@ func (s *dealStates9) Get(dealID abi.DealID) (*DealState, bool, error) { return nil, false, nil } deal := fromV9DealState(deal9) - return &deal, true, nil + return deal, true, nil } func (s *dealStates9) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { @@ -173,30 +173,57 @@ func (s *dealStates9) ForEach(cb func(dealID abi.DealID, ds DealState) error) er }) } -func (s *dealStates9) decode(val *cbg.Deferred) (*DealState, error) { +func (s *dealStates9) decode(val *cbg.Deferred) (DealState, error) { var ds9 market9.DealState if err := ds9.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { return nil, err } ds := fromV9DealState(ds9) - return &ds, nil + return ds, nil } func (s *dealStates9) array() adt.Array { return s.Array } -func fromV9DealState(v9 market9.DealState) DealState { - ret := DealState{ - SectorStartEpoch: v9.SectorStartEpoch, - LastUpdatedEpoch: v9.LastUpdatedEpoch, - SlashEpoch: v9.SlashEpoch, - VerifiedClaim: 0, +type dealStateV9 struct { + ds9 market9.DealState +} + +func (d dealStateV9) SectorStartEpoch() abi.ChainEpoch { + return d.ds9.SectorStartEpoch +} + +func (d dealStateV9) LastUpdatedEpoch() abi.ChainEpoch { + return d.ds9.LastUpdatedEpoch +} + +func (d dealStateV9) SlashEpoch() abi.ChainEpoch { + return d.ds9.SlashEpoch +} + +func (d dealStateV9) Equals(other DealState) bool { + if ov9, ok := other.(dealStateV9); ok { + return d.ds9 == ov9.ds9 + } + + if d.SectorStartEpoch() != other.SectorStartEpoch() { + return false + } + if d.LastUpdatedEpoch() != other.LastUpdatedEpoch() { + return false } + if d.SlashEpoch() != other.SlashEpoch() { + return false + } + + return true +} - ret.VerifiedClaim = verifregtypes.AllocationId(v9.VerifiedClaim) +var _ DealState = (*dealStateV9)(nil) - return ret +func fromV9DealState(v9 market9.DealState) DealState { + return dealStateV9{v9} } type dealProposals9 struct { diff --git a/chain/actors/builtin/miner/actor.go.template b/chain/actors/builtin/miner/actor.go.template index ead254847de..0f7204ec733 100644 --- a/chain/actors/builtin/miner/actor.go.template +++ b/chain/actors/builtin/miner/actor.go.template @@ -17,7 +17,8 @@ import ( "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/types" - miner12 "github.com/filecoin-project/go-state-types/builtin/v12/miner" + + minertypes13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/manifest" @@ -153,7 +154,7 @@ type Partition interface { UnprovenSectors() (bitfield.BitField, error) } -type SectorOnChainInfo = miner12.SectorOnChainInfo +type SectorOnChainInfo = minertypes13.SectorOnChainInfo func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof, configWantSynthetic bool) (abi.RegisteredSealProof, error) { // We added support for the new proofs in network version 7, and removed support for the old @@ -240,7 +241,9 @@ type DeclareFaultsParams = minertypes.DeclareFaultsParams type ProveCommitAggregateParams = minertypes.ProveCommitAggregateParams type ProveCommitSectorParams = minertypes.ProveCommitSectorParams type ProveReplicaUpdatesParams = minertypes.ProveReplicaUpdatesParams +type ProveReplicaUpdatesParams2 = minertypes.ProveReplicaUpdatesParams2 type ReplicaUpdate = minertypes.ReplicaUpdate +type ReplicaUpdate2 = minertypes.ReplicaUpdate2 type PreCommitSectorBatchParams = minertypes.PreCommitSectorBatchParams type PreCommitSectorBatchParams2 = minertypes.PreCommitSectorBatchParams2 type ExtendSectorExpiration2Params = minertypes.ExtendSectorExpiration2Params @@ -249,6 +252,13 @@ type ExpirationExtension2 = minertypes.ExpirationExtension2 type CompactPartitionsParams = minertypes.CompactPartitionsParams type WithdrawBalanceParams = minertypes.WithdrawBalanceParams +type PieceActivationManifest = minertypes13.PieceActivationManifest +type ProveCommitSectors3Params = minertypes13.ProveCommitSectors3Params +type SectorActivationManifest = minertypes13.SectorActivationManifest +type ProveReplicaUpdates3Params = minertypes13.ProveReplicaUpdates3Params +type SectorUpdateManifest = minertypes13.SectorUpdateManifest +type SectorOnChainInfoFlags = minertypes13.SectorOnChainInfoFlags + var QAPowerMax = minertypes.QAPowerMax type WindowPostVerifyInfo = proof.WindowPoStVerifyInfo diff --git a/chain/actors/builtin/miner/miner.go b/chain/actors/builtin/miner/miner.go index 151688d048b..cdf0046f587 100644 --- a/chain/actors/builtin/miner/miner.go +++ b/chain/actors/builtin/miner/miner.go @@ -9,7 +9,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - miner12 "github.com/filecoin-project/go-state-types/builtin/v12/miner" + minertypes13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/dline" @@ -52,6 +52,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -122,6 +125,9 @@ func MakeState(store adt.Store, av actors.Version) (State, error) { case actors.Version12: return make12(store) + case actors.Version13: + return make13(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -213,7 +219,7 @@ type Partition interface { UnprovenSectors() (bitfield.BitField, error) } -type SectorOnChainInfo = miner12.SectorOnChainInfo +type SectorOnChainInfo = minertypes13.SectorOnChainInfo func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof, configWantSynthetic bool) (abi.RegisteredSealProof, error) { // We added support for the new proofs in network version 7, and removed support for the old @@ -300,7 +306,9 @@ type DeclareFaultsParams = minertypes.DeclareFaultsParams type ProveCommitAggregateParams = minertypes.ProveCommitAggregateParams type ProveCommitSectorParams = minertypes.ProveCommitSectorParams type ProveReplicaUpdatesParams = minertypes.ProveReplicaUpdatesParams +type ProveReplicaUpdatesParams2 = minertypes.ProveReplicaUpdatesParams2 type ReplicaUpdate = minertypes.ReplicaUpdate +type ReplicaUpdate2 = minertypes.ReplicaUpdate2 type PreCommitSectorBatchParams = minertypes.PreCommitSectorBatchParams type PreCommitSectorBatchParams2 = minertypes.PreCommitSectorBatchParams2 type ExtendSectorExpiration2Params = minertypes.ExtendSectorExpiration2Params @@ -309,6 +317,13 @@ type ExpirationExtension2 = minertypes.ExpirationExtension2 type CompactPartitionsParams = minertypes.CompactPartitionsParams type WithdrawBalanceParams = minertypes.WithdrawBalanceParams +type PieceActivationManifest = minertypes13.PieceActivationManifest +type ProveCommitSectors3Params = minertypes13.ProveCommitSectors3Params +type SectorActivationManifest = minertypes13.SectorActivationManifest +type ProveReplicaUpdates3Params = minertypes13.ProveReplicaUpdates3Params +type SectorUpdateManifest = minertypes13.SectorUpdateManifest +type SectorOnChainInfoFlags = minertypes13.SectorOnChainInfoFlags + var QAPowerMax = minertypes.QAPowerMax type WindowPostVerifyInfo = proof.WindowPoStVerifyInfo @@ -375,5 +390,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/miner/v13.go b/chain/actors/builtin/miner/v13.go new file mode 100644 index 00000000000..d61c2a9a222 --- /dev/null +++ b/chain/actors/builtin/miner/v13.go @@ -0,0 +1,594 @@ +package miner + +import ( + "bytes" + "errors" + "fmt" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin13 "github.com/filecoin-project/go-state-types/builtin" + miner13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" + adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store) (State, error) { + out := state13{store: store} + out.State = miner13.State{} + return &out, nil +} + +type state13 struct { + miner13.State + store adt.Store +} + +type deadline13 struct { + miner13.Deadline + store adt.Store +} + +type partition13 struct { + miner13.Partition + store adt.Store +} + +func (s *state13) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesn't have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state13) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state13) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state13) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state13) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state13) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +// Returns nil, nil if sector is not found +func (s *state13) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV13SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state13) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state13) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner13.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state13) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner13.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner13.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner13.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner13.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner13.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state13) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV13SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state13) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt13.AsMap(s.store, s.State.PreCommittedSectors, builtin13.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner13.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV13SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state13) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner13.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info13 miner13.SectorOnChainInfo + if err := sectors.ForEach(&info13, func(_ int64) error { + info := fromV13SectorOnChainInfo(info13) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos13, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos13)) + for i, info13 := range infos13 { + info := fromV13SectorOnChainInfo(*info13) + infos[i] = &info + } + return infos, nil +} + +func (s *state13) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state13) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state13) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state13) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state13) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state13) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline13{*dl, s.store}, nil +} + +func (s *state13) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner13.Deadline) error { + return cb(i, &deadline13{*dl, s.store}) + }) +} + +func (s *state13) NumDeadlines() (uint64, error) { + return miner13.WPoStPeriodDeadlines, nil +} + +func (s *state13) DeadlinesChanged(other State) (bool, error) { + other13, ok := other.(*state13) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other13.Deadlines), nil +} + +func (s *state13) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state13) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state13) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + PendingWorkerKey: (*WorkerKeyChange)(info.PendingWorkerKey), + + PeerId: info.PeerId, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + + Beneficiary: info.Beneficiary, + BeneficiaryTerm: BeneficiaryTerm(info.BeneficiaryTerm), + PendingBeneficiaryTerm: (*PendingBeneficiaryChange)(info.PendingBeneficiaryTerm), + } + + return mi, nil +} + +func (s *state13) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state13) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state13) sectors() (adt.Array, error) { + return adt13.AsArray(s.store, s.Sectors, miner13.SectorsAmtBitwidth) +} + +func (s *state13) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner13.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV13SectorOnChainInfo(si), nil +} + +func (s *state13) precommits() (adt.Map, error) { + return adt13.AsMap(s.store, s.PreCommittedSectors, builtin13.DefaultHamtBitwidth) +} + +func (s *state13) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner13.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV13SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state13) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner13.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner13.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline13) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition13{*p, d.store}, nil +} + +func (d *deadline13) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner13.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition13{part, d.store}) + }) +} + +func (d *deadline13) PartitionsChanged(other Deadline) (bool, error) { + other13, ok := other.(*deadline13) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other13.Deadline.Partitions), nil +} + +func (d *deadline13) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline13) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition13) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition13) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition13) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition13) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV13SectorOnChainInfo(v13 miner13.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v13.SectorNumber, + SealProof: v13.SealProof, + SealedCID: v13.SealedCID, + DealIDs: v13.DealIDs, + Activation: v13.Activation, + Expiration: v13.Expiration, + DealWeight: v13.DealWeight, + VerifiedDealWeight: v13.VerifiedDealWeight, + InitialPledge: v13.InitialPledge, + ExpectedDayReward: v13.ExpectedDayReward, + ExpectedStoragePledge: v13.ExpectedStoragePledge, + + SectorKeyCID: v13.SectorKeyCID, + + PowerBaseEpoch: v13.PowerBaseEpoch, + ReplacedDayReward: v13.ReplacedDayReward, + } + return info +} + +func fromV13SectorPreCommitOnChainInfo(v13 miner13.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + ret := SectorPreCommitOnChainInfo{ + Info: SectorPreCommitInfo{ + SealProof: v13.Info.SealProof, + SectorNumber: v13.Info.SectorNumber, + SealedCID: v13.Info.SealedCID, + SealRandEpoch: v13.Info.SealRandEpoch, + DealIDs: v13.Info.DealIDs, + Expiration: v13.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v13.PreCommitDeposit, + PreCommitEpoch: v13.PreCommitEpoch, + } + + ret.Info.UnsealedCid = v13.Info.UnsealedCid + + return ret +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +func (s *state13) ActorKey() string { + return manifest.MinerKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/multisig/message10.go b/chain/actors/builtin/multisig/message10.go index 8f7bb5a6f2e..59dd4dde016 100644 --- a/chain/actors/builtin/multisig/message10.go +++ b/chain/actors/builtin/multisig/message10.go @@ -8,7 +8,7 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" builtintypes "github.com/filecoin-project/go-state-types/builtin" multisig10 "github.com/filecoin-project/go-state-types/builtin/v10/multisig" - init12 "github.com/filecoin-project/go-state-types/builtin/v12/init" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/lotus/chain/actors" @@ -57,7 +57,7 @@ func (m message10) Create( } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init12.ExecParams{ + execParams := &init13.ExecParams{ CodeCID: code, ConstructorParams: enc, } diff --git a/chain/actors/builtin/multisig/message11.go b/chain/actors/builtin/multisig/message11.go index 4c7520d5dea..89bee0255af 100644 --- a/chain/actors/builtin/multisig/message11.go +++ b/chain/actors/builtin/multisig/message11.go @@ -8,7 +8,7 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" builtintypes "github.com/filecoin-project/go-state-types/builtin" multisig11 "github.com/filecoin-project/go-state-types/builtin/v11/multisig" - init12 "github.com/filecoin-project/go-state-types/builtin/v12/init" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/lotus/chain/actors" @@ -57,7 +57,7 @@ func (m message11) Create( } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init12.ExecParams{ + execParams := &init13.ExecParams{ CodeCID: code, ConstructorParams: enc, } diff --git a/chain/actors/builtin/multisig/message12.go b/chain/actors/builtin/multisig/message12.go index 43658c04b03..326026c93ff 100644 --- a/chain/actors/builtin/multisig/message12.go +++ b/chain/actors/builtin/multisig/message12.go @@ -7,8 +7,8 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" builtintypes "github.com/filecoin-project/go-state-types/builtin" - init12 "github.com/filecoin-project/go-state-types/builtin/v12/init" multisig12 "github.com/filecoin-project/go-state-types/builtin/v12/multisig" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/lotus/chain/actors" @@ -57,7 +57,7 @@ func (m message12) Create( } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init12.ExecParams{ + execParams := &init13.ExecParams{ CodeCID: code, ConstructorParams: enc, } diff --git a/chain/actors/builtin/multisig/message13.go b/chain/actors/builtin/multisig/message13.go new file mode 100644 index 00000000000..94a9cbfbf7e --- /dev/null +++ b/chain/actors/builtin/multisig/message13.go @@ -0,0 +1,77 @@ +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtintypes "github.com/filecoin-project/go-state-types/builtin" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" + multisig13 "github.com/filecoin-project/go-state-types/builtin/v13/multisig" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" + "github.com/filecoin-project/lotus/chain/types" +) + +type message13 struct{ message0 } + +func (m message13) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig13.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + code, ok := actors.GetActorCodeID(actorstypes.Version13, manifest.MultisigKey) + if !ok { + return nil, xerrors.Errorf("failed to get multisig code ID") + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init13.ExecParams{ + CodeCID: code, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtintypes.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/chain/actors/builtin/multisig/message8.go b/chain/actors/builtin/multisig/message8.go index 390c94691e4..5d79fe6c5a7 100644 --- a/chain/actors/builtin/multisig/message8.go +++ b/chain/actors/builtin/multisig/message8.go @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" builtintypes "github.com/filecoin-project/go-state-types/builtin" - init12 "github.com/filecoin-project/go-state-types/builtin/v12/init" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" multisig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" "github.com/filecoin-project/go-state-types/manifest" @@ -57,7 +57,7 @@ func (m message8) Create( } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init12.ExecParams{ + execParams := &init13.ExecParams{ CodeCID: code, ConstructorParams: enc, } diff --git a/chain/actors/builtin/multisig/message9.go b/chain/actors/builtin/multisig/message9.go index 907bec7d556..9003b7e38d8 100644 --- a/chain/actors/builtin/multisig/message9.go +++ b/chain/actors/builtin/multisig/message9.go @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" builtintypes "github.com/filecoin-project/go-state-types/builtin" - init12 "github.com/filecoin-project/go-state-types/builtin/v12/init" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" multisig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" "github.com/filecoin-project/go-state-types/manifest" @@ -57,7 +57,7 @@ func (m message9) Create( } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init12.ExecParams{ + execParams := &init13.ExecParams{ CodeCID: code, ConstructorParams: enc, } diff --git a/chain/actors/builtin/multisig/multisig.go b/chain/actors/builtin/multisig/multisig.go index 71a3b7b2237..08da9bd2dca 100644 --- a/chain/actors/builtin/multisig/multisig.go +++ b/chain/actors/builtin/multisig/multisig.go @@ -12,7 +12,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" builtintypes "github.com/filecoin-project/go-state-types/builtin" - msig12 "github.com/filecoin-project/go-state-types/builtin/v12/multisig" + msig13 "github.com/filecoin-project/go-state-types/builtin/v13/multisig" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/manifest" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -51,6 +51,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -121,6 +124,9 @@ func MakeState(store adt.Store, av actorstypes.Version, signers []address.Addres case actorstypes.Version12: return make12(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + case actorstypes.Version13: + return make13(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -147,7 +153,7 @@ type State interface { GetState() interface{} } -type Transaction = msig12.Transaction +type Transaction = msig13.Transaction var Methods = builtintypes.MethodsMultisig @@ -189,6 +195,9 @@ func Message(version actorstypes.Version, from address.Address) MessageBuilder { case actorstypes.Version12: return message12{message0{from}} + + case actorstypes.Version13: + return message13{message0{from}} default: panic(fmt.Sprintf("unsupported actors version: %d", version)) } @@ -212,13 +221,13 @@ type MessageBuilder interface { } // this type is the same between v0 and v2 -type ProposalHashData = msig12.ProposalHashData -type ProposeReturn = msig12.ProposeReturn -type ProposeParams = msig12.ProposeParams -type ApproveReturn = msig12.ApproveReturn +type ProposalHashData = msig13.ProposalHashData +type ProposeReturn = msig13.ProposeReturn +type ProposeParams = msig13.ProposeParams +type ApproveReturn = msig13.ApproveReturn func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { - params := msig12.TxnIDParams{ID: msig12.TxnID(id)} + params := msig13.TxnIDParams{ID: msig13.TxnID(id)} if data != nil { if data.Requester.Protocol() != address.ID { return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) @@ -254,5 +263,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/multisig/v13.go b/chain/actors/builtin/multisig/v13.go new file mode 100644 index 00000000000..57dd66976d0 --- /dev/null +++ b/chain/actors/builtin/multisig/v13.go @@ -0,0 +1,138 @@ +package multisig + +import ( + "bytes" + "encoding/binary" + "fmt" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin13 "github.com/filecoin-project/go-state-types/builtin" + msig13 "github.com/filecoin-project/go-state-types/builtin/v13/multisig" + adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state13{store: store} + out.State = msig13.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt13.StoreEmptyMap(store, builtin13.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state13 struct { + msig13.State + store adt.Store +} + +func (s *state13) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state13) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state13) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state13) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state13) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state13) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state13) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt13.AsMap(s.store, s.State.PendingTxns, builtin13.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig13.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state13) PendingTxnChanged(other State) (bool, error) { + other13, ok := other.(*state13) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other13.PendingTxns), nil +} + +func (s *state13) transactions() (adt.Map, error) { + return adt13.AsMap(s.store, s.PendingTxns, builtin13.DefaultHamtBitwidth) +} + +func (s *state13) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig13.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return Transaction(tx), nil +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +func (s *state13) ActorKey() string { + return manifest.MultisigKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/paych/message13.go b/chain/actors/builtin/paych/message13.go new file mode 100644 index 00000000000..1614ec60827 --- /dev/null +++ b/chain/actors/builtin/paych/message13.go @@ -0,0 +1,109 @@ +package paych + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin13 "github.com/filecoin-project/go-state-types/builtin" + init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" + paych13 "github.com/filecoin-project/go-state-types/builtin/v13/paych" + paychtypes "github.com/filecoin-project/go-state-types/builtin/v8/paych" + + "github.com/filecoin-project/lotus/chain/actors" + init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" + "github.com/filecoin-project/lotus/chain/types" +) + +type message13 struct{ from address.Address } + +func (m message13) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version13, "paymentchannel") + if !ok { + return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 13) + } + + params, aerr := actors.SerializeParams(&paych13.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init13.ExecParams{ + CodeCID: actorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin13.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message13) Update(paych address.Address, sv *paychtypes.SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych13.UpdateChannelStateParams{ + + Sv: toV13SignedVoucher(*sv), + + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin13.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func toV13SignedVoucher(sv paychtypes.SignedVoucher) paych13.SignedVoucher { + merges := make([]paych13.Merge, len(sv.Merges)) + for i := range sv.Merges { + merges[i] = paych13.Merge{ + Lane: sv.Merges[i].Lane, + Nonce: sv.Merges[i].Nonce, + } + } + + return paych13.SignedVoucher{ + ChannelAddr: sv.ChannelAddr, + TimeLockMin: sv.TimeLockMin, + TimeLockMax: sv.TimeLockMax, + SecretHash: sv.SecretHash, + Extra: (*paych13.ModVerifyParams)(sv.Extra), + Lane: sv.Lane, + Nonce: sv.Nonce, + Amount: sv.Amount, + MinSettleHeight: sv.MinSettleHeight, + Merges: merges, + Signature: sv.Signature, + } +} + +func (m message13) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin13.MethodsPaych.Settle, + }, nil +} + +func (m message13) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin13.MethodsPaych.Collect, + }, nil +} diff --git a/chain/actors/builtin/paych/paych.go b/chain/actors/builtin/paych/paych.go index fc8908cb4e1..2b5c78edfee 100644 --- a/chain/actors/builtin/paych/paych.go +++ b/chain/actors/builtin/paych/paych.go @@ -53,6 +53,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -173,6 +176,9 @@ func Message(version actorstypes.Version, from address.Address) MessageBuilder { case actorstypes.Version12: return message12{from} + case actorstypes.Version13: + return message13{from} + default: panic(fmt.Sprintf("unsupported actors version: %d", version)) } @@ -215,5 +221,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/paych/v13.go b/chain/actors/builtin/paych/v13.go new file mode 100644 index 00000000000..c5a10c571eb --- /dev/null +++ b/chain/actors/builtin/paych/v13.go @@ -0,0 +1,135 @@ +package paych + +import ( + "fmt" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/filecoin-project/go-state-types/big" + paych13 "github.com/filecoin-project/go-state-types/builtin/v13/paych" + adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store) (State, error) { + out := state13{store: store} + out.State = paych13.State{} + return &out, nil +} + +type state13 struct { + paych13.State + store adt.Store + lsAmt *adt13.Array +} + +// Channel owner, who has funded the actor +func (s *state13) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state13) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state13) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state13) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state13) getOrLoadLsAmt() (*adt13.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt13.AsArray(s.store, s.State.LaneStates, paych13.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state13) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state13) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych13.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState13{ls}) + }) +} + +type laneState13 struct { + paych13.LaneState +} + +func (ls *laneState13) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState13) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} + +func (s *state13) ActorKey() string { + return manifest.PaychKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/power/power.go b/chain/actors/builtin/power/power.go index 9b64ded3877..e263e3f8788 100644 --- a/chain/actors/builtin/power/power.go +++ b/chain/actors/builtin/power/power.go @@ -9,7 +9,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - builtin12 "github.com/filecoin-project/go-state-types/builtin" + builtin13 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/manifest" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -27,8 +27,8 @@ import ( ) var ( - Address = builtin12.StoragePowerActorAddr - Methods = builtin12.MethodsPower + Address = builtin13.StoragePowerActorAddr + Methods = builtin13.MethodsPower ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -54,6 +54,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -124,6 +127,9 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { case actorstypes.Version12: return make12(store) + case actorstypes.Version13: + return make13(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -190,5 +196,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/power/v13.go b/chain/actors/builtin/power/v13.go new file mode 100644 index 00000000000..4cf761b16d5 --- /dev/null +++ b/chain/actors/builtin/power/v13.go @@ -0,0 +1,207 @@ +package power + +import ( + "bytes" + "fmt" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin13 "github.com/filecoin-project/go-state-types/builtin" + power13 "github.com/filecoin-project/go-state-types/builtin/v13/power" + adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/chain/actors/builtin" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store) (State, error) { + out := state13{store: store} + + s, err := power13.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state13 struct { + power13.State + store adt.Store +} + +func (s *state13) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state13) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state13) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state13) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power13.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state13) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state13) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state13) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state13) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state13) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power13.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state13) ClaimsChanged(other State) (bool, error) { + other13, ok := other.(*state13) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other13.State.Claims), nil +} + +func (s *state13) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state13) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state13) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state13) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +func (s *state13) claims() (adt.Map, error) { + return adt13.AsMap(s.store, s.Claims, builtin13.DefaultHamtBitwidth) +} + +func (s *state13) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power13.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV13Claim(ci), nil +} + +func fromV13Claim(v13 power13.Claim) Claim { + return Claim{ + RawBytePower: v13.RawBytePower, + QualityAdjPower: v13.QualityAdjPower, + } +} + +func (s *state13) ActorKey() string { + return manifest.PowerKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/registry.go b/chain/actors/builtin/registry.go index 6ba5fef03b2..93768580b08 100644 --- a/chain/actors/builtin/registry.go +++ b/chain/actors/builtin/registry.go @@ -58,6 +58,22 @@ import ( reward12 "github.com/filecoin-project/go-state-types/builtin/v12/reward" system12 "github.com/filecoin-project/go-state-types/builtin/v12/system" verifreg12 "github.com/filecoin-project/go-state-types/builtin/v12/verifreg" + account13 "github.com/filecoin-project/go-state-types/builtin/v13/account" + cron13 "github.com/filecoin-project/go-state-types/builtin/v13/cron" + datacap13 "github.com/filecoin-project/go-state-types/builtin/v13/datacap" + eam13 "github.com/filecoin-project/go-state-types/builtin/v13/eam" + ethaccount13 "github.com/filecoin-project/go-state-types/builtin/v13/ethaccount" + evm13 "github.com/filecoin-project/go-state-types/builtin/v13/evm" + _init13 "github.com/filecoin-project/go-state-types/builtin/v13/init" + market13 "github.com/filecoin-project/go-state-types/builtin/v13/market" + miner13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" + multisig13 "github.com/filecoin-project/go-state-types/builtin/v13/multisig" + paych13 "github.com/filecoin-project/go-state-types/builtin/v13/paych" + placeholder13 "github.com/filecoin-project/go-state-types/builtin/v13/placeholder" + power13 "github.com/filecoin-project/go-state-types/builtin/v13/power" + reward13 "github.com/filecoin-project/go-state-types/builtin/v13/reward" + system13 "github.com/filecoin-project/go-state-types/builtin/v13/system" + verifreg13 "github.com/filecoin-project/go-state-types/builtin/v13/verifreg" account8 "github.com/filecoin-project/go-state-types/builtin/v8/account" cron8 "github.com/filecoin-project/go-state-types/builtin/v8/cron" _init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" @@ -617,6 +633,110 @@ func MakeRegistry(av actorstypes.Version) []RegistryEntry { } } + case actorstypes.Version13: + for key, codeID := range codeIDs { + switch key { + case manifest.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account13.Methods, + state: new(account13.State), + }) + case manifest.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron13.Methods, + state: new(cron13.State), + }) + case manifest.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init13.Methods, + state: new(_init13.State), + }) + case manifest.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market13.Methods, + state: new(market13.State), + }) + case manifest.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner13.Methods, + state: new(miner13.State), + }) + case manifest.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig13.Methods, + state: new(multisig13.State), + }) + case manifest.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych13.Methods, + state: new(paych13.State), + }) + case manifest.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power13.Methods, + state: new(power13.State), + }) + case manifest.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward13.Methods, + state: new(reward13.State), + }) + case manifest.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system13.Methods, + state: new(system13.State), + }) + case manifest.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg13.Methods, + state: new(verifreg13.State), + }) + case manifest.DatacapKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: datacap13.Methods, + state: new(datacap13.State), + }) + + case manifest.EvmKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: evm13.Methods, + state: new(evm13.State), + }) + case manifest.EamKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: eam13.Methods, + state: nil, + }) + case manifest.PlaceholderKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: placeholder13.Methods, + state: nil, + }) + case manifest.EthAccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: ethaccount13.Methods, + state: nil, + }) + + } + } + default: panic("expected version v8 and up only, use specs-actors for v0-7") } diff --git a/chain/actors/builtin/reward/reward.go b/chain/actors/builtin/reward/reward.go index 3c646364585..a6c8bff5b55 100644 --- a/chain/actors/builtin/reward/reward.go +++ b/chain/actors/builtin/reward/reward.go @@ -6,7 +6,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" - builtin12 "github.com/filecoin-project/go-state-types/builtin" + builtin13 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/manifest" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -25,8 +25,8 @@ import ( ) var ( - Address = builtin12.RewardActorAddr - Methods = builtin12.MethodsReward + Address = builtin13.RewardActorAddr + Methods = builtin13.MethodsReward ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -52,6 +52,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -122,6 +125,9 @@ func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.St case actorstypes.Version12: return make12(store, currRealizedPower) + case actorstypes.Version13: + return make13(store, currRealizedPower) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -166,5 +172,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/reward/v13.go b/chain/actors/builtin/reward/v13.go new file mode 100644 index 00000000000..e8d343cab29 --- /dev/null +++ b/chain/actors/builtin/reward/v13.go @@ -0,0 +1,120 @@ +package reward + +import ( + "fmt" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + miner13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" + reward13 "github.com/filecoin-project/go-state-types/builtin/v13/reward" + smoothing13 "github.com/filecoin-project/go-state-types/builtin/v13/util/smoothing" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/chain/actors/builtin" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state13{store: store} + out.State = *reward13.ConstructState(currRealizedPower) + return &out, nil +} + +type state13 struct { + reward13.State + store adt.Store +} + +func (s *state13) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state13) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state13) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state13) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state13) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state13) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state13) CumsumBaseline() (reward13.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state13) CumsumRealized() (reward13.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state13) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner13.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing13.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state13) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner13.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing13.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +func (s *state13) ActorKey() string { + return manifest.RewardKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/system/system.go b/chain/actors/builtin/system/system.go index 2a2b703bb1c..1526a1fc0a5 100644 --- a/chain/actors/builtin/system/system.go +++ b/chain/actors/builtin/system/system.go @@ -5,7 +5,7 @@ import ( "golang.org/x/xerrors" actorstypes "github.com/filecoin-project/go-state-types/actors" - builtin12 "github.com/filecoin-project/go-state-types/builtin" + builtin13 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/manifest" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -21,7 +21,7 @@ import ( ) var ( - Address = builtin12.SystemActorAddr + Address = builtin13.SystemActorAddr ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -47,6 +47,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -117,6 +120,9 @@ func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) ( case actorstypes.Version12: return make12(store, builtinActors) + case actorstypes.Version13: + return make13(store, builtinActors) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -145,5 +151,6 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/builtin/system/v13.go b/chain/actors/builtin/system/v13.go new file mode 100644 index 00000000000..8facf0033cb --- /dev/null +++ b/chain/actors/builtin/system/v13.go @@ -0,0 +1,72 @@ +package system + +import ( + "fmt" + + "github.com/ipfs/go-cid" + + actorstypes "github.com/filecoin-project/go-state-types/actors" + system13 "github.com/filecoin-project/go-state-types/builtin/v13/system" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store, builtinActors cid.Cid) (State, error) { + out := state13{store: store} + out.State = system13.State{ + BuiltinActors: builtinActors, + } + return &out, nil +} + +type state13 struct { + system13.State + store adt.Store +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +func (s *state13) GetBuiltinActors() cid.Cid { + + return s.State.BuiltinActors + +} + +func (s *state13) SetBuiltinActors(c cid.Cid) error { + + s.State.BuiltinActors = c + return nil + +} + +func (s *state13) ActorKey() string { + return manifest.SystemKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/verifreg/actor.go.template b/chain/actors/builtin/verifreg/actor.go.template index 991c6717bd7..f4467d979bf 100644 --- a/chain/actors/builtin/verifreg/actor.go.template +++ b/chain/actors/builtin/verifreg/actor.go.template @@ -81,8 +81,10 @@ type State interface { ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error GetAllocation(clientIdAddr address.Address, allocationId AllocationId) (*Allocation, bool, error) GetAllocations(clientIdAddr address.Address) (map[AllocationId]Allocation, error) + GetAllAllocations() (map[AllocationId]Allocation, error) GetClaim(providerIdAddr address.Address, claimId ClaimId) (*Claim, bool, error) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, error) + GetAllClaims() (map[ClaimId]Claim, error) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) GetState() interface{} } diff --git a/chain/actors/builtin/verifreg/state.go.template b/chain/actors/builtin/verifreg/state.go.template index adcbc22c2e4..7835b16b640 100644 --- a/chain/actors/builtin/verifreg/state.go.template +++ b/chain/actors/builtin/verifreg/state.go.template @@ -145,6 +145,21 @@ func (s *state{{.v}}) GetAllocations(clientIdAddr address.Address) (map[Allocati {{end}} } +func (s *state{{.v}}) GetAllAllocations() (map[AllocationId]Allocation, error) { +{{if (le .v 8)}} + return nil, xerrors.Errorf("unsupported in actors v{{.v}}") +{{else}} + v{{.v}}Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v{{.v}}Map)) + for k, v := range v{{.v}}Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err +{{end}} +} + func (s *state{{.v}}) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { {{if (le .v 8)}} return nil, false, xerrors.Errorf("unsupported in actors v{{.v}}") @@ -170,6 +185,22 @@ func (s *state{{.v}}) GetClaims(providerIdAddr address.Address) (map[ClaimId]Cla {{end}} } +func (s *state{{.v}}) GetAllClaims() (map[ClaimId]Claim, error) { +{{if (le .v 8)}} + return nil, xerrors.Errorf("unsupported in actors v{{.v}}") +{{else}} + v{{.v}}Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v{{.v}}Map)) + for k, v := range v{{.v}}Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +{{end}} +} + func (s *state{{.v}}) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { {{if (le .v 8)}} return nil, xerrors.Errorf("unsupported in actors v{{.v}}") diff --git a/chain/actors/builtin/verifreg/v0.go b/chain/actors/builtin/verifreg/v0.go index 9913c42c0c6..4129e7a2dae 100644 --- a/chain/actors/builtin/verifreg/v0.go +++ b/chain/actors/builtin/verifreg/v0.go @@ -106,6 +106,12 @@ func (s *state0) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state0) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v0") + +} + func (s *state0) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v0") @@ -118,6 +124,12 @@ func (s *state0) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state0) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v0") + +} + func (s *state0) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v0") diff --git a/chain/actors/builtin/verifreg/v10.go b/chain/actors/builtin/verifreg/v10.go index 256f4d2f888..85f85c7f2c9 100644 --- a/chain/actors/builtin/verifreg/v10.go +++ b/chain/actors/builtin/verifreg/v10.go @@ -114,6 +114,19 @@ func (s *state10) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state10) GetAllAllocations() (map[AllocationId]Allocation, error) { + + v10Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v10Map)) + for k, v := range v10Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + func (s *state10) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg10.ClaimId(claimId)) @@ -134,6 +147,19 @@ func (s *state10) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state10) GetAllClaims() (map[ClaimId]Claim, error) { + + v10Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v10Map)) + for k, v := range v10Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + func (s *state10) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v10Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v11.go b/chain/actors/builtin/verifreg/v11.go index 7b7b9e4c0a8..5a8e1cb0cc8 100644 --- a/chain/actors/builtin/verifreg/v11.go +++ b/chain/actors/builtin/verifreg/v11.go @@ -114,6 +114,19 @@ func (s *state11) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state11) GetAllAllocations() (map[AllocationId]Allocation, error) { + + v11Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v11Map)) + for k, v := range v11Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + func (s *state11) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg11.ClaimId(claimId)) @@ -134,6 +147,19 @@ func (s *state11) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state11) GetAllClaims() (map[ClaimId]Claim, error) { + + v11Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v11Map)) + for k, v := range v11Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + func (s *state11) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v11Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v12.go b/chain/actors/builtin/verifreg/v12.go index 77a113fbe86..7c9a493f169 100644 --- a/chain/actors/builtin/verifreg/v12.go +++ b/chain/actors/builtin/verifreg/v12.go @@ -114,6 +114,19 @@ func (s *state12) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state12) GetAllAllocations() (map[AllocationId]Allocation, error) { + + v12Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v12Map)) + for k, v := range v12Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + func (s *state12) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg12.ClaimId(claimId)) @@ -134,6 +147,19 @@ func (s *state12) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state12) GetAllClaims() (map[ClaimId]Claim, error) { + + v12Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v12Map)) + for k, v := range v12Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + func (s *state12) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v12Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v13.go b/chain/actors/builtin/verifreg/v13.go new file mode 100644 index 00000000000..0c487a2f7e0 --- /dev/null +++ b/chain/actors/builtin/verifreg/v13.go @@ -0,0 +1,196 @@ +package verifreg + +import ( + "fmt" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/filecoin-project/go-state-types/big" + builtin13 "github.com/filecoin-project/go-state-types/builtin" + adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt" + verifreg13 "github.com/filecoin-project/go-state-types/builtin/v13/verifreg" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + "github.com/filecoin-project/go-state-types/manifest" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state13)(nil) + +func load13(store adt.Store, root cid.Cid) (State, error) { + out := state13{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make13(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state13{store: store} + + s, err := verifreg13.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state13 struct { + verifreg13.State + store adt.Store +} + +func (s *state13) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state13) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + + return false, big.Zero(), xerrors.Errorf("unsupported in actors v13") + +} + +func (s *state13) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version13, s.verifiers, addr) +} + +func (s *state13) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) { + return getRemoveDataCapProposalID(s.store, actors.Version13, s.removeDataCapProposalIDs, verifier, client) +} + +func (s *state13) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version13, s.verifiers, cb) +} + +func (s *state13) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + + return xerrors.Errorf("unsupported in actors v13") + +} + +func (s *state13) verifiedClients() (adt.Map, error) { + + return nil, xerrors.Errorf("unsupported in actors v13") + +} + +func (s *state13) verifiers() (adt.Map, error) { + return adt13.AsMap(s.store, s.Verifiers, builtin13.DefaultHamtBitwidth) +} + +func (s *state13) removeDataCapProposalIDs() (adt.Map, error) { + return adt13.AsMap(s.store, s.RemoveDataCapProposalIDs, builtin13.DefaultHamtBitwidth) +} + +func (s *state13) GetState() interface{} { + return &s.State +} + +func (s *state13) GetAllocation(clientIdAddr address.Address, allocationId verifreg9.AllocationId) (*Allocation, bool, error) { + + alloc, ok, err := s.FindAllocation(s.store, clientIdAddr, verifreg13.AllocationId(allocationId)) + return (*Allocation)(alloc), ok, err +} + +func (s *state13) GetAllocations(clientIdAddr address.Address) (map[AllocationId]Allocation, error) { + + v13Map, err := s.LoadAllocationsToMap(s.store, clientIdAddr) + + retMap := make(map[AllocationId]Allocation, len(v13Map)) + for k, v := range v13Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + +func (s *state13) GetAllAllocations() (map[AllocationId]Allocation, error) { + + v13Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v13Map)) + for k, v := range v13Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + +func (s *state13) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { + + claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg13.ClaimId(claimId)) + return (*Claim)(claim), ok, err + +} + +func (s *state13) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, error) { + + v13Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) + + retMap := make(map[ClaimId]Claim, len(v13Map)) + for k, v := range v13Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + +func (s *state13) GetAllClaims() (map[ClaimId]Claim, error) { + + v13Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v13Map)) + for k, v := range v13Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + +func (s *state13) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { + + v13Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) + + retMap := make(map[abi.SectorNumber][]ClaimId) + for k, v := range v13Map { + claims, ok := retMap[v.Sector] + if !ok { + retMap[v.Sector] = []ClaimId{ClaimId(k)} + } else { + retMap[v.Sector] = append(claims, ClaimId(k)) + } + } + + return retMap, err + +} + +func (s *state13) ActorKey() string { + return manifest.VerifregKey +} + +func (s *state13) ActorVersion() actorstypes.Version { + return actorstypes.Version13 +} + +func (s *state13) Code() cid.Cid { + code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey()) + if !ok { + panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion())) + } + + return code +} diff --git a/chain/actors/builtin/verifreg/v2.go b/chain/actors/builtin/verifreg/v2.go index 31f7f775df2..7f71639e668 100644 --- a/chain/actors/builtin/verifreg/v2.go +++ b/chain/actors/builtin/verifreg/v2.go @@ -106,6 +106,12 @@ func (s *state2) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state2) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v2") + +} + func (s *state2) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v2") @@ -118,6 +124,12 @@ func (s *state2) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state2) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v2") + +} + func (s *state2) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v2") diff --git a/chain/actors/builtin/verifreg/v3.go b/chain/actors/builtin/verifreg/v3.go index 3ea016fd5c3..3e8ea9a1f7a 100644 --- a/chain/actors/builtin/verifreg/v3.go +++ b/chain/actors/builtin/verifreg/v3.go @@ -107,6 +107,12 @@ func (s *state3) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state3) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v3") + +} + func (s *state3) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v3") @@ -119,6 +125,12 @@ func (s *state3) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state3) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v3") + +} + func (s *state3) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v3") diff --git a/chain/actors/builtin/verifreg/v4.go b/chain/actors/builtin/verifreg/v4.go index 464cc9fdc20..1dc43886422 100644 --- a/chain/actors/builtin/verifreg/v4.go +++ b/chain/actors/builtin/verifreg/v4.go @@ -107,6 +107,12 @@ func (s *state4) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state4) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v4") + +} + func (s *state4) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v4") @@ -119,6 +125,12 @@ func (s *state4) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state4) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v4") + +} + func (s *state4) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v4") diff --git a/chain/actors/builtin/verifreg/v5.go b/chain/actors/builtin/verifreg/v5.go index 17901dd23a9..a7505330c26 100644 --- a/chain/actors/builtin/verifreg/v5.go +++ b/chain/actors/builtin/verifreg/v5.go @@ -107,6 +107,12 @@ func (s *state5) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state5) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v5") + +} + func (s *state5) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v5") @@ -119,6 +125,12 @@ func (s *state5) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state5) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v5") + +} + func (s *state5) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v5") diff --git a/chain/actors/builtin/verifreg/v6.go b/chain/actors/builtin/verifreg/v6.go index 68fac64cb4d..93424152e4b 100644 --- a/chain/actors/builtin/verifreg/v6.go +++ b/chain/actors/builtin/verifreg/v6.go @@ -107,6 +107,12 @@ func (s *state6) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state6) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v6") + +} + func (s *state6) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v6") @@ -119,6 +125,12 @@ func (s *state6) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state6) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v6") + +} + func (s *state6) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v6") diff --git a/chain/actors/builtin/verifreg/v7.go b/chain/actors/builtin/verifreg/v7.go index e8f3ac73984..bd67aee5ff6 100644 --- a/chain/actors/builtin/verifreg/v7.go +++ b/chain/actors/builtin/verifreg/v7.go @@ -106,6 +106,12 @@ func (s *state7) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state7) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v7") + +} + func (s *state7) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v7") @@ -118,6 +124,12 @@ func (s *state7) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state7) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v7") + +} + func (s *state7) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v7") diff --git a/chain/actors/builtin/verifreg/v8.go b/chain/actors/builtin/verifreg/v8.go index 89393c4d9cf..1515c1c5bd3 100644 --- a/chain/actors/builtin/verifreg/v8.go +++ b/chain/actors/builtin/verifreg/v8.go @@ -106,6 +106,12 @@ func (s *state8) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state8) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v8") + +} + func (s *state8) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v8") @@ -118,6 +124,12 @@ func (s *state8) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state8) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v8") + +} + func (s *state8) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v8") diff --git a/chain/actors/builtin/verifreg/v9.go b/chain/actors/builtin/verifreg/v9.go index ce63c7f94b4..41422615bcc 100644 --- a/chain/actors/builtin/verifreg/v9.go +++ b/chain/actors/builtin/verifreg/v9.go @@ -113,6 +113,19 @@ func (s *state9) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state9) GetAllAllocations() (map[AllocationId]Allocation, error) { + + v9Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v9Map)) + for k, v := range v9Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + func (s *state9) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg9.ClaimId(claimId)) @@ -133,6 +146,19 @@ func (s *state9) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state9) GetAllClaims() (map[ClaimId]Claim, error) { + + v9Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v9Map)) + for k, v := range v9Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + func (s *state9) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v9Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/verifreg.go b/chain/actors/builtin/verifreg/verifreg.go index de906f52127..2d66d90282d 100644 --- a/chain/actors/builtin/verifreg/verifreg.go +++ b/chain/actors/builtin/verifreg/verifreg.go @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" - builtin12 "github.com/filecoin-project/go-state-types/builtin" + builtin13 "github.com/filecoin-project/go-state-types/builtin" verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/manifest" @@ -25,8 +25,8 @@ import ( ) var ( - Address = builtin12.VerifiedRegistryActorAddr - Methods = builtin12.MethodsVerifiedRegistry + Address = builtin13.VerifiedRegistryActorAddr + Methods = builtin13.MethodsVerifiedRegistry ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -52,6 +52,9 @@ func Load(store adt.Store, act *types.Actor) (State, error) { case actorstypes.Version12: return load12(store, act.Head) + case actorstypes.Version13: + return load13(store, act.Head) + } } @@ -122,6 +125,9 @@ func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.A case actorstypes.Version12: return make12(store, rootKeyAddress) + case actorstypes.Version13: + return make13(store, rootKeyAddress) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -141,8 +147,10 @@ type State interface { ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error GetAllocation(clientIdAddr address.Address, allocationId AllocationId) (*Allocation, bool, error) GetAllocations(clientIdAddr address.Address) (map[AllocationId]Allocation, error) + GetAllAllocations() (map[AllocationId]Allocation, error) GetClaim(providerIdAddr address.Address, claimId ClaimId) (*Claim, bool, error) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, error) + GetAllClaims() (map[ClaimId]Claim, error) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) GetState() interface{} } @@ -161,6 +169,7 @@ func AllCodes() []cid.Cid { (&state10{}).Code(), (&state11{}).Code(), (&state12{}).Code(), + (&state13{}).Code(), } } diff --git a/chain/actors/policy/policy.go b/chain/actors/policy/policy.go index 6d2b411546a..b8d23903c44 100644 --- a/chain/actors/policy/policy.go +++ b/chain/actors/policy/policy.go @@ -9,6 +9,7 @@ import ( builtin10 "github.com/filecoin-project/go-state-types/builtin" builtin11 "github.com/filecoin-project/go-state-types/builtin" builtin12 "github.com/filecoin-project/go-state-types/builtin" + builtin13 "github.com/filecoin-project/go-state-types/builtin" builtin8 "github.com/filecoin-project/go-state-types/builtin" builtin9 "github.com/filecoin-project/go-state-types/builtin" market10 "github.com/filecoin-project/go-state-types/builtin/v10/market" @@ -19,8 +20,11 @@ import ( verifreg11 "github.com/filecoin-project/go-state-types/builtin/v11/verifreg" market12 "github.com/filecoin-project/go-state-types/builtin/v12/market" miner12 "github.com/filecoin-project/go-state-types/builtin/v12/miner" - paych12 "github.com/filecoin-project/go-state-types/builtin/v12/paych" verifreg12 "github.com/filecoin-project/go-state-types/builtin/v12/verifreg" + market13 "github.com/filecoin-project/go-state-types/builtin/v13/market" + miner13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" + paych13 "github.com/filecoin-project/go-state-types/builtin/v13/paych" + verifreg13 "github.com/filecoin-project/go-state-types/builtin/v13/verifreg" market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" verifreg8 "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" @@ -59,14 +63,14 @@ import ( ) const ( - ChainFinality = miner12.ChainFinality + ChainFinality = miner13.ChainFinality SealRandomnessLookback = ChainFinality - PaychSettleDelay = paych12.SettleDelay - MaxPreCommitRandomnessLookback = builtin12.EpochsInDay + SealRandomnessLookback + PaychSettleDelay = paych13.SettleDelay + MaxPreCommitRandomnessLookback = builtin13.EpochsInDay + SealRandomnessLookback ) var ( - MarketDefaultAllocationTermBuffer = market12.MarketDefaultAllocationTermBuffer + MarketDefaultAllocationTermBuffer = market13.MarketDefaultAllocationTermBuffer ) // SetSupportedProofTypes sets supported proof types, across all actor versions. @@ -181,11 +185,13 @@ func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { miner12.PreCommitChallengeDelay = delay + miner13.PreCommitChallengeDelay = delay + } // TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. func GetPreCommitChallengeDelay() abi.ChainEpoch { - return miner12.PreCommitChallengeDelay + return miner13.PreCommitChallengeDelay } // SetConsensusMinerMinPower sets the minimum power of an individual miner must @@ -239,6 +245,10 @@ func SetConsensusMinerMinPower(p abi.StoragePower) { policy.ConsensusMinerMinPower = p } + for _, policy := range builtin13.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + } // SetMinVerifiedDealSize sets the minimum size of a verified deal. This should @@ -269,6 +279,8 @@ func SetMinVerifiedDealSize(size abi.StoragePower) { verifreg12.MinVerifiedDealSize = size + verifreg13.MinVerifiedDealSize = size + } func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { @@ -322,6 +334,10 @@ func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProo return miner12.MaxProveCommitDuration[t], nil + case actorstypes.Version13: + + return miner13.MaxProveCommitDuration[t], nil + default: return 0, xerrors.Errorf("unsupported actors version") } @@ -387,6 +403,11 @@ func SetProviderCollateralSupplyTarget(num, denom big.Int) { Denominator: denom, } + market13.ProviderCollateralSupplyTarget = builtin13.BigFrac{ + Numerator: num, + Denominator: denom, + } + } func DealProviderCollateralBounds( @@ -460,13 +481,18 @@ func DealProviderCollateralBounds( min, max := market12.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil + case actorstypes.Version13: + + min, max := market13.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + default: return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") } } func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { - return market12.DealDurationBounds(pieceSize) + return market13.DealDurationBounds(pieceSize) } // Sets the challenge window and scales the proving period to match (such that @@ -549,6 +575,13 @@ func SetWPoStChallengeWindow(period abi.ChainEpoch) { // scale it if we're scaling the challenge period. miner12.WPoStDisputeWindow = period * 30 + miner13.WPoStChallengeWindow = period + miner13.WPoStProvingPeriod = period * abi.ChainEpoch(miner13.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner13.WPoStDisputeWindow = period * 30 + } func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { @@ -603,6 +636,9 @@ func GetMaxSectorExpirationExtension(nv network.Version) (abi.ChainEpoch, error) case actorstypes.Version12: return miner12.MaxSectorExpirationExtension, nil + case actorstypes.Version13: + return miner13.MaxSectorExpirationExtension, nil + default: return 0, xerrors.Errorf("unsupported network version") } @@ -610,11 +646,11 @@ func GetMaxSectorExpirationExtension(nv network.Version) (abi.ChainEpoch, error) } func GetMinSectorExpiration() abi.ChainEpoch { - return miner12.MinSectorExpiration + return miner13.MinSectorExpiration } func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { - sectorsPerPart, err := builtin12.PoStProofWindowPoStPartitionSectors(p) + sectorsPerPart, err := builtin13.PoStProofWindowPoStPartitionSectors(p) if err != nil { return 0, err } @@ -623,7 +659,7 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e return 0, err } - return min(miner12.PoStedPartitionsMax, int(uint64(maxSectors)/sectorsPerPart)), nil + return min(miner13.PoStedPartitionsMax, int(uint64(maxSectors)/sectorsPerPart)), nil } func GetDefaultAggregationProof() abi.RegisteredAggregationProof { @@ -635,7 +671,7 @@ func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime } - return builtin12.SealProofPoliciesV11[proof].SectorMaxLifetime + return builtin13.SealProofPoliciesV11[proof].SectorMaxLifetime } func GetAddressedSectorsMax(nwVer network.Version) (int, error) { @@ -681,6 +717,9 @@ func GetAddressedSectorsMax(nwVer network.Version) (int, error) { case actorstypes.Version12: return miner12.AddressedSectorsMax, nil + case actorstypes.Version13: + return miner13.AddressedSectorsMax, nil + default: return 0, xerrors.Errorf("unsupported network version") } @@ -742,6 +781,10 @@ func GetDeclarationsMax(nwVer network.Version) (int, error) { return miner12.DeclarationsMax, nil + case actorstypes.Version13: + + return miner13.DeclarationsMax, nil + default: return 0, xerrors.Errorf("unsupported network version") } @@ -802,6 +845,10 @@ func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, ba return miner12.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + case actorstypes.Version13: + + return miner13.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + default: return big.Zero(), xerrors.Errorf("unsupported network version") } @@ -862,6 +909,10 @@ func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, base return miner12.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + case actorstypes.Version13: + + return miner13.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + default: return big.Zero(), xerrors.Errorf("unsupported network version") } diff --git a/chain/actors/version.go b/chain/actors/version.go index 92c0da00687..8d84bbc1d0c 100644 --- a/chain/actors/version.go +++ b/chain/actors/version.go @@ -14,9 +14,9 @@ const ({{range .actorVersions}} /* inline-gen start */ -var LatestVersion = 12 +var LatestVersion = 13 -var Versions = []int{0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} +var Versions = []int{0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} const ( Version0 Version = 0 @@ -31,6 +31,7 @@ const ( Version10 Version = 10 Version11 Version = 11 Version12 Version = 12 + Version13 Version = 13 ) /* inline-gen end */ diff --git a/chain/beacon/beacon.go b/chain/beacon/beacon.go index ff75b85794c..45baa662438 100644 --- a/chain/beacon/beacon.go +++ b/chain/beacon/beacon.go @@ -43,31 +43,31 @@ type BeaconPoint struct { // been posted on chain. type RandomBeacon interface { Entry(context.Context, uint64) <-chan Response - VerifyEntry(types.BeaconEntry, types.BeaconEntry) error + VerifyEntry(entry types.BeaconEntry, prevEntrySig []byte) error MaxBeaconRoundForEpoch(network.Version, abi.ChainEpoch) uint64 + IsChained() bool } func ValidateBlockValues(bSchedule Schedule, nv network.Version, h *types.BlockHeader, parentEpoch abi.ChainEpoch, prevEntry types.BeaconEntry) error { - { - parentBeacon := bSchedule.BeaconForEpoch(parentEpoch) - currBeacon := bSchedule.BeaconForEpoch(h.Height) - if parentBeacon != currBeacon { - if len(h.BeaconEntries) != 2 { - return xerrors.Errorf("expected two beacon entries at beacon fork, got %d", len(h.BeaconEntries)) - } - err := currBeacon.VerifyEntry(h.BeaconEntries[1], h.BeaconEntries[0]) - if err != nil { - return xerrors.Errorf("beacon at fork point invalid: (%v, %v): %w", - h.BeaconEntries[1], h.BeaconEntries[0], err) - } - return nil + + parentBeacon := bSchedule.BeaconForEpoch(parentEpoch) + currBeacon := bSchedule.BeaconForEpoch(h.Height) + // When we have "chained" beacons, two entries at a fork are required. + if parentBeacon != currBeacon && currBeacon.IsChained() { + if len(h.BeaconEntries) != 2 { + return xerrors.Errorf("expected two beacon entries at beacon fork, got %d", len(h.BeaconEntries)) + } + err := currBeacon.VerifyEntry(h.BeaconEntries[1], h.BeaconEntries[0].Data) + if err != nil { + return xerrors.Errorf("beacon at fork point invalid: (%v, %v): %w", + h.BeaconEntries[1], h.BeaconEntries[0], err) } + return nil } - // TODO: fork logic - b := bSchedule.BeaconForEpoch(h.Height) - maxRound := b.MaxBeaconRoundForEpoch(nv, h.Height) + maxRound := currBeacon.MaxBeaconRoundForEpoch(nv, h.Height) + // We don't expect to ever actually meet this condition if maxRound == prevEntry.Round { if len(h.BeaconEntries) != 0 { return xerrors.Errorf("expected not to have any beacon entries in this block, got %d", len(h.BeaconEntries)) @@ -79,23 +79,31 @@ func ValidateBlockValues(bSchedule Schedule, nv network.Version, h *types.BlockH return xerrors.Errorf("expected to have beacon entries in this block, but didn't find any") } - // Verify that the last beacon entry's round corresponds to the round we expect + // We skip verifying the genesis entry when randomness is "chained". + if currBeacon.IsChained() && prevEntry.Round == 0 { + return nil + } + last := h.BeaconEntries[len(h.BeaconEntries)-1] if last.Round != maxRound { return xerrors.Errorf("expected final beacon entry in block to be at round %d, got %d", maxRound, last.Round) } - // Verify that all other entries' rounds are as expected for the epochs in between parentEpoch and h.Height - for i, e := range h.BeaconEntries { - correctRound := b.MaxBeaconRoundForEpoch(nv, parentEpoch+abi.ChainEpoch(i)+1) - if e.Round != correctRound { - return xerrors.Errorf("unexpected beacon round %d, expected %d for epoch %d", e.Round, correctRound, parentEpoch+abi.ChainEpoch(i)) + // If the beacon is UNchained, verify that the block only includes the rounds we want for the epochs in between parentEpoch and h.Height + // For chained beacons, you must have all the rounds forming a valid chain with prevEntry, so we can skip this step + if !currBeacon.IsChained() { + // Verify that all other entries' rounds are as expected for the epochs in between parentEpoch and h.Height + for i, e := range h.BeaconEntries { + correctRound := currBeacon.MaxBeaconRoundForEpoch(nv, parentEpoch+abi.ChainEpoch(i)+1) + if e.Round != correctRound { + return xerrors.Errorf("unexpected beacon round %d, expected %d for epoch %d", e.Round, correctRound, parentEpoch+abi.ChainEpoch(i)) + } } } // Verify the beacon entries themselves for i, e := range h.BeaconEntries { - if err := b.VerifyEntry(e, prevEntry); err != nil { + if err := currBeacon.VerifyEntry(e, prevEntry.Data); err != nil { return xerrors.Errorf("beacon entry %d (%d - %x (%d)) was invalid: %w", i, e.Round, e.Data, len(e.Data), err) } prevEntry = e @@ -105,34 +113,32 @@ func ValidateBlockValues(bSchedule Schedule, nv network.Version, h *types.BlockH } func BeaconEntriesForBlock(ctx context.Context, bSchedule Schedule, nv network.Version, epoch abi.ChainEpoch, parentEpoch abi.ChainEpoch, prev types.BeaconEntry) ([]types.BeaconEntry, error) { - { - parentBeacon := bSchedule.BeaconForEpoch(parentEpoch) - currBeacon := bSchedule.BeaconForEpoch(epoch) - if parentBeacon != currBeacon { - // Fork logic - round := currBeacon.MaxBeaconRoundForEpoch(nv, epoch) - out := make([]types.BeaconEntry, 2) - rch := currBeacon.Entry(ctx, round-1) - res := <-rch - if res.Err != nil { - return nil, xerrors.Errorf("getting entry %d returned error: %w", round-1, res.Err) - } - out[0] = res.Entry - rch = currBeacon.Entry(ctx, round) - res = <-rch - if res.Err != nil { - return nil, xerrors.Errorf("getting entry %d returned error: %w", round, res.Err) - } - out[1] = res.Entry - return out, nil + // When we have "chained" beacons, two entries at a fork are required. + parentBeacon := bSchedule.BeaconForEpoch(parentEpoch) + currBeacon := bSchedule.BeaconForEpoch(epoch) + if parentBeacon != currBeacon && currBeacon.IsChained() { + // Fork logic + round := currBeacon.MaxBeaconRoundForEpoch(nv, epoch) + out := make([]types.BeaconEntry, 2) + rch := currBeacon.Entry(ctx, round-1) + res := <-rch + if res.Err != nil { + return nil, xerrors.Errorf("getting entry %d returned error: %w", round-1, res.Err) + } + out[0] = res.Entry + rch = currBeacon.Entry(ctx, round) + res = <-rch + if res.Err != nil { + return nil, xerrors.Errorf("getting entry %d returned error: %w", round, res.Err) } + out[1] = res.Entry + return out, nil } - beacon := bSchedule.BeaconForEpoch(epoch) - start := build.Clock.Now() - maxRound := beacon.MaxBeaconRoundForEpoch(nv, epoch) + maxRound := currBeacon.MaxBeaconRoundForEpoch(nv, epoch) + // We don't expect this to ever be the case if maxRound == prev.Round { return nil, nil } @@ -144,8 +150,8 @@ func BeaconEntriesForBlock(ctx context.Context, bSchedule Schedule, nv network.V var out []types.BeaconEntry for currEpoch := epoch; currEpoch > parentEpoch; currEpoch-- { - currRound := beacon.MaxBeaconRoundForEpoch(nv, currEpoch) - rch := beacon.Entry(ctx, currRound) + currRound := currBeacon.MaxBeaconRoundForEpoch(nv, currEpoch) + rch := currBeacon.Entry(ctx, currRound) select { case resp := <-rch: if resp.Err != nil { diff --git a/chain/beacon/drand/drand.go b/chain/beacon/drand/drand.go index 1b78daaddb1..852a1a31ce5 100644 --- a/chain/beacon/drand/drand.go +++ b/chain/beacon/drand/drand.go @@ -8,7 +8,7 @@ import ( dchain "github.com/drand/drand/chain" dclient "github.com/drand/drand/client" hclient "github.com/drand/drand/client/http" - "github.com/drand/drand/common/scheme" + dcrypto "github.com/drand/drand/crypto" dlog "github.com/drand/drand/log" gclient "github.com/drand/drand/lp2p/client" "github.com/drand/kyber" @@ -37,7 +37,8 @@ var log = logging.Logger("drand") // // The root trust for the Drand chain is configured from build.DrandChain. type DrandBeacon struct { - client dclient.Client + isChained bool + client dclient.Client pubkey kyber.Point @@ -47,10 +48,18 @@ type DrandBeacon struct { drandGenTime uint64 filGenTime uint64 filRoundTime uint64 + scheme *dcrypto.Scheme localCache *lru.Cache[uint64, *types.BeaconEntry] } +// IsChained tells us whether this particular beacon operates in "chained mode". Prior to Drand +// quicknet, beacons form a chain. After the introduction of quicknet, they do not, so we need to +// change how we interact with beacon entries. (See FIP-0063) +func (db *DrandBeacon) IsChained() bool { + return db.isChained +} + // DrandHTTPClient interface overrides the user agent used by drand type DrandHTTPClient interface { SetUserAgent(string) @@ -68,6 +77,10 @@ func (l *logger) Named(s string) dlog.Logger { return &logger{l.SugaredLogger.Named(s)} } +func (l *logger) AddCallerSkip(skip int) dlog.Logger { + return &logger{l.SugaredLogger.With(zap.AddCallerSkip(skip))} +} + func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes.DrandConfig) (*DrandBeacon, error) { if genesisTs == 0 { panic("what are you doing this cant be zero") @@ -112,10 +125,16 @@ func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes } db := &DrandBeacon{ + isChained: config.IsChained, client: client, localCache: lc, } + sch, err := dcrypto.GetSchemeByIDWithDefault(drandChain.Scheme) + if err != nil { + return nil, err + } + db.scheme = sch db.pubkey = drandChain.PublicKey db.interval = drandChain.Period db.drandGenTime = uint64(drandChain.GenesisTime) @@ -164,29 +183,26 @@ func (db *DrandBeacon) getCachedValue(round uint64) *types.BeaconEntry { return v } -func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntry) error { - if prev.Round == 0 { - // TODO handle genesis better - return nil - } - - if be := db.getCachedValue(curr.Round); be != nil { - if !bytes.Equal(curr.Data, be.Data) { +func (db *DrandBeacon) VerifyEntry(entry types.BeaconEntry, prevEntrySig []byte) error { + if be := db.getCachedValue(entry.Round); be != nil { + if !bytes.Equal(entry.Data, be.Data) { return xerrors.New("invalid beacon value, does not match cached good value") } // return no error if the value is in the cache already return nil } b := &dchain.Beacon{ - PreviousSig: prev.Data, - Round: curr.Round, - Signature: curr.Data, + PreviousSig: prevEntrySig, + Round: entry.Round, + Signature: entry.Data, } - err := dchain.NewVerifier(scheme.GetSchemeFromEnv()).VerifyBeacon(*b, db.pubkey) - if err == nil { - db.cacheValue(curr) + + err := db.scheme.VerifyBeacon(b, db.pubkey) + if err != nil { + return xerrors.Errorf("failed to verify beacon: %w", err) } + db.cacheValue(entry) return nil } diff --git a/chain/beacon/drand/drand_test.go b/chain/beacon/drand/drand_test.go index 355d6937f8e..c35c0da18f5 100644 --- a/chain/beacon/drand/drand_test.go +++ b/chain/beacon/drand/drand_test.go @@ -39,7 +39,15 @@ func TestMaxBeaconRoundForEpoch(t *testing.T) { todayTs := uint64(1652222222) db, err := NewDrandBeacon(todayTs, build.BlockDelaySecs, nil, build.DrandConfigs[build.DrandTestnet]) assert.NoError(t, err) + assert.True(t, db.IsChained()) mbr15 := db.MaxBeaconRoundForEpoch(network.Version15, 100) mbr16 := db.MaxBeaconRoundForEpoch(network.Version16, 100) assert.Equal(t, mbr15+1, mbr16) } + +func TestQuicknetIsChained(t *testing.T) { + todayTs := uint64(1652222222) + db, err := NewDrandBeacon(todayTs, build.BlockDelaySecs, nil, build.DrandConfigs[build.DrandQuicknet]) + assert.NoError(t, err) + assert.False(t, db.IsChained()) +} diff --git a/chain/beacon/mock.go b/chain/beacon/mock.go index 3f26da1097d..ab6a98ebfe9 100644 --- a/chain/beacon/mock.go +++ b/chain/beacon/mock.go @@ -20,6 +20,10 @@ type mockBeacon struct { interval time.Duration } +func (mb *mockBeacon) IsChained() bool { + return true +} + func NewMockBeacon(interval time.Duration) RandomBeacon { mb := &mockBeacon{interval: interval} @@ -47,7 +51,7 @@ func (mb *mockBeacon) Entry(ctx context.Context, index uint64) <-chan Response { return out } -func (mb *mockBeacon) VerifyEntry(from types.BeaconEntry, to types.BeaconEntry) error { +func (mb *mockBeacon) VerifyEntry(from types.BeaconEntry, _prevEntrySig []byte) error { // TODO: cache this, especially for bls oe := mb.entryForIndex(from.Round) if !bytes.Equal(from.Data, oe.Data) { diff --git a/chain/consensus/compute_state.go b/chain/consensus/compute_state.go index 4b993b3e72d..78369ec20b4 100644 --- a/chain/consensus/compute_state.go +++ b/chain/consensus/compute_state.go @@ -53,6 +53,7 @@ func NewActorRegistry() *vm.ActorRegistry { inv.Register(actorstypes.Version10, vm.ActorsVersionPredicate(actorstypes.Version10), builtin.MakeRegistry(actorstypes.Version10)) inv.Register(actorstypes.Version11, vm.ActorsVersionPredicate(actorstypes.Version11), builtin.MakeRegistry(actorstypes.Version11)) inv.Register(actorstypes.Version12, vm.ActorsVersionPredicate(actorstypes.Version12), builtin.MakeRegistry(actorstypes.Version12)) + inv.Register(actorstypes.Version13, vm.ActorsVersionPredicate(actorstypes.Version13), builtin.MakeRegistry(actorstypes.Version13)) return inv } diff --git a/chain/consensus/filcns/filecoin.go b/chain/consensus/filcns/filecoin.go index a6883a41afe..8565f361358 100644 --- a/chain/consensus/filcns/filecoin.go +++ b/chain/consensus/filcns/filecoin.go @@ -129,6 +129,7 @@ func (filec *FilecoinEC) ValidateBlock(ctx context.Context, b *types.FullBlock) return xerrors.Errorf("failed to get lookback tipset for block: %w", err) } + // TODO: Optimization: See https://github.com/filecoin-project/lotus/issues/11597 prevBeacon, err := filec.store.GetLatestBeaconEntry(ctx, baseTs) if err != nil { return xerrors.Errorf("failed to get latest beacon entry: %w", err) diff --git a/chain/consensus/filcns/upgrades.go b/chain/consensus/filcns/upgrades.go index f411c40b9d3..6478bf1d417 100644 --- a/chain/consensus/filcns/upgrades.go +++ b/chain/consensus/filcns/upgrades.go @@ -24,6 +24,7 @@ import ( nv19 "github.com/filecoin-project/go-state-types/builtin/v11/migration" system11 "github.com/filecoin-project/go-state-types/builtin/v11/system" nv21 "github.com/filecoin-project/go-state-types/builtin/v12/migration" + nv22 "github.com/filecoin-project/go-state-types/builtin/v13/migration" nv17 "github.com/filecoin-project/go-state-types/builtin/v9/migration" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/go-state-types/migration" @@ -280,12 +281,22 @@ func DefaultUpgradeSchedule() stmgr.UpgradeSchedule { Height: build.UpgradeWatermelonFixHeight, Network: network.Version21, Migration: buildUpgradeActorsV12MinerFix(calibnetv12BuggyMinerCID1, calibnetv12BuggyManifestCID2), + }, { + Height: build.UpgradeWatermelonFix2Height, + Network: network.Version21, + Migration: buildUpgradeActorsV12MinerFix(calibnetv12BuggyMinerCID2, calibnetv12CorrectManifestCID1), + }, { + Height: build.UpgradeDragonHeight, + Network: network.Version22, + Migration: UpgradeActorsV13, + PreMigrations: []stmgr.PreMigration{{ + PreMigration: PreUpgradeActorsV13, + StartWithin: 120, + DontStartWithin: 15, + StopWithin: 10, + }}, + Expensive: true, }, - { - Height: build.UpgradeWatermelonFix2Height, - Network: network.Version21, - Migration: buildUpgradeActorsV12MinerFix(calibnetv12BuggyMinerCID2, calibnetv12CorrectManifestCID1), - }, } for _, u := range updates { @@ -2146,6 +2157,110 @@ func buildUpgradeActorsV12MinerFix(oldBuggyMinerCID, newManifestCID cid.Cid) fun } } +func PreUpgradeActorsV13(ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := MigrationMaxWorkerCount + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + + lbts, lbRoot, err := stmgr.GetLookbackTipSetForRound(ctx, sm, ts, epoch) + if err != nil { + return xerrors.Errorf("error getting lookback ts for premigration: %w", err) + } + + config := migration.Config{ + MaxWorkers: uint(workerCount), + ProgressLogPeriod: time.Minute * 5, + UpgradeEpoch: build.UpgradeDragonHeight, + } + + _, err = upgradeActorsV13Common(ctx, sm, cache, lbRoot, epoch, lbts, config) + return err +} + +func UpgradeActorsV13(ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache, cb stmgr.ExecMonitor, + root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 2. + workerCount := MigrationMaxWorkerCount - 3 + if workerCount <= 0 { + workerCount = 1 + } + config := migration.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + UpgradeEpoch: build.UpgradeDragonHeight, + } + newRoot, err := upgradeActorsV13Common(ctx, sm, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v11 state: %w", err) + } + return newRoot, nil +} + +func upgradeActorsV13Common( + ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet, + config migration.Config, +) (cid.Cid, error) { + writeStore := blockstore.NewAutobatch(ctx, sm.ChainStore().StateBlockstore(), units.GiB/4) + adtStore := store.ActorStore(ctx, writeStore) + // ensure that the manifest is loaded in the blockstore + if err := bundle.LoadBundles(ctx, writeStore, actorstypes.Version13); err != nil { + return cid.Undef, xerrors.Errorf("failed to load manifest bundle: %w", err) + } + + // Load the state root. + var stateRoot types.StateRoot + if err := adtStore.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %w", err) + } + + if stateRoot.Version != types.StateTreeVersion5 { + return cid.Undef, xerrors.Errorf( + "expected state root version 5 for actors v13 upgrade, got %d", + stateRoot.Version, + ) + } + + manifest, ok := actors.GetManifest(actorstypes.Version13) + if !ok { + return cid.Undef, xerrors.Errorf("no manifest CID for v13 upgrade") + } + + // Perform the migration + newHamtRoot, err := nv22.MigrateStateTree(ctx, adtStore, manifest, stateRoot.Actors, epoch, config, + migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v11: %w", err) + } + + // Persist the result. + newRoot, err := adtStore.Put(ctx, &types.StateRoot{ + Version: types.StateTreeVersion5, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %w", err) + } + + // Persists the new tree and shuts down the flush worker + if err := writeStore.Flush(ctx); err != nil { + return cid.Undef, xerrors.Errorf("writeStore flush failed: %w", err) + } + + if err := writeStore.Shutdown(ctx); err != nil { + return cid.Undef, xerrors.Errorf("writeStore shutdown failed: %w", err) + } + + return newRoot, nil +} + //////////////////// // Example upgrade function if upgrade requires only code changes diff --git a/chain/events/cache.go b/chain/events/cache.go index 2eba1f085b7..67c59cb5052 100644 --- a/chain/events/cache.go +++ b/chain/events/cache.go @@ -26,7 +26,7 @@ type cache struct { uncachedAPI } -func newCache(api EventAPI, gcConfidence abi.ChainEpoch) *cache { +func newCache(api EventHelperAPI, gcConfidence abi.ChainEpoch) *cache { return &cache{ newTSCache(api, gcConfidence), newMessageCache(api), diff --git a/chain/events/events.go b/chain/events/events.go index c68b62a64e0..a9da32cbba2 100644 --- a/chain/events/events.go +++ b/chain/events/events.go @@ -28,7 +28,7 @@ type TipSetObserver interface { Revert(ctx context.Context, from, to *types.TipSet) error } -type EventAPI interface { +type EventHelperAPI interface { ChainNotify(context.Context) (<-chan []*api.HeadChange, error) ChainGetBlockMessages(context.Context, cid.Cid) (*api.BlockMessages, error) ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) @@ -47,7 +47,7 @@ type Events struct { *hcEvents } -func newEventsWithGCConfidence(ctx context.Context, api EventAPI, gcConfidence abi.ChainEpoch) (*Events, error) { +func newEventsWithGCConfidence(ctx context.Context, api EventHelperAPI, gcConfidence abi.ChainEpoch) (*Events, error) { cache := newCache(api, gcConfidence) ob := newObserver(cache, gcConfidence) @@ -61,7 +61,7 @@ func newEventsWithGCConfidence(ctx context.Context, api EventAPI, gcConfidence a return &Events{ob, he, headChange}, nil } -func NewEvents(ctx context.Context, api EventAPI) (*Events, error) { +func NewEvents(ctx context.Context, api EventHelperAPI) (*Events, error) { gcConfidence := 2 * build.ForkLengthThreshold return newEventsWithGCConfidence(ctx, api, gcConfidence) } diff --git a/chain/events/events_called.go b/chain/events/events_called.go index 3ac02b2f7fd..98e594c476b 100644 --- a/chain/events/events_called.go +++ b/chain/events/events_called.go @@ -69,7 +69,7 @@ type queuedEvent struct { // Manages chain head change events, which may be forward (new tipset added to // chain) or backward (chain branch discarded in favour of heavier branch) type hcEvents struct { - cs EventAPI + cs EventHelperAPI lk sync.Mutex lastTs *types.TipSet @@ -94,7 +94,7 @@ type hcEvents struct { watcherEvents } -func newHCEvents(api EventAPI, obs *observer) *hcEvents { +func newHCEvents(api EventHelperAPI, obs *observer) *hcEvents { e := &hcEvents{ cs: api, confQueue: map[triggerH]map[msgH][]*queuedEvent{}, @@ -326,14 +326,14 @@ type headChangeAPI interface { // watcherEvents watches for a state change type watcherEvents struct { - cs EventAPI + cs EventHelperAPI hcAPI headChangeAPI lk sync.RWMutex matchers map[triggerID]StateMatchFunc } -func newWatcherEvents(hcAPI headChangeAPI, cs EventAPI) watcherEvents { +func newWatcherEvents(hcAPI headChangeAPI, cs EventHelperAPI) watcherEvents { return watcherEvents{ cs: cs, hcAPI: hcAPI, @@ -426,14 +426,14 @@ func (we *watcherEvents) StateChanged(check CheckFunc, scHnd StateChangeHandler, // messageEvents watches for message calls to actors type messageEvents struct { - cs EventAPI + cs EventHelperAPI hcAPI headChangeAPI lk sync.RWMutex matchers map[triggerID]MsgMatchFunc } -func newMessageEvents(hcAPI headChangeAPI, cs EventAPI) messageEvents { +func newMessageEvents(hcAPI headChangeAPI, cs EventHelperAPI) messageEvents { return messageEvents{ cs: cs, hcAPI: hcAPI, diff --git a/chain/events/events_height.go b/chain/events/events_height.go index 5789be753a9..1296a7f2527 100644 --- a/chain/events/events_height.go +++ b/chain/events/events_height.go @@ -22,7 +22,7 @@ type heightHandler struct { } type heightEvents struct { - api EventAPI + api EventHelperAPI gcConfidence abi.ChainEpoch lk sync.Mutex @@ -31,7 +31,7 @@ type heightEvents struct { lastGc abi.ChainEpoch //nolint:structcheck } -func newHeightEvents(api EventAPI, obs *observer, gcConfidence abi.ChainEpoch) *heightEvents { +func newHeightEvents(api EventHelperAPI, obs *observer, gcConfidence abi.ChainEpoch) *heightEvents { he := &heightEvents{ api: api, gcConfidence: gcConfidence, diff --git a/chain/events/events_test.go b/chain/events/events_test.go index f16434355ee..a1309b90ab5 100644 --- a/chain/events/events_test.go +++ b/chain/events/events_test.go @@ -358,7 +358,7 @@ func (fcs *fakeCS) advance(rev, app, drop int, msgs map[int]cid.Cid, nulls ...in fcs.sub(nil, nil) } -var _ EventAPI = &fakeCS{} +var _ EventHelperAPI = &fakeCS{} func TestAt(t *testing.T) { //stm: @EVENTS_HEIGHT_CHAIN_AT_001, @EVENTS_HEIGHT_REVERT_001 diff --git a/chain/events/filter/event.go b/chain/events/filter/event.go index 24192a53e72..1669d840eec 100644 --- a/chain/events/filter/event.go +++ b/chain/events/filter/event.go @@ -27,14 +27,24 @@ func isIndexedValue(b uint8) bool { return b&(types.EventFlagIndexedKey|types.EventFlagIndexedValue) > 0 } -type EventFilter struct { - id types.FilterID - minHeight abi.ChainEpoch // minimum epoch to apply filter or -1 if no minimum - maxHeight abi.ChainEpoch // maximum epoch to apply filter or -1 if no maximum - tipsetCid cid.Cid - addresses []address.Address // list of f4 actor addresses that are extpected to emit the event - keys map[string][][]byte // map of key names to a list of alternate values that may match - maxResults int // maximum number of results to collect, 0 is unlimited +type AddressResolver func(context.Context, abi.ActorID, *types.TipSet) (address.Address, bool) + +type EventFilter interface { + Filter + + TakeCollectedEvents(context.Context) []*CollectedEvent + CollectEvents(context.Context, *TipSetEvents, bool, AddressResolver) error +} + +type eventFilter struct { + id types.FilterID + minHeight abi.ChainEpoch // minimum epoch to apply filter or -1 if no minimum + maxHeight abi.ChainEpoch // maximum epoch to apply filter or -1 if no maximum + tipsetCid cid.Cid + addresses []address.Address // list of actor addresses that are extpected to emit the event + + keysWithCodec map[string][]types.ActorEventBlock // map of key names to a list of alternate values that may match + maxResults int // maximum number of results to collect, 0 is unlimited mu sync.Mutex collected []*CollectedEvent @@ -42,11 +52,11 @@ type EventFilter struct { ch chan<- interface{} } -var _ Filter = (*EventFilter)(nil) +var _ Filter = (*eventFilter)(nil) type CollectedEvent struct { Entries []types.EventEntry - EmitterAddr address.Address // f4 address of emitter + EmitterAddr address.Address // address of emitter EventIdx int // index of the event within the list of emitted events Reverted bool Height abi.ChainEpoch @@ -55,24 +65,24 @@ type CollectedEvent struct { MsgCid cid.Cid // cid of message that produced event } -func (f *EventFilter) ID() types.FilterID { +func (f *eventFilter) ID() types.FilterID { return f.id } -func (f *EventFilter) SetSubChannel(ch chan<- interface{}) { +func (f *eventFilter) SetSubChannel(ch chan<- interface{}) { f.mu.Lock() defer f.mu.Unlock() f.ch = ch f.collected = nil } -func (f *EventFilter) ClearSubChannel() { +func (f *eventFilter) ClearSubChannel() { f.mu.Lock() defer f.mu.Unlock() f.ch = nil } -func (f *EventFilter) CollectEvents(ctx context.Context, te *TipSetEvents, revert bool, resolver func(ctx context.Context, emitter abi.ActorID, ts *types.TipSet) (address.Address, bool)) error { +func (f *eventFilter) CollectEvents(ctx context.Context, te *TipSetEvents, revert bool, resolver AddressResolver) error { if !f.matchTipset(te) { return nil } @@ -137,13 +147,13 @@ func (f *EventFilter) CollectEvents(ctx context.Context, te *TipSetEvents, rever return nil } -func (f *EventFilter) setCollectedEvents(ces []*CollectedEvent) { +func (f *eventFilter) setCollectedEvents(ces []*CollectedEvent) { f.mu.Lock() f.collected = ces f.mu.Unlock() } -func (f *EventFilter) TakeCollectedEvents(ctx context.Context) []*CollectedEvent { +func (f *eventFilter) TakeCollectedEvents(ctx context.Context) []*CollectedEvent { f.mu.Lock() collected := f.collected f.collected = nil @@ -153,14 +163,14 @@ func (f *EventFilter) TakeCollectedEvents(ctx context.Context) []*CollectedEvent return collected } -func (f *EventFilter) LastTaken() time.Time { +func (f *eventFilter) LastTaken() time.Time { f.mu.Lock() defer f.mu.Unlock() return f.lastTaken } // matchTipset reports whether this filter matches the given tipset -func (f *EventFilter) matchTipset(te *TipSetEvents) bool { +func (f *eventFilter) matchTipset(te *TipSetEvents) bool { if f.tipsetCid != cid.Undef { tsCid, err := te.Cid() if err != nil { @@ -178,7 +188,7 @@ func (f *EventFilter) matchTipset(te *TipSetEvents) bool { return true } -func (f *EventFilter) matchAddress(o address.Address) bool { +func (f *eventFilter) matchAddress(o address.Address) bool { if len(f.addresses) == 0 { return true } @@ -193,8 +203,8 @@ func (f *EventFilter) matchAddress(o address.Address) bool { return false } -func (f *EventFilter) matchKeys(ees []types.EventEntry) bool { - if len(f.keys) == 0 { +func (f *eventFilter) matchKeys(ees []types.EventEntry) bool { + if len(f.keysWithCodec) == 0 { return true } // TODO: optimize this naive algorithm @@ -216,19 +226,19 @@ func (f *EventFilter) matchKeys(ees []types.EventEntry) bool { continue } - wantlist, ok := f.keys[keyname] + wantlist, ok := f.keysWithCodec[keyname] if !ok || len(wantlist) == 0 { continue } for _, w := range wantlist { - if bytes.Equal(w, ee.Value) { + if bytes.Equal(w.Value, ee.Value) && w.Codec == ee.Codec { matched[keyname] = true break } } - if len(matched) == len(f.keys) { + if len(matched) == len(f.keysWithCodec) { // all keys have been matched return true } @@ -296,7 +306,7 @@ type EventFilterManager struct { EventIndex *EventIndex mu sync.Mutex // guards mutations to filters - filters map[types.FilterID]*EventFilter + filters map[types.FilterID]EventFilter currentHeight abi.ChainEpoch } @@ -362,7 +372,8 @@ func (m *EventFilterManager) Revert(ctx context.Context, from, to *types.TipSet) return nil } -func (m *EventFilterManager) Install(ctx context.Context, minHeight, maxHeight abi.ChainEpoch, tipsetCid cid.Cid, addresses []address.Address, keys map[string][][]byte) (*EventFilter, error) { +func (m *EventFilterManager) Install(ctx context.Context, minHeight, maxHeight abi.ChainEpoch, tipsetCid cid.Cid, addresses []address.Address, + keysWithCodec map[string][]types.ActorEventBlock, excludeReverted bool) (EventFilter, error) { m.mu.Lock() currentHeight := m.currentHeight m.mu.Unlock() @@ -376,26 +387,26 @@ func (m *EventFilterManager) Install(ctx context.Context, minHeight, maxHeight a return nil, xerrors.Errorf("new filter id: %w", err) } - f := &EventFilter{ - id: id, - minHeight: minHeight, - maxHeight: maxHeight, - tipsetCid: tipsetCid, - addresses: addresses, - keys: keys, - maxResults: m.MaxFilterResults, + f := &eventFilter{ + id: id, + minHeight: minHeight, + maxHeight: maxHeight, + tipsetCid: tipsetCid, + addresses: addresses, + keysWithCodec: keysWithCodec, + maxResults: m.MaxFilterResults, } if m.EventIndex != nil && minHeight != -1 && minHeight < currentHeight { // Filter needs historic events - if err := m.EventIndex.PrefillFilter(ctx, f, true); err != nil { + if err := m.EventIndex.prefillFilter(ctx, f, excludeReverted); err != nil { return nil, err } } m.mu.Lock() if m.filters == nil { - m.filters = make(map[types.FilterID]*EventFilter) + m.filters = make(map[types.FilterID]EventFilter) } m.filters[id] = f m.mu.Unlock() diff --git a/chain/events/filter/event_test.go b/chain/events/filter/event_test.go index 329573bc13d..c650b71eb6f 100644 --- a/chain/events/filter/event_test.go +++ b/chain/events/filter/event_test.go @@ -22,6 +22,19 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) +func keysToKeysWithCodec(keys map[string][][]byte) map[string][]types.ActorEventBlock { + keysWithCodec := make(map[string][]types.ActorEventBlock) + for k, v := range keys { + for _, vv := range v { + keysWithCodec[k] = append(keysWithCodec[k], types.ActorEventBlock{ + Codec: cid.Raw, + Value: vv, + }) + } + } + return keysWithCodec +} + func TestEventFilterCollectEvents(t *testing.T) { rng := pseudo.New(pseudo.NewSource(299792458)) a1 := randomF4Addr(t, rng) @@ -73,13 +86,13 @@ func TestEventFilterCollectEvents(t *testing.T) { testCases := []struct { name string - filter *EventFilter + filter *eventFilter te *TipSetEvents want []*CollectedEvent }{ { name: "nomatch tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14001, maxHeight: -1, }, @@ -88,7 +101,7 @@ func TestEventFilterCollectEvents(t *testing.T) { }, { name: "nomatch tipset max height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: 13999, }, @@ -97,7 +110,7 @@ func TestEventFilterCollectEvents(t *testing.T) { }, { name: "match tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14000, maxHeight: -1, }, @@ -106,7 +119,7 @@ func TestEventFilterCollectEvents(t *testing.T) { }, { name: "match tipset cid", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, tipsetCid: cid14000, @@ -116,7 +129,7 @@ func TestEventFilterCollectEvents(t *testing.T) { }, { name: "nomatch address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a2}, @@ -126,7 +139,7 @@ func TestEventFilterCollectEvents(t *testing.T) { }, { name: "match address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a1}, @@ -136,124 +149,124 @@ func TestEventFilterCollectEvents(t *testing.T) { }, { name: "match one entry", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "match one entry with alternate values", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), []byte("approval"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "nomatch one entry by missing value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry by missing key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "method": { []byte("approval"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "match one entry with multiple keys", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr1"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "nomatch one entry with one mismatching key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "approver": { []byte("addr1"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one mismatching value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr2"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one unindexed key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "amount": { []byte("2988181"), }, - }, + }), }, te: events14000, want: noCollectedEvents, diff --git a/chain/events/filter/index.go b/chain/events/filter/index.go index 0f4a54c5b95..49be57c7964 100644 --- a/chain/events/filter/index.go +++ b/chain/events/filter/index.go @@ -501,7 +501,7 @@ func (ei *EventIndex) CollectEvents(ctx context.Context, te *TipSetEvents, rever } // PrefillFilter fills a filter's collection of events from the historic index -func (ei *EventIndex) PrefillFilter(ctx context.Context, f *EventFilter, excludeReverted bool) error { +func (ei *EventIndex) prefillFilter(ctx context.Context, f *eventFilter, excludeReverted bool) error { clauses := []string{} values := []any{} joins := []string{} @@ -534,9 +534,9 @@ func (ei *EventIndex) PrefillFilter(ctx context.Context, f *EventFilter, exclude clauses = append(clauses, "("+strings.Join(subclauses, " OR ")+")") } - if len(f.keys) > 0 { + if len(f.keysWithCodec) > 0 { join := 0 - for key, vals := range f.keys { + for key, vals := range f.keysWithCodec { if len(vals) > 0 { join++ joinAlias := fmt.Sprintf("ee%d", join) @@ -545,8 +545,8 @@ func (ei *EventIndex) PrefillFilter(ctx context.Context, f *EventFilter, exclude values = append(values, key) subclauses := []string{} for _, val := range vals { - subclauses = append(subclauses, fmt.Sprintf("%s.value=?", joinAlias)) - values = append(values, val) + subclauses = append(subclauses, fmt.Sprintf("(%s.value=? AND %[1]s.codec=?)", joinAlias)) + values = append(values, val.Value, val.Codec) } clauses = append(clauses, "("+strings.Join(subclauses, " OR ")+")") } diff --git a/chain/events/filter/index_test.go b/chain/events/filter/index_test.go index f9b1b14adae..ce3f7b78a03 100644 --- a/chain/events/filter/index_test.go +++ b/chain/events/filter/index_test.go @@ -82,13 +82,13 @@ func TestEventIndexPrefillFilter(t *testing.T) { testCases := []struct { name string - filter *EventFilter + filter *eventFilter te *TipSetEvents want []*CollectedEvent }{ { name: "nomatch tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14001, maxHeight: -1, }, @@ -97,7 +97,7 @@ func TestEventIndexPrefillFilter(t *testing.T) { }, { name: "nomatch tipset max height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: 13999, }, @@ -106,7 +106,7 @@ func TestEventIndexPrefillFilter(t *testing.T) { }, { name: "match tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14000, maxHeight: -1, }, @@ -115,7 +115,7 @@ func TestEventIndexPrefillFilter(t *testing.T) { }, { name: "match tipset cid", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, tipsetCid: cid14000, @@ -125,7 +125,7 @@ func TestEventIndexPrefillFilter(t *testing.T) { }, { name: "nomatch address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a2}, @@ -135,7 +135,7 @@ func TestEventIndexPrefillFilter(t *testing.T) { }, { name: "match address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a1}, @@ -145,124 +145,124 @@ func TestEventIndexPrefillFilter(t *testing.T) { }, { name: "match one entry", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "match one entry with alternate values", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), []byte("approval"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "nomatch one entry by missing value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry by missing key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "method": { []byte("approval"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "match one entry with multiple keys", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr1"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "nomatch one entry with one mismatching key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "approver": { []byte("addr1"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one mismatching value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr2"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one unindexed key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "amount": { []byte("2988181"), }, - }, + }), }, te: events14000, want: noCollectedEvents, @@ -272,7 +272,7 @@ func TestEventIndexPrefillFilter(t *testing.T) { for _, tc := range testCases { tc := tc // appease lint t.Run(tc.name, func(t *testing.T) { - if err := ei.PrefillFilter(context.Background(), tc.filter, false); err != nil { + if err := ei.prefillFilter(context.Background(), tc.filter, false); err != nil { require.NoError(t, err, "prefill filter events") } @@ -409,13 +409,13 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { inclusiveTestCases := []struct { name string - filter *EventFilter + filter *eventFilter te *TipSetEvents want []*CollectedEvent }{ { name: "nomatch tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14001, maxHeight: -1, }, @@ -424,7 +424,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "nomatch tipset max height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: 13999, }, @@ -433,7 +433,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14000, maxHeight: -1, }, @@ -442,7 +442,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match tipset cid", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, tipsetCid: cid14000, @@ -452,7 +452,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match tipset cid", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, tipsetCid: reveredCID14000, @@ -462,7 +462,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "nomatch address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a3}, @@ -472,7 +472,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match address 2", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a2}, @@ -482,7 +482,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match address 1", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a1}, @@ -492,155 +492,155 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match one entry", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, - }, + }), }, te: events14000, want: twoCollectedEvent, }, { name: "match one entry with alternate values", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), []byte("approval"), }, - }, + }), }, te: events14000, want: twoCollectedEvent, }, { name: "nomatch one entry by missing value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry by missing key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "method": { []byte("approval"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "match one entry with multiple keys", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr1"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "match one entry with multiple keys", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr2"), }, - }, + }), }, te: revertedEvents14000, want: oneCollectedRevertedEvent, }, { name: "nomatch one entry with one mismatching key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "approver": { []byte("addr1"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one mismatching value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr3"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one unindexed key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "amount": { []byte("2988181"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one unindexed key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "amount": { []byte("2988182"), }, - }, + }), }, te: events14000, want: noCollectedEvents, @@ -649,13 +649,13 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { exclusiveTestCases := []struct { name string - filter *EventFilter + filter *eventFilter te *TipSetEvents want []*CollectedEvent }{ { name: "nomatch tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14001, maxHeight: -1, }, @@ -664,7 +664,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "nomatch tipset max height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: 13999, }, @@ -673,7 +673,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match tipset min height", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: 14000, maxHeight: -1, }, @@ -682,7 +682,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match tipset cid", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, tipsetCid: cid14000, @@ -692,7 +692,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match tipset cid but reverted", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, tipsetCid: reveredCID14000, @@ -702,7 +702,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "nomatch address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a3}, @@ -712,7 +712,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "nomatch address 2 but reverted", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a2}, @@ -722,7 +722,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match address", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, addresses: []address.Address{a1}, @@ -732,141 +732,141 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { }, { name: "match one entry", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "match one entry with alternate values", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), []byte("approval"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "nomatch one entry by missing value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("cancel"), []byte("propose"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry by missing key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "method": { []byte("approval"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "match one entry with multiple keys", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr1"), }, - }, + }), }, te: events14000, want: oneCollectedEvent, }, { name: "nomatch one entry with one mismatching key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "approver": { []byte("addr1"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with matching reverted value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr2"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one mismatching value", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "type": { []byte("approval"), }, "signer": { []byte("addr3"), }, - }, + }), }, te: events14000, want: noCollectedEvents, }, { name: "nomatch one entry with one unindexed key", - filter: &EventFilter{ + filter: &eventFilter{ minHeight: -1, maxHeight: -1, - keys: map[string][][]byte{ + keysWithCodec: keysToKeysWithCodec(map[string][][]byte{ "amount": { []byte("2988181"), }, - }, + }), }, te: events14000, want: noCollectedEvents, @@ -876,7 +876,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { for _, tc := range inclusiveTestCases { tc := tc // appease lint t.Run(tc.name, func(t *testing.T) { - if err := ei.PrefillFilter(context.Background(), tc.filter, false); err != nil { + if err := ei.prefillFilter(context.Background(), tc.filter, false); err != nil { require.NoError(t, err, "prefill filter events") } @@ -888,7 +888,7 @@ func TestEventIndexPrefillFilterExcludeReverted(t *testing.T) { for _, tc := range exclusiveTestCases { tc := tc // appease lint t.Run(tc.name, func(t *testing.T) { - if err := ei.PrefillFilter(context.Background(), tc.filter, true); err != nil { + if err := ei.prefillFilter(context.Background(), tc.filter, true); err != nil { require.NoError(t, err, "prefill filter events") } diff --git a/chain/events/message_cache.go b/chain/events/message_cache.go index 96f6bcbd761..24b3c934aaa 100644 --- a/chain/events/message_cache.go +++ b/chain/events/message_cache.go @@ -11,13 +11,13 @@ import ( ) type messageCache struct { - api EventAPI + api EventHelperAPI blockMsgLk sync.Mutex blockMsgCache *arc.ARCCache[cid.Cid, *api.BlockMessages] } -func newMessageCache(a EventAPI) *messageCache { +func newMessageCache(a EventHelperAPI) *messageCache { blsMsgCache, _ := arc.NewARC[cid.Cid, *api.BlockMessages](500) return &messageCache{ diff --git a/chain/events/observer.go b/chain/events/observer.go index 4462185858f..0b021f9965b 100644 --- a/chain/events/observer.go +++ b/chain/events/observer.go @@ -17,7 +17,7 @@ import ( ) type observer struct { - api EventAPI + api EventHelperAPI gcConfidence abi.ChainEpoch diff --git a/chain/events/state/predicates.go b/chain/events/state/predicates.go index ff05156a6f9..e4e8b8f7e41 100644 --- a/chain/events/state/predicates.go +++ b/chain/events/state/predicates.go @@ -242,7 +242,7 @@ func (sp *StatePredicates) DealStateChangedForIDs(dealIds []abi.DealID) DiffDeal } existenceChanged := oldFound != newFound - valueChanged := (oldFound && newFound) && *oldDeal != *newDeal + valueChanged := (oldFound && newFound) && !oldDeal.Equals(newDeal) if existenceChanged || valueChanged { changedDeals[dealID] = market.DealStateChange{ID: dealID, From: oldDeal, To: newDeal} } diff --git a/chain/events/state/predicates_test.go b/chain/events/state/predicates_test.go index 52fc2668a2b..79c1d2e0eae 100644 --- a/chain/events/state/predicates_test.go +++ b/chain/events/state/predicates_test.go @@ -177,11 +177,11 @@ func TestMarketPredicates(t *testing.T) { require.Contains(t, changedDealIDs, abi.DealID(1)) require.Contains(t, changedDealIDs, abi.DealID(2)) deal1 := changedDealIDs[abi.DealID(1)] - if deal1.From.LastUpdatedEpoch != 2 || deal1.To.LastUpdatedEpoch != 3 { + if deal1.From.LastUpdatedEpoch() != 2 || deal1.To.LastUpdatedEpoch() != 3 { t.Fatal("Unexpected change to LastUpdatedEpoch") } deal2 := changedDealIDs[abi.DealID(2)] - if deal2.From.LastUpdatedEpoch != 5 || deal2.To != nil { + if deal2.From.LastUpdatedEpoch() != 5 || deal2.To != nil { t.Fatal("Expected To to be nil") } @@ -243,8 +243,8 @@ func TestMarketPredicates(t *testing.T) { require.Len(t, changedDeals.Modified, 1) require.Equal(t, abi.DealID(1), changedDeals.Modified[0].ID) - require.True(t, dealEquality(*newDeal1, *changedDeals.Modified[0].To)) - require.True(t, dealEquality(*oldDeal1, *changedDeals.Modified[0].From)) + require.True(t, dealEquality(*newDeal1, changedDeals.Modified[0].To)) + require.True(t, dealEquality(*oldDeal1, changedDeals.Modified[0].From)) require.Equal(t, abi.DealID(2), changedDeals.Removed[0].ID) }) @@ -579,7 +579,7 @@ func newSectorPreCommitInfo(sectorNo abi.SectorNumber, sealed cid.Cid, expiratio } func dealEquality(expected market2.DealState, actual market.DealState) bool { - return expected.LastUpdatedEpoch == actual.LastUpdatedEpoch && - expected.SectorStartEpoch == actual.SectorStartEpoch && - expected.SlashEpoch == actual.SlashEpoch + return expected.LastUpdatedEpoch == actual.LastUpdatedEpoch() && + expected.SectorStartEpoch == actual.SectorStartEpoch() && + expected.SlashEpoch == actual.SlashEpoch() } diff --git a/chain/exchange/cbor_gen.go b/chain/exchange/cbor_gen.go index 71c75869dba..4aa74f0c0f5 100644 --- a/chain/exchange/cbor_gen.go +++ b/chain/exchange/cbor_gen.go @@ -35,7 +35,7 @@ func (t *Request) MarshalCBOR(w io.Writer) error { } // t.Head ([]cid.Cid) (slice) - if len(t.Head) > cbg.MaxLength { + if len(t.Head) > 8192 { return xerrors.Errorf("Slice value in field t.Head was too long") } @@ -95,7 +95,7 @@ func (t *Request) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Head: array too large (%d)", extra) } @@ -126,9 +126,9 @@ func (t *Request) UnmarshalCBOR(r io.Reader) (err error) { t.Head[i] = c } + } } - // t.Length (uint64) (uint64) { @@ -181,7 +181,7 @@ func (t *Response) MarshalCBOR(w io.Writer) error { } // t.ErrorMessage (string) (string) - if len(t.ErrorMessage) > cbg.MaxLength { + if len(t.ErrorMessage) > 8192 { return xerrors.Errorf("Value in field t.ErrorMessage was too long") } @@ -193,7 +193,7 @@ func (t *Response) MarshalCBOR(w io.Writer) error { } // t.Chain ([]*exchange.BSTipSet) (slice) - if len(t.Chain) > cbg.MaxLength { + if len(t.Chain) > 8192 { return xerrors.Errorf("Slice value in field t.Chain was too long") } @@ -204,6 +204,7 @@ func (t *Response) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -248,7 +249,7 @@ func (t *Response) UnmarshalCBOR(r io.Reader) (err error) { // t.ErrorMessage (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -262,7 +263,7 @@ func (t *Response) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Chain: array too large (%d)", extra) } @@ -300,9 +301,9 @@ func (t *Response) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - return nil } @@ -332,10 +333,11 @@ func (t *CompactedMessagesCBOR) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.BlsIncludes ([]exchange.messageIndices) (slice) - if len(t.BlsIncludes) > cbg.MaxLength { + if len(t.BlsIncludes) > 8192 { return xerrors.Errorf("Slice value in field t.BlsIncludes was too long") } @@ -346,6 +348,7 @@ func (t *CompactedMessagesCBOR) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Secpk ([]*types.SignedMessage) (slice) @@ -360,10 +363,11 @@ func (t *CompactedMessagesCBOR) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.SecpkIncludes ([]exchange.messageIndices) (slice) - if len(t.SecpkIncludes) > cbg.MaxLength { + if len(t.SecpkIncludes) > 8192 { return xerrors.Errorf("Slice value in field t.SecpkIncludes was too long") } @@ -374,6 +378,7 @@ func (t *CompactedMessagesCBOR) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -446,9 +451,9 @@ func (t *CompactedMessagesCBOR) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.BlsIncludes ([]exchange.messageIndices) (slice) maj, extra, err = cr.ReadHeader() @@ -456,7 +461,7 @@ func (t *CompactedMessagesCBOR) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.BlsIncludes: array too large (%d)", extra) } @@ -484,9 +489,9 @@ func (t *CompactedMessagesCBOR) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Secpk ([]*types.SignedMessage) (slice) maj, extra, err = cr.ReadHeader() @@ -532,9 +537,9 @@ func (t *CompactedMessagesCBOR) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.SecpkIncludes ([]exchange.messageIndices) (slice) maj, extra, err = cr.ReadHeader() @@ -542,7 +547,7 @@ func (t *CompactedMessagesCBOR) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.SecpkIncludes: array too large (%d)", extra) } @@ -570,9 +575,9 @@ func (t *CompactedMessagesCBOR) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - return nil } @@ -591,7 +596,7 @@ func (t *BSTipSet) MarshalCBOR(w io.Writer) error { } // t.Blocks ([]*types.BlockHeader) (slice) - if len(t.Blocks) > cbg.MaxLength { + if len(t.Blocks) > 8192 { return xerrors.Errorf("Slice value in field t.Blocks was too long") } @@ -602,6 +607,7 @@ func (t *BSTipSet) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Messages (exchange.CompactedMessages) (struct) @@ -641,7 +647,7 @@ func (t *BSTipSet) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Blocks: array too large (%d)", extra) } @@ -679,9 +685,9 @@ func (t *BSTipSet) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Messages (exchange.CompactedMessages) (struct) { diff --git a/chain/gen/genesis/miners.go b/chain/gen/genesis/miners.go index df8900cab8c..9ae39cf35cb 100644 --- a/chain/gen/genesis/miners.go +++ b/chain/gen/genesis/miners.go @@ -374,13 +374,33 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal // Commit sectors { for pi, preseal := range m.Sectors { - params := &minertypes.SectorPreCommitInfo{ - SealProof: preseal.ProofType, - SectorNumber: preseal.SectorID, - SealedCID: preseal.CommR, - SealRandEpoch: -1, - DealIDs: []abi.DealID{minerInfos[i].dealIDs[pi]}, - Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally! + var paramEnc []byte + var preCommitMethodNum abi.MethodNum + if nv >= network.Version22 { + paramEnc = mustEnc(&miner.PreCommitSectorBatchParams2{ + Sectors: []miner.SectorPreCommitInfo{ + { + SealProof: preseal.ProofType, + SectorNumber: preseal.SectorID, + SealedCID: preseal.CommR, + SealRandEpoch: -1, + DealIDs: []abi.DealID{minerInfos[i].dealIDs[pi]}, + Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally! + UnsealedCid: &preseal.CommD, + }, + }, + }) + preCommitMethodNum = builtintypes.MethodsMiner.PreCommitSectorBatch2 + } else { + paramEnc = mustEnc(&minertypes.SectorPreCommitInfo{ + SealProof: preseal.ProofType, + SectorNumber: preseal.SectorID, + SealedCID: preseal.CommR, + SealRandEpoch: -1, + DealIDs: []abi.DealID{minerInfos[i].dealIDs[pi]}, + Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally! + }) + preCommitMethodNum = builtintypes.MethodsMiner.PreCommitSector } sectorWeight := minerInfos[i].sectorWeight[pi] @@ -463,7 +483,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal pledge = big.Add(pcd, pledge) - _, err = doExecValue(ctx, genesisVm, minerInfos[i].maddr, m.Worker, pledge, builtintypes.MethodsMiner.PreCommitSector, mustEnc(params)) + _, err = doExecValue(ctx, genesisVm, minerInfos[i].maddr, m.Worker, pledge, preCommitMethodNum, paramEnc) if err != nil { return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err) } diff --git a/chain/state/statetree.go b/chain/state/statetree.go index 61d7d500a87..1a6497d04b9 100644 --- a/chain/state/statetree.go +++ b/chain/state/statetree.go @@ -156,7 +156,7 @@ func VersionForNetwork(ver network.Version) (types.StateTreeVersion, error) { case network.Version13, network.Version14, network.Version15, network.Version16, network.Version17: return types.StateTreeVersion4, nil - case network.Version18, network.Version19, network.Version20, network.Version21: + case network.Version18, network.Version19, network.Version20, network.Version21, network.Version22: return types.StateTreeVersion5, nil default: diff --git a/chain/stmgr/actors.go b/chain/stmgr/actors.go index 56744fa7489..f1d615e8d4f 100644 --- a/chain/stmgr/actors.go +++ b/chain/stmgr/actors.go @@ -284,7 +284,7 @@ func GetStorageDeal(ctx context.Context, sm *StateManager, dealID abi.DealID, ts return &api.MarketDeal{ Proposal: *proposal, - State: *st, + State: api.MakeDealState(st), }, nil } diff --git a/chain/stmgr/forks.go b/chain/stmgr/forks.go index 2f18bde8271..6d6f9ef65f3 100644 --- a/chain/stmgr/forks.go +++ b/chain/stmgr/forks.go @@ -200,10 +200,6 @@ func (sm *StateManager) HandleStateForks(ctx context.Context, root cid.Cid, heig log.Errorw("FAILED migration", "height", height, "from", root, "error", err) return cid.Undef, err } - // Yes, we update the cache, even for the final upgrade epoch. Why? Reverts. This - // can save us a _lot_ of time because very few actors will have changed if we - // do a small revert then need to re-run the migration. - u.cache.Update(tmpCache) log.Warnw("COMPLETED migration", "height", height, "from", root, diff --git a/chain/types/actor_event.go b/chain/types/actor_event.go new file mode 100644 index 00000000000..bf95189e19c --- /dev/null +++ b/chain/types/actor_event.go @@ -0,0 +1,67 @@ +package types + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" +) + +type ActorEventBlock struct { + // The value codec to match when filtering event values. + Codec uint64 `json:"codec"` + + // The value to want to match on associated with the corresponding "event key" + // when filtering events. + // Should be a byte array encoded with the specified codec. + // Assumes base64 encoding when converting to/from JSON strings. + Value []byte `json:"value"` +} + +type ActorEventFilter struct { + // Matches events from one of these actors, or any actor if empty. + // For now, this MUST be a Filecoin address. + Addresses []address.Address `json:"addresses,omitempty"` + + // Matches events with the specified key/values, or all events if empty. + // If the value is an empty slice, the filter will match on the key only, accepting any value. + Fields map[string][]ActorEventBlock `json:"fields,omitempty"` + + // The height of the earliest tipset to include in the query. If empty, the query starts at the + // last finalized tipset. + // NOTE: In a future upgrade, this will be strict when set and will result in an error if a filter + // cannot be fulfilled by the depth of history available in the node. Currently, the node will + // nott return an error, but will return starting from the epoch it has data for. + FromHeight *abi.ChainEpoch `json:"fromHeight,omitempty"` + + // The height of the latest tipset to include in the query. If empty, the query ends at the + // latest tipset. + ToHeight *abi.ChainEpoch `json:"toHeight,omitempty"` + + // Restricts events returned to those emitted from messages contained in this tipset. + // If `TipSetKey` is legt empty in the filter criteria, then neither `FromHeight` nor `ToHeight` are allowed. + TipSetKey *TipSetKey `json:"tipsetKey,omitempty"` +} + +type ActorEvent struct { + // Event entries in log form. + Entries []EventEntry `json:"entries"` + + // Filecoin address of the actor that emitted this event. + // NOTE: In a future upgrade, this will change to always be an ID address. Currently this will be + // either the f4 address, or ID address if an f4 is not available for this actor. + Emitter address.Address `json:"emitter"` + + // Reverted is set to true if the message that produced this event was reverted because of a network re-org + // in that case, the event should be considered as reverted as well. + Reverted bool `json:"reverted"` + + // Height of the tipset that contained the message that produced this event. + Height abi.ChainEpoch `json:"height"` + + // The tipset that contained the message that produced this event. + TipSetKey TipSetKey `json:"tipsetKey"` + + // CID of message that produced this event. + MsgCid cid.Cid `json:"msgCid"` +} diff --git a/chain/types/actor_event_test.go b/chain/types/actor_event_test.go new file mode 100644 index 00000000000..8c50b171754 --- /dev/null +++ b/chain/types/actor_event_test.go @@ -0,0 +1,125 @@ +package types + +import ( + "encoding/json" + pseudo "math/rand" + "testing" + + "github.com/ipfs/go-cid" + mh "github.com/multiformats/go-multihash" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" +) + +func TestJSONMarshalling(t *testing.T) { + rng := pseudo.New(pseudo.NewSource(0)) + t.Run("actor event with entries", + testJsonMarshalling( + ActorEvent{ + Entries: []EventEntry{ + { + Key: "key1", + Codec: 0x51, + Value: []byte("value1"), + }, + { + Key: "key2", + Codec: 0x52, + Value: []byte("value2"), + }, + }, + Emitter: randomF4Addr(t, rng), + Reverted: false, + Height: 1001, + TipSetKey: NewTipSetKey(randomCid(t, rng)), + MsgCid: randomCid(t, rng), + }, + `{"entries":[{"Flags":0,"Key":"key1","Codec":81,"Value":"dmFsdWUx"},{"Flags":0,"Key":"key2","Codec":82,"Value":"dmFsdWUy"}],"emitter":"f410fagkp3qx2f76maqot74jaiw3tzbxe76k76zrkl3xifk67isrnbn2sll3yua","reverted":false,"height":1001,"tipsetKey":[{"/":"bafkqacx3dag26sfht3qlcdi"}],"msgCid":{"/":"bafkqacrziziykd6uuf4islq"}}`, + ), + ) + + t.Run("actor event filter", + testJsonMarshalling( + ActorEventFilter{ + Addresses: []address.Address{ + randomF4Addr(t, pseudo.New(pseudo.NewSource(0))), + randomF4Addr(t, pseudo.New(pseudo.NewSource(0))), + }, + Fields: map[string][]ActorEventBlock{ + "key1": { + { + Codec: 0x51, + Value: []byte("value1"), + }, + }, + "key2": { + { + Codec: 0x52, + Value: []byte("value2"), + }, + }, + }, + FromHeight: heightOf(0), + ToHeight: heightOf(100), + TipSetKey: randomTipSetKey(t, rng), + }, + `{"addresses":["f410fagkp3qx2f76maqot74jaiw3tzbxe76k76zrkl3xifk67isrnbn2sll3yua","f410fagkp3qx2f76maqot74jaiw3tzbxe76k76zrkl3xifk67isrnbn2sll3yua"],"fields":{"key1":[{"codec":81,"value":"dmFsdWUx"}],"key2":[{"codec":82,"value":"dmFsdWUy"}]},"fromHeight":0,"toHeight":100,"tipsetKey":[{"/":"bafkqacxcqxwocuiukv4aq5i"}]}`, + ), + ) + t.Run("actor event block", + testJsonMarshalling( + ActorEventBlock{ + Codec: 1, + Value: []byte("test"), + }, + `{"codec":1,"value":"dGVzdA=="}`, + ), + ) +} + +func testJsonMarshalling[V ActorEvent | ActorEventBlock | ActorEventFilter](subject V, expect string) func(t *testing.T) { + return func(t *testing.T) { + gotMarshalled, err := json.Marshal(subject) + require.NoError(t, err) + require.JSONEqf(t, expect, string(gotMarshalled), "serialization mismatch") + var gotUnmarshalled V + require.NoError(t, json.Unmarshal([]byte(expect), &gotUnmarshalled)) + require.Equal(t, subject, gotUnmarshalled) + } +} + +func heightOf(h int64) *abi.ChainEpoch { + hp := abi.ChainEpoch(h) + return &hp +} + +func randomTipSetKey(tb testing.TB, rng *pseudo.Rand) *TipSetKey { + tb.Helper() + tk := NewTipSetKey(randomCid(tb, rng)) + return &tk +} + +func randomF4Addr(tb testing.TB, rng *pseudo.Rand) address.Address { + tb.Helper() + addr, err := address.NewDelegatedAddress(builtintypes.EthereumAddressManagerActorID, randomBytes(32, rng)) + require.NoError(tb, err) + + return addr +} + +func randomCid(tb testing.TB, rng *pseudo.Rand) cid.Cid { + tb.Helper() + cb := cid.V1Builder{Codec: cid.Raw, MhType: mh.IDENTITY} + c, err := cb.Sum(randomBytes(10, rng)) + require.NoError(tb, err) + return c +} + +func randomBytes(n int, rng *pseudo.Rand) []byte { + buf := make([]byte, n) + rng.Read(buf) + return buf +} diff --git a/chain/types/cbor_gen.go b/chain/types/cbor_gen.go index 74a278ce49b..dde703ceed5 100644 --- a/chain/types/cbor_gen.go +++ b/chain/types/cbor_gen.go @@ -55,7 +55,7 @@ func (t *BlockHeader) MarshalCBOR(w io.Writer) error { } // t.BeaconEntries ([]types.BeaconEntry) (slice) - if len(t.BeaconEntries) > cbg.MaxLength { + if len(t.BeaconEntries) > 8192 { return xerrors.Errorf("Slice value in field t.BeaconEntries was too long") } @@ -66,10 +66,11 @@ func (t *BlockHeader) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.WinPoStProof ([]proof.PoStProof) (slice) - if len(t.WinPoStProof) > cbg.MaxLength { + if len(t.WinPoStProof) > 8192 { return xerrors.Errorf("Slice value in field t.WinPoStProof was too long") } @@ -80,10 +81,11 @@ func (t *BlockHeader) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Parents ([]cid.Cid) (slice) - if len(t.Parents) > cbg.MaxLength { + if len(t.Parents) > 8192 { return xerrors.Errorf("Slice value in field t.Parents was too long") } @@ -238,7 +240,7 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.BeaconEntries: array too large (%d)", extra) } @@ -266,9 +268,9 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.WinPoStProof ([]proof.PoStProof) (slice) maj, extra, err = cr.ReadHeader() @@ -276,7 +278,7 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.WinPoStProof: array too large (%d)", extra) } @@ -304,9 +306,9 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Parents ([]cid.Cid) (slice) maj, extra, err = cr.ReadHeader() @@ -314,7 +316,7 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Parents: array too large (%d)", extra) } @@ -345,9 +347,9 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { t.Parents[i] = c } + } } - // t.ParentWeight (big.Int) (struct) { @@ -360,10 +362,10 @@ func (t *BlockHeader) UnmarshalCBOR(r io.Reader) (err error) { // t.Height (abi.ChainEpoch) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -511,7 +513,7 @@ func (t *Ticket) MarshalCBOR(w io.Writer) error { } // t.VRFProof ([]uint8) (slice) - if len(t.VRFProof) > cbg.ByteArrayMaxLen { + if len(t.VRFProof) > 2097152 { return xerrors.Errorf("Byte array in field t.VRFProof was too long") } @@ -519,9 +521,10 @@ func (t *Ticket) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.VRFProof[:]); err != nil { + if _, err := cw.Write(t.VRFProof); err != nil { return err } + return nil } @@ -555,7 +558,7 @@ func (t *Ticket) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.VRFProof: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -566,9 +569,10 @@ func (t *Ticket) UnmarshalCBOR(r io.Reader) (err error) { t.VRFProof = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.VRFProof[:]); err != nil { + if _, err := io.ReadFull(cr, t.VRFProof); err != nil { return err } + return nil } @@ -598,7 +602,7 @@ func (t *ElectionProof) MarshalCBOR(w io.Writer) error { } // t.VRFProof ([]uint8) (slice) - if len(t.VRFProof) > cbg.ByteArrayMaxLen { + if len(t.VRFProof) > 2097152 { return xerrors.Errorf("Byte array in field t.VRFProof was too long") } @@ -606,9 +610,10 @@ func (t *ElectionProof) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.VRFProof[:]); err != nil { + if _, err := cw.Write(t.VRFProof); err != nil { return err } + return nil } @@ -638,10 +643,10 @@ func (t *ElectionProof) UnmarshalCBOR(r io.Reader) (err error) { // t.WinCount (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -667,7 +672,7 @@ func (t *ElectionProof) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.VRFProof: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -678,9 +683,10 @@ func (t *ElectionProof) UnmarshalCBOR(r io.Reader) (err error) { t.VRFProof = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.VRFProof[:]); err != nil { + if _, err := io.ReadFull(cr, t.VRFProof); err != nil { return err } + return nil } @@ -753,7 +759,7 @@ func (t *Message) MarshalCBOR(w io.Writer) error { } // t.Params ([]uint8) (slice) - if len(t.Params) > cbg.ByteArrayMaxLen { + if len(t.Params) > 2097152 { return xerrors.Errorf("Byte array in field t.Params was too long") } @@ -761,9 +767,10 @@ func (t *Message) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Params[:]); err != nil { + if _, err := cw.Write(t.Params); err != nil { return err } + return nil } @@ -848,10 +855,10 @@ func (t *Message) UnmarshalCBOR(r io.Reader) (err error) { // t.GasLimit (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -909,7 +916,7 @@ func (t *Message) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Params: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -920,9 +927,10 @@ func (t *Message) UnmarshalCBOR(r io.Reader) (err error) { t.Params = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Params[:]); err != nil { + if _, err := io.ReadFull(cr, t.Params); err != nil { return err } + return nil } @@ -1343,7 +1351,7 @@ func (t *BlockMsg) MarshalCBOR(w io.Writer) error { } // t.BlsMessages ([]cid.Cid) (slice) - if len(t.BlsMessages) > cbg.MaxLength { + if len(t.BlsMessages) > 8192 { return xerrors.Errorf("Slice value in field t.BlsMessages was too long") } @@ -1359,7 +1367,7 @@ func (t *BlockMsg) MarshalCBOR(w io.Writer) error { } // t.SecpkMessages ([]cid.Cid) (slice) - if len(t.SecpkMessages) > cbg.MaxLength { + if len(t.SecpkMessages) > 8192 { return xerrors.Errorf("Slice value in field t.SecpkMessages was too long") } @@ -1425,7 +1433,7 @@ func (t *BlockMsg) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.BlsMessages: array too large (%d)", extra) } @@ -1456,9 +1464,9 @@ func (t *BlockMsg) UnmarshalCBOR(r io.Reader) (err error) { t.BlsMessages[i] = c } + } } - // t.SecpkMessages ([]cid.Cid) (slice) maj, extra, err = cr.ReadHeader() @@ -1466,7 +1474,7 @@ func (t *BlockMsg) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.SecpkMessages: array too large (%d)", extra) } @@ -1497,9 +1505,9 @@ func (t *BlockMsg) UnmarshalCBOR(r io.Reader) (err error) { t.SecpkMessages[i] = c } + } } - return nil } @@ -1518,7 +1526,7 @@ func (t *ExpTipSet) MarshalCBOR(w io.Writer) error { } // t.Cids ([]cid.Cid) (slice) - if len(t.Cids) > cbg.MaxLength { + if len(t.Cids) > 8192 { return xerrors.Errorf("Slice value in field t.Cids was too long") } @@ -1534,7 +1542,7 @@ func (t *ExpTipSet) MarshalCBOR(w io.Writer) error { } // t.Blocks ([]*types.BlockHeader) (slice) - if len(t.Blocks) > cbg.MaxLength { + if len(t.Blocks) > 8192 { return xerrors.Errorf("Slice value in field t.Blocks was too long") } @@ -1545,6 +1553,7 @@ func (t *ExpTipSet) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Height (abi.ChainEpoch) (int64) @@ -1557,6 +1566,7 @@ func (t *ExpTipSet) MarshalCBOR(w io.Writer) error { return err } } + return nil } @@ -1590,7 +1600,7 @@ func (t *ExpTipSet) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Cids: array too large (%d)", extra) } @@ -1621,9 +1631,9 @@ func (t *ExpTipSet) UnmarshalCBOR(r io.Reader) (err error) { t.Cids[i] = c } + } } - // t.Blocks ([]*types.BlockHeader) (slice) maj, extra, err = cr.ReadHeader() @@ -1631,7 +1641,7 @@ func (t *ExpTipSet) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Blocks: array too large (%d)", extra) } @@ -1669,16 +1679,16 @@ func (t *ExpTipSet) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Height (abi.ChainEpoch) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -1721,7 +1731,7 @@ func (t *BeaconEntry) MarshalCBOR(w io.Writer) error { } // t.Data ([]uint8) (slice) - if len(t.Data) > cbg.ByteArrayMaxLen { + if len(t.Data) > 2097152 { return xerrors.Errorf("Byte array in field t.Data was too long") } @@ -1729,9 +1739,10 @@ func (t *BeaconEntry) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Data[:]); err != nil { + if _, err := cw.Write(t.Data); err != nil { return err } + return nil } @@ -1779,7 +1790,7 @@ func (t *BeaconEntry) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Data: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -1790,9 +1801,10 @@ func (t *BeaconEntry) UnmarshalCBOR(r io.Reader) (err error) { t.Data = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Data[:]); err != nil { + if _, err := io.ReadFull(cr, t.Data); err != nil { return err } + return nil } @@ -1908,6 +1920,7 @@ func (t *StateInfo0) MarshalCBOR(w io.Writer) error { if _, err := cw.Write(lengthBufStateInfo0); err != nil { return err } + return nil } @@ -1958,7 +1971,7 @@ func (t *Event) MarshalCBOR(w io.Writer) error { } // t.Entries ([]types.EventEntry) (slice) - if len(t.Entries) > cbg.MaxLength { + if len(t.Entries) > 8192 { return xerrors.Errorf("Slice value in field t.Entries was too long") } @@ -1969,6 +1982,7 @@ func (t *Event) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -2017,7 +2031,7 @@ func (t *Event) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Entries: array too large (%d)", extra) } @@ -2045,9 +2059,9 @@ func (t *Event) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - return nil } @@ -2071,7 +2085,7 @@ func (t *EventEntry) MarshalCBOR(w io.Writer) error { } // t.Key (string) (string) - if len(t.Key) > cbg.MaxLength { + if len(t.Key) > 8192 { return xerrors.Errorf("Value in field t.Key was too long") } @@ -2089,7 +2103,7 @@ func (t *EventEntry) MarshalCBOR(w io.Writer) error { } // t.Value ([]uint8) (slice) - if len(t.Value) > cbg.ByteArrayMaxLen { + if len(t.Value) > 2097152 { return xerrors.Errorf("Byte array in field t.Value was too long") } @@ -2097,9 +2111,10 @@ func (t *EventEntry) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Value[:]); err != nil { + if _, err := cw.Write(t.Value); err != nil { return err } + return nil } @@ -2142,7 +2157,7 @@ func (t *EventEntry) UnmarshalCBOR(r io.Reader) (err error) { // t.Key (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -2170,7 +2185,7 @@ func (t *EventEntry) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Value: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -2181,9 +2196,10 @@ func (t *EventEntry) UnmarshalCBOR(r io.Reader) (err error) { t.Value = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Value[:]); err != nil { + if _, err := io.ReadFull(cr, t.Value); err != nil { return err } + return nil } @@ -2202,7 +2218,7 @@ func (t *GasTrace) MarshalCBOR(w io.Writer) error { } // t.Name (string) (string) - if len(t.Name) > cbg.MaxLength { + if len(t.Name) > 8192 { return xerrors.Errorf("Value in field t.Name was too long") } @@ -2256,6 +2272,7 @@ func (t *GasTrace) MarshalCBOR(w io.Writer) error { return err } } + return nil } @@ -2285,7 +2302,7 @@ func (t *GasTrace) UnmarshalCBOR(r io.Reader) (err error) { // t.Name (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -2295,10 +2312,10 @@ func (t *GasTrace) UnmarshalCBOR(r io.Reader) (err error) { // t.TotalGas (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -2320,10 +2337,10 @@ func (t *GasTrace) UnmarshalCBOR(r io.Reader) (err error) { // t.ComputeGas (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -2345,10 +2362,10 @@ func (t *GasTrace) UnmarshalCBOR(r io.Reader) (err error) { // t.StorageGas (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -2370,10 +2387,10 @@ func (t *GasTrace) UnmarshalCBOR(r io.Reader) (err error) { // t.TimeTaken (time.Duration) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -2507,7 +2524,7 @@ func (t *MessageTrace) MarshalCBOR(w io.Writer) error { } // t.Params ([]uint8) (slice) - if len(t.Params) > cbg.ByteArrayMaxLen { + if len(t.Params) > 2097152 { return xerrors.Errorf("Byte array in field t.Params was too long") } @@ -2515,7 +2532,7 @@ func (t *MessageTrace) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Params[:]); err != nil { + if _, err := cw.Write(t.Params); err != nil { return err } @@ -2609,7 +2626,7 @@ func (t *MessageTrace) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Params: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -2620,9 +2637,10 @@ func (t *MessageTrace) UnmarshalCBOR(r io.Reader) (err error) { t.Params = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Params[:]); err != nil { + if _, err := io.ReadFull(cr, t.Params); err != nil { return err } + // t.ParamsCodec (uint64) (uint64) { @@ -2697,7 +2715,7 @@ func (t *ReturnTrace) MarshalCBOR(w io.Writer) error { } // t.Return ([]uint8) (slice) - if len(t.Return) > cbg.ByteArrayMaxLen { + if len(t.Return) > 2097152 { return xerrors.Errorf("Byte array in field t.Return was too long") } @@ -2705,7 +2723,7 @@ func (t *ReturnTrace) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Return[:]); err != nil { + if _, err := cw.Write(t.Return); err != nil { return err } @@ -2744,10 +2762,10 @@ func (t *ReturnTrace) UnmarshalCBOR(r io.Reader) (err error) { // t.ExitCode (exitcode.ExitCode) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -2773,7 +2791,7 @@ func (t *ReturnTrace) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Return: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -2784,9 +2802,10 @@ func (t *ReturnTrace) UnmarshalCBOR(r io.Reader) (err error) { t.Return = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Return[:]); err != nil { + if _, err := io.ReadFull(cr, t.Return); err != nil { return err } + // t.ReturnCodec (uint64) (uint64) { @@ -2845,6 +2864,7 @@ func (t *ExecutionTrace) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Subcalls ([]types.ExecutionTrace) (slice) @@ -2859,6 +2879,7 @@ func (t *ExecutionTrace) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -2968,9 +2989,9 @@ func (t *ExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Subcalls ([]types.ExecutionTrace) (slice) maj, extra, err = cr.ReadHeader() @@ -3006,8 +3027,8 @@ func (t *ExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - return nil } diff --git a/chain/types/ethtypes/eth_types.go b/chain/types/ethtypes/eth_types.go index acc0d5c9454..35fed87d802 100644 --- a/chain/types/ethtypes/eth_types.go +++ b/chain/types/ethtypes/eth_types.go @@ -610,7 +610,7 @@ type EthFilterSpec struct { Topics EthTopicSpec `json:"topics"` // Restricts event logs returned to those emitted from messages contained in this tipset. - // If BlockHash is present in in the filter criteria, then neither FromBlock nor ToBlock are allowed. + // If BlockHash is present in the filter criteria, then neither FromBlock nor ToBlock are allowed. // Added in EIP-234 BlockHash *EthHash `json:"blockHash,omitempty"` } diff --git a/chain/types/event.go b/chain/types/event.go index 106a120e211..5f6415d49e1 100644 --- a/chain/types/event.go +++ b/chain/types/event.go @@ -28,7 +28,7 @@ type EventEntry struct { // The event value's codec Codec uint64 - // The event value + // The event value. It is encoded using the codec specified above Value []byte } diff --git a/cli/client.go b/cli/client.go index 88f7ed2087b..81299b8fb3e 100644 --- a/cli/client.go +++ b/cli/client.go @@ -1770,7 +1770,7 @@ func dealFromDealInfo(ctx context.Context, full v0api.FullNode, head *types.TipS if v.DealID == 0 { return deal{ LocalDeal: v, - OnChainDealState: *market.EmptyDealState(), + OnChainDealState: market.EmptyDealState(), } } @@ -1781,7 +1781,7 @@ func dealFromDealInfo(ctx context.Context, full v0api.FullNode, head *types.TipS return deal{ LocalDeal: v, - OnChainDealState: onChain.State, + OnChainDealState: onChain.State.Iface(), } } @@ -1807,13 +1807,13 @@ func outputStorageDeals(ctx context.Context, out io.Writer, full v0api.FullNode, fmt.Fprintf(w, "Created\tDealCid\tDealId\tProvider\tState\tOn Chain?\tSlashed?\tPieceCID\tSize\tPrice\tDuration\tTransferChannelID\tTransferStatus\tVerified\tMessage\n") for _, d := range deals { onChain := "N" - if d.OnChainDealState.SectorStartEpoch != -1 { - onChain = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SectorStartEpoch) + if d.OnChainDealState.SectorStartEpoch() != -1 { + onChain = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SectorStartEpoch()) } slashed := "N" - if d.OnChainDealState.SlashEpoch != -1 { - slashed = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SlashEpoch) + if d.OnChainDealState.SlashEpoch() != -1 { + slashed = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SlashEpoch()) } price := types.FIL(types.BigMul(d.LocalDeal.PricePerEpoch, types.NewInt(d.LocalDeal.Duration))) @@ -1869,13 +1869,13 @@ func outputStorageDeals(ctx context.Context, out io.Writer, full v0api.FullNode, propcid := ellipsis(d.LocalDeal.ProposalCid.String(), 8) onChain := "N" - if d.OnChainDealState.SectorStartEpoch != -1 { - onChain = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SectorStartEpoch) + if d.OnChainDealState.SectorStartEpoch() != -1 { + onChain = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SectorStartEpoch()) } slashed := "N" - if d.OnChainDealState.SlashEpoch != -1 { - slashed = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SlashEpoch) + if d.OnChainDealState.SlashEpoch() != -1 { + slashed = fmt.Sprintf("Y (epoch %d)", d.OnChainDealState.SlashEpoch()) } piece := ellipsis(d.LocalDeal.PieceCID.String(), 8) diff --git a/cli/filplus.go b/cli/filplus.go index 56922943960..a4982cecbec 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -7,6 +7,7 @@ import ( "fmt" "os" "strconv" + "strings" cbor "github.com/ipfs/go-ipld-cbor" "github.com/urfave/cli/v2" @@ -233,16 +234,21 @@ var filplusListClientsCmd = &cli.Command{ var filplusListAllocationsCmd = &cli.Command{ Name: "list-allocations", - Usage: "List allocations made by client", + Usage: "List allocations available in verified registry actor or made by a client if specified", ArgsUsage: "clientAddress", Flags: []cli.Flag{ &cli.BoolFlag{ Name: "expired", Usage: "list only expired allocations", }, + &cli.BoolFlag{ + Name: "json", + Usage: "output results in json format", + Value: false, + }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() > 1 { return IncorrectNumArgs(cctx) } @@ -253,14 +259,76 @@ var filplusListAllocationsCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - clientAddr, err := address.NewFromString(cctx.Args().Get(0)) - if err != nil { - return err - } + writeOut := func(tsHeight abi.ChainEpoch, allocations map[verifreg.AllocationId]verifreg.Allocation, json, expired bool) error { + // Map Keys. Corresponds to the standard tablewriter output + allocationID := "AllocationID" + client := "Client" + provider := "Miner" + pieceCid := "PieceCid" + pieceSize := "PieceSize" + tMin := "TermMin" + tMax := "TermMax" + expr := "Expiration" + + // One-to-one mapping between tablewriter keys and JSON keys + tableKeysToJsonKeys := map[string]string{ + allocationID: strings.ToLower(allocationID), + client: strings.ToLower(client), + provider: strings.ToLower(provider), + pieceCid: strings.ToLower(pieceCid), + pieceSize: strings.ToLower(pieceSize), + tMin: strings.ToLower(tMin), + tMax: strings.ToLower(tMax), + expr: strings.ToLower(expr), + } - clientIdAddr, err := api.StateLookupID(ctx, clientAddr, types.EmptyTSK) - if err != nil { - return err + var allocs []map[string]interface{} + + for key, val := range allocations { + if tsHeight > val.Expiration || !expired { + alloc := map[string]interface{}{ + allocationID: key, + client: val.Client, + provider: val.Provider, + pieceCid: val.Data, + pieceSize: val.Size, + tMin: val.TermMin, + tMax: val.TermMax, + expr: val.Expiration, + } + allocs = append(allocs, alloc) + } + } + + if json { + // get a new list of allocations with json keys instead of tablewriter keys + var jsonAllocs []map[string]interface{} + for _, alloc := range allocs { + jsonAlloc := make(map[string]interface{}) + for k, v := range alloc { + jsonAlloc[tableKeysToJsonKeys[k]] = v + } + jsonAllocs = append(jsonAllocs, jsonAlloc) + } + // then return this! + return PrintJson(jsonAllocs) + } + // Init the tablewriter's columns + tw := tablewriter.New( + tablewriter.Col(allocationID), + tablewriter.Col(client), + tablewriter.Col(provider), + tablewriter.Col(pieceCid), + tablewriter.Col(pieceSize), + tablewriter.Col(tMin), + tablewriter.Col(tMax), + tablewriter.NewLineCol(expr)) + // populate it with content + for _, alloc := range allocs { + tw.Write(alloc) + } + // return the corresponding string + return tw.Flush(os.Stdout) } store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) @@ -280,41 +348,38 @@ var filplusListAllocationsCmd = &cli.Command{ return err } - allocationsMap, err := verifregState.GetAllocations(clientIdAddr) + if cctx.NArg() == 1 { + clientAddr, err := address.NewFromString(cctx.Args().Get(0)) + if err != nil { + return err + } + + clientIdAddr, err := api.StateLookupID(ctx, clientAddr, types.EmptyTSK) + if err != nil { + return err + } + + allocationsMap, err := verifregState.GetAllocations(clientIdAddr) + if err != nil { + return err + } + + return writeOut(ts.Height(), allocationsMap, cctx.Bool("json"), cctx.Bool("expired")) + } + + allocationsMap, err := verifregState.GetAllAllocations() if err != nil { return err } - tw := tablewriter.New( - tablewriter.Col("ID"), - tablewriter.Col("Provider"), - tablewriter.Col("Data"), - tablewriter.Col("Size"), - tablewriter.Col("TermMin"), - tablewriter.Col("TermMax"), - tablewriter.Col("Expiration"), - ) + return writeOut(ts.Height(), allocationsMap, cctx.Bool("json"), cctx.Bool("expired")) - for allocationId, allocation := range allocationsMap { - if ts.Height() > allocation.Expiration || !cctx.IsSet("expired") { - tw.Write(map[string]interface{}{ - "ID": allocationId, - "Provider": allocation.Provider, - "Data": allocation.Data, - "Size": allocation.Size, - "TermMin": allocation.TermMin, - "TermMax": allocation.TermMax, - "Expiration": allocation.Expiration, - }) - } - } - return tw.Flush(os.Stdout) }, } var filplusListClaimsCmd = &cli.Command{ Name: "list-claims", - Usage: "List claims made by provider", + Usage: "List claims available in verified registry actor or made by provider if specified", ArgsUsage: "providerAddress", Flags: []cli.Flag{ &cli.BoolFlag{ @@ -323,7 +388,7 @@ var filplusListClaimsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() > 1 { return IncorrectNumArgs(cctx) } @@ -334,14 +399,81 @@ var filplusListClaimsCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - providerAddr, err := address.NewFromString(cctx.Args().Get(0)) - if err != nil { - return err - } + writeOut := func(tsHeight abi.ChainEpoch, claims map[verifreg.ClaimId]verifreg.Claim, json, expired bool) error { + // Map Keys. Corresponds to the standard tablewriter output + claimID := "ClaimID" + provider := "Provider" + client := "Client" + data := "Data" + size := "Size" + tMin := "TermMin" + tMax := "TermMax" + tStart := "TermStart" + sector := "Sector" + + // One-to-one mapping between tablewriter keys and JSON keys + tableKeysToJsonKeys := map[string]string{ + claimID: strings.ToLower(claimID), + provider: strings.ToLower(provider), + client: strings.ToLower(client), + data: strings.ToLower(data), + size: strings.ToLower(size), + tMin: strings.ToLower(tMin), + tMax: strings.ToLower(tMax), + tStart: strings.ToLower(tStart), + sector: strings.ToLower(sector), + } - providerIdAddr, err := api.StateLookupID(ctx, providerAddr, types.EmptyTSK) - if err != nil { - return err + var claimList []map[string]interface{} + + for key, val := range claims { + if tsHeight > val.TermStart+val.TermMax || !expired { + claim := map[string]interface{}{ + claimID: key, + provider: val.Provider, + client: val.Client, + data: val.Data, + size: val.Size, + tMin: val.TermMin, + tMax: val.TermMax, + tStart: val.TermStart, + sector: val.Sector, + } + claimList = append(claimList, claim) + } + } + + if json { + // get a new list of claims with json keys instead of tablewriter keys + var jsonClaims []map[string]interface{} + for _, claim := range claimList { + jsonClaim := make(map[string]interface{}) + for k, v := range claim { + jsonClaim[tableKeysToJsonKeys[k]] = v + } + jsonClaims = append(jsonClaims, jsonClaim) + } + // then return this! + return PrintJson(jsonClaims) + } + // Init the tablewriter's columns + tw := tablewriter.New( + tablewriter.Col(claimID), + tablewriter.Col(client), + tablewriter.Col(provider), + tablewriter.Col(data), + tablewriter.Col(size), + tablewriter.Col(tMin), + tablewriter.Col(tMax), + tablewriter.Col(tStart), + tablewriter.NewLineCol(sector)) + // populate it with content + for _, alloc := range claimList { + + tw.Write(alloc) + } + // return the corresponding string + return tw.Flush(os.Stdout) } store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) @@ -361,39 +493,31 @@ var filplusListClaimsCmd = &cli.Command{ return err } - claimsMap, err := verifregState.GetClaims(providerIdAddr) - if err != nil { - return err - } + if cctx.NArg() == 1 { + providerAddr, err := address.NewFromString(cctx.Args().Get(0)) + if err != nil { + return err + } - tw := tablewriter.New( - tablewriter.Col("ID"), - tablewriter.Col("Provider"), - tablewriter.Col("Client"), - tablewriter.Col("Data"), - tablewriter.Col("Size"), - tablewriter.Col("TermMin"), - tablewriter.Col("TermMax"), - tablewriter.Col("TermStart"), - tablewriter.Col("Sector"), - ) + providerIdAddr, err := api.StateLookupID(ctx, providerAddr, types.EmptyTSK) + if err != nil { + return err + } - for claimId, claim := range claimsMap { - if ts.Height() > claim.TermMax+claim.TermStart || !cctx.IsSet("expired") { - tw.Write(map[string]interface{}{ - "ID": claimId, - "Provider": claim.Provider, - "Client": claim.Client, - "Data": claim.Data, - "Size": claim.Size, - "TermMin": claim.TermMin, - "TermMax": claim.TermMax, - "TermStart": claim.TermStart, - "Sector": claim.Sector, - }) + claimsMap, err := verifregState.GetClaims(providerIdAddr) + if err != nil { + return err } + + return writeOut(ts.Height(), claimsMap, cctx.Bool("json"), cctx.Bool("expired")) } - return tw.Flush(os.Stdout) + + claimsMap, err := verifregState.GetAllClaims() + if err != nil { + return err + } + + return writeOut(ts.Height(), claimsMap, cctx.Bool("json"), cctx.Bool("expired")) }, } diff --git a/cli/util.go b/cli/util.go index 03de817f9b1..de161f59085 100644 --- a/cli/util.go +++ b/cli/util.go @@ -2,6 +2,8 @@ package cli import ( "context" + "encoding/json" + "fmt" "os" "github.com/fatih/color" @@ -37,3 +39,13 @@ func parseTipSet(ctx context.Context, api v0api.FullNode, vals []string) (*types return types.NewTipSet(headers) } + +func PrintJson(obj interface{}) error { + resJson, err := json.MarshalIndent(obj, "", " ") + if err != nil { + return fmt.Errorf("marshalling json: %w", err) + } + + fmt.Println(string(resJson)) + return nil +} diff --git a/cmd/lotus-bench/amt_internal.go b/cmd/lotus-bench/amt_internal.go deleted file mode 100644 index f0e3035b710..00000000000 --- a/cmd/lotus-bench/amt_internal.go +++ /dev/null @@ -1,312 +0,0 @@ -// Copied from go-amt-ipld https://github.com/filecoin-project/go-amt-ipld/tree/master/internal -// which for some reason is a go internal package and therefore cannot be imported - -package main - -import ( - "fmt" - "io" - "math" - "sort" - - cid "github.com/ipfs/go-cid" - cbg "github.com/whyrusleeping/cbor-gen" - xerrors "golang.org/x/xerrors" -) - -type AMTRoot struct { - BitWidth uint64 - Height uint64 - Count uint64 - AMTNode AMTNode -} - -type AMTNode struct { - Bmap []byte - Links []cid.Cid - Values []*cbg.Deferred -} - -// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. - -var _ = xerrors.Errorf -var _ = cid.Undef -var _ = math.E -var _ = sort.Sort - -var lengthBufAMTRoot = []byte{132} - -func (t *AMTRoot) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - - cw := cbg.NewCborWriter(w) - - if _, err := cw.Write(lengthBufAMTRoot); err != nil { - return err - } - - // t.BitWidth (uint64) (uint64) - - if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, t.BitWidth); err != nil { - return err - } - - // t.Height (uint64) (uint64) - - if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, t.Height); err != nil { - return err - } - - // t.Count (uint64) (uint64) - - if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, t.Count); err != nil { - return err - } - - // t.AMTNode (internal.AMTNode) (struct) - if err := t.AMTNode.MarshalCBOR(cw); err != nil { - return err - } - return nil -} - -func (t *AMTRoot) UnmarshalCBOR(r io.Reader) (err error) { - *t = AMTRoot{} - - cr := cbg.NewCborReader(r) - - maj, extra, err := cr.ReadHeader() - if err != nil { - return err - } - defer func() { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - }() - - if maj != cbg.MajArray { - return fmt.Errorf("cbor input should be of type array") - } - - if extra != 4 { - return fmt.Errorf("cbor input had wrong number of fields") - } - - // t.BitWidth (uint64) (uint64) - - { - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.BitWidth = extra - - } - // t.Height (uint64) (uint64) - - { - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.Height = extra - - } - // t.Count (uint64) (uint64) - - { - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.Count = extra - - } - // t.AMTNode (internal.AMTNode) (struct) - - { - - if err := t.AMTNode.UnmarshalCBOR(cr); err != nil { - return xerrors.Errorf("unmarshaling t.AMTNode: %w", err) - } - - } - return nil -} - -var lengthBufAMTNode = []byte{131} - -func (t *AMTNode) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - - cw := cbg.NewCborWriter(w) - - if _, err := cw.Write(lengthBufAMTNode); err != nil { - return err - } - - // t.Bmap ([]uint8) (slice) - if len(t.Bmap) > cbg.ByteArrayMaxLen { - return xerrors.Errorf("Byte array in field t.Bmap was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(t.Bmap))); err != nil { - return err - } - - if _, err := cw.Write(t.Bmap[:]); err != nil { - return err - } - - // t.Links ([]cid.Cid) (slice) - if len(t.Links) > cbg.MaxLength { - return xerrors.Errorf("Slice value in field t.Links was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Links))); err != nil { - return err - } - for _, v := range t.Links { - if err := cbg.WriteCid(w, v); err != nil { - return xerrors.Errorf("failed writing cid field t.Links: %w", err) - } - } - - // t.Values ([]*typegen.Deferred) (slice) - if len(t.Values) > cbg.MaxLength { - return xerrors.Errorf("Slice value in field t.Values was too long") - } - - if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Values))); err != nil { - return err - } - for _, v := range t.Values { - if err := v.MarshalCBOR(cw); err != nil { - return err - } - } - return nil -} - -func (t *AMTNode) UnmarshalCBOR(r io.Reader) (err error) { - *t = AMTNode{} - - cr := cbg.NewCborReader(r) - - maj, extra, err := cr.ReadHeader() - if err != nil { - return err - } - defer func() { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - }() - - if maj != cbg.MajArray { - return fmt.Errorf("cbor input should be of type array") - } - - if extra != 3 { - return fmt.Errorf("cbor input had wrong number of fields") - } - - // t.Bmap ([]uint8) (slice) - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - - if extra > cbg.ByteArrayMaxLen { - return fmt.Errorf("t.Bmap: byte array too large (%d)", extra) - } - if maj != cbg.MajByteString { - return fmt.Errorf("expected byte array") - } - - if extra > 0 { - t.Bmap = make([]uint8, extra) - } - - if _, err := io.ReadFull(cr, t.Bmap[:]); err != nil { - return err - } - // t.Links ([]cid.Cid) (slice) - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - - if extra > cbg.MaxLength { - return fmt.Errorf("t.Links: array too large (%d)", extra) - } - - if maj != cbg.MajArray { - return fmt.Errorf("expected cbor array") - } - - if extra > 0 { - t.Links = make([]cid.Cid, extra) - } - - for i := 0; i < int(extra); i++ { - - c, err := cbg.ReadCid(cr) - if err != nil { - return xerrors.Errorf("reading cid field t.Links failed: %w", err) - } - t.Links[i] = c - } - - // t.Values ([]*typegen.Deferred) (slice) - - maj, extra, err = cr.ReadHeader() - if err != nil { - return err - } - - if extra > cbg.MaxLength { - return fmt.Errorf("t.Values: array too large (%d)", extra) - } - - if maj != cbg.MajArray { - return fmt.Errorf("expected cbor array") - } - - if extra > 0 { - t.Values = make([]*cbg.Deferred, extra) - } - - for i := 0; i < int(extra); i++ { - - var v cbg.Deferred - if err := v.UnmarshalCBOR(cr); err != nil { - return err - } - - t.Values[i] = &v - } - - return nil -} diff --git a/cmd/lotus-bench/main.go b/cmd/lotus-bench/main.go index 7d3c0cde084..545ed1eb90b 100644 --- a/cmd/lotus-bench/main.go +++ b/cmd/lotus-bench/main.go @@ -1,7 +1,6 @@ package main import ( - "bytes" "context" "crypto/rand" "encoding/json" @@ -9,16 +8,9 @@ import ( "math/big" "os" "path/filepath" - "sync" "time" "github.com/docker/go-units" - "github.com/ipfs/boxo/blockservice" - "github.com/ipfs/boxo/ipld/merkledag" - "github.com/ipfs/go-cid" - offline "github.com/ipfs/go-ipfs-exchange-offline" - cbor "github.com/ipfs/go-ipld-cbor" - format "github.com/ipfs/go-ipld-format" logging "github.com/ipfs/go-log/v2" "github.com/minio/blake2b-simd" "github.com/mitchellh/go-homedir" @@ -28,14 +20,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-paramfetch" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" prooftypes "github.com/filecoin-project/go-state-types/proof" - adt "github.com/filecoin-project/specs-actors/v6/actors/util/adt" lapi "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/actors/builtin/market" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/types" lcli "github.com/filecoin-project/lotus/cli" @@ -116,7 +104,6 @@ func main() { DisableSliceFlagSeparator: true, Commands: []*cli.Command{ proveCmd, - amtBenchCmd, sealBenchCmd, simpleCmd, importBenchCmd, @@ -131,211 +118,6 @@ func main() { } } -type amtStatCollector struct { - ds format.NodeGetter - walk func(format.Node) ([]*format.Link, error) - - statsLk sync.Mutex - totalAMTLinks int - totalAMTValues int - totalAMTLinkNodes int - totalAMTValueNodes int - totalAMTLinkNodeSize int - totalAMTValueNodeSize int -} - -func (asc *amtStatCollector) String() string { - asc.statsLk.Lock() - defer asc.statsLk.Unlock() - - str := "\n------------\n" - str += fmt.Sprintf("Link Count: %d\n", asc.totalAMTLinks) - str += fmt.Sprintf("Value Count: %d\n", asc.totalAMTValues) - str += fmt.Sprintf("%d link nodes %d bytes\n", asc.totalAMTLinkNodes, asc.totalAMTLinkNodeSize) - str += fmt.Sprintf("%d value nodes %d bytes\n", asc.totalAMTValueNodes, asc.totalAMTValueNodeSize) - str += fmt.Sprintf("Total bytes: %d\n------------\n", asc.totalAMTLinkNodeSize+asc.totalAMTValueNodeSize) - return str -} - -func (asc *amtStatCollector) record(ctx context.Context, nd format.Node) error { - size, err := nd.Size() - if err != nil { - return err - } - - var node AMTNode - if err := node.UnmarshalCBOR(bytes.NewReader(nd.RawData())); err != nil { - // try to deserialize root - var root AMTRoot - if err := root.UnmarshalCBOR(bytes.NewReader(nd.RawData())); err != nil { - return err - } - node = root.AMTNode - } - - asc.statsLk.Lock() - defer asc.statsLk.Unlock() - - link := len(node.Links) > 0 - value := len(node.Values) > 0 - - if link { - asc.totalAMTLinks += len(node.Links) - asc.totalAMTLinkNodes++ - asc.totalAMTLinkNodeSize += int(size) - } else if value { - asc.totalAMTValues += len(node.Values) - asc.totalAMTValueNodes++ - asc.totalAMTValueNodeSize += int(size) - } else { - return xerrors.Errorf("unexpected AMT node %x: neither link nor value", nd.RawData()) - } - - return nil -} - -func (asc *amtStatCollector) walkLinks(ctx context.Context, c cid.Cid) ([]*format.Link, error) { - nd, err := asc.ds.Get(ctx, c) - if err != nil { - return nil, err - } - - if err := asc.record(ctx, nd); err != nil { - return nil, err - } - - return asc.walk(nd) -} - -func carWalkFunc(nd format.Node) (out []*format.Link, err error) { - for _, link := range nd.Links() { - if link.Cid.Prefix().Codec == cid.FilCommitmentSealed || link.Cid.Prefix().Codec == cid.FilCommitmentUnsealed { - continue - } - out = append(out, link) - } - return out, nil -} - -var amtBenchCmd = &cli.Command{ - Name: "amt", - Usage: "Benchmark AMT churn", - Flags: []cli.Flag{ - &cli.IntFlag{ - Name: "rounds", - Usage: "rounds of churn to measure", - Value: 1, - }, - &cli.IntFlag{ - Name: "interval", - Usage: "AMT idx interval for churning values", - Value: 2880, - }, - &cli.IntFlag{ - Name: "bitwidth", - Usage: "AMT bitwidth", - Value: 6, - }, - }, - Action: func(c *cli.Context) error { - bs := blockstore.NewMemory() - ctx := c.Context - store := adt.WrapStore(ctx, cbor.NewCborStore(bs)) - - // Setup in memory blockstore - bitwidth := c.Int("bitwidth") - array, err := adt.MakeEmptyArray(store, bitwidth) - if err != nil { - return err - } - - // Using motivating empirical example: market actor states AMT - // Create 40,000,000 states for realistic workload - fmt.Printf("Populating AMT\n") - for i := 0; i < 40000000; i++ { - if err := array.Set(uint64(i), &market.DealState{ - SectorStartEpoch: abi.ChainEpoch(2000000 + i), - LastUpdatedEpoch: abi.ChainEpoch(-1), - SlashEpoch: -1, - VerifiedClaim: verifreg.AllocationId(i), - }); err != nil { - return err - } - } - - r, err := array.Root() - if err != nil { - return err - } - - // Measure ratio of internal / leaf nodes / sizes - dag := merkledag.NewDAGService(blockservice.New(bs, offline.Exchange(bs))) - asc := &amtStatCollector{ - ds: dag, - walk: carWalkFunc, - } - - fmt.Printf("Measuring AMT\n") - seen := cid.NewSet() - if err := merkledag.Walk(ctx, asc.walkLinks, r, seen.Visit, merkledag.Concurrent()); err != nil { - return err - } - - fmt.Printf("%s\n", asc) - - // Overwrite ids with idx % interval: one epoch of market cron - rounds := c.Int("rounds") - interval := c.Int("interval") - - fmt.Printf("Overwrite 1 out of %d values for %d rounds\n", interval, rounds) - array, err = adt.AsArray(store, r, bitwidth) - if err != nil { - return err - } - roots := make([]cid.Cid, rounds) - for j := 0; j < rounds; j++ { - if j%10 == 0 { - fmt.Printf("round: %d\n", j) - } - for i := j; i < 40000000; i += interval { - if i%interval == j { - if err := array.Set(uint64(i), &market.DealState{ - SectorStartEpoch: abi.ChainEpoch(2000000 + i), - LastUpdatedEpoch: abi.ChainEpoch(1), - SlashEpoch: -1, - VerifiedClaim: verifreg.AllocationId(i), - }); err != nil { - return err - } - } - } - roots[j], err = array.Root() - if err != nil { - return err - } - - } - - // Measure churn - dag = merkledag.NewDAGService(blockservice.New(bs, offline.Exchange(bs))) - asc = &amtStatCollector{ - ds: dag, - walk: carWalkFunc, - } - - fmt.Printf("Measuring %d rounds of churn\n", rounds) - - for _, r := range roots { - if err := merkledag.Walk(ctx, asc.walkLinks, r, seen.Visit, merkledag.Concurrent()); err != nil { - return err - } - } - - fmt.Printf("%s\n", asc) - return nil - }, -} - var sealBenchCmd = &cli.Command{ Name: "sealing", Usage: "Benchmark seal and winning post and window post", diff --git a/cmd/lotus-miner/init.go b/cmd/lotus-miner/init.go index 1a4a98fc4f0..9ab4e8b05b0 100644 --- a/cmd/lotus-miner/init.go +++ b/cmd/lotus-miner/init.go @@ -55,6 +55,7 @@ import ( "github.com/filecoin-project/lotus/storage" "github.com/filecoin-project/lotus/storage/paths" pipeline "github.com/filecoin-project/lotus/storage/pipeline" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/sealer" "github.com/filecoin-project/lotus/storage/sealer/ffiwrapper" "github.com/filecoin-project/lotus/storage/sealer/storiface" @@ -327,21 +328,21 @@ func migratePreSealMeta(ctx context.Context, api v1api.FullNode, metadata string info := &pipeline.SectorInfo{ State: pipeline.Proving, SectorNumber: sector.SectorID, - Pieces: []lapi.SectorPiece{ - { + Pieces: []pipeline.SafeSectorPiece{ + pipeline.SafePiece(lapi.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(meta.SectorSize), PieceCID: commD, }, - DealInfo: &lapi.PieceDealInfo{ + DealInfo: &piece.PieceDealInfo{ DealID: dealID, DealProposal: §or.Deal, - DealSchedule: lapi.DealSchedule{ + DealSchedule: piece.DealSchedule{ StartEpoch: sector.Deal.StartEpoch, EndEpoch: sector.Deal.EndEpoch, }, }, - }, + }), }, CommD: &commD, CommR: &commR, diff --git a/cmd/lotus-shed/fip-0036.go b/cmd/lotus-shed/fip-0036.go deleted file mode 100644 index 4c8456c04ce..00000000000 --- a/cmd/lotus-shed/fip-0036.go +++ /dev/null @@ -1,554 +0,0 @@ -package main - -import ( - "context" - "encoding/json" - "fmt" - "io" - "os" - "sort" - "strconv" - - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/mitchellh/go-homedir" - "github.com/urfave/cli/v2" - "golang.org/x/xerrors" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/big" - - "github.com/filecoin-project/lotus/chain/actors/adt" - "github.com/filecoin-project/lotus/chain/actors/builtin" - "github.com/filecoin-project/lotus/chain/actors/builtin/market" - "github.com/filecoin-project/lotus/chain/actors/builtin/miner" - "github.com/filecoin-project/lotus/chain/actors/builtin/multisig" - "github.com/filecoin-project/lotus/chain/actors/builtin/power" - "github.com/filecoin-project/lotus/chain/consensus/filcns" - "github.com/filecoin-project/lotus/chain/state" - "github.com/filecoin-project/lotus/chain/store" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/node/repo" -) - -type Option uint64 - -const ( - Approve Option = 49 - Reject Option = 50 -) - -type Vote struct { - ID uint64 - OptionID Option - SignerAddress address.Address -} - -type msigVote struct { - Multisig msigBriefInfo - ApproveCount uint64 - RejectCount uint64 -} - -// https://filpoll.io/poll/16 -// snapshot height: 2162760 -// state root: bafy2bzacebdnzh43hw66bmvguk65wiwr5ssaejlq44fpdei2ysfh3eefpdlqs -var fip36PollCmd = &cli.Command{ - Name: "fip36poll", - Usage: "Process the FIP0036 FilPoll result", - ArgsUsage: "[state root, votes]", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "repo", - Value: "~/.lotus", - }, - }, - Subcommands: []*cli.Command{ - finalResultCmd, - }, -} - -var finalResultCmd = &cli.Command{ - Name: "results", - Usage: "get poll results", - ArgsUsage: "[state root] [height] [votes json]", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "repo", - Value: "~/.lotus", - }, - }, - - Action: func(cctx *cli.Context) error { - if cctx.NArg() != 3 { - return xerrors.New("filpoll0036 results [state root] [height] [votes.json]") - } - - ctx := context.TODO() - if !cctx.Args().Present() { - return fmt.Errorf("must pass state root") - } - - sroot, err := cid.Decode(cctx.Args().First()) - if err != nil { - return fmt.Errorf("failed to parse input: %w", err) - } - - fsrepo, err := repo.NewFS(cctx.String("repo")) - if err != nil { - return err - } - - lkrepo, err := fsrepo.Lock(repo.FullNode) - if err != nil { - return err - } - - defer lkrepo.Close() //nolint:errcheck - - bs, err := lkrepo.Blockstore(ctx, repo.UniversalBlockstore) - if err != nil { - return fmt.Errorf("failed to open blockstore: %w", err) - } - - defer func() { - if c, ok := bs.(io.Closer); ok { - if err := c.Close(); err != nil { - log.Warnf("failed to close blockstore: %s", err) - } - } - }() - - mds, err := lkrepo.Datastore(context.Background(), "/metadata") - if err != nil { - return err - } - - cs := store.NewChainStore(bs, bs, mds, filcns.Weight, nil) - defer cs.Close() //nolint:errcheck - - cst := cbor.NewCborStore(bs) - store := adt.WrapStore(ctx, cst) - - st, err := state.LoadStateTree(cst, sroot) - if err != nil { - return err - } - - height, err := strconv.Atoi(cctx.Args().Get(1)) - if err != nil { - return err - } - - //get all the votes' signer ID address && their vote - vj, err := homedir.Expand(cctx.Args().Get(2)) - if err != nil { - return xerrors.Errorf("fail to get votes json") - } - votes, err := getVotesMap(vj) - if err != nil { - return xerrors.Errorf("failed to get voters: %w\n", err) - } - - type minerBriefInfo struct { - rawBytePower abi.StoragePower - dealPower abi.StoragePower - balance abi.TokenAmount - } - - // power actor - pa, err := st.GetActor(power.Address) - if err != nil { - return xerrors.Errorf("failed to get power actor: %w\n", err) - } - - powerState, err := power.Load(store, pa) - if err != nil { - return xerrors.Errorf("failed to get power state: %w\n", err) - } - - //market actor - ma, err := st.GetActor(market.Address) - if err != nil { - return xerrors.Errorf("fail to get market actor: %w\n", err) - } - - marketState, err := market.Load(store, ma) - if err != nil { - return xerrors.Errorf("fail to load market state: %w\n", err) - } - - lookupId := func(addr address.Address) address.Address { - ret, err := st.LookupID(addr) - if err != nil { - panic(err) - } - - return ret - } - - // we need to build several pieces of information, as we traverse the state tree: - // a map of accounts to every msig that they are a signer of - accountsToMultisigs := make(map[address.Address][]address.Address) - // a map of multisigs to some info about them for quick lookup - msigActorsInfo := make(map[address.Address]msigBriefInfo) - // a map of actors (accounts+multisigs) to every miner that they are an owner of - ownerMap := make(map[address.Address][]address.Address) - // a map of accounts to every miner that they are a worker of - workerMap := make(map[address.Address][]address.Address) - // a map of miners to some info about them for quick lookup - minerActorsInfo := make(map[address.Address]minerBriefInfo) - // a map of client addresses to deal data stored in proposals - clientToDealStorage := make(map[address.Address]abi.StoragePower) - - fmt.Println("iterating over all actors") - count := 0 - err = st.ForEach(func(addr address.Address, act *types.Actor) error { - if count%200000 == 0 { - fmt.Println("processed ", count, " actors building maps") - } - count++ - if builtin.IsMultisigActor(act.Code) { - ms, err := multisig.Load(store, act) - if err != nil { - return fmt.Errorf("load msig failed %v", err) - - } - - // TODO: Confirm that these are always ID addresses - signers, err := ms.Signers() - if err != nil { - return xerrors.Errorf("fail to get msig signers: %w", err) - } - for _, s := range signers { - signerId := lookupId(s) - accountsToMultisigs[signerId] = append(accountsToMultisigs[signerId], addr) - } - - locked, err := ms.LockedBalance(abi.ChainEpoch(height)) - if err != nil { - return xerrors.Errorf("failed to compute locked multisig balance: %w", err) - } - - threshold, _ := ms.Threshold() - info := msigBriefInfo{ - ID: addr, - Signer: signers, - Balance: big.Max(big.Zero(), types.BigSub(act.Balance, locked)), - Threshold: threshold, - } - msigActorsInfo[addr] = info - } - - if builtin.IsStorageMinerActor(act.Code) { - m, err := miner.Load(store, act) - if err != nil { - return xerrors.Errorf("fail to load miner actor: %w", err) - } - - info, err := m.Info() - if err != nil { - return xerrors.Errorf("fail to get miner info: %w\n", err) - } - - ownerId := lookupId(info.Owner) - ownerMap[ownerId] = append(ownerMap[ownerId], addr) - - workerId := lookupId(info.Worker) - workerMap[workerId] = append(workerMap[workerId], addr) - - lockedFunds, err := m.LockedFunds() - if err != nil { - return err - } - - bal := big.Sub(act.Balance, lockedFunds.TotalLockedFunds()) - bal = big.Max(big.Zero(), bal) - - pow, ok, err := powerState.MinerPower(addr) - if err != nil { - return err - } - - if !ok { - pow.RawBytePower = big.Zero() - } - - minerActorsInfo[addr] = minerBriefInfo{ - rawBytePower: pow.RawBytePower, - // gets added up outside this loop - dealPower: big.Zero(), - balance: bal, - } - } - - return nil - }) - - if err != nil { - return err - } - - fmt.Println("iterating over proposals") - dealProposals, err := marketState.Proposals() - if err != nil { - return err - } - - dealStates, err := marketState.States() - if err != nil { - return err - } - - if err := dealProposals.ForEach(func(dealID abi.DealID, d market.DealProposal) error { - - dealState, ok, err := dealStates.Get(dealID) - if err != nil { - return err - } - if !ok || dealState.SectorStartEpoch == -1 { - // effectively a continue - return nil - } - - clientId := lookupId(d.Client) - if cd, found := clientToDealStorage[clientId]; found { - clientToDealStorage[clientId] = big.Add(cd, big.NewInt(int64(d.PieceSize))) - } else { - clientToDealStorage[clientId] = big.NewInt(int64(d.PieceSize)) - } - - providerId := lookupId(d.Provider) - mai, found := minerActorsInfo[providerId] - - if !found { - return xerrors.Errorf("didn't find miner %s", providerId) - } - - mai.dealPower = big.Add(mai.dealPower, big.NewInt(int64(d.PieceSize))) - minerActorsInfo[providerId] = mai - return nil - }); err != nil { - return xerrors.Errorf("fail to get deals") - } - - // now tabulate votes - - approveBalance := abi.NewTokenAmount(0) - rejectionBalance := abi.NewTokenAmount(0) - clientApproveBytes := big.Zero() - clientRejectBytes := big.Zero() - msigPendingVotes := make(map[address.Address]msigVote) //map[msig ID]msigVote - msigVotes := make(map[address.Address]Option) - minerVotes := make(map[address.Address]Option) - fmt.Println("counting account and multisig votes") - for _, vote := range votes { - signerId, err := st.LookupID(vote.SignerAddress) - if err != nil { - fmt.Println("voter ", vote.SignerAddress, " not found in state tree, skipping") - continue - } - - //process votes for regular accounts - accountActor, err := st.GetActor(signerId) - if err != nil { - return xerrors.Errorf("fail to get account account for signer: %w\n", err) - } - - clientBytes, ok := clientToDealStorage[signerId] - if !ok { - clientBytes = big.Zero() - } - - if vote.OptionID == Approve { - approveBalance = types.BigAdd(approveBalance, accountActor.Balance) - clientApproveBytes = big.Add(clientApproveBytes, clientBytes) - } else { - rejectionBalance = types.BigAdd(rejectionBalance, accountActor.Balance) - clientRejectBytes = big.Add(clientRejectBytes, clientBytes) - } - - if minerInfos, found := ownerMap[signerId]; found { - for _, minerInfo := range minerInfos { - minerVotes[minerInfo] = vote.OptionID - } - } - if minerInfos, found := workerMap[signerId]; found { - for _, minerInfo := range minerInfos { - if _, ok := minerVotes[minerInfo]; !ok { - minerVotes[minerInfo] = vote.OptionID - } - } - } - - //process msigs - // There is a possibility that enough signers have voted for BOTH options in the poll to be above the threshold - // Because we are iterating over votes in order they arrived, the first option to go over the threshold will win - // This is in line with onchain behaviour (consider a case where signers are competing to withdraw all the funds - // in an msig into 2 different accounts) - if mss, found := accountsToMultisigs[signerId]; found { - for _, ms := range mss { //get all the msig signer has - if _, ok := msigVotes[ms]; ok { - // msig has already voted, skip - continue - } - if mpv, found := msigPendingVotes[ms]; found { //other signers of the multisig have voted, yet the threshold has not met - if vote.OptionID == Approve { - if mpv.ApproveCount+1 == mpv.Multisig.Threshold { //met threshold - approveBalance = types.BigAdd(approveBalance, mpv.Multisig.Balance) - delete(msigPendingVotes, ms) //threshold, can skip later signer votes - msigVotes[ms] = vote.OptionID - - } else { - mpv.ApproveCount++ - msigPendingVotes[ms] = mpv - } - } else { - if mpv.RejectCount+1 == mpv.Multisig.Threshold { //met threshold - rejectionBalance = types.BigAdd(rejectionBalance, mpv.Multisig.Balance) - delete(msigPendingVotes, ms) //threshold, can skip later signer votes - msigVotes[ms] = vote.OptionID - - } else { - mpv.RejectCount++ - msigPendingVotes[ms] = mpv - } - } - } else { //first vote received from one of the signers of the msig - msi, ok := msigActorsInfo[ms] - if !ok { - return xerrors.Errorf("didn't find msig %s in msig map", ms) - } - - if msi.Threshold == 1 { //met threshold with this signer's single vote - if vote.OptionID == Approve { - approveBalance = types.BigAdd(approveBalance, msi.Balance) - msigVotes[ms] = Approve - - } else { - rejectionBalance = types.BigAdd(rejectionBalance, msi.Balance) - msigVotes[ms] = Reject - } - } else { //threshold not met, add to pending vote - if vote.OptionID == Approve { - msigPendingVotes[ms] = msigVote{ - Multisig: msi, - ApproveCount: 1, - } - } else { - msigPendingVotes[ms] = msigVote{ - Multisig: msi, - RejectCount: 1, - } - } - } - } - } - } - } - - for s, v := range msigVotes { - if minerInfos, found := ownerMap[s]; found { - for _, minerInfo := range minerInfos { - minerVotes[minerInfo] = v - } - } - if minerInfos, found := workerMap[s]; found { - for _, minerInfo := range minerInfos { - if _, ok := minerVotes[minerInfo]; !ok { - minerVotes[minerInfo] = v - } - } - } - } - - approveRBP := big.Zero() - approveDealPower := big.Zero() - rejectionRBP := big.Zero() - rejectionDealPower := big.Zero() - fmt.Println("adding up miner votes") - for minerAddr, vote := range minerVotes { - mbi, ok := minerActorsInfo[minerAddr] - if !ok { - return xerrors.Errorf("failed to find miner info for %s", minerAddr) - } - - if vote == Approve { - approveBalance = big.Add(approveBalance, mbi.balance) - approveRBP = big.Add(approveRBP, mbi.rawBytePower) - approveDealPower = big.Add(approveDealPower, mbi.dealPower) - } else { - rejectionBalance = big.Add(rejectionBalance, mbi.balance) - rejectionRBP = big.Add(rejectionRBP, mbi.rawBytePower) - rejectionDealPower = big.Add(rejectionDealPower, mbi.dealPower) - } - } - - fmt.Println("Total acceptance token: ", approveBalance) - fmt.Println("Total rejection token: ", rejectionBalance) - - fmt.Println("Total acceptance SP deal power: ", approveDealPower) - fmt.Println("Total rejection SP deal power: ", rejectionDealPower) - - fmt.Println("Total acceptance SP rb power: ", approveRBP) - fmt.Println("Total rejection SP rb power: ", rejectionRBP) - - fmt.Println("Total acceptance Client rb power: ", clientApproveBytes) - fmt.Println("Total rejection Client rb power: ", clientRejectBytes) - - fmt.Println("\n\nFinal results **drumroll**") - if rejectionBalance.GreaterThanEqual(big.Mul(approveBalance, big.NewInt(3))) { - fmt.Println("token holders VETO FIP-0036!") - } else if approveBalance.LessThanEqual(rejectionBalance) { - fmt.Println("token holders REJECT FIP-0036") - } else { - fmt.Println("token holders ACCEPT FIP-0036") - } - - if rejectionDealPower.GreaterThanEqual(big.Mul(approveDealPower, big.NewInt(3))) { - fmt.Println("SPs by deal data stored VETO FIP-0036!") - } else if approveDealPower.LessThanEqual(rejectionDealPower) { - fmt.Println("SPs by deal data stored REJECT FIP-0036") - } else { - fmt.Println("SPs by deal data stored ACCEPT FIP-0036") - } - - if rejectionRBP.GreaterThanEqual(big.Mul(approveRBP, big.NewInt(3))) { - fmt.Println("SPs by total raw byte power VETO FIP-0036!") - } else if approveRBP.LessThanEqual(rejectionRBP) { - fmt.Println("SPs by total raw byte power REJECT FIP-0036") - } else { - fmt.Println("SPs by total raw byte power ACCEPT FIP-0036") - } - - if clientRejectBytes.GreaterThanEqual(big.Mul(clientApproveBytes, big.NewInt(3))) { - fmt.Println("Storage Clients VETO FIP-0036!") - } else if clientApproveBytes.LessThanEqual(clientRejectBytes) { - fmt.Println("Storage Clients REJECT FIP-0036") - } else { - fmt.Println("Storage Clients ACCEPT FIP-0036") - } - - return nil - }, -} - -// Returns voted sorted by votes from earliest to latest -func getVotesMap(file string) ([]Vote, error) { - var votes []Vote - vb, err := os.ReadFile(file) - if err != nil { - return nil, xerrors.Errorf("read vote: %w", err) - } - - if err := json.Unmarshal(vb, &votes); err != nil { - return nil, xerrors.Errorf("unmarshal vote: %w", err) - } - - sort.SliceStable(votes, func(i, j int) bool { - return votes[i].ID < votes[j].ID - }) - - return votes, nil -} diff --git a/cmd/lotus-shed/indexes.go b/cmd/lotus-shed/indexes.go index be7d43e0513..620933e25f8 100644 --- a/cmd/lotus-shed/indexes.go +++ b/cmd/lotus-shed/indexes.go @@ -9,13 +9,11 @@ import ( "strings" "github.com/mitchellh/go-homedir" - "github.com/multiformats/go-varint" "github.com/urfave/cli/v2" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/exitcode" @@ -109,6 +107,7 @@ var backfillEventsCmd = &cli.Command{ addressLookups := make(map[abi.ActorID]address.Address) + // TODO: We don't need this address resolution anymore once https://github.com/filecoin-project/lotus/issues/11594 lands resolveFn := func(ctx context.Context, emitter abi.ActorID, ts *types.TipSet) (address.Address, bool) { // we only want to match using f4 addresses idAddr, err := address.NewIDAddress(uint64(emitter)) @@ -118,18 +117,9 @@ var backfillEventsCmd = &cli.Command{ actor, err := api.StateGetActor(ctx, idAddr, ts.Key()) if err != nil || actor.Address == nil { - return address.Undef, false - } - - // if robust address is not f4 then we won't match against it so bail early - if actor.Address.Protocol() != address.Delegated { - return address.Undef, false + return idAddr, true } - // we have an f4 address, make sure it's assigned by the EAM - if namespace, _, err := varint.FromUvarint(actor.Address.Payload()); err != nil || namespace != builtintypes.EthereumAddressManagerActorID { - return address.Undef, false - } return *actor.Address, true } diff --git a/cmd/lotus-shed/main.go b/cmd/lotus-shed/main.go index d5a2ad2cdfd..e9f9f3b6bd1 100644 --- a/cmd/lotus-shed/main.go +++ b/cmd/lotus-shed/main.go @@ -84,7 +84,6 @@ func main() { diffCmd, itestdCmd, msigCmd, - fip36PollCmd, invariantsCmd, gasTraceCmd, replayOfflineCmd, diff --git a/cmd/lotus-shed/market.go b/cmd/lotus-shed/market.go index 4436e3c404a..6fb1566b671 100644 --- a/cmd/lotus-shed/market.go +++ b/cmd/lotus-shed/market.go @@ -387,7 +387,7 @@ var marketDealsTotalStorageCmd = &cli.Command{ count := 0 for _, deal := range deals { - if market.IsDealActive(deal.State) { + if market.IsDealActive(deal.State.Iface()) { dealStorage := big.NewIntUnsigned(uint64(deal.Proposal.PieceSize)) total = big.Add(total, dealStorage) count++ diff --git a/cmd/lotus-shed/shedgen/cbor_gen.go b/cmd/lotus-shed/shedgen/cbor_gen.go index f2a79fe7dce..10b41827ffd 100644 --- a/cmd/lotus-shed/shedgen/cbor_gen.go +++ b/cmd/lotus-shed/shedgen/cbor_gen.go @@ -31,7 +31,7 @@ func (t *CarbNode) MarshalCBOR(w io.Writer) error { } // t.Sub ([]cid.Cid) (slice) - if len("Sub") > cbg.MaxLength { + if len("Sub") > 8192 { return xerrors.Errorf("Value in field \"Sub\" was too long") } @@ -42,7 +42,7 @@ func (t *CarbNode) MarshalCBOR(w io.Writer) error { return err } - if len(t.Sub) > cbg.MaxLength { + if len(t.Sub) > 8192 { return xerrors.Errorf("Slice value in field t.Sub was too long") } @@ -88,7 +88,7 @@ func (t *CarbNode) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -105,7 +105,7 @@ func (t *CarbNode) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Sub: array too large (%d)", extra) } @@ -136,6 +136,7 @@ func (t *CarbNode) UnmarshalCBOR(r io.Reader) (err error) { t.Sub[i] = c } + } } diff --git a/conformance/chaos/cbor_gen.go b/conformance/chaos/cbor_gen.go index d74ae0946a1..09d48ad103d 100644 --- a/conformance/chaos/cbor_gen.go +++ b/conformance/chaos/cbor_gen.go @@ -37,7 +37,7 @@ func (t *State) MarshalCBOR(w io.Writer) error { } // t.Value (string) (string) - if len(t.Value) > cbg.MaxLength { + if len(t.Value) > 8192 { return xerrors.Errorf("Value in field t.Value was too long") } @@ -49,7 +49,7 @@ func (t *State) MarshalCBOR(w io.Writer) error { } // t.Unmarshallable ([]*chaos.UnmarshallableCBOR) (slice) - if len(t.Unmarshallable) > cbg.MaxLength { + if len(t.Unmarshallable) > 8192 { return xerrors.Errorf("Slice value in field t.Unmarshallable was too long") } @@ -60,6 +60,7 @@ func (t *State) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -90,7 +91,7 @@ func (t *State) UnmarshalCBOR(r io.Reader) (err error) { // t.Value (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -104,7 +105,7 @@ func (t *State) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Unmarshallable: array too large (%d)", extra) } @@ -142,9 +143,9 @@ func (t *State) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - return nil } @@ -174,7 +175,7 @@ func (t *CallerValidationArgs) MarshalCBOR(w io.Writer) error { } // t.Addrs ([]address.Address) (slice) - if len(t.Addrs) > cbg.MaxLength { + if len(t.Addrs) > 8192 { return xerrors.Errorf("Slice value in field t.Addrs was too long") } @@ -185,10 +186,11 @@ func (t *CallerValidationArgs) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Types ([]cid.Cid) (slice) - if len(t.Types) > cbg.MaxLength { + if len(t.Types) > 8192 { return xerrors.Errorf("Slice value in field t.Types was too long") } @@ -231,10 +233,10 @@ func (t *CallerValidationArgs) UnmarshalCBOR(r io.Reader) (err error) { // t.Branch (chaos.CallerValidationBranch) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -260,7 +262,7 @@ func (t *CallerValidationArgs) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Addrs: array too large (%d)", extra) } @@ -288,9 +290,9 @@ func (t *CallerValidationArgs) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Types ([]cid.Cid) (slice) maj, extra, err = cr.ReadHeader() @@ -298,7 +300,7 @@ func (t *CallerValidationArgs) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Types: array too large (%d)", extra) } @@ -329,9 +331,9 @@ func (t *CallerValidationArgs) UnmarshalCBOR(r io.Reader) (err error) { t.Types[i] = c } + } } - return nil } @@ -562,7 +564,7 @@ func (t *SendArgs) MarshalCBOR(w io.Writer) error { } // t.Params ([]uint8) (slice) - if len(t.Params) > cbg.ByteArrayMaxLen { + if len(t.Params) > 2097152 { return xerrors.Errorf("Byte array in field t.Params was too long") } @@ -570,9 +572,10 @@ func (t *SendArgs) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Params[:]); err != nil { + if _, err := cw.Write(t.Params); err != nil { return err } + return nil } @@ -638,7 +641,7 @@ func (t *SendArgs) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Params: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -649,9 +652,10 @@ func (t *SendArgs) UnmarshalCBOR(r io.Reader) (err error) { t.Params = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Params[:]); err != nil { + if _, err := io.ReadFull(cr, t.Params); err != nil { return err } + return nil } @@ -670,7 +674,7 @@ func (t *SendReturn) MarshalCBOR(w io.Writer) error { } // t.Return (builtin.CBORBytes) (slice) - if len(t.Return) > cbg.ByteArrayMaxLen { + if len(t.Return) > 2097152 { return xerrors.Errorf("Byte array in field t.Return was too long") } @@ -678,7 +682,7 @@ func (t *SendReturn) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Return[:]); err != nil { + if _, err := cw.Write(t.Return); err != nil { return err } @@ -692,6 +696,7 @@ func (t *SendReturn) MarshalCBOR(w io.Writer) error { return err } } + return nil } @@ -725,7 +730,7 @@ func (t *SendReturn) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Return: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -736,16 +741,17 @@ func (t *SendReturn) UnmarshalCBOR(r io.Reader) (err error) { t.Return = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Return[:]); err != nil { + if _, err := io.ReadFull(cr, t.Return); err != nil { return err } + // t.Code (exitcode.ExitCode) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -782,7 +788,7 @@ func (t *MutateStateArgs) MarshalCBOR(w io.Writer) error { } // t.Value (string) (string) - if len(t.Value) > cbg.MaxLength { + if len(t.Value) > 8192 { return xerrors.Errorf("Value in field t.Value was too long") } @@ -803,6 +809,7 @@ func (t *MutateStateArgs) MarshalCBOR(w io.Writer) error { return err } } + return nil } @@ -832,7 +839,7 @@ func (t *MutateStateArgs) UnmarshalCBOR(r io.Reader) (err error) { // t.Value (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -842,10 +849,10 @@ func (t *MutateStateArgs) UnmarshalCBOR(r io.Reader) (err error) { // t.Branch (chaos.MutateStateBranch) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -893,7 +900,7 @@ func (t *AbortWithArgs) MarshalCBOR(w io.Writer) error { } // t.Message (string) (string) - if len(t.Message) > cbg.MaxLength { + if len(t.Message) > 8192 { return xerrors.Errorf("Value in field t.Message was too long") } @@ -937,10 +944,10 @@ func (t *AbortWithArgs) UnmarshalCBOR(r io.Reader) (err error) { // t.Code (exitcode.ExitCode) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -962,7 +969,7 @@ func (t *AbortWithArgs) UnmarshalCBOR(r io.Reader) (err error) { // t.Message (string) (string) { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1094,10 +1101,10 @@ func (t *InspectRuntimeReturn) UnmarshalCBOR(r io.Reader) (err error) { // t.CurrEpoch (abi.ChainEpoch) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index 57070caedf5..b133930bc7c 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -475,7 +475,7 @@ Inputs: ], "Bw==", 10101, - 21 + 22 ] ``` @@ -826,8 +826,7 @@ Response: "State": { "SectorStartEpoch": 10101, "LastUpdatedEpoch": 10101, - "SlashEpoch": 10101, - "VerifiedClaim": 0 + "SlashEpoch": 10101 } } ] @@ -1426,8 +1425,7 @@ Response: "State": { "SectorStartEpoch": 10101, "LastUpdatedEpoch": 10101, - "SlashEpoch": 10101, - "VerifiedClaim": 0 + "SlashEpoch": 10101 } } ] @@ -2910,6 +2908,14 @@ Inputs: "StartEpoch": 10101, "EndEpoch": 10101 }, + "PieceActivationManifest": { + "CID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Size": 2032, + "VerifiedAllocationKey": null, + "Notify": null + }, "KeepUnsealed": true } ] @@ -3212,6 +3218,14 @@ Inputs: "StartEpoch": 10101, "EndEpoch": 10101 }, + "PieceActivationManifest": { + "CID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Size": 2032, + "VerifiedAllocationKey": null, + "Notify": null + }, "KeepUnsealed": true } } @@ -3556,6 +3570,14 @@ Response: "StartEpoch": 10101, "EndEpoch": 10101 }, + "PieceActivationManifest": { + "CID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Size": 2032, + "VerifiedAllocationKey": null, + "Notify": null + }, "KeepUnsealed": true } } diff --git a/documentation/en/api-v0-methods-provider.md b/documentation/en/api-v0-methods-provider.md index 43846035a0d..a1ccc17c24b 100644 --- a/documentation/en/api-v0-methods-provider.md +++ b/documentation/en/api-v0-methods-provider.md @@ -69,6 +69,14 @@ Inputs: "StartEpoch": 10101, "EndEpoch": 10101 }, + "PieceActivationManifest": { + "CID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Size": 2032, + "VerifiedAllocationKey": null, + "Notify": null + }, "KeepUnsealed": true }, 9, diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 41119033925..eedfd227e93 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -170,6 +170,8 @@ * [StateDealProviderCollateralBounds](#StateDealProviderCollateralBounds) * [StateDecodeParams](#StateDecodeParams) * [StateGetActor](#StateGetActor) + * [StateGetAllAllocations](#StateGetAllAllocations) + * [StateGetAllClaims](#StateGetAllClaims) * [StateGetAllocation](#StateGetAllocation) * [StateGetAllocationForPendingDeal](#StateGetAllocationForPendingDeal) * [StateGetAllocations](#StateGetAllocations) @@ -4732,7 +4734,7 @@ Perms: read Inputs: ```json [ - 21 + 22 ] ``` @@ -4747,7 +4749,7 @@ Perms: read Inputs: ```json [ - 21 + 22 ] ``` @@ -5313,6 +5315,50 @@ Response: } ``` +### StateGetAllAllocations +StateGetAllAllocations returns the all the allocations available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + +### StateGetAllClaims +StateGetAllClaims returns the all the claims available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + ### StateGetAllocation StateGetAllocation returns the allocation for a given address and allocation ID. @@ -5513,7 +5559,9 @@ Response: "UpgradeHyggeHeight": 10101, "UpgradeLightningHeight": 10101, "UpgradeThunderHeight": 10101, - "UpgradeWatermelonHeight": 10101 + "UpgradeWatermelonHeight": 10101, + "UpgradeDragonHeight": 10101, + "UpgradePhoenixHeight": 10101 }, "Eip155ChainID": 123 } @@ -5794,8 +5842,7 @@ Response: "State": { "SectorStartEpoch": 10101, "LastUpdatedEpoch": 10101, - "SlashEpoch": 10101, - "VerifiedClaim": 0 + "SlashEpoch": 10101 } } } @@ -5873,8 +5920,7 @@ Response: "State": { "SectorStartEpoch": 10101, "LastUpdatedEpoch": 10101, - "SlashEpoch": 10101, - "VerifiedClaim": 0 + "SlashEpoch": 10101 } } ``` @@ -6439,7 +6485,7 @@ Inputs: ] ``` -Response: `21` +Response: `22` ### StateReadState StateReadState returns the indicated actor's state. diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index c65c102d39b..287cfce5374 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -115,6 +115,8 @@ * [GasEstimateGasLimit](#GasEstimateGasLimit) * [GasEstimateGasPremium](#GasEstimateGasPremium) * [GasEstimateMessageGas](#GasEstimateMessageGas) +* [Get](#Get) + * [GetActorEvents](#GetActorEvents) * [I](#I) * [ID](#ID) * [Log](#Log) @@ -227,8 +229,11 @@ * [StateDecodeParams](#StateDecodeParams) * [StateEncodeParams](#StateEncodeParams) * [StateGetActor](#StateGetActor) + * [StateGetAllAllocations](#StateGetAllAllocations) + * [StateGetAllClaims](#StateGetAllClaims) * [StateGetAllocation](#StateGetAllocation) * [StateGetAllocationForPendingDeal](#StateGetAllocationForPendingDeal) + * [StateGetAllocationIdForPendingDeal](#StateGetAllocationIdForPendingDeal) * [StateGetAllocations](#StateGetAllocations) * [StateGetBeaconEntry](#StateGetBeaconEntry) * [StateGetClaim](#StateGetClaim) @@ -276,6 +281,8 @@ * [StateVerifiedRegistryRootKey](#StateVerifiedRegistryRootKey) * [StateVerifierStatus](#StateVerifierStatus) * [StateWaitMsg](#StateWaitMsg) +* [Subscribe](#Subscribe) + * [SubscribeActorEvents](#SubscribeActorEvents) * [Sync](#Sync) * [SyncCheckBad](#SyncCheckBad) * [SyncCheckpoint](#SyncCheckpoint) @@ -3376,6 +3383,72 @@ Response: } ``` +## Get + + +### GetActorEvents +GetActorEvents returns all user-programmed and built-in actor events that match the given +filter. +This is a request/response API. +Results available from this API may be limited by the MaxFilterResults and MaxFilterHeightRange +configuration options and also the amount of historical data available in the node. + +This is an EXPERIMENTAL API and may be subject to change. + + +Perms: read + +Inputs: +```json +[ + { + "addresses": [ + "f01234" + ], + "fields": { + "abc": [ + { + "codec": 81, + "value": "ZGRhdGE=" + } + ] + }, + "fromHeight": 1010, + "toHeight": 1020 + } +] +``` + +Response: +```json +[ + { + "entries": [ + { + "Flags": 7, + "Key": "string value", + "Codec": 42, + "Value": "Ynl0ZSBhcnJheQ==" + } + ], + "emitter": "f01234", + "reverted": true, + "height": 10101, + "tipsetKey": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + "msgCid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + } +] +``` + ## I @@ -6225,7 +6298,7 @@ Perms: read Inputs: ```json [ - 21 + 22 ] ``` @@ -6240,7 +6313,7 @@ Perms: read Inputs: ```json [ - 21 + 22 ] ``` @@ -6857,6 +6930,50 @@ Response: } ``` +### StateGetAllAllocations +StateGetAllAllocations returns the all the allocations available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + +### StateGetAllClaims +StateGetAllClaims returns the all the claims available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + ### StateGetAllocation StateGetAllocation returns the allocation for a given address and allocation ID. @@ -6931,6 +7048,29 @@ Response: } ``` +### StateGetAllocationIdForPendingDeal +StateGetAllocationIdForPendingDeal is like StateGetAllocationForPendingDeal except it returns the allocation ID + + +Perms: read + +Inputs: +```json +[ + 5432, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `0` + ### StateGetAllocations StateGetAllocations returns the all the allocations for a given client. @@ -7081,7 +7221,9 @@ Response: "UpgradeHyggeHeight": 10101, "UpgradeLightningHeight": 10101, "UpgradeThunderHeight": 10101, - "UpgradeWatermelonHeight": 10101 + "UpgradeWatermelonHeight": 10101, + "UpgradeDragonHeight": 10101, + "UpgradePhoenixHeight": 10101 }, "Eip155ChainID": 123 } @@ -7388,8 +7530,7 @@ Response: "State": { "SectorStartEpoch": 10101, "LastUpdatedEpoch": 10101, - "SlashEpoch": 10101, - "VerifiedClaim": 0 + "SlashEpoch": 10101 } } } @@ -7467,8 +7608,7 @@ Response: "State": { "SectorStartEpoch": 10101, "LastUpdatedEpoch": 10101, - "SlashEpoch": 10101, - "VerifiedClaim": 0 + "SlashEpoch": 10101 } } ``` @@ -8061,7 +8201,7 @@ Inputs: ] ``` -Response: `21` +Response: `22` ### StateReadState StateReadState returns the indicated actor's state. @@ -8658,6 +8798,77 @@ Response: } ``` +## Subscribe + + +### SubscribeActorEvents +SubscribeActorEvents returns a long-lived stream of all user-programmed and built-in actor +events that match the given filter. +Events that match the given filter are written to the stream in real-time as they are emitted +from the FVM. +The response stream is closed when the client disconnects, when a ToHeight is specified and is +reached, or if there is an error while writing an event to the stream. +This API also allows clients to read all historical events matching the given filter before any +real-time events are written to the response stream if the filter specifies an earlier +FromHeight. +Results available from this API may be limited by the MaxFilterResults and MaxFilterHeightRange +configuration options and also the amount of historical data available in the node. + +Note: this API is only available via websocket connections. +This is an EXPERIMENTAL API and may be subject to change. + + +Perms: read + +Inputs: +```json +[ + { + "addresses": [ + "f01234" + ], + "fields": { + "abc": [ + { + "codec": 81, + "value": "ZGRhdGE=" + } + ] + }, + "fromHeight": 1010, + "toHeight": 1020 + } +] +``` + +Response: +```json +{ + "entries": [ + { + "Flags": 7, + "Key": "string value", + "Codec": 42, + "Value": "Ynl0ZSBhcnJheQ==" + } + ], + "emitter": "f01234", + "reverted": true, + "height": 10101, + "tipsetKey": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + "msgCid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +} +``` + ## Sync The Sync method group contains methods for interacting with and observing the lotus sync service. diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 2ea89e6ce2d..0f670427546 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.25.3-dev + 1.27.0-dev COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-provider.md b/documentation/en/cli-lotus-provider.md index 984d1a2d5ab..be3b5ec6ec0 100644 --- a/documentation/en/cli-lotus-provider.md +++ b/documentation/en/cli-lotus-provider.md @@ -7,7 +7,7 @@ USAGE: lotus-provider [global options] command [command options] [arguments...] VERSION: - 1.25.3-dev + 1.27.0-dev COMMANDS: cli Execute cli commands diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index 0e0fee1570e..043c16202cd 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.25.3-dev + 1.27.0-dev COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index ff62980dc31..65dd92f0125 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.25.3-dev + 1.27.0-dev COMMANDS: daemon Start a lotus daemon process @@ -1188,8 +1188,8 @@ COMMANDS: check-client-datacap check verified client remaining bytes check-notary-datacap check a notary's remaining bytes sign-remove-data-cap-proposal allows a notary to sign a Remove Data Cap Proposal - list-allocations List allocations made by client - list-claims List claims made by provider + list-allocations List allocations available in verified registry actor or made by a client if specified + list-claims List claims available in verified registry actor or made by provider if specified remove-expired-allocations remove expired allocations (if no allocations are specified all eligible allocations are removed) remove-expired-claims remove expired claims (if no claims are specified all eligible claims are removed) help, h Shows a list of commands or help for one command @@ -1275,20 +1275,21 @@ OPTIONS: ### lotus filplus list-allocations ``` NAME: - lotus filplus list-allocations - List allocations made by client + lotus filplus list-allocations - List allocations available in verified registry actor or made by a client if specified USAGE: lotus filplus list-allocations [command options] clientAddress OPTIONS: --expired list only expired allocations (default: false) + --json output results in json format (default: false) --help, -h show help ``` ### lotus filplus list-claims ``` NAME: - lotus filplus list-claims - List claims made by provider + lotus filplus list-claims - List claims available in verified registry actor or made by provider if specified USAGE: lotus filplus list-claims [command options] providerAddress diff --git a/documentation/en/default-lotus-config.toml b/documentation/en/default-lotus-config.toml index 9f9836bc0cd..420c192bd4f 100644 --- a/documentation/en/default-lotus-config.toml +++ b/documentation/en/default-lotus-config.toml @@ -276,9 +276,8 @@ #EthTxHashMappingLifetimeDays = 0 [Fevm.Events] - # EnableEthRPC enables APIs that # DisableRealTimeFilterAPI will disable the RealTimeFilterAPI that can create and query filters for actor events as they are emitted. - # The API is enabled when EnableEthRPC is true, but can be disabled selectively with this flag. + # The API is enabled when EnableEthRPC or Events.EnableActorEventsAPI is true, but can be disabled selectively with this flag. # # type: bool # env var: LOTUS_FEVM_EVENTS_DISABLEREALTIMEFILTERAPI @@ -286,7 +285,7 @@ # DisableHistoricFilterAPI will disable the HistoricFilterAPI that can create and query filters for actor events # that occurred in the past. HistoricFilterAPI maintains a queryable index of events. - # The API is enabled when EnableEthRPC is true, but can be disabled selectively with this flag. + # The API is enabled when EnableEthRPC or Events.EnableActorEventsAPI is true, but can be disabled selectively with this flag. # # type: bool # env var: LOTUS_FEVM_EVENTS_DISABLEHISTORICFILTERAPI @@ -328,6 +327,17 @@ #DatabasePath = "" +[Events] + # EnableActorEventsAPI enables the Actor events API that enables clients to consume events + # emitted by (smart contracts + built-in Actors). + # This will also enable the RealTimeFilterAPI and HistoricFilterAPI by default, but they can be + # disabled by setting their respective Disable* options in Fevm.Events. + # + # type: bool + # env var: LOTUS_EVENTS_ENABLEACTOREVENTSAPI + #EnableActorEventsAPI = false + + [Index] # EXPERIMENTAL FEATURE. USE WITH CAUTION # EnableMsgIndex enables indexing of messages on chain. diff --git a/documentation/en/default-lotus-miner-config.toml b/documentation/en/default-lotus-miner-config.toml index a65e82e9504..17fd24fa370 100644 --- a/documentation/en/default-lotus-miner-config.toml +++ b/documentation/en/default-lotus-miner-config.toml @@ -702,6 +702,30 @@ # env var: LOTUS_SEALING_USESYNTHETICPOREP #UseSyntheticPoRep = false + # Whether to abort if any sector activation in a batch fails (newly sealed sectors, only with ProveCommitSectors3). + # + # type: bool + # env var: LOTUS_SEALING_REQUIREACTIVATIONSUCCESS + #RequireActivationSuccess = false + + # Whether to abort if any piece activation notification returns a non-zero exit code (newly sealed sectors, only with ProveCommitSectors3). + # + # type: bool + # env var: LOTUS_SEALING_REQUIREACTIVATIONSUCCESSUPDATE + #RequireActivationSuccessUpdate = false + + # Whether to abort if any sector activation in a batch fails (updating sectors, only with ProveReplicaUpdates3). + # + # type: bool + # env var: LOTUS_SEALING_REQUIRENOTIFICATIONSUCCESS + #RequireNotificationSuccess = false + + # Whether to abort if any piece activation notification returns a non-zero exit code (updating sectors, only with ProveReplicaUpdates3). + # + # type: bool + # env var: LOTUS_SEALING_REQUIRENOTIFICATIONSUCCESSUPDATE + #RequireNotificationSuccessUpdate = false + [Storage] # type: int diff --git a/gateway/node.go b/gateway/node.go index f2464d27496..f3ecb764092 100644 --- a/gateway/node.go +++ b/gateway/node.go @@ -146,6 +146,9 @@ type TargetAPI interface { Web3ClientVersion(ctx context.Context) (string, error) EthTraceBlock(ctx context.Context, blkNum string) ([]*ethtypes.EthTraceBlock, error) EthTraceReplayBlockTransactions(ctx context.Context, blkNum string, traceTypes []string) ([]*ethtypes.EthTraceReplayBlockTransaction, error) + + GetActorEvents(ctx context.Context, filter *types.ActorEventFilter) ([]*types.ActorEvent, error) + SubscribeActorEvents(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) } var _ TargetAPI = *new(api.FullNode) // gateway depends on latest diff --git a/gateway/proxy_fil.go b/gateway/proxy_fil.go index eb8a354edc5..e7ad3bdb49e 100644 --- a/gateway/proxy_fil.go +++ b/gateway/proxy_fil.go @@ -437,6 +437,20 @@ func (gw *Node) StateWaitMsg(ctx context.Context, msg cid.Cid, confidence uint64 return gw.target.StateWaitMsg(ctx, msg, confidence, limit, allowReplaced) } +func (gw *Node) GetActorEvents(ctx context.Context, filter *types.ActorEventFilter) ([]*types.ActorEvent, error) { + if err := gw.limit(ctx, stateRateLimitTokens); err != nil { + return nil, err + } + return gw.target.GetActorEvents(ctx, filter) +} + +func (gw *Node) SubscribeActorEvents(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + if err := gw.limit(ctx, stateRateLimitTokens); err != nil { + return nil, err + } + return gw.target.SubscribeActorEvents(ctx, filter) +} + func (gw *Node) StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*api.ActorState, error) { if err := gw.limit(ctx, stateRateLimitTokens); err != nil { return nil, err diff --git a/gen/inlinegen-data.json b/gen/inlinegen-data.json index cf72d24fa9c..70c8fff61f4 100644 --- a/gen/inlinegen-data.json +++ b/gen/inlinegen-data.json @@ -1,7 +1,7 @@ { - "actorVersions": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], - "latestActorsVersion": 12, + "actorVersions": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], + "latestActorsVersion": 13, - "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], - "latestNetworkVersion": 21 + "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], + "latestNetworkVersion": 22 } diff --git a/gen/main.go b/gen/main.go index d84343739ea..f1fe3876ac0 100644 --- a/gen/main.go +++ b/gen/main.go @@ -14,6 +14,7 @@ import ( "github.com/filecoin-project/lotus/cmd/lotus-shed/shedgen" "github.com/filecoin-project/lotus/node/hello" "github.com/filecoin-project/lotus/paychmgr" + "github.com/filecoin-project/lotus/storage/pipeline/piece" sectorstorage "github.com/filecoin-project/lotus/storage/sealer" "github.com/filecoin-project/lotus/storage/sealer/storiface" ) @@ -64,9 +65,7 @@ func main() { api.SealedRefs{}, api.SealTicket{}, api.SealSeed{}, - api.PieceDealInfo{}, api.SectorPiece{}, - api.DealSchedule{}, ) if err != nil { fmt.Println(err) @@ -111,6 +110,15 @@ func main() { os.Exit(1) } + err = gen.WriteMapEncodersToFile("./storage/pipeline/piece/cbor_gen.go", "piece", + piece.PieceDealInfo{}, + piece.DealSchedule{}, + ) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + err = gen.WriteMapEncodersToFile("./storage/sealer/cbor_gen.go", "sealer", sectorstorage.Call{}, sectorstorage.WorkState{}, diff --git a/go.mod b/go.mod index 583a1760e78..b8f6c38f2e3 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ retract v1.20.2 // Wrongfully cherry picked PR, use v1.20.2+ instead. require ( contrib.go.opencensus.io/exporter/prometheus v0.4.2 - github.com/BurntSushi/toml v1.2.1 + github.com/BurntSushi/toml v1.3.0 github.com/DataDog/zstd v1.4.5 github.com/GeertJohan/go.rice v1.0.3 github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee @@ -23,14 +23,14 @@ require ( github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e github.com/dgraph-io/badger/v2 v2.2007.4 github.com/docker/go-units v0.5.0 - github.com/drand/drand v1.4.9 - github.com/drand/kyber v1.1.15 + github.com/drand/drand v1.5.7 + github.com/drand/kyber v1.2.0 github.com/dustin/go-humanize v1.0.1 github.com/elastic/go-elasticsearch/v7 v7.14.0 github.com/elastic/go-sysinfo v1.7.0 github.com/elastic/gosigar v0.14.2 github.com/etclabscore/go-openrpc-reflect v0.0.36 - github.com/fatih/color v1.13.0 + github.com/fatih/color v1.15.0 github.com/filecoin-project/dagstore v0.5.2 github.com/filecoin-project/filecoin-ffi v0.30.4-0.20220519234331-bfd1f5f9fe38 github.com/filecoin-project/go-address v1.1.0 @@ -47,7 +47,7 @@ require ( github.com/filecoin-project/go-jsonrpc v0.3.1 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 - github.com/filecoin-project/go-state-types v0.12.8 + github.com/filecoin-project/go-state-types v0.13.0-rc.2 github.com/filecoin-project/go-statemachine v1.0.3 github.com/filecoin-project/go-statestore v0.2.0 github.com/filecoin-project/go-storedcounter v0.1.0 @@ -90,7 +90,6 @@ require ( github.com/ipfs/go-fs-lock v0.0.7 github.com/ipfs/go-graphsync v0.14.6 github.com/ipfs/go-ipfs-blocksutil v0.0.1 - github.com/ipfs/go-ipfs-exchange-offline v0.3.0 github.com/ipfs/go-ipld-cbor v0.0.6 github.com/ipfs/go-ipld-format v0.5.0 github.com/ipfs/go-log/v2 v2.5.1 @@ -122,7 +121,7 @@ require ( github.com/minio/sha256-simd v1.0.1 github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.1.0 - github.com/multiformats/go-multiaddr v0.12.1 + github.com/multiformats/go-multiaddr v0.12.2 github.com/multiformats/go-multiaddr-dns v0.3.1 github.com/multiformats/go-multibase v0.2.0 github.com/multiformats/go-multicodec v0.9.0 @@ -141,7 +140,7 @@ require ( github.com/triplewz/poseidon v0.0.0-20230828015038-79d8165c88ed github.com/urfave/cli/v2 v2.25.5 github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba - github.com/whyrusleeping/cbor-gen v0.0.0-20230923211252-36a87e1ba72f + github.com/whyrusleeping/cbor-gen v0.1.0 github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 github.com/xeipuuv/gojsonschema v1.2.0 github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 @@ -156,11 +155,11 @@ require ( go.uber.org/fx v1.20.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.25.0 - golang.org/x/crypto v0.17.0 + golang.org/x/crypto v0.18.0 golang.org/x/net v0.14.0 golang.org/x/sync v0.3.0 - golang.org/x/sys v0.15.0 - golang.org/x/term v0.15.0 + golang.org/x/sys v0.16.0 + golang.org/x/term v0.16.0 golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 @@ -188,9 +187,9 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/drand/kyber-bls12381 v0.2.3 // indirect + github.com/drand/kyber-bls12381 v0.3.1 // indirect github.com/elastic/go-windows v1.0.0 // indirect github.com/etclabscore/go-jsonschema-walk v0.0.6 // indirect github.com/filecoin-project/go-amt-ipld/v2 v2.1.0 // indirect @@ -201,10 +200,9 @@ require ( github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gdamore/encoding v1.0.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.5 // indirect @@ -214,7 +212,7 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.1.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect @@ -256,7 +254,7 @@ require ( github.com/jpillora/backoff v1.0.0 // indirect github.com/kilic/bls12-381 v0.1.0 // indirect github.com/klauspost/compress v1.16.7 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect github.com/libp2p/go-flow-metrics v0.1.0 // indirect @@ -290,7 +288,7 @@ require ( github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect github.com/quic-go/qpack v0.4.0 // indirect @@ -301,7 +299,7 @@ require ( github.com/rs/cors v1.7.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v2.18.12+incompatible // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sirupsen/logrus v1.9.2 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/tidwall/gjson v1.14.4 // indirect github.com/twmb/murmur3 v1.1.6 // indirect @@ -324,7 +322,7 @@ require ( golang.org/x/mod v0.12.0 // indirect golang.org/x/text v0.14.0 // indirect gonum.org/v1/gonum v0.13.0 // indirect - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect google.golang.org/grpc v1.55.0 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 566ce37c634..3efa6b8e2c9 100644 --- a/go.sum +++ b/go.sum @@ -46,8 +46,8 @@ github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOv github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.0 h1:Ws8e5YmnrGEHzZEzg0YvK/7COGYtTC5PbaH9oSSbgfA= +github.com/BurntSushi/toml v1.3.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= @@ -96,6 +96,8 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8V github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/ardanlabs/darwin/v2 v2.0.0 h1:XCisQMgQ5EG+ZvSEcADEo+pyfIMKyWAGnn5o2TgriYE= +github.com/ardanlabs/darwin/v2 v2.0.0/go.mod h1:MubZ2e9DAYGaym0mClSOi183NYahrrfKxvSy1HMhoes= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -232,8 +234,8 @@ github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdw github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -242,19 +244,12 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/drand/bls12-381 v0.3.2/go.mod h1:dtcLgPtYT38L3NO6mPDYH0nbpc5tjPassDqiniuAt4Y= -github.com/drand/drand v1.4.9 h1:WE8Jf/l+7B/rheCMCLZTp5xk0/a05t+ciwBvORq9jXM= -github.com/drand/drand v1.4.9/go.mod h1:vsmJ/kDoVLv1NC0nFihzBPmIFvMGmYtgJewzRBBRVSc= -github.com/drand/kyber v1.0.1-0.20200110225416-8de27ed8c0e2/go.mod h1:UpXoA0Upd1N9l4TvRPHr1qAUBBERj6JQ/mnKI3BPEmw= -github.com/drand/kyber v1.0.2/go.mod h1:x6KOpK7avKj0GJ4emhXFP5n7M7W7ChAPmnQh/OL6vRw= -github.com/drand/kyber v1.1.4/go.mod h1:9+IgTq7kadePhZg7eRwSD7+bA+bmvqRK+8DtmoV5a3U= -github.com/drand/kyber v1.1.10/go.mod h1:UkHLsI4W6+jT5PvNxmc0cvQAgppjTUpX+XCsN9TXmRo= -github.com/drand/kyber v1.1.15 h1:YNL02FPOA98GmlIhh5FuEJWhz1ZCp6tOUVFN7ujBJPE= -github.com/drand/kyber v1.1.15/go.mod h1:tw0l70U6aWCkc4vDr8u/canpOOOiUNJlzsmeElhBfe0= -github.com/drand/kyber-bls12381 v0.2.0/go.mod h1:zQip/bHdeEB6HFZSU3v+d3cQE0GaBVQw9aR2E7AdoeI= -github.com/drand/kyber-bls12381 v0.2.1/go.mod h1:JwWn4nHO9Mp4F5qCie5sVIPQZ0X6cw8XAeMRvc/GXBE= -github.com/drand/kyber-bls12381 v0.2.3 h1:wueWtqjj71wnwm6fYR8MAQk4q8bKVK9WukrGGcaVxzk= -github.com/drand/kyber-bls12381 v0.2.3/go.mod h1:FsudUZf6Xu61u/gYrDHEHf6lKIKluJdnX7WJe4hkMh4= +github.com/drand/drand v1.5.7 h1:5f2D5aH1nEfVI9S6tl2p9bgIDMZ92oltmiY12Kh+eYU= +github.com/drand/drand v1.5.7/go.mod h1:jrJ0244yOHNL5V04vazk3mFatjAWm3i6dg6URWwgbXk= +github.com/drand/kyber v1.2.0 h1:22SbBxsKbgQnJUoyYKIfG909PhBsj0vtANeu4BX5xgE= +github.com/drand/kyber v1.2.0/go.mod h1:6TqFlCc7NGOiNVTF9pF2KcDRfllPd9XOkExuG5Xtwfo= +github.com/drand/kyber-bls12381 v0.3.1 h1:KWb8l/zYTP5yrvKTgvhOrk2eNPscbMiUOIeWBnmUxGo= +github.com/drand/kyber-bls12381 v0.3.1/go.mod h1:H4y9bLPu7KZA/1efDg+jtJ7emKx+ro3PU7/jWUVt140= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -283,8 +278,8 @@ github.com/etclabscore/go-openrpc-reflect v0.0.36 h1:kSqNB2U8RVoW4si+4fsv13NGNkR github.com/etclabscore/go-openrpc-reflect v0.0.36/go.mod h1:0404Ky3igAasAOpyj1eESjstTyneBAIk5PgJFbK4s5E= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.8.0/go.mod h1:3l45GVGkyrnYNl9HoIjnp2NnNWvh6hLAqD8yTfGjnw8= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/filecoin-project/dagstore v0.5.2 h1:Nd6oXdnolbbVhpMpkYT5PJHOjQp4OBSntHpMV5pxj3c= @@ -349,8 +344,8 @@ github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psS github.com/filecoin-project/go-state-types v0.1.6/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.1.10/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.11.2-0.20230712101859-8f37624fa540/go.mod h1:SyNPwTsU7I22gL2r0OAPcImvLoTVfgRwdK/Y5rR1zz8= -github.com/filecoin-project/go-state-types v0.12.8 h1:W/UObdAsv+LbB9EfyLg92DSYoatzUWmlfV8FGyh30VA= -github.com/filecoin-project/go-state-types v0.12.8/go.mod h1:gR2NV0CSGSQwopxF+3In9nDh1sqvoYukLcs5vK0AHCA= +github.com/filecoin-project/go-state-types v0.13.0-rc.2 h1:JHyDDx/nV8sbQNgjUfhumiGWh8Dedc8psbiVtD0YOh0= +github.com/filecoin-project/go-state-types v0.13.0-rc.2/go.mod h1:cHpOPup9H1g2T29dKHAjC2sc7/Ef5ypjuW9A3I+e9yY= github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= github.com/filecoin-project/go-statemachine v1.0.3 h1:N07o6alys+V1tNoSTi4WuuoeNC4erS/6jE74+NsgQuk= github.com/filecoin-project/go-statemachine v1.0.3/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54= @@ -426,8 +421,9 @@ github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBj github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= @@ -480,8 +476,8 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69 github.com/gogo/status v1.1.1 h1:DuHXlSFHNKqTQ+/ACf5Vs6r4X/dH2EgIzR9Vr+H65kg= github.com/gogo/status v1.1.1/go.mod h1:jpG3dM5QPcqu19Hg8lkUhBFBa3TcLs1DG7+2Jqci7oU= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.1 h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw= +github.com/golang/glog v1.1.1/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -589,8 +585,8 @@ github.com/gregdhill/go-openrpc v0.0.0-20220114144539-ae6f44720487 h1:NyaWOSkqFK github.com/gregdhill/go-openrpc v0.0.0-20220114144539-ae6f44720487/go.mod h1:a1eRkbhd3DYpRH2lnuUsVG+QMTI+v0hGnsis8C9hMrA= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= @@ -900,6 +896,8 @@ github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= +github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -929,9 +927,6 @@ github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2vi github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -github.com/kilic/bls12-381 v0.0.0-20200607163746-32e1441c8a9f/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= -github.com/kilic/bls12-381 v0.0.0-20200731194930-64c428e1bff5/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= -github.com/kilic/bls12-381 v0.0.0-20200820230200-6b2c19996391/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -946,9 +941,8 @@ github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQs github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= +github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/koalacxr/quantile v0.0.1 h1:wAW+SQ286Erny9wOjVww96t8ws+x5Zj6AKHDULUK+o0= github.com/koalacxr/quantile v0.0.1/go.mod h1:bGN/mCZLZ4lrSDHRQ6Lglj9chowGux8sGUIND+DQeD0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -973,8 +967,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/lib/pq v1.10.0 h1:Zx5DJFEYQXio93kgXnQ09fXNiUKsqv4OUEu2UtGcB1E= -github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= @@ -1207,14 +1201,12 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -1291,8 +1283,8 @@ github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.12.1 h1:vm+BA/WZA8QZDp1pF1FWhi5CT3g1tbi5GJmqpb6wnlk= -github.com/multiformats/go-multiaddr v0.12.1/go.mod h1:7mPkiBMmLeFipt+nNSq9pHZUeJSt8lHBgH6yhj0YQzE= +github.com/multiformats/go-multiaddr v0.12.2 h1:9G9sTY/wCYajKa9lyfWPmpZAwe6oV+Wb1zcmMS1HG24= +github.com/multiformats/go-multiaddr v0.12.2/go.mod h1:GKyaTYjZRdcUhyOetrxTk9z0cW+jA/YrnqTOvKgi44M= github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= @@ -1358,9 +1350,8 @@ github.com/nikkolasg/hexjson v0.1.0 h1:Cgi1MSZVQFoJKYeRpBNEcdF3LB+Zo4fYKsDz7h8uJ github.com/nikkolasg/hexjson v0.1.0/go.mod h1:fbGbWFZ0FmJMFbpCMtJpwb0tudVxSSZ+Es2TsCg57cA= github.com/nkovacs/streamquote v1.0.0 h1:PmVIV08Zlx2lZK5fFZlMZ04eHcDTIFJCv/5/0twVUow= github.com/nkovacs/streamquote v1.0.0/go.mod h1:BN+NaZ2CmdKqUuTUXUEm9j95B2TRbpOWpxbJYzzgUsc= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -1462,8 +1453,8 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1500,8 +1491,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -1516,8 +1507,8 @@ github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sercand/kuberesolver v2.4.0+incompatible h1:WE2OlRf6wjLxHwNkkFLQGaZcVLEXjMjBPjjEU5vksH8= -github.com/sercand/kuberesolver v2.4.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= +github.com/sercand/kuberesolver/v4 v4.0.0 h1:frL7laPDG/lFm5n98ODmWnn+cvPpzlkf3LhzuPhcHP4= +github.com/sercand/kuberesolver/v4 v4.0.0/go.mod h1:F4RGyuRmMAjeXHKL+w4P7AwUnPceEAPAhxUgXZjKgvM= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -1549,8 +1540,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= +github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= @@ -1599,7 +1590,6 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= @@ -1652,8 +1642,8 @@ github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvS github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= 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/weaveworks/common v0.0.0-20220810113439-c65105d60b18 h1:JN4YR/TNWiZEAHHImrVA2u4DPI+aqPOar23ICUnYZTQ= -github.com/weaveworks/common v0.0.0-20220810113439-c65105d60b18/go.mod h1:YfOOLoW1Q/jIIu0WLeSwgStmrKjuJEZSKTAUc+0KFvE= +github.com/weaveworks/common v0.0.0-20230531151736-e2613bee6b73 h1:CMM9+/AgM77vaMXMQedzqPRMuNwjbI0EcdofPqxc9F8= +github.com/weaveworks/common v0.0.0-20230531151736-e2613bee6b73/go.mod h1:rgbeLfJUtEr+G74cwFPR1k/4N0kDeaeSv/qhUNE4hm8= github.com/weaveworks/promrus v1.2.0 h1:jOLf6pe6/vss4qGHjXmGz4oDJQA+AOCqEL3FvvZGz7M= github.com/weaveworks/promrus v1.2.0/go.mod h1:SaE82+OJ91yqjrE1rsvBWVzNZKcHYFtMUyS1+Ogs/KA= github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba h1:X4n8JG2e2biEZZXdBKt9HX7DN3bYGFUqljqqy0DqgnY= @@ -1674,8 +1664,8 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20200826160007-0b9f6c5fb163/go.mod h1:f github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20210303213153-67a261a1d291/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20220323183124-98fa8256a799/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= -github.com/whyrusleeping/cbor-gen v0.0.0-20230923211252-36a87e1ba72f h1:SBuSxXJL0/ZJMtTxbXZgHZkThl9dNrzyaNhlyaqscRo= -github.com/whyrusleeping/cbor-gen v0.0.0-20230923211252-36a87e1ba72f/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.1.0 h1:Jneeq3V5enErVcuL0NKEbD1Gi+iOvEeFhXOV1S1Fc6g= +github.com/whyrusleeping/cbor-gen v0.1.0/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= @@ -1718,15 +1708,11 @@ github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XD github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis= go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs= go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw= -go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ= -go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg= -go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= -go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11 h1:FTYVIEzY/bfl37lu3pR4lIj+F9Vp1jE8oh91VmxKgLo= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1801,7 +1787,6 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -1818,13 +1803,10 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1834,8 +1816,9 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1982,7 +1965,6 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2011,7 +1993,6 @@ golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2037,9 +2018,7 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200812155832-6a926be9bd1d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2063,19 +2042,18 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2083,8 +2061,9 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2236,8 +2215,12 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= diff --git a/itests/deadlines_test.go b/itests/deadlines_test.go index fb28f450974..70da4be5a51 100644 --- a/itests/deadlines_test.go +++ b/itests/deadlines_test.go @@ -4,6 +4,7 @@ package itests import ( "bytes" "context" + "strings" "testing" "time" @@ -16,7 +17,6 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/exitcode" miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" @@ -183,13 +183,17 @@ func TestDeadlineToggling(t *testing.T) { cr, err := cid.Parse("bagboea4b5abcatlxechwbp7kjpjguna6r6q7ejrhe6mdp3lf34pmswn27pkkiekz") require.NoError(t, err) - params := &minertypes.SectorPreCommitInfo{ - Expiration: 2880 * 300, - SectorNumber: 22, - SealProof: kit.TestSpt, - - SealedCID: cr, - SealRandEpoch: head.Height() - 200, + params := &miner.PreCommitSectorBatchParams2{ + Sectors: []miner.SectorPreCommitInfo{ + { + Expiration: 2880 * 300, + SectorNumber: 22, + SealProof: kit.TestSpt, + + SealedCID: cr, + SealRandEpoch: head.Height() - 200, + }, + }, } enc := new(bytes.Buffer) @@ -199,7 +203,7 @@ func TestDeadlineToggling(t *testing.T) { To: maddrE, From: defaultFrom, Value: types.FromFil(1), - Method: builtin.MethodsMiner.PreCommitSector, + Method: builtin.MethodsMiner.PreCommitSectorBatch2, Params: enc.Bytes(), }, nil) require.NoError(t, err) @@ -286,14 +290,18 @@ func TestDeadlineToggling(t *testing.T) { sp, aerr := actors.SerializeParams(terminateSectorParams) require.NoError(t, aerr) - smsg, err := client.MpoolPushMessage(ctx, &types.Message{ - From: defaultFrom, - To: maddrD, - Method: builtin.MethodsMiner.TerminateSectors, - - Value: big.Zero(), - Params: sp, - }, nil) + var smsg *types.SignedMessage + require.Eventually(t, func() bool { + smsg, err = client.MpoolPushMessage(ctx, &types.Message{ + From: defaultFrom, + To: maddrD, + Method: builtin.MethodsMiner.TerminateSectors, + + Value: big.Zero(), + Params: sp, + }, nil) + return err == nil || !strings.Contains(err.Error(), "cannot terminate sectors in immutable deadline") + }, 60*time.Second, 100*time.Millisecond) require.NoError(t, err) t.Log("sent termination message:", smsg.Cid()) diff --git a/itests/direct_data_onboard_test.go b/itests/direct_data_onboard_test.go new file mode 100644 index 00000000000..703419ad123 --- /dev/null +++ b/itests/direct_data_onboard_test.go @@ -0,0 +1,408 @@ +package itests + +import ( + "bytes" + "context" + "crypto/rand" + "fmt" + "testing" + "time" + + "github.com/ipfs/go-cid" + "github.com/ipld/go-ipld-prime" + "github.com/ipld/go-ipld-prime/codec/dagcbor" + "github.com/ipld/go-ipld-prime/node/basicnode" + "github.com/multiformats/go-multicodec" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/filecoin-project/go-commp-utils/nonffi" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + market2 "github.com/filecoin-project/go-state-types/builtin/v9/market" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/lotus/chain/actors/builtin/market" + minertypes "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + "github.com/filecoin-project/lotus/chain/consensus/filcns" + "github.com/filecoin-project/lotus/chain/stmgr" + "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/itests/kit" + "github.com/filecoin-project/lotus/lib/must" + "github.com/filecoin-project/lotus/node/config" + "github.com/filecoin-project/lotus/storage/pipeline/piece" +) + +func TestActors13Migration(t *testing.T) { + + var ( + blocktime = 2 * time.Millisecond + ctx = context.Background() + ) + client, _, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), kit.UpgradeSchedule(stmgr.Upgrade{ + Network: network.Version21, + Height: -1, + }, stmgr.Upgrade{ + Network: network.Version22, + Height: 10, + Migration: filcns.UpgradeActorsV13, + })) + ens.InterconnectAll().BeginMiningMustPost(blocktime) + + // mine until 15 + client.WaitTillChain(ctx, kit.HeightAtLeast(15)) +} + +func TestOnboardRawPiece(t *testing.T) { + kit.QuietMiningLogs() + + var ( + blocktime = 2 * time.Millisecond + ctx = context.Background() + ) + + client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC()) + ens.InterconnectAll().BeginMiningMustPost(blocktime) + + pieceSize := abi.PaddedPieceSize(2048).Unpadded() + pieceData := make([]byte, pieceSize) + _, _ = rand.Read(pieceData) + + dc, err := miner.ComputeDataCid(ctx, pieceSize, bytes.NewReader(pieceData)) + require.NoError(t, err) + + head, err := client.ChainHead(ctx) + require.NoError(t, err) + + so, err := miner.SectorAddPieceToAny(ctx, pieceSize, bytes.NewReader(pieceData), piece.PieceDealInfo{ + PublishCid: nil, + DealID: 0, + DealProposal: nil, + DealSchedule: piece.DealSchedule{ + StartEpoch: head.Height() + 2880*2, + EndEpoch: head.Height() + 2880*400, + }, + KeepUnsealed: true, + PieceActivationManifest: &minertypes.PieceActivationManifest{ + CID: dc.PieceCID, + Size: dc.Size, + VerifiedAllocationKey: nil, + Notify: nil, + }, + }) + require.NoError(t, err) + + // wait for sector to commit + + // wait for sector to commit and enter proving state + toCheck := map[abi.SectorNumber]struct{}{ + so.Sector: {}, + } + + miner.WaitSectorsProving(ctx, toCheck) + + si, err := miner.SectorsStatus(ctx, so.Sector, false) + require.NoError(t, err) + require.Equal(t, dc.PieceCID, *si.CommD) +} + +func TestOnboardMixedMarketDDO(t *testing.T) { + kit.QuietMiningLogs() + + var ( + blocktime = 2 * time.Millisecond + ctx = context.Background() + ) + + client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), kit.MutateSealingConfig(func(sc *config.SealingConfig) { + sc.RequireActivationSuccess = true + sc.RequireNotificationSuccess = true + })) + ens.InterconnectAll().BeginMiningMustPost(blocktime) + + maddr, err := miner.ActorAddress(ctx) + require.NoError(t, err) + + mi, err := client.StateMinerInfo(ctx, maddr, types.EmptyTSK) + require.NoError(t, err) + + var pieces []abi.PieceInfo + var dealID abi.DealID + + { + // market piece + pieceSize := abi.PaddedPieceSize(2048 / 2).Unpadded() + pieceData := make([]byte, pieceSize) + _, _ = rand.Read(pieceData) + + dc, err := miner.ComputeDataCid(ctx, pieceSize, bytes.NewReader(pieceData)) + require.NoError(t, err) + pieces = append(pieces, dc) + + head, err := client.ChainHead(ctx) + require.NoError(t, err) + + // PSD + + psdParams := market2.PublishStorageDealsParams{ + Deals: []market2.ClientDealProposal{ + makeMarketDealProposal(t, client, miner, dc.PieceCID, pieceSize.Padded(), head.Height()+2880*2, head.Height()+2880*400), + }, + } + + psdMsg := &types.Message{ + To: market.Address, + From: mi.Worker, + + Method: market.Methods.PublishStorageDeals, + Params: must.One(cborutil.Dump(&psdParams)), + } + + smsg, err := client.MpoolPushMessage(ctx, psdMsg, nil) + require.NoError(t, err) + + r, err := client.StateWaitMsg(ctx, smsg.Cid(), 1, stmgr.LookbackNoLimit, true) + require.NoError(t, err) + + require.Equal(t, exitcode.Ok, r.Receipt.ExitCode) + + nv, err := client.StateNetworkVersion(ctx, types.EmptyTSK) + require.NoError(t, err) + + res, err := market.DecodePublishStorageDealsReturn(r.Receipt.Return, nv) + require.NoError(t, err) + dealID = must.One(res.DealIDs())[0] + + mcid := smsg.Cid() + + so, err := miner.SectorAddPieceToAny(ctx, pieceSize, bytes.NewReader(pieceData), piece.PieceDealInfo{ + PublishCid: &mcid, + DealID: dealID, + DealProposal: &psdParams.Deals[0].Proposal, + DealSchedule: piece.DealSchedule{ + StartEpoch: head.Height() + 2880*2, + EndEpoch: head.Height() + 2880*400, + }, + PieceActivationManifest: nil, + KeepUnsealed: true, + }) + require.NoError(t, err) + + require.Equal(t, abi.PaddedPieceSize(0), so.Offset) + require.Equal(t, abi.SectorNumber(2), so.Sector) + } + + { + // raw ddo piece + + pieceSize := abi.PaddedPieceSize(2048 / 2).Unpadded() + pieceData := make([]byte, pieceSize) + _, _ = rand.Read(pieceData) + + dc, err := miner.ComputeDataCid(ctx, pieceSize, bytes.NewReader(pieceData)) + require.NoError(t, err) + pieces = append(pieces, dc) + + head, err := client.ChainHead(ctx) + require.NoError(t, err) + + so, err := miner.SectorAddPieceToAny(ctx, pieceSize, bytes.NewReader(pieceData), piece.PieceDealInfo{ + PublishCid: nil, + DealID: 0, + DealProposal: nil, + DealSchedule: piece.DealSchedule{ + StartEpoch: head.Height() + 2880*2, + EndEpoch: head.Height() + 2880*400, + }, + KeepUnsealed: false, + PieceActivationManifest: &minertypes.PieceActivationManifest{ + CID: dc.PieceCID, + Size: dc.Size, + VerifiedAllocationKey: nil, + Notify: nil, + }, + }) + require.NoError(t, err) + + require.Equal(t, abi.PaddedPieceSize(1024), so.Offset) + require.Equal(t, abi.SectorNumber(2), so.Sector) + } + + toCheck := map[abi.SectorNumber]struct{}{ + 2: {}, + } + + miner.WaitSectorsProving(ctx, toCheck) + + expectCommD, err := nonffi.GenerateUnsealedCID(abi.RegisteredSealProof_StackedDrg2KiBV1_1, pieces) + require.NoError(t, err) + + si, err := miner.SectorsStatus(ctx, 2, false) + require.NoError(t, err) + require.Equal(t, expectCommD, *si.CommD) + + ds, err := client.StateMarketStorageDeal(ctx, dealID, types.EmptyTSK) + require.NoError(t, err) + + require.NotEqual(t, -1, ds.State.SectorStartEpoch) + + { + deals, err := client.StateMarketDeals(ctx, types.EmptyTSK) + require.NoError(t, err) + for id, deal := range deals { + fmt.Println("Deal", id, deal.Proposal.PieceCID, deal.Proposal.PieceSize, deal.Proposal.Client, deal.Proposal.Provider) + } + + // check actor events, verify deal-published is as expected + minerIdAddr, err := client.StateLookupID(ctx, maddr, types.EmptyTSK) + require.NoError(t, err) + minerId, err := address.IDFromAddress(minerIdAddr) + require.NoError(t, err) + caddr, err := client.WalletDefaultAddress(context.Background()) + require.NoError(t, err) + clientIdAddr, err := client.StateLookupID(ctx, caddr, types.EmptyTSK) + require.NoError(t, err) + clientId, err := address.IDFromAddress(clientIdAddr) + require.NoError(t, err) + + fmt.Println("minerId", minerId, "clientId", clientId) + for _, piece := range pieces { + fmt.Println("piece", piece.PieceCID, piece.Size) + } + + // check "deal-published" actor event + var epochZero abi.ChainEpoch + allEvents, err := miner.FullNode.GetActorEvents(ctx, &types.ActorEventFilter{ + FromHeight: &epochZero, + }) + require.NoError(t, err) + for _, key := range []string{"deal-published", "deal-activated", "sector-precommitted", "sector-activated"} { + var found bool + keyBytes := must.One(ipld.Encode(basicnode.NewString(key), dagcbor.Encode)) + for _, event := range allEvents { + for _, e := range event.Entries { + if e.Key == "$type" && bytes.Equal(e.Value, keyBytes) { + found = true + switch key { + case "deal-published", "deal-activated": + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: keyBytes}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "id", Value: must.One(ipld.Encode(basicnode.NewInt(2), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "client", Value: must.One(ipld.Encode(basicnode.NewInt(int64(clientId)), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "provider", Value: must.One(ipld.Encode(basicnode.NewInt(int64(minerId)), dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, event.Entries) + } + break + } + } + } + require.True(t, found, "expected to find event %s", key) + } + } +} + +func TestOnboardRawPieceSnap(t *testing.T) { + kit.QuietMiningLogs() + + var ( + blocktime = 2 * time.Millisecond + ctx = context.Background() + ) + + client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), kit.MutateSealingConfig(func(sc *config.SealingConfig) { + sc.PreferNewSectorsForDeals = false + sc.MakeNewSectorForDeals = false + sc.MakeCCSectorsAvailable = true + sc.AggregateCommits = false + })) + ens.InterconnectAll().BeginMiningMustPost(blocktime) + + miner.PledgeSectors(ctx, 1, 0, nil) + sl, err := miner.SectorsListNonGenesis(ctx) + require.NoError(t, err) + require.Len(t, sl, 1, "expected 1 sector") + + snum := sl[0] + + maddr, err := miner.ActorAddress(ctx) + require.NoError(t, err) + + client.WaitForSectorActive(ctx, t, snum, maddr) + + pieceSize := abi.PaddedPieceSize(2048).Unpadded() + pieceData := make([]byte, pieceSize) + _, _ = rand.Read(pieceData) + + dc, err := miner.ComputeDataCid(ctx, pieceSize, bytes.NewReader(pieceData)) + require.NoError(t, err) + + head, err := client.ChainHead(ctx) + require.NoError(t, err) + + so, err := miner.SectorAddPieceToAny(ctx, pieceSize, bytes.NewReader(pieceData), piece.PieceDealInfo{ + PublishCid: nil, + DealID: 0, + DealProposal: nil, + DealSchedule: piece.DealSchedule{ + StartEpoch: head.Height() + 2880*2, + EndEpoch: head.Height() + 2880*400, // todo set so that it works with the sector + }, + KeepUnsealed: false, + PieceActivationManifest: &minertypes.PieceActivationManifest{ + CID: dc.PieceCID, + Size: dc.Size, + VerifiedAllocationKey: nil, + Notify: nil, + }, + }) + require.NoError(t, err) + + // wait for sector to commit + + // wait for sector to commit and enter proving state + toCheck := map[abi.SectorNumber]struct{}{ + so.Sector: {}, + } + + miner.WaitSectorsProving(ctx, toCheck) +} + +func makeMarketDealProposal(t *testing.T, client *kit.TestFullNode, miner *kit.TestMiner, data cid.Cid, ps abi.PaddedPieceSize, start, end abi.ChainEpoch) market2.ClientDealProposal { + ca, err := client.WalletDefaultAddress(context.Background()) + require.NoError(t, err) + + ma, err := miner.ActorAddress(context.Background()) + require.NoError(t, err) + + dp := market2.DealProposal{ + PieceCID: data, + PieceSize: ps, + VerifiedDeal: false, + Client: ca, + Provider: ma, + Label: must.One(market2.NewLabelFromString("wat")), + StartEpoch: start, + EndEpoch: end, + StoragePricePerEpoch: big.Zero(), + ProviderCollateral: abi.TokenAmount{}, // below + ClientCollateral: big.Zero(), + } + + cb, err := client.StateDealProviderCollateralBounds(context.Background(), dp.PieceSize, dp.VerifiedDeal, types.EmptyTSK) + require.NoError(t, err) + dp.ProviderCollateral = big.Div(big.Mul(cb.Min, big.NewInt(2)), big.NewInt(2)) + + buf, err := cborutil.Dump(&dp) + require.NoError(t, err) + sig, err := client.WalletSign(context.Background(), ca, buf) + require.NoError(t, err) + + return market2.ClientDealProposal{ + Proposal: dp, + ClientSignature: *sig, + } + +} diff --git a/itests/direct_data_onboard_verified_test.go b/itests/direct_data_onboard_verified_test.go new file mode 100644 index 00000000000..0c3de2448d2 --- /dev/null +++ b/itests/direct_data_onboard_verified_test.go @@ -0,0 +1,713 @@ +package itests + +import ( + "bytes" + "context" + "crypto/rand" + "fmt" + "strings" + "testing" + "time" + + "github.com/ipfs/go-cid" + "github.com/ipld/go-ipld-prime" + "github.com/ipld/go-ipld-prime/codec/dagcbor" + "github.com/ipld/go-ipld-prime/codec/dagjson" + "github.com/ipld/go-ipld-prime/datamodel" + cidlink "github.com/ipld/go-ipld-prime/linking/cid" + "github.com/ipld/go-ipld-prime/node/basicnode" + "github.com/ipld/go-ipld-prime/node/bindnode" + "github.com/multiformats/go-multicodec" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/builtin" + minertypes13 "github.com/filecoin-project/go-state-types/builtin/v13/miner" + verifregtypes13 "github.com/filecoin-project/go-state-types/builtin/v13/verifreg" + datacap2 "github.com/filecoin-project/go-state-types/builtin/v9/datacap" + verifregtypes9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + + lapi "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/api/v1api" + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/builtin/datacap" + minertypes "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" + "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/chain/wallet/key" + "github.com/filecoin-project/lotus/itests/kit" + "github.com/filecoin-project/lotus/lib/must" + "github.com/filecoin-project/lotus/storage/pipeline/piece" +) + +func TestOnboardRawPieceVerified_WithActorEvents(t *testing.T) { + kit.QuietMiningLogs() + + var ( + blocktime = 2 * time.Millisecond + ctx = context.Background() + ) + + rootKey, err := key.GenerateKey(types.KTSecp256k1) + require.NoError(t, err) + + verifierKey, err := key.GenerateKey(types.KTSecp256k1) + require.NoError(t, err) + + verifiedClientKey, err := key.GenerateKey(types.KTBLS) + require.NoError(t, err) + + bal, err := types.ParseFIL("100fil") + require.NoError(t, err) + + client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), + kit.RootVerifier(rootKey, abi.NewTokenAmount(bal.Int64())), + kit.Account(verifierKey, abi.NewTokenAmount(bal.Int64())), + kit.Account(verifiedClientKey, abi.NewTokenAmount(bal.Int64())), + ) + + /* --- Setup subscription channels for ActorEvents --- */ + + // subscribe only to miner's actor events + minerEvtsChan, err := miner.FullNode.SubscribeActorEvents(ctx, &types.ActorEventFilter{ + Addresses: []address.Address{miner.ActorAddr}, + }) + require.NoError(t, err) + + // subscribe only to sector-activated events + sectorActivatedCbor := must.One(ipld.Encode(basicnode.NewString("sector-activated"), dagcbor.Encode)) + sectorActivatedEvtsChan, err := miner.FullNode.SubscribeActorEvents(ctx, &types.ActorEventFilter{ + Fields: map[string][]types.ActorEventBlock{ + "$type": { + {Codec: uint64(multicodec.Cbor), Value: sectorActivatedCbor}, + }, + }, + }) + require.NoError(t, err) + + /* --- Start mining --- */ + + ens.InterconnectAll().BeginMiningMustPost(blocktime) + + minerId, err := address.IDFromAddress(miner.ActorAddr) + require.NoError(t, err) + + miner.PledgeSectors(ctx, 1, 0, nil) + sl, err := miner.SectorsListNonGenesis(ctx) + require.NoError(t, err) + require.Len(t, sl, 1, "expected 1 sector") + + snum := sl[0] + + maddr, err := miner.ActorAddress(ctx) + require.NoError(t, err) + + client.WaitForSectorActive(ctx, t, snum, maddr) + + /* --- Setup verified registry and client and allocate datacap to client */ + + verifierAddr, verifiedClientAddr := ddoVerifiedSetupVerifiedClient(ctx, t, client, rootKey, verifierKey, verifiedClientKey) + + /* --- Prepare piece for onboarding --- */ + + pieceSize := abi.PaddedPieceSize(2048).Unpadded() + pieceData := make([]byte, pieceSize) + _, _ = rand.Read(pieceData) + + dc, err := miner.ComputeDataCid(ctx, pieceSize, bytes.NewReader(pieceData)) + require.NoError(t, err) + + /* --- Allocate datacap for the piece by the verified client --- */ + + clientId, allocationId := ddoVerifiedSetupAllocations(ctx, t, client, minerId, dc, verifiedClientAddr) + + head, err := client.ChainHead(ctx) + require.NoError(t, err) + + // subscribe to actor events up until the current head + initialEventsChan, err := miner.FullNode.SubscribeActorEvents(ctx, &types.ActorEventFilter{ + FromHeight: epochPtr(0), + ToHeight: epochPtr(int64(head.Height())), + }) + require.NoError(t, err) + + /* --- Onboard the piece --- */ + + so, si := ddoVerifiedOnboardPiece(ctx, t, miner, clientId, allocationId, dc, pieceData) + + // check that we have one allocation because the real allocation has been claimed by the miner for the piece + allocations, err := client.StateGetAllocations(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + require.Len(t, allocations, 1) // allocation has been claimed, leaving the bogus one + + ddoVerifiedRemoveAllocations(ctx, t, client, verifiedClientAddr, clientId) + + // check that we have no more allocations + allocations, err = client.StateGetAllocations(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + require.Len(t, allocations, 0) + + /* --- Tests for ActorEvents --- */ + + t.Logf("Inspecting events as they appear in message receipts") + + // construct ActorEvents from messages and receipts + eventsFromMessages := ddoVerifiedBuildActorEventsFromMessages(ctx, t, miner.FullNode) + fmt.Println("Events from message receipts:") + printEvents(t, eventsFromMessages) + + // check for precisely these events and ensure they contain what we expect; don't be strict on + // other events to make sure we're forward-compatible as new events are added + + { + precommitedEvents := filterEvents(eventsFromMessages, "sector-precommitted") + require.Len(t, precommitedEvents, 2) + + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: must.One(ipld.Encode(basicnode.NewString("sector-precommitted"), dagcbor.Encode))}, + // first sector to start mining is CC + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "sector", Value: must.One(ipld.Encode(basicnode.NewInt(int64(so.Sector)-1), dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, precommitedEvents[0].Entries) + + // second sector has our piece + expectedEntries[1].Value = must.One(ipld.Encode(basicnode.NewInt(int64(so.Sector)), dagcbor.Encode)) + require.ElementsMatch(t, expectedEntries, precommitedEvents[1].Entries) + } + + { + activatedEvents := filterEvents(eventsFromMessages, "sector-activated") + require.Len(t, activatedEvents, 2) + + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: must.One(ipld.Encode(basicnode.NewString("sector-activated"), dagcbor.Encode))}, + // first sector to start mining is CC + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "sector", Value: must.One(ipld.Encode(basicnode.NewInt(int64(so.Sector)-1), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "unsealed-cid", Value: must.One(ipld.Encode(datamodel.Null, dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, activatedEvents[0].Entries) + + // second sector has our piece, and only our piece, so usealed-cid matches piece-cid, + // unfortunately we don't have a case with multiple pieces + expectedEntries[1].Value = must.One(ipld.Encode(basicnode.NewInt(int64(so.Sector)), dagcbor.Encode)) + expectedEntries[2].Value = must.One(ipld.Encode(basicnode.NewLink(cidlink.Link{Cid: dc.PieceCID}), dagcbor.Encode)) + expectedEntries = append(expectedEntries, + types.EventEntry{Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "piece-cid", Value: must.One(ipld.Encode(basicnode.NewLink(cidlink.Link{Cid: dc.PieceCID}), dagcbor.Encode))}, + types.EventEntry{Flags: 0x01, Codec: uint64(multicodec.Cbor), Key: "piece-size", Value: must.One(ipld.Encode(basicnode.NewInt(int64(pieceSize.Padded())), dagcbor.Encode))}, + ) + require.ElementsMatch(t, expectedEntries, activatedEvents[1].Entries) + } + + { + verifierBalanceEvents := filterEvents(eventsFromMessages, "verifier-balance") + require.Len(t, verifierBalanceEvents, 2) + + verifierIdAddr, err := client.StateLookupID(ctx, verifierAddr, types.EmptyTSK) + require.NoError(t, err) + verifierId, err := address.IDFromAddress(verifierIdAddr) + require.NoError(t, err) + + verifierEntry := types.EventEntry{Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "verifier", Value: must.One(ipld.Encode(basicnode.NewInt(int64(verifierId)), dagcbor.Encode))} + require.Contains(t, verifierBalanceEvents[0].Entries, verifierEntry) + require.Contains(t, verifierBalanceEvents[1].Entries, verifierEntry) + } + + { + allocationEvents := filterEvents(eventsFromMessages, "allocation") + require.Len(t, allocationEvents, 2) + + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: must.One(ipld.Encode(basicnode.NewString("allocation"), dagcbor.Encode))}, + // first, bogus, allocation + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "id", Value: must.One(ipld.Encode(basicnode.NewInt(int64(allocationId)-1), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "provider", Value: must.One(ipld.Encode(basicnode.NewInt(int64(minerId)), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "client", Value: must.One(ipld.Encode(basicnode.NewInt(int64(clientId)), dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, allocationEvents[0].Entries) + + // the second, real allocation + expectedEntries[1].Value = must.One(ipld.Encode(basicnode.NewInt(int64(allocationId)), dagcbor.Encode)) + require.ElementsMatch(t, expectedEntries, allocationEvents[1].Entries) + } + + { + allocationEvents := filterEvents(eventsFromMessages, "allocation-removed") + require.Len(t, allocationEvents, 1) + + // manual removal of the bogus allocation + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: must.One(ipld.Encode(basicnode.NewString("allocation-removed"), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "id", Value: must.One(ipld.Encode(basicnode.NewInt(int64(allocationId)-1), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "provider", Value: must.One(ipld.Encode(basicnode.NewInt(int64(minerId)), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "client", Value: must.One(ipld.Encode(basicnode.NewInt(int64(clientId)), dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, allocationEvents[0].Entries) + } + + { + claimEvents := filterEvents(eventsFromMessages, "claim") + require.Len(t, claimEvents, 1) + + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: must.One(ipld.Encode(basicnode.NewString("claim"), dagcbor.Encode))}, + // claimId inherits from its original allocationId + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "id", Value: must.One(ipld.Encode(basicnode.NewInt(int64(allocationId)), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "provider", Value: must.One(ipld.Encode(basicnode.NewInt(int64(minerId)), dagcbor.Encode))}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "client", Value: must.One(ipld.Encode(basicnode.NewInt(int64(clientId)), dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, claimEvents[0].Entries) + } + + // verify that we can trace a datacap allocation through to a claim with the events, since this + // information is not completely available from the state tree + claims := ddoVerifiedBuildClaimsFromMessages(ctx, t, eventsFromMessages, miner.FullNode) + for _, claim := range claims { + p, err := address.NewIDAddress(uint64(claim.Provider)) + require.NoError(t, err) + c, err := address.NewIDAddress(uint64(claim.Client)) + require.NoError(t, err) + fmt.Printf("Claim\n", + p, c, claim.Data, claim.Size, claim.TermMin, claim.TermMax, claim.TermStart, claim.Sector) + } + require.Equal(t, []*verifregtypes9.Claim{ + { + Provider: abi.ActorID(minerId), + Client: clientId, + Data: dc.PieceCID, + Size: dc.Size, + TermMin: verifregtypes13.MinimumVerifiedAllocationTerm, + TermMax: verifregtypes13.MaximumVerifiedAllocationTerm, + TermStart: si.Activation, + Sector: so.Sector, + }, + }, claims) + + // construct ActorEvents from GetActorEvents API + t.Logf("Inspecting full events list from GetActorEvents") + allEvtsFromGetAPI, err := miner.FullNode.GetActorEvents(ctx, &types.ActorEventFilter{ + FromHeight: epochPtr(0), + }) + require.NoError(t, err) + fmt.Println("Events from GetActorEvents:") + printEvents(t, allEvtsFromGetAPI) + // compare events from messages and receipts with events from GetActorEvents API + require.Equal(t, eventsFromMessages, allEvtsFromGetAPI) + + // construct ActorEvents from subscription channel for just the miner actor + t.Logf("Inspecting only miner's events list from SubscribeActorEvents") + var subMinerEvts []*types.ActorEvent + for evt := range minerEvtsChan { + subMinerEvts = append(subMinerEvts, evt) + if len(subMinerEvts) == 4 { + break + } + } + var allMinerEvts []*types.ActorEvent + for _, evt := range eventsFromMessages { + if evt.Emitter == miner.ActorAddr { + allMinerEvts = append(allMinerEvts, evt) + } + } + // compare events from messages and receipts with events from subscription channel + require.Equal(t, allMinerEvts, subMinerEvts) + + // construct ActorEvents from subscription channels for just the sector-activated events + var sectorActivatedEvts []*types.ActorEvent + for _, evt := range eventsFromMessages { + for _, entry := range evt.Entries { + if entry.Key == "$type" && bytes.Equal(entry.Value, sectorActivatedCbor) { + sectorActivatedEvts = append(sectorActivatedEvts, evt) + break + } + } + } + require.Len(t, sectorActivatedEvts, 2) // sanity check + + t.Logf("Inspecting only sector-activated events list from real-time SubscribeActorEvents") + var subscribedSectorActivatedEvts []*types.ActorEvent + for evt := range sectorActivatedEvtsChan { + subscribedSectorActivatedEvts = append(subscribedSectorActivatedEvts, evt) + if len(subscribedSectorActivatedEvts) == 2 { + break + } + } + // compare events from messages and receipts with events from subscription channel + require.Equal(t, sectorActivatedEvts, subscribedSectorActivatedEvts) + + // same thing but use historical event fetching to see the same list + t.Logf("Inspecting only sector-activated events list from historical SubscribeActorEvents") + sectorActivatedEvtsChan, err = miner.FullNode.SubscribeActorEvents(ctx, &types.ActorEventFilter{ + Fields: map[string][]types.ActorEventBlock{ + "$type": { + {Codec: uint64(multicodec.Cbor), Value: sectorActivatedCbor}, + }, + }, + FromHeight: epochPtr(0), + }) + require.NoError(t, err) + subscribedSectorActivatedEvts = subscribedSectorActivatedEvts[:0] + for evt := range sectorActivatedEvtsChan { + subscribedSectorActivatedEvts = append(subscribedSectorActivatedEvts, evt) + if len(subscribedSectorActivatedEvts) == 2 { + break + } + } + // compare events from messages and receipts with events from subscription channel + require.Equal(t, sectorActivatedEvts, subscribedSectorActivatedEvts) + + // check that our `ToHeight` filter works as expected + t.Logf("Inspecting only initial list of events SubscribeActorEvents with ToHeight") + var initialEvents []*types.ActorEvent + for evt := range initialEventsChan { + initialEvents = append(initialEvents, evt) + } + // sector-precommitted, sector-activated, verifier-balance, verifier-balance, allocation, allocation + require.Equal(t, eventsFromMessages[0:6], initialEvents) + + // construct ActorEvents from subscription channel for all actor events + t.Logf("Inspecting full events list from historical SubscribeActorEvents") + allEvtsChan, err := miner.FullNode.SubscribeActorEvents(ctx, &types.ActorEventFilter{ + FromHeight: epochPtr(0), + }) + require.NoError(t, err) + var prefillEvts []*types.ActorEvent + for evt := range allEvtsChan { + prefillEvts = append(prefillEvts, evt) + if len(prefillEvts) == len(eventsFromMessages) { + break + } + } + // compare events from messages and receipts with events from subscription channel + require.Equal(t, eventsFromMessages, prefillEvts) + t.Logf("All done comparing events") + + // NOTE: There is a delay in finishing this test because the SubscribeActorEvents + // with the ToHeight (initialEventsChan) has to wait at least a full actual epoch before + // realising that there's no more events for that filter. itests run with a different block + // speed than the ActorEventHandler is aware of. +} + +func ddoVerifiedSetupAllocations( + ctx context.Context, + t *testing.T, + node v1api.FullNode, + minerId uint64, + dc abi.PieceInfo, + verifiedClientAddr address.Address, +) (clientID abi.ActorID, allocationID verifregtypes13.AllocationId) { + + head, err := node.ChainHead(ctx) + require.NoError(t, err) + + // design this one to expire so we can observe allocation-removed + expiringAllocationHeight := head.Height() + 100 + allocationRequestBork := verifregtypes13.AllocationRequest{ + Provider: abi.ActorID(minerId), + Data: cid.MustParse("baga6ea4seaaqa"), + Size: dc.Size, + TermMin: verifregtypes13.MinimumVerifiedAllocationTerm, + TermMax: verifregtypes13.MaximumVerifiedAllocationTerm, + Expiration: expiringAllocationHeight, + } + allocationRequest := verifregtypes13.AllocationRequest{ + Provider: abi.ActorID(minerId), + Data: dc.PieceCID, + Size: dc.Size, + TermMin: verifregtypes13.MinimumVerifiedAllocationTerm, + TermMax: verifregtypes13.MaximumVerifiedAllocationTerm, + Expiration: verifregtypes13.MaximumVerifiedAllocationExpiration, + } + + allocationRequests := verifregtypes13.AllocationRequests{ + Allocations: []verifregtypes13.AllocationRequest{allocationRequestBork, allocationRequest}, + } + + receiverParams, aerr := actors.SerializeParams(&allocationRequests) + require.NoError(t, aerr) + + transferParams, aerr := actors.SerializeParams(&datacap2.TransferParams{ + To: builtin.VerifiedRegistryActorAddr, + Amount: big.Mul(big.NewInt(int64(dc.Size*2)), builtin.TokenPrecision), + OperatorData: receiverParams, + }) + require.NoError(t, aerr) + + msg := &types.Message{ + To: builtin.DatacapActorAddr, + From: verifiedClientAddr, + Method: datacap.Methods.TransferExported, + Params: transferParams, + Value: big.Zero(), + } + + sm, err := node.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err := node.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + // check that we have an allocation + allocations, err := node.StateGetAllocations(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + require.Len(t, allocations, 2) // allocation waiting to be claimed + + for key, value := range allocations { + if value.Data == dc.PieceCID { + allocationID = verifregtypes13.AllocationId(key) + clientID = value.Client + break + } + } + require.NotEqual(t, verifregtypes13.AllocationId(0), allocationID) // found it in there + return clientID, allocationID +} + +func ddoVerifiedOnboardPiece(ctx context.Context, t *testing.T, miner *kit.TestMiner, clientId abi.ActorID, allocationId verifregtypes13.AllocationId, dc abi.PieceInfo, pieceData []byte) (lapi.SectorOffset, lapi.SectorInfo) { + head, err := miner.FullNode.ChainHead(ctx) + require.NoError(t, err) + + so, err := miner.SectorAddPieceToAny(ctx, dc.Size.Unpadded(), bytes.NewReader(pieceData), piece.PieceDealInfo{ + PublishCid: nil, + DealID: 0, + DealProposal: nil, + DealSchedule: piece.DealSchedule{ + StartEpoch: head.Height() + 2880*2, + EndEpoch: head.Height() + 2880*400, + }, + KeepUnsealed: true, + PieceActivationManifest: &minertypes.PieceActivationManifest{ + CID: dc.PieceCID, + Size: dc.Size, + VerifiedAllocationKey: &minertypes13.VerifiedAllocationKey{Client: clientId, ID: allocationId}, + Notify: nil, + }, + }) + require.NoError(t, err) + + // wait for sector to commit + miner.WaitSectorsProving(ctx, map[abi.SectorNumber]struct{}{ + so.Sector: {}, + }) + + // Verify that the piece has been onboarded + + si, err := miner.SectorsStatus(ctx, so.Sector, true) + require.NoError(t, err) + require.Equal(t, dc.PieceCID, *si.CommD) + + require.Equal(t, si.DealWeight, big.Zero()) + require.Equal(t, si.VerifiedDealWeight, big.Mul(big.NewInt(int64(dc.Size)), big.NewInt(int64(si.Expiration-si.Activation)))) + + return so, si +} + +func ddoVerifiedRemoveAllocations(ctx context.Context, t *testing.T, node v1api.FullNode, verifiedClientAddr address.Address, clientId abi.ActorID) { + // trigger an allocation removal + removalParams, aerr := actors.SerializeParams(&verifregtypes13.RemoveExpiredAllocationsParams{Client: clientId}) + require.NoError(t, aerr) + + msg := &types.Message{ + To: builtin.VerifiedRegistryActorAddr, + From: verifiedClientAddr, + Method: verifreg.Methods.RemoveExpiredAllocations, + Params: removalParams, + Value: big.Zero(), + } + + sm, err := node.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err := node.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) +} + +func ddoVerifiedBuildClaimsFromMessages(ctx context.Context, t *testing.T, eventsFromMessages []*types.ActorEvent, node v1api.FullNode) []*verifregtypes9.Claim { + claimKeyCbor := must.One(ipld.Encode(basicnode.NewString("claim"), dagcbor.Encode)) + claims := make([]*verifregtypes9.Claim, 0) + for _, event := range eventsFromMessages { + var isClaim bool + var claimId int64 = -1 + var providerId int64 = -1 + for _, e := range event.Entries { + if e.Key == "$type" && bytes.Equal(e.Value, claimKeyCbor) { + isClaim = true + } else if isClaim && e.Key == "id" { + nd, err := ipld.DecodeUsingPrototype(e.Value, dagcbor.Decode, bindnode.Prototype((*int64)(nil), nil)) + require.NoError(t, err) + claimId = *bindnode.Unwrap(nd).(*int64) + } else if isClaim && e.Key == "provider" { + nd, err := ipld.DecodeUsingPrototype(e.Value, dagcbor.Decode, bindnode.Prototype((*int64)(nil), nil)) + require.NoError(t, err) + providerId = *bindnode.Unwrap(nd).(*int64) + } + if isClaim && claimId != -1 && providerId != -1 { + provider, err := address.NewIDAddress(uint64(providerId)) + require.NoError(t, err) + claim, err := node.StateGetClaim(ctx, provider, verifregtypes9.ClaimId(claimId), types.EmptyTSK) + require.NoError(t, err) + claims = append(claims, claim) + } + } + } + return claims +} + +func ddoVerifiedBuildActorEventsFromMessages(ctx context.Context, t *testing.T, node v1api.FullNode) []*types.ActorEvent { + actorEvents := make([]*types.ActorEvent, 0) + + head, err := node.ChainHead(ctx) + require.NoError(t, err) + var lastts types.TipSetKey + for height := 0; height < int(head.Height()); height++ { + // for each tipset + ts, err := node.ChainGetTipSetByHeight(ctx, abi.ChainEpoch(height), types.EmptyTSK) + require.NoError(t, err) + if ts.Key() == lastts { + continue + } + lastts = ts.Key() + messages, err := node.ChainGetMessagesInTipset(ctx, ts.Key()) + require.NoError(t, err) + if len(messages) == 0 { + continue + } + for _, m := range messages { + receipt, err := node.StateSearchMsg(ctx, types.EmptyTSK, m.Cid, -1, false) + require.NoError(t, err) + require.NotNil(t, receipt) + // receipt + if receipt.Receipt.EventsRoot != nil { + events, err := node.ChainGetEvents(ctx, *receipt.Receipt.EventsRoot) + require.NoError(t, err) + for _, evt := range events { + // for each event + addr, err := address.NewIDAddress(uint64(evt.Emitter)) + require.NoError(t, err) + + actorEvents = append(actorEvents, &types.ActorEvent{ + Entries: evt.Entries, + Emitter: addr, + Reverted: false, + Height: ts.Height(), + TipSetKey: ts.Key(), + MsgCid: m.Cid, + }) + } + } + } + } + return actorEvents +} + +func ddoVerifiedSetupVerifiedClient(ctx context.Context, t *testing.T, client *kit.TestFullNode, rootKey *key.Key, verifierKey *key.Key, verifiedClientKey *key.Key) (address.Address, address.Address) { + // import the root key. + rootAddr, err := client.WalletImport(ctx, &rootKey.KeyInfo) + require.NoError(t, err) + + // import the verifiers' keys. + verifierAddr, err := client.WalletImport(ctx, &verifierKey.KeyInfo) + require.NoError(t, err) + + // import the verified client's key. + verifiedClientAddr, err := client.WalletImport(ctx, &verifiedClientKey.KeyInfo) + require.NoError(t, err) + + allowance := big.NewInt(100000000000) + params, aerr := actors.SerializeParams(&verifregtypes13.AddVerifierParams{Address: verifierAddr, Allowance: allowance}) + require.NoError(t, aerr) + + msg := &types.Message{ + From: rootAddr, + To: verifreg.Address, + Method: verifreg.Methods.AddVerifier, + Params: params, + Value: big.Zero(), + } + + sm, err := client.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err, "AddVerifier failed") + + res, err := client.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + verifierAllowance, err := client.StateVerifierStatus(ctx, verifierAddr, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, allowance, *verifierAllowance) + + // assign datacap to a client + initialDatacap := big.NewInt(10000) + + params, aerr = actors.SerializeParams(&verifregtypes13.AddVerifiedClientParams{Address: verifiedClientAddr, Allowance: initialDatacap}) + require.NoError(t, aerr) + + msg = &types.Message{ + From: verifierAddr, + To: verifreg.Address, + Method: verifreg.Methods.AddVerifiedClient, + Params: params, + Value: big.Zero(), + } + + sm, err = client.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err = client.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + return verifierAddr, verifiedClientAddr +} + +func filterEvents(events []*types.ActorEvent, key string) []*types.ActorEvent { + keyBytes := must.One(ipld.Encode(basicnode.NewString(key), dagcbor.Encode)) + filtered := make([]*types.ActorEvent, 0) + for _, event := range events { + for _, e := range event.Entries { + if e.Key == "$type" && bytes.Equal(e.Value, keyBytes) { + filtered = append(filtered, event) + break + } + } + } + return filtered +} + +func printEvents(t *testing.T, events []*types.ActorEvent) { + for _, event := range events { + entryStrings := []string{ + fmt.Sprintf("height=%d", event.Height), + fmt.Sprintf("msg=%s", event.MsgCid), + fmt.Sprintf("emitter=%s", event.Emitter), + fmt.Sprintf("reverted=%t", event.Reverted), + } + for _, e := range event.Entries { + // for each event entry + entryStrings = append(entryStrings, fmt.Sprintf("%s=%s", e.Key, eventValueToDagJson(t, e.Codec, e.Value))) + } + fmt.Printf("Event<%s>\n", strings.Join(entryStrings, ", ")) + } +} + +// eventValueToDagJson converts an ActorEvent value to a JSON string for printing. +func eventValueToDagJson(t *testing.T, codec uint64, data []byte) string { + switch codec { + case uint64(multicodec.Cbor): + nd, err := ipld.Decode(data, dagcbor.Decode) + require.NoError(t, err) + byts, err := ipld.Encode(nd, dagjson.Encode) + require.NoError(t, err) + return string(byts) + default: + return fmt.Sprintf("0x%x", data) + } +} + +func epochPtr(ei int64) *abi.ChainEpoch { + ep := abi.ChainEpoch(ei) + return &ep +} diff --git a/itests/kit/ensemble.go b/itests/kit/ensemble.go index a515b0e9998..c315b21c9d3 100644 --- a/itests/kit/ensemble.go +++ b/itests/kit/ensemble.go @@ -1099,14 +1099,14 @@ func importPreSealMeta(ctx context.Context, meta genesis.Miner, mds dtypes.Metad info := &pipeline.SectorInfo{ State: pipeline.Proving, SectorNumber: sector.SectorID, - Pieces: []api.SectorPiece{ - { + Pieces: []pipeline.SafeSectorPiece{ + pipeline.SafePiece(api.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(meta.SectorSize), PieceCID: commD, }, DealInfo: nil, // todo: likely possible to get, but not really that useful - }, + }), }, CommD: &commD, CommR: &commR, diff --git a/itests/kit/ensemble_opts_nv.go b/itests/kit/ensemble_opts_nv.go index d5bb1930ef0..18b531e13b1 100644 --- a/itests/kit/ensemble_opts_nv.go +++ b/itests/kit/ensemble_opts_nv.go @@ -35,12 +35,12 @@ func LatestActorsAt(upgradeHeight abi.ChainEpoch) EnsembleOpt { }) /* inline-gen start */ return UpgradeSchedule(stmgr.Upgrade{ - Network: network.Version20, + Network: network.Version21, Height: -1, }, stmgr.Upgrade{ - Network: network.Version21, + Network: network.Version22, Height: upgradeHeight, - Migration: filcns.UpgradeActorsV12, + Migration: filcns.UpgradeActorsV13, }) /* inline-gen end */ } diff --git a/itests/kit/log.go b/itests/kit/log.go index 0c66427f9b7..2cb5970950f 100644 --- a/itests/kit/log.go +++ b/itests/kit/log.go @@ -23,6 +23,7 @@ func QuietMiningLogs() { _ = logging.SetLogLevel("rpc", "ERROR") _ = logging.SetLogLevel("consensus-common", "ERROR") _ = logging.SetLogLevel("dht/RtRefreshManager", "ERROR") + _ = logging.SetLogLevel("consensus-common", "WARN") } func QuietAllLogsExcept(names ...string) { diff --git a/itests/kit/node_opts.go b/itests/kit/node_opts.go index 9af284148c4..09e78995147 100644 --- a/itests/kit/node_opts.go +++ b/itests/kit/node_opts.go @@ -1,6 +1,8 @@ package kit import ( + "math" + "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" @@ -63,6 +65,8 @@ var DefaultNodeOpts = nodeOpts{ // test defaults cfg.Fevm.EnableEthRPC = true + cfg.Fevm.Events.MaxFilterHeightRange = math.MaxInt64 + cfg.Events.EnableActorEventsAPI = true return nil }, }, diff --git a/itests/pending_deal_allocation_test.go b/itests/pending_deal_allocation_test.go index c1e0531cfeb..60b755ac05e 100644 --- a/itests/pending_deal_allocation_test.go +++ b/itests/pending_deal_allocation_test.go @@ -180,10 +180,6 @@ func TestGetAllocationForPendingDeal(t *testing.T) { dealIds, err := ret.DealIDs() require.NoError(t, err) - dealInfo, err := api.StateMarketStorageDeal(ctx, dealIds[0], types.EmptyTSK) - require.NoError(t, err) - require.Equal(t, verifregtypes.AllocationId(0), dealInfo.State.VerifiedClaim) // Allocation in State should not be set yet, because it's in the allocation map - allocation, err := api.StateGetAllocationForPendingDeal(ctx, dealIds[0], types.EmptyTSK) require.NoError(t, err) require.Equal(t, dealProposal.PieceCID, allocation.Data) diff --git a/itests/sector_terminate_test.go b/itests/sector_terminate_test.go index 34b325f2ad1..57cffb0068e 100644 --- a/itests/sector_terminate_test.go +++ b/itests/sector_terminate_test.go @@ -2,10 +2,15 @@ package itests import ( + "bytes" "context" "testing" "time" + "github.com/ipld/go-ipld-prime" + "github.com/ipld/go-ipld-prime/codec/dagcbor" + "github.com/ipld/go-ipld-prime/node/basicnode" + "github.com/multiformats/go-multicodec" "github.com/stretchr/testify/require" "github.com/filecoin-project/go-bitfield" @@ -13,6 +18,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/itests/kit" + "github.com/filecoin-project/lotus/lib/must" sealing "github.com/filecoin-project/lotus/storage/pipeline" ) @@ -164,4 +170,31 @@ loop: require.Equal(t, p.MinerPower, p.TotalPower) require.Equal(t, types.NewInt(uint64(ssz)*uint64(nSectors-1)), p.MinerPower.RawBytePower) + + // check "sector-terminated" actor event + var epochZero abi.ChainEpoch + allEvents, err := miner.FullNode.GetActorEvents(ctx, &types.ActorEventFilter{ + FromHeight: &epochZero, + }) + require.NoError(t, err) + for _, key := range []string{"sector-precommitted", "sector-activated", "sector-terminated"} { + var found bool + keyBytes := must.One(ipld.Encode(basicnode.NewString(key), dagcbor.Encode)) + for _, event := range allEvents { + for _, e := range event.Entries { + if e.Key == "$type" && bytes.Equal(e.Value, keyBytes) { + found = true + if key == "sector-terminated" { + expectedEntries := []types.EventEntry{ + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "$type", Value: keyBytes}, + {Flags: 0x03, Codec: uint64(multicodec.Cbor), Key: "sector", Value: must.One(ipld.Encode(basicnode.NewInt(int64(toTerminate)), dagcbor.Encode))}, + } + require.ElementsMatch(t, expectedEntries, event.Entries) + } + break + } + } + } + require.True(t, found, "expected to find event %s", key) + } } diff --git a/itests/verifreg_test.go b/itests/verifreg_test.go index ffe50c72b19..07a31477d75 100644 --- a/itests/verifreg_test.go +++ b/itests/verifreg_test.go @@ -503,3 +503,152 @@ func makeVerifier(ctx context.Context, t *testing.T, api *impl.FullNodeAPI, root require.NoError(t, err) require.Equal(t, allowance, *verifierAllowance) } + +func TestVerifiedListAllAllocationsAndClaims(t *testing.T) { + blockTime := 100 * time.Millisecond + + rootKey, err := key.GenerateKey(types.KTSecp256k1) + require.NoError(t, err) + + verifier1Key, err := key.GenerateKey(types.KTSecp256k1) + require.NoError(t, err) + + verifiedClientKey, err := key.GenerateKey(types.KTBLS) + require.NoError(t, err) + + bal, err := types.ParseFIL("100fil") + require.NoError(t, err) + + node, miner, ens := kit.EnsembleMinimal(t, kit.MockProofs(), + kit.RootVerifier(rootKey, abi.NewTokenAmount(bal.Int64())), + kit.Account(verifier1Key, abi.NewTokenAmount(bal.Int64())), + kit.Account(verifiedClientKey, abi.NewTokenAmount(bal.Int64())), + ) + + ens.InterconnectAll().BeginMining(blockTime) + + api := node.FullNode.(*impl.FullNodeAPI) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // get VRH + vrh, err := api.StateVerifiedRegistryRootKey(ctx, types.TipSetKey{}) + fmt.Println(vrh.String()) + require.NoError(t, err) + + // import the root key. + rootAddr, err := api.WalletImport(ctx, &rootKey.KeyInfo) + require.NoError(t, err) + + // import the verifiers' keys. + verifier1Addr, err := api.WalletImport(ctx, &verifier1Key.KeyInfo) + require.NoError(t, err) + + // import the verified client's key. + verifiedClientAddr, err := api.WalletImport(ctx, &verifiedClientKey.KeyInfo) + require.NoError(t, err) + + // resolve all keys + + // make the 2 verifiers + + makeVerifier(ctx, t, api, rootAddr, verifier1Addr) + + // assign datacap to a client + initialDatacap := big.NewInt(20000) + + params, err := actors.SerializeParams(&verifregst.AddVerifiedClientParams{Address: verifiedClientAddr, Allowance: initialDatacap}) + require.NoError(t, err) + + msg := &types.Message{ + From: verifier1Addr, + To: verifreg.Address, + Method: verifreg.Methods.AddVerifiedClient, + Params: params, + Value: big.Zero(), + } + + sm, err := api.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err := api.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + // check datacap balance + dcap, err := api.StateVerifiedClientStatus(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, *dcap, initialDatacap) + + minerId, err := address.IDFromAddress(miner.ActorAddr) + require.NoError(t, err) + + allocationRequest1 := verifregst.AllocationRequest{ + Provider: abi.ActorID(minerId), + Data: cid.MustParse("baga6ea4seaaqa"), + Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2), + TermMin: verifregst.MinimumVerifiedAllocationTerm, + TermMax: verifregst.MinimumVerifiedAllocationTerm, + Expiration: verifregst.MaximumVerifiedAllocationExpiration, + } + + allocationRequest2 := verifregst.AllocationRequest{ + Provider: abi.ActorID(minerId), + Data: cid.MustParse("baga6ea4seaaqc"), + Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2), + TermMin: verifregst.MinimumVerifiedAllocationTerm, + TermMax: verifregst.MinimumVerifiedAllocationTerm, + Expiration: verifregst.MaximumVerifiedAllocationExpiration, + } + + allocationRequests := verifregst.AllocationRequests{ + Allocations: []verifregst.AllocationRequest{allocationRequest1, allocationRequest2}, + } + + receiverParams, err := actors.SerializeParams(&allocationRequests) + require.NoError(t, err) + + transferParams, err := actors.SerializeParams(&datacap2.TransferParams{ + To: builtin.VerifiedRegistryActorAddr, + Amount: big.Mul(initialDatacap, builtin.TokenPrecision), + OperatorData: receiverParams, + }) + require.NoError(t, err) + + msg = &types.Message{ + To: builtin.DatacapActorAddr, + From: verifiedClientAddr, + Method: datacap.Methods.TransferExported, + Params: transferParams, + Value: big.Zero(), + } + + sm, err = api.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err = api.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + allocations, err := api.StateGetAllAllocations(ctx, types.EmptyTSK) + require.NoError(t, err) + + require.Equal(t, 2, len(allocations)) + + var pcids []string + + for _, a := range allocations { + clientIdAddr, err := api.StateLookupID(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + clientId, err := address.IDFromAddress(clientIdAddr) + require.NoError(t, err) + require.Equal(t, abi.ActorID(clientId), a.Client) + require.Equal(t, abi.ActorID(minerId), a.Provider) + require.Equal(t, abi.PaddedPieceSize(10000), a.Size) + pcids = append(pcids, a.Data.String()) + } + + require.ElementsMatch(t, []string{"baga6ea4seaaqa", "baga6ea4seaaqc"}, pcids) + + // TODO: Add claims check to this test once https://github.com/filecoin-project/lotus/pull/11618 lands +} diff --git a/lib/result/result.go b/lib/result/result.go index 56a9ffab713..4f3a12ee8bd 100644 --- a/lib/result/result.go +++ b/lib/result/result.go @@ -1,5 +1,7 @@ package result +import "encoding/json" + // Result is a small wrapper type encapsulating Value/Error tuples, mostly for // use when sending values across channels // NOTE: Avoid adding any functionality to this, any "nice" things added here will @@ -39,3 +41,13 @@ func (r Result[T]) Assert(noErrFn func(err error, msgAndArgs ...interface{})) T return r.Value } + +// MarshalJSON implements the json.Marshaler interface, marshalling string error correctly +// this method makes the display in log.Infow nicer +func (r Result[T]) MarshalJSON() ([]byte, error) { + if r.Error != nil { + return json.Marshal(map[string]string{"Error": r.Error.Error()}) + } + + return json.Marshal(map[string]interface{}{"Value": r.Value}) +} diff --git a/markets/storageadapter/ondealsectorcommitted_test.go b/markets/storageadapter/ondealsectorcommitted_test.go index 1d7519ff9f9..e3d3187809a 100644 --- a/markets/storageadapter/ondealsectorcommitted_test.go +++ b/markets/storageadapter/ondealsectorcommitted_test.go @@ -55,21 +55,21 @@ func TestOnDealSectorPreCommitted(t *testing.T) { } unfinishedDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: -1, LastUpdatedEpoch: 2, }, } activeDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, }, } slashedDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, SlashEpoch: 2, @@ -277,21 +277,21 @@ func TestOnDealSectorCommitted(t *testing.T) { } unfinishedDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: -1, LastUpdatedEpoch: 2, }, } activeDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, }, } slashedDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, SlashEpoch: 2, diff --git a/markets/storageadapter/provider.go b/markets/storageadapter/provider.go index bdfce6f55af..11742c879f6 100644 --- a/markets/storageadapter/provider.go +++ b/markets/storageadapter/provider.go @@ -32,6 +32,7 @@ import ( "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules/helpers" pipeline "github.com/filecoin-project/lotus/storage/pipeline" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/sectorblocks" ) @@ -92,11 +93,11 @@ func (n *ProviderNodeAdapter) OnDealComplete(ctx context.Context, deal storagema return nil, xerrors.Errorf("deal.PublishCid can't be nil") } - sdInfo := api.PieceDealInfo{ + sdInfo := piece.PieceDealInfo{ DealID: deal.DealID, DealProposal: &deal.Proposal, PublishCid: deal.PublishCid, - DealSchedule: api.DealSchedule{ + DealSchedule: piece.DealSchedule{ StartEpoch: deal.ClientDealProposal.Proposal.StartEpoch, EndEpoch: deal.ClientDealProposal.Proposal.EndEpoch, }, diff --git a/node/builder_chain.go b/node/builder_chain.go index 348916010ce..cf6c5642885 100644 --- a/node/builder_chain.go +++ b/node/builder_chain.go @@ -17,6 +17,7 @@ import ( "github.com/filecoin-project/lotus/chain/consensus" "github.com/filecoin-project/lotus/chain/consensus/filcns" "github.com/filecoin-project/lotus/chain/events" + "github.com/filecoin-project/lotus/chain/events/filter" "github.com/filecoin-project/lotus/chain/exchange" "github.com/filecoin-project/lotus/chain/gen/slashfilter" "github.com/filecoin-project/lotus/chain/index" @@ -153,6 +154,7 @@ var ChainNode = Options( Override(new(stmgr.StateManagerAPI), rpcstmgr.NewRPCStateManager), Override(new(full.EthModuleAPI), From(new(api.Gateway))), Override(new(full.EthEventAPI), From(new(api.Gateway))), + Override(new(full.ActorEventAPI), From(new(api.Gateway))), ), // Full node API / service startup @@ -250,13 +252,14 @@ func ConfigFullNode(c interface{}) Option { ), // Actor event filtering support - Override(new(events.EventAPI), From(new(modules.EventAPI))), + Override(new(events.EventHelperAPI), From(new(modules.EventHelperAPI))), + Override(new(*filter.EventFilterManager), modules.EventFilterManager(cfg.Fevm)), // in lite-mode Eth api is provided by gateway ApplyIf(isFullNode, If(cfg.Fevm.EnableEthRPC, Override(new(full.EthModuleAPI), modules.EthModuleAPI(cfg.Fevm)), - Override(new(full.EthEventAPI), modules.EthEventAPI(cfg.Fevm)), + Override(new(full.EthEventAPI), modules.EthEventHandler(cfg.Fevm)), ), If(!cfg.Fevm.EnableEthRPC, Override(new(full.EthModuleAPI), &full.EthModuleDummy{}), @@ -264,6 +267,15 @@ func ConfigFullNode(c interface{}) Option { ), ), + ApplyIf(isFullNode, + If(cfg.Events.EnableActorEventsAPI, + Override(new(full.ActorEventAPI), modules.ActorEventHandler(cfg.Events.EnableActorEventsAPI, cfg.Fevm)), + ), + If(!cfg.Events.EnableActorEventsAPI, + Override(new(full.ActorEventAPI), &full.ActorEventDummy{}), + ), + ), + // enable message index for full node when configured by the user, otherwise use dummy. If(cfg.Index.EnableMsgIndex, Override(new(index.MsgIndex), modules.MsgIndex)), If(!cfg.Index.EnableMsgIndex, Override(new(index.MsgIndex), modules.DummyMsgIndex)), diff --git a/node/config/def.go b/node/config/def.go index c660fdb600e..475f37517d1 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -118,6 +118,9 @@ func DefaultFullNode() *FullNode { MaxFilterHeightRange: 2880, // conservative limit of one day }, }, + Events: EventsConfig{ + EnableActorEventsAPI: false, + }, } } diff --git a/node/config/doc_gen.go b/node/config/doc_gen.go index 6cb93a50eed..f28c5abd8ff 100644 --- a/node/config/doc_gen.go +++ b/node/config/doc_gen.go @@ -362,9 +362,8 @@ see https://lotus.filecoin.io/storage-providers/advanced-configurations/market/# Name: "DisableRealTimeFilterAPI", Type: "bool", - Comment: `EnableEthRPC enables APIs that -DisableRealTimeFilterAPI will disable the RealTimeFilterAPI that can create and query filters for actor events as they are emitted. -The API is enabled when EnableEthRPC is true, but can be disabled selectively with this flag.`, + Comment: `DisableRealTimeFilterAPI will disable the RealTimeFilterAPI that can create and query filters for actor events as they are emitted. +The API is enabled when EnableEthRPC or Events.EnableActorEventsAPI is true, but can be disabled selectively with this flag.`, }, { Name: "DisableHistoricFilterAPI", @@ -372,7 +371,7 @@ The API is enabled when EnableEthRPC is true, but can be disabled selectively wi Comment: `DisableHistoricFilterAPI will disable the HistoricFilterAPI that can create and query filters for actor events that occurred in the past. HistoricFilterAPI maintains a queryable index of events. -The API is enabled when EnableEthRPC is true, but can be disabled selectively with this flag.`, +The API is enabled when EnableEthRPC or Events.EnableActorEventsAPI is true, but can be disabled selectively with this flag.`, }, { Name: "FilterTTL", @@ -410,6 +409,17 @@ the database must already exist and be writeable. If a relative path is provided relative to the CWD (current working directory).`, }, }, + "EventsConfig": { + { + Name: "EnableActorEventsAPI", + Type: "bool", + + Comment: `EnableActorEventsAPI enables the Actor events API that enables clients to consume events +emitted by (smart contracts + built-in Actors). +This will also enable the RealTimeFilterAPI and HistoricFilterAPI by default, but they can be +disabled by setting their respective Disable* options in Fevm.Events.`, + }, + }, "FaultReporterConfig": { { Name: "EnableConsensusFaultReporter", @@ -500,6 +510,12 @@ Set to 0 to keep all mappings`, Comment: ``, }, + { + Name: "Events", + Type: "EventsConfig", + + Comment: ``, + }, { Name: "Index", Type: "IndexConfig", @@ -1680,6 +1696,30 @@ Submitting a smaller number of prove commits per epoch would reduce the possibil Comment: `UseSyntheticPoRep, when set to true, will reduce the amount of cache data held on disk after the completion of PreCommit 2 to 11GiB.`, }, + { + Name: "RequireActivationSuccess", + Type: "bool", + + Comment: `Whether to abort if any sector activation in a batch fails (newly sealed sectors, only with ProveCommitSectors3).`, + }, + { + Name: "RequireActivationSuccessUpdate", + Type: "bool", + + Comment: `Whether to abort if any piece activation notification returns a non-zero exit code (newly sealed sectors, only with ProveCommitSectors3).`, + }, + { + Name: "RequireNotificationSuccess", + Type: "bool", + + Comment: `Whether to abort if any sector activation in a batch fails (updating sectors, only with ProveReplicaUpdates3).`, + }, + { + Name: "RequireNotificationSuccessUpdate", + Type: "bool", + + Comment: `Whether to abort if any piece activation notification returns a non-zero exit code (updating sectors, only with ProveReplicaUpdates3).`, + }, }, "Splitstore": { { diff --git a/node/config/types.go b/node/config/types.go index 6c281208678..789d24103dc 100644 --- a/node/config/types.go +++ b/node/config/types.go @@ -27,6 +27,7 @@ type FullNode struct { Fees FeeConfig Chainstore Chainstore Fevm FevmConfig + Events EventsConfig Index IndexConfig FaultReporter FaultReporterConfig } @@ -588,6 +589,15 @@ type SealingConfig struct { // UseSyntheticPoRep, when set to true, will reduce the amount of cache data held on disk after the completion of PreCommit 2 to 11GiB. UseSyntheticPoRep bool + + // Whether to abort if any sector activation in a batch fails (newly sealed sectors, only with ProveCommitSectors3). + RequireActivationSuccess bool + // Whether to abort if any piece activation notification returns a non-zero exit code (newly sealed sectors, only with ProveCommitSectors3). + RequireActivationSuccessUpdate bool + // Whether to abort if any sector activation in a batch fails (updating sectors, only with ProveReplicaUpdates3). + RequireNotificationSuccess bool + // Whether to abort if any piece activation notification returns a non-zero exit code (updating sectors, only with ProveReplicaUpdates3). + RequireNotificationSuccessUpdate bool } type SealerConfig struct { @@ -859,14 +869,13 @@ type FevmConfig struct { } type Events struct { - // EnableEthRPC enables APIs that // DisableRealTimeFilterAPI will disable the RealTimeFilterAPI that can create and query filters for actor events as they are emitted. - // The API is enabled when EnableEthRPC is true, but can be disabled selectively with this flag. + // The API is enabled when EnableEthRPC or Events.EnableActorEventsAPI is true, but can be disabled selectively with this flag. DisableRealTimeFilterAPI bool // DisableHistoricFilterAPI will disable the HistoricFilterAPI that can create and query filters for actor events // that occurred in the past. HistoricFilterAPI maintains a queryable index of events. - // The API is enabled when EnableEthRPC is true, but can be disabled selectively with this flag. + // The API is enabled when EnableEthRPC or Events.EnableActorEventsAPI is true, but can be disabled selectively with this flag. DisableHistoricFilterAPI bool // FilterTTL specifies the time to live for actor event filters. Filters that haven't been accessed longer than @@ -895,6 +904,14 @@ type Events struct { // Set upper bound on index size } +type EventsConfig struct { + // EnableActorEventsAPI enables the Actor events API that enables clients to consume events + // emitted by (smart contracts + built-in Actors). + // This will also enable the RealTimeFilterAPI and HistoricFilterAPI by default, but they can be + // disabled by setting their respective Disable* options in Fevm.Events. + EnableActorEventsAPI bool +} + type IndexConfig struct { // EXPERIMENTAL FEATURE. USE WITH CAUTION // EnableMsgIndex enables indexing of messages on chain. @@ -918,6 +935,7 @@ type HarmonyDB struct { // The port to find Yugabyte. Blank for default. Port string } + type FaultReporterConfig struct { // EnableConsensusFaultReporter controls whether the node will monitor and // report consensus faults. When enabled, the node will watch for malicious diff --git a/node/hello/cbor_gen.go b/node/hello/cbor_gen.go index 78e950f6f6e..91a270ff74c 100644 --- a/node/hello/cbor_gen.go +++ b/node/hello/cbor_gen.go @@ -35,7 +35,7 @@ func (t *HelloMessage) MarshalCBOR(w io.Writer) error { } // t.HeaviestTipSet ([]cid.Cid) (slice) - if len(t.HeaviestTipSet) > cbg.MaxLength { + if len(t.HeaviestTipSet) > 8192 { return xerrors.Errorf("Slice value in field t.HeaviestTipSet was too long") } @@ -105,7 +105,7 @@ func (t *HelloMessage) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.HeaviestTipSet: array too large (%d)", extra) } @@ -136,16 +136,16 @@ func (t *HelloMessage) UnmarshalCBOR(r io.Reader) (err error) { t.HeaviestTipSet[i] = c } + } } - // t.HeaviestTipSetHeight (abi.ChainEpoch) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -223,6 +223,7 @@ func (t *LatencyMessage) MarshalCBOR(w io.Writer) error { return err } } + return nil } @@ -252,10 +253,10 @@ func (t *LatencyMessage) UnmarshalCBOR(r io.Reader) (err error) { // t.TArrival (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -277,10 +278,10 @@ func (t *LatencyMessage) UnmarshalCBOR(r io.Reader) (err error) { // t.TSent (int64) (int64) { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) diff --git a/node/impl/full.go b/node/impl/full.go index bc555c8c26b..527a5538436 100644 --- a/node/impl/full.go +++ b/node/impl/full.go @@ -35,6 +35,7 @@ type FullNodeAPI struct { full.WalletAPI full.SyncAPI full.EthAPI + full.ActorEventsAPI DS dtypes.MetadataDS NetworkName dtypes.NetworkName diff --git a/node/impl/full/actor_events.go b/node/impl/full/actor_events.go new file mode 100644 index 00000000000..fecd1d2b6ad --- /dev/null +++ b/node/impl/full/actor_events.go @@ -0,0 +1,376 @@ +package full + +import ( + "context" + "fmt" + "time" + + "github.com/ipfs/go-cid" + "github.com/raulk/clock" + "go.uber.org/fx" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/events/filter" + "github.com/filecoin-project/lotus/chain/types" +) + +type ActorEventAPI interface { + GetActorEvents(ctx context.Context, filter *types.ActorEventFilter) ([]*types.ActorEvent, error) + SubscribeActorEvents(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) +} + +var ( + _ ActorEventAPI = *new(api.FullNode) + _ ActorEventAPI = *new(api.Gateway) +) + +type ChainAccessor interface { + GetHeaviestTipSet() *types.TipSet +} + +type EventFilterManager interface { + Install( + ctx context.Context, + minHeight, maxHeight abi.ChainEpoch, + tipsetCid cid.Cid, + addresses []address.Address, + keysWithCodec map[string][]types.ActorEventBlock, + excludeReverted bool, + ) (filter.EventFilter, error) + Remove(ctx context.Context, id types.FilterID) error +} + +type ActorEventsAPI struct { + fx.In + ActorEventAPI +} + +type ActorEventHandler struct { + chain ChainAccessor + eventFilterManager EventFilterManager + blockDelay time.Duration + maxFilterHeightRange abi.ChainEpoch + clock clock.Clock +} + +var _ ActorEventAPI = (*ActorEventHandler)(nil) + +func NewActorEventHandler( + chain ChainAccessor, + eventFilterManager EventFilterManager, + blockDelay time.Duration, + maxFilterHeightRange abi.ChainEpoch, +) *ActorEventHandler { + return &ActorEventHandler{ + chain: chain, + eventFilterManager: eventFilterManager, + blockDelay: blockDelay, + maxFilterHeightRange: maxFilterHeightRange, + clock: clock.New(), + } +} + +func NewActorEventHandlerWithClock( + chain ChainAccessor, + eventFilterManager EventFilterManager, + blockDelay time.Duration, + maxFilterHeightRange abi.ChainEpoch, + clock clock.Clock, +) *ActorEventHandler { + return &ActorEventHandler{ + chain: chain, + eventFilterManager: eventFilterManager, + blockDelay: blockDelay, + maxFilterHeightRange: maxFilterHeightRange, + clock: clock, + } +} + +func (a *ActorEventHandler) GetActorEvents(ctx context.Context, evtFilter *types.ActorEventFilter) ([]*types.ActorEvent, error) { + if a.eventFilterManager == nil { + return nil, api.ErrNotSupported + } + + if evtFilter == nil { + evtFilter = &types.ActorEventFilter{} + } + params, err := a.parseFilter(*evtFilter) + if err != nil { + return nil, err + } + + // Install a filter just for this call, collect events, remove the filter + tipSetCid, err := params.GetTipSetCid() + if err != nil { + return nil, fmt.Errorf("failed to get tipset cid: %w", err) + } + f, err := a.eventFilterManager.Install(ctx, params.MinHeight, params.MaxHeight, tipSetCid, evtFilter.Addresses, evtFilter.Fields, false) + if err != nil { + return nil, err + } + defer func() { + // Remove the temporary filter regardless of the original context. + if err := a.eventFilterManager.Remove(context.Background(), f.ID()); err != nil { + log.Warnf("failed to remove filter: %s", err) + } + }() + return getCollected(ctx, f), nil +} + +type filterParams struct { + MinHeight abi.ChainEpoch + MaxHeight abi.ChainEpoch + TipSetKey types.TipSetKey +} + +func (fp filterParams) GetTipSetCid() (cid.Cid, error) { + if fp.TipSetKey.IsEmpty() { + return cid.Undef, nil + } + return fp.TipSetKey.Cid() +} + +func (a *ActorEventHandler) parseFilter(f types.ActorEventFilter) (*filterParams, error) { + if f.TipSetKey != nil && !f.TipSetKey.IsEmpty() { + if f.FromHeight != nil || f.ToHeight != nil { + return nil, fmt.Errorf("cannot specify both TipSetKey and FromHeight/ToHeight") + } + + return &filterParams{ + MinHeight: 0, + MaxHeight: 0, + TipSetKey: *f.TipSetKey, + }, nil + } + + min, max, err := parseHeightRange(a.chain.GetHeaviestTipSet().Height(), f.FromHeight, f.ToHeight, a.maxFilterHeightRange) + if err != nil { + return nil, err + } + + return &filterParams{ + MinHeight: min, + MaxHeight: max, + TipSetKey: types.EmptyTSK, + }, nil +} + +// parseHeightRange is similar to eth's parseBlockRange but with slightly different semantics but +// results in equivalent values that we can plug in to the EventFilterManager. +// +// * Uses "height", allowing for nillable values rather than strings +// * No "latest" and "earliest", those are now represented by nil on the way in and -1 on the way out +// * No option for hex representation +func parseHeightRange(heaviest abi.ChainEpoch, fromHeight, toHeight *abi.ChainEpoch, maxRange abi.ChainEpoch) (minHeight abi.ChainEpoch, maxHeight abi.ChainEpoch, err error) { + if fromHeight != nil && *fromHeight < 0 { + return 0, 0, fmt.Errorf("range 'from' must be greater than or equal to 0") + } + if fromHeight == nil { + minHeight = -1 + } else { + minHeight = *fromHeight + } + if toHeight == nil { + maxHeight = -1 + } else { + maxHeight = *toHeight + } + + // Validate height ranges are within limits set by node operator + if minHeight == -1 && maxHeight > 0 { + // Here the client is looking for events between the head and some future height + if maxHeight-heaviest > maxRange { + return 0, 0, fmt.Errorf("invalid epoch range: 'to' height is too far in the future (maximum: %d)", maxRange) + } + } else if minHeight >= 0 && maxHeight == -1 { + // Here the client is looking for events between some time in the past and the current head + if heaviest-minHeight > maxRange { + return 0, 0, fmt.Errorf("invalid epoch range: 'from' height is too far in the past (maximum: %d)", maxRange) + } + } else if minHeight >= 0 && maxHeight >= 0 { + if minHeight > maxHeight { + return 0, 0, fmt.Errorf("invalid epoch range: 'to' height (%d) must be after 'from' height (%d)", minHeight, maxHeight) + } else if maxHeight-minHeight > maxRange { + return 0, 0, fmt.Errorf("invalid epoch range: range between to and 'from' heights is too large (maximum: %d)", maxRange) + } + } + return minHeight, maxHeight, nil +} + +func (a *ActorEventHandler) SubscribeActorEvents(ctx context.Context, evtFilter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + if a.eventFilterManager == nil { + return nil, api.ErrNotSupported + } + + if evtFilter == nil { + evtFilter = &types.ActorEventFilter{} + } + params, err := a.parseFilter(*evtFilter) + if err != nil { + return nil, err + } + + tipSetCid, err := params.GetTipSetCid() + if err != nil { + return nil, fmt.Errorf("failed to get tipset cid: %w", err) + } + fm, err := a.eventFilterManager.Install(ctx, params.MinHeight, params.MaxHeight, tipSetCid, evtFilter.Addresses, evtFilter.Fields, false) + if err != nil { + return nil, err + } + + // The goal for the code below is to send events on the `out` channel as fast as possible and not + // let it get too far behind the rate at which the events are generated. + // For historical events, we aim to send all events within a single block's time (30s on mainnet). + // This ensures that the client can catch up quickly enough to start receiving new events. + // For ongoing events, we also aim to send all events within a single block's time, so we never + // want to be buffering events (approximately) more than one epoch behind the current head. + // It's approximate because we only update our notion of "current epoch" once per ~blocktime. + + out := make(chan *types.ActorEvent) + + // When we start sending real-time events, we want to make sure that we don't fall behind more + // than one epoch's worth of events (approximately). Capture this value now, before we send + // historical events to allow for a little bit of slack in the historical event sending. + minBacklogHeight := a.chain.GetHeaviestTipSet().Height() - 1 + + go func() { + defer func() { + // tell the caller we're done + close(out) + fm.ClearSubChannel() + if err := a.eventFilterManager.Remove(ctx, fm.ID()); err != nil { + log.Warnf("failed to remove filter: %s", err) + } + }() + + // Handle any historical events that our filter may have picked up ----------------------------- + + evs := getCollected(ctx, fm) + if len(evs) > 0 { + // ensure we get all events out on the channel within one block's time (30s on mainnet) + timer := a.clock.Timer(a.blockDelay) + for _, ev := range evs { + select { + case out <- ev: + case <-timer.C: + log.Errorf("closing event subscription due to slow event sending rate") + timer.Stop() + return + case <-ctx.Done(): + timer.Stop() + return + } + } + timer.Stop() + } + + // for the case where we have a MaxHeight set, we don't get a signal from the filter when we + // reach that height, so we need to check it ourselves, do it now but also in the loop + if params.MaxHeight > 0 && minBacklogHeight+1 >= params.MaxHeight { + return + } + + // Handle ongoing events from the filter ------------------------------------------------------- + + in := make(chan interface{}, 256) + fm.SetSubChannel(in) + + var buffer []*types.ActorEvent + nextBacklogHeightUpdate := a.clock.Now().Add(a.blockDelay) + + collectEvent := func(ev interface{}) bool { + ce, ok := ev.(*filter.CollectedEvent) + if !ok { + log.Errorf("got unexpected value from event filter: %T", ev) + return false + } + + if ce.Height < minBacklogHeight { + // since we mostly care about buffer size, we only trigger a too-slow close when the buffer + // increases, i.e. we collect a new event + log.Errorf("closing event subscription due to slow event sending rate") + return false + } + + buffer = append(buffer, &types.ActorEvent{ + Entries: ce.Entries, + Emitter: ce.EmitterAddr, + Reverted: ce.Reverted, + Height: ce.Height, + TipSetKey: ce.TipSetKey, + MsgCid: ce.MsgCid, + }) + return true + } + + ticker := a.clock.Ticker(a.blockDelay) + defer ticker.Stop() + + for ctx.Err() == nil { + if len(buffer) > 0 { + select { + case ev, ok := <-in: // incoming event + if !ok || !collectEvent(ev) { + return + } + case out <- buffer[0]: // successful send + buffer[0] = nil + buffer = buffer[1:] + case <-ticker.C: + // check that our backlog isn't too big by looking at the oldest event + if buffer[0].Height < minBacklogHeight { + log.Errorf("closing event subscription due to slow event sending rate") + return + } + case <-ctx.Done(): + return + } + } else { + select { + case ev, ok := <-in: // incoming event + if !ok || !collectEvent(ev) { + return + } + case <-ctx.Done(): + return + case <-ticker.C: + currentHeight := a.chain.GetHeaviestTipSet().Height() + if params.MaxHeight > 0 && currentHeight > params.MaxHeight { + // we've reached the filter's MaxHeight, we're done so we can close the channel + return + } + } + } + + if a.clock.Now().After(nextBacklogHeightUpdate) { + minBacklogHeight = a.chain.GetHeaviestTipSet().Height() - 1 + nextBacklogHeightUpdate = a.clock.Now().Add(a.blockDelay) + } + } + }() + + return out, nil +} + +func getCollected(ctx context.Context, f filter.EventFilter) []*types.ActorEvent { + ces := f.TakeCollectedEvents(ctx) + + var out []*types.ActorEvent + + for _, e := range ces { + out = append(out, &types.ActorEvent{ + Entries: e.Entries, + Emitter: e.EmitterAddr, + Reverted: e.Reverted, + Height: e.Height, + TipSetKey: e.TipSetKey, + MsgCid: e.MsgCid, + }) + } + + return out +} diff --git a/node/impl/full/actor_events_test.go b/node/impl/full/actor_events_test.go new file mode 100644 index 00000000000..ab446e57b4a --- /dev/null +++ b/node/impl/full/actor_events_test.go @@ -0,0 +1,780 @@ +package full + +import ( + "context" + "fmt" + pseudo "math/rand" + "sync" + "testing" + "time" + + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" + "github.com/raulk/clock" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/lotus/chain/events/filter" + "github.com/filecoin-project/lotus/chain/types" +) + +var testCid = cid.MustParse("bafyreicmaj5hhoy5mgqvamfhgexxyergw7hdeshizghodwkjg6qmpoco7i") + +func TestParseHeightRange(t *testing.T) { + testCases := []struct { + name string + heaviest abi.ChainEpoch + from *abi.ChainEpoch + to *abi.ChainEpoch + maxRange abi.ChainEpoch + minOut abi.ChainEpoch + maxOut abi.ChainEpoch + errStr string + }{ + { + name: "fails when both are specified and range is greater than max allowed range", + heaviest: 100, + from: epochPtr(256), + to: epochPtr(512), + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "too large", + }, + { + name: "fails when min is specified and range is greater than max allowed range", + heaviest: 500, + from: epochPtr(16), + to: nil, + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "'from' height is too far in the past", + }, + { + name: "fails when max is specified and range is greater than max allowed range", + heaviest: 500, + from: nil, + to: epochPtr(65536), + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "'to' height is too far in the future", + }, + { + name: "fails when from is greater than to", + heaviest: 100, + from: epochPtr(512), + to: epochPtr(256), + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "must be after", + }, + { + name: "works when range is valid (nil from)", + heaviest: 500, + from: nil, + to: epochPtr(48), + maxRange: 1000, + minOut: -1, + maxOut: 48, + }, + { + name: "works when range is valid (nil to)", + heaviest: 500, + from: epochPtr(0), + to: nil, + maxRange: 1000, + minOut: 0, + maxOut: -1, + }, + { + name: "works when range is valid (nil from and to)", + heaviest: 500, + from: nil, + to: nil, + maxRange: 1000, + minOut: -1, + maxOut: -1, + }, + { + name: "works when range is valid and specified", + heaviest: 500, + from: epochPtr(16), + to: epochPtr(48), + maxRange: 1000, + minOut: 16, + maxOut: 48, + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + req := require.New(t) + min, max, err := parseHeightRange(tc.heaviest, tc.from, tc.to, tc.maxRange) + req.Equal(tc.minOut, min) + req.Equal(tc.maxOut, max) + if tc.errStr != "" { + t.Log(err) + req.Error(err) + req.Contains(err.Error(), tc.errStr) + } else { + req.NoError(err) + } + }) + } +} + +func TestGetActorEvents(t *testing.T) { + ctx := context.Background() + req := require.New(t) + + const ( + seed = 984651320 + maxFilterHeightRange = 100 + ) + + t.Logf("seed: %d", seed) + rng := pseudo.New(pseudo.NewSource(seed)) + + minerAddr, err := address.NewIDAddress(uint64(rng.Int63())) + req.NoError(err) + + testCases := []struct { + name string + filter *types.ActorEventFilter + currentHeight int64 + installMinHeight int64 + installMaxHeight int64 + installTipSetKey cid.Cid + installAddresses []address.Address + installKeysWithCodec map[string][]types.ActorEventBlock + installExcludeReverted bool + expectErr string + }{ + { + name: "nil filter", + filter: nil, + installMinHeight: -1, + installMaxHeight: -1, + }, + { + name: "empty filter", + filter: &types.ActorEventFilter{}, + installMinHeight: -1, + installMaxHeight: -1, + }, + { + name: "basic height range filter", + filter: &types.ActorEventFilter{ + FromHeight: epochPtr(0), + ToHeight: epochPtr(maxFilterHeightRange), + }, + installMinHeight: 0, + installMaxHeight: maxFilterHeightRange, + }, + { + name: "from, no to height", + filter: &types.ActorEventFilter{ + FromHeight: epochPtr(0), + }, + currentHeight: maxFilterHeightRange - 1, + installMinHeight: 0, + installMaxHeight: -1, + }, + { + name: "to, no from height", + filter: &types.ActorEventFilter{ + ToHeight: epochPtr(maxFilterHeightRange - 1), + }, + installMinHeight: -1, + installMaxHeight: maxFilterHeightRange - 1, + }, + { + name: "from, no to height, too far", + filter: &types.ActorEventFilter{ + FromHeight: epochPtr(0), + }, + currentHeight: maxFilterHeightRange + 1, + expectErr: "invalid epoch range: 'from' height is too far in the past", + }, + { + name: "to, no from height, too far", + filter: &types.ActorEventFilter{ + ToHeight: epochPtr(maxFilterHeightRange + 1), + }, + currentHeight: 0, + expectErr: "invalid epoch range: 'to' height is too far in the future", + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + efm := newMockEventFilterManager(t) + collectedEvents := makeCollectedEvents(t, rng, 0, 1, 10) + filter := newMockFilter(ctx, t, rng, collectedEvents) + + if tc.expectErr == "" { + efm.expectInstall(abi.ChainEpoch(tc.installMinHeight), abi.ChainEpoch(tc.installMaxHeight), tc.installTipSetKey, tc.installAddresses, tc.installKeysWithCodec, tc.installExcludeReverted, filter) + } + + ts, err := types.NewTipSet([]*types.BlockHeader{newBlockHeader(minerAddr, tc.currentHeight)}) + req.NoError(err) + chain := newMockChainAccessor(t, ts) + + handler := NewActorEventHandler(chain, efm, 50*time.Millisecond, maxFilterHeightRange) + + gotEvents, err := handler.GetActorEvents(ctx, tc.filter) + if tc.expectErr != "" { + req.Error(err) + req.Contains(err.Error(), tc.expectErr) + } else { + req.NoError(err) + expectedEvents := collectedToActorEvents(collectedEvents) + req.Equal(expectedEvents, gotEvents) + efm.requireRemoved(filter.ID()) + } + }) + } +} + +func TestSubscribeActorEvents(t *testing.T) { + const ( + seed = 984651320 + maxFilterHeightRange = 100 + blockDelay = 30 * time.Second + filterStartHeight = 0 + currentHeight = 10 + finishHeight = 20 + eventsPerEpoch = 2 + ) + t.Logf("seed: %d", seed) + rng := pseudo.New(pseudo.NewSource(seed)) + mockClock := clock.NewMock() + + minerAddr, err := address.NewIDAddress(uint64(rng.Int63())) + require.NoError(t, err) + + for _, tc := range []struct { + name string + receiveSpeed time.Duration // how fast will we receive all events _per epoch_ + expectComplete bool // do we expect this to succeed? + endEpoch int // -1 for no end + }{ + {"fast", 0, true, -1}, + {"fast with end", 0, true, finishHeight}, + {"half block speed", blockDelay / 2, true, -1}, + {"half block speed with end", blockDelay / 2, true, finishHeight}, + // testing exactly blockDelay is a border case and will be flaky + {"1.5 block speed", blockDelay * 3 / 2, false, -1}, + {"twice block speed", blockDelay * 2, false, -1}, + } { + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + + tc := tc + t.Run(tc.name, func(t *testing.T) { + req := require.New(t) + + mockClock.Set(time.Now()) + mockFilterManager := newMockEventFilterManager(t) + allEvents := makeCollectedEvents(t, rng, filterStartHeight, eventsPerEpoch, finishHeight) + historicalEvents := allEvents[0 : (currentHeight-filterStartHeight)*eventsPerEpoch] + mockFilter := newMockFilter(ctx, t, rng, historicalEvents) + mockFilterManager.expectInstall(abi.ChainEpoch(0), abi.ChainEpoch(tc.endEpoch), cid.Undef, nil, nil, false, mockFilter) + + ts, err := types.NewTipSet([]*types.BlockHeader{newBlockHeader(minerAddr, currentHeight)}) + req.NoError(err) + mockChain := newMockChainAccessor(t, ts) + + handler := NewActorEventHandlerWithClock(mockChain, mockFilterManager, blockDelay, maxFilterHeightRange, mockClock) + + aef := &types.ActorEventFilter{FromHeight: epochPtr(0)} + if tc.endEpoch >= 0 { + aef.ToHeight = epochPtr(tc.endEpoch) + } + eventChan, err := handler.SubscribeActorEvents(ctx, aef) + req.NoError(err) + + // assume we can cleanly pick up all historical events in one go + var gotEvents []*types.ActorEvent + for len(gotEvents) < len(historicalEvents) && ctx.Err() == nil { + select { + case e, ok := <-eventChan: + req.True(ok) + gotEvents = append(gotEvents, e) + case <-ctx.Done(): + t.Fatalf("timed out waiting for event") + } + } + req.Equal(collectedToActorEvents(historicalEvents), gotEvents) + + mockClock.Add(blockDelay) + nextReceiveTime := mockClock.Now() + + // Ticker to simulate both time and the chain advancing, including emitting events at + // the right time directly to the filter. + + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + for thisHeight := int64(currentHeight); ctx.Err() == nil; thisHeight++ { + ts, err := types.NewTipSet([]*types.BlockHeader{newBlockHeader(minerAddr, thisHeight)}) + req.NoError(err) + mockChain.setHeaviestTipSet(ts) + + var eventsThisEpoch []*filter.CollectedEvent + if thisHeight <= finishHeight { + eventsThisEpoch = allEvents[(thisHeight-filterStartHeight)*eventsPerEpoch : (thisHeight-filterStartHeight+2)*eventsPerEpoch] + } + for i := 0; i < eventsPerEpoch && ctx.Err() == nil; i++ { + if len(eventsThisEpoch) > 0 { + mockFilter.sendEventToChannel(eventsThisEpoch[0]) + eventsThisEpoch = eventsThisEpoch[1:] + } + select { + case <-time.After(2 * time.Millisecond): // allow everyone to catch a breath + mockClock.Add(blockDelay / eventsPerEpoch) + case <-ctx.Done(): + return + } + } + + if thisHeight == finishHeight+1 && tc.expectComplete && tc.endEpoch < 0 && ctx.Err() == nil { + // at finish+1, for the case where we expect clean completion and there is no ToEpoch + // set on the filter, if we send one more event at the next height so we end up with + // something uncollected in the buffer, causing a disconnect + evt := makeCollectedEvents(t, rng, finishHeight+1, 1, finishHeight+1)[0] + mockFilter.sendEventToChannel(evt) + } // else if endEpoch is set, we expect the chain advance to force closure + } + }() + + // Client collecting events off the channel + + var prematureEnd bool + for thisHeight := int64(currentHeight); thisHeight <= finishHeight && !prematureEnd && ctx.Err() == nil; thisHeight++ { + // delay to simulate latency + select { + case <-mockClock.After(nextReceiveTime.Sub(mockClock.Now())): + case <-ctx.Done(): + t.Fatalf("timed out simulating receive delay") + } + + // collect eventsPerEpoch more events + var newEvents []*types.ActorEvent + for len(newEvents) < eventsPerEpoch && !prematureEnd && ctx.Err() == nil { + select { + case e, ok := <-eventChan: // receive the events from the subscription + if ok { + newEvents = append(newEvents, e) + } else { + prematureEnd = true + } + case <-ctx.Done(): + t.Fatalf("timed out waiting for event") + } + nextReceiveTime = nextReceiveTime.Add(tc.receiveSpeed) + } + + if tc.expectComplete || !prematureEnd { + // sanity check that we got what we expected this epoch + req.Len(newEvents, eventsPerEpoch) + epochEvents := allEvents[(thisHeight)*eventsPerEpoch : (thisHeight+1)*eventsPerEpoch] + req.Equal(collectedToActorEvents(epochEvents), newEvents) + gotEvents = append(gotEvents, newEvents...) + } + } + + req.Equal(tc.expectComplete, !prematureEnd, "expected to complete") + if tc.expectComplete { + req.Len(gotEvents, len(allEvents)) + req.Equal(collectedToActorEvents(allEvents), gotEvents) + } else { + req.NotEqual(len(gotEvents), len(allEvents)) + } + + // cleanup + mockFilter.requireClearSubChannelCalledEventually(500 * time.Millisecond) + mockFilterManager.requireRemovedEventually(mockFilter.ID(), 500*time.Millisecond) + cancel() + wg.Wait() // wait for the chain to stop advancing + }) + } +} + +func TestSubscribeActorEvents_OnlyHistorical(t *testing.T) { + // Similar to TestSubscribeActorEvents but we set an explicit end that caps out at the current height + const ( + seed = 984651320 + maxFilterHeightRange = 100 + blockDelay = 30 * time.Second + filterStartHeight = 0 + currentHeight = 10 + eventsPerEpoch = 2 + ) + t.Logf("seed: %d", seed) + rng := pseudo.New(pseudo.NewSource(seed)) + mockClock := clock.NewMock() + + minerAddr, err := address.NewIDAddress(uint64(rng.Int63())) + require.NoError(t, err) + + for _, tc := range []struct { + name string + blockTimeToComplete float64 // fraction of a block time that it takes to receive all events + expectComplete bool // do we expect this to succeed? + }{ + {"fast", 0, true}, + {"half block speed", 0.5, true}, + {"1.5 block speed", 1.5, false}, + {"twice block speed", 2, false}, + } { + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + + tc := tc + t.Run(tc.name, func(t *testing.T) { + req := require.New(t) + + mockClock.Set(time.Now()) + mockFilterManager := newMockEventFilterManager(t) + allEvents := makeCollectedEvents(t, rng, filterStartHeight, eventsPerEpoch, currentHeight) + mockFilter := newMockFilter(ctx, t, rng, allEvents) + mockFilterManager.expectInstall(abi.ChainEpoch(0), abi.ChainEpoch(currentHeight), cid.Undef, nil, nil, false, mockFilter) + + ts, err := types.NewTipSet([]*types.BlockHeader{newBlockHeader(minerAddr, currentHeight)}) + req.NoError(err) + mockChain := newMockChainAccessor(t, ts) + + handler := NewActorEventHandlerWithClock(mockChain, mockFilterManager, blockDelay, maxFilterHeightRange, mockClock) + + aef := &types.ActorEventFilter{FromHeight: epochPtr(0), ToHeight: epochPtr(currentHeight)} + eventChan, err := handler.SubscribeActorEvents(ctx, aef) + req.NoError(err) + + var gotEvents []*types.ActorEvent + + // assume we can cleanly pick up all historical events in one go + receiveLoop: + for ctx.Err() == nil { + select { + case e, ok := <-eventChan: + if ok { + gotEvents = append(gotEvents, e) + mockClock.Add(time.Duration(float64(blockDelay) * tc.blockTimeToComplete / float64(len(allEvents)))) + // no need to advance the chain, we're also testing that's not necessary + time.Sleep(2 * time.Millisecond) // catch a breath + } else { + break receiveLoop + } + case <-ctx.Done(): + t.Fatalf("timed out waiting for event, got %d/%d events", len(gotEvents), len(allEvents)) + } + } + if tc.expectComplete { + req.Equal(collectedToActorEvents(allEvents), gotEvents) + } else { + req.NotEqual(len(gotEvents), len(allEvents)) + } + // advance the chain and observe cleanup + ts, err = types.NewTipSet([]*types.BlockHeader{newBlockHeader(minerAddr, currentHeight+1)}) + req.NoError(err) + mockChain.setHeaviestTipSet(ts) + mockClock.Add(blockDelay) + mockFilterManager.requireRemovedEventually(mockFilter.ID(), 1*time.Second) + }) + } +} + +var ( + _ ChainAccessor = (*mockChainAccessor)(nil) + _ filter.EventFilter = (*mockFilter)(nil) + _ EventFilterManager = (*mockEventFilterManager)(nil) +) + +type mockChainAccessor struct { + t *testing.T + ts *types.TipSet + lk sync.Mutex +} + +func newMockChainAccessor(t *testing.T, ts *types.TipSet) *mockChainAccessor { + return &mockChainAccessor{t: t, ts: ts} +} + +func (m *mockChainAccessor) setHeaviestTipSet(ts *types.TipSet) { + m.lk.Lock() + defer m.lk.Unlock() + m.ts = ts +} + +func (m *mockChainAccessor) GetHeaviestTipSet() *types.TipSet { + m.lk.Lock() + defer m.lk.Unlock() + return m.ts +} + +type mockFilter struct { + t *testing.T + ctx context.Context + id types.FilterID + lastTaken time.Time + ch chan<- interface{} + historicalEvents []*filter.CollectedEvent + subChannelCalls int + clearSubChannelCalls int + lk sync.Mutex +} + +func newMockFilter(ctx context.Context, t *testing.T, rng *pseudo.Rand, historicalEvents []*filter.CollectedEvent) *mockFilter { + t.Helper() + var id [32]byte + _, err := rng.Read(id[:]) + require.NoError(t, err) + return &mockFilter{ + t: t, + ctx: ctx, + id: id, + historicalEvents: historicalEvents, + } +} + +func (m *mockFilter) sendEventToChannel(e *filter.CollectedEvent) { + m.lk.Lock() + defer m.lk.Unlock() + if m.ch != nil { + select { + case m.ch <- e: + case <-m.ctx.Done(): + } + } +} + +func (m *mockFilter) requireClearSubChannelCalledEventually(timeout time.Duration) { + m.t.Helper() + require.Eventually(m.t, + func() bool { + m.lk.Lock() + c := m.clearSubChannelCalls + m.lk.Unlock() + switch c { + case 0: + return false + case 1: + return true + default: + m.t.Fatalf("ClearSubChannel called more than once: %d", c) + return false + } + }, timeout, 10*time.Millisecond, "ClearSubChannel is not called exactly once") +} + +func (m *mockFilter) ID() types.FilterID { + return m.id +} + +func (m *mockFilter) LastTaken() time.Time { + return m.lastTaken +} + +func (m *mockFilter) SetSubChannel(ch chan<- interface{}) { + m.t.Helper() + m.lk.Lock() + defer m.lk.Unlock() + m.subChannelCalls++ + m.ch = ch +} + +func (m *mockFilter) ClearSubChannel() { + m.t.Helper() + m.lk.Lock() + defer m.lk.Unlock() + m.clearSubChannelCalls++ + m.ch = nil +} + +func (m *mockFilter) TakeCollectedEvents(context.Context) []*filter.CollectedEvent { + e := m.historicalEvents + m.historicalEvents = nil + m.lastTaken = time.Now() + return e +} + +func (m *mockFilter) CollectEvents(context.Context, *filter.TipSetEvents, bool, filter.AddressResolver) error { + m.t.Fatalf("unexpected call to CollectEvents") + return nil +} + +type filterManagerExpectation struct { + minHeight, maxHeight abi.ChainEpoch + tipsetCid cid.Cid + addresses []address.Address + keysWithCodec map[string][]types.ActorEventBlock + excludeReverted bool + returnFilter filter.EventFilter +} + +type mockEventFilterManager struct { + t *testing.T + expectations []filterManagerExpectation + removed []types.FilterID + lk sync.Mutex +} + +func newMockEventFilterManager(t *testing.T) *mockEventFilterManager { + return &mockEventFilterManager{t: t} +} + +func (m *mockEventFilterManager) expectInstall( + minHeight, maxHeight abi.ChainEpoch, + tipsetCid cid.Cid, + addresses []address.Address, + keysWithCodec map[string][]types.ActorEventBlock, + excludeReverted bool, + returnFilter filter.EventFilter) { + + m.t.Helper() + m.expectations = append(m.expectations, filterManagerExpectation{ + minHeight: minHeight, + maxHeight: maxHeight, + tipsetCid: tipsetCid, + addresses: addresses, + keysWithCodec: keysWithCodec, + excludeReverted: excludeReverted, + returnFilter: returnFilter, + }) +} + +func (m *mockEventFilterManager) requireRemoved(id types.FilterID) { + m.t.Helper() + m.lk.Lock() + defer m.lk.Unlock() + require.Contains(m.t, m.removed, id) +} + +func (m *mockEventFilterManager) requireRemovedEventually(id types.FilterID, timeout time.Duration) { + m.t.Helper() + require.Eventuallyf(m.t, func() bool { + m.lk.Lock() + defer m.lk.Unlock() + if len(m.removed) == 0 { + return false + } + assert.Contains(m.t, m.removed, id) + return true + }, timeout, 10*time.Millisecond, "filter %x not removed", id) +} + +func (m *mockEventFilterManager) Install( + _ context.Context, + minHeight, maxHeight abi.ChainEpoch, + tipsetCid cid.Cid, + addresses []address.Address, + keysWithCodec map[string][]types.ActorEventBlock, + excludeReverted bool, +) (filter.EventFilter, error) { + + require.True(m.t, len(m.expectations) > 0, "unexpected call to Install") + exp := m.expectations[0] + m.expectations = m.expectations[1:] + // check the expectation matches the call then return the attached filter + require.Equal(m.t, exp.minHeight, minHeight) + require.Equal(m.t, exp.maxHeight, maxHeight) + require.Equal(m.t, exp.tipsetCid, tipsetCid) + require.Equal(m.t, exp.addresses, addresses) + require.Equal(m.t, exp.keysWithCodec, keysWithCodec) + require.Equal(m.t, exp.excludeReverted, excludeReverted) + return exp.returnFilter, nil +} + +func (m *mockEventFilterManager) Remove(_ context.Context, id types.FilterID) error { + m.lk.Lock() + defer m.lk.Unlock() + m.removed = append(m.removed, id) + return nil +} + +func newBlockHeader(minerAddr address.Address, height int64) *types.BlockHeader { + return &types.BlockHeader{ + Miner: minerAddr, + Ticket: &types.Ticket{ + VRFProof: []byte("vrf proof0000000vrf proof0000000"), + }, + ElectionProof: &types.ElectionProof{ + VRFProof: []byte("vrf proof0000000vrf proof0000000"), + }, + Parents: []cid.Cid{testCid, testCid}, + ParentMessageReceipts: testCid, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte("sign me up")}, + ParentWeight: types.NewInt(123125126212), + Messages: testCid, + Height: abi.ChainEpoch(height), + ParentStateRoot: testCid, + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte("sign me up")}, + ParentBaseFee: types.NewInt(3432432843291), + } +} + +func epochPtr(i int) *abi.ChainEpoch { + e := abi.ChainEpoch(i) + return &e +} + +func collectedToActorEvents(collected []*filter.CollectedEvent) []*types.ActorEvent { + var out []*types.ActorEvent + for _, c := range collected { + out = append(out, &types.ActorEvent{ + Entries: c.Entries, + Emitter: c.EmitterAddr, + Reverted: c.Reverted, + Height: c.Height, + TipSetKey: c.TipSetKey, + MsgCid: c.MsgCid, + }) + } + return out +} + +func makeCollectedEvents(t *testing.T, rng *pseudo.Rand, eventStartHeight, eventsPerHeight, eventEndHeight int64) []*filter.CollectedEvent { + var out []*filter.CollectedEvent + for h := eventStartHeight; h <= eventEndHeight; h++ { + for i := int64(0); i < eventsPerHeight; i++ { + out = append(out, makeCollectedEvent(t, rng, types.NewTipSetKey(mkCid(t, fmt.Sprintf("h=%d", h))), abi.ChainEpoch(h))) + } + } + return out +} + +func makeCollectedEvent(t *testing.T, rng *pseudo.Rand, tsKey types.TipSetKey, height abi.ChainEpoch) *filter.CollectedEvent { + addr, err := address.NewIDAddress(uint64(rng.Int63())) + require.NoError(t, err) + + return &filter.CollectedEvent{ + Entries: []types.EventEntry{ + {Flags: 0x01, Key: "k1", Codec: cid.Raw, Value: []byte("v1")}, + {Flags: 0x01, Key: "k2", Codec: cid.Raw, Value: []byte("v2")}, + }, + EmitterAddr: addr, + EventIdx: 0, + Reverted: false, + Height: height, + TipSetKey: tsKey, + MsgIdx: 0, + MsgCid: testCid, + } +} + +func mkCid(t *testing.T, s string) cid.Cid { + h, err := multihash.Sum([]byte(s), multihash.SHA2_256, -1) + require.NoError(t, err) + return cid.NewCidV1(cid.Raw, h) +} diff --git a/node/impl/full/dummy.go b/node/impl/full/dummy.go index 11ff95a632c..abe52dec6b8 100644 --- a/node/impl/full/dummy.go +++ b/node/impl/full/dummy.go @@ -11,6 +11,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/ethtypes" ) @@ -188,3 +189,17 @@ func (e *EthModuleDummy) EthTraceReplayBlockTransactions(ctx context.Context, bl var _ EthModuleAPI = &EthModuleDummy{} var _ EthEventAPI = &EthModuleDummy{} + +var ErrActorEventModuleDisabled = errors.New("module disabled, enable with Events.EnableActorEventsAPI") + +type ActorEventDummy struct{} + +func (a *ActorEventDummy) GetActorEvents(ctx context.Context, filter *types.ActorEventFilter) ([]*types.ActorEvent, error) { + return nil, ErrActorEventModuleDisabled +} + +func (a *ActorEventDummy) SubscribeActorEvents(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) { + return nil, ErrActorEventModuleDisabled +} + +var _ ActorEventAPI = &ActorEventDummy{} diff --git a/node/impl/full/eth.go b/node/impl/full/eth.go index 031a8360561..e7aeafa9085 100644 --- a/node/impl/full/eth.go +++ b/node/impl/full/eth.go @@ -12,6 +12,7 @@ import ( "time" "github.com/ipfs/go-cid" + "github.com/multiformats/go-multicodec" cbg "github.com/whyrusleeping/cbor-gen" "go.uber.org/fx" "golang.org/x/xerrors" @@ -136,7 +137,7 @@ type EthModule struct { var _ EthModuleAPI = (*EthModule)(nil) -type EthEvent struct { +type EthEventHandler struct { Chain *store.ChainStore EventFilterManager *filter.EventFilterManager TipSetFilterManager *filter.TipSetFilterManager @@ -147,7 +148,7 @@ type EthEvent struct { SubscribtionCtx context.Context } -var _ EthEventAPI = (*EthEvent)(nil) +var _ EthEventAPI = (*EthEventHandler)(nil) type EthAPI struct { fx.In @@ -1203,7 +1204,7 @@ func (a *EthModule) EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam e return ethtypes.EthBytes{}, nil } -func (e *EthEvent) EthGetLogs(ctx context.Context, filterSpec *ethtypes.EthFilterSpec) (*ethtypes.EthFilterResult, error) { +func (e *EthEventHandler) EthGetLogs(ctx context.Context, filterSpec *ethtypes.EthFilterSpec) (*ethtypes.EthFilterResult, error) { if e.EventFilterManager == nil { return nil, api.ErrNotSupported } @@ -1220,7 +1221,7 @@ func (e *EthEvent) EthGetLogs(ctx context.Context, filterSpec *ethtypes.EthFilte return ethFilterResultFromEvents(ctx, ces, e.SubManager.StateAPI) } -func (e *EthEvent) EthGetFilterChanges(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) { +func (e *EthEventHandler) EthGetFilterChanges(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) { if e.FilterStore == nil { return nil, api.ErrNotSupported } @@ -1242,7 +1243,7 @@ func (e *EthEvent) EthGetFilterChanges(ctx context.Context, id ethtypes.EthFilte return nil, xerrors.Errorf("unknown filter type") } -func (e *EthEvent) EthGetFilterLogs(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) { +func (e *EthEventHandler) EthGetFilterLogs(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) { if e.FilterStore == nil { return nil, api.ErrNotSupported } @@ -1260,7 +1261,65 @@ func (e *EthEvent) EthGetFilterLogs(ctx context.Context, id ethtypes.EthFilterID return nil, xerrors.Errorf("wrong filter type") } -func (e *EthEvent) installEthFilterSpec(ctx context.Context, filterSpec *ethtypes.EthFilterSpec) (*filter.EventFilter, error) { +// parseBlockRange is similar to actor event's parseHeightRange but with slightly different semantics +// +// * "block" instead of "height" +// * strings that can have "latest" and "earliest" and nil +// * hex strings for actual heights +func parseBlockRange(heaviest abi.ChainEpoch, fromBlock, toBlock *string, maxRange abi.ChainEpoch) (minHeight abi.ChainEpoch, maxHeight abi.ChainEpoch, err error) { + if fromBlock == nil || *fromBlock == "latest" || len(*fromBlock) == 0 { + minHeight = heaviest + } else if *fromBlock == "earliest" { + minHeight = 0 + } else { + if !strings.HasPrefix(*fromBlock, "0x") { + return 0, 0, xerrors.Errorf("FromBlock is not a hex") + } + epoch, err := ethtypes.EthUint64FromHex(*fromBlock) + if err != nil { + return 0, 0, xerrors.Errorf("invalid epoch") + } + minHeight = abi.ChainEpoch(epoch) + } + + if toBlock == nil || *toBlock == "latest" || len(*toBlock) == 0 { + // here latest means the latest at the time + maxHeight = -1 + } else if *toBlock == "earliest" { + maxHeight = 0 + } else { + if !strings.HasPrefix(*toBlock, "0x") { + return 0, 0, xerrors.Errorf("ToBlock is not a hex") + } + epoch, err := ethtypes.EthUint64FromHex(*toBlock) + if err != nil { + return 0, 0, xerrors.Errorf("invalid epoch") + } + maxHeight = abi.ChainEpoch(epoch) + } + + // Validate height ranges are within limits set by node operator + if minHeight == -1 && maxHeight > 0 { + // Here the client is looking for events between the head and some future height + if maxHeight-heaviest > maxRange { + return 0, 0, xerrors.Errorf("invalid epoch range: to block is too far in the future (maximum: %d)", maxRange) + } + } else if minHeight >= 0 && maxHeight == -1 { + // Here the client is looking for events between some time in the past and the current head + if heaviest-minHeight > maxRange { + return 0, 0, xerrors.Errorf("invalid epoch range: from block is too far in the past (maximum: %d)", maxRange) + } + } else if minHeight >= 0 && maxHeight >= 0 { + if minHeight > maxHeight { + return 0, 0, xerrors.Errorf("invalid epoch range: to block (%d) must be after from block (%d)", minHeight, maxHeight) + } else if maxHeight-minHeight > maxRange { + return 0, 0, xerrors.Errorf("invalid epoch range: range between to and from blocks is too large (maximum: %d)", maxRange) + } + } + return minHeight, maxHeight, nil +} + +func (e *EthEventHandler) installEthFilterSpec(ctx context.Context, filterSpec *ethtypes.EthFilterSpec) (filter.EventFilter, error) { var ( minHeight abi.ChainEpoch maxHeight abi.ChainEpoch @@ -1276,64 +1335,11 @@ func (e *EthEvent) installEthFilterSpec(ctx context.Context, filterSpec *ethtype tipsetCid = filterSpec.BlockHash.ToCid() } else { - if filterSpec.FromBlock == nil || *filterSpec.FromBlock == "latest" { - ts := e.Chain.GetHeaviestTipSet() - minHeight = ts.Height() - } else if *filterSpec.FromBlock == "earliest" { - minHeight = 0 - } else if *filterSpec.FromBlock == "pending" { - return nil, api.ErrNotSupported - } else { - if !strings.HasPrefix(*filterSpec.FromBlock, "0x") { - return nil, xerrors.Errorf("FromBlock is not a hex") - } - epoch, err := ethtypes.EthUint64FromHex(*filterSpec.FromBlock) - if err != nil { - return nil, xerrors.Errorf("invalid epoch") - } - minHeight = abi.ChainEpoch(epoch) - } - - if filterSpec.ToBlock == nil || *filterSpec.ToBlock == "latest" { - // here latest means the latest at the time - maxHeight = -1 - } else if *filterSpec.ToBlock == "earliest" { - maxHeight = 0 - } else if *filterSpec.ToBlock == "pending" { - return nil, api.ErrNotSupported - } else { - if !strings.HasPrefix(*filterSpec.ToBlock, "0x") { - return nil, xerrors.Errorf("ToBlock is not a hex") - } - epoch, err := ethtypes.EthUint64FromHex(*filterSpec.ToBlock) - if err != nil { - return nil, xerrors.Errorf("invalid epoch") - } - maxHeight = abi.ChainEpoch(epoch) - } - - // Validate height ranges are within limits set by node operator - if minHeight == -1 && maxHeight > 0 { - // Here the client is looking for events between the head and some future height - ts := e.Chain.GetHeaviestTipSet() - if maxHeight-ts.Height() > e.MaxFilterHeightRange { - return nil, xerrors.Errorf("invalid epoch range: to block is too far in the future (maximum: %d)", e.MaxFilterHeightRange) - } - } else if minHeight >= 0 && maxHeight == -1 { - // Here the client is looking for events between some time in the past and the current head - ts := e.Chain.GetHeaviestTipSet() - if ts.Height()-minHeight > e.MaxFilterHeightRange { - return nil, xerrors.Errorf("invalid epoch range: from block is too far in the past (maximum: %d)", e.MaxFilterHeightRange) - } - - } else if minHeight >= 0 && maxHeight >= 0 { - if minHeight > maxHeight { - return nil, xerrors.Errorf("invalid epoch range: to block (%d) must be after from block (%d)", minHeight, maxHeight) - } else if maxHeight-minHeight > e.MaxFilterHeightRange { - return nil, xerrors.Errorf("invalid epoch range: range between to and from blocks is too large (maximum: %d)", e.MaxFilterHeightRange) - } + var err error + minHeight, maxHeight, err = parseBlockRange(e.Chain.GetHeaviestTipSet().Height(), filterSpec.FromBlock, filterSpec.ToBlock, e.MaxFilterHeightRange) + if err != nil { + return nil, err } - } // Convert all addresses to filecoin f4 addresses @@ -1350,10 +1356,23 @@ func (e *EthEvent) installEthFilterSpec(ctx context.Context, filterSpec *ethtype return nil, err } - return e.EventFilterManager.Install(ctx, minHeight, maxHeight, tipsetCid, addresses, keys) + return e.EventFilterManager.Install(ctx, minHeight, maxHeight, tipsetCid, addresses, keysToKeysWithCodec(keys), true) +} + +func keysToKeysWithCodec(keys map[string][][]byte) map[string][]types.ActorEventBlock { + keysWithCodec := make(map[string][]types.ActorEventBlock) + for k, v := range keys { + for _, vv := range v { + keysWithCodec[k] = append(keysWithCodec[k], types.ActorEventBlock{ + Codec: uint64(multicodec.Raw), // FEVM smart contract events are always encoded with the `raw` Codec. + Value: vv, + }) + } + } + return keysWithCodec } -func (e *EthEvent) EthNewFilter(ctx context.Context, filterSpec *ethtypes.EthFilterSpec) (ethtypes.EthFilterID, error) { +func (e *EthEventHandler) EthNewFilter(ctx context.Context, filterSpec *ethtypes.EthFilterSpec) (ethtypes.EthFilterID, error) { if e.FilterStore == nil || e.EventFilterManager == nil { return ethtypes.EthFilterID{}, api.ErrNotSupported } @@ -1375,7 +1394,7 @@ func (e *EthEvent) EthNewFilter(ctx context.Context, filterSpec *ethtypes.EthFil return ethtypes.EthFilterID(f.ID()), nil } -func (e *EthEvent) EthNewBlockFilter(ctx context.Context) (ethtypes.EthFilterID, error) { +func (e *EthEventHandler) EthNewBlockFilter(ctx context.Context) (ethtypes.EthFilterID, error) { if e.FilterStore == nil || e.TipSetFilterManager == nil { return ethtypes.EthFilterID{}, api.ErrNotSupported } @@ -1398,7 +1417,7 @@ func (e *EthEvent) EthNewBlockFilter(ctx context.Context) (ethtypes.EthFilterID, return ethtypes.EthFilterID(f.ID()), nil } -func (e *EthEvent) EthNewPendingTransactionFilter(ctx context.Context) (ethtypes.EthFilterID, error) { +func (e *EthEventHandler) EthNewPendingTransactionFilter(ctx context.Context) (ethtypes.EthFilterID, error) { if e.FilterStore == nil || e.MemPoolFilterManager == nil { return ethtypes.EthFilterID{}, api.ErrNotSupported } @@ -1421,7 +1440,7 @@ func (e *EthEvent) EthNewPendingTransactionFilter(ctx context.Context) (ethtypes return ethtypes.EthFilterID(f.ID()), nil } -func (e *EthEvent) EthUninstallFilter(ctx context.Context, id ethtypes.EthFilterID) (bool, error) { +func (e *EthEventHandler) EthUninstallFilter(ctx context.Context, id ethtypes.EthFilterID) (bool, error) { if e.FilterStore == nil { return false, api.ErrNotSupported } @@ -1441,9 +1460,9 @@ func (e *EthEvent) EthUninstallFilter(ctx context.Context, id ethtypes.EthFilter return true, nil } -func (e *EthEvent) uninstallFilter(ctx context.Context, f filter.Filter) error { +func (e *EthEventHandler) uninstallFilter(ctx context.Context, f filter.Filter) error { switch f.(type) { - case *filter.EventFilter: + case filter.EventFilter: err := e.EventFilterManager.Remove(ctx, f.ID()) if err != nil && !errors.Is(err, filter.ErrFilterNotFound) { return err @@ -1471,7 +1490,7 @@ const ( EthSubscribeEventTypePendingTransactions = "newPendingTransactions" ) -func (e *EthEvent) EthSubscribe(ctx context.Context, p jsonrpc.RawParams) (ethtypes.EthSubscriptionID, error) { +func (e *EthEventHandler) EthSubscribe(ctx context.Context, p jsonrpc.RawParams) (ethtypes.EthSubscriptionID, error) { params, err := jsonrpc.DecodeParams[ethtypes.EthSubscribeParams](p) if err != nil { return ethtypes.EthSubscriptionID{}, xerrors.Errorf("decoding params: %w", err) @@ -1524,7 +1543,7 @@ func (e *EthEvent) EthSubscribe(ctx context.Context, p jsonrpc.RawParams) (ethty } } - f, err := e.EventFilterManager.Install(ctx, -1, -1, cid.Undef, addresses, keys) + f, err := e.EventFilterManager.Install(ctx, -1, -1, cid.Undef, addresses, keysToKeysWithCodec(keys), true) if err != nil { // clean up any previous filters added and stop the sub _, _ = e.EthUnsubscribe(ctx, sub.id) @@ -1547,7 +1566,7 @@ func (e *EthEvent) EthSubscribe(ctx context.Context, p jsonrpc.RawParams) (ethty return sub.id, nil } -func (e *EthEvent) EthUnsubscribe(ctx context.Context, id ethtypes.EthSubscriptionID) (bool, error) { +func (e *EthEventHandler) EthUnsubscribe(ctx context.Context, id ethtypes.EthSubscriptionID) (bool, error) { if e.SubManager == nil { return false, api.ErrNotSupported } @@ -1561,7 +1580,7 @@ func (e *EthEvent) EthUnsubscribe(ctx context.Context, id ethtypes.EthSubscripti } // GC runs a garbage collection loop, deleting filters that have not been used within the ttl window -func (e *EthEvent) GC(ctx context.Context, ttl time.Duration) { +func (e *EthEventHandler) GC(ctx context.Context, ttl time.Duration) { if e.FilterStore == nil { return } diff --git a/node/impl/full/eth_event.go b/node/impl/full/eth_events.go similarity index 100% rename from node/impl/full/eth_event.go rename to node/impl/full/eth_events.go diff --git a/node/impl/full/eth_test.go b/node/impl/full/eth_test.go index 05c3f257504..6f9d8f297ee 100644 --- a/node/impl/full/eth_test.go +++ b/node/impl/full/eth_test.go @@ -3,6 +3,7 @@ package full import ( "bytes" "encoding/hex" + "fmt" "testing" "github.com/ipfs/go-cid" @@ -10,12 +11,87 @@ import ( "github.com/stretchr/testify/require" cbg "github.com/whyrusleeping/cbor-gen" + "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/ethtypes" ) +func TestParseBlockRange(t *testing.T) { + pstring := func(s string) *string { return &s } + + tcs := map[string]struct { + heaviest abi.ChainEpoch + from *string + to *string + maxRange abi.ChainEpoch + minOut abi.ChainEpoch + maxOut abi.ChainEpoch + errStr string + }{ + "fails when both are specified and range is greater than max allowed range": { + heaviest: 100, + from: pstring("0x100"), + to: pstring("0x200"), + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "too large", + }, + "fails when min is specified and range is greater than max allowed range": { + heaviest: 500, + from: pstring("0x10"), + to: pstring("latest"), + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "too far in the past", + }, + "fails when max is specified and range is greater than max allowed range": { + heaviest: 500, + from: pstring("earliest"), + to: pstring("0x10000"), + maxRange: 10, + minOut: 0, + maxOut: 0, + errStr: "too large", + }, + "works when range is valid": { + heaviest: 500, + from: pstring("earliest"), + to: pstring("latest"), + maxRange: 1000, + minOut: 0, + maxOut: -1, + }, + "works when range is valid and specified": { + heaviest: 500, + from: pstring("0x10"), + to: pstring("0x30"), + maxRange: 1000, + minOut: 16, + maxOut: 48, + }, + } + + for name, tc := range tcs { + tc2 := tc + t.Run(name, func(t *testing.T) { + min, max, err := parseBlockRange(tc2.heaviest, tc2.from, tc2.to, tc2.maxRange) + require.Equal(t, tc2.minOut, min) + require.Equal(t, tc2.maxOut, max) + if tc2.errStr != "" { + fmt.Println(err) + require.Error(t, err) + require.Contains(t, err.Error(), tc2.errStr) + } else { + require.NoError(t, err) + } + }) + } +} + func TestEthLogFromEvent(t *testing.T) { // basic empty data, topics, ok := ethLogFromEvent(nil) diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 0e92c8e5b6f..dda8898325f 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -762,7 +762,7 @@ func (a *StateAPI) StateMarketDeals(ctx context.Context, tsk types.TipSetKey) (m } out[strconv.FormatInt(int64(dealID), 10)] = &api.MarketDeal{ Proposal: d, - State: *s, + State: api.MakeDealState(s), } return nil }); err != nil { @@ -779,18 +779,27 @@ func (m *StateModule) StateMarketStorageDeal(ctx context.Context, dealId abi.Dea return stmgr.GetStorageDeal(ctx, m.StateManager, dealId, ts) } -func (a *StateAPI) StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifreg.Allocation, error) { +func (a *StateAPI) StateGetAllocationIdForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (verifreg.AllocationId, error) { ts, err := a.Chain.GetTipSetFromKey(ctx, tsk) if err != nil { - return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + return verifreg.NoAllocationID, xerrors.Errorf("loading tipset %s: %w", tsk, err) } st, err := a.StateManager.GetMarketState(ctx, ts) if err != nil { - return nil, err + return verifreg.NoAllocationID, err } allocationId, err := st.GetAllocationIdForPendingDeal(dealId) + if err != nil { + return verifreg.NoAllocationID, err + } + + return allocationId, nil +} + +func (a *StateAPI) StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifreg.Allocation, error) { + allocationId, err := a.StateGetAllocationIdForPendingDeal(ctx, dealId, tsk) if err != nil { return nil, err } @@ -857,6 +866,25 @@ func (a *StateAPI) StateGetAllocations(ctx context.Context, clientAddr address.A return allocations, nil } +func (a *StateAPI) StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { + ts, err := a.Chain.GetTipSetFromKey(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + st, err := a.StateManager.GetVerifregState(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("loading verifreg state: %w", err) + } + + allocations, err := st.GetAllAllocations() + if err != nil { + return nil, xerrors.Errorf("getting all allocations: %w", err) + } + + return allocations, nil +} + func (a *StateAPI) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifreg.ClaimId, tsk types.TipSetKey) (*verifreg.Claim, error) { idAddr, err := a.StateLookupID(ctx, providerAddr, tsk) if err != nil { @@ -908,6 +936,25 @@ func (a *StateAPI) StateGetClaims(ctx context.Context, providerAddr address.Addr return claims, nil } +func (a *StateAPI) StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) { + ts, err := a.Chain.GetTipSetFromKey(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + st, err := a.StateManager.GetVerifregState(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("loading verifreg state: %w", err) + } + + claims, err := st.GetAllClaims() + if err != nil { + return nil, xerrors.Errorf("getting all claims: %w", err) + } + + return claims, nil +} + func (a *StateAPI) StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) { nv, err := a.StateNetworkVersion(ctx, tsk) if err != nil { @@ -1914,6 +1961,8 @@ func (a *StateAPI) StateGetNetworkParams(ctx context.Context) (*api.NetworkParam UpgradeLightningHeight: build.UpgradeLightningHeight, UpgradeThunderHeight: build.UpgradeThunderHeight, UpgradeWatermelonHeight: build.UpgradeWatermelonHeight, + UpgradeDragonHeight: build.UpgradeDragonHeight, + UpgradePhoenixHeight: build.UpgradePhoenixHeight, }, }, nil } diff --git a/node/impl/storminer.go b/node/impl/storminer.go index 2ce42c32715..90248a355a4 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -54,6 +54,7 @@ import ( "github.com/filecoin-project/lotus/storage/ctladdr" "github.com/filecoin-project/lotus/storage/paths" sealing "github.com/filecoin-project/lotus/storage/pipeline" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" "github.com/filecoin-project/lotus/storage/sealer" "github.com/filecoin-project/lotus/storage/sealer/fsutil" @@ -243,7 +244,7 @@ func (sm *StorageMinerAPI) SectorsStatus(ctx context.Context, sid abi.SectorNumb return sInfo, nil } -func (sm *StorageMinerAPI) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storiface.Data, d api.PieceDealInfo) (api.SectorOffset, error) { +func (sm *StorageMinerAPI) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storiface.Data, d piece.PieceDealInfo) (api.SectorOffset, error) { so, err := sm.Miner.SectorAddPieceToAny(ctx, size, r, d) if err != nil { // jsonrpc doesn't support returning values with errors, make sure we never do that @@ -506,7 +507,7 @@ func (sm *StorageMinerAPI) ComputeWindowPoSt(ctx context.Context, dlIdx uint64, } func (sm *StorageMinerAPI) ComputeDataCid(ctx context.Context, pieceSize abi.UnpaddedPieceSize, pieceData storiface.Data) (abi.PieceInfo, error) { - return sm.StorageMgr.DataCid(ctx, pieceSize, pieceData) + return sm.IStorageMgr.DataCid(ctx, pieceSize, pieceData) } func (sm *StorageMinerAPI) WorkerConnect(ctx context.Context, url string) error { diff --git a/node/modules/actorevent.go b/node/modules/actorevent.go index 4ce04cefd07..135a34e5be7 100644 --- a/node/modules/actorevent.go +++ b/node/modules/actorevent.go @@ -5,13 +5,12 @@ import ( "path/filepath" "time" - "github.com/multiformats/go-varint" "go.uber.org/fx" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtintypes "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/events" "github.com/filecoin-project/lotus/chain/events/filter" "github.com/filecoin-project/lotus/chain/messagepool" @@ -24,20 +23,20 @@ import ( "github.com/filecoin-project/lotus/node/repo" ) -type EventAPI struct { +type EventHelperAPI struct { fx.In full.ChainAPI full.StateAPI } -var _ events.EventAPI = &EventAPI{} +var _ events.EventHelperAPI = &EventHelperAPI{} -func EthEventAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo, fx.Lifecycle, *store.ChainStore, *stmgr.StateManager, EventAPI, *messagepool.MessagePool, full.StateAPI, full.ChainAPI) (*full.EthEvent, error) { - return func(mctx helpers.MetricsCtx, r repo.LockedRepo, lc fx.Lifecycle, cs *store.ChainStore, sm *stmgr.StateManager, evapi EventAPI, mp *messagepool.MessagePool, stateapi full.StateAPI, chainapi full.ChainAPI) (*full.EthEvent, error) { +func EthEventHandler(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo, fx.Lifecycle, *filter.EventFilterManager, *store.ChainStore, *stmgr.StateManager, EventHelperAPI, *messagepool.MessagePool, full.StateAPI, full.ChainAPI) (*full.EthEventHandler, error) { + return func(mctx helpers.MetricsCtx, r repo.LockedRepo, lc fx.Lifecycle, fm *filter.EventFilterManager, cs *store.ChainStore, sm *stmgr.StateManager, evapi EventHelperAPI, mp *messagepool.MessagePool, stateapi full.StateAPI, chainapi full.ChainAPI) (*full.EthEventHandler, error) { ctx := helpers.LifecycleCtx(mctx, lc) - ee := &full.EthEvent{ + ee := &full.EthEventHandler{ Chain: cs, MaxFilterHeightRange: abi.ChainEpoch(cfg.Events.MaxFilterHeightRange), SubscribtionCtx: ctx, @@ -64,6 +63,41 @@ func EthEventAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo }, }) + ee.TipSetFilterManager = &filter.TipSetFilterManager{ + MaxFilterResults: cfg.Events.MaxFilterResults, + } + ee.MemPoolFilterManager = &filter.MemPoolFilterManager{ + MaxFilterResults: cfg.Events.MaxFilterResults, + } + ee.EventFilterManager = fm + + lc.Append(fx.Hook{ + OnStart: func(context.Context) error { + ev, err := events.NewEvents(ctx, &evapi) + if err != nil { + return err + } + // ignore returned tipsets + _ = ev.Observe(ee.TipSetFilterManager) + + ch, err := mp.Updates(ctx) + if err != nil { + return err + } + go ee.MemPoolFilterManager.WaitForMpoolUpdates(ctx, ch) + + return nil + }, + }) + + return ee, nil + } +} + +func EventFilterManager(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo, fx.Lifecycle, *store.ChainStore, *stmgr.StateManager, EventHelperAPI, full.ChainAPI) (*filter.EventFilterManager, error) { + return func(mctx helpers.MetricsCtx, r repo.LockedRepo, lc fx.Lifecycle, cs *store.ChainStore, sm *stmgr.StateManager, evapi EventHelperAPI, chainapi full.ChainAPI) (*filter.EventFilterManager, error) { + ctx := helpers.LifecycleCtx(mctx, lc) + // Enable indexing of actor events var eventIndex *filter.EventIndex if !cfg.Events.DisableHistoricFilterAPI { @@ -91,11 +125,12 @@ func EthEventAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo }) } - ee.EventFilterManager = &filter.EventFilterManager{ + fm := &filter.EventFilterManager{ ChainStore: cs, EventIndex: eventIndex, // will be nil unless EnableHistoricFilterAPI is true + // TODO: + // We don't need this address resolution anymore once https://github.com/filecoin-project/lotus/issues/11594 lands AddressResolver: func(ctx context.Context, emitter abi.ActorID, ts *types.TipSet) (address.Address, bool) { - // we only want to match using f4 addresses idAddr, err := address.NewIDAddress(uint64(emitter)) if err != nil { return address.Undef, false @@ -103,28 +138,14 @@ func EthEventAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo actor, err := sm.LoadActor(ctx, idAddr, ts) if err != nil || actor.Address == nil { - return address.Undef, false + return idAddr, true } - // if robust address is not f4 then we won't match against it so bail early - if actor.Address.Protocol() != address.Delegated { - return address.Undef, false - } - // we have an f4 address, make sure it's assigned by the EAM - if namespace, _, err := varint.FromUvarint(actor.Address.Payload()); err != nil || namespace != builtintypes.EthereumAddressManagerActorID { - return address.Undef, false - } return *actor.Address, true }, MaxFilterResults: cfg.Events.MaxFilterResults, } - ee.TipSetFilterManager = &filter.TipSetFilterManager{ - MaxFilterResults: cfg.Events.MaxFilterResults, - } - ee.MemPoolFilterManager = &filter.MemPoolFilterManager{ - MaxFilterResults: cfg.Events.MaxFilterResults, - } lc.Append(fx.Hook{ OnStart: func(context.Context) error { @@ -132,20 +153,27 @@ func EthEventAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo if err != nil { return err } - // ignore returned tipsets - _ = ev.Observe(ee.EventFilterManager) - _ = ev.Observe(ee.TipSetFilterManager) - - ch, err := mp.Updates(ctx) - if err != nil { - return err - } - go ee.MemPoolFilterManager.WaitForMpoolUpdates(ctx, ch) - + _ = ev.Observe(fm) return nil }, }) - return ee, nil + return fm, nil + } +} + +func ActorEventHandler(enable bool, fevmCfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo, fx.Lifecycle, *filter.EventFilterManager, *store.ChainStore, *stmgr.StateManager, EventHelperAPI, *messagepool.MessagePool, full.StateAPI, full.ChainAPI) (*full.ActorEventHandler, error) { + return func(mctx helpers.MetricsCtx, r repo.LockedRepo, lc fx.Lifecycle, fm *filter.EventFilterManager, cs *store.ChainStore, sm *stmgr.StateManager, evapi EventHelperAPI, mp *messagepool.MessagePool, stateapi full.StateAPI, chainapi full.ChainAPI) (*full.ActorEventHandler, error) { + + if !enable || fevmCfg.Events.DisableRealTimeFilterAPI { + fm = nil + } + + return full.NewActorEventHandler( + cs, + fm, + time.Duration(build.BlockDelaySecs)*time.Second, + abi.ChainEpoch(fevmCfg.Events.MaxFilterHeightRange), + ), nil } } diff --git a/node/modules/dtypes/beacon.go b/node/modules/dtypes/beacon.go index 28bbdf281d3..91dd5cf57f9 100644 --- a/node/modules/dtypes/beacon.go +++ b/node/modules/dtypes/beacon.go @@ -13,4 +13,5 @@ type DrandConfig struct { Servers []string Relays []string ChainInfoJSON string + IsChained bool // Prior to Drand quicknet, beacons form a chain, post quicknet they do not (FIP-0063) } diff --git a/node/modules/ethmodule.go b/node/modules/ethmodule.go index 0255b61983f..b36416e4e56 100644 --- a/node/modules/ethmodule.go +++ b/node/modules/ethmodule.go @@ -21,8 +21,8 @@ import ( "github.com/filecoin-project/lotus/node/repo" ) -func EthModuleAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo, fx.Lifecycle, *store.ChainStore, *stmgr.StateManager, EventAPI, *messagepool.MessagePool, full.StateAPI, full.ChainAPI, full.MpoolAPI, full.SyncAPI) (*full.EthModule, error) { - return func(mctx helpers.MetricsCtx, r repo.LockedRepo, lc fx.Lifecycle, cs *store.ChainStore, sm *stmgr.StateManager, evapi EventAPI, mp *messagepool.MessagePool, stateapi full.StateAPI, chainapi full.ChainAPI, mpoolapi full.MpoolAPI, syncapi full.SyncAPI) (*full.EthModule, error) { +func EthModuleAPI(cfg config.FevmConfig) func(helpers.MetricsCtx, repo.LockedRepo, fx.Lifecycle, *store.ChainStore, *stmgr.StateManager, EventHelperAPI, *messagepool.MessagePool, full.StateAPI, full.ChainAPI, full.MpoolAPI, full.SyncAPI) (*full.EthModule, error) { + return func(mctx helpers.MetricsCtx, r repo.LockedRepo, lc fx.Lifecycle, cs *store.ChainStore, sm *stmgr.StateManager, evapi EventHelperAPI, mp *messagepool.MessagePool, stateapi full.StateAPI, chainapi full.ChainAPI, mpoolapi full.MpoolAPI, syncapi full.SyncAPI) (*full.EthModule, error) { sqlitePath, err := r.SqlitePath() if err != nil { return nil, err diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index 11635a24015..1b9988b9563 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -1023,6 +1023,11 @@ func NewSetSealConfigFunc(r repo.LockedRepo) (dtypes.SetSealingConfigFunc, error TerminateBatchWait: config.Duration(cfg.TerminateBatchWait), MaxSectorProveCommitsSubmittedPerEpoch: cfg.MaxSectorProveCommitsSubmittedPerEpoch, UseSyntheticPoRep: cfg.UseSyntheticPoRep, + + RequireActivationSuccess: cfg.RequireActivationSuccess, + RequireActivationSuccessUpdate: cfg.RequireActivationSuccessUpdate, + RequireNotificationSuccess: cfg.RequireNotificationSuccess, + RequireNotificationSuccessUpdate: cfg.RequireNotificationSuccessUpdate, } c.SetSealingConfig(newCfg) }) @@ -1068,6 +1073,11 @@ func ToSealingConfig(dealmakingCfg config.DealmakingConfig, sealingCfg config.Se TerminateBatchMin: sealingCfg.TerminateBatchMin, TerminateBatchWait: time.Duration(sealingCfg.TerminateBatchWait), UseSyntheticPoRep: sealingCfg.UseSyntheticPoRep, + + RequireActivationSuccess: sealingCfg.RequireActivationSuccess, + RequireActivationSuccessUpdate: sealingCfg.RequireActivationSuccessUpdate, + RequireNotificationSuccess: sealingCfg.RequireNotificationSuccess, + RequireNotificationSuccessUpdate: sealingCfg.RequireNotificationSuccessUpdate, } } diff --git a/paychmgr/cbor_gen.go b/paychmgr/cbor_gen.go index f97c176a304..3f8aaa7b5a5 100644 --- a/paychmgr/cbor_gen.go +++ b/paychmgr/cbor_gen.go @@ -34,7 +34,7 @@ func (t *VoucherInfo) MarshalCBOR(w io.Writer) error { } // t.Proof ([]uint8) (slice) - if len("Proof") > cbg.MaxLength { + if len("Proof") > 8192 { return xerrors.Errorf("Value in field \"Proof\" was too long") } @@ -45,7 +45,7 @@ func (t *VoucherInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Proof) > cbg.ByteArrayMaxLen { + if len(t.Proof) > 2097152 { return xerrors.Errorf("Byte array in field t.Proof was too long") } @@ -53,12 +53,12 @@ func (t *VoucherInfo) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Proof[:]); err != nil { + if _, err := cw.Write(t.Proof); err != nil { return err } // t.Voucher (paych.SignedVoucher) (struct) - if len("Voucher") > cbg.MaxLength { + if len("Voucher") > 8192 { return xerrors.Errorf("Value in field \"Voucher\" was too long") } @@ -74,7 +74,7 @@ func (t *VoucherInfo) MarshalCBOR(w io.Writer) error { } // t.Submitted (bool) (bool) - if len("Submitted") > cbg.MaxLength { + if len("Submitted") > 8192 { return xerrors.Errorf("Value in field \"Submitted\" was too long") } @@ -120,7 +120,7 @@ func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -137,7 +137,7 @@ func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Proof: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -148,9 +148,10 @@ func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) (err error) { t.Proof = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Proof[:]); err != nil { + if _, err := io.ReadFull(cr, t.Proof); err != nil { return err } + // t.Voucher (paych.SignedVoucher) (struct) case "Voucher": @@ -211,7 +212,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Amount (big.Int) (struct) - if len("Amount") > cbg.MaxLength { + if len("Amount") > 8192 { return xerrors.Errorf("Value in field \"Amount\" was too long") } @@ -227,7 +228,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Target (address.Address) (struct) - if len("Target") > cbg.MaxLength { + if len("Target") > 8192 { return xerrors.Errorf("Value in field \"Target\" was too long") } @@ -243,7 +244,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Channel (address.Address) (struct) - if len("Channel") > cbg.MaxLength { + if len("Channel") > 8192 { return xerrors.Errorf("Value in field \"Channel\" was too long") } @@ -259,7 +260,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Control (address.Address) (struct) - if len("Control") > cbg.MaxLength { + if len("Control") > 8192 { return xerrors.Errorf("Value in field \"Control\" was too long") } @@ -275,7 +276,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.NextLane (uint64) (uint64) - if len("NextLane") > cbg.MaxLength { + if len("NextLane") > 8192 { return xerrors.Errorf("Value in field \"NextLane\" was too long") } @@ -291,7 +292,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Settling (bool) (bool) - if len("Settling") > cbg.MaxLength { + if len("Settling") > 8192 { return xerrors.Errorf("Value in field \"Settling\" was too long") } @@ -307,7 +308,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Vouchers ([]*paychmgr.VoucherInfo) (slice) - if len("Vouchers") > cbg.MaxLength { + if len("Vouchers") > 8192 { return xerrors.Errorf("Value in field \"Vouchers\" was too long") } @@ -318,7 +319,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Vouchers) > cbg.MaxLength { + if len(t.Vouchers) > 8192 { return xerrors.Errorf("Slice value in field t.Vouchers was too long") } @@ -329,10 +330,11 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.ChannelID (string) (string) - if len("ChannelID") > cbg.MaxLength { + if len("ChannelID") > 8192 { return xerrors.Errorf("Value in field \"ChannelID\" was too long") } @@ -343,7 +345,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.ChannelID) > cbg.MaxLength { + if len(t.ChannelID) > 8192 { return xerrors.Errorf("Value in field t.ChannelID was too long") } @@ -355,7 +357,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.CreateMsg (cid.Cid) (struct) - if len("CreateMsg") > cbg.MaxLength { + if len("CreateMsg") > 8192 { return xerrors.Errorf("Value in field \"CreateMsg\" was too long") } @@ -377,7 +379,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.Direction (uint64) (uint64) - if len("Direction") > cbg.MaxLength { + if len("Direction") > 8192 { return xerrors.Errorf("Value in field \"Direction\" was too long") } @@ -393,7 +395,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.AddFundsMsg (cid.Cid) (struct) - if len("AddFundsMsg") > cbg.MaxLength { + if len("AddFundsMsg") > 8192 { return xerrors.Errorf("Value in field \"AddFundsMsg\" was too long") } @@ -415,7 +417,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.PendingAmount (big.Int) (struct) - if len("PendingAmount") > cbg.MaxLength { + if len("PendingAmount") > 8192 { return xerrors.Errorf("Value in field \"PendingAmount\" was too long") } @@ -431,7 +433,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.AvailableAmount (big.Int) (struct) - if len("AvailableAmount") > cbg.MaxLength { + if len("AvailableAmount") > 8192 { return xerrors.Errorf("Value in field \"AvailableAmount\" was too long") } @@ -447,7 +449,7 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { } // t.PendingAvailableAmount (big.Int) (struct) - if len("PendingAvailableAmount") > cbg.MaxLength { + if len("PendingAvailableAmount") > 8192 { return xerrors.Errorf("Value in field \"PendingAvailableAmount\" was too long") } @@ -493,7 +495,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -593,7 +595,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Vouchers: array too large (%d)", extra) } @@ -631,14 +633,14 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.ChannelID (string) (string) case "ChannelID": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -758,7 +760,7 @@ func (t *MsgInfo) MarshalCBOR(w io.Writer) error { } // t.Err (string) (string) - if len("Err") > cbg.MaxLength { + if len("Err") > 8192 { return xerrors.Errorf("Value in field \"Err\" was too long") } @@ -769,7 +771,7 @@ func (t *MsgInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Err) > cbg.MaxLength { + if len(t.Err) > 8192 { return xerrors.Errorf("Value in field t.Err was too long") } @@ -781,7 +783,7 @@ func (t *MsgInfo) MarshalCBOR(w io.Writer) error { } // t.MsgCid (cid.Cid) (struct) - if len("MsgCid") > cbg.MaxLength { + if len("MsgCid") > 8192 { return xerrors.Errorf("Value in field \"MsgCid\" was too long") } @@ -797,7 +799,7 @@ func (t *MsgInfo) MarshalCBOR(w io.Writer) error { } // t.Received (bool) (bool) - if len("Received") > cbg.MaxLength { + if len("Received") > 8192 { return xerrors.Errorf("Value in field \"Received\" was too long") } @@ -813,7 +815,7 @@ func (t *MsgInfo) MarshalCBOR(w io.Writer) error { } // t.ChannelID (string) (string) - if len("ChannelID") > cbg.MaxLength { + if len("ChannelID") > 8192 { return xerrors.Errorf("Value in field \"ChannelID\" was too long") } @@ -824,7 +826,7 @@ func (t *MsgInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.ChannelID) > cbg.MaxLength { + if len(t.ChannelID) > 8192 { return xerrors.Errorf("Value in field t.ChannelID was too long") } @@ -866,7 +868,7 @@ func (t *MsgInfo) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -879,7 +881,7 @@ func (t *MsgInfo) UnmarshalCBOR(r io.Reader) (err error) { case "Err": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -921,7 +923,7 @@ func (t *MsgInfo) UnmarshalCBOR(r io.Reader) (err error) { case "ChannelID": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } diff --git a/storage/pipeline/cbor_gen.go b/storage/pipeline/cbor_gen.go index c832f8a144a..f32c48b4d46 100644 --- a/storage/pipeline/cbor_gen.go +++ b/storage/pipeline/cbor_gen.go @@ -14,7 +14,6 @@ import ( abi "github.com/filecoin-project/go-state-types/abi" - api "github.com/filecoin-project/lotus/api" storiface "github.com/filecoin-project/lotus/storage/sealer/storiface" ) @@ -36,7 +35,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.Log ([]sealing.Log) (slice) - if len("Log") > cbg.MaxLength { + if len("Log") > 8192 { return xerrors.Errorf("Value in field \"Log\" was too long") } @@ -47,7 +46,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Log) > cbg.MaxLength { + if len(t.Log) > 8192 { return xerrors.Errorf("Slice value in field t.Log was too long") } @@ -58,10 +57,11 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.CommD (cid.Cid) (struct) - if len("CommD") > cbg.MaxLength { + if len("CommD") > 8192 { return xerrors.Errorf("Value in field \"CommD\" was too long") } @@ -83,7 +83,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.CommR (cid.Cid) (struct) - if len("CommR") > cbg.MaxLength { + if len("CommR") > 8192 { return xerrors.Errorf("Value in field \"CommR\" was too long") } @@ -105,7 +105,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.Proof ([]uint8) (slice) - if len("Proof") > cbg.MaxLength { + if len("Proof") > 8192 { return xerrors.Errorf("Value in field \"Proof\" was too long") } @@ -116,7 +116,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Proof) > cbg.ByteArrayMaxLen { + if len(t.Proof) > 2097152 { return xerrors.Errorf("Byte array in field t.Proof was too long") } @@ -124,12 +124,12 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.Proof[:]); err != nil { + if _, err := cw.Write(t.Proof); err != nil { return err } // t.State (sealing.SectorState) (string) - if len("State") > cbg.MaxLength { + if len("State") > 8192 { return xerrors.Errorf("Value in field \"State\" was too long") } @@ -140,7 +140,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.State) > cbg.MaxLength { + if len(t.State) > 8192 { return xerrors.Errorf("Value in field t.State was too long") } @@ -151,8 +151,8 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - // t.Pieces ([]api.SectorPiece) (slice) - if len("Pieces") > cbg.MaxLength { + // t.Pieces ([]sealing.SafeSectorPiece) (slice) + if len("Pieces") > 8192 { return xerrors.Errorf("Value in field \"Pieces\" was too long") } @@ -163,7 +163,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Pieces) > cbg.MaxLength { + if len(t.Pieces) > 8192 { return xerrors.Errorf("Slice value in field t.Pieces was too long") } @@ -174,10 +174,11 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.Return (sealing.ReturnState) (string) - if len("Return") > cbg.MaxLength { + if len("Return") > 8192 { return xerrors.Errorf("Value in field \"Return\" was too long") } @@ -188,7 +189,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.Return) > cbg.MaxLength { + if len(t.Return) > 8192 { return xerrors.Errorf("Value in field t.Return was too long") } @@ -200,7 +201,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.LastErr (string) (string) - if len("LastErr") > cbg.MaxLength { + if len("LastErr") > 8192 { return xerrors.Errorf("Value in field \"LastErr\" was too long") } @@ -211,7 +212,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.LastErr) > cbg.MaxLength { + if len(t.LastErr) > 8192 { return xerrors.Errorf("Value in field t.LastErr was too long") } @@ -222,8 +223,8 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - // t.CCPieces ([]api.SectorPiece) (slice) - if len("CCPieces") > cbg.MaxLength { + // t.CCPieces ([]sealing.SafeSectorPiece) (slice) + if len("CCPieces") > 8192 { return xerrors.Errorf("Value in field \"CCPieces\" was too long") } @@ -234,7 +235,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.CCPieces) > cbg.MaxLength { + if len(t.CCPieces) > 8192 { return xerrors.Errorf("Slice value in field t.CCPieces was too long") } @@ -245,10 +246,11 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } // t.CCUpdate (bool) (bool) - if len("CCUpdate") > cbg.MaxLength { + if len("CCUpdate") > 8192 { return xerrors.Errorf("Value in field \"CCUpdate\" was too long") } @@ -264,7 +266,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.SeedEpoch (abi.ChainEpoch) (int64) - if len("SeedEpoch") > cbg.MaxLength { + if len("SeedEpoch") > 8192 { return xerrors.Errorf("Value in field \"SeedEpoch\" was too long") } @@ -286,7 +288,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.SeedValue (abi.InteractiveSealRandomness) (slice) - if len("SeedValue") > cbg.MaxLength { + if len("SeedValue") > 8192 { return xerrors.Errorf("Value in field \"SeedValue\" was too long") } @@ -297,7 +299,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.SeedValue) > cbg.ByteArrayMaxLen { + if len(t.SeedValue) > 2097152 { return xerrors.Errorf("Byte array in field t.SeedValue was too long") } @@ -305,12 +307,12 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.SeedValue[:]); err != nil { + if _, err := cw.Write(t.SeedValue); err != nil { return err } // t.SectorType (abi.RegisteredSealProof) (int64) - if len("SectorType") > cbg.MaxLength { + if len("SectorType") > 8192 { return xerrors.Errorf("Value in field \"SectorType\" was too long") } @@ -332,7 +334,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.TicketEpoch (abi.ChainEpoch) (int64) - if len("TicketEpoch") > cbg.MaxLength { + if len("TicketEpoch") > 8192 { return xerrors.Errorf("Value in field \"TicketEpoch\" was too long") } @@ -354,7 +356,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.TicketValue (abi.SealRandomness) (slice) - if len("TicketValue") > cbg.MaxLength { + if len("TicketValue") > 8192 { return xerrors.Errorf("Value in field \"TicketValue\" was too long") } @@ -365,7 +367,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.TicketValue) > cbg.ByteArrayMaxLen { + if len(t.TicketValue) > 2097152 { return xerrors.Errorf("Byte array in field t.TicketValue was too long") } @@ -373,12 +375,12 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.TicketValue[:]); err != nil { + if _, err := cw.Write(t.TicketValue); err != nil { return err } // t.CreationTime (int64) (int64) - if len("CreationTime") > cbg.MaxLength { + if len("CreationTime") > 8192 { return xerrors.Errorf("Value in field \"CreationTime\" was too long") } @@ -400,7 +402,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.SectorNumber (abi.SectorNumber) (uint64) - if len("SectorNumber") > cbg.MaxLength { + if len("SectorNumber") > 8192 { return xerrors.Errorf("Value in field \"SectorNumber\" was too long") } @@ -416,7 +418,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.TerminatedAt (abi.ChainEpoch) (int64) - if len("TerminatedAt") > cbg.MaxLength { + if len("TerminatedAt") > 8192 { return xerrors.Errorf("Value in field \"TerminatedAt\" was too long") } @@ -438,7 +440,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.UpdateSealed (cid.Cid) (struct) - if len("UpdateSealed") > cbg.MaxLength { + if len("UpdateSealed") > 8192 { return xerrors.Errorf("Value in field \"UpdateSealed\" was too long") } @@ -460,7 +462,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.CommitMessage (cid.Cid) (struct) - if len("CommitMessage") > cbg.MaxLength { + if len("CommitMessage") > 8192 { return xerrors.Errorf("Value in field \"CommitMessage\" was too long") } @@ -482,7 +484,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.InvalidProofs (uint64) (uint64) - if len("InvalidProofs") > cbg.MaxLength { + if len("InvalidProofs") > 8192 { return xerrors.Errorf("Value in field \"InvalidProofs\" was too long") } @@ -498,7 +500,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.PreCommit1Out (storiface.PreCommit1Out) (slice) - if len("PreCommit1Out") > cbg.MaxLength { + if len("PreCommit1Out") > 8192 { return xerrors.Errorf("Value in field \"PreCommit1Out\" was too long") } @@ -509,7 +511,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.PreCommit1Out) > cbg.ByteArrayMaxLen { + if len(t.PreCommit1Out) > 2097152 { return xerrors.Errorf("Byte array in field t.PreCommit1Out was too long") } @@ -517,12 +519,12 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.PreCommit1Out[:]); err != nil { + if _, err := cw.Write(t.PreCommit1Out); err != nil { return err } // t.FaultReportMsg (cid.Cid) (struct) - if len("FaultReportMsg") > cbg.MaxLength { + if len("FaultReportMsg") > 8192 { return xerrors.Errorf("Value in field \"FaultReportMsg\" was too long") } @@ -544,7 +546,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.UpdateUnsealed (cid.Cid) (struct) - if len("UpdateUnsealed") > cbg.MaxLength { + if len("UpdateUnsealed") > 8192 { return xerrors.Errorf("Value in field \"UpdateUnsealed\" was too long") } @@ -566,7 +568,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.PreCommit1Fails (uint64) (uint64) - if len("PreCommit1Fails") > cbg.MaxLength { + if len("PreCommit1Fails") > 8192 { return xerrors.Errorf("Value in field \"PreCommit1Fails\" was too long") } @@ -582,7 +584,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.PreCommit2Fails (uint64) (uint64) - if len("PreCommit2Fails") > cbg.MaxLength { + if len("PreCommit2Fails") > 8192 { return xerrors.Errorf("Value in field \"PreCommit2Fails\" was too long") } @@ -598,7 +600,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.PreCommitTipSet (types.TipSetKey) (struct) - if len("PreCommitTipSet") > cbg.MaxLength { + if len("PreCommitTipSet") > 8192 { return xerrors.Errorf("Value in field \"PreCommitTipSet\" was too long") } @@ -614,7 +616,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.RemoteDataCache (storiface.SectorLocation) (struct) - if len("RemoteDataCache") > cbg.MaxLength { + if len("RemoteDataCache") > 8192 { return xerrors.Errorf("Value in field \"RemoteDataCache\" was too long") } @@ -630,7 +632,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.PreCommitDeposit (big.Int) (struct) - if len("PreCommitDeposit") > cbg.MaxLength { + if len("PreCommitDeposit") > 8192 { return xerrors.Errorf("Value in field \"PreCommitDeposit\" was too long") } @@ -646,7 +648,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.PreCommitMessage (cid.Cid) (struct) - if len("PreCommitMessage") > cbg.MaxLength { + if len("PreCommitMessage") > 8192 { return xerrors.Errorf("Value in field \"PreCommitMessage\" was too long") } @@ -668,7 +670,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.RemoteDataSealed (storiface.SectorLocation) (struct) - if len("RemoteDataSealed") > cbg.MaxLength { + if len("RemoteDataSealed") > 8192 { return xerrors.Errorf("Value in field \"RemoteDataSealed\" was too long") } @@ -684,7 +686,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.TerminateMessage (cid.Cid) (struct) - if len("TerminateMessage") > cbg.MaxLength { + if len("TerminateMessage") > 8192 { return xerrors.Errorf("Value in field \"TerminateMessage\" was too long") } @@ -706,7 +708,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.RemoteDataUnsealed (storiface.SectorLocation) (struct) - if len("RemoteDataUnsealed") > cbg.MaxLength { + if len("RemoteDataUnsealed") > 8192 { return xerrors.Errorf("Value in field \"RemoteDataUnsealed\" was too long") } @@ -722,7 +724,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.ReplicaUpdateProof (storiface.ReplicaUpdateProof) (slice) - if len("ReplicaUpdateProof") > cbg.MaxLength { + if len("ReplicaUpdateProof") > 8192 { return xerrors.Errorf("Value in field \"ReplicaUpdateProof\" was too long") } @@ -733,7 +735,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.ReplicaUpdateProof) > cbg.ByteArrayMaxLen { + if len(t.ReplicaUpdateProof) > 2097152 { return xerrors.Errorf("Byte array in field t.ReplicaUpdateProof was too long") } @@ -741,12 +743,12 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if _, err := cw.Write(t.ReplicaUpdateProof[:]); err != nil { + if _, err := cw.Write(t.ReplicaUpdateProof); err != nil { return err } // t.RemoteDataFinalized (bool) (bool) - if len("RemoteDataFinalized") > cbg.MaxLength { + if len("RemoteDataFinalized") > 8192 { return xerrors.Errorf("Value in field \"RemoteDataFinalized\" was too long") } @@ -762,7 +764,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.ReplicaUpdateMessage (cid.Cid) (struct) - if len("ReplicaUpdateMessage") > cbg.MaxLength { + if len("ReplicaUpdateMessage") > 8192 { return xerrors.Errorf("Value in field \"ReplicaUpdateMessage\" was too long") } @@ -784,7 +786,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.RemoteCommit1Endpoint (string) (string) - if len("RemoteCommit1Endpoint") > cbg.MaxLength { + if len("RemoteCommit1Endpoint") > 8192 { return xerrors.Errorf("Value in field \"RemoteCommit1Endpoint\" was too long") } @@ -795,7 +797,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.RemoteCommit1Endpoint) > cbg.MaxLength { + if len(t.RemoteCommit1Endpoint) > 8192 { return xerrors.Errorf("Value in field t.RemoteCommit1Endpoint was too long") } @@ -807,7 +809,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.RemoteCommit2Endpoint (string) (string) - if len("RemoteCommit2Endpoint") > cbg.MaxLength { + if len("RemoteCommit2Endpoint") > 8192 { return xerrors.Errorf("Value in field \"RemoteCommit2Endpoint\" was too long") } @@ -818,7 +820,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.RemoteCommit2Endpoint) > cbg.MaxLength { + if len(t.RemoteCommit2Endpoint) > 8192 { return xerrors.Errorf("Value in field t.RemoteCommit2Endpoint was too long") } @@ -830,7 +832,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } // t.RemoteSealingDoneEndpoint (string) (string) - if len("RemoteSealingDoneEndpoint") > cbg.MaxLength { + if len("RemoteSealingDoneEndpoint") > 8192 { return xerrors.Errorf("Value in field \"RemoteSealingDoneEndpoint\" was too long") } @@ -841,7 +843,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - if len(t.RemoteSealingDoneEndpoint) > cbg.MaxLength { + if len(t.RemoteSealingDoneEndpoint) > 8192 { return xerrors.Errorf("Value in field t.RemoteSealingDoneEndpoint was too long") } @@ -883,7 +885,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -900,7 +902,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Log: array too large (%d)", extra) } @@ -928,9 +930,9 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.CommD (cid.Cid) (struct) case "CommD": @@ -985,7 +987,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.Proof: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -996,21 +998,22 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { t.Proof = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.Proof[:]); err != nil { + if _, err := io.ReadFull(cr, t.Proof); err != nil { return err } + // t.State (sealing.SectorState) (string) case "State": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } t.State = SectorState(sval) } - // t.Pieces ([]api.SectorPiece) (slice) + // t.Pieces ([]sealing.SafeSectorPiece) (slice) case "Pieces": maj, extra, err = cr.ReadHeader() @@ -1018,7 +1021,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Pieces: array too large (%d)", extra) } @@ -1027,7 +1030,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { } if extra > 0 { - t.Pieces = make([]api.SectorPiece, extra) + t.Pieces = make([]SafeSectorPiece, extra) } for i := 0; i < int(extra); i++ { @@ -1046,14 +1049,14 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.Return (sealing.ReturnState) (string) case "Return": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1064,14 +1067,14 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "LastErr": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } t.LastErr = string(sval) } - // t.CCPieces ([]api.SectorPiece) (slice) + // t.CCPieces ([]sealing.SafeSectorPiece) (slice) case "CCPieces": maj, extra, err = cr.ReadHeader() @@ -1079,7 +1082,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.CCPieces: array too large (%d)", extra) } @@ -1088,7 +1091,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { } if extra > 0 { - t.CCPieces = make([]api.SectorPiece, extra) + t.CCPieces = make([]SafeSectorPiece, extra) } for i := 0; i < int(extra); i++ { @@ -1107,9 +1110,9 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { } } + } } - // t.CCUpdate (bool) (bool) case "CCUpdate": @@ -1132,10 +1135,10 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "SeedEpoch": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -1162,7 +1165,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.SeedValue: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -1173,17 +1176,18 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { t.SeedValue = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.SeedValue[:]); err != nil { + if _, err := io.ReadFull(cr, t.SeedValue); err != nil { return err } + // t.SectorType (abi.RegisteredSealProof) (int64) case "SectorType": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -1206,10 +1210,10 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "TicketEpoch": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -1236,7 +1240,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.TicketValue: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -1247,17 +1251,18 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { t.TicketValue = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.TicketValue[:]); err != nil { + if _, err := io.ReadFull(cr, t.TicketValue); err != nil { return err } + // t.CreationTime (int64) (int64) case "CreationTime": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -1295,10 +1300,10 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "TerminatedAt": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -1386,7 +1391,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.PreCommit1Out: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -1397,9 +1402,10 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { t.PreCommit1Out = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.PreCommit1Out[:]); err != nil { + if _, err := io.ReadFull(cr, t.PreCommit1Out); err != nil { return err } + // t.FaultReportMsg (cid.Cid) (struct) case "FaultReportMsg": @@ -1610,7 +1616,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.ReplicaUpdateProof: byte array too large (%d)", extra) } if maj != cbg.MajByteString { @@ -1621,9 +1627,10 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { t.ReplicaUpdateProof = make([]uint8, extra) } - if _, err := io.ReadFull(cr, t.ReplicaUpdateProof[:]); err != nil { + if _, err := io.ReadFull(cr, t.ReplicaUpdateProof); err != nil { return err } + // t.RemoteDataFinalized (bool) (bool) case "RemoteDataFinalized": @@ -1669,7 +1676,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "RemoteCommit1Endpoint": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1680,7 +1687,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "RemoteCommit2Endpoint": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1691,7 +1698,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { case "RemoteSealingDoneEndpoint": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1720,7 +1727,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { } // t.Kind (string) (string) - if len("Kind") > cbg.MaxLength { + if len("Kind") > 8192 { return xerrors.Errorf("Value in field \"Kind\" was too long") } @@ -1731,7 +1738,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { return err } - if len(t.Kind) > cbg.MaxLength { + if len(t.Kind) > 8192 { return xerrors.Errorf("Value in field t.Kind was too long") } @@ -1743,7 +1750,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { } // t.Trace (string) (string) - if len("Trace") > cbg.MaxLength { + if len("Trace") > 8192 { return xerrors.Errorf("Value in field \"Trace\" was too long") } @@ -1754,7 +1761,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { return err } - if len(t.Trace) > cbg.MaxLength { + if len(t.Trace) > 8192 { return xerrors.Errorf("Value in field t.Trace was too long") } @@ -1766,7 +1773,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { } // t.Message (string) (string) - if len("Message") > cbg.MaxLength { + if len("Message") > 8192 { return xerrors.Errorf("Value in field \"Message\" was too long") } @@ -1777,7 +1784,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { return err } - if len(t.Message) > cbg.MaxLength { + if len(t.Message) > 8192 { return xerrors.Errorf("Value in field t.Message was too long") } @@ -1789,7 +1796,7 @@ func (t *Log) MarshalCBOR(w io.Writer) error { } // t.Timestamp (uint64) (uint64) - if len("Timestamp") > cbg.MaxLength { + if len("Timestamp") > 8192 { return xerrors.Errorf("Value in field \"Timestamp\" was too long") } @@ -1836,7 +1843,7 @@ func (t *Log) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1849,7 +1856,7 @@ func (t *Log) UnmarshalCBOR(r io.Reader) (err error) { case "Kind": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1860,7 +1867,7 @@ func (t *Log) UnmarshalCBOR(r io.Reader) (err error) { case "Trace": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -1871,7 +1878,7 @@ func (t *Log) UnmarshalCBOR(r io.Reader) (err error) { case "Message": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } diff --git a/storage/pipeline/checks.go b/storage/pipeline/checks.go index ecd160231c1..1f21b9c636c 100644 --- a/storage/pipeline/checks.go +++ b/storage/pipeline/checks.go @@ -4,6 +4,7 @@ import ( "bytes" "context" + "github.com/ipfs/go-cid" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" @@ -12,9 +13,9 @@ import ( "github.com/filecoin-project/go-state-types/crypto" prooftypes "github.com/filecoin-project/go-state-types/proof" - "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/storage/sealer/ffiwrapper" ) // TODO: For now we handle this by halting state execution, when we get jsonrpc reconnecting @@ -41,7 +42,7 @@ type ErrCommitWaitFailed struct{ error } type ErrBadRU struct{ error } type ErrBadPR struct{ error } -func checkPieces(ctx context.Context, maddr address.Address, sn abi.SectorNumber, pieces []api.SectorPiece, api SealingAPI, mustHaveDeals bool) error { +func checkPieces(ctx context.Context, maddr address.Address, sn abi.SectorNumber, pieces []SafeSectorPiece, api SealingAPI, mustHaveDeals bool) error { ts, err := api.ChainHead(ctx) if err != nil { return &ErrApi{xerrors.Errorf("getting chain head: %w", err)} @@ -51,43 +52,84 @@ func checkPieces(ctx context.Context, maddr address.Address, sn abi.SectorNumber var offset abi.PaddedPieceSize for i, p := range pieces { + p, i := p, i + // check that the piece is correctly aligned - if offset%p.Piece.Size != 0 { - return &ErrInvalidPiece{xerrors.Errorf("sector %d piece %d is not aligned: size=%xh offset=%xh off-by=%xh", sn, i, p.Piece.Size, offset, offset%p.Piece.Size)} - } - offset += p.Piece.Size - - // if no deal is associated with the piece, ensure that we added it as - // filler (i.e. ensure that it has a zero PieceCID) - if p.DealInfo == nil { - exp := zerocomm.ZeroPieceCommitment(p.Piece.Size.Unpadded()) - if !p.Piece.PieceCID.Equals(exp) { - return &ErrInvalidPiece{xerrors.Errorf("sector %d piece %d had non-zero PieceCID %+v", sn, i, p.Piece.PieceCID)} - } - continue + if offset%p.Piece().Size != 0 { + return &ErrInvalidPiece{xerrors.Errorf("sector %d piece %d is not aligned: size=%xh offset=%xh off-by=%xh", sn, i, p.Piece().Size, offset, offset%p.Piece().Size)} } - - dealCount++ - - deal, err := api.StateMarketStorageDeal(ctx, p.DealInfo.DealID, ts.Key()) + offset += p.Piece().Size + + err := p.handleDealInfo(handleDealInfoParams{ + FillerHandler: func(pi UniversalPieceInfo) error { + // if no deal is associated with the piece, ensure that we added it as + // filler (i.e. ensure that it has a zero PieceCID) + + exp := zerocomm.ZeroPieceCommitment(p.Piece().Size.Unpadded()) + if !p.Piece().PieceCID.Equals(exp) { + return &ErrInvalidPiece{xerrors.Errorf("sector %d piece %d had non-zero PieceCID %+v", sn, i, p.Piece().PieceCID)} + } + + return nil + }, + BuiltinMarketHandler: func(pi UniversalPieceInfo) error { + dealCount++ + + deal, err := api.StateMarketStorageDeal(ctx, p.Impl().DealID, ts.Key()) + if err != nil { + return &ErrInvalidDeals{xerrors.Errorf("getting deal %d for piece %d: %w", p.Impl().DealID, i, err)} + } + + if deal.Proposal.Provider != maddr { + return &ErrInvalidDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers deal %d with wrong provider: %s != %s", i, len(pieces), sn, p.Impl().DealID, deal.Proposal.Provider, maddr)} + } + + if deal.Proposal.PieceCID != p.Piece().PieceCID { + return &ErrInvalidDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers deal %d with wrong PieceCID: %s != %s", i, len(pieces), sn, p.Impl().DealID, p.Impl().DealProposal.PieceCID, deal.Proposal.PieceCID)} + } + + if p.Piece().Size != deal.Proposal.PieceSize { + return &ErrInvalidDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers deal %d with different size: %d != %d", i, len(pieces), sn, p.Impl().DealID, p.Piece().Size, deal.Proposal.PieceSize)} + } + + if ts.Height() >= deal.Proposal.StartEpoch { + return &ErrExpiredDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers expired deal %d - should start at %d, head %d", i, len(pieces), sn, p.Impl().DealID, deal.Proposal.StartEpoch, ts.Height())} + } + + return nil + }, + DDOHandler: func(pi UniversalPieceInfo) error { + dealCount++ + + // try to get allocation to see if that still works + all, err := pi.GetAllocation(ctx, api, ts.Key()) + if err != nil { + return xerrors.Errorf("getting deal %d allocation: %w", p.Impl().DealID, err) + } + if all != nil { + mid, err := address.IDFromAddress(maddr) + if err != nil { + return xerrors.Errorf("getting miner id: %w", err) + } + + if all.Provider != abi.ActorID(mid) { + return xerrors.Errorf("allocation provider doesn't match miner") + } + + if ts.Height() >= all.Expiration { + return &ErrExpiredDeals{xerrors.Errorf("piece allocation %d (of %d) of sector %d refers expired deal %d - should start at %d, head %d", i, len(pieces), sn, p.Impl().DealID, all.Expiration, ts.Height())} + } + + if all.Size < p.Piece().Size { + return &ErrInvalidDeals{xerrors.Errorf("piece allocation %d (of %d) of sector %d refers deal %d with different size: %d != %d", i, len(pieces), sn, p.Impl().DealID, p.Piece().Size, all.Size)} + } + } + + return nil + }, + }) if err != nil { - return &ErrInvalidDeals{xerrors.Errorf("getting deal %d for piece %d: %w", p.DealInfo.DealID, i, err)} - } - - if deal.Proposal.Provider != maddr { - return &ErrInvalidDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers deal %d with wrong provider: %s != %s", i, len(pieces), sn, p.DealInfo.DealID, deal.Proposal.Provider, maddr)} - } - - if deal.Proposal.PieceCID != p.Piece.PieceCID { - return &ErrInvalidDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers deal %d with wrong PieceCID: %s != %s", i, len(pieces), sn, p.DealInfo.DealID, p.Piece.PieceCID, deal.Proposal.PieceCID)} - } - - if p.Piece.Size != deal.Proposal.PieceSize { - return &ErrInvalidDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers deal %d with different size: %d != %d", i, len(pieces), sn, p.DealInfo.DealID, p.Piece.Size, deal.Proposal.PieceSize)} - } - - if ts.Height() >= deal.Proposal.StartEpoch { - return &ErrExpiredDeals{xerrors.Errorf("piece %d (of %d) of sector %d refers expired deal %d - should start at %d, head %d", i, len(pieces), sn, p.DealInfo.DealID, deal.Proposal.StartEpoch, ts.Height())} + return err } } @@ -106,8 +148,8 @@ func checkPrecommit(ctx context.Context, maddr address.Address, si SectorInfo, t return err } - if si.hasDeals() { - commD, err := api.StateComputeDataCID(ctx, maddr, si.SectorType, si.dealIDs(), tsk) + if si.hasData() { + commD, err := computeUnsealedCIDFromPieces(si) if err != nil { return &ErrApi{xerrors.Errorf("calling StateComputeDataCommitment: %w", err)} } @@ -223,8 +265,7 @@ func (m *Sealing) checkCommit(ctx context.Context, si SectorInfo, proof []byte, } // check that sector info is good after running a replica update -func checkReplicaUpdate(ctx context.Context, maddr address.Address, si SectorInfo, tsk types.TipSetKey, api SealingAPI) error { - +func checkReplicaUpdate(ctx context.Context, maddr address.Address, si SectorInfo, api SealingAPI) error { if err := checkPieces(ctx, maddr, si.SectorNumber, si.Pieces, api, true); err != nil { return err } @@ -232,9 +273,9 @@ func checkReplicaUpdate(ctx context.Context, maddr address.Address, si SectorInf return xerrors.Errorf("replica update on sector not marked for update") } - commD, err := api.StateComputeDataCID(ctx, maddr, si.SectorType, si.dealIDs(), tsk) + commD, err := computeUnsealedCIDFromPieces(si) if err != nil { - return &ErrApi{xerrors.Errorf("calling StateComputeDataCommitment: %w", err)} + return xerrors.Errorf("computing unsealed CID from pieces: %w", err) } if si.UpdateUnsealed == nil { @@ -253,5 +294,9 @@ func checkReplicaUpdate(ctx context.Context, maddr address.Address, si SectorInf } return nil +} +func computeUnsealedCIDFromPieces(si SectorInfo) (cid.Cid, error) { + pcs := si.pieceInfos() + return ffiwrapper.GenerateUnsealedCID(si.SectorType, pcs) } diff --git a/storage/pipeline/commit_batch.go b/storage/pipeline/commit_batch.go index 754f317630b..096f27e4c95 100644 --- a/storage/pipeline/commit_batch.go +++ b/storage/pipeline/commit_batch.go @@ -23,6 +23,7 @@ import ( "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/policy" + "github.com/filecoin-project/lotus/chain/messagepool" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules/dtypes" @@ -57,6 +58,9 @@ type AggregateInput struct { Spt abi.RegisteredSealProof Info proof.AggregateSealVerifyInfo Proof []byte + + ActivationManifest miner.SectorActivationManifest + DealIDPrecommit bool } type CommitBatcher struct { @@ -209,13 +213,18 @@ func (b *CommitBatcher) maybeStartBatch(notif bool) ([]sealiface.CommitBatchRes, return nil, nil } - var res []sealiface.CommitBatchRes + var res, resV1 []sealiface.CommitBatchRes ts, err := b.api.ChainHead(b.mctx) if err != nil { return nil, err } + nv, err := b.api.StateNetworkVersion(b.mctx, ts.Key()) + if err != nil { + return nil, xerrors.Errorf("getting network version: %s", err) + } + blackedOut := func() bool { const nv16BlackoutWindow = abi.ChainEpoch(20) // a magik number if ts.Height() <= build.UpgradeSkyrHeight && build.UpgradeSkyrHeight-ts.Height() < nv16BlackoutWindow { @@ -232,25 +241,67 @@ func (b *CommitBatcher) maybeStartBatch(notif bool) ([]sealiface.CommitBatchRes, } } + if nv >= MinDDONetworkVersion { + // After nv21, we have a new ProveCommitSectors2 method, which supports + // batching without aggregation, but it doesn't support onboarding + // sectors which were precommitted with DealIDs in the precommit message. + // We prefer it for all other sectors, so first we use the new processBatchV2 + + var sectors []abi.SectorNumber + for sn := range b.todo { + sectors = append(sectors, sn) + } + res, err = b.processBatchV2(cfg, sectors, nv, !individual) + if err != nil { + err = xerrors.Errorf("processBatchV2: %w", err) + } + + // Mark sectors as done + for _, r := range res { + if err != nil { + r.Error = err.Error() + } + + for _, sn := range r.Sectors { + for _, ch := range b.waiting[sn] { + ch <- r // buffered + } + + delete(b.waiting, sn) + delete(b.todo, sn) + delete(b.cutoffs, sn) + } + } + } + + if err != nil { + log.Warnf("CommitBatcher maybeStartBatch processBatch-ddo %v", err) + } + + if err != nil && len(res) == 0 { + return nil, err + } + if individual { - res, err = b.processIndividually(cfg) + resV1, err = b.processIndividually(cfg) } else { var sectors []abi.SectorNumber for sn := range b.todo { sectors = append(sectors, sn) } - res, err = b.processBatch(cfg, sectors) + resV1, err = b.processBatchV1(cfg, sectors, nv) } if err != nil { log.Warnf("CommitBatcher maybeStartBatch individual:%v processBatch %v", individual, err) } - if err != nil && len(res) == 0 { + if err != nil && len(resV1) == 0 { return nil, err } - for _, r := range res { + // Mark the rest as processed + for _, r := range resV1 { if err != nil { r.Error = err.Error() } @@ -266,10 +317,170 @@ func (b *CommitBatcher) maybeStartBatch(notif bool) ([]sealiface.CommitBatchRes, } } + res = append(res, resV1...) + return res, nil } -func (b *CommitBatcher) processBatch(cfg sealiface.Config, sectors []abi.SectorNumber) ([]sealiface.CommitBatchRes, error) { +// processBatchV2 processes a batch of sectors after nv22. It will always send +// ProveCommitSectors3Params which may contain either individual proofs or an +// aggregate proof depending on SP condition and network conditions. +func (b *CommitBatcher) processBatchV2(cfg sealiface.Config, sectors []abi.SectorNumber, nv network.Version, aggregate bool) ([]sealiface.CommitBatchRes, error) { + ts, err := b.api.ChainHead(b.mctx) + if err != nil { + return nil, err + } + + total := len(sectors) + + res := sealiface.CommitBatchRes{ + FailedSectors: map[abi.SectorNumber]string{}, + } + + params := miner.ProveCommitSectors3Params{ + RequireActivationSuccess: cfg.RequireActivationSuccess, + RequireNotificationSuccess: cfg.RequireNotificationSuccess, + } + + infos := make([]proof.AggregateSealVerifyInfo, 0, total) + collateral := big.Zero() + + for _, sector := range sectors { + if b.todo[sector].DealIDPrecommit { + // can't process sectors precommitted with deal IDs with ProveCommitSectors2 + continue + } + + res.Sectors = append(res.Sectors, sector) + + sc, err := b.getSectorCollateral(sector, ts.Key()) + if err != nil { + res.FailedSectors[sector] = err.Error() + continue + } + + collateral = big.Add(collateral, sc) + + params.SectorActivations = append(params.SectorActivations, b.todo[sector].ActivationManifest) + params.SectorProofs = append(params.SectorProofs, b.todo[sector].Proof) + + infos = append(infos, b.todo[sector].Info) + } + + if len(infos) == 0 { + return nil, nil + } + + sort.Slice(infos, func(i, j int) bool { + return infos[i].Number < infos[j].Number + }) + + proofs := make([][]byte, 0, total) + for _, info := range infos { + proofs = append(proofs, b.todo[info.Number].Proof) + } + + needFunds := collateral + + if aggregate { + params.SectorProofs = nil // can't be set when aggregating + arp, err := b.aggregateProofType(nv) + if err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("getting aggregate proof type: %w", err) + } + params.AggregateProofType = &arp + + mid, err := address.IDFromAddress(b.maddr) + if err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("getting miner id: %w", err) + } + + params.AggregateProof, err = b.prover.AggregateSealProofs(proof.AggregateSealVerifyProofAndInfos{ + Miner: abi.ActorID(mid), + SealProof: b.todo[infos[0].Number].Spt, + AggregateProof: arp, + Infos: infos, + }, proofs) + if err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("aggregating proofs: %w", err) + } + + aggFeeRaw, err := policy.AggregateProveCommitNetworkFee(nv, len(infos), ts.MinTicketBlock().ParentBaseFee) + if err != nil { + res.Error = err.Error() + log.Errorf("getting aggregate commit network fee: %s", err) + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("getting aggregate commit network fee: %s", err) + } + + aggFee := big.Div(big.Mul(aggFeeRaw, aggFeeNum), aggFeeDen) + + needFunds = big.Add(collateral, aggFee) + } + + needFunds, err = collateralSendAmount(b.mctx, b.api, b.maddr, cfg, needFunds) + if err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, err + } + + maxFee := b.feeCfg.MaxCommitBatchGasFee.FeeForSectors(len(infos)) + goodFunds := big.Add(maxFee, needFunds) + + mi, err := b.api.StateMinerInfo(b.mctx, b.maddr, types.EmptyTSK) + if err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("couldn't get miner info: %w", err) + } + + from, _, err := b.addrSel.AddressFor(b.mctx, b.api, mi, api.CommitAddr, goodFunds, needFunds) + if err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("no good address found: %w", err) + } + + enc := new(bytes.Buffer) + if err := params.MarshalCBOR(enc); err != nil { + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("couldn't serialize ProveCommitSectors2Params: %w", err) + } + + _, err = simulateMsgGas(b.mctx, b.api, from, b.maddr, builtin.MethodsMiner.ProveCommitSectors3, needFunds, maxFee, enc.Bytes()) + + if err != nil && (!api.ErrorIsIn(err, []error{&api.ErrOutOfGas{}}) || len(sectors) < miner.MinAggregatedSectors*2) { + log.Errorf("simulating CommitBatch message failed: %s", err) + res.Error = err.Error() + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("simulating CommitBatch message failed: %w", err) + } + + msgTooLarge := len(enc.Bytes()) > (messagepool.MaxMessageSize - 128) + + // If we're out of gas, split the batch in half and evaluate again + if api.ErrorIsIn(err, []error{&api.ErrOutOfGas{}}) || msgTooLarge { + log.Warnf("CommitAggregate message ran out of gas or is too large, splitting batch in half and trying again (sectors: %d, params: %d)", len(sectors), len(enc.Bytes())) + mid := len(sectors) / 2 + ret0, _ := b.processBatchV2(cfg, sectors[:mid], nv, aggregate) + ret1, _ := b.processBatchV2(cfg, sectors[mid:], nv, aggregate) + + return append(ret0, ret1...), nil + } + + mcid, err := sendMsg(b.mctx, b.api, from, b.maddr, builtin.MethodsMiner.ProveCommitSectors3, needFunds, maxFee, enc.Bytes()) + if err != nil { + return []sealiface.CommitBatchRes{res}, xerrors.Errorf("sending message failed (params size: %d, sectors: %d, agg: %t): %w", len(enc.Bytes()), len(sectors), aggregate, err) + } + + res.Msg = &mcid + + log.Infow("Sent ProveCommitSectors2 message", "cid", mcid, "from", from, "todo", total, "sectors", len(infos)) + + return []sealiface.CommitBatchRes{res}, nil +} + +// processBatchV1 processes a batch of sectors before nv22. It always sends out an aggregate message. +func (b *CommitBatcher) processBatchV1(cfg sealiface.Config, sectors []abi.SectorNumber, nv network.Version) ([]sealiface.CommitBatchRes, error) { ts, err := b.api.ChainHead(b.mctx) if err != nil { return nil, err @@ -322,13 +533,6 @@ func (b *CommitBatcher) processBatch(cfg sealiface.Config, sectors []abi.SectorN return []sealiface.CommitBatchRes{res}, xerrors.Errorf("getting miner id: %w", err) } - nv, err := b.api.StateNetworkVersion(b.mctx, ts.Key()) - if err != nil { - res.Error = err.Error() - log.Errorf("getting network version: %s", err) - return []sealiface.CommitBatchRes{res}, xerrors.Errorf("getting network version: %s", err) - } - arp, err := b.aggregateProofType(nv) if err != nil { res.Error = err.Error() @@ -396,8 +600,8 @@ func (b *CommitBatcher) processBatch(cfg sealiface.Config, sectors []abi.SectorN if api.ErrorIsIn(err, []error{&api.ErrOutOfGas{}}) { log.Warnf("CommitAggregate message ran out of gas, splitting batch in half and trying again (sectors: %d)", len(sectors)) mid := len(sectors) / 2 - ret0, _ := b.processBatch(cfg, sectors[:mid]) - ret1, _ := b.processBatch(cfg, sectors[mid:]) + ret0, _ := b.processBatchV1(cfg, sectors[:mid], nv) + ret1, _ := b.processBatchV1(cfg, sectors[mid:], nv) return append(ret0, ret1...), nil } @@ -484,6 +688,10 @@ func (b *CommitBatcher) processIndividually(cfg sealiface.Config) ([]sealiface.C } func (b *CommitBatcher) processSingle(cfg sealiface.Config, mi api.MinerInfo, avail *abi.TokenAmount, sn abi.SectorNumber, info AggregateInput, tsk types.TipSetKey) (cid.Cid, error) { + return b.processSingleV1(cfg, mi, avail, sn, info, tsk) +} + +func (b *CommitBatcher) processSingleV1(cfg sealiface.Config, mi api.MinerInfo, avail *abi.TokenAmount, sn abi.SectorNumber, info AggregateInput, tsk types.TipSetKey) (cid.Cid, error) { enc := new(bytes.Buffer) params := &miner.ProveCommitSectorParams{ SectorNumber: sn, @@ -646,11 +854,15 @@ func (b *CommitBatcher) getCommitCutoff(si SectorInfo) (time.Time, error) { cutoffEpoch := pci.PreCommitEpoch + mpcd for _, p := range si.Pieces { - if p.DealInfo == nil { + if !p.HasDealInfo() { continue } - startEpoch := p.DealInfo.DealSchedule.StartEpoch + startEpoch, err := p.StartEpoch() + if err != nil { + log.Errorf("getting deal start epoch: %s", err) + return time.Now(), err + } if startEpoch < cutoffEpoch { cutoffEpoch = startEpoch } diff --git a/storage/pipeline/commit_batch_test.go b/storage/pipeline/commit_batch_test.go deleted file mode 100644 index 5ae2f171ae2..00000000000 --- a/storage/pipeline/commit_batch_test.go +++ /dev/null @@ -1,498 +0,0 @@ -// stm: #unit -package sealing_test - -import ( - "bytes" - "context" - "sort" - "sync" - "testing" - "time" - - "github.com/golang/mock/gomock" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/big" - minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" - "github.com/filecoin-project/go-state-types/crypto" - "github.com/filecoin-project/go-state-types/network" - prooftypes "github.com/filecoin-project/go-state-types/proof" - miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" - - "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/storage/ctladdr" - pipeline "github.com/filecoin-project/lotus/storage/pipeline" - "github.com/filecoin-project/lotus/storage/pipeline/mocks" - "github.com/filecoin-project/lotus/storage/pipeline/sealiface" - "github.com/filecoin-project/lotus/storage/sealer/storiface" -) - -func TestCommitBatcher(t *testing.T) { - //stm: @CHAIN_STATE_MINER_PRE_COM_INFO_001, @CHAIN_STATE_MINER_INFO_001, @CHAIN_STATE_NETWORK_VERSION_001 - t0123, err := address.NewFromString("t0123") - require.NoError(t, err) - - ctx := context.Background() - - as := asel(func(ctx context.Context, mi api.MinerInfo, use api.AddrUse, goodFunds, minFunds abi.TokenAmount) (address.Address, abi.TokenAmount, error) { - return t0123, big.Zero(), nil - }) - - maxBatch := miner5.MaxAggregatedSectors - minBatch := miner5.MinAggregatedSectors - - cfg := func() (sealiface.Config, error) { - return sealiface.Config{ - MaxWaitDealsSectors: 2, - MaxSealingSectors: 0, - MaxSealingSectorsForDeals: 0, - WaitDealsDelay: time.Hour * 6, - AlwaysKeepUnsealedCopy: true, - - MaxPreCommitBatch: miner5.PreCommitSectorBatchMaxSize, - PreCommitBatchWait: 24 * time.Hour, - PreCommitBatchSlack: 3 * time.Hour, - - AggregateCommits: true, - MinCommitBatch: minBatch, - MaxCommitBatch: maxBatch, - CommitBatchWait: 24 * time.Hour, - CommitBatchSlack: 1 * time.Hour, - - AggregateAboveBaseFee: types.BigMul(types.PicoFil, types.NewInt(150)), // 0.15 nFIL - BatchPreCommitAboveBaseFee: types.BigMul(types.PicoFil, types.NewInt(150)), // 0.15 nFIL - - TerminateBatchMin: 1, - TerminateBatchMax: 100, - TerminateBatchWait: 5 * time.Minute, - }, nil - } - - type promise func(t *testing.T) - type action func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise - - actions := func(as ...action) action { - return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise { - var ps []promise - for _, a := range as { - p := a(t, s, pcb) - if p != nil { - ps = append(ps, p) - } - } - - if len(ps) > 0 { - return func(t *testing.T) { - for _, p := range ps { - p(t) - } - } - } - return nil - } - } - - addSector := func(sn abi.SectorNumber, aboveBalancer bool) action { - return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise { - var pcres sealiface.CommitBatchRes - var pcerr error - done := sync.Mutex{} - done.Lock() - - si := pipeline.SectorInfo{ - SectorNumber: sn, - } - - basefee := types.PicoFil - if aboveBalancer { - basefee = types.NanoFil - } - - s.EXPECT().ChainHead(gomock.Any()).Return(makeBFTs(t, basefee, 1), nil) - s.EXPECT().StateNetworkVersion(gomock.Any(), gomock.Any()).Return(network.Version13, nil) - s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&minertypes.SectorPreCommitOnChainInfo{ - PreCommitDeposit: big.Zero(), - }, nil) - - go func() { - defer done.Unlock() - pcres, pcerr = pcb.AddCommit(ctx, si, pipeline.AggregateInput{ - Info: prooftypes.AggregateSealVerifyInfo{ - Number: sn, - }, - }) - }() - - return func(t *testing.T) { - done.Lock() - require.NoError(t, pcerr) - require.Empty(t, pcres.Error) - require.Contains(t, pcres.Sectors, si.SectorNumber) - } - } - } - - addSectors := func(sectors []abi.SectorNumber, aboveBalancer bool) action { - as := make([]action, len(sectors)) - for i, sector := range sectors { - as[i] = addSector(sector, aboveBalancer) - } - return actions(as...) - } - - waitPending := func(n int) action { - return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise { - require.Eventually(t, func() bool { - p, err := pcb.Pending(ctx) - require.NoError(t, err) - return len(p) == n - }, time.Second*5, 10*time.Millisecond) - - return nil - } - } - - //stm: @CHAIN_STATE_MINER_INFO_001, @CHAIN_STATE_NETWORK_VERSION_001, @CHAIN_STATE_MINER_GET_COLLATERAL_001 - expectSend := func(expect []abi.SectorNumber, aboveBalancer, failOnePCI bool) action { - return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise { - s.EXPECT().StateMinerInfo(gomock.Any(), gomock.Any(), gomock.Any()).Return(api.MinerInfo{Owner: t0123, Worker: t0123}, nil) - - ti := len(expect) - batch := false - if ti >= minBatch { - batch = true - ti = 1 - } - - basefee := types.PicoFil - if aboveBalancer { - basefee = types.NanoFil - } - - s.EXPECT().ChainHead(gomock.Any()).Return(makeBFTs(t, basefee, 1), nil) - /*if batch { - s.EXPECT().ChainBaseFee(gomock.Any(), gomock.Any()).Return(basefee, nil) - }*/ - - if !aboveBalancer { - batch = false - ti = len(expect) - } - - s.EXPECT().ChainHead(gomock.Any()).Return(makeBFTs(t, basefee, 1), nil) - - pciC := len(expect) - if failOnePCI { - s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), abi.SectorNumber(1), gomock.Any()).Return(nil, nil).Times(1) // not found - pciC = len(expect) - 1 - if !batch { - ti-- - } - } - s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&minertypes.SectorPreCommitOnChainInfo{ - PreCommitDeposit: big.Zero(), - }, nil).Times(pciC) - s.EXPECT().StateMinerInitialPledgeCollateral(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(big.Zero(), nil).Times(pciC) - - if batch { - s.EXPECT().StateNetworkVersion(gomock.Any(), gomock.Any()).Return(network.Version13, nil) - s.EXPECT().GasEstimateMessageGas(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&types.Message{GasLimit: 100000}, nil) - } - - s.EXPECT().MpoolPushMessage(gomock.Any(), funMatcher(func(i interface{}) bool { - b := i.(*types.Message) - if batch { - var params miner5.ProveCommitAggregateParams - require.NoError(t, params.UnmarshalCBOR(bytes.NewReader(b.Params))) - for _, number := range expect { - set, err := params.SectorNumbers.IsSet(uint64(number)) - require.NoError(t, err) - require.True(t, set) - } - } else { - var params miner5.ProveCommitSectorParams - require.NoError(t, params.UnmarshalCBOR(bytes.NewReader(b.Params))) - } - return true - }), gomock.Any()).Return(dummySmsg, nil).Times(ti) - return nil - } - } - - expectProcessBatch := func(expect []abi.SectorNumber, aboveBalancer, failOnePCI bool, gasOverLimit bool) action { - return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise { - s.EXPECT().StateMinerInfo(gomock.Any(), gomock.Any(), gomock.Any()).Return(api.MinerInfo{Owner: t0123, Worker: t0123}, nil) - - ti := len(expect) - batch := false - if ti >= minBatch { - batch = true - ti = 1 - } - - if !aboveBalancer { - batch = false - ti = len(expect) - } - - pciC := len(expect) - if failOnePCI { - s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), abi.SectorNumber(1), gomock.Any()).Return(nil, nil).Times(1) // not found - pciC = len(expect) - 1 - if !batch { - ti-- - } - } - s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&minertypes.SectorPreCommitOnChainInfo{ - PreCommitDeposit: big.Zero(), - }, nil).Times(pciC) - s.EXPECT().StateMinerInitialPledgeCollateral(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(big.Zero(), nil).Times(pciC) - - if batch { - s.EXPECT().StateNetworkVersion(gomock.Any(), gomock.Any()).Return(network.Version18, nil) - if gasOverLimit { - s.EXPECT().GasEstimateMessageGas(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, &api.ErrOutOfGas{}) - } else { - s.EXPECT().GasEstimateMessageGas(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&types.Message{GasLimit: 100000}, nil) - } - - } - return nil - } - } - - flush := func(expect []abi.SectorNumber, aboveBalancer, failOnePCI bool) action { - return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *pipeline.CommitBatcher) promise { - _ = expectSend(expect, aboveBalancer, failOnePCI)(t, s, pcb) - - batch := len(expect) >= minBatch && aboveBalancer - - r, err := pcb.Flush(ctx) - require.NoError(t, err) - if batch { - require.Len(t, r, 1) - require.Empty(t, r[0].Error) - sort.Slice(r[0].Sectors, func(i, j int) bool { - return r[0].Sectors[i] < r[0].Sectors[j] - }) - require.Equal(t, expect, r[0].Sectors) - if !failOnePCI { - require.Len(t, r[0].FailedSectors, 0) - } else { - require.Len(t, r[0].FailedSectors, 1) - _, found := r[0].FailedSectors[1] - require.True(t, found) - } - } else { - require.Len(t, r, len(expect)) - for _, res := range r { - require.Len(t, res.Sectors, 1) - require.Empty(t, res.Error) - } - sort.Slice(r, func(i, j int) bool { - return r[i].Sectors[0] < r[j].Sectors[0] - }) - for i, res := range r { - require.Equal(t, abi.SectorNumber(i), res.Sectors[0]) - if failOnePCI && res.Sectors[0] == 1 { - require.Len(t, res.FailedSectors, 1) - _, found := res.FailedSectors[1] - require.True(t, found) - } else { - require.Empty(t, res.FailedSectors) - } - } - } - - return nil - } - } - - getSectors := func(n int) []abi.SectorNumber { - out := make([]abi.SectorNumber, n) - for i := range out { - out[i] = abi.SectorNumber(i) - } - return out - } - - tcs := map[string]struct { - actions []action - }{ - "addSingle-aboveBalancer": { - actions: []action{ - addSector(0, true), - waitPending(1), - flush([]abi.SectorNumber{0}, true, false), - }, - }, - "addTwo-aboveBalancer": { - actions: []action{ - addSectors(getSectors(2), true), - waitPending(2), - flush(getSectors(2), true, false), - }, - }, - "addAte-aboveBalancer": { - actions: []action{ - addSectors(getSectors(8), true), - waitPending(8), - flush(getSectors(8), true, false), - }, - }, - "addMax-aboveBalancer": { - actions: []action{ - expectSend(getSectors(maxBatch), true, false), - addSectors(getSectors(maxBatch), true), - }, - }, - "addMax-aboveBalancer-gasAboveLimit": { - actions: []action{ - expectProcessBatch(getSectors(maxBatch), true, false, true), - expectSend(getSectors(maxBatch)[:maxBatch/2], true, false), - expectSend(getSectors(maxBatch)[maxBatch/2:], true, false), - addSectors(getSectors(maxBatch), true), - }, - }, - "addSingle-belowBalancer": { - actions: []action{ - addSector(0, false), - waitPending(1), - flush([]abi.SectorNumber{0}, false, false), - }, - }, - "addTwo-belowBalancer": { - actions: []action{ - addSectors(getSectors(2), false), - waitPending(2), - flush(getSectors(2), false, false), - }, - }, - "addAte-belowBalancer": { - actions: []action{ - addSectors(getSectors(8), false), - waitPending(8), - flush(getSectors(8), false, false), - }, - }, - "addMax-belowBalancer": { - actions: []action{ - expectSend(getSectors(maxBatch), false, false), - addSectors(getSectors(maxBatch), false), - }, - }, - - "addAte-aboveBalancer-failOne": { - actions: []action{ - addSectors(getSectors(8), true), - waitPending(8), - flush(getSectors(8), true, true), - }, - }, - "addAte-belowBalancer-failOne": { - actions: []action{ - addSectors(getSectors(8), false), - waitPending(8), - flush(getSectors(8), false, true), - }, - }, - } - - for name, tc := range tcs { - tc := tc - - t.Run(name, func(t *testing.T) { - // create go mock controller here - mockCtrl := gomock.NewController(t) - // when test is done, assert expectations on all mock objects. - defer mockCtrl.Finish() - - // create them mocks - pcapi := mocks.NewMockCommitBatcherApi(mockCtrl) - - pcb := pipeline.NewCommitBatcher(ctx, t0123, pcapi, as, fc, cfg, &fakeProver{}) - - var promises []promise - - for _, a := range tc.actions { - p := a(t, pcapi, pcb) - if p != nil { - promises = append(promises, p) - } - } - - for _, p := range promises { - p(t) - } - - err := pcb.Stop(ctx) - require.NoError(t, err) - }) - } -} - -type fakeProver struct{} - -func (f fakeProver) AggregateSealProofs(aggregateInfo prooftypes.AggregateSealVerifyProofAndInfos, proofs [][]byte) ([]byte, error) { - return []byte("Trust me, I'm a proof"), nil -} - -var _ storiface.Prover = &fakeProver{} - -var dummyAddr = func() address.Address { - a, _ := address.NewFromString("t00") - return a -}() - -func makeBFTs(t *testing.T, basefee abi.TokenAmount, h abi.ChainEpoch) *types.TipSet { - dummyCid, _ := cid.Parse("bafkqaaa") - - var ts, err = types.NewTipSet([]*types.BlockHeader{ - { - Height: h, - Miner: dummyAddr, - - Parents: []cid.Cid{}, - - Ticket: &types.Ticket{VRFProof: []byte{byte(h % 2)}}, - - ParentStateRoot: dummyCid, - Messages: dummyCid, - ParentMessageReceipts: dummyCid, - - BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, - BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, - - ParentBaseFee: basefee, - }, - }) - if t != nil { - require.NoError(t, err) - } - - return ts -} - -func makeTs(t *testing.T, h abi.ChainEpoch) *types.TipSet { - return makeBFTs(t, big.NewInt(0), h) -} - -var dummySmsg = &types.SignedMessage{ - Message: types.Message{ - From: dummyAddr, - To: dummyAddr, - }, - Signature: crypto.Signature{Type: crypto.SigTypeBLS}, -} - -type asel func(ctx context.Context, mi api.MinerInfo, use api.AddrUse, goodFunds, minFunds abi.TokenAmount) (address.Address, abi.TokenAmount, error) - -func (s asel) AddressFor(ctx context.Context, _ ctladdr.NodeApi, mi api.MinerInfo, use api.AddrUse, goodFunds, minFunds abi.TokenAmount) (address.Address, abi.TokenAmount, error) { - return s(ctx, mi, use, goodFunds, minFunds) -} - -var _ pipeline.AddressSelector = asel(nil) diff --git a/storage/pipeline/currentdealinfo_test.go b/storage/pipeline/currentdealinfo_test.go index 21141a35d57..1ea05dc35ef 100644 --- a/storage/pipeline/currentdealinfo_test.go +++ b/storage/pipeline/currentdealinfo_test.go @@ -80,21 +80,21 @@ func TestGetCurrentDealInfo(t *testing.T) { } successDeal := &api.MarketDeal{ Proposal: proposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, }, } earlierDeal := &api.MarketDeal{ Proposal: otherProposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, }, } anotherDeal := &api.MarketDeal{ Proposal: anotherProposal, - State: market.DealState{ + State: api.MarketDealState{ SectorStartEpoch: 1, LastUpdatedEpoch: 2, }, diff --git a/storage/pipeline/fsm_events.go b/storage/pipeline/fsm_events.go index a798a884b48..94cd53e829d 100644 --- a/storage/pipeline/fsm_events.go +++ b/storage/pipeline/fsm_events.go @@ -88,7 +88,7 @@ func (evt SectorAddPiece) apply(state *SectorInfo) { } type SectorPieceAdded struct { - NewPieces []api.SectorPiece + NewPieces []SafeSectorPiece } func (evt SectorPieceAdded) apply(state *SectorInfo) { @@ -114,9 +114,11 @@ type SectorPacked struct{ FillerPieces []abi.PieceInfo } func (evt SectorPacked) apply(state *SectorInfo) { for idx := range evt.FillerPieces { - state.Pieces = append(state.Pieces, api.SectorPiece{ - Piece: evt.FillerPieces[idx], - DealInfo: nil, // filler pieces don't have deals associated with them + state.Pieces = append(state.Pieces, SafeSectorPiece{ + real: api.SectorPiece{ + Piece: evt.FillerPieces[idx], + DealInfo: nil, // filler pieces don't have deals associated with them + }, }) } } @@ -419,7 +421,8 @@ type SectorUpdateDealIDs struct { func (evt SectorUpdateDealIDs) apply(state *SectorInfo) { for i, id := range evt.Updates { - state.Pieces[i].DealInfo.DealID = id + // NOTE: all update deals are builtin-market deals + state.Pieces[i].real.DealInfo.DealID = id } } diff --git a/storage/pipeline/input.go b/storage/pipeline/input.go index b595f533d73..53c96fc55ba 100644 --- a/storage/pipeline/input.go +++ b/storage/pipeline/input.go @@ -5,7 +5,6 @@ import ( "sort" "time" - "github.com/ipfs/go-cid" "go.uber.org/zap" "golang.org/x/xerrors" @@ -13,14 +12,15 @@ import ( "github.com/filecoin-project/go-padreader" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/go-statemachine" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/lib/result" "github.com/filecoin-project/lotus/storage/pipeline/lib/nullreader" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" "github.com/filecoin-project/lotus/storage/sealer" "github.com/filecoin-project/lotus/storage/sealer/ffiwrapper" @@ -32,10 +32,15 @@ func (m *Sealing) handleWaitDeals(ctx statemachine.Context, sector SectorInfo) e var used abi.UnpaddedPieceSize var lastDealEnd abi.ChainEpoch for _, piece := range sector.Pieces { - used += piece.Piece.Size.Unpadded() + used += piece.Piece().Size.Unpadded() - if piece.DealInfo != nil && piece.DealInfo.DealProposal.EndEpoch > lastDealEnd { - lastDealEnd = piece.DealInfo.DealProposal.EndEpoch + endEpoch, err := piece.EndEpoch() + if err != nil { + return xerrors.Errorf("piece.EndEpoch: %w", err) + } + + if piece.HasDealInfo() && endEpoch > lastDealEnd { + lastDealEnd = endEpoch } } @@ -65,9 +70,9 @@ func (m *Sealing) handleWaitDeals(ctx statemachine.Context, sector SectorInfo) e if _, has := m.openSectors[sid]; !has { m.openSectors[sid] = &openSector{ used: used, - maybeAccept: func(cid cid.Cid) error { + maybeAccept: func(pk piece.PieceKey) error { // todo check deal start deadline (configurable) - m.assignedPieces[sid] = append(m.assignedPieces[sid], cid) + m.assignedPieces[sid] = append(m.assignedPieces[sid], pk) return ctx.Send(SectorAddPiece{}) }, @@ -94,7 +99,7 @@ func (m *Sealing) handleWaitDeals(ctx statemachine.Context, sector SectorInfo) e func (m *Sealing) maybeStartSealing(ctx statemachine.Context, sector SectorInfo, used abi.UnpaddedPieceSize) (bool, error) { log := log.WithOptions(zap.Fields( zap.Uint64("sector", uint64(sector.SectorNumber)), - zap.Int("deals", len(sector.dealIDs())), + zap.Int("dataPieces", len(sector.nonPaddingPieceInfos())), )) now := time.Now() @@ -117,7 +122,7 @@ func (m *Sealing) maybeStartSealing(ctx statemachine.Context, sector SectorInfo, return false, xerrors.Errorf("getting per-sector deal limit: %w", err) } - if len(sector.dealIDs()) >= maxDeals { + if len(sector.nonPaddingPieceInfos()) >= maxDeals { // can't accept more deals log.Infow("starting to seal deal sector", "trigger", "maxdeals") return true, ctx.Send(SectorStartPacking{}) @@ -146,13 +151,24 @@ func (m *Sealing) maybeStartSealing(ctx statemachine.Context, sector SectorInfo, var dealSafeSealEpoch abi.ChainEpoch for _, piece := range sector.Pieces { - if piece.DealInfo == nil { + if !piece.HasDealInfo() { continue } - dealSafeSealEpoch = piece.DealInfo.DealProposal.StartEpoch - cfg.StartEpochSealingBuffer + startEpoch, err := piece.StartEpoch() + if err != nil { + log.Errorw("failed to get start epoch for deal", "piece", piece.String(), "error", err) + continue // not ideal, but skipping the check should break things less + } + + dealSafeSealEpoch = startEpoch - cfg.StartEpochSealingBuffer + + alloc, err := piece.GetAllocation(ctx.Context(), m.Api, types.EmptyTSK) + if err != nil { + log.Errorw("failed to get allocation for deal", "piece", piece.String(), "error", err) + continue // not ideal, but skipping the check should break things less + } - alloc, _ := m.Api.StateGetAllocationForPendingDeal(ctx.Context(), piece.DealInfo.DealID, types.EmptyTSK) // alloc is nil if this is not a verified deal in nv17 or later if alloc == nil { continue @@ -210,8 +226,8 @@ func (m *Sealing) handleAddPiece(ctx statemachine.Context, sector SectorInfo) er var offset abi.UnpaddedPieceSize pieceSizes := make([]abi.UnpaddedPieceSize, len(sector.Pieces)) for i, p := range sector.Pieces { - pieceSizes[i] = p.Piece.Size.Unpadded() - offset += p.Piece.Size.Unpadded() + pieceSizes[i] = p.Piece().Size.Unpadded() + offset += p.Piece().Size.Unpadded() } maxDeals, err := getDealPerSectorLimit(ssize) @@ -227,7 +243,7 @@ func (m *Sealing) handleAddPiece(ctx statemachine.Context, sector SectorInfo) er return xerrors.Errorf("piece %s assigned to sector %d not found", piece, sector.SectorNumber) } - if len(sector.dealIDs())+(i+1) > maxDeals { + if len(sector.nonPaddingPieceInfos())+(i+1) > maxDeals { // todo: this is rather unlikely to happen, but in case it does, return the deal to waiting queue instead of failing it deal.accepted(sector.SectorNumber, offset, xerrors.Errorf("too many deals assigned to sector %d, dropping deal", sector.SectorNumber)) continue @@ -263,8 +279,10 @@ func (m *Sealing) handleAddPiece(ctx statemachine.Context, sector SectorInfo) er } pieceSizes = append(pieceSizes, p.Unpadded()) - res.NewPieces = append(res.NewPieces, api.SectorPiece{ - Piece: ppi, + res.NewPieces = append(res.NewPieces, SafeSectorPiece{ + api.SectorPiece{ + Piece: ppi, + }, }) } @@ -278,22 +296,26 @@ func (m *Sealing) handleAddPiece(ctx statemachine.Context, sector SectorInfo) er deal.accepted(sector.SectorNumber, offset, err) return ctx.Send(SectorAddPieceFailed{err}) } - if !ppi.PieceCID.Equals(deal.deal.DealProposal.PieceCID) { - err = xerrors.Errorf("got unexpected piece CID: expected:%s, got:%s", deal.deal.DealProposal.PieceCID, ppi.PieceCID) + if !ppi.PieceCID.Equals(deal.deal.PieceCID()) { + err = xerrors.Errorf("got unexpected piece CID: expected:%s, got:%s", deal.deal.PieceCID(), ppi.PieceCID) deal.accepted(sector.SectorNumber, offset, err) return ctx.Send(SectorAddPieceFailed{err}) } - log.Infow("deal added to a sector", "deal", deal.deal.DealID, "sector", sector.SectorNumber, "piece", ppi.PieceCID) + log.Infow("deal added to a sector", "pieceID", deal.deal.String(), "sector", sector.SectorNumber, "piece", ppi.PieceCID) deal.accepted(sector.SectorNumber, offset, nil) offset += deal.size pieceSizes = append(pieceSizes, deal.size) - res.NewPieces = append(res.NewPieces, api.SectorPiece{ - Piece: ppi, - DealInfo: &deal.deal, + dinfo := deal.deal.Impl() + + res.NewPieces = append(res.NewPieces, SafeSectorPiece{ + api.SectorPiece{ + Piece: ppi, + DealInfo: &dinfo, + }, }) } @@ -304,8 +326,13 @@ func (m *Sealing) handleAddPieceFailed(ctx statemachine.Context, sector SectorIn return ctx.Send(SectorRetryWaitDeals{}) } -func (m *Sealing) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, data storiface.Data, deal api.PieceDealInfo) (api.SectorOffset, error) { - log.Infof("Adding piece for deal %d (publish msg: %s)", deal.DealID, deal.PublishCid) +func (m *Sealing) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, data storiface.Data, pieceInfo piece.PieceDealInfo) (api.SectorOffset, error) { + return m.sectorAddPieceToAny(ctx, size, data, &pieceInfo) +} + +func (m *Sealing) sectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, data storiface.Data, pieceInfo UniversalPieceInfo) (api.SectorOffset, error) { + log.Infof("Adding piece %s", pieceInfo.String()) + if (padreader.PaddedSize(uint64(size))) != size { return api.SectorOffset{}, xerrors.Errorf("cannot allocate unpadded piece") } @@ -324,10 +351,6 @@ func (m *Sealing) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPiec return api.SectorOffset{}, xerrors.Errorf("piece cannot fit into a sector") } - if _, err := deal.DealProposal.Cid(); err != nil { - return api.SectorOffset{}, xerrors.Errorf("getting proposal CID: %w", err) - } - cfg, err := m.getConfig() if err != nil { return api.SectorOffset{}, xerrors.Errorf("getting config: %w", err) @@ -337,19 +360,34 @@ func (m *Sealing) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPiec if err != nil { return api.SectorOffset{}, xerrors.Errorf("couldnt get chain head: %w", err) } - if ts.Height()+cfg.StartEpochSealingBuffer > deal.DealProposal.StartEpoch { + + nv, err := m.Api.StateNetworkVersion(ctx, types.EmptyTSK) + if err != nil { + return api.SectorOffset{}, xerrors.Errorf("getting network version: %w", err) + } + + if err := pieceInfo.Valid(nv); err != nil { + return api.SectorOffset{}, xerrors.Errorf("piece metadata invalid: %w", err) + } + + startEpoch, err := pieceInfo.StartEpoch() + if err != nil { + return api.SectorOffset{}, xerrors.Errorf("getting last start epoch: %w", err) + } + + if ts.Height()+cfg.StartEpochSealingBuffer > startEpoch { return api.SectorOffset{}, xerrors.Errorf( "cannot add piece for deal with piece CID %s: current epoch %d has passed deal proposal start epoch %d", - deal.DealProposal.PieceCID, ts.Height(), deal.DealProposal.StartEpoch) + pieceInfo.PieceCID(), ts.Height(), startEpoch) } - claimTerms, err := m.getClaimTerms(ctx, deal, ts.Key()) + claimTerms, err := m.getClaimTerms(ctx, pieceInfo, ts.Key()) if err != nil { return api.SectorOffset{}, err } m.inputLk.Lock() - if pp, exist := m.pendingPieces[proposalCID(deal)]; exist { + if pp, exist := m.pendingPieces[pieceInfo.Key()]; exist { m.inputLk.Unlock() // we already have a pre-existing add piece call for this deal, let's wait for it to finish and see if it's successful @@ -366,7 +404,7 @@ func (m *Sealing) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPiec } // addPendingPiece takes over m.inputLk - pp := m.addPendingPiece(ctx, size, data, deal, claimTerms, sp) + pp := m.addPendingPiece(ctx, size, data, pieceInfo, claimTerms, sp) res, err := waitAddPieceResp(ctx, pp) if err != nil { @@ -375,32 +413,41 @@ func (m *Sealing) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPiec return api.SectorOffset{Sector: res.sn, Offset: res.offset.Padded()}, res.err } -func (m *Sealing) getClaimTerms(ctx context.Context, deal api.PieceDealInfo, tsk types.TipSetKey) (pieceClaimBounds, error) { - nv, err := m.Api.StateNetworkVersion(ctx, tsk) +func (m *Sealing) getClaimTerms(ctx context.Context, deal UniversalPieceInfo, tsk types.TipSetKey) (pieceClaimBounds, error) { + + all, err := deal.GetAllocation(ctx, m.Api, tsk) if err != nil { return pieceClaimBounds{}, err } - - if nv >= network.Version17 { - all, err := m.Api.StateGetAllocationForPendingDeal(ctx, deal.DealID, tsk) + if all != nil { + startEpoch, err := deal.StartEpoch() if err != nil { return pieceClaimBounds{}, err } - if all != nil { - return pieceClaimBounds{ - claimTermEnd: deal.DealProposal.StartEpoch + all.TermMax, - }, nil - } + + return pieceClaimBounds{ + claimTermEnd: startEpoch + all.TermMax, + }, nil + } + + nv, err := m.Api.StateNetworkVersion(ctx, tsk) + if err != nil { + return pieceClaimBounds{}, err + } + + endEpoch, err := deal.EndEpoch() + if err != nil { + return pieceClaimBounds{}, err } // no allocation for this deal, so just use a really high number for "term end" return pieceClaimBounds{ - claimTermEnd: deal.DealProposal.EndEpoch + policy.GetSectorMaxLifetime(abi.RegisteredSealProof_StackedDrg32GiBV1_1, network.Version17), + claimTermEnd: endEpoch + policy.GetSectorMaxLifetime(abi.RegisteredSealProof_StackedDrg32GiBV1_1, nv), }, nil } // called with m.inputLk; transfers the lock to another goroutine! -func (m *Sealing) addPendingPiece(ctx context.Context, size abi.UnpaddedPieceSize, data storiface.Data, deal api.PieceDealInfo, ct pieceClaimBounds, sp abi.RegisteredSealProof) *pendingPiece { +func (m *Sealing) addPendingPiece(ctx context.Context, size abi.UnpaddedPieceSize, data storiface.Data, deal UniversalPieceInfo, ct pieceClaimBounds, sp abi.RegisteredSealProof) *pendingPiece { doneCh := make(chan struct{}) pp := &pendingPiece{ size: size, @@ -417,14 +464,12 @@ func (m *Sealing) addPendingPiece(ctx context.Context, size abi.UnpaddedPieceSiz close(pp.doneCh) } - log.Debugw("new pending piece", "dealId", deal.DealID, - "piece", deal.DealProposal.PieceCID, - "size", size, - "dealStart", deal.DealSchedule.StartEpoch, - "dealEnd", deal.DealSchedule.EndEpoch, + log.Debugw("new pending piece", "pieceID", deal.String(), + "dealStart", result.Wrap(deal.StartEpoch()), + "dealEnd", result.Wrap(deal.EndEpoch()), "termEnd", ct.claimTermEnd) - m.pendingPieces[proposalCID(deal)] = pp + m.pendingPieces[deal.Key()] = pp go func() { defer m.inputLk.Unlock() if err := m.updateInput(ctx, sp); err != nil { @@ -489,7 +534,7 @@ func (m *Sealing) updateInput(ctx context.Context, sp abi.RegisteredSealProof) e type match struct { sector abi.SectorID - deal cid.Cid + deal piece.PieceKey dealEnd abi.ChainEpoch claimTermEnd abi.ChainEpoch @@ -499,7 +544,7 @@ func (m *Sealing) updateInput(ctx context.Context, sp abi.RegisteredSealProof) e } var matches []match - toAssign := map[cid.Cid]struct{}{} // used to maybe create new sectors + toAssign := map[piece.PieceKey]struct{}{} // used to maybe create new sectors // todo: this is distinctly O(n^2), may need to be optimized for tiny deals and large scale miners // (unlikely to be a problem now) @@ -523,12 +568,18 @@ func (m *Sealing) updateInput(ctx context.Context, sp abi.RegisteredSealProof) e continue } + endEpoch, err := piece.deal.EndEpoch() + if err != nil { + log.Errorf("failed to get end epoch for deal %s", piece.deal) + continue + } + if piece.size <= avail { // (note: if we have enough space for the piece, we also have enough space for inter-piece padding) matches = append(matches, match{ sector: id, deal: proposalCid, - dealEnd: piece.deal.DealProposal.EndEpoch, + dealEnd: endEpoch, claimTermEnd: piece.claimTerms.claimTermEnd, size: piece.size, @@ -609,7 +660,7 @@ func (m *Sealing) updateInput(ctx context.Context, sp abi.RegisteredSealProof) e } // pendingPieceIndex is an index in the Sealing.pendingPieces map -type pendingPieceIndex cid.Cid +type pendingPieceIndex piece.PieceKey type pieceBound struct { epoch abi.ChainEpoch @@ -633,13 +684,21 @@ func (m *Sealing) pendingPieceEpochBounds() []pieceBound { continue } + endEpoch, err := piece.deal.EndEpoch() + if err != nil { + // this really should never happen, at this point we have validated + // the piece enough times + log.Errorf("failed to get end epoch for deal %s: %v", ppi, err) + continue + } + // start bound on deal end - if boundsByEpoch[piece.deal.DealProposal.EndEpoch] == nil { - boundsByEpoch[piece.deal.DealProposal.EndEpoch] = &pieceBound{ - epoch: piece.deal.DealProposal.EndEpoch, + if boundsByEpoch[endEpoch] == nil { + boundsByEpoch[endEpoch] = &pieceBound{ + epoch: endEpoch, } } - boundsByEpoch[piece.deal.DealProposal.EndEpoch].boundStart = append(boundsByEpoch[piece.deal.DealProposal.EndEpoch].boundStart, pendingPieceIndex(ppi)) + boundsByEpoch[endEpoch].boundStart = append(boundsByEpoch[endEpoch].boundStart, pendingPieceIndex(ppi)) // end bound on term max if boundsByEpoch[piece.claimTerms.claimTermEnd] == nil { @@ -662,10 +721,10 @@ func (m *Sealing) pendingPieceEpochBounds() []pieceBound { var curBoundBytes abi.UnpaddedPieceSize for i, bound := range out { for _, ppi := range bound.boundStart { - curBoundBytes += m.pendingPieces[cid.Cid(ppi)].size + curBoundBytes += m.pendingPieces[piece.PieceKey(ppi)].size } for _, ppi := range bound.boundEnd { - curBoundBytes -= m.pendingPieces[cid.Cid(ppi)].size + curBoundBytes -= m.pendingPieces[piece.PieceKey(ppi)].size } out[i].dealBytesInBound = curBoundBytes @@ -896,15 +955,17 @@ func (m *Sealing) SectorsStatus(ctx context.Context, sid abi.SectorNumber, showO deals := make([]abi.DealID, len(info.Pieces)) pieces := make([]api.SectorPiece, len(info.Pieces)) for i, piece := range info.Pieces { - pieces[i].Piece = piece.Piece - if piece.DealInfo == nil { + // todo make this work with DDO deals in some reasonable way + + pieces[i].Piece = piece.Piece() + if !piece.HasDealInfo() || piece.Impl().PublishCid == nil { continue } - pdi := *piece.DealInfo // copy + pdi := piece.DealInfo().Impl() // copy pieces[i].DealInfo = &pdi - deals[i] = piece.DealInfo.DealID + deals[i] = piece.DealInfo().Impl().DealID } log := make([]api.SectorLog, len(info.Log)) @@ -955,14 +1016,4 @@ func (m *Sealing) SectorsStatus(ctx context.Context, sid abi.SectorNumber, showO return sInfo, nil } -func proposalCID(deal api.PieceDealInfo) cid.Cid { - pc, err := deal.DealProposal.Cid() - if err != nil { - log.Errorf("DealProposal.Cid error: %+v", err) - return cid.Undef - } - - return pc -} - var _ sectorblocks.SectorBuilder = &Sealing{} diff --git a/storage/pipeline/mocks/api.go b/storage/pipeline/mocks/api.go index 126dbba7da5..3990f1a2fd3 100644 --- a/storage/pipeline/mocks/api.go +++ b/storage/pipeline/mocks/api.go @@ -9,13 +9,14 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" + blocks "github.com/ipfs/go-block-format" cid "github.com/ipfs/go-cid" address "github.com/filecoin-project/go-address" bitfield "github.com/filecoin-project/go-bitfield" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v12/miner" + miner "github.com/filecoin-project/go-state-types/builtin/v13/miner" miner0 "github.com/filecoin-project/go-state-types/builtin/v9/miner" verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" crypto "github.com/filecoin-project/go-state-types/crypto" @@ -65,6 +66,21 @@ func (mr *MockSealingAPIMockRecorder) ChainGetMessage(arg0, arg1 interface{}) *g return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetMessage", reflect.TypeOf((*MockSealingAPI)(nil).ChainGetMessage), arg0, arg1) } +// ChainHasObj mocks base method. +func (m *MockSealingAPI) ChainHasObj(arg0 context.Context, arg1 cid.Cid) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainHasObj", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainHasObj indicates an expected call of ChainHasObj. +func (mr *MockSealingAPIMockRecorder) ChainHasObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHasObj", reflect.TypeOf((*MockSealingAPI)(nil).ChainHasObj), arg0, arg1) +} + // ChainHead mocks base method. func (m *MockSealingAPI) ChainHead(arg0 context.Context) (*types.TipSet, error) { m.ctrl.T.Helper() @@ -80,6 +96,20 @@ func (mr *MockSealingAPIMockRecorder) ChainHead(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHead", reflect.TypeOf((*MockSealingAPI)(nil).ChainHead), arg0) } +// ChainPutObj mocks base method. +func (m *MockSealingAPI) ChainPutObj(arg0 context.Context, arg1 blocks.Block) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainPutObj", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainPutObj indicates an expected call of ChainPutObj. +func (mr *MockSealingAPIMockRecorder) ChainPutObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainPutObj", reflect.TypeOf((*MockSealingAPI)(nil).ChainPutObj), arg0, arg1) +} + // ChainReadObj mocks base method. func (m *MockSealingAPI) ChainReadObj(arg0 context.Context, arg1 cid.Cid) ([]byte, error) { m.ctrl.T.Helper() @@ -140,19 +170,34 @@ func (mr *MockSealingAPIMockRecorder) StateAccountKey(arg0, arg1, arg2 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateAccountKey", reflect.TypeOf((*MockSealingAPI)(nil).StateAccountKey), arg0, arg1, arg2) } -// StateComputeDataCID mocks base method. -func (m *MockSealingAPI) StateComputeDataCID(arg0 context.Context, arg1 address.Address, arg2 abi.RegisteredSealProof, arg3 []abi.DealID, arg4 types.TipSetKey) (cid.Cid, error) { +// StateGetActor mocks base method. +func (m *MockSealingAPI) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.ActorV5, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2) + ret0, _ := ret[0].(*types.ActorV5) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetActor indicates an expected call of StateGetActor. +func (mr *MockSealingAPIMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockSealingAPI)(nil).StateGetActor), arg0, arg1, arg2) +} + +// StateGetAllocation mocks base method. +func (m *MockSealingAPI) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "StateComputeDataCID", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(cid.Cid) + ret := m.ctrl.Call(m, "StateGetAllocation", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*verifreg.Allocation) ret1, _ := ret[1].(error) return ret0, ret1 } -// StateComputeDataCID indicates an expected call of StateComputeDataCID. -func (mr *MockSealingAPIMockRecorder) StateComputeDataCID(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { +// StateGetAllocation indicates an expected call of StateGetAllocation. +func (mr *MockSealingAPIMockRecorder) StateGetAllocation(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateComputeDataCID", reflect.TypeOf((*MockSealingAPI)(nil).StateComputeDataCID), arg0, arg1, arg2, arg3, arg4) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocation", reflect.TypeOf((*MockSealingAPI)(nil).StateGetAllocation), arg0, arg1, arg2, arg3) } // StateGetAllocationForPendingDeal mocks base method. @@ -170,6 +215,21 @@ func (mr *MockSealingAPIMockRecorder) StateGetAllocationForPendingDeal(arg0, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationForPendingDeal", reflect.TypeOf((*MockSealingAPI)(nil).StateGetAllocationForPendingDeal), arg0, arg1, arg2) } +// StateGetAllocationIdForPendingDeal mocks base method. +func (m *MockSealingAPI) StateGetAllocationIdForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (verifreg.AllocationId, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllocationIdForPendingDeal", arg0, arg1, arg2) + ret0, _ := ret[0].(verifreg.AllocationId) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllocationIdForPendingDeal indicates an expected call of StateGetAllocationIdForPendingDeal. +func (mr *MockSealingAPIMockRecorder) StateGetAllocationIdForPendingDeal(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationIdForPendingDeal", reflect.TypeOf((*MockSealingAPI)(nil).StateGetAllocationIdForPendingDeal), arg0, arg1, arg2) +} + // StateGetRandomnessFromBeacon mocks base method. func (m *MockSealingAPI) StateGetRandomnessFromBeacon(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 types.TipSetKey) (abi.Randomness, error) { m.ctrl.T.Helper() @@ -440,6 +500,21 @@ func (mr *MockSealingAPIMockRecorder) StateSectorPreCommitInfo(arg0, arg1, arg2, return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorPreCommitInfo", reflect.TypeOf((*MockSealingAPI)(nil).StateSectorPreCommitInfo), arg0, arg1, arg2, arg3) } +// StateVMCirculatingSupplyInternal mocks base method. +func (m *MockSealingAPI) StateVMCirculatingSupplyInternal(arg0 context.Context, arg1 types.TipSetKey) (api.CirculatingSupply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVMCirculatingSupplyInternal", arg0, arg1) + ret0, _ := ret[0].(api.CirculatingSupply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVMCirculatingSupplyInternal indicates an expected call of StateVMCirculatingSupplyInternal. +func (mr *MockSealingAPIMockRecorder) StateVMCirculatingSupplyInternal(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVMCirculatingSupplyInternal", reflect.TypeOf((*MockSealingAPI)(nil).StateVMCirculatingSupplyInternal), arg0, arg1) +} + // StateWaitMsg mocks base method. func (m *MockSealingAPI) StateWaitMsg(arg0 context.Context, arg1 cid.Cid, arg2 uint64, arg3 abi.ChainEpoch, arg4 bool) (*api.MsgLookup, error) { m.ctrl.T.Helper() diff --git a/storage/pipeline/mocks/mock_precommit_batcher.go b/storage/pipeline/mocks/mock_precommit_batcher.go index 68cce7fb0f3..fd46f601b77 100644 --- a/storage/pipeline/mocks/mock_precommit_batcher.go +++ b/storage/pipeline/mocks/mock_precommit_batcher.go @@ -103,6 +103,21 @@ func (mr *MockPreCommitBatcherApiMockRecorder) StateAccountKey(arg0, arg1, arg2 return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateAccountKey", reflect.TypeOf((*MockPreCommitBatcherApi)(nil).StateAccountKey), arg0, arg1, arg2) } +// StateGetAllocation mocks base method. +func (m *MockPreCommitBatcherApi) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllocation", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*verifreg.Allocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllocation indicates an expected call of StateGetAllocation. +func (mr *MockPreCommitBatcherApiMockRecorder) StateGetAllocation(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocation", reflect.TypeOf((*MockPreCommitBatcherApi)(nil).StateGetAllocation), arg0, arg1, arg2, arg3) +} + // StateGetAllocationForPendingDeal mocks base method. func (m *MockPreCommitBatcherApi) StateGetAllocationForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (*verifreg.Allocation, error) { m.ctrl.T.Helper() diff --git a/storage/pipeline/piece/cbor_gen.go b/storage/pipeline/piece/cbor_gen.go new file mode 100644 index 00000000000..ccf44e54b29 --- /dev/null +++ b/storage/pipeline/piece/cbor_gen.go @@ -0,0 +1,451 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package piece + +import ( + "fmt" + "io" + "math" + "sort" + + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" + + abi "github.com/filecoin-project/go-state-types/abi" + miner "github.com/filecoin-project/go-state-types/builtin/v13/miner" + market "github.com/filecoin-project/go-state-types/builtin/v9/market" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort + +func (t *PieceDealInfo) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{166}); err != nil { + return err + } + + // t.DealID (abi.DealID) (uint64) + if len("DealID") > 8192 { + return xerrors.Errorf("Value in field \"DealID\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealID"))); err != nil { + return err + } + if _, err := cw.WriteString(string("DealID")); err != nil { + return err + } + + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.DealID)); err != nil { + return err + } + + // t.PublishCid (cid.Cid) (struct) + if len("PublishCid") > 8192 { + return xerrors.Errorf("Value in field \"PublishCid\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("PublishCid"))); err != nil { + return err + } + if _, err := cw.WriteString(string("PublishCid")); err != nil { + return err + } + + if t.PublishCid == nil { + if _, err := cw.Write(cbg.CborNull); err != nil { + return err + } + } else { + if err := cbg.WriteCid(cw, *t.PublishCid); err != nil { + return xerrors.Errorf("failed to write cid field t.PublishCid: %w", err) + } + } + + // t.DealProposal (market.DealProposal) (struct) + if len("DealProposal") > 8192 { + return xerrors.Errorf("Value in field \"DealProposal\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealProposal"))); err != nil { + return err + } + if _, err := cw.WriteString(string("DealProposal")); err != nil { + return err + } + + if err := t.DealProposal.MarshalCBOR(cw); err != nil { + return err + } + + // t.DealSchedule (piece.DealSchedule) (struct) + if len("DealSchedule") > 8192 { + return xerrors.Errorf("Value in field \"DealSchedule\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealSchedule"))); err != nil { + return err + } + if _, err := cw.WriteString(string("DealSchedule")); err != nil { + return err + } + + if err := t.DealSchedule.MarshalCBOR(cw); err != nil { + return err + } + + // t.KeepUnsealed (bool) (bool) + if len("KeepUnsealed") > 8192 { + return xerrors.Errorf("Value in field \"KeepUnsealed\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("KeepUnsealed"))); err != nil { + return err + } + if _, err := cw.WriteString(string("KeepUnsealed")); err != nil { + return err + } + + if err := cbg.WriteBool(w, t.KeepUnsealed); err != nil { + return err + } + + // t.PieceActivationManifest (miner.PieceActivationManifest) (struct) + if len("PieceActivationManifest") > 8192 { + return xerrors.Errorf("Value in field \"PieceActivationManifest\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("PieceActivationManifest"))); err != nil { + return err + } + if _, err := cw.WriteString(string("PieceActivationManifest")); err != nil { + return err + } + + if err := t.PieceActivationManifest.MarshalCBOR(cw); err != nil { + return err + } + return nil +} + +func (t *PieceDealInfo) UnmarshalCBOR(r io.Reader) (err error) { + *t = PieceDealInfo{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("PieceDealInfo: map struct too large (%d)", extra) + } + + var name string + n := extra + + for i := uint64(0); i < n; i++ { + + { + sval, err := cbg.ReadStringWithMax(cr, 8192) + if err != nil { + return err + } + + name = string(sval) + } + + switch name { + // t.DealID (abi.DealID) (uint64) + case "DealID": + + { + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.DealID = abi.DealID(extra) + + } + // t.PublishCid (cid.Cid) (struct) + case "PublishCid": + + { + + b, err := cr.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := cr.UnreadByte(); err != nil { + return err + } + + c, err := cbg.ReadCid(cr) + if err != nil { + return xerrors.Errorf("failed to read cid field t.PublishCid: %w", err) + } + + t.PublishCid = &c + } + + } + // t.DealProposal (market.DealProposal) (struct) + case "DealProposal": + + { + + b, err := cr.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := cr.UnreadByte(); err != nil { + return err + } + t.DealProposal = new(market.DealProposal) + if err := t.DealProposal.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.DealProposal pointer: %w", err) + } + } + + } + // t.DealSchedule (piece.DealSchedule) (struct) + case "DealSchedule": + + { + + if err := t.DealSchedule.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.DealSchedule: %w", err) + } + + } + // t.KeepUnsealed (bool) (bool) + case "KeepUnsealed": + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.KeepUnsealed = false + case 21: + t.KeepUnsealed = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + // t.PieceActivationManifest (miner.PieceActivationManifest) (struct) + case "PieceActivationManifest": + + { + + b, err := cr.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := cr.UnreadByte(); err != nil { + return err + } + t.PieceActivationManifest = new(miner.PieceActivationManifest) + if err := t.PieceActivationManifest.UnmarshalCBOR(cr); err != nil { + return xerrors.Errorf("unmarshaling t.PieceActivationManifest pointer: %w", err) + } + } + + } + + default: + // Field doesn't exist on this type, so ignore it + cbg.ScanForLinks(r, func(cid.Cid) {}) + } + } + + return nil +} +func (t *DealSchedule) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write([]byte{162}); err != nil { + return err + } + + // t.EndEpoch (abi.ChainEpoch) (int64) + if len("EndEpoch") > 8192 { + return xerrors.Errorf("Value in field \"EndEpoch\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("EndEpoch"))); err != nil { + return err + } + if _, err := cw.WriteString(string("EndEpoch")); err != nil { + return err + } + + if t.EndEpoch >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.EndEpoch)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.EndEpoch-1)); err != nil { + return err + } + } + + // t.StartEpoch (abi.ChainEpoch) (int64) + if len("StartEpoch") > 8192 { + return xerrors.Errorf("Value in field \"StartEpoch\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("StartEpoch"))); err != nil { + return err + } + if _, err := cw.WriteString(string("StartEpoch")); err != nil { + return err + } + + if t.StartEpoch >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.StartEpoch)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.StartEpoch-1)); err != nil { + return err + } + } + + return nil +} + +func (t *DealSchedule) UnmarshalCBOR(r io.Reader) (err error) { + *t = DealSchedule{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajMap { + return fmt.Errorf("cbor input should be of type map") + } + + if extra > cbg.MaxLength { + return fmt.Errorf("DealSchedule: map struct too large (%d)", extra) + } + + var name string + n := extra + + for i := uint64(0); i < n; i++ { + + { + sval, err := cbg.ReadStringWithMax(cr, 8192) + if err != nil { + return err + } + + name = string(sval) + } + + switch name { + // t.EndEpoch (abi.ChainEpoch) (int64) + case "EndEpoch": + { + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + var extraI int64 + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative overflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.EndEpoch = abi.ChainEpoch(extraI) + } + // t.StartEpoch (abi.ChainEpoch) (int64) + case "StartEpoch": + { + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + var extraI int64 + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative overflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.StartEpoch = abi.ChainEpoch(extraI) + } + + default: + // Field doesn't exist on this type, so ignore it + cbg.ScanForLinks(r, func(cid.Cid) {}) + } + } + + return nil +} diff --git a/storage/pipeline/piece/piece_info.go b/storage/pipeline/piece/piece_info.go new file mode 100644 index 00000000000..7ee8f70292e --- /dev/null +++ b/storage/pipeline/piece/piece_info.go @@ -0,0 +1,186 @@ +package piece + +import ( + "context" + "fmt" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/lotus/chain/actors/builtin/market" + "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + verifregtypes "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" + "github.com/filecoin-project/lotus/chain/types" +) + +// DealInfo is a tuple of deal identity and its schedule +type PieceDealInfo struct { + // "Old" builtin-market deal info + PublishCid *cid.Cid + DealID abi.DealID + DealProposal *market.DealProposal + + // Common deal info, required for all pieces + // TODO: https://github.com/filecoin-project/lotus/issues/11237 + DealSchedule DealSchedule + + // Direct Data Onboarding + // When PieceActivationManifest is set, builtin-market deal info must not be set + PieceActivationManifest *miner.PieceActivationManifest + + // Best-effort deal asks + KeepUnsealed bool +} + +// DealSchedule communicates the time interval of a storage deal. The deal must +// appear in a sealed (proven) sector no later than StartEpoch, otherwise it +// is invalid. +type DealSchedule struct { + StartEpoch abi.ChainEpoch + EndEpoch abi.ChainEpoch +} + +func (ds *PieceDealInfo) isBuiltinMarketDeal() bool { + return ds.PublishCid != nil +} + +// Valid validates the deal info after being accepted through RPC, checks that +// the deal metadata is well-formed. +func (ds *PieceDealInfo) Valid(nv network.Version) error { + hasLegacyDealInfo := ds.PublishCid != nil && ds.DealID != 0 && ds.DealProposal != nil + hasPieceActivationManifest := ds.PieceActivationManifest != nil + + if hasLegacyDealInfo && hasPieceActivationManifest { + return xerrors.Errorf("piece deal info has both legacy deal info and piece activation manifest") + } + + if !hasLegacyDealInfo && !hasPieceActivationManifest { + return xerrors.Errorf("piece deal info has neither legacy deal info nor piece activation manifest") + } + + if hasLegacyDealInfo { + if _, err := ds.DealProposal.Cid(); err != nil { + return xerrors.Errorf("checking proposal CID: %w", err) + } + } + + if ds.DealSchedule.StartEpoch <= 0 { + return xerrors.Errorf("invalid deal start epoch %d", ds.DealSchedule.StartEpoch) + } + if ds.DealSchedule.EndEpoch <= 0 { + return xerrors.Errorf("invalid deal end epoch %d", ds.DealSchedule.EndEpoch) + } + if ds.DealSchedule.EndEpoch <= ds.DealSchedule.StartEpoch { + return xerrors.Errorf("invalid deal end epoch %d (start %d)", ds.DealSchedule.EndEpoch, ds.DealSchedule.StartEpoch) + } + + if hasPieceActivationManifest { + if nv < network.Version22 { + return xerrors.Errorf("direct-data-onboarding pieces aren't accepted before network version 22") + } + + // todo any more checks seem reasonable to put here? + } + + return nil +} + +type AllocationAPI interface { + StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) + StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) +} + +func (ds *PieceDealInfo) GetAllocation(ctx context.Context, aapi AllocationAPI, tsk types.TipSetKey) (*verifregtypes.Allocation, error) { + switch { + case ds.isBuiltinMarketDeal(): + return aapi.StateGetAllocationForPendingDeal(ctx, ds.DealID, tsk) + default: + if ds.PieceActivationManifest.VerifiedAllocationKey == nil { + return nil, nil + } + + caddr, err := address.NewIDAddress(uint64(ds.PieceActivationManifest.VerifiedAllocationKey.Client)) + if err != nil { + return nil, err + } + + all, err := aapi.StateGetAllocation(ctx, caddr, verifregtypes.AllocationId(ds.PieceActivationManifest.VerifiedAllocationKey.ID), tsk) + if err != nil { + return nil, err + } + + if all == nil { + return nil, nil + } + + if all.Client != ds.PieceActivationManifest.VerifiedAllocationKey.Client { + return nil, xerrors.Errorf("allocation client mismatch: %d != %d", all.Client, ds.PieceActivationManifest.VerifiedAllocationKey.Client) + } + + return all, nil + } +} + +// StartEpoch returns the last epoch in which the sector containing this deal +// must be sealed (committed) in order for the deal to be valid. +func (ds *PieceDealInfo) StartEpoch() (abi.ChainEpoch, error) { + switch { + case ds.isBuiltinMarketDeal(): + return ds.DealSchedule.StartEpoch, nil + default: + // note - when implementing make sure to cache any dynamically computed values + // todo do we want a smarter mechanism here + return ds.DealSchedule.StartEpoch, nil + } +} + +// EndEpoch returns the minimum epoch until which the sector containing this +// deal must be committed until. +func (ds *PieceDealInfo) EndEpoch() (abi.ChainEpoch, error) { + switch { + case ds.isBuiltinMarketDeal(): + return ds.DealSchedule.EndEpoch, nil + default: + // note - when implementing make sure to cache any dynamically computed values + // todo do we want a smarter mechanism here + return ds.DealSchedule.StartEpoch, nil + } +} + +func (ds *PieceDealInfo) PieceCID() cid.Cid { + switch { + case ds.isBuiltinMarketDeal(): + return ds.DealProposal.PieceCID + default: + return ds.PieceActivationManifest.CID + } +} + +func (ds *PieceDealInfo) String() string { + switch { + case ds.isBuiltinMarketDeal(): + return fmt.Sprintf("BuiltinMarket{DealID: %d, PieceCID: %s, PublishCid: %s}", ds.DealID, ds.DealProposal.PieceCID, ds.PublishCid) + default: + // todo check that VAlloc doesn't print as a pointer + return fmt.Sprintf("DirectDataOnboarding{PieceCID: %s, VAllloc: %x}", ds.PieceActivationManifest.CID, ds.PieceActivationManifest.VerifiedAllocationKey) + } +} + +func (ds *PieceDealInfo) KeepUnsealedRequested() bool { + return ds.KeepUnsealed +} + +type PieceKey string + +// Key returns a unique identifier for this deal info, for use in maps. +func (ds *PieceDealInfo) Key() PieceKey { + return PieceKey(ds.String()) +} + +func (ds *PieceDealInfo) Impl() PieceDealInfo { + return *ds +} diff --git a/storage/pipeline/pledge.go b/storage/pipeline/pledge.go new file mode 100644 index 00000000000..04567fca1b2 --- /dev/null +++ b/storage/pipeline/pledge.go @@ -0,0 +1,114 @@ +package sealing + +import ( + "context" + + cbor "github.com/ipfs/go-ipld-cbor" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + bstore "github.com/filecoin-project/lotus/blockstore" + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/chain/actors/builtin" + "github.com/filecoin-project/lotus/chain/actors/builtin/power" + "github.com/filecoin-project/lotus/chain/actors/builtin/reward" + "github.com/filecoin-project/lotus/chain/types" +) + +var initialPledgeNum = types.NewInt(110) +var initialPledgeDen = types.NewInt(100) + +func (m *Sealing) pledgeForPower(ctx context.Context, addedPower abi.StoragePower) (abi.TokenAmount, error) { + store := adt.WrapStore(ctx, cbor.NewCborStore(bstore.NewAPIBlockstore(m.Api))) + + // load power actor + var ( + powerSmoothed builtin.FilterEstimate + pledgeCollateral abi.TokenAmount + ) + if act, err := m.Api.StateGetActor(ctx, power.Address, types.EmptyTSK); err != nil { + return types.EmptyInt, xerrors.Errorf("loading power actor: %w", err) + } else if s, err := power.Load(store, act); err != nil { + return types.EmptyInt, xerrors.Errorf("loading power actor state: %w", err) + } else if p, err := s.TotalPowerSmoothed(); err != nil { + return types.EmptyInt, xerrors.Errorf("failed to determine total power: %w", err) + } else if c, err := s.TotalLocked(); err != nil { + return types.EmptyInt, xerrors.Errorf("failed to determine pledge collateral: %w", err) + } else { + powerSmoothed = p + pledgeCollateral = c + } + + // load reward actor + rewardActor, err := m.Api.StateGetActor(ctx, reward.Address, types.EmptyTSK) + if err != nil { + return types.EmptyInt, xerrors.Errorf("loading reward actor: %w", err) + } + + rewardState, err := reward.Load(store, rewardActor) + if err != nil { + return types.EmptyInt, xerrors.Errorf("loading reward actor state: %w", err) + } + + // get circulating supply + circSupply, err := m.Api.StateVMCirculatingSupplyInternal(ctx, types.EmptyTSK) + if err != nil { + return big.Zero(), xerrors.Errorf("getting circulating supply: %w", err) + } + + // do the calculation + initialPledge, err := rewardState.InitialPledgeForPower( + addedPower, + pledgeCollateral, + &powerSmoothed, + circSupply.FilCirculating, + ) + if err != nil { + return big.Zero(), xerrors.Errorf("calculating initial pledge: %w", err) + } + + return types.BigDiv(types.BigMul(initialPledge, initialPledgeNum), initialPledgeDen), nil +} + +func (m *Sealing) sectorWeight(ctx context.Context, sector SectorInfo, expiration abi.ChainEpoch) (abi.StoragePower, error) { + spt, err := m.currentSealProof(ctx) + if err != nil { + return types.EmptyInt, xerrors.Errorf("getting seal proof type: %w", err) + } + + ssize, err := spt.SectorSize() + if err != nil { + return types.EmptyInt, xerrors.Errorf("getting sector size: %w", err) + } + + ts, err := m.Api.ChainHead(ctx) + if err != nil { + return types.EmptyInt, xerrors.Errorf("getting chain head: %w", err) + } + + // get verified deal infos + var w, vw = big.Zero(), big.Zero() + + for _, piece := range sector.Pieces { + if !piece.HasDealInfo() { + // todo StateMinerInitialPledgeCollateral doesn't add cc/padding to non-verified weight, is that correct? + continue + } + + alloc, err := piece.GetAllocation(ctx, m.Api, ts.Key()) + if err != nil || alloc == nil { + w = big.Add(w, abi.NewStoragePower(int64(piece.Piece().Size))) + continue + } + + vw = big.Add(vw, abi.NewStoragePower(int64(piece.Piece().Size))) + } + + // load market actor + duration := expiration - ts.Height() + sectorWeight := builtin.QAPowerForWeight(ssize, duration, w, vw) + + return sectorWeight, nil +} diff --git a/storage/pipeline/precommit_batch.go b/storage/pipeline/precommit_batch.go index 3a86c8628e0..099988010db 100644 --- a/storage/pipeline/precommit_batch.go +++ b/storage/pipeline/precommit_batch.go @@ -36,6 +36,7 @@ type PreCommitBatcherApi interface { ChainHead(ctx context.Context) (*types.TipSet, error) StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (network.Version, error) StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) + StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) // Address selector WalletBalance(context.Context, address.Address) (types.BigInt, error) @@ -428,11 +429,18 @@ func (b *PreCommitBatcher) Stop(ctx context.Context) error { func getDealStartCutoff(si SectorInfo) abi.ChainEpoch { cutoffEpoch := si.TicketEpoch + policy.MaxPreCommitRandomnessLookback for _, p := range si.Pieces { - if p.DealInfo == nil { + if !p.HasDealInfo() { + continue + } + + startEpoch, err := p.StartEpoch() + if err != nil { + // almost definitely can't happen, but if it does there's less harm in + // just logging the error and moving on + log.Errorw("failed to get deal start epoch", "error", err) continue } - startEpoch := p.DealInfo.DealSchedule.StartEpoch if startEpoch < cutoffEpoch { cutoffEpoch = startEpoch } @@ -444,15 +452,19 @@ func getDealStartCutoff(si SectorInfo) abi.ChainEpoch { func (b *PreCommitBatcher) getAllocationCutoff(si SectorInfo) abi.ChainEpoch { cutoff := si.TicketEpoch + policy.MaxPreCommitRandomnessLookback for _, p := range si.Pieces { - if p.DealInfo == nil { + if !p.HasDealInfo() { continue } - alloc, _ := b.api.StateGetAllocationForPendingDeal(b.mctx, p.DealInfo.DealID, types.EmptyTSK) + alloc, err := p.GetAllocation(b.mctx, b.api, types.EmptyTSK) + if err != nil { + log.Errorw("failed to get deal allocation", "error", err) + } // alloc is nil if this is not a verified deal in nv17 or later if alloc == nil { continue } + if alloc.Expiration < cutoff { cutoff = alloc.Expiration } diff --git a/storage/pipeline/precommit_batch_test.go b/storage/pipeline/precommit_batch_test.go deleted file mode 100644 index 1f3aaf24472..00000000000 --- a/storage/pipeline/precommit_batch_test.go +++ /dev/null @@ -1,291 +0,0 @@ -// stm: #unit -package sealing_test - -import ( - "bytes" - "context" - "sort" - "sync" - "testing" - "time" - - "github.com/golang/mock/gomock" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/big" - minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" - "github.com/filecoin-project/go-state-types/network" - miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" - - "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/node/config" - pipeline "github.com/filecoin-project/lotus/storage/pipeline" - "github.com/filecoin-project/lotus/storage/pipeline/mocks" - "github.com/filecoin-project/lotus/storage/pipeline/sealiface" -) - -var fc = config.MinerFeeConfig{ - MaxPreCommitGasFee: types.FIL(types.FromFil(1)), - MaxCommitGasFee: types.FIL(types.FromFil(1)), - MaxTerminateGasFee: types.FIL(types.FromFil(1)), - MaxPreCommitBatchGasFee: config.BatchFeeConfig{Base: types.FIL(types.FromFil(3)), PerSector: types.FIL(types.FromFil(1))}, - MaxCommitBatchGasFee: config.BatchFeeConfig{Base: types.FIL(types.FromFil(3)), PerSector: types.FIL(types.FromFil(1))}, -} - -func TestPrecommitBatcher(t *testing.T) { - //stm: @CHAIN_STATE_MINER_CALCULATE_DEADLINE_001 - t0123, err := address.NewFromString("t0123") - require.NoError(t, err) - - ctx := context.Background() - - as := asel(func(ctx context.Context, mi api.MinerInfo, use api.AddrUse, goodFunds, minFunds abi.TokenAmount) (address.Address, abi.TokenAmount, error) { - return t0123, big.Zero(), nil - }) - - maxBatch := miner6.PreCommitSectorBatchMaxSize - - cfg := func() (sealiface.Config, error) { - return sealiface.Config{ - MaxWaitDealsSectors: 2, - MaxSealingSectors: 0, - MaxSealingSectorsForDeals: 0, - WaitDealsDelay: time.Hour * 6, - AlwaysKeepUnsealedCopy: true, - - MaxPreCommitBatch: maxBatch, - PreCommitBatchWait: 24 * time.Hour, - PreCommitBatchSlack: 3 * time.Hour, - BatchPreCommitAboveBaseFee: big.NewInt(10000), - - AggregateCommits: true, - MinCommitBatch: miner6.MinAggregatedSectors, - MaxCommitBatch: miner6.MaxAggregatedSectors, - CommitBatchWait: 24 * time.Hour, - CommitBatchSlack: 1 * time.Hour, - - TerminateBatchMin: 1, - TerminateBatchMax: 100, - TerminateBatchWait: 5 * time.Minute, - }, nil - } - - type promise func(t *testing.T) - type action func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise - - actions := func(as ...action) action { - return func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise { - var ps []promise - for _, a := range as { - p := a(t, s, pcb) - if p != nil { - ps = append(ps, p) - } - } - - if len(ps) > 0 { - return func(t *testing.T) { - for _, p := range ps { - p(t) - } - } - } - return nil - } - } - - addSector := func(sn abi.SectorNumber, aboveBalancer bool) action { - return func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise { - var pcres sealiface.PreCommitBatchRes - var pcerr error - done := sync.Mutex{} - done.Lock() - - si := pipeline.SectorInfo{ - SectorNumber: sn, - } - - basefee := big.NewInt(9999) - if aboveBalancer { - basefee = big.NewInt(10001) - } - - s.EXPECT().ChainHead(gomock.Any()).Return(makeBFTs(t, basefee, 1), nil).MaxTimes(2) // once in AddPreCommit - - go func() { - defer done.Unlock() - pcres, pcerr = pcb.AddPreCommit(ctx, si, big.Zero(), &minertypes.SectorPreCommitInfo{ - SectorNumber: si.SectorNumber, - SealedCID: fakePieceCid(t), - DealIDs: nil, - Expiration: 0, - }) - }() - - return func(t *testing.T) { - done.Lock() - require.NoError(t, pcerr) - require.Empty(t, pcres.Error) - require.Contains(t, pcres.Sectors, si.SectorNumber) - } - } - } - - addSectors := func(sectors []abi.SectorNumber, aboveBalancer bool) action { - as := make([]action, len(sectors)) - for i, sector := range sectors { - as[i] = addSector(sector, aboveBalancer) - } - return actions(as...) - } - - waitPending := func(n int) action { - return func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise { - require.Eventually(t, func() bool { - p, err := pcb.Pending(ctx) - require.NoError(t, err) - return len(p) == n - }, time.Second*5, 10*time.Millisecond) - - return nil - } - } - - //stm: @CHAIN_STATE_MINER_INFO_001, @CHAIN_STATE_NETWORK_VERSION_001 - expectSend := func(expect []abi.SectorNumber, gasOverLimit bool) action { - return func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise { - s.EXPECT().StateMinerInfo(gomock.Any(), gomock.Any(), gomock.Any()).Return(api.MinerInfo{Owner: t0123, Worker: t0123}, nil) - if gasOverLimit { - s.EXPECT().GasEstimateMessageGas(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, &api.ErrOutOfGas{}) - } else { - s.EXPECT().GasEstimateMessageGas(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&types.Message{GasLimit: 100000}, nil) - } - - if !gasOverLimit { - s.EXPECT().MpoolPushMessage(gomock.Any(), funMatcher(func(i interface{}) bool { - b := i.(*types.Message) - var params miner6.PreCommitSectorBatchParams - require.NoError(t, params.UnmarshalCBOR(bytes.NewReader(b.Params))) - for s, number := range expect { - require.Equal(t, number, params.Sectors[s].SectorNumber) - } - return true - }), gomock.Any()).Return(dummySmsg, nil) - } - return nil - } - } - - expectInitialCalls := func() action { - return func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise { - s.EXPECT().ChainHead(gomock.Any()).Return(makeBFTs(t, big.NewInt(10001), 1), nil) - return nil - } - } - - flush := func(expect []abi.SectorNumber) action { - return func(t *testing.T, s *mocks.MockPreCommitBatcherApi, pcb *pipeline.PreCommitBatcher) promise { - _ = expectInitialCalls()(t, s, pcb) - _ = expectSend(expect, false)(t, s, pcb) - - r, err := pcb.Flush(ctx) - require.NoError(t, err) - require.Len(t, r, 1) - require.Empty(t, r[0].Error) - sort.Slice(r[0].Sectors, func(i, j int) bool { - return r[0].Sectors[i] < r[0].Sectors[j] - }) - require.Equal(t, expect, r[0].Sectors) - - return nil - } - } - - getSectors := func(n int) []abi.SectorNumber { - out := make([]abi.SectorNumber, n) - for i := range out { - out[i] = abi.SectorNumber(i) - } - return out - } - - tcs := map[string]struct { - actions []action - }{ - "addSingle": { - actions: []action{ - addSector(0, true), - waitPending(1), - flush([]abi.SectorNumber{0}), - }, - }, - "addMax": { - actions: []action{ - expectInitialCalls(), - expectSend(getSectors(maxBatch), false), - addSectors(getSectors(maxBatch), true), - }, - }, - "addMax-gasAboveLimit": { - actions: []action{ - expectInitialCalls(), - expectSend(getSectors(maxBatch), true), - expectSend(getSectors(maxBatch)[:maxBatch/2], false), - expectSend(getSectors(maxBatch)[maxBatch/2:], false), - addSectors(getSectors(maxBatch), true), - }, - }, - "addOne-belowBaseFee": { - actions: []action{ - expectSend(getSectors(1), false), - addSectors(getSectors(1), false), - }, - }, - } - - for name, tc := range tcs { - tc := tc - - t.Run(name, func(t *testing.T) { - // create go mock controller here - mockCtrl := gomock.NewController(t) - // when test is done, assert expectations on all mock objects. - defer mockCtrl.Finish() - - // create them mocks - pcapi := mocks.NewMockPreCommitBatcherApi(mockCtrl) - pcapi.EXPECT().StateNetworkVersion(gomock.Any(), gomock.Any()).Return(network.Version20, nil).AnyTimes() - - pcb := pipeline.NewPreCommitBatcher(ctx, t0123, pcapi, as, fc, cfg) - - var promises []promise - - for _, a := range tc.actions { - p := a(t, pcapi, pcb) - if p != nil { - promises = append(promises, p) - } - } - - for _, p := range promises { - p(t) - } - - err := pcb.Stop(ctx) - require.NoError(t, err) - }) - } -} - -type funMatcher func(interface{}) bool - -func (funMatcher) Matches(interface{}) bool { - return true -} - -func (funMatcher) String() string { - return "fun" -} diff --git a/storage/pipeline/precommit_policy.go b/storage/pipeline/precommit_policy.go index 6e234f93094..6df44d40704 100644 --- a/storage/pipeline/precommit_policy.go +++ b/storage/pipeline/precommit_policy.go @@ -9,7 +9,6 @@ import ( "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/network" - "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" @@ -17,7 +16,7 @@ import ( ) type PreCommitPolicy interface { - Expiration(ctx context.Context, ps ...api.SectorPiece) (abi.ChainEpoch, error) + Expiration(ctx context.Context, ps ...SafeSectorPiece) (abi.ChainEpoch, error) } type Chain interface { @@ -60,7 +59,7 @@ func NewBasicPreCommitPolicy(api Chain, cfgGetter dtypes.GetSealingConfigFunc, p // Expiration produces the pre-commit sector expiration epoch for an encoded // replica containing the provided enumeration of pieces and deals. -func (p *BasicPreCommitPolicy) Expiration(ctx context.Context, ps ...api.SectorPiece) (abi.ChainEpoch, error) { +func (p *BasicPreCommitPolicy) Expiration(ctx context.Context, ps ...SafeSectorPiece) (abi.ChainEpoch, error) { ts, err := p.api.ChainHead(ctx) if err != nil { return 0, err @@ -69,17 +68,22 @@ func (p *BasicPreCommitPolicy) Expiration(ctx context.Context, ps ...api.SectorP var end *abi.ChainEpoch for _, p := range ps { - if p.DealInfo == nil { + if !p.HasDealInfo() { continue } - if p.DealInfo.DealSchedule.EndEpoch < ts.Height() { + endEpoch, err := p.EndEpoch() + if err != nil { + return 0, xerrors.Errorf("failed to get end epoch: %w", err) + } + + if endEpoch < ts.Height() { log.Warnf("piece schedule %+v ended before current epoch %d", p, ts.Height()) continue } - if end == nil || *end < p.DealInfo.DealSchedule.EndEpoch { - tmp := p.DealInfo.DealSchedule.EndEpoch + if end == nil || *end < endEpoch { + tmp := endEpoch end = &tmp } } diff --git a/storage/pipeline/precommit_policy_test.go b/storage/pipeline/precommit_policy_test.go index 7865560dec1..ec2a61ff2d4 100644 --- a/storage/pipeline/precommit_policy_test.go +++ b/storage/pipeline/precommit_policy_test.go @@ -11,6 +11,8 @@ import ( commcid "github.com/filecoin-project/go-fil-commcid" "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/api" @@ -20,6 +22,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/modules/dtypes" pipeline "github.com/filecoin-project/lotus/storage/pipeline" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" ) @@ -47,6 +50,39 @@ func (f *fakeChain) StateNetworkVersion(ctx context.Context, tsk types.TipSetKey return build.TestNetworkVersion, nil } +func makeBFTs(t *testing.T, basefee abi.TokenAmount, h abi.ChainEpoch) *types.TipSet { + dummyCid, _ := cid.Parse("bafkqaaa") + + var ts, err = types.NewTipSet([]*types.BlockHeader{ + { + Height: h, + Miner: builtin.SystemActorAddr, + + Parents: []cid.Cid{}, + + Ticket: &types.Ticket{VRFProof: []byte{byte(h % 2)}}, + + ParentStateRoot: dummyCid, + Messages: dummyCid, + ParentMessageReceipts: dummyCid, + + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, + + ParentBaseFee: basefee, + }, + }) + if t != nil { + require.NoError(t, err) + } + + return ts +} + +func makeTs(t *testing.T, h abi.ChainEpoch) *types.TipSet { + return makeBFTs(t, big.NewInt(0), h) +} + func (f *fakeChain) ChainHead(ctx context.Context) (*types.TipSet, error) { return makeTs(nil, f.h), nil } @@ -58,6 +94,10 @@ func fakePieceCid(t *testing.T) cid.Cid { return fakePieceCid } +func cidPtr(c cid.Cid) *cid.Cid { + return &c +} + func TestBasicPolicyEmptySector(t *testing.T) { cfg := fakeConfigGetter(nil) h := abi.ChainEpoch(55) @@ -97,33 +137,35 @@ func TestBasicPolicyMostConstrictiveSchedule(t *testing.T) { h: abi.ChainEpoch(55), }, cfg, 2) longestDealEpochEnd := abi.ChainEpoch(547300) - pieces := []api.SectorPiece{ - { + pieces := []pipeline.SafeSectorPiece{ + pipeline.SafePiece(api.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(1024), PieceCID: fakePieceCid(t), }, - DealInfo: &api.PieceDealInfo{ - DealID: abi.DealID(42), - DealSchedule: api.DealSchedule{ + DealInfo: &piece.PieceDealInfo{ + PublishCid: cidPtr(fakePieceCid(t)), // pretend this is a valid builtin-market deal + DealID: abi.DealID(42), + DealSchedule: piece.DealSchedule{ StartEpoch: abi.ChainEpoch(70), EndEpoch: abi.ChainEpoch(547275), }, }, - }, - { + }), + pipeline.SafePiece(api.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(1024), PieceCID: fakePieceCid(t), }, - DealInfo: &api.PieceDealInfo{ - DealID: abi.DealID(43), - DealSchedule: api.DealSchedule{ + DealInfo: &piece.PieceDealInfo{ + PublishCid: cidPtr(fakePieceCid(t)), // pretend this is a valid builtin-market deal + DealID: abi.DealID(43), + DealSchedule: piece.DealSchedule{ StartEpoch: abi.ChainEpoch(80), EndEpoch: longestDealEpochEnd, }, }, - }, + }), } exp, err := policy.Expiration(context.Background(), pieces...) @@ -138,20 +180,21 @@ func TestBasicPolicyIgnoresExistingScheduleIfExpired(t *testing.T) { h: abi.ChainEpoch(55), }, cfg, 0) - pieces := []api.SectorPiece{ - { + pieces := []pipeline.SafeSectorPiece{ + pipeline.SafePiece(api.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(1024), PieceCID: fakePieceCid(t), }, - DealInfo: &api.PieceDealInfo{ - DealID: abi.DealID(44), - DealSchedule: api.DealSchedule{ + DealInfo: &piece.PieceDealInfo{ + PublishCid: cidPtr(fakePieceCid(t)), // pretend this is a valid builtin-market deal + DealID: abi.DealID(44), + DealSchedule: piece.DealSchedule{ StartEpoch: abi.ChainEpoch(1), EndEpoch: abi.ChainEpoch(10), }, }, - }, + }), } exp, err := pcp.Expiration(context.Background(), pieces...) @@ -170,27 +213,28 @@ func TestMissingDealIsIgnored(t *testing.T) { h: abi.ChainEpoch(55), }, cfg, 0) - pieces := []api.SectorPiece{ - { + pieces := []pipeline.SafeSectorPiece{ + pipeline.SafePiece(api.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(1024), PieceCID: fakePieceCid(t), }, - DealInfo: &api.PieceDealInfo{ - DealID: abi.DealID(44), - DealSchedule: api.DealSchedule{ + DealInfo: &piece.PieceDealInfo{ + PublishCid: cidPtr(fakePieceCid(t)), // pretend this is a valid builtin-market deal + DealID: abi.DealID(44), + DealSchedule: piece.DealSchedule{ StartEpoch: abi.ChainEpoch(1), EndEpoch: abi.ChainEpoch(547300), }, }, - }, - { + }), + pipeline.SafePiece(api.SectorPiece{ Piece: abi.PieceInfo{ Size: abi.PaddedPieceSize(1024), PieceCID: fakePieceCid(t), }, DealInfo: nil, - }, + }), } exp, err := policy.Expiration(context.Background(), pieces...) diff --git a/storage/pipeline/receive.go b/storage/pipeline/receive.go index 8427eba54f5..231afbc39c2 100644 --- a/storage/pipeline/receive.go +++ b/storage/pipeline/receive.go @@ -86,6 +86,11 @@ func (m *Sealing) checkSectorMeta(ctx context.Context, meta api.RemoteSectorMeta return SectorInfo{}, xerrors.Errorf("getting chain head: %w", err) } + nv, err := m.Api.StateNetworkVersion(ctx, ts.Key()) + if err != nil { + return SectorInfo{}, xerrors.Errorf("getting network version: %w", err) + } + var info SectorInfo var validatePoRep bool @@ -217,9 +222,24 @@ func (m *Sealing) checkSectorMeta(ctx context.Context, meta api.RemoteSectorMeta info.State = ReceiveSector info.SectorNumber = meta.Sector.Number - info.Pieces = meta.Pieces + info.Pieces = make([]SafeSectorPiece, len(meta.Pieces)) info.SectorType = meta.Type + for i, piece := range meta.Pieces { + info.Pieces[i] = SafeSectorPiece{ + real: piece, + } + + if !info.Pieces[i].HasDealInfo() { + continue // cc + } + + err := info.Pieces[i].DealInfo().Valid(nv) + if err != nil { + return SectorInfo{}, xerrors.Errorf("piece %d deal info invalid: %w", i, err) + } + } + if meta.RemoteSealingDoneEndpoint != "" { // validate the url if _, err := url.Parse(meta.RemoteSealingDoneEndpoint); err != nil { @@ -229,7 +249,7 @@ func (m *Sealing) checkSectorMeta(ctx context.Context, meta api.RemoteSectorMeta info.RemoteSealingDoneEndpoint = meta.RemoteSealingDoneEndpoint } - if err := checkPieces(ctx, m.maddr, meta.Sector.Number, meta.Pieces, m.Api, false); err != nil { + if err := checkPieces(ctx, m.maddr, meta.Sector.Number, info.Pieces, m.Api, false); err != nil { return SectorInfo{}, xerrors.Errorf("checking pieces: %w", err) } diff --git a/storage/pipeline/sealiface/config.go b/storage/pipeline/sealiface/config.go index e41b143ec20..2ac6e0d588f 100644 --- a/storage/pipeline/sealiface/config.go +++ b/storage/pipeline/sealiface/config.go @@ -62,4 +62,9 @@ type Config struct { TerminateBatchWait time.Duration UseSyntheticPoRep bool + + RequireActivationSuccess bool + RequireActivationSuccessUpdate bool + RequireNotificationSuccess bool + RequireNotificationSuccessUpdate bool } diff --git a/storage/pipeline/sealing.go b/storage/pipeline/sealing.go index 936bd8b39e1..75791fae8c0 100644 --- a/storage/pipeline/sealing.go +++ b/storage/pipeline/sealing.go @@ -5,6 +5,7 @@ import ( "sync" "time" + blocks "github.com/ipfs/go-block-format" "github.com/ipfs/go-cid" "github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore/namespace" @@ -25,12 +26,15 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" "github.com/filecoin-project/lotus/chain/events" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/journal" + "github.com/filecoin-project/lotus/lib/result" "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/storage/ctladdr" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" "github.com/filecoin-project/lotus/storage/sealer" "github.com/filecoin-project/lotus/storage/sealer/storiface" @@ -49,7 +53,6 @@ type SealingAPI interface { StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*api.MsgLookup, error) StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorPreCommitOnChainInfo, error) - StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) StateSectorGetInfo(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error) StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*lminer.SectorLocation, error) StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) @@ -72,6 +75,13 @@ type SealingAPI interface { ChainReadObj(context.Context, cid.Cid) ([]byte, error) StateMinerAllocated(context.Context, address.Address, types.TipSetKey) (*bitfield.BitField, error) StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) + StateGetAllocationIdForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (verifreg.AllocationId, error) + StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) + + StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) + StateVMCirculatingSupplyInternal(ctx context.Context, tsk types.TipSetKey) (api.CirculatingSupply, error) + ChainHasObj(ctx context.Context, c cid.Cid) (bool, error) + ChainPutObj(ctx context.Context, block blocks.Block) error // Address selector WalletBalance(context.Context, address.Address) (types.BigInt, error) @@ -110,8 +120,8 @@ type Sealing struct { inputLk sync.Mutex openSectors map[abi.SectorID]*openSector sectorTimers map[abi.SectorID]*time.Timer - pendingPieces map[cid.Cid]*pendingPiece - assignedPieces map[abi.SectorID][]cid.Cid + pendingPieces map[piece.PieceKey]*pendingPiece + assignedPieces map[abi.SectorID][]piece.PieceKey nextDealSector *abi.SectorNumber // used to prevent a race where we could create a new sector more than once available map[abi.SectorID]struct{} @@ -139,16 +149,16 @@ type openSector struct { number abi.SectorNumber ccUpdate bool - maybeAccept func(cid.Cid) error // called with inputLk + maybeAccept func(key piece.PieceKey) error // called with inputLk } func (o *openSector) checkDealAssignable(piece *pendingPiece, expF expFn) (bool, error) { log := log.With( "sector", o.number, - "deal", piece.deal.DealID, - "dealEnd", piece.deal.DealProposal.EndEpoch, - "dealStart", piece.deal.DealProposal.StartEpoch, + "piece", piece.deal.String(), + "dealEnd", result.Wrap(piece.deal.EndEpoch()), + "dealStart", result.Wrap(piece.deal.StartEpoch()), "dealClaimEnd", piece.claimTerms.claimTermEnd, "lastAssignedDealEnd", o.lastDealEnd, @@ -181,7 +191,12 @@ func (o *openSector) checkDealAssignable(piece *pendingPiece, expF expFn) (bool, return false, nil } - if sectorExpiration < piece.deal.DealProposal.EndEpoch { + endEpoch, err := piece.deal.EndEpoch() + if err != nil { + return false, xerrors.Errorf("failed to get end epoch: %w", err) + } + + if sectorExpiration < endEpoch { log.Debugw("deal not assignable to sector", "reason", "sector expiration less than deal expiration") return false, nil } @@ -205,7 +220,7 @@ type pendingPiece struct { resp *pieceAcceptResp size abi.UnpaddedPieceSize - deal api.PieceDealInfo + deal UniversalPieceInfo claimTerms pieceClaimBounds @@ -215,10 +230,10 @@ type pendingPiece struct { accepted func(abi.SectorNumber, abi.UnpaddedPieceSize, error) } -func New(mctx context.Context, api SealingAPI, fc config.MinerFeeConfig, events Events, maddr address.Address, ds datastore.Batching, sealer sealer.SectorManager, verif storiface.Verifier, prov storiface.Prover, pcp PreCommitPolicy, gc dtypes.GetSealingConfigFunc, journal journal.Journal, addrSel AddressSelector) *Sealing { +func New(mctx context.Context, sapi SealingAPI, fc config.MinerFeeConfig, events Events, maddr address.Address, ds datastore.Batching, sealer sealer.SectorManager, verif storiface.Verifier, prov storiface.Prover, pcp PreCommitPolicy, gc dtypes.GetSealingConfigFunc, journal journal.Journal, addrSel AddressSelector) *Sealing { s := &Sealing{ - Api: api, - DealInfo: &CurrentDealInfoManager{api}, + Api: sapi, + DealInfo: &CurrentDealInfoManager{sapi}, ds: ds, @@ -232,8 +247,8 @@ func New(mctx context.Context, api SealingAPI, fc config.MinerFeeConfig, events openSectors: map[abi.SectorID]*openSector{}, sectorTimers: map[abi.SectorID]*time.Timer{}, - pendingPieces: map[cid.Cid]*pendingPiece{}, - assignedPieces: map[abi.SectorID][]cid.Cid{}, + pendingPieces: map[piece.PieceKey]*pendingPiece{}, + assignedPieces: map[abi.SectorID][]piece.PieceKey{}, available: map[abi.SectorID]struct{}{}, @@ -242,9 +257,9 @@ func New(mctx context.Context, api SealingAPI, fc config.MinerFeeConfig, events addrSel: addrSel, - terminator: NewTerminationBatcher(mctx, maddr, api, addrSel, fc, gc), - precommiter: NewPreCommitBatcher(mctx, maddr, api, addrSel, fc, gc), - commiter: NewCommitBatcher(mctx, maddr, api, addrSel, fc, gc, prov), + terminator: NewTerminationBatcher(mctx, maddr, sapi, addrSel, fc, gc), + precommiter: NewPreCommitBatcher(mctx, maddr, sapi, addrSel, fc, gc), + commiter: NewCommitBatcher(mctx, maddr, sapi, addrSel, fc, gc, prov), getConfig: gc, diff --git a/storage/pipeline/states_failed.go b/storage/pipeline/states_failed.go index 3323c4c9bc4..3e4ea4dde1f 100644 --- a/storage/pipeline/states_failed.go +++ b/storage/pipeline/states_failed.go @@ -235,7 +235,7 @@ func (m *Sealing) handleSubmitReplicaUpdateFailed(ctx statemachine.Context, sect return nil } - if err := checkReplicaUpdate(ctx.Context(), m.maddr, sector, ts.Key(), m.Api); err != nil { + if err := checkReplicaUpdate(ctx.Context(), m.maddr, sector, m.Api); err != nil { switch err.(type) { case *ErrApi: log.Errorf("handleSubmitReplicaUpdateFailed: api error, not proceeding: %+v", err) @@ -265,7 +265,7 @@ func (m *Sealing) handleSubmitReplicaUpdateFailed(ctx statemachine.Context, sect } if !active { err := xerrors.Errorf("sector marked for upgrade %d no longer active, aborting upgrade", sector.SectorNumber) - log.Errorf(err.Error()) + log.Errorf("%s", err) return ctx.Send(SectorAbortUpgrade{err}) } @@ -466,7 +466,7 @@ func (m *Sealing) handleAbortUpgrade(ctx statemachine.Context, sector SectorInfo // failWith is a mutator or global mutator func (m *Sealing) handleRecoverDealIDsOrFailWith(ctx statemachine.Context, sector SectorInfo, failWith interface{}) error { - toFix, paddingPieces, err := recoveryPiecesToFix(ctx.Context(), m.Api, sector, m.maddr) + toFix, nonBuiltinMarketPieces, err := recoveryPiecesToFix(ctx.Context(), m.Api, sector, m.maddr) if err != nil { return err } @@ -478,33 +478,35 @@ func (m *Sealing) handleRecoverDealIDsOrFailWith(ctx statemachine.Context, secto updates := map[int]abi.DealID{} for _, i := range toFix { + // note: all toFix pieces are builtin-market pieces + p := sector.Pieces[i] - if p.DealInfo.PublishCid == nil { + if p.Impl().PublishCid == nil { // TODO: check if we are in an early enough state try to remove this piece - log.Errorf("can't fix sector deals: piece %d (of %d) of sector %d has nil DealInfo.PublishCid (refers to deal %d)", i, len(sector.Pieces), sector.SectorNumber, p.DealInfo.DealID) + log.Errorf("can't fix sector deals: piece %d (of %d) of sector %d has nil DealInfo.PublishCid (refers to deal %d)", i, len(sector.Pieces), sector.SectorNumber, p.Impl().DealID) // Not much to do here (and this can only happen for old spacerace sectors) return ctx.Send(failWith) } var dp *market.DealProposal - if p.DealInfo.DealProposal != nil { - mdp := *p.DealInfo.DealProposal + if p.Impl().DealProposal != nil { + mdp := *p.Impl().DealProposal dp = &mdp } - res, err := m.DealInfo.GetCurrentDealInfo(ctx.Context(), ts.Key(), dp, *p.DealInfo.PublishCid) + res, err := m.DealInfo.GetCurrentDealInfo(ctx.Context(), ts.Key(), dp, *p.Impl().PublishCid) if err != nil { failed[i] = xerrors.Errorf("getting current deal info for piece %d: %w", i, err) continue } if res.MarketDeal == nil { - failed[i] = xerrors.Errorf("nil market deal (%d,%d,%d,%s)", i, sector.SectorNumber, p.DealInfo.DealID, p.Piece.PieceCID) + failed[i] = xerrors.Errorf("nil market deal (%d,%d,%d,%s)", i, sector.SectorNumber, p.Impl().DealID, p.Impl().DealProposal.PieceCID) continue } - if res.MarketDeal.Proposal.PieceCID != p.Piece.PieceCID { - failed[i] = xerrors.Errorf("recovered piece (%d) deal in sector %d (dealid %d) has different PieceCID %s != %s", i, sector.SectorNumber, p.DealInfo.DealID, p.Piece.PieceCID, res.MarketDeal.Proposal.PieceCID) + if res.MarketDeal.Proposal.PieceCID != p.PieceCID() { + failed[i] = xerrors.Errorf("recovered piece (%d) deal in sector %d (dealid %d) has different PieceCID %s != %s", i, sector.SectorNumber, p.Impl().DealID, p.Impl().DealProposal.PieceCID, res.MarketDeal.Proposal.PieceCID) continue } @@ -517,7 +519,7 @@ func (m *Sealing) handleRecoverDealIDsOrFailWith(ctx statemachine.Context, secto merr = multierror.Append(merr, e) } - if len(failed)+paddingPieces == len(sector.Pieces) { + if len(failed)+nonBuiltinMarketPieces == len(sector.Pieces) { log.Errorf("removing sector %d: all deals expired or unrecoverable: %+v", sector.SectorNumber, merr) return ctx.Send(failWith) } @@ -542,6 +544,7 @@ func (m *Sealing) handleSnapDealsRecoverDealIDs(ctx statemachine.Context, sector return m.handleRecoverDealIDsOrFailWith(ctx, sector, SectorAbortUpgrade{xerrors.New("failed recovering deal ids")}) } +// recoveryPiecesToFix returns the list of sector piece indexes to fix, and the number of non-builtin-market pieces func recoveryPiecesToFix(ctx context.Context, api SealingAPI, sector SectorInfo, maddr address.Address) ([]int, int, error) { ts, err := api.ChainHead(ctx) if err != nil { @@ -549,51 +552,68 @@ func recoveryPiecesToFix(ctx context.Context, api SealingAPI, sector SectorInfo, } var toFix []int - paddingPieces := 0 + nonBuiltinMarketPieces := 0 for i, p := range sector.Pieces { - // if no deal is associated with the piece, ensure that we added it as - // filler (i.e. ensure that it has a zero PieceCID) - if p.DealInfo == nil { - exp := zerocomm.ZeroPieceCommitment(p.Piece.Size.Unpadded()) - if !p.Piece.PieceCID.Equals(exp) { - return nil, 0, xerrors.Errorf("sector %d piece %d had non-zero PieceCID %+v", sector.SectorNumber, i, p.Piece.PieceCID) - } - paddingPieces++ - continue - } + i, p := i, p + + err := p.handleDealInfo(handleDealInfoParams{ + FillerHandler: func(info UniversalPieceInfo) error { + // if no deal is associated with the piece, ensure that we added it as + // filler (i.e. ensure that it has a zero PieceCID) + exp := zerocomm.ZeroPieceCommitment(p.Piece().Size.Unpadded()) + if !info.PieceCID().Equals(exp) { + return xerrors.Errorf("sector %d piece %d had non-zero PieceCID %+v", sector.SectorNumber, i, p.Piece().PieceCID) + } + nonBuiltinMarketPieces++ + return nil + }, + BuiltinMarketHandler: func(info UniversalPieceInfo) error { + deal, err := api.StateMarketStorageDeal(ctx, p.DealInfo().Impl().DealID, ts.Key()) + if err != nil { + log.Warnf("getting deal %d for piece %d: %+v", p.DealInfo().Impl().DealID, i, err) + toFix = append(toFix, i) + return nil + } - deal, err := api.StateMarketStorageDeal(ctx, p.DealInfo.DealID, ts.Key()) - if err != nil { - log.Warnf("getting deal %d for piece %d: %+v", p.DealInfo.DealID, i, err) - toFix = append(toFix, i) - continue - } + if deal.Proposal.Provider != maddr { + log.Warnf("piece %d (of %d) of sector %d refers deal %d with wrong provider: %s != %s", i, len(sector.Pieces), sector.SectorNumber, p.Impl().DealID, deal.Proposal.Provider, maddr) + toFix = append(toFix, i) + return nil + } - if deal.Proposal.Provider != maddr { - log.Warnf("piece %d (of %d) of sector %d refers deal %d with wrong provider: %s != %s", i, len(sector.Pieces), sector.SectorNumber, p.DealInfo.DealID, deal.Proposal.Provider, maddr) - toFix = append(toFix, i) - continue - } + if deal.Proposal.PieceCID != p.Piece().PieceCID { + log.Warnf("piece %d (of %d) of sector %d refers deal %d with wrong PieceCID: %s != %s", i, len(sector.Pieces), sector.SectorNumber, p.Impl().DealID, p.Piece().PieceCID, deal.Proposal.PieceCID) + toFix = append(toFix, i) + return nil + } - if deal.Proposal.PieceCID != p.Piece.PieceCID { - log.Warnf("piece %d (of %d) of sector %d refers deal %d with wrong PieceCID: %s != %s", i, len(sector.Pieces), sector.SectorNumber, p.DealInfo.DealID, p.Piece.PieceCID, deal.Proposal.PieceCID) - toFix = append(toFix, i) - continue - } + if p.Piece().Size != deal.Proposal.PieceSize { + log.Warnf("piece %d (of %d) of sector %d refers deal %d with different size: %d != %d", i, len(sector.Pieces), sector.SectorNumber, p.Impl().DealID, p.Piece().Size, deal.Proposal.PieceSize) + toFix = append(toFix, i) + return nil + } - if p.Piece.Size != deal.Proposal.PieceSize { - log.Warnf("piece %d (of %d) of sector %d refers deal %d with different size: %d != %d", i, len(sector.Pieces), sector.SectorNumber, p.DealInfo.DealID, p.Piece.Size, deal.Proposal.PieceSize) - toFix = append(toFix, i) - continue - } + if ts.Height() >= deal.Proposal.StartEpoch { + // TODO: check if we are in an early enough state (before precommit), try to remove the offending pieces + // (tricky as we have to 'defragment' the sector while doing that, and update piece references for retrieval) + return xerrors.Errorf("can't fix sector deals: piece %d (of %d) of sector %d refers expired deal %d - should start at %d, head %d", i, len(sector.Pieces), sector.SectorNumber, p.Impl().DealID, deal.Proposal.StartEpoch, ts.Height()) + } + + return nil + }, + DDOHandler: func(info UniversalPieceInfo) error { + // DDO pieces have no repair strategy - if ts.Height() >= deal.Proposal.StartEpoch { - // TODO: check if we are in an early enough state (before precommit), try to remove the offending pieces - // (tricky as we have to 'defragment' the sector while doing that, and update piece references for retrieval) - return nil, 0, xerrors.Errorf("can't fix sector deals: piece %d (of %d) of sector %d refers expired deal %d - should start at %d, head %d", i, len(sector.Pieces), sector.SectorNumber, p.DealInfo.DealID, deal.Proposal.StartEpoch, ts.Height()) + nonBuiltinMarketPieces++ + return nil + }, + }) + + if err != nil { + return nil, 0, xerrors.Errorf("checking piece %d: %w", i, err) } } - return toFix, paddingPieces, nil + return toFix, nonBuiltinMarketPieces, nil } diff --git a/storage/pipeline/states_failed_test.go b/storage/pipeline/states_failed_test.go index f6846c8f5f1..bc658d59ba0 100644 --- a/storage/pipeline/states_failed_test.go +++ b/storage/pipeline/states_failed_test.go @@ -23,6 +23,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" pipeline "github.com/filecoin-project/lotus/storage/pipeline" "github.com/filecoin-project/lotus/storage/pipeline/mocks" + "github.com/filecoin-project/lotus/storage/pipeline/piece" ) func TestStateRecoverDealIDs(t *testing.T) { @@ -76,16 +77,16 @@ func TestStateRecoverDealIDs(t *testing.T) { // TODO sctx should satisfy an interface so it can be useable for mocking. This will fail because we are passing in an empty context now to get this to build. // https://github.com/filecoin-project/lotus/issues/7867 err := fakeSealing.HandleRecoverDealIDs(statemachine.Context{}, pipeline.SectorInfo{ - Pieces: []api2.SectorPiece{ - { - DealInfo: &api2.PieceDealInfo{ + Pieces: []pipeline.SafeSectorPiece{ + pipeline.SafePiece(api2.SectorPiece{ + DealInfo: &piece.PieceDealInfo{ DealID: dealId, PublishCid: &pc, }, Piece: abi.PieceInfo{ PieceCID: idCid("oldPieceCID"), }, - }, + }), }, }) require.NoError(t, err) diff --git a/storage/pipeline/states_replica_update.go b/storage/pipeline/states_replica_update.go index 6717f49a6a6..380078e75c0 100644 --- a/storage/pipeline/states_replica_update.go +++ b/storage/pipeline/states_replica_update.go @@ -22,7 +22,7 @@ import ( func (m *Sealing) handleReplicaUpdate(ctx statemachine.Context, sector SectorInfo) error { // if the sector ended up not having any deals, abort the upgrade - if !sector.hasDeals() { + if !sector.hasData() { return ctx.Send(SectorAbortUpgrade{xerrors.New("sector had no deals")}) } @@ -58,7 +58,7 @@ func (m *Sealing) handleProveReplicaUpdate(ctx statemachine.Context, sector Sect } if !active { err := xerrors.Errorf("sector marked for upgrade %d no longer active, aborting upgrade", sector.SectorNumber) - log.Errorf(err.Error()) + log.Errorf("%s", err) return ctx.Send(SectorAbortUpgrade{err}) } @@ -82,14 +82,13 @@ func (m *Sealing) handleProveReplicaUpdate(ctx statemachine.Context, sector Sect } func (m *Sealing) handleSubmitReplicaUpdate(ctx statemachine.Context, sector SectorInfo) error { - ts, err := m.Api.ChainHead(ctx.Context()) if err != nil { log.Errorf("handleSubmitReplicaUpdate: api error, not proceeding: %+v", err) return nil } - if err := checkReplicaUpdate(ctx.Context(), m.maddr, sector, ts.Key(), m.Api); err != nil { + if err := checkReplicaUpdate(ctx.Context(), m.maddr, sector, m.Api); err != nil { return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } @@ -114,24 +113,8 @@ func (m *Sealing) handleSubmitReplicaUpdate(ctx statemachine.Context, sector Sec log.Errorf("failed to get update proof type from seal proof: %+v", err) return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } - enc := new(bytes.Buffer) - params := &miner.ProveReplicaUpdatesParams{ - Updates: []miner.ReplicaUpdate{ - { - SectorID: sector.SectorNumber, - Deadline: sl.Deadline, - Partition: sl.Partition, - NewSealedSectorCID: *sector.UpdateSealed, - Deals: sector.dealIDs(), - UpdateProofType: updateProof, - ReplicaProof: sector.ReplicaUpdateProof, - }, - }, - } - if err := params.MarshalCBOR(enc); err != nil { - log.Errorf("failed to serialize update replica params: %w", err) - return ctx.Send(SectorSubmitReplicaUpdateFailed{}) - } + + // figure out from address and collateral cfg, err := m.getConfig() if err != nil { @@ -140,34 +123,24 @@ func (m *Sealing) handleSubmitReplicaUpdate(ctx statemachine.Context, sector Sec onChainInfo, err := m.Api.StateSectorGetInfo(ctx.Context(), m.maddr, sector.SectorNumber, ts.Key()) if err != nil { - log.Errorf("handleSubmitReplicaUpdate: api error, not proceeding: %+v", err) - return nil + log.Errorf("failed to get sector info: %+v", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } if onChainInfo == nil { - return xerrors.Errorf("sector not found %d", sector.SectorNumber) + log.Errorw("on chain info was nil", "sector", sector.SectorNumber) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } - sp, err := m.currentSealProof(ctx.Context()) + weightUpdate, err := m.sectorWeight(ctx.Context(), sector, onChainInfo.Expiration) if err != nil { - log.Errorf("sealer failed to return current seal proof not proceeding: %+v", err) - return nil - } - virtualPCI := miner.SectorPreCommitInfo{ - SealProof: sp, - SectorNumber: sector.SectorNumber, - SealedCID: *sector.UpdateSealed, - //SealRandEpoch: 0, - DealIDs: sector.dealIDs(), - Expiration: onChainInfo.Expiration, - //ReplaceCapacity: false, - //ReplaceSectorDeadline: 0, - //ReplaceSectorPartition: 0, - //ReplaceSectorNumber: 0, + log.Errorf("failed to get sector weight: %+v", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } - collateral, err := m.Api.StateMinerInitialPledgeCollateral(ctx.Context(), m.maddr, virtualPCI, ts.Key()) + collateral, err := m.pledgeForPower(ctx.Context(), weightUpdate) if err != nil { - return xerrors.Errorf("getting initial pledge collateral: %w", err) + log.Errorf("failed to get pledge for power: %+v", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } collateral = big.Sub(collateral, onChainInfo.InitialPledge) @@ -194,13 +167,81 @@ func (m *Sealing) handleSubmitReplicaUpdate(ctx statemachine.Context, sector Sec log.Errorf("no good address to send replica update message from: %+v", err) return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } - mcid, err := sendMsg(ctx.Context(), m.Api, from, m.maddr, builtin.MethodsMiner.ProveReplicaUpdates, collateral, big.Int(m.feeCfg.MaxCommitGasFee), enc.Bytes()) + + // figure out message type + + pams, deals, err := m.processPieces(ctx.Context(), sector) + if err != nil { + log.Errorf("failed to process pieces: %+v", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) + } + + if len(pams) > 0 { + // PRU3 + + params := &miner.ProveReplicaUpdates3Params{ + SectorUpdates: []miner.SectorUpdateManifest{ + { + Sector: sector.SectorNumber, + Deadline: sl.Deadline, + Partition: sl.Partition, + NewSealedCID: *sector.UpdateSealed, + Pieces: pams, + }, + }, + SectorProofs: [][]byte{sector.ReplicaUpdateProof}, + UpdateProofsType: updateProof, + //AggregateProof + //AggregateProofType + RequireActivationSuccess: cfg.RequireActivationSuccessUpdate, + RequireNotificationSuccess: cfg.RequireNotificationSuccessUpdate, + } + + enc := new(bytes.Buffer) + if err := params.MarshalCBOR(enc); err != nil { + log.Errorf("failed to serialize update replica params: %w", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) + } + + mcid, err := sendMsg(ctx.Context(), m.Api, from, m.maddr, builtin.MethodsMiner.ProveReplicaUpdates3, collateral, big.Int(m.feeCfg.MaxCommitGasFee), enc.Bytes()) + if err != nil { + log.Errorf("handleSubmitReplicaUpdate: error sending message: %+v", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) + } + + return ctx.Send(SectorReplicaUpdateSubmitted{Message: mcid}) + } + + // PRU2 + params := &miner.ProveReplicaUpdatesParams2{ + Updates: []miner.ReplicaUpdate2{ + { + SectorID: sector.SectorNumber, + Deadline: sl.Deadline, + Partition: sl.Partition, + NewSealedSectorCID: *sector.UpdateSealed, + NewUnsealedSectorCID: *sector.UpdateUnsealed, + UpdateProofType: updateProof, + ReplicaProof: sector.ReplicaUpdateProof, + Deals: deals, + }, + }, + } + + enc := new(bytes.Buffer) + if err := params.MarshalCBOR(enc); err != nil { + log.Errorf("failed to serialize update replica params: %w", err) + return ctx.Send(SectorSubmitReplicaUpdateFailed{}) + } + + mcid, err := sendMsg(ctx.Context(), m.Api, from, m.maddr, builtin.MethodsMiner.ProveReplicaUpdates2, collateral, big.Int(m.feeCfg.MaxCommitGasFee), enc.Bytes()) if err != nil { log.Errorf("handleSubmitReplicaUpdate: error sending message: %+v", err) return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } return ctx.Send(SectorReplicaUpdateSubmitted{Message: mcid}) + } func (m *Sealing) handleWaitMutable(ctx statemachine.Context, sector SectorInfo) error { diff --git a/storage/pipeline/states_sealing.go b/storage/pipeline/states_sealing.go index 5c91161efb1..aef394789d1 100644 --- a/storage/pipeline/states_sealing.go +++ b/storage/pipeline/states_sealing.go @@ -12,11 +12,16 @@ import ( "github.com/ipfs/go-cid" "golang.org/x/xerrors" + "github.com/filecoin-project/go-address" + cborutil "github.com/filecoin-project/go-cbor-util" "github.com/filecoin-project/go-commp-utils/zerocomm" "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" + miner2 "github.com/filecoin-project/go-state-types/builtin/v13/miner" + verifreg13 "github.com/filecoin-project/go-state-types/builtin/v13/verifreg" + "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" @@ -25,6 +30,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/actors/builtin/market" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" @@ -32,6 +38,8 @@ import ( "github.com/filecoin-project/lotus/storage/sealer/storiface" ) +const MinDDONetworkVersion = network.Version22 + var DealSectorPriority = 1024 var MaxTicketAge = policy.MaxPreCommitRandomnessLookback @@ -59,7 +67,7 @@ func (m *Sealing) handlePacking(ctx statemachine.Context, sector SectorInfo) err m.cleanupAssignedDeals(sector) // if this is a snapdeals sector, but it ended up not having any deals, abort the upgrade - if sector.State == SnapDealsPacking && !sector.hasDeals() { + if sector.State == SnapDealsPacking && !sector.hasData() { return ctx.Send(SectorAbortUpgrade{xerrors.New("sector had no deals")}) } @@ -67,7 +75,7 @@ func (m *Sealing) handlePacking(ctx statemachine.Context, sector SectorInfo) err var allocated abi.UnpaddedPieceSize for _, piece := range sector.Pieces { - allocated += piece.Piece.Size.Unpadded() + allocated += piece.Piece().Size.Unpadded() } ssize, err := sector.SectorType.SectorSize() @@ -417,11 +425,47 @@ func (m *Sealing) preCommitInfo(ctx statemachine.Context, sector SectorInfo) (*m SealedCID: *sector.CommR, SealRandEpoch: sector.TicketEpoch, - DealIDs: sector.dealIDs(), } - if sector.hasDeals() { + if sector.hasData() { + // only CC sectors don't have UnsealedCID params.UnsealedCid = sector.CommD + + // true when the sector has non-builtin-marked data + sectorIsDDO := false + + for _, piece := range sector.Pieces { + err := piece.handleDealInfo(handleDealInfoParams{ + FillerHandler: func(info UniversalPieceInfo) error { + return nil // ignore + }, + BuiltinMarketHandler: func(info UniversalPieceInfo) error { + if sectorIsDDO { + return nil // will be passed later in the Commit message + } + params.DealIDs = append(params.DealIDs, info.Impl().DealID) + return nil + }, + DDOHandler: func(info UniversalPieceInfo) error { + if nv < MinDDONetworkVersion { + return xerrors.Errorf("DDO sectors are not supported on network version %d", nv) + } + + log.Infow("DDO piece in sector", "sector", sector.SectorNumber, "piece", info.String()) + + sectorIsDDO = true + + // DDO sectors don't carry DealIDs, we will pass those + // deals in the Commit message later + params.DealIDs = nil + return nil + }, + }) + + if err != nil { + return nil, big.Zero(), types.EmptyTSK, xerrors.Errorf("handleDealInfo: %w", err) + } + } } collateral, err := m.Api.StateMinerPreCommitDepositForPower(ctx.Context(), m.maddr, *params, ts.Key()) @@ -572,10 +616,6 @@ func (m *Sealing) handleCommitting(ctx statemachine.Context, sector SectorInfo) return xerrors.Errorf("getting config: %w", err) } - log.Info("scheduling seal proof computation...") - - log.Infof("KOMIT %d %x(%d); %x(%d); %v; r:%s; d:%s", sector.SectorNumber, sector.TicketValue, sector.TicketEpoch, sector.SeedValue, sector.SeedEpoch, sector.pieceInfos(), sector.CommR, sector.CommD) - if sector.CommD == nil || sector.CommR == nil { return ctx.Send(SectorCommitFailed{xerrors.Errorf("sector had nil commR or commD")}) } @@ -700,6 +740,8 @@ func (m *Sealing) handleCommitting(ctx statemachine.Context, sector SectorInfo) } func (m *Sealing) handleSubmitCommit(ctx statemachine.Context, sector SectorInfo) error { + // TODO: Deprecate this path, always go through batcher, just respect the AggregateCommits config in there + cfg, err := m.getConfig() if err != nil { return xerrors.Errorf("getting config: %w", err) @@ -783,11 +825,113 @@ func (m *Sealing) handleSubmitCommit(ctx statemachine.Context, sector SectorInfo }) } +// processPieces returns either: +// - a list of piece activation manifests +// - a list of deal IDs, if all non-filler pieces are deal-id pieces +func (m *Sealing) processPieces(ctx context.Context, sector SectorInfo) ([]miner.PieceActivationManifest, []abi.DealID, error) { + pams := make([]miner.PieceActivationManifest, 0, len(sector.Pieces)) + dealIDs := make([]abi.DealID, 0, len(sector.Pieces)) + var hasDDO bool + + for _, piece := range sector.Pieces { + piece := piece + + // first figure out if this is a ddo sector + err := piece.handleDealInfo(handleDealInfoParams{ + FillerHandler: func(info UniversalPieceInfo) error { + // Fillers are implicit (todo review: Are they??) + return nil + }, + BuiltinMarketHandler: func(info UniversalPieceInfo) error { + return nil + }, + DDOHandler: func(info UniversalPieceInfo) error { + hasDDO = true + return nil + }, + }) + if err != nil { + return nil, nil, xerrors.Errorf("handleDealInfo: %w", err) + } + } + for _, piece := range sector.Pieces { + piece := piece + + err := piece.handleDealInfo(handleDealInfoParams{ + FillerHandler: func(info UniversalPieceInfo) error { + // Fillers are implicit (todo review: Are they??) + return nil + }, + BuiltinMarketHandler: func(info UniversalPieceInfo) error { + if hasDDO { + alloc, err := m.Api.StateGetAllocationIdForPendingDeal(ctx, info.Impl().DealID, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting allocation for deal %d: %w", info.Impl().DealID, err) + } + clid, err := m.Api.StateLookupID(ctx, info.Impl().DealProposal.Client, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting client address for deal %d: %w", info.Impl().DealID, err) + } + + clientId, err := address.IDFromAddress(clid) + if err != nil { + return xerrors.Errorf("getting client address for deal %d: %w", info.Impl().DealID, err) + } + + var vac *miner2.VerifiedAllocationKey + if alloc != verifreg.NoAllocationID { + vac = &miner2.VerifiedAllocationKey{ + Client: abi.ActorID(clientId), + ID: verifreg13.AllocationId(alloc), + } + } + + payload, err := cborutil.Dump(info.Impl().DealID) + if err != nil { + return xerrors.Errorf("serializing deal id: %w", err) + } + + pams = append(pams, miner.PieceActivationManifest{ + CID: piece.Piece().PieceCID, + Size: piece.Piece().Size, + VerifiedAllocationKey: vac, + Notify: []miner2.DataActivationNotification{ + { + Address: market.Address, + Payload: payload, + }, + }, + }) + + return nil + } + + dealIDs = append(dealIDs, info.Impl().DealID) + return nil + }, + DDOHandler: func(info UniversalPieceInfo) error { + pams = append(pams, *piece.Impl().PieceActivationManifest) + return nil + }, + }) + if err != nil { + return nil, nil, xerrors.Errorf("handleDealInfo: %w", err) + } + } + + return pams, dealIDs, nil +} + func (m *Sealing) handleSubmitCommitAggregate(ctx statemachine.Context, sector SectorInfo) error { if sector.CommD == nil || sector.CommR == nil { return ctx.Send(SectorCommitFailed{xerrors.Errorf("sector had nil commR or commD")}) } + pams, dealIDs, err := m.processPieces(ctx.Context(), sector) + if err != nil { + return err + } + res, err := m.commiter.AddCommit(ctx.Context(), sector, AggregateInput{ Info: proof.AggregateSealVerifyInfo{ Number: sector.SectorNumber, @@ -796,8 +940,14 @@ func (m *Sealing) handleSubmitCommitAggregate(ctx statemachine.Context, sector S SealedCID: *sector.CommR, UnsealedCID: *sector.CommD, }, - Proof: sector.Proof, // todo: this correct?? + Proof: sector.Proof, Spt: sector.SectorType, + + ActivationManifest: miner2.SectorActivationManifest{ + SectorNumber: sector.SectorNumber, + Pieces: pams, + }, + DealIDPrecommit: len(dealIDs) > 0, }) if err != nil || res.Error != "" { @@ -875,7 +1025,7 @@ func (m *Sealing) handleFinalizeSector(ctx statemachine.Context, sector SectorIn return ctx.Send(SectorFinalizeFailed{xerrors.Errorf("finalize sector: %w", err)}) } - if cfg.MakeCCSectorsAvailable && !sector.hasDeals() { + if cfg.MakeCCSectorsAvailable && !sector.hasData() { return ctx.Send(SectorFinalizedAvailable{}) } return ctx.Send(SectorFinalized{}) diff --git a/storage/pipeline/types.go b/storage/pipeline/types.go index e752eb2b93b..48ae60546be 100644 --- a/storage/pipeline/types.go +++ b/storage/pipeline/types.go @@ -2,14 +2,20 @@ package sealing import ( "context" + "encoding/json" + "io" "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/actors/builtin/verifreg" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/sealer" "github.com/filecoin-project/lotus/storage/sealer/storiface" ) @@ -41,6 +47,20 @@ const ( RetCommitFailed = ReturnState(CommitFailed) ) +type UniversalPieceInfo interface { + Impl() piece.PieceDealInfo + String() string + Key() piece.PieceKey + + Valid(nv network.Version) error + StartEpoch() (abi.ChainEpoch, error) + EndEpoch() (abi.ChainEpoch, error) + PieceCID() cid.Cid + KeepUnsealedRequested() bool + + GetAllocation(ctx context.Context, aapi piece.AllocationAPI, tsk types.TipSetKey) (*verifreg.Allocation, error) +} + type SectorInfo struct { State SectorState SectorNumber abi.SectorNumber @@ -49,7 +69,7 @@ type SectorInfo struct { // Packing CreationTime int64 // unix seconds - Pieces []api.SectorPiece + Pieces []SafeSectorPiece // PreCommit1 TicketValue abi.SealRandomness @@ -79,7 +99,7 @@ type SectorInfo struct { // CCUpdate CCUpdate bool - CCPieces []api.SectorPiece + CCPieces []SafeSectorPiece UpdateSealed *cid.Cid UpdateUnsealed *cid.Cid ReplicaUpdateProof storiface.ReplicaUpdateProof @@ -113,18 +133,19 @@ type SectorInfo struct { func (t *SectorInfo) pieceInfos() []abi.PieceInfo { out := make([]abi.PieceInfo, len(t.Pieces)) for i, p := range t.Pieces { - out[i] = p.Piece + out[i] = p.Piece() } return out } -func (t *SectorInfo) dealIDs() []abi.DealID { - out := make([]abi.DealID, 0, len(t.Pieces)) - for _, p := range t.Pieces { - if p.DealInfo == nil { +func (t *SectorInfo) nonPaddingPieceInfos() []abi.PieceInfo { + out := make([]abi.PieceInfo, len(t.Pieces)) + for i, p := range t.Pieces { + if !p.HasDealInfo() { continue } - out = append(out, p.DealInfo.DealID) + + out[i] = p.Piece() } return out } @@ -132,14 +153,14 @@ func (t *SectorInfo) dealIDs() []abi.DealID { func (t *SectorInfo) existingPieceSizes() []abi.UnpaddedPieceSize { out := make([]abi.UnpaddedPieceSize, len(t.Pieces)) for i, p := range t.Pieces { - out[i] = p.Piece.Size.Unpadded() + out[i] = p.Piece().Size.Unpadded() } return out } -func (t *SectorInfo) hasDeals() bool { +func (t *SectorInfo) hasData() bool { for _, piece := range t.Pieces { - if piece.DealInfo != nil { + if piece.HasDealInfo() { return true } } @@ -151,7 +172,7 @@ func (t *SectorInfo) sealingCtx(ctx context.Context) context.Context { // TODO: can also take start epoch into account to give priority to sectors // we need sealed sooner - if t.hasDeals() { + if t.hasData() { return sealer.WithPriority(ctx, DealSectorPriority) } @@ -160,19 +181,19 @@ func (t *SectorInfo) sealingCtx(ctx context.Context) context.Context { // Returns list of offset/length tuples of sector data ranges which clients // requested to keep unsealed -func (t *SectorInfo) keepUnsealedRanges(pieces []api.SectorPiece, invert, alwaysKeep bool) []storiface.Range { +func (t *SectorInfo) keepUnsealedRanges(pieces []SafeSectorPiece, invert, alwaysKeep bool) []storiface.Range { var out []storiface.Range var at abi.UnpaddedPieceSize for _, piece := range pieces { - psize := piece.Piece.Size.Unpadded() + psize := piece.Piece().Size.Unpadded() at += psize - if piece.DealInfo == nil { + if !piece.HasDealInfo() { continue } - keep := piece.DealInfo.KeepUnsealed || alwaysKeep + keep := piece.DealInfo().KeepUnsealedRequested() || alwaysKeep if keep == invert { continue @@ -195,3 +216,110 @@ type SealingStateEvt struct { After SectorState Error string } + +// SafeSectorPiece is a wrapper around SectorPiece which makes it hard to misuse +// especially by making it hard to access raw Deal / DDO info +type SafeSectorPiece struct { + real api.SectorPiece +} + +func SafePiece(piece api.SectorPiece) SafeSectorPiece { + return SafeSectorPiece{piece} +} + +var _ UniversalPieceInfo = &SafeSectorPiece{} + +func (sp *SafeSectorPiece) Piece() abi.PieceInfo { + return sp.real.Piece +} + +func (sp *SafeSectorPiece) HasDealInfo() bool { + return sp.real.DealInfo != nil +} + +func (sp *SafeSectorPiece) DealInfo() UniversalPieceInfo { + return sp.real.DealInfo +} + +// cbor passthrough +func (sp *SafeSectorPiece) UnmarshalCBOR(r io.Reader) (err error) { + return sp.real.UnmarshalCBOR(r) +} + +func (sp *SafeSectorPiece) MarshalCBOR(w io.Writer) error { + return sp.real.MarshalCBOR(w) +} + +// json passthrough +func (sp *SafeSectorPiece) UnmarshalJSON(b []byte) error { + return json.Unmarshal(b, &sp.real) +} + +func (sp *SafeSectorPiece) MarshalJSON() ([]byte, error) { + return json.Marshal(sp.real) +} + +type handleDealInfoParams struct { + FillerHandler func(UniversalPieceInfo) error + BuiltinMarketHandler func(UniversalPieceInfo) error + DDOHandler func(UniversalPieceInfo) error +} + +func (sp *SafeSectorPiece) handleDealInfo(params handleDealInfoParams) error { + if !sp.HasDealInfo() { + if params.FillerHandler == nil { + return xerrors.Errorf("FillerHandler is not provided") + } + return params.FillerHandler(sp) + } + + if sp.real.DealInfo.PublishCid != nil { + if params.BuiltinMarketHandler == nil { + return xerrors.Errorf("BuiltinMarketHandler is not provided") + } + return params.BuiltinMarketHandler(sp) + } + + if params.DDOHandler == nil { + return xerrors.Errorf("DDOHandler is not provided") + } + return params.DDOHandler(sp) +} + +// SectorPiece Proxy + +func (sp *SafeSectorPiece) Impl() piece.PieceDealInfo { + return sp.real.DealInfo.Impl() +} + +func (sp *SafeSectorPiece) String() string { + return sp.real.DealInfo.String() +} + +func (sp *SafeSectorPiece) Key() piece.PieceKey { + return sp.real.DealInfo.Key() +} + +func (sp *SafeSectorPiece) Valid(nv network.Version) error { + return sp.real.DealInfo.Valid(nv) +} + +func (sp *SafeSectorPiece) StartEpoch() (abi.ChainEpoch, error) { + return sp.real.DealInfo.StartEpoch() +} + +func (sp *SafeSectorPiece) EndEpoch() (abi.ChainEpoch, error) { + return sp.real.DealInfo.EndEpoch() +} + +func (sp *SafeSectorPiece) PieceCID() cid.Cid { + return sp.real.DealInfo.PieceCID() +} + +func (sp *SafeSectorPiece) KeepUnsealedRequested() bool { + return sp.real.DealInfo.KeepUnsealedRequested() +} + +func (sp *SafeSectorPiece) GetAllocation(ctx context.Context, aapi piece.AllocationAPI, tsk types.TipSetKey) (*verifreg.Allocation, error) { + return sp.real.DealInfo.GetAllocation(ctx, aapi, tsk) +} diff --git a/storage/pipeline/types_test.go b/storage/pipeline/types_test.go index b8fbb113af1..d92b68d5597 100644 --- a/storage/pipeline/types_test.go +++ b/storage/pipeline/types_test.go @@ -13,6 +13,7 @@ import ( tutils "github.com/filecoin-project/specs-actors/v2/support/testing" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/storage/pipeline/piece" ) func TestSectorInfoSerialization(t *testing.T) { @@ -23,9 +24,9 @@ func TestSectorInfoSerialization(t *testing.T) { t.Fatal(err) } - dealInfo := api.PieceDealInfo{ + dealInfo := piece.PieceDealInfo{ DealID: d, - DealSchedule: api.DealSchedule{ + DealSchedule: piece.DealSchedule{ StartEpoch: 0, EndEpoch: 100, }, @@ -43,13 +44,13 @@ func TestSectorInfoSerialization(t *testing.T) { si := &SectorInfo{ State: "stateful", SectorNumber: 234, - Pieces: []api.SectorPiece{{ + Pieces: []SafeSectorPiece{{real: api.SectorPiece{ Piece: abi.PieceInfo{ Size: 5, PieceCID: dummyCid, }, DealInfo: &dealInfo, - }}, + }}}, CommD: &dummyCid, CommR: nil, Proof: nil, @@ -77,8 +78,8 @@ func TestSectorInfoSerialization(t *testing.T) { assert.Equal(t, si.State, si2.State) assert.Equal(t, si.SectorNumber, si2.SectorNumber) - assert.Equal(t, si.Pieces[0].DealInfo.DealID, si2.Pieces[0].DealInfo.DealID) - assert.Equal(t, si.Pieces[0].DealInfo.DealProposal.PieceCID, si2.Pieces[0].DealInfo.DealProposal.PieceCID) + assert.Equal(t, si.Pieces[0].Impl().DealID, si2.Pieces[0].Impl().DealID) + assert.Equal(t, si.Pieces[0].Impl().DealProposal.PieceCID, si2.Pieces[0].Impl().DealProposal.PieceCID) assert.Equal(t, *si.CommD, *si2.CommD) assert.DeepEqual(t, si.TicketValue, si2.TicketValue) assert.Equal(t, si.TicketEpoch, si2.TicketEpoch) diff --git a/storage/pipeline/upgrade_queue.go b/storage/pipeline/upgrade_queue.go index 9d9e1ca46c6..5e3392a9f18 100644 --- a/storage/pipeline/upgrade_queue.go +++ b/storage/pipeline/upgrade_queue.go @@ -21,7 +21,7 @@ func (m *Sealing) MarkForUpgrade(ctx context.Context, id abi.SectorNumber) error return xerrors.Errorf("unable to snap-up sectors not in the 'Proving' state") } - if si.hasDeals() { + if si.hasData() { return xerrors.Errorf("not a committed-capacity sector, has deals") } diff --git a/storage/sealer/cbor_gen.go b/storage/sealer/cbor_gen.go index 22da1b52081..e4b8e644dad 100644 --- a/storage/sealer/cbor_gen.go +++ b/storage/sealer/cbor_gen.go @@ -33,7 +33,7 @@ func (t *Call) MarshalCBOR(w io.Writer) error { } // t.ID (storiface.CallID) (struct) - if len("ID") > cbg.MaxLength { + if len("ID") > 8192 { return xerrors.Errorf("Value in field \"ID\" was too long") } @@ -49,7 +49,7 @@ func (t *Call) MarshalCBOR(w io.Writer) error { } // t.State (sealer.CallState) (uint64) - if len("State") > cbg.MaxLength { + if len("State") > 8192 { return xerrors.Errorf("Value in field \"State\" was too long") } @@ -65,7 +65,7 @@ func (t *Call) MarshalCBOR(w io.Writer) error { } // t.Result (sealer.ManyBytes) (struct) - if len("Result") > cbg.MaxLength { + if len("Result") > 8192 { return xerrors.Errorf("Value in field \"Result\" was too long") } @@ -81,7 +81,7 @@ func (t *Call) MarshalCBOR(w io.Writer) error { } // t.RetType (sealer.ReturnType) (string) - if len("RetType") > cbg.MaxLength { + if len("RetType") > 8192 { return xerrors.Errorf("Value in field \"RetType\" was too long") } @@ -92,7 +92,7 @@ func (t *Call) MarshalCBOR(w io.Writer) error { return err } - if len(t.RetType) > cbg.MaxLength { + if len(t.RetType) > 8192 { return xerrors.Errorf("Value in field t.RetType was too long") } @@ -134,7 +134,7 @@ func (t *Call) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -192,7 +192,7 @@ func (t *Call) UnmarshalCBOR(r io.Reader) (err error) { case "RetType": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -221,7 +221,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { } // t.ID (sealer.WorkID) (struct) - if len("ID") > cbg.MaxLength { + if len("ID") > 8192 { return xerrors.Errorf("Value in field \"ID\" was too long") } @@ -237,7 +237,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { } // t.Status (sealer.WorkStatus) (string) - if len("Status") > cbg.MaxLength { + if len("Status") > 8192 { return xerrors.Errorf("Value in field \"Status\" was too long") } @@ -248,7 +248,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { return err } - if len(t.Status) > cbg.MaxLength { + if len(t.Status) > 8192 { return xerrors.Errorf("Value in field t.Status was too long") } @@ -260,7 +260,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { } // t.StartTime (int64) (int64) - if len("StartTime") > cbg.MaxLength { + if len("StartTime") > 8192 { return xerrors.Errorf("Value in field \"StartTime\" was too long") } @@ -282,7 +282,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { } // t.WorkError (string) (string) - if len("WorkError") > cbg.MaxLength { + if len("WorkError") > 8192 { return xerrors.Errorf("Value in field \"WorkError\" was too long") } @@ -293,7 +293,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { return err } - if len(t.WorkError) > cbg.MaxLength { + if len(t.WorkError) > 8192 { return xerrors.Errorf("Value in field t.WorkError was too long") } @@ -305,7 +305,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { } // t.WorkerCall (storiface.CallID) (struct) - if len("WorkerCall") > cbg.MaxLength { + if len("WorkerCall") > 8192 { return xerrors.Errorf("Value in field \"WorkerCall\" was too long") } @@ -321,7 +321,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { } // t.WorkerHostname (string) (string) - if len("WorkerHostname") > cbg.MaxLength { + if len("WorkerHostname") > 8192 { return xerrors.Errorf("Value in field \"WorkerHostname\" was too long") } @@ -332,7 +332,7 @@ func (t *WorkState) MarshalCBOR(w io.Writer) error { return err } - if len(t.WorkerHostname) > cbg.MaxLength { + if len(t.WorkerHostname) > 8192 { return xerrors.Errorf("Value in field t.WorkerHostname was too long") } @@ -374,7 +374,7 @@ func (t *WorkState) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -397,7 +397,7 @@ func (t *WorkState) UnmarshalCBOR(r io.Reader) (err error) { case "Status": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -408,10 +408,10 @@ func (t *WorkState) UnmarshalCBOR(r io.Reader) (err error) { case "StartTime": { maj, extra, err := cr.ReadHeader() - var extraI int64 if err != nil { return err } + var extraI int64 switch maj { case cbg.MajUnsignedInt: extraI = int64(extra) @@ -434,7 +434,7 @@ func (t *WorkState) UnmarshalCBOR(r io.Reader) (err error) { case "WorkError": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -455,7 +455,7 @@ func (t *WorkState) UnmarshalCBOR(r io.Reader) (err error) { case "WorkerHostname": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -484,7 +484,7 @@ func (t *WorkID) MarshalCBOR(w io.Writer) error { } // t.Method (sealtasks.TaskType) (string) - if len("Method") > cbg.MaxLength { + if len("Method") > 8192 { return xerrors.Errorf("Value in field \"Method\" was too long") } @@ -495,7 +495,7 @@ func (t *WorkID) MarshalCBOR(w io.Writer) error { return err } - if len(t.Method) > cbg.MaxLength { + if len(t.Method) > 8192 { return xerrors.Errorf("Value in field t.Method was too long") } @@ -507,7 +507,7 @@ func (t *WorkID) MarshalCBOR(w io.Writer) error { } // t.Params (string) (string) - if len("Params") > cbg.MaxLength { + if len("Params") > 8192 { return xerrors.Errorf("Value in field \"Params\" was too long") } @@ -518,7 +518,7 @@ func (t *WorkID) MarshalCBOR(w io.Writer) error { return err } - if len(t.Params) > cbg.MaxLength { + if len(t.Params) > 8192 { return xerrors.Errorf("Value in field t.Params was too long") } @@ -560,7 +560,7 @@ func (t *WorkID) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -573,7 +573,7 @@ func (t *WorkID) UnmarshalCBOR(r io.Reader) (err error) { case "Method": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -584,7 +584,7 @@ func (t *WorkID) UnmarshalCBOR(r io.Reader) (err error) { case "Params": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } diff --git a/storage/sealer/storiface/cbor_gen.go b/storage/sealer/storiface/cbor_gen.go index 0b42136ead3..79d6219eb95 100644 --- a/storage/sealer/storiface/cbor_gen.go +++ b/storage/sealer/storiface/cbor_gen.go @@ -31,7 +31,7 @@ func (t *CallID) MarshalCBOR(w io.Writer) error { } // t.ID (uuid.UUID) (array) - if len("ID") > cbg.MaxLength { + if len("ID") > 8192 { return xerrors.Errorf("Value in field \"ID\" was too long") } @@ -42,7 +42,7 @@ func (t *CallID) MarshalCBOR(w io.Writer) error { return err } - if len(t.ID) > cbg.ByteArrayMaxLen { + if len(t.ID) > 2097152 { return xerrors.Errorf("Byte array in field t.ID was too long") } @@ -55,7 +55,7 @@ func (t *CallID) MarshalCBOR(w io.Writer) error { } // t.Sector (abi.SectorID) (struct) - if len("Sector") > cbg.MaxLength { + if len("Sector") > 8192 { return xerrors.Errorf("Value in field \"Sector\" was too long") } @@ -101,7 +101,7 @@ func (t *CallID) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -118,19 +118,17 @@ func (t *CallID) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.ByteArrayMaxLen { + if extra > 2097152 { return fmt.Errorf("t.ID: byte array too large (%d)", extra) } if maj != cbg.MajByteString { return fmt.Errorf("expected byte array") } - if extra != 16 { return fmt.Errorf("expected array to have 16 elements") } t.ID = [16]uint8{} - if _, err := io.ReadFull(cr, t.ID[:]); err != nil { return err } @@ -166,7 +164,7 @@ func (t *SecDataHttpHeader) MarshalCBOR(w io.Writer) error { } // t.Key (string) (string) - if len("Key") > cbg.MaxLength { + if len("Key") > 8192 { return xerrors.Errorf("Value in field \"Key\" was too long") } @@ -177,7 +175,7 @@ func (t *SecDataHttpHeader) MarshalCBOR(w io.Writer) error { return err } - if len(t.Key) > cbg.MaxLength { + if len(t.Key) > 8192 { return xerrors.Errorf("Value in field t.Key was too long") } @@ -189,7 +187,7 @@ func (t *SecDataHttpHeader) MarshalCBOR(w io.Writer) error { } // t.Value (string) (string) - if len("Value") > cbg.MaxLength { + if len("Value") > 8192 { return xerrors.Errorf("Value in field \"Value\" was too long") } @@ -200,7 +198,7 @@ func (t *SecDataHttpHeader) MarshalCBOR(w io.Writer) error { return err } - if len(t.Value) > cbg.MaxLength { + if len(t.Value) > 8192 { return xerrors.Errorf("Value in field t.Value was too long") } @@ -242,7 +240,7 @@ func (t *SecDataHttpHeader) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -255,7 +253,7 @@ func (t *SecDataHttpHeader) UnmarshalCBOR(r io.Reader) (err error) { case "Key": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -266,7 +264,7 @@ func (t *SecDataHttpHeader) UnmarshalCBOR(r io.Reader) (err error) { case "Value": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -295,7 +293,7 @@ func (t *SectorLocation) MarshalCBOR(w io.Writer) error { } // t.URL (string) (string) - if len("URL") > cbg.MaxLength { + if len("URL") > 8192 { return xerrors.Errorf("Value in field \"URL\" was too long") } @@ -306,7 +304,7 @@ func (t *SectorLocation) MarshalCBOR(w io.Writer) error { return err } - if len(t.URL) > cbg.MaxLength { + if len(t.URL) > 8192 { return xerrors.Errorf("Value in field t.URL was too long") } @@ -318,7 +316,7 @@ func (t *SectorLocation) MarshalCBOR(w io.Writer) error { } // t.Local (bool) (bool) - if len("Local") > cbg.MaxLength { + if len("Local") > 8192 { return xerrors.Errorf("Value in field \"Local\" was too long") } @@ -334,7 +332,7 @@ func (t *SectorLocation) MarshalCBOR(w io.Writer) error { } // t.Headers ([]storiface.SecDataHttpHeader) (slice) - if len("Headers") > cbg.MaxLength { + if len("Headers") > 8192 { return xerrors.Errorf("Value in field \"Headers\" was too long") } @@ -345,7 +343,7 @@ func (t *SectorLocation) MarshalCBOR(w io.Writer) error { return err } - if len(t.Headers) > cbg.MaxLength { + if len(t.Headers) > 8192 { return xerrors.Errorf("Slice value in field t.Headers was too long") } @@ -356,6 +354,7 @@ func (t *SectorLocation) MarshalCBOR(w io.Writer) error { if err := v.MarshalCBOR(cw); err != nil { return err } + } return nil } @@ -389,7 +388,7 @@ func (t *SectorLocation) UnmarshalCBOR(r io.Reader) (err error) { for i := uint64(0); i < n; i++ { { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -402,7 +401,7 @@ func (t *SectorLocation) UnmarshalCBOR(r io.Reader) (err error) { case "URL": { - sval, err := cbg.ReadString(cr) + sval, err := cbg.ReadStringWithMax(cr, 8192) if err != nil { return err } @@ -435,7 +434,7 @@ func (t *SectorLocation) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 8192 { return fmt.Errorf("t.Headers: array too large (%d)", extra) } @@ -463,6 +462,7 @@ func (t *SectorLocation) UnmarshalCBOR(r io.Reader) (err error) { } } + } } diff --git a/storage/sectorblocks/blocks.go b/storage/sectorblocks/blocks.go index 1593174bd8f..4b84e18fbcb 100644 --- a/storage/sectorblocks/blocks.go +++ b/storage/sectorblocks/blocks.go @@ -19,6 +19,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/node/modules/dtypes" + "github.com/filecoin-project/lotus/storage/pipeline/piece" "github.com/filecoin-project/lotus/storage/sealer/storiface" ) @@ -48,7 +49,7 @@ func DsKeyToDealID(key datastore.Key) (uint64, error) { } type SectorBuilder interface { - SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storiface.Data, d api.PieceDealInfo) (api.SectorOffset, error) + SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storiface.Data, d piece.PieceDealInfo) (api.SectorOffset, error) SectorsStatus(ctx context.Context, sid abi.SectorNumber, showOnChainInfo bool) (api.SectorInfo, error) } @@ -100,7 +101,7 @@ func (st *SectorBlocks) writeRef(ctx context.Context, dealID abi.DealID, sectorI return st.keys.Put(ctx, DealIDToDsKey(dealID), newRef) // TODO: batch somehow } -func (st *SectorBlocks) AddPiece(ctx context.Context, size abi.UnpaddedPieceSize, r io.Reader, d api.PieceDealInfo) (abi.SectorNumber, abi.PaddedPieceSize, error) { +func (st *SectorBlocks) AddPiece(ctx context.Context, size abi.UnpaddedPieceSize, r io.Reader, d piece.PieceDealInfo) (abi.SectorNumber, abi.PaddedPieceSize, error) { so, err := st.SectorBuilder.SectorAddPieceToAny(ctx, size, r, d) if err != nil { return 0, 0, err diff --git a/storage/wdpost/wdpost_run_test.go b/storage/wdpost/wdpost_run_test.go index a6b37fd542d..381f0e818bd 100644 --- a/storage/wdpost/wdpost_run_test.go +++ b/storage/wdpost/wdpost_run_test.go @@ -16,7 +16,6 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - miner12 "github.com/filecoin-project/go-state-types/builtin/v12/miner" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" @@ -28,6 +27,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/journal" @@ -74,13 +74,13 @@ func (m *mockStorageMinerAPI) StateMinerPartitions(ctx context.Context, a addres return m.partitions, nil } -func (m *mockStorageMinerAPI) StateMinerSectors(ctx context.Context, address address.Address, snos *bitfield.BitField, key types.TipSetKey) ([]*miner12.SectorOnChainInfo, error) { - var sis []*miner12.SectorOnChainInfo +func (m *mockStorageMinerAPI) StateMinerSectors(ctx context.Context, address address.Address, snos *bitfield.BitField, key types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + var sis []*miner.SectorOnChainInfo if snos == nil { panic("unsupported") } _ = snos.ForEach(func(i uint64) error { - sis = append(sis, &miner12.SectorOnChainInfo{ + sis = append(sis, &miner.SectorOnChainInfo{ SectorNumber: abi.SectorNumber(i), }) return nil