From ab72562a68ac284daeedb08925483213b3142e25 Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 4 Jul 2023 15:33:50 -0400 Subject: [PATCH 01/22] chore: build: release v1.23.3-rc1 --- CHANGELOG.md | 99 ++++++++++++++++++++++++++- build/openrpc/full.json.gz | Bin 33969 -> 33969 bytes build/openrpc/gateway.json.gz | Bin 10425 -> 10425 bytes build/openrpc/miner.json.gz | Bin 15939 -> 15939 bytes build/openrpc/worker.json.gz | Bin 5246 -> 5246 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 9 files changed, 101 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64fe60c5ab5..aa4021ac711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,105 @@ # UNRELEASED +# v1.23.3-rc1 / 2023-07-04 + +This is an optional feature release of Lotus. This feature release includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. + +## Highlights + +- The Ethereum-like RPC exposed by Lotus is now compatible with EIP-1898: https://github.com/filecoin-project/lotus/pull/10921 +- The lotus-miner PieceReader now supports parallel reads: https://github.com/filecoin-project/lotus/pull/10913 +- The chain tipset cache is now based on a sharded mutex +- Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) + - If unset, we default to caching 16 most recent execution traces. Storage Providers may want to set this to 0, while exchanges may want to crank it up. + ## New features -- feat: Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) - - If unset, we default to caching 16 most recent execution traces. Node operatores may want to set this to 0 while exchanges may want to crank it up. + - Implement a tooling for slasher ([filecoin-project/lotus#10928](https://github.com/filecoin-project/lotus/pull/10928)) + - feat: miner cli: sectors list upgrade-bounds tool ([filecoin-project/lotus#10923](https://github.com/filecoin-project/lotus/pull/10923)) + - Add new RPC stress testing tool (lotus-bench rpc) with rich reporting ([filecoin-project/lotus#10761](https://github.com/filecoin-project/lotus/pull/10761)) + - feat: alert: Add FVM_CONCURRENCY alert ([filecoin-project/lotus#10933](https://github.com/filecoin-project/lotus/pull/10933)) + - feat: tracer: upgrade elastic search transport for pubsub traces ([filecoin-project/lotus#10405](https://github.com/filecoin-project/lotus/pull/10405)) + - feat: Add eth_syncing RPC method ([filecoin-project/lotus#10719](https://github.com/filecoin-project/lotus/pull/10719)) + - feat: sealing: flag to run data_cid untied from addpiece ([filecoin-project/lotus#10797](https://github.com/filecoin-project/lotus/pull/10797)) + - feat: Lotus Gateway: add MpoolPending, ChainGetBlock and MinerGetBaseInfo ([filecoin-project/lotus#10929](https://github.com/filecoin-project/lotus/pull/10929)) +## Improvements + - chore: update ffi & fvm ([filecoin-project/lotus#11040](https://github.com/filecoin-project/lotus/pull/11040)) + - feat: Make sure we don't store duplidate actor events caused to reorgs in events.db ([filecoin-project/lotus#11015](https://github.com/filecoin-project/lotus/pull/11015)) + - sealing: Use only non-assigned deals when selecting snap sectors ([filecoin-project/lotus#11002](https://github.com/filecoin-project/lotus/pull/11002)) + - chore: not display privatekey ([filecoin-project/lotus#11006](https://github.com/filecoin-project/lotus/pull/11006)) + - chore: shed: update actor version ([filecoin-project/lotus#11020](https://github.com/filecoin-project/lotus/pull/11020)) + - chore: migrate to boxo ([filecoin-project/lotus#10921](https://github.com/filecoin-project/lotus/pull/10921)) + - feat: deflake TestDealsWithFinalizeEarly ([filecoin-project/lotus#10978](https://github.com/filecoin-project/lotus/pull/10978)) + - fix: pubsub: do not treat ErrExistingNonce as Reject ([filecoin-project/lotus#10973](https://github.com/filecoin-project/lotus/pull/10973)) + - feat: deflake TestDMLevelPartialRetrieval (#10972) ([filecoin-project/lotus#10972](https://github.com/filecoin-project/lotus/pull/10972)) + - fix: eth: ensure that the event topics are non-nil ([filecoin-project/lotus#10971](https://github.com/filecoin-project/lotus/pull/10971)) + - Add comment stating msgIndex is an experimental feature ([filecoin-project/lotus#10968](https://github.com/filecoin-project/lotus/pull/10968)) + - feat: cli(compute-state) default to the tipset at the given epoch ([filecoin-project/lotus#10965](https://github.com/filecoin-project/lotus/pull/10965)) + - Upgrade urfave dependency which now supports DisableSliceFlagSeparato… ([filecoin-project/lotus#10950](https://github.com/filecoin-project/lotus/pull/10950)) + - Add new lotus-shed command for computing eth hash for a given message cid (#10961) ([filecoin-project/lotus#10961](https://github.com/filecoin-project/lotus/pull/10961)) + - Prefill GetTipsetByHeight skiplist cache on lotus startup ([filecoin-project/lotus#10955](https://github.com/filecoin-project/lotus/pull/10955)) + - Add lotus-shed command for backfilling txhash.db ([filecoin-project/lotus#10932](https://github.com/filecoin-project/lotus/pull/10932)) + - chore: deps: update to go-libp2p 0.27.5 ([filecoin-project/lotus#10948](https://github.com/filecoin-project/lotus/pull/10948)) + - Small improvement to make gen output ([filecoin-project/lotus#10951](https://github.com/filecoin-project/lotus/pull/10951)) + - fix: improve perf of msgindex backfill ([filecoin-project/lotus#10941](https://github.com/filecoin-project/lotus/pull/10941)) + - deps: update libp2p ([filecoin-project/lotus#10936](https://github.com/filecoin-project/lotus/pull/10936)) + - sealing: Improve upgrade sector selection ([filecoin-project/lotus#10915](https://github.com/filecoin-project/lotus/pull/10915)) + - Add timing test for mpool select with a large mpool dump ([filecoin-project/lotus#10650](https://github.com/filecoin-project/lotus/pull/10650)) + - feat: slashfilter: drop outdated near-upgrade check ([filecoin-project/lotus#10925](https://github.com/filecoin-project/lotus/pull/10925)) + - opt: MinerInfo adds the PendingOwnerAddress field ([filecoin-project/lotus#10927](https://github.com/filecoin-project/lotus/pull/10927)) + - feat: itest: force PoSt more aggressively around deadline closure ([filecoin-project/lotus#10926](https://github.com/filecoin-project/lotus/pull/10926)) + - test: messagepool: gas rewards are negative if GasFeeCap too low ([filecoin-project/lotus#10649](https://github.com/filecoin-project/lotus/pull/10649)) + - fix: types: error out on decoding BlockMsg with extraneous data ([filecoin-project/lotus#10863](https://github.com/filecoin-project/lotus/pull/10863)) + - update interop upgrade schedule ([filecoin-project/lotus#10879](https://github.com/filecoin-project/lotus/pull/10879)) + - itests: Test PoSt V1_1 on workers ([filecoin-project/lotus#10732](https://github.com/filecoin-project/lotus/pull/10732)) + - Update gas_balancing.md ([filecoin-project/lotus#10924](https://github.com/filecoin-project/lotus/pull/10924)) + - feat: cli: Make compact partitions cmd better ([filecoin-project/lotus#9070](https://github.com/filecoin-project/lotus/pull/9070)) + - fix: include extra messages in ComputeState InvocResult output ([filecoin-project/lotus#10628](https://github.com/filecoin-project/lotus/pull/10628)) + - feat: pubsub: treat ErrGasFeeCapTooLow as ignore, not reject ([filecoin-project/lotus#10652](https://github.com/filecoin-project/lotus/pull/10652)) + - feat: run lotus-shed commands in context that is cancelled on sigterm ([filecoin-project/lotus#10877](https://github.com/filecoin-project/lotus/pull/10877)) + - fix:lotus-fountain:set default data-cap same as MinVerifiedDealSize ([filecoin-project/lotus#10920](https://github.com/filecoin-project/lotus/pull/10920)) + - pass the right g-recaptcha data + - fix: not call RUnlock ([filecoin-project/lotus#10912](https://github.com/filecoin-project/lotus/pull/10912)) + - opt: cli: If present, print Events Root ([filecoin-project/lotus#10893](https://github.com/filecoin-project/lotus/pull/10893)) + - Calibration faucet UI improvements ([filecoin-project/lotus#10905](https://github.com/filecoin-project/lotus/pull/10905)) + - chore: chain: replace storetheindex with go-libipni ([filecoin-project/lotus#10841](https://github.com/filecoin-project/lotus/pull/10841)) + - Add alerts to `Lotus info` cmd ([filecoin-project/lotus#10894](https://github.com/filecoin-project/lotus/pull/10894)) + - fix: cli: make redeclare cmd work properly ([filecoin-project/lotus#10860](https://github.com/filecoin-project/lotus/pull/10860)) + - fix: shed remove datacap not working with ledger ([filecoin-project/lotus#10880](https://github.com/filecoin-project/lotus/pull/10880)) + - Check if epoch is negative in GetTipsetByHeight ([filecoin-project/lotus#10878](https://github.com/filecoin-project/lotus/pull/10878)) + - chore: update go-fil-markets ([filecoin-project/lotus#10867](https://github.com/filecoin-project/lotus/pull/10867)) + - feat: alerts: Add lotus-miner legacy-markets alert ([filecoin-project/lotus#10868](https://github.com/filecoin-project/lotus/pull/10868)) + - feat:fountain:add grant-datacap support ([filecoin-project/lotus#10856](https://github.com/filecoin-project/lotus/pull/10856)) + - feat: itests: add logs to blockminer.go failure case ([filecoin-project/lotus#10861](https://github.com/filecoin-project/lotus/pull/10861)) + - feat: eth: Add support for blockHash param in eth_getLogs ([filecoin-project/lotus#10782](https://github.com/filecoin-project/lotus/pull/10782)) + - lotus-fountain: make compatible with 0x addresses #10560 ([filecoin-project/lotus#10784](https://github.com/filecoin-project/lotus/pull/10784)) + - feat: deflake sector_import_simple ([filecoin-project/lotus#10858](https://github.com/filecoin-project/lotus/pull/10858)) + - fix: splitstore: remove deadlock around waiting for sync ([filecoin-project/lotus#10857](https://github.com/filecoin-project/lotus/pull/10857)) + - fix: sched: Address GET_32G_MAX_CONCURRENT regression (#10850) ([filecoin-project/lotus#10850](https://github.com/filecoin-project/lotus/pull/10850)) + - feat: fix deadlock in splitstore-mpool interaction ([filecoin-project/lotus#10840](https://github.com/filecoin-project/lotus/pull/10840)) + - chore: update go-libp2p to v0.27.3 ([filecoin-project/lotus#10671](https://github.com/filecoin-project/lotus/pull/10671)) + - libp2p: add QUIC and WebTransport to default listen addresses ([filecoin-project/lotus#10848](https://github.com/filecoin-project/lotus/pull/10848)) + - fix: ci: Debugging m1 build ([filecoin-project/lotus#10749](https://github.com/filecoin-project/lotus/pull/10749)) + - Validate that FromBlock/ToBlock epoch is indeed a hex value (#10780) ([filecoin-project/lotus#10780](https://github.com/filecoin-project/lotus/pull/10780)) + - fix: remove invalid field UpgradePriceListOopsHeight ([filecoin-project/lotus#10772](https://github.com/filecoin-project/lotus/pull/10772)) + - feat: deflake eth_balance_test ([filecoin-project/lotus#10847](https://github.com/filecoin-project/lotus/pull/10847)) + - fix: tests: Use mutex-wrapped datastore in storage tests ([filecoin-project/lotus#10846](https://github.com/filecoin-project/lotus/pull/10846)) + - Make lotus-fountain UI slightly friendlier ([filecoin-project/lotus#10785](https://github.com/filecoin-project/lotus/pull/10785)) + - Make (un)subscribe and filter RPC methods require only read perm ([filecoin-project/lotus#10825](https://github.com/filecoin-project/lotus/pull/10825)) + - deps: Update go-jsonrpc to v0.3.1 ([filecoin-project/lotus#10845](https://github.com/filecoin-project/lotus/pull/10845)) + - feat: deflake paych_api_test ([filecoin-project/lotus#10843](https://github.com/filecoin-project/lotus/pull/10843)) + - fix: Eth RPC: do not occlude block param errors. ([filecoin-project/lotus#10534](https://github.com/filecoin-project/lotus/pull/10534)) + - feat: cli: More ux-friendly batching cmds ([filecoin-project/lotus#10837](https://github.com/filecoin-project/lotus/pull/10837)) + - fix: cli: Hide legacy markets cmds ([filecoin-project/lotus#10842](https://github.com/filecoin-project/lotus/pull/10842)) + - feat: chainstore: exit early in MaybeTakeHeavierTipset ([filecoin-project/lotus#10839](https://github.com/filecoin-project/lotus/pull/10839)) + - fix: itest: fix eth deploy test flake ([filecoin-project/lotus#10829](https://github.com/filecoin-project/lotus/pull/10829)) + - style: mempool: chain errors using xerrors.Errorf ([filecoin-project/lotus#10836](https://github.com/filecoin-project/lotus/pull/10836)) + - feat: deflake msgindex_test.go ([filecoin-project/lotus#10826](https://github.com/filecoin-project/lotus/pull/10826)) + - feat: deflake TestEthFeeHistory ([filecoin-project/lotus#10816](https://github.com/filecoin-project/lotus/pull/10816)) + - feat: make RunClientTest louder when deals fail ([filecoin-project/lotus#10817](https://github.com/filecoin-project/lotus/pull/10817)) + - fix: cli: Change arg wording in change-beneficiary cmd ([filecoin-project/lotus#10823](https://github.com/filecoin-project/lotus/pull/10823)) + - refactor: streamline error handling in CheckPendingMessages (#10818) ([filecoin-project/lotus#10818](https://github.com/filecoin-project/lotus/pull/10818)) # v1.23.2 / 2023-06-28 diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 340f840afe6d62811f6c44896e95603e0a9adbe3..72dc66472508a3e9df6345adabb08c14b8b464bc 100644 GIT binary patch literal 33969 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 R{|5j7|NlHI5FOOi1^}1s0384T literal 33969 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 delta 23 ecmdlPxHE72+cqzC!{ diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 461aa61a12de7f58ebac7b044dc2267f70355999..68fbd006877f42531c8057e78f7f5bcf58981bbc 100644 GIT binary patch delta 22 ecmX?HbGT+gJ5x5_#?DQ)95-jOe3lnuW&i+p{|Ms% delta 22 ecmX?HbGT+gJ5%esjh&lpIixKgu*i!sGXMa6vIwjI diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index c8b5a94b024bdc33a1089996f35bf9559d96a147..7d55f5632b7e7e3f75823a39c5a8048bc0603749 100644 GIT binary patch delta 23 fcmeyT@lRtyD|5_Z^^G0xggIQ)6^+*FF){!EddUc9 delta 23 fcmeyT@lRtyE3?lRg^eBWggJuP;-%N>F){!Eey|9& diff --git a/build/version.go b/build/version.go index 56a2cc0ab7c..ac2df237b73 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.23.3-dev" +const BuildVersion = "1.23.3-rc1" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index ee8f4583771..62bc8eeaad9 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.23.3-dev + 1.23.3-rc1 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index bdf992e58a3..e24802952f1 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.23.3-dev + 1.23.3-rc1 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index fe63acbc6c5..740419b8daa 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.23.3-dev + 1.23.3-rc1 COMMANDS: daemon Start a lotus daemon process From 0c5400f7f671a0f6392bd93165ac8ed13d82a705 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Tue, 4 Jul 2023 17:22:18 -0400 Subject: [PATCH 02/22] fix: changelog: v1.23.1-rc1 is a release candidate Co-authored-by: Jiaying Wang <42981373+jennijuju@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa4021ac711..d299b9ec75d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ # v1.23.3-rc1 / 2023-07-04 -This is an optional feature release of Lotus. This feature release includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. +This is the first candidate for the upcoming feature release v1.23.3 of Lotus. This feature release includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. ## Highlights From 40198535c57b277c72d589cdf2ffcbfd4448844e Mon Sep 17 00:00:00 2001 From: Aayush Date: Thu, 6 Jul 2023 09:42:45 -0400 Subject: [PATCH 03/22] fix: docs: correct 1.23.3 CHANGELOG --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d299b9ec75d..e6846072ff9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,8 @@ This is the first candidate for the upcoming feature release v1.23.3 of Lotus. T ## Highlights -- The Ethereum-like RPC exposed by Lotus is now compatible with EIP-1898: https://github.com/filecoin-project/lotus/pull/10921 +- The Ethereum-like RPC exposed by Lotus is now compatible with EIP-1898: https://github.com/filecoin-project/lotus/pull/10815 - The lotus-miner PieceReader now supports parallel reads: https://github.com/filecoin-project/lotus/pull/10913 -- The chain tipset cache is now based on a sharded mutex - Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) - If unset, we default to caching 16 most recent execution traces. Storage Providers may want to set this to 0, while exchanges may want to crank it up. From 655ea1e0b51458ce08d6f1498d7c91f6451a2780 Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Tue, 11 Jul 2023 09:10:16 +0000 Subject: [PATCH 04/22] Add tmp indices to events table while performing migration to V2 After the migration we also perform db administration on the events DB to reduce its file size on disk. (cherry picked from commit 0d7621be564fb27d834158d08e1471f572fc38b7) --- chain/events/filter/index.go | 43 +++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/chain/events/filter/index.go b/chain/events/filter/index.go index 27aec481fc9..bacba60d7dd 100644 --- a/chain/events/filter/index.go +++ b/chain/events/filter/index.go @@ -128,6 +128,16 @@ func (ei *EventIndex) migrateToVersion2(ctx context.Context, chainStore *store.C // rollback the transaction (a no-op if the transaction was already committed) defer tx.Rollback() //nolint:errcheck + // create some temporary indices to help speed up the migration + _, err = tx.Exec("CREATE INDEX IF NOT EXISTS tmp_height_tipset_key_cid ON event (height,tipset_key_cid)") + if err != nil { + return xerrors.Errorf("create index tmp_height_tipset_key_cid: %w", err) + } + _, err = tx.Exec("CREATE INDEX IF NOT EXISTS tmp_tipset_key_cid ON event (tipset_key_cid)") + if err != nil { + return xerrors.Errorf("create index tmp_tipset_key_cid: %w", err) + } + stmtDeleteOffChainEvent, err := tx.Prepare("DELETE FROM event WHERE tipset_key_cid!=? and height=?") if err != nil { return xerrors.Errorf("prepare stmtDeleteOffChainEvent: %w", err) @@ -158,12 +168,16 @@ func (ei *EventIndex) migrateToVersion2(ctx context.Context, chainStore *store.C currTs := chainStore.GetHeaviestTipSet() for int64(currTs.Height()) >= minHeight.Int64 { + if currTs.Height()%1000 == 0 { + log.Infof("Migrating height %d (remaining %d)", currTs.Height(), int64(currTs.Height())-minHeight.Int64) + } + tsKey := currTs.Parents() currTs, err = chainStore.GetTipSetFromKey(ctx, tsKey) if err != nil { return xerrors.Errorf("get tipset from key: %w", err) } - log.Debugf("Migrating height %d\n", currTs.Height()) + log.Debugf("Migrating height %d", currTs.Height()) tsKeyCid, err := currTs.Key().Cid() if err != nil { @@ -190,7 +204,7 @@ func (ei *EventIndex) migrateToVersion2(ctx context.Context, chainStore *store.C if !eventId.Valid { continue } - log.Debugf("Deleting all events with id < %d at height %d\n", eventId.Int64, currTs.Height()) + log.Debugf("Deleting all events with id < %d at height %d", eventId.Int64, currTs.Height()) res, err := stmtDeleteEvent.Exec(tsKeyCid.Bytes(), eventId.Int64) if err != nil { @@ -201,7 +215,7 @@ func (ei *EventIndex) migrateToVersion2(ctx context.Context, chainStore *store.C if err != nil { return xerrors.Errorf("rows affected: %w", err) } - log.Debugf("deleted %d events from tipset %s\n", nrRowsAffected, tsKeyCid.String()) + log.Debugf("deleted %d events from tipset %s", nrRowsAffected, tsKeyCid.String()) } // delete all entries that have an event_id that doesn't exist (since we don't have a foreign @@ -217,11 +231,34 @@ func (ei *EventIndex) migrateToVersion2(ctx context.Context, chainStore *store.C } log.Infof("cleaned up %d entries that had deleted events\n", nrRowsAffected) + // drop the temporary indices after the migration + _, err = tx.Exec("DROP INDEX IF EXISTS tmp_tipset_key_cid") + if err != nil { + return xerrors.Errorf("create index tmp_tipset_key_cid: %w", err) + } + _, err = tx.Exec("DROP INDEX IF EXISTS tmp_height_tipset_key_cid") + if err != nil { + return xerrors.Errorf("drop index tmp_height_tipset_key_cid: %w", err) + } + err = tx.Commit() if err != nil { return xerrors.Errorf("commit transaction: %w", err) } + // during the migration, we have likely increased the WAL size a lot, so lets do some + // simple DB administration to free up space (VACUUM followed by truncating the WAL file) + // as this would be a good time to do it when no other writes are happening + log.Infof("Performing DB vacuum and wal checkpointing to free up space after the migration") + _, err = ei.db.Exec("VACUUM") + if err != nil { + log.Warnf("error vacuuming database: %s", err) + } + _, err = ei.db.Exec("PRAGMA wal_checkpoint(TRUNCATE)") + if err != nil { + log.Warnf("error checkpointing wal: %s", err) + } + log.Infof("Successfully migrated events to version 2 in %s", time.Since(now)) return nil From 19160d2343b0b9a25fe2627eef5ab09d1772efbb Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 11 Jul 2023 11:48:49 -0400 Subject: [PATCH 05/22] chore: build: release v1.23.3-rc2 --- CHANGELOG.md | 5 +++-- build/openrpc/full.json.gz | Bin 33969 -> 33969 bytes build/openrpc/gateway.json.gz | Bin 10425 -> 10425 bytes build/openrpc/miner.json.gz | Bin 15939 -> 15939 bytes build/openrpc/worker.json.gz | Bin 5246 -> 5246 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 9 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6846072ff9..956e5b0d2a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,9 @@ # UNRELEASED -# v1.23.3-rc1 / 2023-07-04 +# v1.23.3-rc2 / 2023-07-11 -This is the first candidate for the upcoming feature release v1.23.3 of Lotus. This feature release includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. +This is the second release candidate for the upcoming feature release v1.23.3 of Lotus. This feature release includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. ## Highlights @@ -100,6 +100,7 @@ This is the first candidate for the upcoming feature release v1.23.3 of Lotus. T - feat: make RunClientTest louder when deals fail ([filecoin-project/lotus#10817](https://github.com/filecoin-project/lotus/pull/10817)) - fix: cli: Change arg wording in change-beneficiary cmd ([filecoin-project/lotus#10823](https://github.com/filecoin-project/lotus/pull/10823)) - refactor: streamline error handling in CheckPendingMessages (#10818) ([filecoin-project/lotus#10818](https://github.com/filecoin-project/lotus/pull/10818)) + - feat: Add tmp indices to events table while performing migration to V2 # v1.23.2 / 2023-06-28 diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 72dc66472508a3e9df6345adabb08c14b8b464bc..b6d24e05465f215677d012c55228c9cc2f930d6c 100644 GIT binary patch literal 33969 zcmZ^qQneXsix-hr^lDhv+UQ(aqY_#P#43CoG64irg<0 z;44+B`-7V6)d!-GOf#AOWHCw@C>jjH>8E|p?DJ9{H@?@^DjX+DHJ9%=WoD^DQTC_4HzhlV!lOGvq%lF>FUSQ%@ksee9F^v&(9?y8@e*D z9y~irV$}fV;9+mUH1h!yA8CHL&y4USWbF)UlkeAsuA+x93BG+VG?3* z7U%wEe&8rPfW>5Oe?QwjUWDp}M9y(Qm&O9c2#4o%RjKap%sLZK%u4ng@rS*0``kd= zoW0T>-fq|E&L!T=72x&=oqYe@2WXQgMt=izz(bcMnKe9B9c%D`-zvLt75Y0S-F$*e zpA&3|kjs7q;g+iP^4>*v`}_PbPk1(du3E~d>W^mMY>~TIbUpx4y}pjaou4;W3l4UU zfw{$3p`Lj`Ks0+d?))lM@hpMw&!;e1&1l2g?K-gxic4}qn!Y8}>9+3Zc_KZv$s>TX ze|qs+(Ypf%=h6aK*I{Ne;>3}*WL^z|&g{rxzWUFXp06~L&yR$RZ&2Li z5M>7s2u?QUk94ow;@4F_z(rnJ@*bj6+<`b7n?2&5TY$V=u5*|+LfF~}!X6A?Zyc+8 z)p*npg##1pX*-|+OdG(+VskGfcq(9Bs&Xj)t6*O|kKb-w`zRo-jp=F{pp+JsNvoM5 zjt4g9{*@&z$I585CSt`2vELvlf)`qmN!(Pk$5*AsyL1#*<|h1zuON8e9JQlq#|t6b z`q2Smhlt}3t;dTkZ)b_)PtBcIz%^+>79>vaONV}#O9(3`civonQTbxQoo|EUv zlufh|TQ_p#6?Ou7go-LBro2F@ghp7Mv1ZC@58tP&(+>D|?co}k^h;aPe-q z@NpPD8|p+(E8qFOp8}0>Xypw)!x1B$$R`?p(Mwt^HomErKh!2AfrUdD_nh9SAFdp$ z69}y;HwGJ{7jW0g0zms|IeG)(Fz|g?9wiXB?0oTI6E?=K09*?|YbO306x5<$_}uJ2 zExM3t=H15#DMWsl3Z7d`1G1%<(-#bXxiB#qK$29$)4d+Vu;dX`M2Y}rK?3IpJl26| zK5xrh`AyA>RleuC5Kc!)aT& z+cmhn@2JaxXf9V#!A7$oF0<+I>!lFL_YMoQexHoJ*nfi(A)#n)cf|fAer>1NeUrjg z%lAG8A~((RSYjg5m*M7Ek|%h2;RlVjArPDo)d&yln@X(+WW5Ukd~FlERL5I=#Xi8B0v081``q+|v%cm;2Bryq8-{#80qFTuC>{NNn$xq)y{)3_1UWpWUq zZ7u%#GNpaGu>X40>+S%7N7x;N+Eh8+rAh3M3Wq0%i;$30i9bE&TEMS7bT+e%-KO?UKMVr)GBTJ~ZB)w|0&_J! zH!mh6i9nBX&ksC_bc2Ypyg7q&Y&MOP;Mq02QCEZ8i|6-J&sk=EixSdxL(M*BGkajUIQedRR4Qsu&-@~_!IlrxTJmr0`LnFKlNj{$+ z08AVbM>qOaaO66I-6iAT2f%|b-R_>{;TGi#Yk_0ZefN&R46q@{=Il!$hGX#M2RQJo zAluuLD!b}r@qe)#6ep|~yyU{-}qFFOznB04C*{UKuBAiw7BOq$b; zAe_nU3!?rPr9gOz7YH(TZ7PWy{)WnRkmjUmZ$V3#eQyzp7pCiQUXVUI=sqFT^xR(u z0eb2q2%j#lZSa&F8Jgacg9%yP*xsR%njM+g-WA%CA6U4UzLv-X!rQ$I_E$GAclY}v z!dEXZ`@8RhJ5aVapzXlOhJ%4bc+$|_-N%c)n}Gc})!U-LG+HbhmYMKm2gx z4{U@#yj*{puw^V*`f$43RPSxUU3?)4dirDka4gt<2@(`c;Rg7~{t=X5Np;8P_y!7H zy|RmEe)1_K_2%3yGZ9dXBxXj}P+D>v2RSV!RbNQXe>0np(E$)y)ttF%u7+OkB=wMH zsYZkJv%%)JDCc#=VkWiUpl(l!YnEK1SvpFw5P`1lL4ICy$K8ejd)f{?z&Zo8x^R(O zLjS<({*n7gtnUo(;76=x&q>Hz{Zx}ke;I-UpOW_A#3>WaV;Bv8hu!w=1_3PEv>CN+ z#7|4}3dW!AVU7sm%r=~spWWEOfdTu{@i6@i1TU#<=~=n?in%rvhp;Ieym>h+HMK5H zh_=PtDW)HI5vk`mo)mhZZtE!hFqlukK~2neSoJ|e6|ZE(os7>)4=P_=Sf<(7cv?Ry zh`6+_(sBB_M~uE?hS<>UIogR95q(037ncn+|3ZD zemYY?gx1)^cEd~*t=}qm}Wx=ZA;zRbnD{mVbek*s7zIM@L)G_))p2O zo;|@4f+DQ$w~Ts z4%4I77VK@!O~e=a=kC`8Ph6H;-wtl!x6jZ0NYCYQn6yc&PoPTPE^@qF@iL=r^za=+ zmB>Eb3U6-7RdX=D`PGu0S7R=bQsWuPC!?INEjrOl1%xn@vR`@oTeHVOn4EI`!dGnS z$q-AH4fkK9a%W}XY*3G&U7Vs7DdG#XTJ~uTBx3w{l zbbd63_!a*Su!u)oThOsNl?y!WcES;2N4Y{kV%K&2UuB#t!Y^akHJWy1kb^+*Fx*zh zEhsChDt$ESJ=9#o9*~WyYzY;e(QS8P$e++8w1g|QCd=!rD9j9>(bUe{josaGfZc%f z5}a^zIVTgU6g>s5)~u`|#5FP0zwGKTkf@7V!><|L*8_}{T-lzH18gMe19CTpAno`| zI8%$;$`i5jyBZy7Ier+BX_f5q6EL1nUyxI`IGsnvdE~$EYL6b#lq-@7z225itmdLU z>h(xnPlZ3J<|FF)QwYGw?&$b;hcMa|Q940z;R`rTOp_{3H-FGajT*;>>fL~@&B>^v zu8!1l&WL2Jr<$zXbFtg?P z2V&TrZie2EL)B&fJ#Vw1m#kz7?!%CYce}(7ZHPei5#A?;Q)%o!m}Ba?6RYlz4V^RM z7R5Fopw&OU>alDp1g)z#&cL^(P1ih=*sh3_=7Dy%WK>zI(wG=uRYbR?)|yUGV7*{B zu$T)_k$%r(dQ93XKSt{fT6mmt$f6m4tWB+&I1eUeuF?h%x!ASV7TaeJu(=4%rOX&S zh`o8+cN3JZVcC{Lu)r}(wQJXN7osXH6k2`Ja^K@(oRBD_^_ThNR$v^id%H!0c;@U( zU-j@`o`fzWF%w_S@UgOEYeOj9PVR9=6}veP7^Fe4y}_LS7Y#gk-qcXM9PS~*ritg5 zFG75n9hB`i8`iL@TF5od2(m?e8+``M2AA|wyGm9&vKsGU<7Z$ihn`4mm9gw6psE8v zb{OIfMAIGfgY<-!4=vpZrfnuMwI|%)(l_iiC<+3N5sJ+i^A~J4HN?Wv`wyRQGVtG@ z+=HI)yyl}H`Vg2e!E0sDC=xj#5m|CoO)nVP+1MMqfZn0RF;q-KpGYThAIT<2z4$Q` zyu@`g;1ArLq)r@ z8DfIfd6Y?6_EJ)CHxC25e**2{f0R>;*R*ht-|GPGP1GDtH{pjkdX#%enMTz&tm_Rm zD>q=5rDY={{G)XLq_zicJFe4jV=05GxMLvtKyaVLO`n)f8H+Z5?MLg8shN_(~qm2;lCbaRUqLDc{*y4mjBlYsQTa%&sqBQq>5WD~ zlK_^^rU%vEQmduXyUZ!4F4MWTwl}Jvq7#uNz1kV0u${GJN!FUw4Ip~@)#59I5DfAwNq+puR}HbMjI?C#1gsZHK32YlhH26a}-bn z_qY#^a6D3iNcJ3_>(nIm;&O@IKjQKDk&pj3f$cuJ$8>sCQFXr)veDxmVD+5w-o%*H zE`F3gJ984;)lq)<3((D14eI$<#594-xUFK{J(fD!9tcEz9tvt6U3d)K6hfTuMMrx1(bKq6SG9HUFD5^` zfwV~19rK! ztmrtkdj>5}Xh};&43fCnD`LFhDodfba&`awx<#TIM?|F7Zmc{=$KA-_WE!5))-4Jm zirK8)>$jG>am3!-zP;<{OPg9t6P_bA5Pwcq6?Zv@WgdF)W)eF-^124!APU-zdRIgQ zO>?cH6DLgiv_pqk55<%q$3f<1+dcrYe$l99!eiP18ERN$uIbfrH1o8Ma&_7x7NI<@ zTn@vjvj=sxOcarI`l-nh1MVAW%8JR&&!w=h_s`l#e!Ci(PSWAs!~rKRJ9e9BUOQu@ z+CCkhffQ|BAvXq0v+l%?E*#j${m&2KB*%`n)@hOqYEFrhhSiAQU=41Mk65duZEZ%= zOAKD9faHIsrSCg(C8_GQx^@CGY8DLT{Mu&k{6`*0kod0p0%o?Z6Ke(ePh4y5VC)cq zc%M2wYferUUP}C{sRB*p=eiZ0SJ}{d)YN1?Rl`UEvBootGqIdiOe^%on}9sk;9wzU8qvfg?B zfr@14%7jXkkOCs4|CdU^Os|uH2>@G!Y=ZMzF@ zt@-*h+WBOIvjj@u=qiIF&w)XAKQ6Sq6EA<4*zHaNl}psBPEB5zbCWbGO^Zm*X~L~q z#(mT*Kn`z6i_0JWO-dUUA?LYv4>W7j2vat3-$d(uX&}c#zG^}{X2{j!D1@oHog(F| zSRMby0{$r5V0htsyE$3RU*-+eW5>4;+I+#e4uw*#hFe>1UMSKK%$U18(KX+zUzdYS z0E@~ADEDLtQ_f8*S>_OOr|9O8^2%L2%*ma+K+U{E`X#FQOk+fPLpyimIYd+Rg>fBp zef9RrHE+|&xd)f+%nB3090|(I5YU<`HyX6D&Tn~iRgAEp>!1DrkhNMaGei}?8LR*n zn%RGcu+UyS`ut$`=<3#u^^&NIK|m?F1@Z zlWYrpU>xFriF+(wA$9;j66|bT>;`|?nkfvp6lkL|HF^p@w!bs@fAH_&wP)$$`65Ct+1s~5o75Et>mzSo)Ipndhal0f?x2jyPOIv zyZ9zMm^V#uq`64^8v}fh&B2Q;=Hil;O`0lEH^sbOJf2K6x3H{d%t#Air%*o8e{8Fw z&N@&rS(jp1jh)B5%s8x>Y0@ziqWL%2y(+$N5%>TjvP>jpTs~8B<l)y z{V7L6=c@$feP{8wE`EHMyTc~@x!_!xZby`Cm4iLumIs_gHvqkch7EQXrOR|BGS7Qa zDYRryaWlhcJ(gXJk8?mVKr8MMSPF<^CM!PWw2O1LdSnr%vSps0vMtj5$|`zZ@ntN9 zDqwSxv%v9X-ZKxx{*R;39mAQafafvo_BYH;#LT_i0n!ZOf!%c^(ng>)CUYpL>H7)j z`wM!xtk5XuDe!oiU{?Z)fHZCLq=Mv|19U#;jf6Dp)Uf#G*7~IIiJ6S;tU{T{JW)AO z&GcrSvqR(Uc>+_L4GrBGeJk0TScpI0_bj=n5-kUE)>v*O)o(4qpCaC$z0rho^DOdY z8ETJVgv8mXBLFI)OgR>eEpmp_oG^tFZjR)|2xKV19oVE|)>1*Nx{R;bVuYy~=g9QJ z4xAal*99)OWr7O}-a6z(G8Z#`g3im!o`8c)!5A0Le{Kb->J|O3>O_9yNDDe78zhAC z{SAl2Jry;mWaDQ0dJ$Rx^DtOLl2^G);&6!GNEa9#v|j-kNPwF`LJN&~Hm@#u-<>{t zw#u-nEli0dhmA*;7xrU|vhR1$*{OZ&~*2=J@ z;(Z;o=OWR05UN3J6h+_c9E198<|4sY_~$WQXC!Z=(wN(p-h#cz&kRg?9&qY3(2&^Z0~_S z@@kE#Wx8X1vkvjN73R8$-dRA6Elp3f^9uo~XY`4@|Ln6BB(#(eb8?9dwi0Gb?rzmt4|-;kQfsp8R3!msgMZ8*LTa374>b(I zrZj1~y_JPdojfG5g-DLf~x3smiBdP=mJ%)?ybnso$ak%++i?!@w-(lDvnW^2^1 z;w(BJIt`AVy=B^)7 zTciUpFw6)J5RAQl3q}^9yQQ8k>1*I;MA-77bO2;Z3!{)9Ft==D>KUm?0`T7o#t^Bc zE0{v=SJ=+wCr=LS&azQyyGhfVzo8+8!tawxTjki!VKakx3~Mq;k-6*V;_{W!a;gH& z^6CCmCr6P#4k189EyR#VyEyg$W88M9UNrwQB?$a5GfZGMb@fZTI*}6 z&HHYf^f`a~ks|x_l*2qoG*pukO}FRa6&bHBZz1c|ZBWMwv!T)A@vK@sh}w!HMO|yZ zgMOft3cvA4;J(HAPP)EGJnDB28qK50jmjh5IiK@(U_HLF8T1QutDQ6>aXqEsFBlDV|KV`b*ev&(%5L+6{aH>iNl5?X` zk0-0VvWpBno*?wx=NM)N@QN_X!oTAaCFzxTA?He(`tU2Q_=;-xkNRO;Rt+<)5-ogb z55>#pMVcTaChpTjLh{Hda|%qRuS?81^xw_5Z})GGq>gO_Mij7&c)3inWedje^sD%k zC^;+6ZkVK(q^qAP&A61Tml*9;1-GDW^N@5lr60;Ojkye^RT=X9T1KRkY_QiGWC?{X z|8U+S<&j>em)Sd`2`LwH81riR(uhD|oy8UM%6P^eEso9$=>$xcd;6|} z8K)>B)5w(1+rsS4VMZ)$VKCqQW-*~axD-MXG0Mn|b}$@f@JAY3e!M+fnG>vb`g>8y zTJqo~nGHQcCFKE8oMj@W3^@8MywfmY7#Gx@xR=C4vqrzSD+O-{uJnf>yMEV*0qBo5 z&s5&AI?mO*fUMxTU>=cKrl~$}MM0^^RkJy*guUFMm``Bxon+cn*2-PZW{J;3xDP%X zSa>uTZOIy@W!4>Sz;tG)qQZH#!0mG@{m=BTtDg2@#t}h_fH!$ww<01;b#PKD6!?qB za|_ZXBq;J8&A9kjHBw(U8I>6DTUMhP#ei@$3jx-vT_s~yScnsf6= z;$KrHA6BoA<+VWD&8`;0$Lp(YGpsJGC~&)xwe1bZ5WB{fgUdcw&VjDE3|6zH`Ys6y zXR-}k+8Yb~YU*Xqkmn02ib$I7noQrYTiL$~MvQFlBG_YAtSBe%c!q>IEC+Ff&ga!w zG)Ct}r(w1u?S)u);QBeP5(@>2F1zwwu5_!&itw@|tB~A2xF1|>N3)z1JS&mRO@ww4 zC#fa4UWTL6r$jGgr=+Jb;J0K=%6L5c+9?fDa!6P5m&QM;PRFNJ&?NAdB3vci#cE0h zkf9#SE`%H@PcY06MTNXIkRFoWdCE7VL=Pi&ibB#fiTw?tp;Kl5n$PVsMNjl`ZFfj@ z24mR|Jm>ni{lDz zR)F6zaJ`;cTefNrZ2h@jwrdILVBW0Svw?N}e=dC#U|oAIwOJ87JTjzVg)$L&z4`e& zL=*#pSi@m0wRFxuh(dE}XB?XV9-N_|S$F_*06Gq0WD=lhFRv1~2S+QIVHN4g)^SDP zd1_`Mmw3QZ-^5qun-fena-At|&@P$jO9^M=FkK_j@I?gKva1nV6 zZ8m1z5?87hX*q95V7EG5B99bQ$8G65h+89n(# z0nNb@V7obu`?d4=amZkRjDo@-g9E}dzoe#WeQ$T1|2RkNa?WVRUZ#m{|i)s z(_n7}bFfp(Qad5smlW&eSW{&Hr|~+ZBK_t-^O6kbB0g@MHQ;gJ==7}hy8KgU7wIqs zBN}+MXE%ExDt?vmfyVY!m)cJB*clQpVV?nC>)*~sRJ6G3^?1VkIN^a8G5$yf@IY?OOd9Nv+zDD`Y5yHI7j5w1vp=!8B68hFa|jpdJDn@?(2=_@c!}XW!%Z+ZIXzo2 zVxZ==rc-2XaH!WGmxQU9-x#@js7030;lSHGR5IGNEQdDnR6glf!CQK(T?}a8F2C0< zk03YkY%dq3ZYMNRa_&<-hiKH zPQ*3H=6db0tG;KwjtOlD%PzHxAr0DPkGkc^CY{PBgQ}G179Ekmb*7THsICc3>V!#( zg`D(a#p#E}bC_{rLp|hzbWAE1`tx*wq7g1Evjv?RAzZ5!65c7|9=29m$+}rJ(!s*= z$AIazI9DZdUlm|}T-L@vtjg`Ulsg&C?o>GRu|ono^5&BvPh>pe@obe-Ht8BaC+7k! zN1*v6zx%gPbso3uf;l0)ecFP^VE$KU7VK#L16}!;Ne)%9sfjGgIzxOlt0FHc4U)y;7#(^3=6>4zNPAw*)O7P z`&8pfNCay(oS4!w#x^#)v=D}lc1WZmi zkCrr4z_4NvdaSx8qj+b?v*>);SDjj7K0e zT6M=ylUlX!SGsr4Ak_~Q$qB7Jej*EZn4sG8X(c(8&~ym#+p1!J5rI@~qB^>6*Mj1= zjPs57?p#ewnyTt|OUAwi6g1hZ(?5HliJX$lb{Zq9qO6&#!8}Q_XUP3*k6ifO-Y9gF zMvVpCt4WG{WFv{5cASDjVs1{*M06l@5Vx=fQ`OwsjbsWd^s2Pbo~93q8YLY|t}R~t zEx+E(_)^<0)V>SlOCFl_X2tpG;5svB2uzzFlBaN8SAHw~vtpYvdh5{>>sj7dU`-XvG$OK=up=B$Cgy(ZE_*C}gQ$r-0=h>SwR^~Gb z=%kBtNJ^v~RjgZqiUV=E7O~8?K@v!JgEO4%%whj{II=V!OB({iNEPOIBGuh+0`XFd zg@3~BAi3S0Q2>yC)SR?aSeE~l4QxE6;?I>yWc{c+Gj`+z6o1WDB9cSt7W*bXRBg-< z3xc3jAyDZ1-hLi3bJWJpE!lBV&M3Kt_o_k6T0 z5C=FNeFK2xlL>L;cE3)?V~W)Hs${zO=DHNz;%qq*6o-tVB>IH@3mc_v zlU}L$0>ZGUG;2Ke6L%FFq4Oq3(q^t7BLHOTr4>8?Y_AalJVn^JJ%t1jDrX{Fo2@>H z3CV9%H#22MERTfAD0lxA6>8e()~g`yz981<58U9`f9nPON36(Ppx|*l0cJrS%927U z%v@LPulW078*PIhpu3&9FUea0ZguQa9kU)0h$3^A1Rmq8sC!U|?+Ihsc;-T12D)Gv zDFh(6#|~)X$*5X=5dFrf?jFX=7aDV0UL?A&ZE$BI&hIZ_Z4W%CZ$$0+`HM)KaVn^; zFW39fY_YqE27oDhwiS3DLY@K}Ti=eI1-Rv}ZC_;DTV8Z<#?a3ZnBSf7vv%?FtH*;> ztP#~7)ZOHtNz?Un!Wo|?&s?uPPHjD9{oFueZp&o$xSp^MtYzvvY}9$W!rr*3-KY-m z4a2`jnKUG3mHD)kmXFK~{!74_Ev6PWw4I+uf54*2zjTc6T z0Qe4@a^rImS@B$u7Xv!{?qY2tJyN-J88Jop5__?-0+hl9NTKsrA=&M!G z=u?6*Do7NYIme!#)){&WNy3RXK0=}+&YuG)McEtc_p3_)n}{FFB}Nc;F5q#N$0Sw9 zBXG4Hc}bHt6w}IGHwAd8qIBr*12KpN|m7lrKpufMUgaj))fEyR4-fqT8ZDWw+&eqtI7O^>(Y}V^q+5`fC#=q(ZCftYQk_e= z)k0ZO*;5yMS|F;Mdu3oWz>jmwS-_vs}~sGLH#D89T? zUd?j9RpK_DKE=VLPF5F3H)zXbzj@sZRmE*}rEdve)4-jH9vNc!*w8t}rNL+Q zPCdx5bd&wQ^IuuhGM$UXqWo?#qE$n?Jp5|w@w(%6h*O+c-<5>}$O-hza4At)R)xDN z#Y02U(WGM^;?opEi|~8f89o<$h}70%><|)Tm`mmTih+meRzSB;%e4KFz0`hII7N%K zPFI4Xb=8Ud7DPM6UtCP9O_`MS%?J_TuT0=nw8S|DB$vs$LH!I9)CD*Vt{ zC^-U(t&+z!ata71YRP8gLQ@lwm>5@bUCOaO@v%;IVlkL*2rV@g!5aPnm0x7;i`3B| zhofZ`x8;>}dDBZV!H++Zx~~C`Be2_s0+!Gct|YS1RgDmIA%|%>pn;Fg6D~~9V1WaL zB{#xsn=?Q)Z;J}C+P~T|3jG!W+F?^EIXeuz(Rc~uWi|3c2&It5v6d9GYtOg>A_Zxl z@5$n(0Nxc5Qh5vFs2Z*bdlv*LLuHVHGwZispnPd{P3wk&Du1VAaGE)R;rxGN?DbRM zx?kIMH9FsyU*Ti;u;EZ7YH}C9#5z(NYNdy-jNpDbKro@Ru}j^0tdA_X*y-Nl9MZ=O z0m|=0y^26fNndLnNeopstsJp~Y|mwk7grNl-$O8Igu{EAs)lc*Bp``rm|eT?1HM0N zl3yMhH)B0Y61Vd+8+7Z0oT2Mm^+y z+_8}Gc8r(53!cc$xSsQox|a5R93A>Uzjh`;%U~Jbp6Dzp6@5 z_{-k6&i-HazF&_~XqG*W^5h*fJ6+|6FVM2ggsZI{6q4BrJTC8aH9&955OboqV9ov) zXKwfGm$vt4cl;-cmmT3-zI>!2_u>wkCDua%oSM;k5vvTP@LZ;8dKUci3)ko3=Oh%R zCZ?0jQYd(k7%%jfu36|n>5LHcXg?tdZ$!Nz;mwBh=G=+3G}C7{fw{GlERbYKnz!(w zF>zmt4Ht^#6{3=b7b;M6+*XCU=5l|(WQwzqF>h) zxt-a>Qg8GP>7%AFqTpfD%aVb=gaM0P`wN~pwizi+a+&DSaHna`Fh&tPJgFwni+TWC z`D~2vfM#nC5wj!Q-$b|kn>np|EdEt1x6ub}&F!*$ocyt6fR(?2#&j%t{&^G}$3Eti zf$uB29D5*A6SO#S*8dehi!JD5R`4R>5gPgg{ll%A&s zZ(4$SZdV5sxt?di|CG*@A4^ndPe;=iN`e(#Msz+V*;tqxnfe-X7O}}@5Av0ecF+9_ zi03n7El^+>tZYgGFbff5+%J`05^Hp3^jB0USzBCZqWWqk*myO~QMdtcFm*vo)=KC` z5H~GX-8;SEeY{=(%|<%3aJ>3;x4%NgU+s&d({B$_H5vd8z0fUWa!lAUCoT%U;-(6l zMvPAQD7sFtr=F}A|N0-@`!j*svjAP-6V@`YvaO9`VzC<%nx+d+7c$v~vJQ+$WA&?0@w0tI8LRGqeqq?s*sO3>4YB72hl~Dz$JHJ^HpHm1T9wSJp zmI@mb`PFb!NqThS)$x%Ru;-#Bga%o_@~<=UnN;P)gR-L?DjC68RVZ7*}&G-EF) zrw%Q9G%q(OQ>oOcUAPBQRbNGX2-L6sVD0gbx@Am89690ixBX>pHlTHFS1i814q{d8 zX_4qf9Dc%p1qOF^bN#1$s*ISq9)9 zy@)lxIXGYRhM8BMyQ{gAB-mzttpmz4_+xFwnkrxj8m78YBibk#H*=(ZHYGTL@qUBQ zyb=l{0?UpsRH~fTg!MroD9z~={CihTkEk~{T)^u=1s0>{*EVUTjB0<~!Y_3n6U3aP z{#cdVb1l(;Avshpzn+gLHWd&gu!xE4kk>TLz-8T4p518SS3YZP@h4)=iu;QNMkc!a z8a`b42a`Ym%-OHpA!+gkSshI6=#MvoJxHI0dW0F+hSaQ-sn+mSPG&-jx!O6qqvf2_T zqHp9I3`j&THlhvixD{U-b4X4Yy_K|Pq&wBIJI3Tg@%cMdSqL{sWCoWBo~Tll0JFj5 z1F_qM`(ZG>4$9Y_Yc!5)&Gf4M8E;l;@Oq@!k-=%X~n%8 zs5j9GyOO%Cn+Y!--bqKxD^u)PAtsJKHUKODJbb)VV;y$#qQBY_#h;OKWr-_id$>s0 zJ`q}D{@wKDJH>YRMc6kq_lMLGketNIPUbb|H+KFG{t)H9T);vh{O0S*qRpY21tEYp z%7s43cuQ8M(#WJJPA)7~U9*bFz48neBIX$NJB9M7Z)5BDJ0(<`&*jw{bCeqD9M;Ae zmDbnj@br5foFoJ?NHi&Sfh_mb22OytVVcP)X2?z>fbqXrMcwZ&cz~_iy$JU5wa&ub zVKt;T%QD2kz>aRT4I$BpewovC4WQlhg_pG{nX6&vn;1r6e{Xb}EkMG!|sU}62t@#eEz z=|?Q!S={R;gnQPVDbDsAVs4&|)S!0TOUCAwIk{CdteQi6%nJpU&PdI9k#3;@7F-+jow_o!_Iz7Z0T%pt9QR)IcqmQ*cSCHMv~e7a(j0D>{S zAbFGoAoaO7ku^4mKEHZ_4r8UUe4?=Qgca9%kTq6Z?bK+AwY9aS zrDm0WQ%F9%6<(Tr*teDoNQ&^1TV`Xj}4;DJ)Wzy0VpWo$`Ng$B#%q^ll5V)YPRFL<(v}Ik~uwV_!bfCgDmUaqXvKx zmfQJ#qsT<-U1Lasjk1Xbm%7co)yQLFU1tDm;(zh)gRk0z#a<( z0hEecx3g7D=8-cZcpMQIH%Xm7iuYEkB~b42VpiIgh^DF6B$t%DaPe=H@5CHL9C#Sj zaqH?ax$iY};a>n-dVd&ha3IbEFdh0lSN^$3#SQvo+4b%*E7bc4aK~;#0c(VxdfTDG zff0&wgkxk6vr`W#F0R-vt?iv=(G7r7PeG+Nm^ZskN;l5gI}}1|#Y=_fcK*`nODf`V z-aedyULlKpCQbLClym(H${2c#e>`X~2>rs5@kZk+POYxfjx-3pvfBP~=P@opt_&sa zUT_WDW}~!pSSD$dUdjaB`!$)gkZ|$#$luL_bj+FmWs5!OHTO~MR}^{mRK^@YY32$V z!wO_Afdw#Q7U5xz@D7yUN{>;NGbj=}aiYlw_1& z0@Qd;_lg&>6rpzkC0}iV59&xA(M0A_)kdAK8VOE~)95z4&mRfCvES#aycPIbobBy0KPy$zZlC-Rc^gC8JdpPbzvMy08$pMI1JS zZ~b&Oz>o=;Hl}=*gI)T3@k}%jx#NVCKpX{3B_C9dz$>C!g5DOmOx;XFCz>%RH_pKr zsal)@L|7Oga8E;(%20RUil95_aPMBWmS#tk ztml{U*=Hzp=(5kb=gTuY#5DGnaL;FY&@tdLbIw0G9JW%2b=6Tc>#w#T@~Mn*(ODs7x3UH@rTohJ^SxWU7RhsAeE(o=@sf}x`j?A)N*~i!(Y!9|qlKjFNBHbGzYcr-6 z=3AI=VZMd=n+WsYRAu&Oc={3X_csuGaO|N2h2UCY{t`M(_B43*ZlIUoMHcecBlnWV zYi?u8*a=NheR)3@+{aYGVstl?bgR=qZWPc-3hw`dMW`C^8RSv${w?M+H-NVU&;T$W z5&lfw@7&%fWejF=NNY`D*t&|)-I@&l9}z!OcdE6OoVxmQ0`vQiSAyJSvg>FdHg(JO zch}{}wvm}h4~;}+#8xCBqdV(TTdL~bIw3lz_y&L|-|v9;2~2zn}(&F0@T_IB@0tt$NkwYw-kU3&>dDt923 zwnh{iE3`r4ewsz4CoH9H4mhVFk$1v=I5|}o#*He4NqW;k{&G;jAtt~_0j6#@r+yiS z0SCyZ&Mf-^5jXwVs$Q#lO}82Bpjn&nVHDZhnmZx1z{O;G;mnX5dab=`IWo)Hh=Qgj zXsE?fP1mTi6y3JkEZavTD>2VsTDRS(cfds)Vvi}mTGmpu7M+!lizH-fVi(3S`_5$B z??i=4M1FQqz2_f5uI9O-Zi{kY+tS-!2N=1ZC_6ALTP^Xje~T~~eZ zt|nRfGMUmlN|T<8p(@Yq6bEPRE^#iT>kR7E>C+d7QWbNkujbUpN)B`sv##3{9X9{^ zT4MCg$vE^Bf(46#RQ7Cy4Vtn+Q#NSI22FK?=HCr!Qr(}UIlV#Zipf@xK22bqu0Kli z)fs%xb=Ld}qzpGPfESQeeEJ*cDX)%BYBLGwJaZkA+M|GugM7|1Zv+UQ!)v4tBg`O~ zB0xz$jfN8}&gm5q@LW;Q=}ARns(exmj5TA(?dzPadUae8OkC_h>5+;qMxp^AluH_- z2Qo-u79cjGo}0QB$)mR@KrR^H14_^pfgTk^FrQ_b*CX;=eOl|x?NdL1ZLdwTSkhui zizO|VY>OqgYqI}e+(LhutCLdoSA2tf*_qo8@-?P9&>7^+4oY*cahj*noc@W^R1{SZ zb%ob&R;Hp~e9L@&;(UoUOK$JX-|A^$<=Sy;@05QG@9;Wv`vmgRTa<56zD4;KU& zAJybj7btOwoa#yShsF49@qEWQ*fZTPL-X}Wz9tuF8IJEXE~Hte&c$%v0(J}7Ent7j zfZal13xO>Jwh(v|A@EL3#(V*=mI;GS)n7%(L`TTC>)7XPugzm8(!9i>6YLiHzCf@; zjTKoG1Ds?}SQ+Lm1~XesyMdT?ow zrK^@tE+usqOfOBLd~#j&u6hmUR>ILrW|o$u`Jsv*8$cvg7RY0dt&bP2>onV|NCv3p z4dfwfKF#8)Rkp1T=}!vQ&bhc$P11&>P@|j;8CC^r<#X_Ih5{rr?GehsJ>me8d*IOd z91$KR@52nJqpVvUS$2;Xt6cN(Gp|fw`NchPbcOw&J$(pY!0iJx!^9PT3zURVkdzX? z*d;v+#~x<0&uq$i``g1&KlkFmqt3N@^{d~L`S=qW>g5>Kdma@WpF+~y2U?(D=mmWVUPPPz)e56Pyj*V#nkb4g zhO70(rn>gZbVa=H`&71r*L1PHtH{8mW?qzT{XhWUbfbvT2BATL{g@dC^g z?_>|5yc>2IO22C9S1LMJtBRRGIbFBTotkyF9#S&F!5q2o=Ulr=bvEqe!52!-5ktXE zS*eK2!ka%K<`;-?Ecxjup;zxeLlmaj_=ASd3FUGL zU{H~PtV9VM+>5DxNxRUC5v?V*<-5|E5i6_GovE(Yr>NXiJ^HkEs;$u*wzpVpFCgS zZ7LN5Sz3qK1%cp($-Ny281g2sRhcm+Q#E^%+^EO}IHtA*PB_4FM`*6{96_KrIQsyC zL+T<2yttiVX9jc{r6i53Bi_FDp>vJgxD_#WFLef{&!W@}ve{PF8P<&=+^n6=(O_7S zs6wtR0f5@c5mB?t^u;M_;e<@+LUAM7@6IC7y;*$oO49ZeaRz9Ry3yT-_j55<9n}pm zM*J2b5(mxt5C>aVSRhmxvWlMu;6^6@0nIp?U>P>^EI~B*GrF8s= zT0+y0$P|{EC&Z5kfAu+Qs$xE(3N+hB!>G=g9rlP@Z>M9f2&mODfwpj^1_>G30w?k~ zhl=eX|KI=-sc#4+uam+daoH6C0KmvX?W>1*<)yV1B#FY(XP>vO2zU+toFM|J&)L@3 z$wUT>2&^dAfQlcI3Gns3og6qYWJpFDX(~}-P9}k2tST`9F9-!Nb|kOSILQ&j zl>DYR7E7N@Uq(F#V)@JWz=2`_#t8T*(D3yZ^BE1f)Vc!s!uTjRBx(*tBOsep69Bne z;EPy-@(wn1g9x}4{gxf1a$SgC#~&%(b$uuF*rO5ykMHBt?Fpj{P&NXHgM`{sHfh0X2neFp-s+r2Qn|aJdW(WA3R(gMy{R}E8!ZhnR_6%1 z_pRYjOrZ)FMJ_e)qJV}LgPWLojn6Lc4{U>b(!E%@1JC-v9?=I@CQysYciolqnu?p< zilbI?nVn+R(&`d5%g@1l|It*a2wFA5q(HE_IMLj$9S!YJ-|5;?8E?5y)CgRjoG7(nM{A>3K&D$|fWm481{XmJrUnPsF<76snanbVoWmav2 z5nXE1DCy8{j2}$R)qGd${Y)&lw-p%^q?w}eODpS5)$Kk&QPEvRd}7S84NtV;iEHYb zT~{&kuI_Ms%gigOx(&|vrfMygB{hjy+PHNLlCL}`3G%A$>*rn?*@TqvfEKK?BOD+{ zQQdB8l%y#(2Hr`#?ac2dyx_M7bqD;l$@boD8I_#WZ{qoV<%_yo@~Q||lhE$p@jXW} zkSrIgoDDQvAT1KEYS2fffyM$P({ZyXvrQE!wZ7r9PukA(d7mnLH z!b(YXjce7P1}T-RS?Vaka&4b2q_vRNLRt%HEu^)O){7>eG`ZXj3*=jx?8mm{B)u;x`K`Ev&S#(!xp$E1x{9EWOGk^oo#4 zKTHMS=;nxc@w5Tas4neQ1Oa4Pjpe|QB+Wp|GK5l~kIyaX>^WoVwuPiX9slXbca zNXd849yKZjN$cY)uQMgr_7aNH*q@SBPz0ytg-pO{1ZDRvPHliw`@M@94fq6lUYjJq zsmd)+aWn;>7Aae#Y?1PFL&}?)5PJJfUB*2vBHQPHND(j(nEw8we1F*tur5p$QR*;k zi(_@qY;-k}e*6mGUf$i`+68ERfQ@{B4}FZ@f*cESEXaAXAZKH<0&VZsWz>t(q=e%+ zUJmCd5-W?OGd+-+;bs-*QuE!lL3DPv)9!X!cw^y>g*Q(E-q;|z)dkVnEDbhGgE27Q ztH?cj4k!E+LAT`FF9PIA)$;7KK0?9P$x$7OPDs?CXHBOOdd~2+l3cTztHP)y&kf|m z_V8%*JEebq{QK_j-~Z>oZ_uaz;{M0o_bmAK9|z8#cb^VETns<4WBT#(F8F+U^ZS4C zNqecbrc?86MJ8GC4KH|`_>Q<{`NVt`zZbfA(fpJJJBiCkv$c{rneAB7M9RN5F^(jt z`V9Tv{!f9+*z{Y7T`^Uf8Uv}SJs)y0CTE!fTdx`-sn6;Xmxi_4-7EVMvJVIy%5i93 z^%T#sA&C75*;#<*IBdbBxk=FoET8E)*A}z3xltB+;o=WltftUKTZH_?Aic?xetH4d ztviE=A-jqDt|Dcg6sqqXhlYgzj+$Q=lB?f58u1eQ7f4iXc9BS~-4$IUQtVy*X^lKr ziXxNueEH$n!w$Gc_wkKsRNVkJ#W#q6lcV_gga&{i$CviP*kb@HlI)pYqLrH|ru)F1 z`ec9Ga9)gx-;VcCPROS{kywaaO2EwP*3i& zKFkigz4N3Si8&lpWCzr1oYUZty6EuasCkmWB8f`5ImQI>TN+$%X@u|+yqH7(yVAlx z4EB49jnxRtBI!2rGTX80$d?k<(h^fXpc4Q+PyQZ<*yET0C~7DvnTSt4OyEWhQ+JZG z@C8;D%sd=)8O&V#lm&)Lix`+zqCI0k_Ea2k&p4s-aJwQgVzNL#LxLxW@xv0wk-4}_ zQE4Rc8i~17BOUK-S9Qch!lk*&3AqRd=H%O4*RX=l?k3pXgpMTLup)t$TBx4)850zI zfT73R!nzEN8Y#CW@030EsWYoEhrj=LC8;bHdzm)tLz`up7E&+YEfYgH%T^@ypuAk0 zyheAvm_tCnmX}pi#|Z;@>oq38qx5b>xx{FgfjGf4P;mXGMQ}3y~}LwMK9w$I2B--1ZqZ`VP%n?!mKOYPB$L=E}Gs1BfR5K zhHm-no=xA}UElfto{-_~#QA%7elwiS={3I{yLZ>{Zih9Fw6vR=c2l#P5Il>Cmb&*O zrI?DMF8k6%(0yi8VSIOX<>hBK6~vx_{FHq?cjU)8zQg>Gx~R85==aX0+AU|`BV^y0 z_`>h{z2h51I6J45cQyP<5FS#-bI~i^eA}3LIphbBp$`ZhsJ@CPUvE%w%s8GyF&|Se zB>Fu=1bX~F{pb=$AM_keLK0EFq#Syx7rlXsxJOPXXkG?TiC;a<@^dLW)6&z)aDu3J z($ynRFtqx}>Rpxd9XD@oRV9LJfHd zU(VF5XUwo1H!Wub@r=%NDArbvYMTJYB~f5z85$j_cqrIddM$Y@BAR$nVrgR1zewD) z9M6nIY8k^9OPyo^7A9j^#guApFgzJG+ro%a8oT)vkFi6O4cEM?Z`^E*3Yyj|!yZj( zL?EPTy%b*QWDVJPV{4js6K|YYcMVr@D?y&IXPPzGObMjK+KM&C#z!0vcPg@=DnGDv z47)NiqUA?EXAsmkx!cpg1wO{5Dzs!Pg&y>)q3;E0zGx6#2!S-;p+mm-tyB+%f zJ|Wnlr#R*JJ%ApRKct5$3VDwmSicqovNp-X5z%f6#9|g3ry9wj8Z$f;4Ry0xOJvB{ zG+47+kquL+UmQ502RSBFq2;}n=cx*0s^Cq@5vnoXx}?{Ls0=oXF-^Xyx|38{+ARQ0 zNxv4v&KCJg2hXBA=y2d9WdKu!=mbPx20&g28{4`fmjc1)P=ZjX6iDuGXDC2%Izbll3(IYa^+f(J*R&BHWeRsMF4mWUJxp&$qr%$7)QPeVjH6g4G_4Q ztG>#S*TG{t>RdA*Ry=Zrf=arpnmUY(b0?ts=!fX4ps={|2cd?bGgBoa&6Si8W!_7Ln2w9n zWOZrgBS!!~H?D9C16NZFkos{i=S9SVekz%*?nQKLC7KR$gv6IWnPeNze3==Z&XA}G zNwIccez<$_8AQ7TAu&NRUx`KER8Ng)0J1H{!;vklR#ME4RMd#005HUvSVHkciTNQe za3BF=q)-H>fZ@47BdLhRq!uQ?#ghq=UCN#0VO!NBb46r(Wdo#M(0t8kU5Xi-9iS@` z5{}j9in}USxafppRfbh20~4(vIrw4{M8kJQk_N|Wj6;S3DNVklmZJbwm}BT=SGprb z08}HRqdF%O6)E``uN4L>3-|n&Wbt3(dkHxx_|Ri2mAaB{40WloXOo z^^-AS%GWhUk{qX3WZ`(ro`0@jD(S&IWE{-kjh2@*2#~`85mpvcb7~6N6_HT}40IZ` z`s5EfP)is8AXWlTJ}T?UEvdphvU zM*rIAUmN}Vbc0@P^zU-fzYXJm+Xc47bGA*at_?Z1A;&i4*oGY2kYgKiY(tK%BVuhG z5jN!bK|+ozfykys@4T(JOd`G8c?3CZo#rk}qe(hsIL2G&Xo>~z$h|;vmePs7>P@^o zLeM)ok{7-eH^WU+qy)onat)FbU{f28eP%CxDXIYLD4P(0i`Q zkt^oS%64|%cCf2cc3V<1!_EA`Z+1q*?1o31jum>cyuZ76@sjm-+iZ?cI^cX=)%m-M z3wYF3F-jEPU>604)bk)m0rU=NNZgi3j_N4Zg}0qS*G29bMh?2bf2-7BV@kb>xHi#D zp8P_+UdLOFmM?3oxyoNKFouzFwOvSu{mwCw%ViGlfD;!K>zLC3PUG0I;EFhq0L)m3 zx$00mzbI4c2Y!MQ$#vFaTpTTuJeI3XUKr4dLPmL>aJ(G{@6^s(!`rpgrJjwQYpoqrn_q|J#-&0=Hby(<;33SlUUj`~JVX3X-#%(;CR;MdhWYVtN1;AEs zn(NJ!U@DAb_MPE{DdlV{mNrT;ZP#6#BpuaDDW)_9le7;-h4dGrWa}K>>Wx8}XL9MwJmFtt%VRNY9Y~et%{Rj&4?r#r9!+!4)1#`LKBoDRg-|#N}eSGKR=sbUMK#KmNK zgkZ}{?P>_tMYY7?sHHY=H=rQP&59sGq05G5a}}2c&_RZusGFZ5@Ks&;a0{I4+M=U) zaz&!IDM~t5%7li*?KV1PQ2^$W+FHhJt|BPKDr~E;t-`hn`>_=Eo4RE88C}tG*E36F zIsfz=`roTfwIAJR?nMdmTQJakN3}3&O*K2qEAyOEXBn;TNV)J_t$(Y7n`LWnu>wld zxwoTZ7`4((c66&SJ5!h&8_&8|mstHH;s*#ilpGTtw9KlWrD2wiIN8ljRW(tBsp6el zt=S$dNS>bKBdyBD@;N~AMU<&kX|d@0sZ5t!;AEl`U&^vGsEp5h#K9OL0{nowp@ZCh zoMuxe6O{>MlT@R!`V|=?ht3fL@CITJjy?3OGF#T{lGe@d(jsR0-DDPsona(bi{T+n zZ!6W}xn0TKb&4ZO^}uzPnKYlf7q?L}U|sE~>J$-Dfr4#CHB0E*ui90ojoa)D$V z(*C=(a|JfERCGU{hE7j>1+ zGUp2OR7&)wu!b{bOcY+GLZ|j{p51yimgPfJjc!+pt|C$jsgdd`wJYksN8z=JEurh^ z+}?89^!mL6k2=>!$bu>4~r6lR5esD3T*XWbHHYhHyUmXMp{ax|yWJ=_C zmcKp46HX_S@|W)!L-VnBU;g$SO+w_Azq^Ef1v|fo^M8ks=U%D~e1z;0&V5X#N%HV) z?L+8chn7=5Ljl9EqMu&_NTwAm9eOZi75xZ8mgiN!`a*+SG_7p#G7QEQjDEWJQQ!vn zriz~#b*Kk<#p|!L3j+P}cNf?9LB*RH46dvAnN|(Wsdz{*nO1ai77`a_Tm03~y3MaH z6U|k%`kJ0XDP3+&c(0tcCcUUwWeuuk*L{PE*>%*UVt#HmsheJB4eDj)XQO)gb=IJA zUTij~niFviYUZSIqnf#e+MsShk~OHC6-G@eW(0DBia9agpk`KKHK>@8olWYcq;ZpK zX+__lURvoksg@PuO=_mKW0QJm-PkTucLu4I+|E%6w2X|iGW?dhKE&hz|KfW*HaQ9Q z&URhqu#bqJL*mjoL5zI}=v-|&x3;Ouh*hR-3GRJPw~pu>Vse3mi6L6Mgwr^aOXjBN z1-Zp!X5_ee6I-o}*##HkCskVcA}fZcK^C$qwlPa?q?Kk=I__ga0}#Zuy7N_5f5DaQ zBCh5@!BYq(vDwEq)-#-yEaf@h)2|Ia^1-e8uPM>|bNX>qmwfFMGnGuNrAAEZSLwi_ z8vFjE5XiDXlO?Ux=J3psZLYpDy;%^cpW-PKXQESDGC(H)-JsxJCyK@@e>4+yJ5x?p z05wU}SPaW4+-TGya3_h}$%vw6o!T&&vs0HUOROB75OfKt6H%y=JFj$s&yY)OT?mzv zc)M_R==%@TYuVCF)QY9n*RtihX&6MG;mf1+nt?HNu4S}*B&ne1McGvuxW#-1Aef7R z!elDYH4XH=ZIOUxocg}ZX~9$Hj%L#7+#S}=d^5u!gX{(8+3U|6?wz)~%Cz}?oUOgn zHi~blK`WXRPr)WC*JV|guBG2R*aRrQ)Ng|_g%?c64b#_e>atf!g@OrM#zs)}S8XGx zR#tB##Jw@F5j0N=Y=pTe1^5hdd0baUsUsKo^cKaYgN(`n(&n%Rgf$>G+JM-t%g%F3 z>2>J0z3(}yz1%6A#^Oo0TIYOUS~Mj+GdL#`a}*#RV05FeSv)z4&)3pP3hV2K_Kb{` zlZ!mP3#8=wefc#Nf^X~ctElCBPRAkRRU_R%9%cwVhG@(%uzD$(@2|1I%<`Frb$&SZ zumi5qeYpfpN!AGs0HNeHbQ~I{%o_$?Nb7{*X~7RC8enz*90n28|dgW>LIcO;&Ru22R&`8P%mIy^b* zE}xX7m`*D72MX{6BUdu3$0bU0k?a{KX(^Itr*Mos)hn6PLG2I5+31OzeV}LZS%4jM zh64RkO8$uYA@w}SQ6M;xFBBuW$G`e&Nr^#G2{1~UKZT5c^Ih?6b8L8!&9aZ8Ay6qr z_6NUyb(b+D{WV)98fkdRU17kQQb@j=$+2bwmLp4ScYqa^dUX+q?NESAj4rZm#? z(&!Xm=@Mz$YIa4(Cl$w(dI*y8!;SHRYA{EOOUyiFP2-VCty+`vxh1_+vYCwqe%p2F zXOs#%g8|15_91C|9;8U86%1@+#-|%K!-Jie^|`(p0mBTdX@_aOZLjd+|Igl+H@A%= z@qQJQ{>jXg>~(C%N&KI$Bz|LivbK}#+i|KEA|VM+6rdqU%bKZt_gA<`@DxB%@gZ() z)x;vuXk3j(qx;vhv~s65K1H>${^DFy&{1`)yiT{L&pgsq`^C!O-MXlCxg6A9Zk`FR zK&E;AJLk)|(Q11rVPze%HldmvRo}$3`QrJFyvs<}9RO}H)HTKecMCyh7I=KKfSXmi zyZU!m|L*GltgrqrM9JK%gMSdt*GFE2?~$CKrWgGJoz))h|NQ=&@b1}`)cznM2<4m% z>2lSxz)G#ZdsRCP3;< zxx0SV+As0juPJIZ!m^^gy7Ug;^YcLTjt+Z=@8n;|Z&j<6w=CmAB(_)<=C_bFSyua| zumXj?X&$SY59b6&7zUpMyzHBbB$&J^pG!y=xBrz zUi6ndHCgg^v}kp}ZZMy(e;+AuTfUTjI7D1zl>~FJtpM}&Y^@jfFgw4_I&yJ#o07;a zga%}sa)aj9s%vv43$ZB)W0l*fjft4BEuP2`w;M)&Q#Glr<(pkfhRk*=>g(mAXLWa_ zmlX;1X1@-;Me0^ENiZq~13T!pn#O8+?Qa7d4KWJ*?PDB$;Qz4HXLa)}+EMe}vQ||S zUJ|qfpt~i824W(R5Q0Eytx8@qFood+`2aGVZyfmmYc;lAtT; z(M${#4aGwh9Reuj<}0SX0;Fxgg9Hqa0Il&uI46LHfXxu;ocue{x=gg13%_C@laCg2 zzOzw*QEv|FKtjaUK1I+EFlh?wm8G$&g;f)>6Q4=5wboQ!s-e_0`(`UHQ^rj2E+H$W zEfn}ki6IS*kSHNOJE_=7#ifQ)y~aumqsAwz5&TS9bQ2Gzm@!O=Fi-YhfA9BBF`LB^ zKlX*WK*RyHaEeQQ?z@vvUYN>lY3U7{*@cj z{9@y``p2AP{X@UeaFYGy3eAf@^6eYa;7FtXWS5RCe=>$-gtA_npAibr{oY~k_3r83 z@05P~`1ix#zyJ6D-lI?diDn-Uj#&8R{~UYY9zGp^xY_;0&gjS6hw$>^{`dbx!(P89 zFirWwuFR3~4HKWvKhv8iN!F(v7=(M9a8TUa-+S}^?cTe+gLjzk`0OMdB0eS~F^+np8RK+}2pVD!%XujK`4)x35ANSFji7QL_`;BH{$22b_>nYR zLg@<4E1JDRbCc{9nwR)j9L@N(9QntK3>CRP(~nn_ODm+@5L|Qonv`81s!O`;5+dXH zFs}y8l}Td?R}HGET!NOFk#if>@ZWIjQr=O++=~X$De|%C^#BtXF3yNY`9c)}mZ5`v zgH-xDpQmjI9alD$NON{8R+6bKcWC8SbMdz+-&SQ_1tpuTtXO`ZyY@J@{cToLDnM3W z)TNTs*^%3j>NXvy6ZVev)6>POV#C#3a+EswOuvlV$-z!7pqW&84EHG`GGLVpODRQ{ zJB;a(ndBdqH<;O8D^I2sOs@Ckw0dML^Lx~?ZoZ{rSq98RA>gH@^g98YAy0T`l@f7LZ(>ZMgZ&C! z=Fjg5Q9D&8<)PMpAt}~SdC7FuMPD)aGu;?w>CZYpVxp30w}uT>M&$Zf8;Zhy8yE_m za9_>uBH0xsju+-Pt1&zZg5)x;oGygHYmxu;8hP{{@e@A(<-&-Q)xTw-Pn>GJMd5v^0sNKosivCl*9kbtT%qB*K!+(0$aDKdqkosG^wEa7V0ge_& z{{KsV6^U0P7&NH&39?H}GGV|@hKo%7vZsY?ha4yu71N=;w zqfg?94u{Ea--K(NXe14#7Nox^r#ZfbWPxm@guZmKtN3_9>0|)CNtTIIl*c zUyL3sMfy^>oGm~l<|w%cR5-xfrp2ei=slp+A_YweFXhrzPE#XUTI{QfH9OCpH%8us z0XzgSi<}5>DR$zf-um*(WNl7h?>ir`$36lmEr!{sAD53BZ^@WK{RI8IW%=8sFk^CW zNWh;}<+z~I0v9p>qUmKI3yN+-T{zoETV>c}&ot2~VNHjL+KY(+)2Ku`Ly<`7 zs11Is#T<>#OOAJf&=HiODo0E1qmBLU0^cKPI+HG^^54=2RN{^~8MibMYg^L7uIz;+ z)t6@Xc()W_Z1sFS4KnqV;g?qgXsnjN=Mhr(6qEMY>+q#1dvXSkb;9QzRhB$~& zXxLGhe6>oU(;0vv0+@I~>~F5Z|J3ljJMF$pLDZ!n>QWGODTwTcw@X3Pr678lky&qd z>fkM}P&B9EuedT15Q$7^c97y zEP&T#=_?vl7uDkJ6V7mEq7(t!ZJ~|5` ztW7&(cgeB8qDSV(%_P@7_2F>WQ}McbkH57!mclLcZ7j!+*!#^Na^BY-0?hb(!E zkZ;?AfO?Z6HkDL2x9`XuIUfS3{st4Y;QEMo`Sy|D7w_Ouw(apYRIB14ghpUUW8wo! zfH#Ji^zR67Ws0IP^}!qmI_?)hB1af7xR6e$O8M3F=8%zBik@PM&`Pd&O*rHGI>h|& zQ{^xN0i_eMn}*C^5O{ja@ZH(^2^PwbWxKOO8CMIpub`m@Wzr1Y<#VpV1N6Le8bUL zK8#_eC=F;d&hfwpmWFtQ2@Dd3rf|Wh1i=tMc1Kw3d5E!L90ZGm(PW_eU_Qp)SXAOO z1_C@m00N)Jg8*%@86v(|n@8nK4;nKSjd?{p9HNj*OT71iJQGpoZI}`$jg5j1dGvJHDQ#6!9%!O`3 zZ5x~mku;>?6!~DV01za04hXn9;elV|M$j6&SlV$AVUK^^nn90CGu;XwtY4K#7U=t9 z$i~~*OJh6J-_#IRs!|$qsHjtBKU$&f2vOFaB6-P1oS44N3pblvYUa)O5YlNTj|LSA zBro`tix;KeeuV4-PjMvPE(Bwcly0+ag>!a@DZ{vBHhIMe(&s_?}KYfqt-AQL<1+335u6es<$_{3G-se zk0C=J5IUB9<-h!KkHRw+;i-`4#s?WKj0hBtQ0Y&%c$PfL4r8Jz3z#9<3klJ5CXPHz z$!!SbWkW5q{94McG;=vwE)e-mNE6`})@YLDH&c(9ZFkIRIcc)(SiWdC*paY*7I_`!wh8P|)86i;LQcAF#Nf@l)Ey#Fdj zN)n(H7qbHs=J?s>p2<>>Ltes{H?r#)vn&_cma~dzErTP=dm5;{;4m0++ql{;^cJ!T z+*Nz5VJe@@HneGvZ+zGODDkj5K3pmyoN`EMX=2kqEp8f)XGS75TXm__NjG3&F_u*{ zj%Ftdn{mv#&TMjGyD#xXcW|@NWsiF2W)rQzIZ;)K?&0n+Bb5->dWOEz${zYDLd;O9 z8&p-Qxy_C>b@g>hT6K^32}1d&$=H5+k7_2X(%YTmE^Z{qGxr&{2Hg$;L#(a&#CY-8 zp>Ox=utRSU481WINsV3o02Cpd>Sj}Iv)0i_cL2GE;;cm^U00xnP`LROOeLYmPfURL@*VE|=eksRJb zcqU`)cqL`MpN~<9^dp8g8Q+mRa`ngU*&z_m6s6YS+#`gvUKbxB?g#|Q6eN(NMT%SE z_oU?ZW$sbHur}Y3lk-y$jUiF*2!=&njmRqx`>&*ZxNi`>R%0ND@^uDf`8y)*XWF3- z>8qFip}_C<+TIhUF^kOigyN7?J|~D?_kjwg6#e=i3<5gWF24UuZS1_V5H8!G`2HYQ zk1)^Y2;31tngSudx_651ouYfE=-w&X2oTF2;cIj669GIe;8*NF68u7WUIl$dl%!QK zK3ToP6wf)hSc1%exRm90pT=e!V|Ke6 zV2Pn9U1lz>Xz7YvJ*en8-#OpZK{w05E+gKq;ng!sWevDozXfK9ZrYT^g*02C&3kE~ z*Ot-!1)lUBQ-U_bNGb2qT~1-Ui2D}ebv89EV~5T4*oW!QbLOtt?nT|Kx}c4w_6NDe z(=;Ug42Hp?nWmtsS|JguMmG+6=IucpeyX>d4*6p3}5LQR2ZGK{r-1f~6T zI)5}bX8cX!Pb{!zmL)gZ2G^=CiGu)OlDZhHLrajsrh~LJi6$P%yuh|`5>DYlcpncC zfSwnJFhZQJNNK={vp$F!Dpxx|M8OC}NyR&Y(r@Bu?GDcF;C$f+r!DBsN{}}l;>~kK zym3d~>tJp=n41pf=BdHlJm*`$+d9N}l{2z3JHNv{AR)4Ld(;K>T&z(EV{P9A%pN=4 z1yYWNnD{Ko2==d8@R^FVY*7ve#^utcjSt%$pi@?n@?p57s7g#q+XeiabU1`E=^**d6>h}q%HsxKto?Tu7${tJp>s3 zJHfz93f>V75v|dYg-2Yz$GjPHY^0}GHc|RmxaZBdeArYJpH5TQ98F=F5U#hwRn)N2 zA4Ji^E^~grmki=55^_Zu*^-}4J{?snJ;+^d{uh~>->`HQ7m=&2EWh41PrH6!muTec zNQl+`3*&2}7LLGN_*ZTf0!FsLZI!VGxBvRFb ziu2T3qLl!*1UZq3B|%t&4yG5F*)6Fi?>lF^TXL0nGUrLJx5z6-q7C zqkfARkexzfuh0~hNr?x4v4oAn@&N~5MYM}LpFiN>5)<>!<2WQy`sW4pCgx|O;q=FA z#87yTPB9zAp~g>fJmu4-U1ffrs|NLTFB?=P3^zQMml*E8(F%gHc5fEnp{0`7+H#K8zsnU>Zs(4=X)R zS?iEA2!#qb5+D+V3mqbv5Q^X+K$_egNhxil!J|819V`a%3Wv>8Ka8HJOxmkU8ljeb*n$=qKC1o~u1WI?8|Zvt zr|osx-V+wBownDGWZkdJ%kT~2s411V~8NG$oKn$q@U9cnJ7t z7LB(%h@}o0u7kgVU*z=G-ti22<#)Wh-d)e>l9%PM#x!p>EmUU) z@G!}-mvt8(KwqbzQ<%1WZBLUa=|ThgX<@^-i1Ct-$nT5z zmn5|&mpGKXiU7JtA>WA;0OxQ4h9R8-9CcoRk72gHii4t8uKLjs)5%pS2%h;4e_I7q zwIJRl3>)hcs_s&CqIOR!B5iEwl%M+DteY%uWuYz9?BKxyum$l%^w$@rY+dLf3Xwo` z66VWJm3XnL#KuXE_f;Xq3*wb0r?-(CqGpNI_!a!}Tk?I`UQ2560?7ZF*|G(YYITZi@ zZ?E4wlleW%KPE<;td`FA@7K$t*(|_(OF82XWX7pkzC=BkjyOs(j~ExVkdKKEBeWIa zDJnAyHMMpXBGe*i4Syu(%9g`)jkpa%x-Q$v@Mx@sjf-7-zf%>v#)U^bnBqum+GfH$ ztzV@G{w8lHqRb^5El~&!f^8^;S^nx3L$hfQ5->m@=9*AM0TZ791O&~41@J;7Uh$>L zNxlhh-w}eMIltsZuIyaV9wlca3bA78nu?5x{M0#x5iG6uz0Vu@Om8AZ z`_F%R#$WIHJ@K#OMTAO|5px2cAwQ&B)h8v%4BTSwK$9iJx!mR(jwY-`xq60R?U7f6 zTcmh=adR{pg=oZ8l*4~|w?eMgO*&taQ^X=TohhY+uk{-|vaSAshP*g|fq1-72t1GjvM67ChZe;)L$~4tBlrvF1JFr$Fls{pGrTM0n9C27nB6CHk+mh z6+bjndU8^>ncBJ%_e!d_qqCVC|2YhQ;e>QxIz2xdGM=8s&6v+gO`EGggWCslfBIG$ zi!)+HR^&IUUUJa7F<+txG$GIw9yn2cHv9xgmE51VCCfIMq1o7Mnym8MOq^#3SRg1G z3UzDU&Q3>ZYW%Fyw9(78sr8|=SYPbD->pI{SP<_EnZj^#6a-Blyi5Y6_Ul^1hFQA} z%SMiyYO_YB;aMDxka+1*#tRR6W7G#zIN|#TM_@)7!-GIT)(AUxL}k2zz(>5tG-kmf z>teIAiF@PL>0VWYcQRkAEz*_WWfL;(EmfPh*|gc1RK3rZuGE2mV!}Su@euN%7Qhk2 z-J5LpCi`L}$9`2D_JVj{)eg87NM()0N0x*=4#a@cVA-2(mUg*dkpt~0UkXgu3z-}r z>Gqh9k%%_RM0iE26q5o5&=3$Bb*@{F;JT%vO&%iz<*AB;HxTriz+8l2y;uG{#2dIG?qFLGcc&ofG zo77glF6TH~c5taieeoX&bF5alh%sooqM!YNv~kzMcNI?la+#bx@P*fKo5;%cTA=b# z`W-EnW$H2Mx8lp2V|dx_Q7xMX#4N=3FhXF01Ym`+p;kB`p8a;pPHB}_TKd_>DeYEe zmkgLlXd#B3Uw|tdxm@173}UPL0aUzhy^zE8eMR<4xjjC?rt0P=Xba$HVLD1kwq!9f zSzIO|c&p|1q3nGSZ?=5s3^Tc{wZF4d5j!K-)%kRV16fvH;%=>kag%$Uq`%htT+)SQ z8&L5QA`c00H3$;DLO*VJLF|h!#@Vfc{zYX5L@qsr+|~B}?9RRpmG|+a%8vZF(?tXJJcnV86nrO0M;rqtxUjy8cl?qP z_SgI+A4QeF7Omf z+=h>keL(00&eD&cLo~(lRQ+%%vP%fmp3iCu%D}5jlkg7)Garra!#%w3QHJKxc)><* z9wra7zlLOYKJ@-RnBMP>r*sm{2mZqZKJ2sJ57z{@qSvmGkw(88R8`|=iN%}@sB24l z>}}dnlWi5_r{=NgIYQlgqSl{tHNDu^cWTwVc4s7U)$Yv~a)g`TfbHDxrD~HUgvaAa z6Ju&R8Pv(3hBC;EY&O^alU4O!D472K&f8koY8?o)ns0TEO4TJmPEV7^f?NY@eK;s~ zW|<)|&z%m#OxkmI6a-r;mQi)0wOheYhkEa<{A=9N?`r+Q zMe0=dT-au1cN?Y1npm(AS$nq0W?OY`OL}7FO03<)l7|RRGG63;0L{c~BCeWFku+#3 zADdF|xTI1NH@SUBZjAs8pCTp_D~{p44&dGt54xvk7OhQE)>%J0ugJEf_xq|a1vJ<@ z2{0m&*0-HSc%DMJ_tNszMg>Ccb~ge>Rnx{ z*XMbfAPNfTf1aPq9xtcO_C&~cRmD!fY|;{Ulko=BU2Yc|U(&nSBzGHgGq=M_{P1AX zXe$3Ops#e5-VZw7S6`@NO6^pp)1_!JkQfLk=bz4bi_c3Xf`ooI&ySv~n*9~qy4^t& zVXqGXFFYs2r)RISSf{=3OsUyICasMf4X}en0CZ z_Vks${rHZQ)zU%64~s0Mj7RzL5neWj0)vcd=cm~h?iNS-^G zfI?XOU<5yCX^ZY#$o_)hBA#BC^6w9n?sSnKoG8(plb8J5r^Ci&TdLS2C5cFPpDBdkL z$YJ{q`uUR=Kir-UyaiS`18c9}m2&7Y#a!Jm=I8tkcz6gtCaRF%)V(bxzp-gUvBW_b zi-;3tc@Yoi3t#aGJRVQa*VX>nD&hbfW|0eqA^|vF6pDbCcHK~4!G&~cL7MMm5Ym&^ z=MLu9!kzxuevf`%A;oTygn)0v%oooPuw#)l{XOWBAbqZE{^(p?qWKqor}FMiICo;! zpIHGTe%Mh$L8l4iTgHy-CojXjfB%YQ#;5gX(@t5_WU}C4m)z5)`x%t_^?e%k;_kQM=g5SW3mi(-a0KREP~ES>1=4%=Q7UNAz3H8%ea_b}cZ zGycqKhyiPNvXRI^X>Z$@8C+xPkc(J{{%=hQ=2qI=15BQxfb5C_YgdH(UGwSlOjc%x zPcZM${OXf3f}j ziR|vRQm~^`k1TNJTtJ7g9D!piYywab7(tDgst`nO!vaZsfCh+M5#A30rzHdpzbYZGwWh}C9gfFfWCUumVM3A1dT-Zfhuv#>ZgI|yQbLJwR4XI~hpos4 z&;PB&HqN-cHwDHf7pXE@O|2_)VX$IKGm`OSD}94s!0XLfFXE@+c#~4*H4zyquP&*+ zwELOpLh_5;qu4FIdrbnLsq7t)LK&sO?-N2zpgCxNX)nEm!I#rI>;V2OB?KKj!Z5EF zf8{+R*I#rdp{Hv>0q)sW<$hvwIYHh#ko5P+4k0@EV2W>Sn)>Y6i>`#g>706$B?UqC zvzkAVQ^>~l)Tsgv0ZYfgB{~xbn!6$<6XpiduXMuFH!K8P!ZYn4=R_I^#d71;T#Wr8c(%ayTq2F=Xyw4D zMFlh+25>pn{paWz#DQ39K6@-fij}|SZhzKEW0uFVEw zSh|FI^aXq$X{sUVE;q1Y$MfN@^4SQQm5|Agj!O%G-^~5FxS=Re(RB9u5?IMUdKmUU z6>xNl{LdjNtV(=Vn2C*k3-GW0CVhDohDvZE5?zYYj|v^0O|K1MCxPF_RR$1AdiF_k zmQy94lvQhVu0o5G?0eHXWYp&S{QxjWZ5>KlS6aZ?$~Jkt?5qW+C5B3XHxb4~TQG5W z81$&_NM-yI-z^G?Xo>Y=Wy0su;0L54x53pEw_J~aqjGepu5vhnJC*%cP_$TN$~k>t z4|TMLMAN)Sz`%RHc1-H|@U9-;dt@$kNY>v8P6=i}q$&RO`=Q$13SdIAgnf>}eVq#Y zP?4TDgyGG1(myo4P>_eQl6JTK)b^F%0|z3IjRr$%usF(#96Ud}g?{ZIAJsSS#PwPn zMeEtieSFO70aiDC6~0~UXTj$kLChJElp7`yYb3uTZk!{vftOZYo7+ zq(#gFz}_wXYHgRITX7sMdUoSRLY86Plq~|u5v5JM{H9OrjH53-!ec@>?ajn@Ow`}2 zuzW&fMH+^F9AZu;U8?^j7|KsbDxfKnopd7}R2jLL*Td!5@M#f%}4s;8PjI0FW@f(bYtrFdvT8n&QC~>-GDox zlnz_L#EIv`$$AXTQi6D{_|J%5xd>)RtmRjW0W0j+IJCd(vdoYz%ZbdAFfNGS2+4LS zrl!&@>%MlA(xglx*gfx7BCWOw6`#4ugjv2Kk3%j|efv0TH=ufReYU~UYu#=a8>_$J zQ+om_wj2v^5AX`>6 z00b zB7c*XSXv{XKX$B&PXj7zKem!oa}!>fkQ;a8cdf>ikusBB(zaotIvvimwP#6TTW8%LY^LT9XQcYkg@gNJ5zLMG>>#t-J4`~4+GtE+m8corhrg}^WD8hNVGp~Nrz3|t^` zM!_%(!aBOIBk)QKisJP#F-}NfIuCXIf}ju^$^Pkn*=6C08hslpg57!CR6I)n>?@ZwH2DwXgRt`_ zI6}kbKCw06OH$$8wO@HUxD-RiioUtL@-!KGPEMh*luqnnzW7%UP;`A;?xu|{X0wOF zW9A`m;%cckZZfrO}58^1t0_fVx zRemMIGl%z2!83)a2dY~Tv5pfznMlK1Lo(}4)Gvh0tVdVg-*LjG@u*L@-9O&YAkrP% z@w*lx%q(v(BH4b{XwYuFquE9IZGC)LaPK{jGp~?{@|t#j|MvB-?a@S}Ey;-8n{lPt z4Mj5CUFKdnH>1VlqBzaaG4sf|3b1N!4J*&y}H$ z5?Tfn&)gl`I6twhuAq?IpqN1ALBp@$IJoLoRJ~P>Sc|1&IkP_cjq^)|HQnff!e>x0 z-3aJ|-M1#)@!0A8aiwlhN3kX3z@zFya1C78`o_gB=~S{hx!`pcdl`<01FgQ;rwdw# zZbMy{M+=kUqIKwwS(_g5}yy8^bMAPVQTe3CEqL{YFNL1%>4O$BAlOe|C7I4_N zd%*#4wuM*`Kr=fhu%sKJAmUmnlOqstUoPwl5QIWBa4i; zDPhxG*f0{ysHR+Z9ilQ2>RiM--72t8pRyVX#dD8qad{B^trWkJU0Vz3V^pNmZauzOhvI7q;cqJc^!Rxh{&}@e8(V0r}K~W zqmwFE(^&@3)NuOqGvwD!M|Q%o=QWARZo0vnZeLkpXXn&ty=c5#XquT8)p_@RYa|YE z(%*SSdQ9S`4j2bJy9D8*CbA{MJi3HTC8`kxsLn7JN!b`d{wnoA=$_O{g=Z@1@pj4c zJI!i9@Mj9UuD`8fzh6-A%{FL5=urh91e9>?1PZ5^PAI$%azRs~a%#LHzlab)`C;^L z|I5jfIw-{-dz>HW@0ZB2Jy4+6kC%hHAMv=i0WZzhuK{%6pO5#a3-vnvpSs%epUK%- zwqpUyvyM*OJ^fwu4~Ex)k2D`bp1Z(40m-kg@8dYX^=ag+Df=&o8sPy7;sV(k^BtU+ zLsPAoA;VffL4{2lSdoQ|s{L0BA*phUMY&h={O=ul$!m4wNQ+7!RhI{wrxE0WN|Uk= z0;bt08}4mSZc>$t%1By22Ys8y%~2#5_FmUxkmKz@6Dlj`T?I~bSK`#`gd3chBZTCziIT$ zf@BSWbVr2MXhu1tV{dF3I9)5nU-o)YiSQFV;GpqadO+@S0BWe~znq$_26D)upamIk z>rc5_q-6d zVEv@${DN-jWZGrV!5dBMYiLQWjE(R6Mogqy(hjKG=J(CubGk}3Dyg^os@e5I z+$WO(`Rlo;SIuH{(;#{=IK>0Q!2T#E=Q2unXnuTgx2YLQ_4$q;hWK%dq$txnu&qT! zEgYgj6P#fRk93Z{u?~5M5fTf|8wPV=BNjl%e+A)6`7VzLa4EfOA@)bc&RBaGMw+ph z>g08UbS9No)&am={gmVCNu_MF%MO5WnGH^4>7gT`R-?6iUou{q3eKasj4S}F)?#HZ z3<}A#H`jr9oPut|$FtA*EX#Gs_#}e#NZ1QoAKJrJ;;|N2@)Xti*Q3 zX=tesye9Ke#PW=)OLdygAG+*3>zG?N`P`66J8cR!E&a zVw7O_VfZdIQ_rTmfN+U-j&a|4;67YKQ7WSTrsMvvhgoWhq&`T_t5>mEwDH3}9nz(n zJ6ppONKFQ&q}*I$J;&GDp1mWHWDlL+1$F$+GI)e8;m!_AF%2$c__DRRTn*||wtcH0 zkXVfL7#}nrZ~?M;L!G2YvN=?z_8#scq&*(xjbVe5L0kjL(-zS1PCh-k%o=+Qa7b-8 zkm4Bp2bhlcuOBi1ohW9eJACI{a^_%Euw78hTX-B41|tHO86FQ@KNI}&$vdn6H!URh zx6r8Hmx#^ek1-tfd)QXhGnQO_cy#XX+SXUB+OsV8ILqv`sixekIz7vCyh1&jEm)=iVq zR*g2?>a1K0bWrR*Rz?@dp3`RIZjMTr>U&1wPbAM7qMX^;%*oh4U&B=UCJhhZL@1ht z+hEdYST)G-9nZhcxC$tU{No`31(C*bCPA-^Inbd`W0aUaRYph>fEZ}OGv+#>V4zmW z!JJUaB37K3v8q0hqA1}_A{COV1Pw&Ua%g@^l?&Eo1`;Ws5A8hZ}Xu!ki zc3BW2=Ago5x^H(kEPvk4=eNH1!j5@vJ)dW>h5Usv@Ai(DGP+KhR^e$lB-Xaz4b;HF z87s0kwzO&@LpaQ|p?%D2Dy5gB3FRR(oio+ZeKiAwikPd>oj4GgGPS?#mgZh0it$)H zEG2N|VopTUJ(F$*tJk7h<~o~4XHT0pIt~Rz>Z`Lk7T1}gZ$En!lbn%*V!+&77=;7~ zHhrt{Lb3H0K2_#)H@@j7gXJa^7|}k&pkEOsFE6UILC#Ya07ZU!@Gp@0Zia@h`Rz{8 zoGSZLm#@Oi{Fpy3{8P|Ebe+xO4jVHx%O|#OSJFXS#;**(`vVL4u9}$W$U>F#-waqg zrEOXJEEyXm$ABR{VIAvO%m_ewLUJ*JVsNYxl@0hkIqZ?N+HNq!G5`wi!sf}CtbLL6i4)t-;fc;VNR!t&`EG9 z!s8Jv`sqXk675TLkw=^StNSJX@TAYm5lXc!C;KzYK32nO^3Mm_g3JgN;U z3tEsod7CWO9?RGO+zug7KoAH5Q$lA+9+zsu?L!c{Ob#lYPG<($k~66~ zZfvslJ-fa)f`Xm;FS5kBTN2{1dK<~4N}Z6BmSyq=XEe-?eu5$>*TcAo3>KlW&V4Fk z%DMdg+pmuM3ADkY;lu0r8>a?aYoQY@ut0tuZ7&s<6=4RL4k{;M^5z!*a4OoJCQo#9 z-9Lt9XRcVRImfQ^zN(pF&LdnMPQ$?Df29*vNzYlrl&Fy~g=ROVajmm^Ds@=SIm8S3 z^Z8BZE*`aXaFcI`xei+k20bJB>1g82MA(HT+z25B@p|by9odXwo>5 z^pG|yPfN%*30CD*NowgEmk~dim2ERAkvsO+ zZx(8P<@ijs`yQ=wqNFrQ0>PE5RZhc-0!2{Qzx45dwD&Ja_#A9%2Uu0l6kRX@FBt9eL6|c(Oa&R)v*al&l)HEoE}H1i30V9hoElze zO%Gk0*DZ0O@Ct^Q8q^k1X0oh;3QwmUZOW>e15g z;wfo{^Ej=-E3Bld&R{b$!?s7J<;zW)gy*@d)Rge0*l|Z$>uU1j5_gUYBpRY7u}#8P zB3K6w;~mU`R$aVp`q-&4`fOtt6px5o0IjbrcZ8$3>0&F%V7X<}3HJ`ClO6b&-N6Sd z8iuJS7dm-LI+(Z-HIu59Q8zmY{^OOr4L8J<@FKN26=qSP(y<8~(|#8Z!vO4)ZuGC{ zNUM&hyGplZ>nr2vb+$)lEAfT5DdEzu2qey>D|#H2nB|EX$ZNPRUP3H8T;6-zzn!&x z94#I2{6gfQg4*;w<(`mja;9f4F8eCE<6_oywgL_cyEE~!jPatQzjE;+#_58Zdc1x$ z+HAk!Ud*()$)g8PY;w2=ADi?J5h1F22#F5J+#aM*yT`5>H55j=wku$E|gvvQK{wYd3EL&M_`P?O?awM+=#vf_c<#D zvum7z3C>2bCZk?GlW;f^UnxHgAS) zZrI_Ox1vK6FBbP>K_S{f-_+OCL%xJ(&}m zcTolm^^jE1`U%)CtTO{GkfP0vfNW?8;=)=O1J@)pB#4W9(F}%yZ`2D~BWVTA;RLhO z&izjl7vt6YF9^rfY>RHz^9349PgZYqnT&Gzy-UTaSuVX?<;rTwMDwFFSvUQ?i&(XL zxN{&V0kY!#9hQ_S6)hG$Gg;+l&H2cRMdB(u#Y2D$*O<2FI~eRG9v9TEXfOZU8Jy8ekf8d(IN9+WssgL^N`-Y! z=f&mH)k~}$(mwON^95nz6g8vLV@HX}(S1GtblJsbgKgI7`QlRJ@R*F@m_v;=bzdlgbafR zfIv$3y8`xOU&XXBNy>ni>o&@j#B!BEZ=7PiizDg255k{bFa|wcdz^kM&)Hf`k&p5U z1ckw}c8>980;hO?*U&Ps4#IQD^nW;whlF9?%Pn6wt^!-buEbc)5p!{49jB!1I*CCO ztRurs{PeoyMHu>k^(6ejbYV95c}l%uESF?te+!fBA0TG7LV%rloP~Y7 zVNl5nk9V7cOjZu_B%=z>)T7NPNxeVD5Ov#0$;8QwNowzE$%vYn&)&%|`5jX%r6Q%5 z(_wsZWU;?YX6d-CV~}WUuhf_T2O98Mpd4GS=SB&4bNua*d+PYUL1v*z2miUF)5 z95RlPx?1!E!z5R#CBkw=FYx^#%c4SABz-jl8%g$ru&$Z2RhOx)7AdtIXKp1twYYYI z-~k9w0W{FO4x;Opy1%15qZMu-};w2o5yibJD4Thuz)fdR({4X6J2 zz$bgpNCTzNw%fB^ff>v^2HTSATj`lH7G*rv3qcPPTtW^O>}itRPHUAfVoW#uV8mOX zJ!<8ITp`Qv;GHXbf~t!#^*c4Qw>LLZ&&|BvRN_I&(beTr-^O{@=O8*|bACB@ZNygn zsRh<|mEs~C-7F!V>hIhVlh%FSD%nru_c>cntVo>Zp?&TY1%um<7R5EH(}7v3_JlWw zzhsn0=3p19n7voqZkBQ4yQ)28^%_AnnZjbnJ(TUy?>ZIn4~$>RZ>!|*WHa*fe@~4u zHk&MMbKF`wj7g>(u(zy@0m1e5%mcCRA4H_Kn}Zk-$?!#g;HnoxhBSco~+d!dqwgB7j)qO7eQ4qPjwJiibi zS~@g}#$PFhuD&{?hpVUD}Rw6i^lBGHINE5 zRUQ|E1VN}c6^ad9iz-a&1=Bg5nbYniFaV5Md0WZfa8IHykrVkop8q+iG0SLk+#L(< zcpS2@YChrjJ*R3uU}fPpUz{0MX7|ck7?a;=y^Qrh{}x!Knh_lY-p_$%8wE*rOO81%o_eBfY+WhA$28lLtZuc4od~RH8}_nJ#ch z0Fz=p@((c%{r)vk@k{U&C#hms7K24|%7iKD{|g?=(=Am}Hl@ufIsIo`&Nv`tDkfAZ zrDF7Qve?8-EFrB^3vh0eY?l%Qun3pL461YI6KOt73~I3Y>HZ0H>L#(T(UDI?6yTuV z5FPS5!y*tm;U~%A;7Gy2;ln84U%Cm4b!ofw-#2?-`!~BY|9yw=esX&HKEaSW27t*N zF^?f2uwwbZuns`%n7AeGSNeP9Zz12%k!!}Yz)W zu_e83aouY!UYt4Il@qe|(r0&g5a6Yv9y2OBRk;92c@aV;jX9KRT6z`yOV`bI(PQ2 zV_3w;GP=D^W67`GS+RSCiUxQ_v9GUXLwSPk-0Qo#Sg>qf8Z9dl`!@dUpt)N67K^Bd z205QazNRQZH7aolhX!p&9tMt|b{EeNR%#kF($iR|p6@n-gX^I+hA-7^MY3C~Ir94# zp5xSBo3{L}J6tL_f&ka?WKMJhfapo~o0xk66>TblSx&9=iIcbOJ!mVpO z#K*dz3woiKoyNY&ZtUt$Py_``NvSe~fu2Ku!=v_gH3=3LQ?5WI5U-ayl1_S*tVuQ{ z_5O7Y{inqN=TK@eRD&VtO(As;gx{s@p?qLkylpiP`>sUBw~tv7GX*c5xA1p2l|~)f z4BxdI^Ya9gVFV3SB0b4A*HTi1uABqC?MTiF}U*MmfR#qRn#gA4Mc72jt(#1=D6e1IufFVmpHqfSJ~`V=U{XNq*7PZ zeD|0|q_;UWPVTr8YNZ0^!iE9NQZP7x#A0D(pTzU!iDfCn;Hm0>piRGTC!gv7G1xA% zOjQgPrOG8I-^ydXOh>sQv6gl}AJ6vIr0cyQ0W^xX zBEQnDM;;N<3PC6V*=SkA&VkGC%q&=Dr40bD%7j?%gs&dWu)VO&!AMlke{*C40ii3l zRB>xa@$fIBD1I(oMB`F!Yb;(@Q7d)V>&U6#tad9C6`T5`nzd4P@KSMD5%v}zLd=Jh znvB3*wMFWf^Tr*vSQxFYcHJoR`rON+p5?yo?;PWp6tfL^|1IoOMvSEcOT~naaQ$>? zN4ACvL;hDcIVn+>EYL?uBOcs+|O>leqoT@Jt=@5c4>MEM*#-Dak8!aa-HZ&*olQ+7@`tvo zBOaK#-!5*h*tdmtv2E4t+rqn9w`&h><6Qq=T`v+GTQ8MP>!K&;rpz1&mXfdcz@W!y za-dKfcCq@woellkyuQFxl$vStWBv9IKI zYr$P1K>F|iegW2!T`j|q^1LD@j6;Nk9e-zJa5I@Hj{Yqy2$0M~fc)dn7aKT;O}dzf zXj}@y%qr^~P-*Y@h|=w@>g`KUF=v#JXW5z*WjWEM3=c6|KA~H?SfyYAM3_DX_`(7& z#1-YdJxd052>^1*W`v4|#Ue)l!8gHsU3zG(9gE@=`LOZl0^x@_>D0K)Le==aq681@ z9G0!<&0rtJhZvnuJ&Ekmf$|62hsT71Iuit)*D+1`PZ!$PR1^>CDa(Rk?;~gT7lXGoHpzXA<4o*W zh|R(M{MER`4UQK&dw?;Mi`1D1JW0v{JAnbHi-V+e#lY9As~^A#{dyC%NdHCNC!=v* zH_Zo7Yf_~uiCY{m&Xy5@^i$2QfzaS(pSO{vY1GsgTA1*@aQ!E#%N3J-t>C@#W@SS8 zFM8;hu!UDhX^(J|2v>)47R*K9B9Q$2M`0&RQl!IIN$b~AYp#ISu$jTsexw`NA_=k$ zY$X4B&A`(Jj(4NBv=pL*>%*e0Z|$9|uCm-~DZ8Hr%qRX9fhfy6pMyep)U{USsApkJ zV>BIHYge~+HQdD;(^7nz8{N|3--LRuas2HKMzz8VJm)saTRn_b$NiRwu%&tR%b`(? zLz2P+^|Y{3Wk8EaU_v2nuA(XkgXbM%nup2F#hkPTlYa!k{gH{?`$imBHw}Jw&R|y) z&?3;o$AQclXLy71l)D@32YD$zX_?=XzFf{W)$_^%@`p-+UbmJUj6lJr2L6v^qh2nJ zKy0=qKyJ1wZ8Er2<)Ek^qEyTYU~^6EeuV21DLr_$ROW5)`@Zxop7-)ss`6`JQbJqP364#h@0!%6t7vSPOsklVMF9 zg_Tctjoe^jz_84aG5Q&6FZgDz@=c*@OStxnp2a*k++2}=@uES*CDtohXlf3Dn! z8&Ut5b|GyBT@ARVbs?>IHmpRo=v6-%)nHopXj}|yG2q(uL_@S#%0FOxrL}31W~i15 zu*sEWpIR*&H>>;SV zi(sVcm$Uma<6(SQ#D#WvJPRL|QEiUY+P4Iw=&eSDoWaxb(F89E( z+(zOf)W)o%rTesM7HCdIo4Ya3_7|4iEwy^TIkqm=ma_rYhca)0BG}=~L)iO+(ja}@ zLc*tks?1+8mf~g4H8ec__6$SP0LlPq4|gb2*Q?V)skqj-RuAKO=A^7y-mU7!_ASu% zpEi?H>XM-+F!QRq_|T1 zvhnm?%guMKDahqgUN)QFqIt-L61CbgUvQ7NoPtlu@N96bhvv2Ciq7I=u9(Ar4TAiF zw^K^$k~OYZY=qKUV(UIr3lj9uIy?fG7Qj2YVvn5sd?|#O$+v!Cj!E~t@KD9hc|`@2 zeg%MIz}(lszZ0)Hl2+-E&i)*xg!VSSz}v|k4@p6#$n^i?NMsVL&5}%^c@RS;Q)#yh zLbe~Fymv4T1`dK2L3@NV zu%q7d|JXNNg*OdcaImog+Pk>MrzRsP!XxjI>uD^FtQ8B9yZy(kAOElOJYC)v&wRxt ztKgPZs6hZ81Ln)nfXRk5L3w3V43+M!&P>0Uk$wsr`n%;sjH&O`&xBkBT;9_pjk@C< zAaSue!}^;MF8Dw?dlJ^CUm}@sK+B_km4Y{iXeD?DJPdf$#7f6>kXXu9e3?tU7r7eG z{>mql3x)hy|Iz@AVJJObmzM_w`y%5hv&bgjB-xwt6#XqDz6WrLxut=Y2lexs!l0PN}FxcsY zV0dS4n9}LkhJ#RlEwX(4%-3#o7j}F}4c>bY0g|qtA5oo;f@q&4oy8@qnA^#kXr3Q8 zM~Hk02WjTOnTPhZ1m5D_;@dmlu6<>{sy}*u$anVq=n>2i-r}&|XZ^mLR&W0CcxbgI zDT7htU9rV1gJ3tji8;Ew?WXgrt_z-@T~y}o98SNR8N1LXuAY-N^r}t0)e6L?QPn22Q!ZHmy6LL!;>BO7Z+XTNOZ0`x3FCeN>hp@bU5@KYm_=_3mNu1 zC~Ir}Hig~>S#)v)MJ_5)8CJm;v1^)3SFkdM>Yo!}hPPw#J5uAlzGaG6(i@g1Rrjgt z+8lK$+$FPRxmYwR8W9uHfsLdvP*gz^|T}dt`Yu`>#D} zhnrUJ@;&wa57t~|_4u=-a#(@x(9)@by4iKU?RFRCmMH!A`j0c%8O-}=B}G+kwWk)t zQ*-Iblnvlt_-D@rz93?x!p>6SI4WbbNA=^Tskg;mNN-@rjPtmY;$eOieTS`4 zU$V1(!};$$=uUdjr1*BnDtX)cabh6uY=|t}>2{&-#ukT+WW%7NN=L7dw+$V`-r5NR zjf7f3shYU(Jd)7BEQ~ZwbjtLw{w&)Gv`mfRP+3iZO36l1-0iqE^tImQYiX5RH#>}{? zZcq7QOmZEdl!kNE)hAvJ8a3b@S*XpuBKGFcAwj|9d|J02LWt73o^x_&B5jTaKXMUK znUHd){IQ#Y9@>>!z5}z&+FB|;-ksK%VR}${sz--H4!##oUrR%@QDj6D2vg`LV}cId(IQ1 z{5McQ8CWINN0S?ssn)i=3x0&drLy_TW*Wz56gIO&^k7Hb$i0Fr6!{{H=fG3g&v#SW z`%~*~l3zvgUP)e?VY7rQLQ9wFo1{M47WKQ(?7HoB-g1yNN^=5j2LzuShRNg(`DB-F zSW?O6wQ`AC7d&($kr16o;O}LYgU14sP?Sv@EOumK90S&0V_2cAHR<`mVM(Hw0> z|GfA11^>r;A2MJTp6^7cKJx_2%U1Ip0I~Xe+TGC<7R71}fly?=0em2HlsQ#SqUrEI zJM&9$*1@CmDRrD6FZz#4&16mf^#crdg0CC|BZtE(K^0o@rE=TM0_@L!=6Vr+G8rZc zHo1J&;z!wu(h#Ml z=gOkXqWteG)nbR#z%P{s~v;c7;bmMLp&Y*NjOnX)K@Y!?&=9n{vEn}Ix zg>8K8)}W|CYI<`@L1v>|MTBc)$oMVLu$fcG@$z(!ss4YUwJp~iOYG#Ljcyw<}V{k??32*N!G{Ui)0`AFb?R2;W`UHa(N>Hm%;LqjV+&S{8P6-5R+~XWpUZ|N10m8fXCkGm$Lb%9hp;CB|eC2&MrBJ`?jYEO#-)fx*y~~q z?Di;q7CjcW!E+NShM(BI(XFCsTp>{3H=8#ItCDw^y-F)LvP(2m-0l~yrE z)ja*FF|X37HfmUTfY8+0M1Kh}Y53vz8x()Xo`F7j&KvB+WBX@V@7lRcc6%GzuGH5q z#h)blf(Zu#0dRXwT{TxD+y=8v?ffs`+3Flz1<8i5vK2t`-?I0K* z`&S335*!Y{5d2%c(ZmVxFkTbb0nO53Egd!SUM|VW7kgm-$;Q(nL0KaRUhZLpM}HE% ze`j!ioVNK_;fL#mvsActF~eiZOT;rn^`<%yI6CIWF$=nQB~L4iL0)wP(TO4Rh~f%L zGr~W;KWK~v?Wvn1Qm{I6n*@(u`hIcmo_Jt)qv{-H&+k178acJW#%2Fp_ju6Oluc*a zbbi|@W=yG(rbW$SLh+g4&>`h4{71spIi~I#o~nG7%Rs6Hn@g-{MeCmLHdxs>s@nu8 zRo^V4!EgW|)nm$xU5ZAy`U$po#n;L;b=33}^Hvy}aj>IYNN-jC5$y>ghyk=+!h2o@ zf(E0VNDrEm2P5Ay!0!x=$83__AOwKm)G1{KL=qj? zav+6odX-1eiG;y~&9qe7V-~dJge$16@Ear2b5VU|SRyTv=MC;dmo{w|sf2Vr0%U<= zlfbAq^sW<=C!CuDmja)>+~{(QdHB)a?n)9bD!6keRq{SvChq_w zHki5FfBfgTj{aHL+uDYrng~hH;(yPUv=z7Y@r3_K3Er&Yq7nW(uUE$YL2MI;2i>WX z{Gt`AT%XA#m!~|t{Ilj+P)6=wWU>^!z-ZDZRYZNC)FRTWpxJ(*g5c@8FqJu(%i%4%| zeTAKx9BBxMlUqGAcw7=7t{h`?SZ`xVc%64reDY|LH6nX=6nQ%~WSH*JIQ1maKjv%P zL2H?{*KMlMz{jl0{Ta=1KT;NFc~E$P-ddG3E)H4~Zl5i*VfMPKCKp!tg|u~TTO$XpOC?q@icPG2RHkV$v;KS$ zq1LyoG^&mBKYpdDHEB&-u~}PBTiHppwH4Lj++5nMk|}6&+hqz(ur>u-Ug_{fF_*Ng zcUfh_(oKilPYKUPZlk$ZLd%uvm8u@TV81t3{ETNARR&-2pk*Xn)?eIYj13Ghv zK#ZoJwF^D_!ANFJfgr*^gDAd_XdK19(Na*X;2eP0A-)P%HEeklM24{Zd*joAL-7Kj zh1Er&L@^anZbrCR!XsYSqyes&`rE{x|9C-UD@ ztJa_uytQ>*6EsKlKsTPxQ( zdulelET>p2WfENjc$v_(1IScY86%ZEyD0EOyxq!tM2oEMfkAK%d$HYn*p!tdNx<;U z@aCk(^MWbqi#V1W&Y2XjqHAJ>XzT4FqO9HxwG1QZnHiv~9EZDTe@csBbd&4FWW z_DY7wF)02uP()jm)6B1oIz$>U*}{xigrLSfX2c|x7yt^x?BZ(BL9o2aQiE^~sdzH0 zW%|HnA$URe_l5Cmoh!sMjN5W+>b`iy59*IH&XUf8j5 zvCb$=yfIE%k!9s|yOm9Y^E`&3uv(eujOL4f?$Wa?iVlw?G24kVP=q}GxzQ_Y5(z&( zT|-~tDuSl1j$zdbL&~Zc`^{J%br{8gP$>lCiPY!Uw^$}y#9z6ccszy8D^Y8sCL4@==f*$H)mpJNo)Ar)({SsT`c z^k6(|t!-jF_ts31RrIfA{N=Q9sH^Rzy`|&d)P%UQs_hK!l9G6EZ^O6{&$gf(7gYea zST?*BLaRa_SV1q;nHGjQ(L%FUy3}&g7OlfT)Z(?c%O4KHKx`cjx~XhLgzayXO%{1T z3R~OO1oE%3*I(U-DQSRVv#6uz+;=&UiO$zPQo-8=#TWdWPa=++jpq^weE96xY+3+C zK@F8z@gvK$seF6P2YhK3kOVG|!Kt~|9MFG$l}}yeQ24=cGe)sS-s2D;%E4IaNTCUy zL$G%az0WM$tYN`W@PXm|!_<3f0j*N{zW~5MKfk-xH8@K~t16yU^h9)FA#RH}YzW`_ z>1==@6EJN|`78&!^!ehMXdrUO2`Pa%3Ybbhs2qV;M70FHEpVB-nTAd@V^D6KgE3OI zI0cBXFhJm*hANez?!Xm6chKS9y=*Pbjws1zm|V-hV1Tx|MVy7*a$pkg8XyPzICbtj z`&wSrDY`3rGKpQ4kq@(Bbgmv&PJshGFY?0XyO85w4u+^BkJ`GZzM4hS7D=zj3%btS z7WeSe%EpY@DG*&-9>Uz-8u~e{wi%r4H+=qiEJ&Z9(Ky8RMeAdL2E$ zPdy>TQ<%3!zqR!MTLZ@$IM%?i22Mu?&Q4Vlb^)LR1bMq?ZdJ9)q=`+BA^85I^gQ1f zZynAcCdWQ?X680cx=<@~MzYRS_X1w!Ic=NhnkYByT1ak~MFovG6Ka6r_sQwiUl__Mv53tj< zQSlVuPSLn1tPZo3>M^P`&-GmpYHd>+*IFH!WxcYGu|3!xY_BBwg*8OFH$>KEOfAf} zFyF#_3-dP-=D(@R?9cG@BjWFGAok$cLk9}MwZi-*beimG@a)|{FTsl}Pn!>Pk6`{K|8U8;aex~kJYb!Z*_2mTS_aCnWxyxkN(LikKmh11X z%aLs(Gm{<~iOPtrNJ2(;)}^*o)xC8>bWZUNBB>-u%15#Vz6!ZnS`!8cOhPX?@8tFc zrF(FTJr58HJW8f0xFXQ^5e&c#$#YIt##$M>=)%0*S}D6MuUN!rM1?{2E^i{H?Lb4z zP9Irx)3d7m#c&C=&hFJwmgiz?rHK*rR4kj#zh~_2-kVxg`Uh%vQGUAi5{gvrKrC&I zC^lATgT(zbi%L&eO4}T8PD3K^g#B=Gsw|8fRSJ{zri1+DpnyY6fR6%9-EL0(G7bX{ zkWZai_5~tt`mt5LR`r^0GuT11HsQl4vbQyNLTG`D$@IdRAvg3|d)0Dema`EBO-;~H zi=~>bQD-T-ZM9jpk49Evp1-tiyHW3ei#Ws{Q+~CqrD!cWDwfQ>jJG(_;THOF!#%TnTTRWEG+QPXR-Wh8T{*h0`rutn zvh-y#rFWDjJr_e&p4%x7&e~n#Tu9d$)T`5{FAk+D=1^bFsgIQ$=qP4gwITif8`Pw_KSy(VgVYt1tss4xz&c%jl;*25 z_@3*m`4vbRZejp0AglQFH_%gF9i7x>63}_(IwZA60UZbVoMqk!5Il$1NF7F)K{7>v zl71QuCs>@*D|G&6}{xVl5rRuNv2Kllxw;kkbOm(0$$eA6K=3e78Po+8i6Q`*tsvznL zuivapMZfr#`TE595^I*+-kHDE)56NN{X7ydm-F3>U@-)US(vrL_f;k*Ux7O-2u{*(c` zg}@d9TL^3+@FqgwotljK0$?o@2A!(EijawpkZ;$q&)Hs^$4;bqi9;vYE%beXV22tj zvM2^P$)2z>%v%g*wwQJUG3`2Y`vkD8MTZt0T6Ad9;U=QPHx=o|zaV~!8Aqf|3axbI z5?uHayb$AA2i?*X%5j?-!Uo7K$5c5?YXD}-w1N)HdyH7Ub)8_l6^SmtARaB$7Sl^t zEuUOU>MWREnnL;Hy6Ro^8qTeRqm|4oElKl36+bqBNUAK5#~xcBFIv}WwpWo1P|X|2 zL)Ltn#Z{|pTOHD$6s(q-y9xqn8=Hq8xnZWXkd*bK{`#*d75Waxh2WW zdKQj7%x0h2l=b$vhogS(#eqkiYxU|^zbEtYCp6T{GZb86pCNt<8Q&fZMB%MbzwGS? zOrVGPy(;pnA)L;&-k@d`qd$vSvX<*Y`7)4}9p?sImXEv<0518M?GR>mDm58mJ=ILu zHBJ*zx)fw?Um_@c;EM_YzMFDVtZGSflJN2DBb#pkhskeSqTmE1^4Q31_?o4w*KM;m?_@L z9zuCH>@t*o)zYt2bgotvGl6otZk;uf!wWP*b^a^KInc9rUE*vW%0l$;}mf}65Z z5toHGe?rVJ5aC$z(@{dN-hYNDOtbL^4V@VZ&Jl7EN_C?-HYA$QW*)ih_%*HF&R3iN z9!=|~KXBW+na|#mNPdPy3P%b%!oi6vUQTct+9ht+)J$mFek+e{*+g4D+w#-Zhoixu zA_G~85;(XQQ~i>5p%)`sOKi(`r86T|R;4>rU9C@1xv6^eY3)>7t#7ry)%sTJZ?x9m zuEnb3veMzr6ZMWB1L_~w(fAyASW@Vy-%>8(@t1 zEkYy?n)M+LwywzK3<2gNN30Y#y0AswQZ|;kzmQA<9HlW6g!n9=;dBNldF{*~Ci2R6 zx!pPmg{T7|vw^hh$L$*D_N_Cb#PX{&o%G9=2Gc4GmxnS(mVwlp22Xb?jzvr9_z|^) zrXP_hEHzJv9})iQbJkSFd_)y!wvC2SoijV^5x3q>$6OImt78If;Ytk>GPDIwXnuQLX_MKO__2>w7ynaA3%gj5N|zqQsm`0>fBUVggr!iKAFCZdJe?$m+yfC#Q=;E@KK=Q>n-Lp8gi+11@eXQQEo`o9EwIjHmN26a<{-2 zu>|EEZ0H6Na4Y&PJ4ofa5WS8+Qo8H;m`|pcw-C#Gq~gQI zW1m#9nMBu*+cgFWwWn;-g4GZZM612kIgO-pcR}?Q1z8ld1PXdnaWXbq8e*)@5p?fc z!=ac$6)uWgYT!iy4J`&YG4&dsUEUwq2KS_Uv2q8V^?^O253Ed}7M1V1E9W&8H@g)_ zt>iL0#jK^(C2E$RgZciWsZbHLYJ^FFU~_Szxn0Q_nF4zyH}bTZt;uvXzmdH#b2sY7 z@X=te;#imb$Y0RynX+@+P3ffmvi^kcKlJA0g^!$<;KeIV*T{d6u+g0xA=9-h1iM(SaJ5c#ck~bNv~U_`1>f8N7?1ea7ShafyEPljA!cNb2t$ zPJ^_Kk~+$N1UW1_$p7nC19_G;KO**wWT&HHMmnEwPU#^kC9fz%CS`{KE6A@;(G%t`7ApQxmS$WEgBI5~y^`&)%h+6~kJo@ld{slh?oc}^1KRo&Omy)?23Dd7PvSZ7B#K#roi z-P9;aQ)~>plXlyg-%ohKZx8AY_-m8xz1uP>IjP^o^ZUvdb+_bI5w0eo-M`~|j$|NN zE><}kXtqFFBwW>?k4yuN1xTjjW>IFFDo|>D!)2eknPbVicnn-Tjby3yvsgci^|L%X zKTEfpXhKn&>7IhTYHd>0#Ye796lWQ}&M~*9oUbc_-L6Z?p)tkb3^~^qJ|Zq0w{?V- zlIj}Qsy_`l@?Y$d01I`l}YFoA(MWX z3c%6L5%J<_1ENt~+N%fx$g~>Efgwqv2@uNe9Qz}nt_XMuUcAcCJeQx)*dr(FbQh44 z@18wsR0@*T$5&owO0MlC6s560C99waPRk3KfYS)d?pvJN0H^kQ7c(003G}=+Nq|$8 zTb|-*3P3GVwn*6`<>!W!H#H&j_M5tlds;-c&jFDlU>-32{YUx!vKe4qm@1;wVb~VO z>Ymx?Y9#&m6~4W^yT7#y(E0!y`2ZjK7`+8K7UWov^JGEJ#%2ZD-mS~17o|xF$8)?K z&QT;*7D;D%AT`6yD$b?myK95!>~5#s?X>X5!W#>3o&>zHL3FDNqO(~VY?cONV7^z8 zd-fbo_$h*J$+uqw$djt&*=K!(f~}LIIuxCds6o$~P9yZ3;cX?kW;IuZQA?g1$cOFW z(dc(d|NQv(-QU0e&wt;bPyfaJkGt<#@a;bioImeA9elVLeqzV;+F@HX)san16H`6_-dbn&A3DGPQImyu>`C37;{v7(8Te{EtMNl^6} z`n~<10++Grw-CExsx&nQQdN6C+sYqh&q_9J8;5IU6O(7fs? zo?}B0`w_CU0L^jOf=P3eq7hg=({rvZW^Hq$EcC*~AGTOcp^LT%`H4Y#lPCT30)?NjDO6IH<@DsMk2B!69|g;mJ|+B!NW|m2z{83F5ajxZctT;U#!6hyHh^g?||A z_Y@ne5tc>LZRBOPW7Ux_C9I_-rhGsr0D7MMJr1$QF#%B2P*O4xpL&?UjT)xzBxT_X ztSp#$IOsB%x%epy43!o!Fs(#;#(?apIO3jhLgnFhMPkHcfqsSrPY~mWC5|I=ahIaf zNa8gTbE!r;-r26|h>3(tbCnZv5f04Bx4Eui1)beZu)7HzNxET00xh*rJ?}FnDEI(F zkGF+&85%WGZcE-Nd+bwZR$&f*|M5yvSuFN4ZPtf2%Q7vbUcOrXrl@ktD}bs*A2j zkxfGmAh`#=z&4BvyfTAiirCf_xgrT===&ZN zQBlkQp0c7|$yDUls& zdoTH&ikZ}#N-|_J*_3;i+1!g>#(Quoz%mKcj5fo{B0Ys!SGb*SJoa5Qy$MEm$Ds_} z^4UF`zPY=;^Zz{|!`q4T_wM{=IGfXJemi#WuHoGdYaD55H#P01W;Y>t785OX?@3BA z6-8b4rHP>X%%;Nl?(E9T&ul7)Jp=hE`+Dxkk8^y7`5|>tZ-3D5olCV_&cH{=zA^EI z-}QUPH;8a{PATtd_>~|$q>SgHSGxJOG4pcB4@)EwB zsaemMVL5JE&IsZeo#{}ltsK=h0gOwcz|1loPP@uI}i#H4?bxM?|_ z8Hv;~hA);n$pS1)#Lywb@Uvhl{&H18(fII->;uHsgLJY&x^Yp|ITNQt!-YmAMLI3Dg)WIv44p;H&~nJs4G)8&Kh;b^xf@1S-&^#6TA zutQIA%I|vsJt%)j4^Mql^cY@e*aO3r5csRQfbPvm9HW9Lj!rIs&p7t758rOJrx-aWQ^#h#YTnHE$1)C0#%0yoY=~FJuQjt$EKp+SSfPw%Gr!!gOkI&#%NH;AF{ea$J7r9_2 z(^Sa_tv_do00(*=a{HN22X3+F?O&1C;FLl)TVL_e2Q(03RK9bcC13H#FKrjF#wwIF*={rGJvKJ1DB@EW`zR8o^2#0)Twd=~^@_i7l0%y2_b=nXZXNX=dv2>n4q&l8jY z7<<&YWsF85k~=Fh%>Q-;)xRTLtNlM z0>((82u=aRbAd)u5sOJJOn{3g6C}HoJITYgsz>IE$o9$xNWGx>n$fxxGd4RwS0p4H ztIrj8RjhE)3B{@mt4szaT0wH~#UzM^?}{W1j@1~43URT)|Y*gL%j}n86z@FKG}UhXW$4ET-nv6tXKKqYN16G-~z9 zA9Tor15;%D3?j!`A2_f(eRij><22uOsWGi>+aNBtXyg>bb4$yZcyzlA67BbN;F*p7 zwb8#e`uFJuz1ryC<)VKZ#{aepY>DS=n^;{Na%@A6ZOE|=Ikq9kHssib99u`k+Bza^ z$nk@O99II7O^e=nTXC60dbjfka@ab}U6w|ZbjWawx6aWN3*M1?f#fWu6Mfa2czcAP zcXA{zd@F8-o2JOiGPsHad4(Y`yZfz-JH0!@K=fb|(76l{<$z8AC9l;Uvx}hjT$3YL z%$t?%?7Zz@SEuZ@q-2Jh`Geo=jE30_k2W1E^kjK|ck$vS>+iPN9G`T+`MRp}cNG`# zsHD7?Wg3J$5~L5>3G9ng@tEsq@4QLGDZJAdb_zN*{jWn2`p5j2% zLy*}0F!WedD8pcRFT@;u>qI}YBdowbIyYpF{;8#~upJE%6plpPJ~ZuB`q0%>U9 zP)l8xP-tq#Dp%K+aGt-Xyr}E2&?6J*pr5}CR9wPRcLChFjy5n>GyFi#(cD+Dg|2*& zjbc^`q7TN9CDD}uat==@( zn<>Fm7{}~8!wXZ&*;XuVlw#VhyEsWYs+UqsX$mH3ABqa;FGk7MIlR>ygEG^;Qc(*O zP`c^bEc=35b1N#>GefH>!&F)eAyU*rqU%}}MModh27>gg+Pn=L;jGzIg_>KpW|~#b z_yFEUM@4#T<1#M4nLuNPb$}9Us$Yh6msNd4ygc!Rk#31q9(gDXi}Xp z$QTs2pLVcCqEMgl`v+5Jlhl2rDq+QQwMZ<6Zg6&?E)&hG=J{tfB7-muF1l#H~uhP*uZ7_r;~VReMt8T2GIxDj@THhpTH<-Fo@>O5GsPSt`8mWH|Bf@+8 z+k?TN--~vNqu)o6!|v3%+?(Cs9*lGd;YS+KvUHtp_&d1St8h!IyBMl$* z%OnCc>SfcA)PzH$pyGIJO-ie=GCI)_jht~|yxQA?))XA<)ZJc}(NiC2aE6GB$@B=p zmY3Sq5Uh)8iNjG#ZQyP|L6(~pL4-n=4bA2%E)AfA3_npfKSSWFy7J)`IM=mBNAcu} zL~m1+bgq;M4T;-rbjqRt%q6w8jM-d8P>NO9R$*I(Z58%oDeO0O$?h|{qUEkIi=1rTHTRy;kjD>RtGoB*4|)Tq(f3oCF1NtRL?^zKWoJ+spZAD^F+v3R0d+$Mx&1iJ zrcNd*6UZj1MrHLYGDZ%aBL?6N#2y@b=vig9tl1^4o8P5H%<{X*ED$@xNUj#cLz>=J zs>O4=lqFOrrFd@k!P~m*>K_q5^dO$M7HhJ0`#nBc-E@0T7B-Q9vS6pOFY2cGexBkX zE%zMxq-qyWy|o*7nR#LN?l#s8DO=l%yns<56ZMmK`DGn~kLLgszb`lpc>Lr7$vC9_ zcWdVgY-p+Iemo7UCi5kpA1ZiPmyIS;U+o=+s(RPHLah~kECUOgIR|T6Y~>P+$HmMW zs5vfk1Ul+f8csw<&z~!VuY7BZQF^)n`C^j63T8IB(hu*{NnDI}y$YIYW& zLpq;hemH}khsYF3y0MAyfd<##)E!Dm(oOx~VotBoCwXm9TwcFA2oULE5w`BOl!v`_0qbrU8e2~QY*QgqY`Kt8E0kqEp>f}$pQYw_jqh_66~Gr zy3Ao85kH5-rE`K9`w-B%+H`JhQc(MR^0I=cy~NHn;_V%drPQ8? zcGTQHq)ITIXWTe5>h9kP$hR>=>nf2m)N=xDkt%F z;q1`&AEwu`rJ1M|ORcYE%XQN*h(5!YN9i>KW9VGVX!%G|LC=e_t1@tl`3yiX7XyXK zRG@1b=zH5D0nIq|eVNmOr_LSCq|>=OteyF0hCv3|3(m9GpEuk)ZFiMv^ZPhkd#7y_ z-%^8CG%22fO;oPSsxDnizj?3;P=2Z324xB_n2sB!uiw;VuaXJ{6SRztpz5#MMo_J+ z-bRRfV_+j_o)*{$b5RQL8RYV~u8dMgF7W9sicJR@l>?;BVGRgtKy0)Dv0Im&=akax z&~JO+b5wh|Q#OsolWw)n`M$JhN_u8+PA29kKs>245@{3HdDGr!e+`fm#_K$8A#SFXUbgMOBU|}GUn{OCTk&bd=K}Frzp(RfO*SUf%++TY)!c1!*>*&x>9$1F;v9WxodL{{qM?;{Nq(Zz)*V2wicw~C=zcg#G{@qaC4?vivTeu6B^7_ z@_RU@A=i#hnMQxLLfVSGX8A0N^QAO#MQJe;LC6Qg-O=tyJQrP|40`f!j2v`$a@1Wu zDM>M%RO$~D;0Z>qWLA$$l;$GYGfvV{B+pLa7RSCgpQWdZ}bH8w>ol>(b9C z6?O&#jveen()K(^kxnZZ*v5=cH)@6lJ2C5XeKi7x8CKH{(|X%p;l=--y)SQW8%N^( zDk%MvnJL-p*p8FR5T5Zcm?iq^tIemBG7pQR{L!sJ+}g6JCK# z^Za+tmvN)j_E5sgI%I7^H94xjiD&c0^BZ}Wk*+%c++e6{j0Nr%g3c`P_+|k&t8{nu z@2>vc)&E&v{a=WZxmO4OAe^s{ya?YTIYCV?`UN_xJ>38K{Wsy=vn{FpK|~PBIT_OB zs%L?fT7UPdb{ZG}%ErJ(Gc7V~s-{XOW$Ke~f!E0F(kq^8f}(n`kXY?x)Iqg(D(Z4~ z{i?NJ;w8lUk=gH2qnDe zFL`RRVVx~K41SnQsB0HDgAJWxX3CA=3rX^=Ihy7FYaM>ew}sX;_Nmhky{82 z$T;N&&8=0}=1LY~Qxe81w^JJvF=1Ogkt1$5jQpl*Qd`S6yOa!>?N-#+%SF%X?n*B! z66(!<9ej(_tz?p5R15}o&}}u1)%4om1~?jG6!_c6IQqcMWIEqC@&VRrY`e%Wo!E#`b@ zqXMJe9Mpk?h^>8!pdVn;6xJ(CV^s^QCS)f*lV)qJsk&4{scH7jR$Qixnc!VQR!Una z@RJfl8X6%{LVR{ov6G5R4W)XGl^8~iPgW!NnX>369!xP~m=a;0?7#lr@10^ciz9yQ z3v^7ScSWU<`v^L15YXp6P zZbNyW^wCz>E6z#`56WLl;4_X981jOPt{pEIshGqsX@i$5{eqRUF zA~tsEv!lJRCN+ z#&7kHIm!BmexuAOlM*Yby9a;Wl49N&(y*5816rTIN!`|!N)4ks* z{r2(ihrfUS@Bh6=pZ*igJ{}yg@XP->_P#xQI{t98`-z>=kGBuu<;DH)|A~gZeotVU z@`YWQBjXz;KAnH2H&K$TPdP9M_cr06xVOLe=Kb5fcY6o#G8JGLiP_VhR@uzXLbW*y z;EeIvNjgM)Oh#fH^+q$s=@=0-#2%LOQ1aJF;05s`X}E;a z6`EHxdxhpE*()?J@vk_V@oPEqj~5v#a($*BuPB#RNVy@n=J+)!yFOHxblD|D#_?fZ z4VWvF#uTm^R8zSGEi)tMHmc#j;nt{hHKQ(5lN%B|+&Z&SXl%Df6nHd$G*{62T>ac=wDtfo|etiGsA zC8x6^w;|PSI#4I<9qXs3i&e#jtGVPTb?}*f8Ml*zomxOMsqz@^Q$}RKDi@YgiY|8; z(<3vgN@5^cR$XMq0sAb)JOU1Gbn2AEbOH1i@0yaaQ@W4u*TBSj0 zLoZR4E6(ydkoWm5aS3kO37C_-hWW6wf@^Szp8AC_$qx40V#iU7{b??-uE%r(pG;#8 zeu^8Xiz8-krd^tAAyG{+=SpX)=o}V)j^gvW7W|J3`$Uah8gvqV(@3WG0f7Rb$-M|CDCpT8>)=R^|3Y-h5a@#6guI) zn%_mTD@q(M%x_j>coYQ5Wn4L32!q!m|LZmK=sn^meE!RY5htsE%SO-2UssHqLWa@6 z?LKez(Y0=FFq}btR^hv3$UC2t+-bdAi`XU(5fMtX!a>dJuNdHx60$s)MbfTzqgr%7 zY@bgh4_P;B{)_S&>0VH~lgkzTr+PbPzuA~gj0%VU^seFjco8A>w|Hs$cMJm@Esp&E zm;NdeuSPIvQ126DmzZS2fSn8%nfhf<3)v1iP%bd+e9mMBVf9yr><~ZSp1d@Z{$4Gz zo>+d`etC+7-2OmUKRzo+J}sku6_@L^>eq}-+h%>f9z|2Ymu+?C{LY-;ne#hyerL{q z>Uwi$&R<38*6RfaRU=sFonD;f<1jct4H>s;$?n-2lxk!r0c9!F*~u6N0U`$YnJ`D6 z#1S11li$7x*ErEg8cHole^X9#d<)3}*-8n0>0(#$@q*IH0D6-w6Q{@vpwy@`{5UFr zMi;GIYvuS@70t|rO^wXpT309;2s`jGu>x$0$`xW2qiQZSD;LR%nRc(MmymVM!iu%8 znO)JF=bQOvDY}<_I$8--AtmxC0k>)MKOyKg(^p%~#^7*y@NJm9=5+zMoyO7y;6A<> zJy?qLrEoc0fJ)3!auKL-fVWMHPleHYK&eFvni5{hrK_B#MzXZnR~Kt`o;z=hya@w% z2w)aD5#Unn#7({R<(J9YoWS09K46c11W;NGvr#`TA2r^RF@^dG`gzOpw@YEhTu*sfjqEo_}4imK(69cAEiFAe{kM6r7uL#gsErHJ?r0yvu?XlP4OH=mb3?9h|z_!7;G=~gv5TVep zqcHhul|rX807C>Y@q*ajT!sIs;dyu3eV2l$OF`77AnH;O*$;1*f~ZSD^fDu}-tN@F zTVA1PPQ%F+|JF!XHwcud>c4_te5rC6<(BH$M%fw_yGYnwwa#*1qfMJEWsEBP2laeN zWEuHy>LV_S*@Ae;2N8ABjmxx=Vs{G@R$9bDa~A8UXDoZQZJ+nLe_aQhq{iqg3RzhI zuglU`G^#GD#oH&G;mkxS0=C;i6|dPD6%91r9%&DGkCyKe&0%JvsLgS&zCrT_8sS-+ zcE;|KV}Hr1SS!UVd1blvJZ|moG=ANBqVj0B4$tHoL0_gjZzPJ6>MOcBAE`9x(egt& zX|g^4X0sO-uN^4|S==-o4-I)|UNM=vZ&Qs^oh)?lK~9%{(a4wiX7h%jlhR3(#0m9L zi>3&{$KgND*u$D9*W0OP-|^C?*sN$w&dtjX_I+F@)jZA zwg&vno2b2JB z3^D275#GuaMPurNISzE(FMvdjFko;YoluqXtLe=lBd-)a#T22HT=AN4#`krI`QfL^ zVFm(9C&&l!OtOxLnx&)}FoJ9=M6(ckniM5lg8#G_XMKRwm?Ix-0Zce0k-m{3D;%e1N7f^2VY#|5+Tas(bu54+a4W!5or^frtV`SRAS}k>~+>QLs== z{S_l708WgKpay8A%N_Tu-NkuW5YNI773%tK=;9XjJ>g_#Agfy zc!B@~K8*(f+F~{|lpW=%Ii4h((wPyK4WA5K27Mmlaqa zpvc?)wY$WvS#hb=_LPKQek&_Izq7RXmf@lTF~oN$1PlekEm>y37lo&2D212{-GtgU zI2R&mNW&@e!C(O(NbDRCaCO21zsQZCHFmMI;~>Hw|GG7U9+zgi6+T$MDv>PE_s5Wp zx3ibVcBa3nA*@uTG~`fGr_6q|Lfa9dtUX2Yl8rbqeVZ3Dilaw z@GBQDO27RG*#(~BNW5KsgzN)CCvcX2{2Zbwj;HE}OL0o}4qx|spOr8uCN$~yN}ulr zgPD&;_u(Gi_b5a2XuM#fHxHAC*0w4C7P%AIl=-LyL zbM}BEsnPEAd)MM9D`(&%WM4$OiTC~9**)I}*OW%BVKj&aPAC%;FQrs(Z*CLj#gHFE zhCU#4Ec?oT`QsjiXDq@~A){EpKkFid6FH*L{k?AYyOMiZ3Ilnl^4rcxEDKNm zhspm$QSb0zC;1#`^6xN5TcsBzAfKRg9D* zKq)R}2PVw%v&}t|r67mAgfDMo*E42WF0w6W713G-N0#?AP^izbGp;9-f zs#J5E9c$|9>y)(W9`O@|@=ueo{q!EyOjf10JI7tzNRVglGj0vK9Rh|}Tl0zW;;}>D z?$=?5-XIuyV=j^!y(lEr8$2qANDDZ?+rsl%fW7p=Y#$6L4FvKw8(mO3iDyfn8xk(s zdvP#3W`<924r?ACQceO&CkzarHv#bsL=*&Eph|?SB>9Cjqf5N3^ntd1WD7wn6dzL9QNQ zp3f1uBZ4#qLVR`a6x};T_fFBhQ?wBvmOaAP=H4d)cv`@(*ncGWh4Q=#`iv+^t6+Sx zdgp2TF+iQUPwVwVHhwCMJN%+1glKE~qb>2+?|o9SB~5@8KP7P~%kMso%{a#Fb~nHh zLs7cSTwKx86}fs)(R03YzNv$5mVsSHyj{bqXO_wuaJha9%n;qQDT@nfwnCft(n7B- zqx%ay={u$bZHAFj-le;o!gdk&EyU|=YFfq)o9nR;)1T+eU9sJZx>o|p)0?%X^Yx@XF`|EW6 zXl~5-o5Y`3V9hK`ZnO=qRb3JX0l*}6F;<6`AcIW@X=xHoJdk;TZQ~@I!iDfY9v}cc zFAiaZI9-v_fD>nZ5HnP+c7TY25sH$EcLb&1#L?OvoZZ3s!VgYc(3_PYZ#u-A=Zbja zj=a~w+;lKE9n8&BgSmOmw}7{Gi18|CWMy`KhkHOmWbO8-3+lO8qY}p2z6qE;cDf6s z91St?S&|X#U$f+cc)-ox1~xjyX{S_gj#6E^*_YU&jAAwlb&@zy1ZSo4&mAv0rDW-z zsax7Sd(^u+y!-O(#m!G6lhC?tQ%Pg)Myd>-tshXiL2x^yGMt%atK^HN-Rh1chASKh zcMn2Um_Ht7>{r5cm8AWaiBayz6VDVg<#CXfw;8r^P zLD3Hw0fdEjR9aadv646ga}*-r(di8G3rIilM9lIqhownf049KjzI0p*kso^qF#LCd zftM7#BN`%FqazECxO|U!Gv?SxPp@pE^s#Wyn{oNDsVF|3rm#7h!ZIOTZ-=X>VWU5Y zqK94P{C+PP#8V{XiZZe#Kbw3ys#bcCyWIRQGB>|r=_)QFS6f+ry=|U${k|^I$k)pg z9Lgl)WW=?|V4)SpW?FU)L3?!90*R$cb4{}~Ag_fw?(nYl{au3fTE}&ggq297ss|P4 zskKBetqGW@%D?E@EyIT0z9T}>#Zp@r0RtdJvY%j}B0FLd;VA-`^D%@T;z}x%TBt|; z7BL_@g~nc?DJ+u`5B_2a8-?Wq4!(+L7j-^=z`-RZ=AXxLNTT%53+heG&ql-PkJpHy z@E)CFHi$!wpW=ARr%k)c{5)3;>g!%MsH%pqLCxZ*H6WsAbE6+O-o35^?ALEWCjmwz z;y=X=vuu@7S`j{2TvOGHCY_^j`O#OxLwg3JiXK|PPL}dznu~lGLEynOlu{m6dYrP> zA!!f_6>ua#BnlTgL^2^1!9jpDxjT|l+DL;(cfdMW4D#EqXdx&mVKMtVYnu2cDtCA5 z5=Ll=aE(ToMd9L_QnfHw5WP8K4k;w^^4L<&<{GTaA(3sN!R4Z|kIOC=6}+0_S8=EB z6S@k}bzU(LQYyf6JDvYAvPu*Vo2PylJyDsoSC=$GE&H$qEiimk{V!aT<`*{5`NB@y z>$JTmELuBluN}#{UzeBR8^lp#7$sG?N|vU8NxLA%Bs$n{4?9UU-JT##`{IC`q`7E{ znzXG_AgG9+KERPo<-kBpA{=CrC%`bo_lOw~NRaqogd_-%kgjP;AdiwE_7U+A@X;(9 zZ+8$&9mG-xvGl|tmO8Ycr-2q!RNUnGwKi|0{oS>=BXt-@9mY|IanxZPbr?q-#*w}b zzNy01T@detYl_FvcfSrAm6u!xe+9qD>8-uv8T88Ucz34Y9+k-n^TLwTzdNXc zRMXpRMlmU746_zEqPq2aqKsRq6F7oixyWfCY&3Tk;zl;iMGMoyhH(+&B_EOB7x6Di zYE3S2D0vkDbdN&56DI)9;Q|apIt4iDyZ|4=Y<(36MXy}-qamh~t5Og=^Bw-S3aDy9 zyh|81)+bcmrRqfOo>oNK*w86I^}AU&S=`D(Td3K=g9Ts<;)&?5FHG6G&_fg=f#@X6 zmz^r{VpWNalN|4>LW&o}D^E^uBR53N5~=Yk_~p0c`?AZ2DAdmDlEG57(2(t!Pw`$H zO2f5$rB|;OVqk@o0Bpe`Go$ueTmq)W%fcchk#vRCvQ?q=DdN3Vvlw=+;E@~kk6CXxsE5cJ$ zW)^B{?J7j5MbH}lNY0flhv^z|8-{dUwv*w}SPL5$yY_ykDt3(vk9aV}k=V4&gn3%O zN)h}`-cCfBOEy}f5E=yAPztmB)hmW((;g&XfI!SOp@;$|J^=^_ngOOOum) z6W+cf1VwXx$&1DzjYnhox=X0v9>{fWEG?z}Cj@;Ndn)oIX7c@FZz4D7*Xs`|gtquP z!39%*JkCTCX8R436B-klXM0KIV+1`)&PWtu#nLqu858-ba|$C^TJL+GH}aX@M2hyG z|MZN%-t~LpU&o6Gl_n$R1U^H4NVlp_N|G74#oU1=ONev1%{LrPSc!7=48htXuL!qD z@%ZBAXfz7Zh^r`v|MYH!T&H{!`LjQjel7!;TevPL31V$FO%W=7 zXr}b!q--;_btUeVRBuOTGdKQo82-Wu>A-Y)el}!0J&l_&pOcz4SAhn%59a>#tuz*A z#EPuQZ&tnJpmk%uL=k90pea0XqWo<536LteKW|HxZ8Af%vDq|P<+qtQ&k(RcP&5?k z*1DaYj?&clS*2;Cmupk&LuawR*n7WQg;=m4-WM{3;p8X?nm%}$1WN7KwT2C|b{m$B z95>ZwjZDL{I2FhQjPlJKN99xt#A=z&~!yV`vYm?u7&R^oc!f7IeXv>ui-Y4mF=}a<)idF zS}e=dW72QMmp8}ovfZOvHV=qdi0@&9zyt}v3S&d9a6ml!?UbF;DzCKkvyD^Qt;#ML zFpx4z|X>Tl#p!6Vq~(o zOhWKh%k4wi`yk$I`Oq0=a$9SEXQv`|My{*#=?Vw3th~hCS_$JO_c}>`t@pX43(Gd3 z;w3~L65whOBzlE@-0*_f7hjCCTLt}#$_$8HdJ4I#?fu!EeH|+A<4Kv<6`>t+^ITxo zRL1bCjcg=r`&Ve#^l ztn%-D?IiW5m0O^(;El6Z`Wyi_1IYY6?>(?r;qxPB{R+(+ZhHWxJs9ZfufdjCdlzhho>`}Ktpkm5@^d}oKkGZYMkM4+1@uAmyT8?kDTKF0xe#Z zq@=~vbx&?#cZTGP{hc=z{zYol;1OxMfAEO7WOexS`(P3A!}T{WT+AZ6eUl;tFFRg& z(H0HLiuL-`4MxihkBGUUct;qBnS_-oCT)1B8>$wuSI(~;lZ9Jxn+I@VeHHKcB_-^y z`Ab5apKNH`3sDOWYCWX*lxk><=5kF@a1n3HZlr3a&t{w)^3~6Fl1_uvw=3|{KH17W z%|~ARX=wOP0G3$})757qQk0LkjBCH8CX~a6kWS6NuPE`5EcjJ`;z+E5kC0v9DVDem zA0hjI&c3Dh{r#P{wXW4V5NI{u>Kv7-OMsl7CXWTV2G;s;Q0&Yy zLt>sg9fp~@%Rv2ZAQ2iBw3?4R>PsJN2<9jVwp1*m>O^a|f}alc-dXwAxTD|I`h$zq zsqVS3&C2dJN|80OU?Z~jY?IBl>fDy}#LSggyNM+a5u9Ya$ol}AiP=P4HJu`9&{RG) zrQUH#r6g{0`;Oci0T@0-Oe9tu!+RaTy(u1aPtPn`o20C>es*4wZAtIvtu<*AJdgxbk(RK{PqM7}mb#zhTqFRQHVmeeJ~sa>A0ci#4X{P_Ok R{|5j7|NlHI5FOOi1^}1s0384T diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index 19cef7dcb28c142a8667262d83a275d31b228260..c6250131a1b3850054c016df427caa7fb4e31226 100644 GIT binary patch delta 21 dcmdlPxHE7(T%W3!SOhRJ003x+2sr=% delta 21 dcmdlPxHE7(ch4=dwg_Ni003;s2%-Q0 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 68fbd006877f42531c8057e78f7f5bcf58981bbc..42681325bff7ecc6f3d6e9c171ee1bcef4619349 100644 GIT binary patch delta 21 dcmX?HbGT+gCu8r%u8p=FSsS$G%Zo8H004212yy@b delta 21 dcmX?HbGT+gCu7gXu8p=FH)pbZmKS4Y004Cu2=@R0 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 7d55f5632b7e7e3f75823a39c5a8048bc0603749..4c403bec4d751d87886da6d00a3c01ccdbd58586 100644 GIT binary patch delta 5159 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 Vt=D(!{|^8F|NlfMAu_El0RTXd9EAV? diff --git a/build/version.go b/build/version.go index ac2df237b73..bbfd39ea240 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.23.3-rc1" +const BuildVersion = "1.23.3-rc2" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 62bc8eeaad9..13e64bbcedf 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.23.3-rc1 + 1.23.3-rc2 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index e24802952f1..9bf3cb5d249 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.23.3-rc1 + 1.23.3-rc2 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 740419b8daa..57df5b9c68d 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.23.3-rc1 + 1.23.3-rc2 COMMANDS: daemon Start a lotus daemon process From 02a0c9c6f390e76a9f60158221bf168592be62f5 Mon Sep 17 00:00:00 2001 From: Aayush Date: Mon, 24 Jul 2023 10:49:37 -0400 Subject: [PATCH 06/22] feat: changelog: add details of tracer experiment --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 956e5b0d2a6..7d28f174f69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,13 +12,17 @@ This is the second release candidate for the upcoming feature release v1.23.3 of - The lotus-miner PieceReader now supports parallel reads: https://github.com/filecoin-project/lotus/pull/10913 - Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) - If unset, we default to caching 16 most recent execution traces. Storage Providers may want to set this to 0, while exchanges may want to crank it up. +- The tracer's Elastic Search transport has been upgraded to support batch traces: [filecoin-project/lotus#10405](https://github.com/filecoin-project/lotus/pull/10405) + - This facilitates an experiment being run by ProbeLab [to study the Filecoin PubSub layer](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?d=d8df4e142b78427ab470db68877da1ba#abba19208e3b4420a6388df7a3a48b62). + - Users are invited to opt into the experiment by following the instructions [here](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?pvs=4#092a3a68d6734a12961f5c3fe95767e5) + - Doing so has negligible impact on memory and CPU usage, but has a 2x impact on incoming and outgoing traffic. + ## New features - Implement a tooling for slasher ([filecoin-project/lotus#10928](https://github.com/filecoin-project/lotus/pull/10928)) - feat: miner cli: sectors list upgrade-bounds tool ([filecoin-project/lotus#10923](https://github.com/filecoin-project/lotus/pull/10923)) - Add new RPC stress testing tool (lotus-bench rpc) with rich reporting ([filecoin-project/lotus#10761](https://github.com/filecoin-project/lotus/pull/10761)) - feat: alert: Add FVM_CONCURRENCY alert ([filecoin-project/lotus#10933](https://github.com/filecoin-project/lotus/pull/10933)) - - feat: tracer: upgrade elastic search transport for pubsub traces ([filecoin-project/lotus#10405](https://github.com/filecoin-project/lotus/pull/10405)) - feat: Add eth_syncing RPC method ([filecoin-project/lotus#10719](https://github.com/filecoin-project/lotus/pull/10719)) - feat: sealing: flag to run data_cid untied from addpiece ([filecoin-project/lotus#10797](https://github.com/filecoin-project/lotus/pull/10797)) - feat: Lotus Gateway: add MpoolPending, ChainGetBlock and MinerGetBaseInfo ([filecoin-project/lotus#10929](https://github.com/filecoin-project/lotus/pull/10929)) From 9177b8460240768e44a31a4cdda1b3e33a52cf21 Mon Sep 17 00:00:00 2001 From: Aayush Date: Thu, 27 Jul 2023 18:38:50 -0400 Subject: [PATCH 07/22] chore: release v1.23.3 --- CHANGELOG.md | 4 ++-- build/openrpc/full.json.gz | Bin 33969 -> 33965 bytes build/openrpc/gateway.json.gz | Bin 10425 -> 10421 bytes build/openrpc/miner.json.gz | Bin 15939 -> 15936 bytes build/openrpc/worker.json.gz | Bin 5246 -> 5243 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 9 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 956e5b0d2a6..b0468c087aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,9 @@ # UNRELEASED -# v1.23.3-rc2 / 2023-07-11 +# v1.23.3 / 2023-07-27 -This is the second release candidate for the upcoming feature release v1.23.3 of Lotus. This feature release includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. +This feature release of Lotus includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. ## Highlights diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index b6d24e05465f215677d012c55228c9cc2f930d6c..609047aae589d81b5e1dc4965c990458f631f9a5 100644 GIT binary patch delta 33910 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 M|Gl4C@zB%;0E4y4)Bpeg delta 33921 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%0D9@!PK{YBj>L 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 a-cUW@@#^mf6a>V_2jaDF39m8~#Qy=(09#%F diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 42681325bff7ecc6f3d6e9c171ee1bcef4619349..8068f521a57835b4426eeaad16a8e272ec053b33 100644 GIT binary patch delta 15934 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 delta 15937 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 4c403bec4d751d87886da6d00a3c01ccdbd58586..5e3bac1886aa74c7427be5b93fdefe740e66be39 100644 GIT binary patch delta 4185 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 delta 4161 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 Lu*2~Itu6ro=#&#j diff --git a/build/version.go b/build/version.go index bbfd39ea240..ab97f7a89e6 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.23.3-rc2" +const BuildVersion = "1.23.3" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 13e64bbcedf..1c3ea0c8458 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.23.3-rc2 + 1.23.3 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index 9bf3cb5d249..cb5ba125a86 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.23.3-rc2 + 1.23.3 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 57df5b9c68d..1ff9cdf598e 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.23.3-rc2 + 1.23.3 COMMANDS: daemon Start a lotus daemon process From 6635833aecb00fd8de2ca8ffc5f4a1345e5e8885 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Mon, 31 Jul 2023 15:19:23 -0400 Subject: [PATCH 08/22] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Friðrik Ásmundsson --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d28f174f69..649175d52dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ This is the second release candidate for the upcoming feature release v1.23.3 of - Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) - If unset, we default to caching 16 most recent execution traces. Storage Providers may want to set this to 0, while exchanges may want to crank it up. - The tracer's Elastic Search transport has been upgraded to support batch traces: [filecoin-project/lotus#10405](https://github.com/filecoin-project/lotus/pull/10405) - - This facilitates an experiment being run by ProbeLab [to study the Filecoin PubSub layer](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?d=d8df4e142b78427ab470db68877da1ba#abba19208e3b4420a6388df7a3a48b62). + - This facilitates an experiment being run by ProbeLab [to measure the performance of the Gossipsub protocol in the Filecoin network](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?d=d8df4e142b78427ab470db68877da1ba#abba19208e3b4420a6388df7a3a48b62). - Users are invited to opt into the experiment by following the instructions [here](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?pvs=4#092a3a68d6734a12961f5c3fe95767e5) - Doing so has negligible impact on memory and CPU usage, but has a 2x impact on incoming and outgoing traffic. From 4872ad66a776c376df2055cd18a17389efe30f96 Mon Sep 17 00:00:00 2001 From: Aayush Date: Mon, 31 Jul 2023 15:13:20 -0400 Subject: [PATCH 09/22] feat: FVM: do not error on unsuccessful implicit messages --- chain/consensus/compute_state.go | 4 ++++ chain/consensus/filcns/filecoin.go | 5 +++++ chain/vm/fvm.go | 4 ---- itests/remove_verifreg_datacap_test.go | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/chain/consensus/compute_state.go b/chain/consensus/compute_state.go index 6b08519af7d..64b9624ea2b 100644 --- a/chain/consensus/compute_state.go +++ b/chain/consensus/compute_state.go @@ -135,6 +135,10 @@ func (t *TipSetExecutor) ApplyBlocks(ctx context.Context, return xerrors.Errorf("running cron: %w", err) } + if !ret.ExitCode.IsSuccess() { + return xerrors.Errorf("cron failed with exit code %d: %w", ret.ExitCode, ret.ActorErr) + } + cronGas += ret.GasUsed if em != nil { diff --git a/chain/consensus/filcns/filecoin.go b/chain/consensus/filcns/filecoin.go index 509eb8a5e85..fd49f1c9a33 100644 --- a/chain/consensus/filcns/filecoin.go +++ b/chain/consensus/filcns/filecoin.go @@ -80,6 +80,11 @@ var RewardFunc = func(ctx context.Context, vmi vm.Interface, em stmgr.ExecMonito if actErr != nil { return xerrors.Errorf("failed to apply reward message: %w", actErr) } + + if !ret.ExitCode.IsSuccess() { + return xerrors.Errorf("reward actor failed with exit code %d: %w", ret.ExitCode, ret.ActorErr) + } + if em != nil { if err := em.MessageApplied(ctx, ts, rwMsg.Cid(), rwMsg, ret, true); err != nil { return xerrors.Errorf("callback failed on reward message: %w", err) diff --git a/chain/vm/fvm.go b/chain/vm/fvm.go index 7c79972c7ee..08df7b2e0d2 100644 --- a/chain/vm/fvm.go +++ b/chain/vm/fvm.go @@ -520,10 +520,6 @@ func (vm *FVM) ApplyImplicitMessage(ctx context.Context, cmsg *types.Message) (* } } - if ret.ExitCode != 0 { - return applyRet, fmt.Errorf("implicit message failed with exit code: %d and error: %w", ret.ExitCode, applyRet.ActorErr) - } - return applyRet, nil } diff --git a/itests/remove_verifreg_datacap_test.go b/itests/remove_verifreg_datacap_test.go index 3fd24174817..ac88574d2b6 100644 --- a/itests/remove_verifreg_datacap_test.go +++ b/itests/remove_verifreg_datacap_test.go @@ -275,7 +275,7 @@ func TestNoRemoveDatacapFromVerifreg(t *testing.T) { Params: params, Value: big.Zero(), }, types.EmptyTSK) - require.Error(t, err) + require.NoError(t, err) require.False(t, callResult.MsgRct.ExitCode.IsSuccess()) verifregDatacapAfter, err := clientApi.StateVerifiedClientStatus(ctx, builtin.VerifiedRegistryActorAddr, types.EmptyTSK) From 286482fd99bfa0f899ba89b769edf1c11b3c1b28 Mon Sep 17 00:00:00 2001 From: Aayush Date: Mon, 31 Jul 2023 16:07:09 -0400 Subject: [PATCH 10/22] fix: failing test: Tweak TestWindowPostV1P1NV20 test condition --- itests/wdpost_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/itests/wdpost_test.go b/itests/wdpost_test.go index 08c9d4343bc..c666538668b 100644 --- a/itests/wdpost_test.go +++ b/itests/wdpost_test.go @@ -484,8 +484,9 @@ waitForProof: slmsg.Params = v1PostParams.Bytes() // Simulate call on inclTs's parents, so that the partition isn't already proven - _, err = client.StateCall(ctx, slmsg, inclTs.Parents()) - require.ErrorContains(t, err, "expected proof of type StackedDRGWindow2KiBV1P1, got StackedDRGWindow2KiBV1") + ret, err := client.StateCall(ctx, slmsg, inclTs.Parents()) + require.NoError(t, err) + require.Contains(t, ret.Error, "expected proof of type StackedDRGWindow2KiBV1P1, got StackedDRGWindow2KiBV1") for { //stm: @CHAIN_STATE_MINER_CALCULATE_DEADLINE_001 From 0f6207a755a0109bc6d58c4e2fedabed0bde3360 Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 13 Jun 2023 10:21:48 -0400 Subject: [PATCH 11/22] feat: slasher: print error on failure --- cmd/lotus/daemon.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/lotus/daemon.go b/cmd/lotus/daemon.go index 106446c0af3..44082e05853 100644 --- a/cmd/lotus/daemon.go +++ b/cmd/lotus/daemon.go @@ -406,7 +406,7 @@ var DaemonCmd = &cli.Command{ go func() { err := slashConsensus(api, cctx.String("slashdb-dir"), cctx.String("slasher-sender")) if err != nil { - panic("slashConsensus error") + panic("slashConsensus error: " + err.Error()) } }() } @@ -697,15 +697,19 @@ func slashFilterMinedBlock(ctx context.Context, sf *slashfilter.SlashFilter, a l if err != nil { return nil, nil, xerrors.Errorf("chain get block error:%s", err) } + otherCid, err := sf.MinedBlock(ctx, blockB, blockC.Height) if err != nil { return nil, nil, xerrors.Errorf("slash filter check block error:%s", err) } + if otherCid != cid.Undef { otherHeader, err := a.ChainGetBlock(ctx, otherCid) return otherHeader, nil, xerrors.Errorf("chain get other block error:%s", err) } + blockA, err := a.ChainGetBlock(ctx, otherCid) + if // (c) parent-grinding fault // Here extra is the "witness", a third block that shows the connection between A and B as From a413a53be25df348adc9ba940f5157246954636d Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 13 Jun 2023 10:35:02 -0400 Subject: [PATCH 12/22] feat: refactor slashfilter to return bool indicating fault --- chain/gen/slashfilter/slashfilter.go | 48 +++++++++++++++++----------- miner/miner.go | 13 ++++++-- node/impl/full/sync.go | 13 ++++++-- 3 files changed, 49 insertions(+), 25 deletions(-) diff --git a/chain/gen/slashfilter/slashfilter.go b/chain/gen/slashfilter/slashfilter.go index 0e6b00cfbb0..71b5dad9ad9 100644 --- a/chain/gen/slashfilter/slashfilter.go +++ b/chain/gen/slashfilter/slashfilter.go @@ -26,20 +26,30 @@ func New(dstore ds.Batching) *SlashFilter { } } -func (f *SlashFilter) MinedBlock(ctx context.Context, bh *types.BlockHeader, parentEpoch abi.ChainEpoch) (cid.Cid, error) { +func (f *SlashFilter) MinedBlock(ctx context.Context, bh *types.BlockHeader, parentEpoch abi.ChainEpoch) (cid.Cid, bool, error) { epochKey := ds.NewKey(fmt.Sprintf("/%s/%d", bh.Miner, bh.Height)) { // double-fork mining (2 blocks at one epoch) - if witness, err := checkFault(ctx, f.byEpoch, epochKey, bh, "double-fork mining faults"); err != nil { - return witness, xerrors.Errorf("check double-fork mining faults: %w", err) + doubleForkWitness, doubleForkFault, err := checkFault(ctx, f.byEpoch, epochKey, bh, "double-fork mining faults") + if err != nil { + return cid.Undef, false, xerrors.Errorf("check double-fork mining faults: %w", err) + } + + if doubleForkFault { + return doubleForkWitness, doubleForkFault, nil } } parentsKey := ds.NewKey(fmt.Sprintf("/%s/%x", bh.Miner, types.NewTipSetKey(bh.Parents...).Bytes())) { // time-offset mining faults (2 blocks with the same parents) - if witness, err := checkFault(ctx, f.byParents, parentsKey, bh, "time-offset mining faults"); err != nil { - return witness, xerrors.Errorf("check time-offset mining faults: %w", err) + timeOffsetWitness, timeOffsetFault, err := checkFault(ctx, f.byParents, parentsKey, bh, "time-offset mining faults") + if err != nil { + return cid.Undef, false, xerrors.Errorf("check time-offset mining faults: %w", err) + } + + if timeOffsetFault { + return timeOffsetWitness, timeOffsetFault, nil } } @@ -50,19 +60,19 @@ func (f *SlashFilter) MinedBlock(ctx context.Context, bh *types.BlockHeader, par parentEpochKey := ds.NewKey(fmt.Sprintf("/%s/%d", bh.Miner, parentEpoch)) have, err := f.byEpoch.Has(ctx, parentEpochKey) if err != nil { - return cid.Undef, err + return cid.Undef, false, xerrors.Errorf("failed to read from db: %w", err) } if have { // If we had, make sure it's in our parent tipset cidb, err := f.byEpoch.Get(ctx, parentEpochKey) if err != nil { - return cid.Undef, xerrors.Errorf("getting other block cid: %w", err) + return cid.Undef, false, xerrors.Errorf("getting other block cid: %w", err) } _, parent, err := cid.CidFromBytes(cidb) if err != nil { - return cid.Undef, err + return cid.Undef, false, xerrors.Errorf("failed to read cid from bytes: %w", err) } var found bool @@ -73,45 +83,45 @@ func (f *SlashFilter) MinedBlock(ctx context.Context, bh *types.BlockHeader, par } if !found { - return parent, xerrors.Errorf("produced block would trigger 'parent-grinding fault' consensus fault; miner: %s; bh: %s, expected parent: %s", bh.Miner, bh.Cid(), parent) + return parent, true, nil } } } if err := f.byParents.Put(ctx, parentsKey, bh.Cid().Bytes()); err != nil { - return cid.Undef, xerrors.Errorf("putting byEpoch entry: %w", err) + return cid.Undef, false, xerrors.Errorf("putting byEpoch entry: %w", err) } if err := f.byEpoch.Put(ctx, epochKey, bh.Cid().Bytes()); err != nil { - return cid.Undef, xerrors.Errorf("putting byEpoch entry: %w", err) + return cid.Undef, false, xerrors.Errorf("putting byEpoch entry: %w", err) } - return cid.Undef, nil + return cid.Undef, false, nil } -func checkFault(ctx context.Context, t ds.Datastore, key ds.Key, bh *types.BlockHeader, faultType string) (cid.Cid, error) { +func checkFault(ctx context.Context, t ds.Datastore, key ds.Key, bh *types.BlockHeader, faultType string) (cid.Cid, bool, error) { fault, err := t.Has(ctx, key) if err != nil { - return cid.Undef, xerrors.Errorf("failed to read from datastore: %w", err) + return cid.Undef, false, xerrors.Errorf("failed to read from datastore: %w", err) } if fault { cidb, err := t.Get(ctx, key) if err != nil { - return cid.Undef, xerrors.Errorf("getting other block cid: %w", err) + return cid.Undef, false, xerrors.Errorf("getting other block cid: %w", err) } _, other, err := cid.CidFromBytes(cidb) if err != nil { - return cid.Undef, err + return cid.Undef, false, xerrors.Errorf("failed to read cid of other block: %w", err) } if other == bh.Cid() { - return cid.Undef, nil + return cid.Undef, false, nil } - return other, xerrors.Errorf("produced block would trigger '%s' consensus fault; miner: %s; bh: %s, other: %s", faultType, bh.Miner, bh.Cid(), other) + return other, true, nil } - return cid.Undef, nil + return cid.Undef, false, nil } diff --git a/miner/miner.go b/miner/miner.go index e1737009b9d..1caaade96f0 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -324,9 +324,16 @@ minerLoop: "block-time", btime, "time", build.Clock.Now(), "difference", build.Clock.Since(btime)) } - if _, err = m.sf.MinedBlock(ctx, b.Header, base.TipSet.Height()+base.NullRounds); err != nil { - log.Errorf(" SLASH FILTER ERROR: %s", err) - if os.Getenv("LOTUS_MINER_NO_SLASHFILTER") != "_yes_i_know_i_can_and_probably_will_lose_all_my_fil_and_power_" { + if os.Getenv("LOTUS_MINER_NO_SLASHFILTER") != "_yes_i_know_i_can_and_probably_will_lose_all_my_fil_and_power_" { + witness, fault, err := m.sf.MinedBlock(ctx, b.Header, base.TipSet.Height()+base.NullRounds) + if err != nil { + log.Errorf(" SLASH FILTER ERRORED: %s", err) + // Continue here, because it's _probably_ wiser to not submit this block + continue + } + + if fault { + log.Errorf(" SLASH FILTER DETECTED FAULT due to witness %s", witness) continue } } diff --git a/node/impl/full/sync.go b/node/impl/full/sync.go index 9be43338e56..223f5c29e62 100644 --- a/node/impl/full/sync.go +++ b/node/impl/full/sync.go @@ -58,9 +58,16 @@ func (a *SyncAPI) SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) erro } if a.SlashFilter != nil && os.Getenv("LOTUS_NO_SLASHFILTER") != "_yes_i_know_i_can_and_probably_will_lose_all_my_fil_and_power_" { - if _, err = a.SlashFilter.MinedBlock(ctx, blk.Header, parent.Height); err != nil { - log.Errorf(" SLASH FILTER ERROR: %s", err) - return xerrors.Errorf(" SLASH FILTER ERROR: %w", err) + witness, fault, err := a.SlashFilter.MinedBlock(ctx, blk.Header, parent.Height) + if err != nil { + log.Errorf(" SLASH FILTER ERRORED: %s", err) + // Return an error here, because it's _probably_ wiser to not submit this block + return xerrors.Errorf(" SLASH FILTER ERRORED: %w", err) + } + + if fault { + log.Errorf(" SLASH FILTER DETECTED FAULT due to witness %s", witness) + return xerrors.Errorf(" SLASH FILTER DETECTED FAULT due to witness %s", witness) } } From 50a86f2161c6a88dc2d1b6b70a6e01e9cb88b46b Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 13 Jun 2023 10:51:03 -0400 Subject: [PATCH 13/22] feat: improvements to the consensus slasher --- cmd/lotus/daemon.go | 49 ++++++++++++++++++++++++++++----------------- miner/miner.go | 2 +- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/cmd/lotus/daemon.go b/cmd/lotus/daemon.go index 44082e05853..9fa1d42aef1 100644 --- a/cmd/lotus/daemon.go +++ b/cmd/lotus/daemon.go @@ -16,7 +16,6 @@ import ( "strings" "github.com/DataDog/zstd" - "github.com/ipfs/go-cid" levelds "github.com/ipfs/go-ds-leveldb" metricsprom "github.com/ipfs/go-metrics-prometheus" "github.com/mitchellh/go-homedir" @@ -639,11 +638,13 @@ func slashConsensus(a lapi.FullNode, p string, from string) error { } for block := range blocks { log.Infof("deal with block: %d, %v, %s", block.Height, block.Miner, block.Cid()) - if otherBlock, extraBlock, err := slashFilterMinedBlock(ctx, sf, a, block); err != nil { - if otherBlock == nil { - continue - } - log.Errorf(" SLASH FILTER ERROR: %s", err) + otherBlock, extraBlock, fault, err := slashFilterMinedBlock(ctx, sf, a, block) + if err != nil { + log.Errorf("slash detector errored: %s", err) + continue + } + if fault { + log.Errorf(" SLASH FILTER DETECTED FAULT DUE TO BLOCKS %s and %s", otherBlock.Cid(), block.Cid()) bh1, err := cborutil.Dump(otherBlock) if err != nil { log.Errorf("could not dump otherblock:%s, err:%s", otherBlock.Cid(), err) @@ -682,7 +683,7 @@ func slashConsensus(a lapi.FullNode, p string, from string) error { Params: enc, }, nil) if err != nil { - log.Errorf("ReportConsensusFault to messagepool error:%w", err) + log.Errorf("ReportConsensusFault to messagepool error:%s", err) continue } log.Infof("ReportConsensusFault message CID:%s", message.Cid()) @@ -692,24 +693,35 @@ func slashConsensus(a lapi.FullNode, p string, from string) error { return err } -func slashFilterMinedBlock(ctx context.Context, sf *slashfilter.SlashFilter, a lapi.FullNode, blockB *types.BlockHeader) (*types.BlockHeader, *types.BlockHeader, error) { +func slashFilterMinedBlock(ctx context.Context, sf *slashfilter.SlashFilter, a lapi.FullNode, blockB *types.BlockHeader) (*types.BlockHeader, *types.BlockHeader, bool, error) { blockC, err := a.ChainGetBlock(ctx, blockB.Parents[0]) if err != nil { - return nil, nil, xerrors.Errorf("chain get block error:%s", err) + return nil, nil, false, xerrors.Errorf("chain get block error:%s", err) + } + + blockACid, fault, err := sf.MinedBlock(ctx, blockB, blockC.Height) + if err != nil { + return nil, nil, false, xerrors.Errorf("slash filter check block error:%s", err) } - otherCid, err := sf.MinedBlock(ctx, blockB, blockC.Height) + if !fault { + return nil, nil, false, nil + } + + blockA, err := a.ChainGetBlock(ctx, blockACid) if err != nil { - return nil, nil, xerrors.Errorf("slash filter check block error:%s", err) + return nil, nil, false, xerrors.Errorf("failed to get blockA: %w", err) } - if otherCid != cid.Undef { - otherHeader, err := a.ChainGetBlock(ctx, otherCid) - return otherHeader, nil, xerrors.Errorf("chain get other block error:%s", err) + // (a) double-fork mining (2 blocks at one epoch) + if blockA.Height == blockB.Height { + return blockA, nil, true, nil } - blockA, err := a.ChainGetBlock(ctx, otherCid) - if + // (b) time-offset mining faults (2 blocks with the same parents) + if types.CidArrsEqual(blockB.Parents, blockA.Parents) { + return blockA, nil, true, nil + } // (c) parent-grinding fault // Here extra is the "witness", a third block that shows the connection between A and B as @@ -721,8 +733,9 @@ func slashFilterMinedBlock(ctx context.Context, sf *slashfilter.SlashFilter, a l // [A, C] if types.CidArrsEqual(blockA.Parents, blockC.Parents) && blockA.Height == blockC.Height && types.CidArrsContains(blockB.Parents, blockC.Cid()) && !types.CidArrsContains(blockB.Parents, blockA.Cid()) { - return blockA, blockC, xerrors.Errorf("chain get other block error:%s", err) + return blockA, blockC, true, nil } - return nil, nil, nil + log.Error("unexpectedly reached end of slashFilterMinedBlock despite fault being reported!") + return nil, nil, false, nil } diff --git a/miner/miner.go b/miner/miner.go index 1caaade96f0..9281854d7c2 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -333,7 +333,7 @@ minerLoop: } if fault { - log.Errorf(" SLASH FILTER DETECTED FAULT due to witness %s", witness) + log.Errorf(" SLASH FILTER DETECTED FAULT due to blocks %s and %s", b.Header.Cid(), witness) continue } } From fbac2202081cf061f5b7770d482b8a9b39915faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 1 Aug 2023 17:28:47 +0200 Subject: [PATCH 14/22] feat: chain node: Move consensus slasher to internal service --- .../gen/slashfilter/slashsvc/slashservice.go | 179 ++++++++++++++++++ cmd/lotus/daemon.go | 167 +--------------- documentation/en/cli-lotus.md | 3 - documentation/en/default-lotus-config.toml | 29 +++ node/builder.go | 2 + node/builder_chain.go | 5 + node/config/doc_gen.go | 35 ++++ node/config/types.go | 35 +++- node/modules/faultreport.go | 27 +++ 9 files changed, 306 insertions(+), 176 deletions(-) create mode 100644 chain/gen/slashfilter/slashsvc/slashservice.go create mode 100644 node/modules/faultreport.go diff --git a/chain/gen/slashfilter/slashsvc/slashservice.go b/chain/gen/slashfilter/slashsvc/slashservice.go new file mode 100644 index 00000000000..7a662288098 --- /dev/null +++ b/chain/gen/slashfilter/slashsvc/slashservice.go @@ -0,0 +1,179 @@ +package slashsvc + +import ( + "context" + "time" + + "github.com/ipfs/go-cid" + levelds "github.com/ipfs/go-ds-leveldb" + logging "github.com/ipfs/go-log/v2" + ldbopts "github.com/syndtr/goleveldb/leveldb/opt" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/specs-actors/actors/builtin/miner" + + lapi "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/gen/slashfilter" + "github.com/filecoin-project/lotus/chain/types" +) + +var log = logging.Logger("slashsvc") + +type ConsensusSlasherApi interface { + ChainHead(context.Context) (*types.TipSet, error) + ChainGetBlock(context.Context, cid.Cid) (*types.BlockHeader, error) + MpoolPushMessage(ctx context.Context, msg *types.Message, spec *lapi.MessageSendSpec) (*types.SignedMessage, error) + SyncIncomingBlocks(context.Context) (<-chan *types.BlockHeader, error) + WalletDefaultAddress(context.Context) (address.Address, error) +} + +func SlashConsensus(ctx context.Context, a ConsensusSlasherApi, p string, from string) error { + var fromAddr address.Address + + ds, err := levelds.NewDatastore(p, &levelds.Options{ + Compression: ldbopts.NoCompression, + NoSync: false, + Strict: ldbopts.StrictAll, + ReadOnly: false, + }) + if err != nil { + return xerrors.Errorf("open leveldb: %w", err) + } + sf := slashfilter.New(ds) + if from == "" { + defaddr, err := a.WalletDefaultAddress(ctx) + if err != nil { + return err + } + fromAddr = defaddr + } else { + addr, err := address.NewFromString(from) + if err != nil { + return err + } + + fromAddr = addr + } + + blocks, err := a.SyncIncomingBlocks(ctx) + if err != nil { + return xerrors.Errorf("sync incoming blocks failed: %w", err) + } + + log.Infow("consensus fault reporter", "from", fromAddr) + go func() { + for block := range blocks { + otherBlock, extraBlock, fault, err := slashFilterMinedBlock(ctx, sf, a, block) + if err != nil { + log.Errorf("slash detector errored: %s", err) + continue + } + if fault { + log.Errorf(" SLASH FILTER DETECTED FAULT DUE TO BLOCKS %s and %s", otherBlock.Cid(), block.Cid()) + bh1, err := cborutil.Dump(otherBlock) + if err != nil { + log.Errorf("could not dump otherblock:%s, err:%s", otherBlock.Cid(), err) + continue + } + + bh2, err := cborutil.Dump(block) + if err != nil { + log.Errorf("could not dump block:%s, err:%s", block.Cid(), err) + continue + } + + params := miner.ReportConsensusFaultParams{ + BlockHeader1: bh1, + BlockHeader2: bh2, + } + if extraBlock != nil { + be, err := cborutil.Dump(extraBlock) + if err != nil { + log.Errorf("could not dump block:%s, err:%s", block.Cid(), err) + continue + } + params.BlockHeaderExtra = be + } + + enc, err := actors.SerializeParams(¶ms) + if err != nil { + log.Errorf("could not serialize declare faults parameters: %s", err) + continue + } + for { + head, err := a.ChainHead(ctx) + if err != nil || head.Height() > block.Height { + break + } + time.Sleep(time.Second * 10) + } + message, err := a.MpoolPushMessage(ctx, &types.Message{ + To: block.Miner, + From: fromAddr, + Value: types.NewInt(0), + Method: builtin.MethodsMiner.ReportConsensusFault, + Params: enc, + }, nil) + if err != nil { + log.Errorf("ReportConsensusFault to messagepool error:%s", err) + continue + } + log.Infof("ReportConsensusFault message CID:%s", message.Cid()) + + } + } + }() + + return nil +} + +func slashFilterMinedBlock(ctx context.Context, sf *slashfilter.SlashFilter, a ConsensusSlasherApi, blockB *types.BlockHeader) (*types.BlockHeader, *types.BlockHeader, bool, error) { + blockC, err := a.ChainGetBlock(ctx, blockB.Parents[0]) + if err != nil { + return nil, nil, false, xerrors.Errorf("chain get block error:%s", err) + } + + blockACid, fault, err := sf.MinedBlock(ctx, blockB, blockC.Height) + if err != nil { + return nil, nil, false, xerrors.Errorf("slash filter check block error:%s", err) + } + + if !fault { + return nil, nil, false, nil + } + + blockA, err := a.ChainGetBlock(ctx, blockACid) + if err != nil { + return nil, nil, false, xerrors.Errorf("failed to get blockA: %w", err) + } + + // (a) double-fork mining (2 blocks at one epoch) + if blockA.Height == blockB.Height { + return blockA, nil, true, nil + } + + // (b) time-offset mining faults (2 blocks with the same parents) + if types.CidArrsEqual(blockB.Parents, blockA.Parents) { + return blockA, nil, true, nil + } + + // (c) parent-grinding fault + // Here extra is the "witness", a third block that shows the connection between A and B as + // A's sibling and B's parent. + // Specifically, since A is of lower height, it must be that B was mined omitting A from its tipset + // + // B + // | + // [A, C] + if types.CidArrsEqual(blockA.Parents, blockC.Parents) && blockA.Height == blockC.Height && + types.CidArrsContains(blockB.Parents, blockC.Cid()) && !types.CidArrsContains(blockB.Parents, blockA.Cid()) { + return blockA, blockC, true, nil + } + + log.Error("unexpectedly reached end of slashFilterMinedBlock despite fault being reported!") + return nil, nil, false, nil +} diff --git a/cmd/lotus/daemon.go b/cmd/lotus/daemon.go index 9fa1d42aef1..fbb9dfd9a50 100644 --- a/cmd/lotus/daemon.go +++ b/cmd/lotus/daemon.go @@ -16,11 +16,9 @@ import ( "strings" "github.com/DataDog/zstd" - levelds "github.com/ipfs/go-ds-leveldb" metricsprom "github.com/ipfs/go-metrics-prometheus" "github.com/mitchellh/go-homedir" "github.com/multiformats/go-multiaddr" - ldbopts "github.com/syndtr/goleveldb/leveldb/opt" "github.com/urfave/cli/v2" "go.opencensus.io/plugin/runmetrics" "go.opencensus.io/stats" @@ -29,19 +27,13 @@ import ( "golang.org/x/xerrors" "gopkg.in/cheggaaa/pb.v1" - "github.com/filecoin-project/go-address" - cborutil "github.com/filecoin-project/go-cbor-util" "github.com/filecoin-project/go-jsonrpc" "github.com/filecoin-project/go-paramfetch" - "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" lapi "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/consensus" "github.com/filecoin-project/lotus/chain/consensus/filcns" - "github.com/filecoin-project/lotus/chain/gen/slashfilter" "github.com/filecoin-project/lotus/chain/index" "github.com/filecoin-project/lotus/chain/stmgr" "github.com/filecoin-project/lotus/chain/store" @@ -168,19 +160,6 @@ var DaemonCmd = &cli.Command{ Name: "restore-config", Usage: "config file to use when restoring from backup", }, - &cli.BoolFlag{ - Name: "slash-consensus", - Usage: "Report consensus fault", - Value: false, - }, - &cli.StringFlag{ - Name: "slasher-sender", - Usage: "optionally specify the account to report consensus from", - }, - &cli.StringFlag{ - Name: "slashdb-dir", - Value: "slash watch db dir path", - }, }, Action: func(cctx *cli.Context) error { isLite := cctx.Bool("lite") @@ -401,14 +380,7 @@ var DaemonCmd = &cli.Command{ if err != nil { return fmt.Errorf("failed to start json-rpc endpoint: %s", err) } - if cctx.IsSet("slash-consensus") && cctx.IsSet("slashdb-dir") { - go func() { - err := slashConsensus(api, cctx.String("slashdb-dir"), cctx.String("slasher-sender")) - if err != nil { - panic("slashConsensus error: " + err.Error()) - } - }() - } + // Monitor for shutdown. finishCh := node.MonitorShutdown(shutdownChan, node.ShutdownHandler{Component: "rpc server", StopFunc: rpcStopper}, @@ -602,140 +574,3 @@ func ImportChain(ctx context.Context, r repo.Repo, fname string, snapshot bool) return nil } - -func slashConsensus(a lapi.FullNode, p string, from string) error { - ctx := context.Background() - var fromAddr address.Address - - ds, err := levelds.NewDatastore(p, &levelds.Options{ - Compression: ldbopts.NoCompression, - NoSync: false, - Strict: ldbopts.StrictAll, - ReadOnly: false, - }) - if err != nil { - return xerrors.Errorf("open leveldb: %w", err) - } - sf := slashfilter.New(ds) - if from == "" { - defaddr, err := a.WalletDefaultAddress(ctx) - if err != nil { - return err - } - fromAddr = defaddr - } else { - addr, err := address.NewFromString(from) - if err != nil { - return err - } - - fromAddr = addr - } - - blocks, err := a.SyncIncomingBlocks(ctx) - if err != nil { - return xerrors.Errorf("sync incoming blocks failed: %w", err) - } - for block := range blocks { - log.Infof("deal with block: %d, %v, %s", block.Height, block.Miner, block.Cid()) - otherBlock, extraBlock, fault, err := slashFilterMinedBlock(ctx, sf, a, block) - if err != nil { - log.Errorf("slash detector errored: %s", err) - continue - } - if fault { - log.Errorf(" SLASH FILTER DETECTED FAULT DUE TO BLOCKS %s and %s", otherBlock.Cid(), block.Cid()) - bh1, err := cborutil.Dump(otherBlock) - if err != nil { - log.Errorf("could not dump otherblock:%s, err:%s", otherBlock.Cid(), err) - continue - } - - bh2, err := cborutil.Dump(block) - if err != nil { - log.Errorf("could not dump block:%s, err:%s", block.Cid(), err) - continue - } - - params := miner.ReportConsensusFaultParams{ - BlockHeader1: bh1, - BlockHeader2: bh2, - } - if extraBlock != nil { - be, err := cborutil.Dump(extraBlock) - if err != nil { - log.Errorf("could not dump block:%s, err:%s", block.Cid(), err) - continue - } - params.BlockHeaderExtra = be - } - - enc, err := actors.SerializeParams(¶ms) - if err != nil { - log.Errorf("could not serialize declare faults parameters: %s", err) - continue - } - message, err := a.MpoolPushMessage(ctx, &types.Message{ - To: block.Miner, - From: fromAddr, - Value: types.NewInt(0), - Method: builtin.MethodsMiner.ReportConsensusFault, - Params: enc, - }, nil) - if err != nil { - log.Errorf("ReportConsensusFault to messagepool error:%s", err) - continue - } - log.Infof("ReportConsensusFault message CID:%s", message.Cid()) - - } - } - return err -} - -func slashFilterMinedBlock(ctx context.Context, sf *slashfilter.SlashFilter, a lapi.FullNode, blockB *types.BlockHeader) (*types.BlockHeader, *types.BlockHeader, bool, error) { - blockC, err := a.ChainGetBlock(ctx, blockB.Parents[0]) - if err != nil { - return nil, nil, false, xerrors.Errorf("chain get block error:%s", err) - } - - blockACid, fault, err := sf.MinedBlock(ctx, blockB, blockC.Height) - if err != nil { - return nil, nil, false, xerrors.Errorf("slash filter check block error:%s", err) - } - - if !fault { - return nil, nil, false, nil - } - - blockA, err := a.ChainGetBlock(ctx, blockACid) - if err != nil { - return nil, nil, false, xerrors.Errorf("failed to get blockA: %w", err) - } - - // (a) double-fork mining (2 blocks at one epoch) - if blockA.Height == blockB.Height { - return blockA, nil, true, nil - } - - // (b) time-offset mining faults (2 blocks with the same parents) - if types.CidArrsEqual(blockB.Parents, blockA.Parents) { - return blockA, nil, true, nil - } - - // (c) parent-grinding fault - // Here extra is the "witness", a third block that shows the connection between A and B as - // A's sibling and B's parent. - // Specifically, since A is of lower height, it must be that B was mined omitting A from its tipset - // - // B - // | - // [A, C] - if types.CidArrsEqual(blockA.Parents, blockC.Parents) && blockA.Height == blockC.Height && - types.CidArrsContains(blockB.Parents, blockC.Cid()) && !types.CidArrsContains(blockB.Parents, blockA.Cid()) { - return blockA, blockC, true, nil - } - - log.Error("unexpectedly reached end of slashFilterMinedBlock despite fault being reported!") - return nil, nil, false, nil -} diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 1ff9cdf598e..0a28cb42024 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -74,9 +74,6 @@ OPTIONS: --api-max-req-size value maximum API request size accepted by the JSON RPC server (default: 0) --restore value restore from backup file --restore-config value config file to use when restoring from backup - --slash-consensus Report consensus fault (default: false) - --slasher-sender value optionally specify the account to report consensus from - --slashdb-dir value (default: "slash watch db dir path") --help, -h show help ``` diff --git a/documentation/en/default-lotus-config.toml b/documentation/en/default-lotus-config.toml index 8e99869a533..c37e40f74f5 100644 --- a/documentation/en/default-lotus-config.toml +++ b/documentation/en/default-lotus-config.toml @@ -399,3 +399,32 @@ #EnableMsgIndex = false +[FaultReporter] + # EnableConsensusFaultReporter controls whether the node will monitor and + # report consensus faults. When enabled, the node will watch for malicious + # behaviors like double-mining and parent grinding, and submit reports to the + # network. This can earn reporter rewards, but is not guaranteed. Nodes should + # enable fault reporting with care, as it may increase resource usage, and may + # generate gas fees without earning rewards. + # + # type: bool + # env var: LOTUS_FAULTREPORTER_ENABLECONSENSUSFAULTREPORTER + #EnableConsensusFaultReporter = false + + # ConsensusFaultReporterDataDir is the path where fault reporter state will be + # persisted. This directory should have adequate space and permissions for the + # node process. + # + # type: string + # env var: LOTUS_FAULTREPORTER_CONSENSUSFAULTREPORTERDATADIR + #ConsensusFaultReporterDataDir = "" + + # ConsensusFaultReporterAddress is the wallet address used for submitting + # ReportConsensusFault messages. It will pay for gas fees, and receive any + # rewards. This address should have adequate funds to cover gas fees. + # + # type: string + # env var: LOTUS_FAULTREPORTER_CONSENSUSFAULTREPORTERADDRESS + #ConsensusFaultReporterAddress = "" + + diff --git a/node/builder.go b/node/builder.go index 10d366d5615..f1a825be922 100644 --- a/node/builder.go +++ b/node/builder.go @@ -128,6 +128,8 @@ const ( SetupFallbackBlockstoresKey GoRPCServer + ConsensusReporterKey + SetApiEndpointKey StoreEventsKey diff --git a/node/builder_chain.go b/node/builder_chain.go index fcdb26162a7..267659f0091 100644 --- a/node/builder_chain.go +++ b/node/builder_chain.go @@ -280,6 +280,11 @@ func ConfigFullNode(c interface{}) Option { // 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)), + + // enable fault reporter when configured by the user + If(cfg.FaultReporter.EnableConsensusFaultReporter, + Override(ConsensusReporterKey, modules.RunConsensusFaultReporter(cfg.FaultReporter)), + ), ) } diff --git a/node/config/doc_gen.go b/node/config/doc_gen.go index 5361b2d6c59..28f713fc5fc 100644 --- a/node/config/doc_gen.go +++ b/node/config/doc_gen.go @@ -394,6 +394,35 @@ the database must already exist and be writeable. If a relative path is provided relative to the CWD (current working directory).`, }, }, + "FaultReporterConfig": []DocField{ + { + Name: "EnableConsensusFaultReporter", + Type: "bool", + + Comment: `EnableConsensusFaultReporter controls whether the node will monitor and +report consensus faults. When enabled, the node will watch for malicious +behaviors like double-mining and parent grinding, and submit reports to the +network. This can earn reporter rewards, but is not guaranteed. Nodes should +enable fault reporting with care, as it may increase resource usage, and may +generate gas fees without earning rewards.`, + }, + { + Name: "ConsensusFaultReporterDataDir", + Type: "string", + + Comment: `ConsensusFaultReporterDataDir is the path where fault reporter state will be +persisted. This directory should have adequate space and permissions for the +node process.`, + }, + { + Name: "ConsensusFaultReporterAddress", + Type: "string", + + Comment: `ConsensusFaultReporterAddress is the wallet address used for submitting +ReportConsensusFault messages. It will pay for gas fees, and receive any +rewards. This address should have adequate funds to cover gas fees.`, + }, + }, "FeeConfig": []DocField{ { Name: "DefaultMaxFee", @@ -465,6 +494,12 @@ Set to 0 to keep all mappings`, Name: "Index", Type: "IndexConfig", + Comment: ``, + }, + { + Name: "FaultReporter", + Type: "FaultReporterConfig", + Comment: ``, }, }, diff --git a/node/config/types.go b/node/config/types.go index c89e8f70bad..cfd7cf084bb 100644 --- a/node/config/types.go +++ b/node/config/types.go @@ -22,13 +22,14 @@ type Common struct { // FullNode is a full node config type FullNode struct { Common - Client Client - Wallet Wallet - Fees FeeConfig - Chainstore Chainstore - Cluster UserRaftConfig - Fevm FevmConfig - Index IndexConfig + Client Client + Wallet Wallet + Fees FeeConfig + Chainstore Chainstore + Cluster UserRaftConfig + Fevm FevmConfig + Index IndexConfig + FaultReporter FaultReporterConfig } // // Common @@ -732,3 +733,23 @@ type IndexConfig struct { // EnableMsgIndex enables indexing of messages on chain. EnableMsgIndex bool } + +type FaultReporterConfig struct { + // EnableConsensusFaultReporter controls whether the node will monitor and + // report consensus faults. When enabled, the node will watch for malicious + // behaviors like double-mining and parent grinding, and submit reports to the + // network. This can earn reporter rewards, but is not guaranteed. Nodes should + // enable fault reporting with care, as it may increase resource usage, and may + // generate gas fees without earning rewards. + EnableConsensusFaultReporter bool + + // ConsensusFaultReporterDataDir is the path where fault reporter state will be + // persisted. This directory should have adequate space and permissions for the + // node process. + ConsensusFaultReporterDataDir string + + // ConsensusFaultReporterAddress is the wallet address used for submitting + // ReportConsensusFault messages. It will pay for gas fees, and receive any + // rewards. This address should have adequate funds to cover gas fees. + ConsensusFaultReporterAddress string +} diff --git a/node/modules/faultreport.go b/node/modules/faultreport.go new file mode 100644 index 00000000000..c42602d7e61 --- /dev/null +++ b/node/modules/faultreport.go @@ -0,0 +1,27 @@ +package modules + +import ( + "go.uber.org/fx" + + "github.com/filecoin-project/lotus/chain/gen/slashfilter/slashsvc" + "github.com/filecoin-project/lotus/node/config" + "github.com/filecoin-project/lotus/node/impl/full" + "github.com/filecoin-project/lotus/node/modules/helpers" +) + +type consensusReporterModules struct { + fx.In + + full.WalletAPI + full.ChainAPI + full.MpoolAPI + full.SyncAPI +} + +func RunConsensusFaultReporter(config config.FaultReporterConfig) func(mctx helpers.MetricsCtx, lc fx.Lifecycle, mod consensusReporterModules) error { + return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, mod consensusReporterModules) error { + ctx := helpers.LifecycleCtx(mctx, lc) + + return slashsvc.SlashConsensus(ctx, &mod, config.ConsensusFaultReporterDataDir, config.ConsensusFaultReporterAddress) + } +} From 3b9139d01e7a8c1f9d2f56443ae5f35d101294a1 Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 1 Aug 2023 16:53:59 -0400 Subject: [PATCH 15/22] feat: changelog: add consensus slasher as a highlight --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eed53ed2da8..739419cca5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,16 @@ # UNRELEASED -# v1.23.3 / 2023-07-27 +# v1.23.3 / 2023-08-01 This feature release of Lotus includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. ## Highlights +- [Lotus now includes a Slasher tool](https://github.com/filecoin-project/lotus/pull/10928) to monitor the network for Consensus Faults, and report them as appropriate + - The Slasher investigates all incoming blocks, and assesses whether they trigger any of the three Consensus Faults defined in the Filecoin protocol + - If any faults are detected, the Slasher sends a `ReportConsensusFault` message to the faulty miner + - For more information on the Slasher, including how to run it, please see LINK - The Ethereum-like RPC exposed by Lotus is now compatible with EIP-1898: https://github.com/filecoin-project/lotus/pull/10815 - The lotus-miner PieceReader now supports parallel reads: https://github.com/filecoin-project/lotus/pull/10913 - Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) @@ -19,7 +23,6 @@ This feature release of Lotus includes numerous improvements and enhancements fo ## New features - - Implement a tooling for slasher ([filecoin-project/lotus#10928](https://github.com/filecoin-project/lotus/pull/10928)) - feat: miner cli: sectors list upgrade-bounds tool ([filecoin-project/lotus#10923](https://github.com/filecoin-project/lotus/pull/10923)) - Add new RPC stress testing tool (lotus-bench rpc) with rich reporting ([filecoin-project/lotus#10761](https://github.com/filecoin-project/lotus/pull/10761)) - feat: alert: Add FVM_CONCURRENCY alert ([filecoin-project/lotus#10933](https://github.com/filecoin-project/lotus/pull/10933)) From 443620bcbfbb127e4e6ab0512e1293d8bc7ac599 Mon Sep 17 00:00:00 2001 From: Aayush Date: Fri, 4 Aug 2023 13:49:11 -0400 Subject: [PATCH 16/22] chore: deps: update go-libp2p to v0.27.8 --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index ab1f60b6e3b..b504171068f 100644 --- a/go.mod +++ b/go.mod @@ -105,7 +105,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.27.6 + github.com/libp2p/go-libp2p v0.27.8 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.24.0 @@ -294,8 +294,8 @@ require ( github.com/prometheus/procfs v0.9.0 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/qtls-go1-19 v0.3.2 // indirect - github.com/quic-go/qtls-go1-20 v0.2.2 // indirect + github.com/quic-go/qtls-go1-19 v0.3.3 // indirect + github.com/quic-go/qtls-go1-20 v0.2.3 // indirect github.com/quic-go/quic-go v0.33.0 // indirect github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/rivo/uniseg v0.1.0 // indirect diff --git a/go.sum b/go.sum index 71341203d8d..aa558eac5ac 100644 --- a/go.sum +++ b/go.sum @@ -982,8 +982,8 @@ github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xS github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= -github.com/libp2p/go-libp2p v0.27.6 h1:KmGU5kskCaaerm53heqzfGOlrW2z8icZ+fnyqgrZs38= -github.com/libp2p/go-libp2p v0.27.6/go.mod h1:oMfQGTb9CHnrOuSM6yMmyK2lXz3qIhnkn2+oK3B1Y2g= +github.com/libp2p/go-libp2p v0.27.8 h1:IX5x/4yKwyPQeVS2AXHZ3J4YATM9oHBGH1gBc23jBAI= +github.com/libp2p/go-libp2p v0.27.8/go.mod h1:eCFFtd0s5i/EVKR7+5Ki8bM7qwkNW3TPTTSSW9sz8NE= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= @@ -1469,10 +1469,10 @@ github.com/puzpuzpuz/xsync/v2 v2.4.0 h1:5sXAMHrtx1bg9nbRZTOn8T4MkWe5V+o8yKRH02Ez github.com/puzpuzpuz/xsync/v2 v2.4.0/go.mod h1:gD2H2krq/w52MfPLE+Uy64TzJDVY7lP2znR9qmR35kU= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= -github.com/quic-go/qtls-go1-19 v0.3.2/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= -github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= -github.com/quic-go/qtls-go1-20 v0.2.2/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= +github.com/quic-go/qtls-go1-19 v0.3.3 h1:wznEHvJwd+2X3PqftRha0SUKmGsnb6dfArMhy9PeJVE= +github.com/quic-go/qtls-go1-19 v0.3.3/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= +github.com/quic-go/qtls-go1-20 v0.2.3 h1:m575dovXn1y2ATOb1XrRFcrv0F+EQmlowTkoraNkDPI= +github.com/quic-go/qtls-go1-20 v0.2.3/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y0= github.com/quic-go/quic-go v0.33.0/go.mod h1:YMuhaAV9/jIu0XclDXwZPAsP/2Kgr5yMYhe9oxhhOFA= github.com/quic-go/webtransport-go v0.5.3 h1:5XMlzemqB4qmOlgIus5zB45AcZ2kCgCy2EptUrfOPWU= From a1c27038eddb0961b8f05205ef67274af0632d52 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Tue, 8 Aug 2023 11:41:14 -0400 Subject: [PATCH 17/22] chore: deps: update to go-libp2p 0.27.9 --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index b504171068f..8ebfceebb66 100644 --- a/go.mod +++ b/go.mod @@ -105,7 +105,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.27.8 + github.com/libp2p/go-libp2p v0.27.9 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.24.0 @@ -296,7 +296,7 @@ require ( github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-19 v0.3.3 // indirect github.com/quic-go/qtls-go1-20 v0.2.3 // indirect - github.com/quic-go/quic-go v0.33.0 // indirect + github.com/quic-go/quic-go v0.33.1 // indirect github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/rivo/uniseg v0.1.0 // indirect github.com/rs/cors v1.7.0 // indirect diff --git a/go.sum b/go.sum index aa558eac5ac..00cc035f524 100644 --- a/go.sum +++ b/go.sum @@ -982,8 +982,8 @@ github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xS github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= -github.com/libp2p/go-libp2p v0.27.8 h1:IX5x/4yKwyPQeVS2AXHZ3J4YATM9oHBGH1gBc23jBAI= -github.com/libp2p/go-libp2p v0.27.8/go.mod h1:eCFFtd0s5i/EVKR7+5Ki8bM7qwkNW3TPTTSSW9sz8NE= +github.com/libp2p/go-libp2p v0.27.9 h1:n5p5bQD469v7I/1qncaHDq0BeSx4iT2fHF3NyNuKOmY= +github.com/libp2p/go-libp2p v0.27.9/go.mod h1:Tdx7ZuJl9NE78PkB4FjPVbf6kaQNOh2ppU/OVvVB6Wc= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= @@ -1473,8 +1473,8 @@ github.com/quic-go/qtls-go1-19 v0.3.3 h1:wznEHvJwd+2X3PqftRha0SUKmGsnb6dfArMhy9P github.com/quic-go/qtls-go1-19 v0.3.3/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= github.com/quic-go/qtls-go1-20 v0.2.3 h1:m575dovXn1y2ATOb1XrRFcrv0F+EQmlowTkoraNkDPI= github.com/quic-go/qtls-go1-20 v0.2.3/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= -github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y0= -github.com/quic-go/quic-go v0.33.0/go.mod h1:YMuhaAV9/jIu0XclDXwZPAsP/2Kgr5yMYhe9oxhhOFA= +github.com/quic-go/quic-go v0.33.1 h1:EVsG7O/7FVZI8Za71GzpHDoWpBTKdjDv1/x0KFcckho= +github.com/quic-go/quic-go v0.33.1/go.mod h1:YMuhaAV9/jIu0XclDXwZPAsP/2Kgr5yMYhe9oxhhOFA= github.com/quic-go/webtransport-go v0.5.3 h1:5XMlzemqB4qmOlgIus5zB45AcZ2kCgCy2EptUrfOPWU= github.com/quic-go/webtransport-go v0.5.3/go.mod h1:OhmmgJIzTTqXK5xvtuX0oBpLV2GkLWNDA+UeTGJXErU= github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= From 2a9506d7a398a041b60f0bbae8fa4beee748acb2 Mon Sep 17 00:00:00 2001 From: Mikers Date: Tue, 8 Aug 2023 13:12:53 -1000 Subject: [PATCH 18/22] increase golang version to 1.19.12 --- .circleci/config.yml | 4 ++-- .circleci/template.yml | 4 ++-- Dockerfile | 2 +- GO_VERSION_MIN | 2 +- README.md | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5fcb831454c..b1566e6b0cf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,12 +7,12 @@ executors: golang: docker: # Must match GO_VERSION_MIN in project root - - image: cimg/go:1.19.7 + - image: cimg/go:1.19.12 resource_class: medium+ golang-2xl: docker: # Must match GO_VERSION_MIN in project root - - image: cimg/go:1.19.7 + - image: cimg/go:1.19.12 resource_class: 2xlarge ubuntu: docker: diff --git a/.circleci/template.yml b/.circleci/template.yml index cd8aeb663c9..33f62ee3ad8 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -7,12 +7,12 @@ executors: golang: docker: # Must match GO_VERSION_MIN in project root - - image: cimg/go:1.19.7 + - image: cimg/go:1.19.12 resource_class: medium+ golang-2xl: docker: # Must match GO_VERSION_MIN in project root - - image: cimg/go:1.19.7 + - image: cimg/go:1.19.12 resource_class: 2xlarge ubuntu: docker: diff --git a/Dockerfile b/Dockerfile index dfdfedce328..ed0f711f6b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ##################################### -FROM golang:1.19.7-buster AS lotus-builder +FROM golang:1.19.12-buster AS lotus-builder MAINTAINER Lotus Development Team RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev diff --git a/GO_VERSION_MIN b/GO_VERSION_MIN index 98adfe8e122..e54f3135a7d 100644 --- a/GO_VERSION_MIN +++ b/GO_VERSION_MIN @@ -1 +1 @@ -1.19.7 +1.19.12 diff --git a/README.md b/README.md index b67cb952f18..f6ac7593222 100644 --- a/README.md +++ b/README.md @@ -71,10 +71,10 @@ For other distributions you can find the required dependencies [here.](https://l #### Go -To build Lotus, you need a working installation of [Go 1.19.7 or higher](https://golang.org/dl/): +To build Lotus, you need a working installation of [Go 1.19.12 or higher](https://golang.org/dl/): ```bash -wget -c https://golang.org/dl/go1.19.7.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local +wget -c https://golang.org/dl/go1.19.12.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local ``` **TIP:** From 70b1bca173f1ffcd18c466ed3a95884ef7315f33 Mon Sep 17 00:00:00 2001 From: Mikers Date: Tue, 8 Aug 2023 13:29:29 -1000 Subject: [PATCH 19/22] remove deprecated structchecklinter, TOOD add support for linter named "unused" --- .golangci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index fe663ef7b1f..a4cca9babd0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -12,7 +12,6 @@ linters: - unconvert - staticcheck - varcheck - - structcheck - deadcode - scopelint From 5ee435d7d38b1ff18643cd81267f44970a1611ec Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 9 Aug 2023 11:17:48 -0400 Subject: [PATCH 20/22] Update Changelog to remove references to ProbeLab experiment --- CHANGELOG.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 739419cca5c..02e2c93695b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,16 +11,11 @@ This feature release of Lotus includes numerous improvements and enhancements fo - [Lotus now includes a Slasher tool](https://github.com/filecoin-project/lotus/pull/10928) to monitor the network for Consensus Faults, and report them as appropriate - The Slasher investigates all incoming blocks, and assesses whether they trigger any of the three Consensus Faults defined in the Filecoin protocol - If any faults are detected, the Slasher sends a `ReportConsensusFault` message to the faulty miner - - For more information on the Slasher, including how to run it, please see LINK + - For more information on the Slasher, including how to run it, please find the documentation [here](https://lotus.filecoin.io/lotus/manage/slasher-and-disputer/) - The Ethereum-like RPC exposed by Lotus is now compatible with EIP-1898: https://github.com/filecoin-project/lotus/pull/10815 - The lotus-miner PieceReader now supports parallel reads: https://github.com/filecoin-project/lotus/pull/10913 - Added new environment variable `LOTUS_EXEC_TRACE_CACHE_SIZE` to configure execution trace cache size ([filecoin-project/lotus#10585](https://github.com/filecoin-project/lotus/pull/10585)) - - If unset, we default to caching 16 most recent execution traces. Storage Providers may want to set this to 0, while exchanges may want to crank it up. -- The tracer's Elastic Search transport has been upgraded to support batch traces: [filecoin-project/lotus#10405](https://github.com/filecoin-project/lotus/pull/10405) - - This facilitates an experiment being run by ProbeLab [to measure the performance of the Gossipsub protocol in the Filecoin network](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?d=d8df4e142b78427ab470db68877da1ba#abba19208e3b4420a6388df7a3a48b62). - - Users are invited to opt into the experiment by following the instructions [here](https://www.notion.so/pl-strflt/Write-explainer-doc-for-SPs-183a7775406d451a8b19e3cdc2cdf5c3?pvs=4#092a3a68d6734a12961f5c3fe95767e5) - - Doing so has negligible impact on memory and CPU usage, but has a 2x impact on incoming and outgoing traffic. - + - If unset, we default to caching 16 most recent execution traces. Storage Providers may want to set this to 0, while exchanges may want to crank it up. ## New features - feat: miner cli: sectors list upgrade-bounds tool ([filecoin-project/lotus#10923](https://github.com/filecoin-project/lotus/pull/10923)) From 34104d05d0ba488627f2ab848793a269bc71d556 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 9 Aug 2023 11:18:58 -0400 Subject: [PATCH 21/22] Update Changelog to mention bump in minimum Go version --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02e2c93695b..5045d877327 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ This feature release of Lotus includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. +This feature release requires a **minimum Go version of v1.19.12 or higher to successfully build Lotus**. Go version 1.20 is also supported, but 1.21 is NOT. + ## Highlights - [Lotus now includes a Slasher tool](https://github.com/filecoin-project/lotus/pull/10928) to monitor the network for Consensus Faults, and report them as appropriate From 9c27d675db3fec3088a7c6e229dbe92fba350afc Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 9 Aug 2023 11:27:39 -0400 Subject: [PATCH 22/22] fix: docker: use correct golang 1.19.12 tag --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ed0f711f6b0..99625eea103 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ##################################### -FROM golang:1.19.12-buster AS lotus-builder +FROM golang:1.19.12-bullseye AS lotus-builder MAINTAINER Lotus Development Team RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev @@ -58,7 +58,7 @@ COPY --from=lotus-builder /lib/*/libgcc_s.so.1 /lib/ COPY --from=lotus-builder /lib/*/libutil.so.1 /lib/ COPY --from=lotus-builder /usr/lib/*/libltdl.so.7 /lib/ COPY --from=lotus-builder /usr/lib/*/libnuma.so.1 /lib/ -COPY --from=lotus-builder /usr/lib/*/libhwloc.so.5 /lib/ +COPY --from=lotus-builder /usr/lib/*/libhwloc.so.* /lib/ COPY --from=lotus-builder /usr/lib/*/libOpenCL.so.1 /lib/ RUN useradd -r -u 532 -U fc \