From d33803bda1816b562ec17ede06b8f84c0713de21 Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Tue, 27 Sep 2022 14:26:18 +0800 Subject: [PATCH 1/4] feat: network: add nv17 and integrate the corresponding go state type --- .golangci.yml | 4 + app/submodule/chain/chaininfo_api.go | 5 +- app/submodule/chain/miner_api.go | 24 +- app/submodule/chain/v0api/chaininfo_v0api.go | 2 +- app/submodule/multisig/multisig_api.go | 5 +- cmd/miner.go | 17 +- cmd/multisig.go | 2 +- cmd/state.go | 4 +- extern/filecoin-ffi | 2 +- fixtures/networks/butterfly.go | 42 +- fixtures/networks/calibration.go | 36 +- fixtures/networks/forcenet.go | 1 + fixtures/networks/integrationtestnet.go | 37 +- fixtures/networks/interopnet.go | 42 +- fixtures/networks/mainnet.go | 20 +- fixtures/networks/net_2k.go | 3 +- go.mod | 3 +- go.sum | 5 +- pkg/config/config.go | 2 + pkg/constants/shared_vals.go | 2 +- pkg/fork/fork.go | 133 ++++- pkg/fvm/cbor_gen.go | 223 ++++++- pkg/fvm/fvm.go | 31 +- pkg/gen/genesis/f00_system.go | 5 +- pkg/gen/genesis/f01_init.go | 3 +- pkg/gen/genesis/f02_reward.go | 4 +- pkg/gen/genesis/f03_cron.go | 3 +- pkg/gen/genesis/f04_power.go | 3 +- pkg/gen/genesis/f05_market.go | 3 +- pkg/gen/genesis/f06_vreg.go | 3 +- pkg/gen/genesis/genesis.go | 9 +- pkg/gen/genesis/miners.go | 118 +--- pkg/paychmgr/paych.go | 4 +- pkg/state/tree/state.go | 2 +- pkg/state/view.go | 16 +- pkg/vm/dispatch/loader.go | 15 +- pkg/vm/register/default.go | 35 +- pkg/vm/vmcontext/invocation_context.go | 9 +- pkg/vm/vmcontext/syscalls.go | 17 - tools/conformance/driver.go | 5 +- venus-devtool/cborgen/main.go | 1 + venus-devtool/compatible/actors/main.go | 1 - venus-devtool/compatible/actors/render.go | 5 +- venus-devtool/compatible/actors/templates.go | 2 - venus-devtool/go.mod | 12 +- venus-devtool/go.sum | 21 +- venus-devtool/inline-gen/inlinegen-data.json | 8 +- venus-shared/actors/actor_cids.go | 163 +++-- .../actors/builtin-actors-code/v9.tar.zst | Bin 0 -> 875093 bytes venus-shared/actors/builtin/account/actor.go | 40 +- .../actors/builtin/account/actor.go.template | 19 +- .../actors/builtin/account/state.v9.go | 42 ++ venus-shared/actors/builtin/builtin.go | 9 +- .../actors/builtin/builtin.go.template | 8 +- venus-shared/actors/builtin/cron/actor.go | 42 +- .../actors/builtin/cron/actor.go.template | 18 +- venus-shared/actors/builtin/cron/state.v9.go | 37 ++ venus-shared/actors/builtin/init/actor.go | 42 +- .../actors/builtin/init/actor.go.template | 18 +- .../actors/builtin/init/state.sep.go.template | 6 +- venus-shared/actors/builtin/init/state.v0.go | 7 +- venus-shared/actors/builtin/init/state.v2.go | 7 +- venus-shared/actors/builtin/init/state.v3.go | 7 +- venus-shared/actors/builtin/init/state.v4.go | 7 +- venus-shared/actors/builtin/init/state.v5.go | 7 +- venus-shared/actors/builtin/init/state.v6.go | 7 +- venus-shared/actors/builtin/init/state.v7.go | 7 +- venus-shared/actors/builtin/init/state.v8.go | 7 +- venus-shared/actors/builtin/init/state.v9.go | 114 ++++ venus-shared/actors/builtin/market/actor.go | 91 +-- .../actors/builtin/market/actor.go.template | 58 +- .../builtin/market/state.sep.go.template | 38 +- .../actors/builtin/market/state.v0.go | 12 +- .../actors/builtin/market/state.v2.go | 12 +- .../actors/builtin/market/state.v3.go | 12 +- .../actors/builtin/market/state.v4.go | 12 +- .../actors/builtin/market/state.v5.go | 12 +- .../actors/builtin/market/state.v6.go | 12 +- .../actors/builtin/market/state.v7.go | 12 +- .../actors/builtin/market/state.v8.go | 32 +- .../actors/builtin/market/state.v9.go | 328 ++++++++++ venus-shared/actors/builtin/miner/actor.go | 43 +- .../actors/builtin/miner/actor.go.template | 18 +- .../builtin/miner/state.sep.go.template | 20 +- venus-shared/actors/builtin/miner/state.v0.go | 25 +- venus-shared/actors/builtin/miner/state.v2.go | 25 +- venus-shared/actors/builtin/miner/state.v3.go | 25 +- venus-shared/actors/builtin/miner/state.v4.go | 25 +- venus-shared/actors/builtin/miner/state.v5.go | 25 +- venus-shared/actors/builtin/miner/state.v6.go | 25 +- venus-shared/actors/builtin/miner/state.v7.go | 25 +- venus-shared/actors/builtin/miner/state.v8.go | 25 +- venus-shared/actors/builtin/miner/state.v9.go | 564 ++++++++++++++++++ venus-shared/actors/builtin/multisig/actor.go | 80 +-- .../actors/builtin/multisig/actor.go.template | 30 +- .../builtin/multisig/message.sep.go.template | 34 +- .../actors/builtin/multisig/message.v0.go | 21 +- .../actors/builtin/multisig/message.v2.go | 9 +- .../actors/builtin/multisig/message.v3.go | 9 +- .../actors/builtin/multisig/message.v4.go | 9 +- .../actors/builtin/multisig/message.v5.go | 9 +- .../actors/builtin/multisig/message.v6.go | 9 +- .../actors/builtin/multisig/message.v7.go | 9 +- .../actors/builtin/multisig/message.v8.go | 19 +- .../actors/builtin/multisig/message.v9.go | 79 +++ .../builtin/multisig/state.sep.go.template | 4 +- .../actors/builtin/multisig/state.v0.go | 5 +- .../actors/builtin/multisig/state.v2.go | 5 +- .../actors/builtin/multisig/state.v3.go | 5 +- .../actors/builtin/multisig/state.v4.go | 5 +- .../actors/builtin/multisig/state.v5.go | 5 +- .../actors/builtin/multisig/state.v6.go | 5 +- .../actors/builtin/multisig/state.v7.go | 5 +- .../actors/builtin/multisig/state.v8.go | 5 +- .../actors/builtin/multisig/state.v9.go | 119 ++++ venus-shared/actors/builtin/paych/actor.go | 34 +- .../actors/builtin/paych/actor.go.template | 12 +- .../builtin/paych/message.sep.go.template | 41 +- .../actors/builtin/paych/message.v8.go | 7 +- .../actors/builtin/paych/message.v9.go | 113 ++++ venus-shared/actors/builtin/paych/state.v9.go | 116 ++++ venus-shared/actors/builtin/power/actor.go | 42 +- .../actors/builtin/power/actor.go.template | 18 +- .../builtin/power/state.sep.go.template | 2 +- venus-shared/actors/builtin/power/state.v9.go | 188 ++++++ venus-shared/actors/builtin/registry.go | 220 +++++++ .../actors/builtin/registry.go.template | 141 +++++ venus-shared/actors/builtin/reward/actor.go | 42 +- .../actors/builtin/reward/actor.go.template | 18 +- .../actors/builtin/reward/state.v9.go | 100 ++++ venus-shared/actors/builtin/system/actor.go | 40 +- .../actors/builtin/system/actor.go.template | 19 +- .../builtin/system/state.sep.go.template | 10 + .../actors/builtin/system/state.v0.go | 7 + .../actors/builtin/system/state.v2.go | 7 + .../actors/builtin/system/state.v3.go | 7 + .../actors/builtin/system/state.v4.go | 7 + .../actors/builtin/system/state.v5.go | 7 + .../actors/builtin/system/state.v6.go | 7 + .../actors/builtin/system/state.v7.go | 7 + .../actors/builtin/system/state.v8.go | 7 + .../actors/builtin/system/state.v9.go | 52 ++ venus-shared/actors/builtin/verifreg/actor.go | 41 +- .../actors/builtin/verifreg/actor.go.template | 18 +- .../actors/builtin/verifreg/state.v9.go | 85 +++ venus-shared/actors/builtin_actors.go | 15 +- venus-shared/actors/builtin_actors_bundle.go | 5 +- venus-shared/actors/builtin_actors_gen.go | 119 ++++ venus-shared/actors/builtin_actors_test.go | 7 +- venus-shared/actors/manifest.go | 19 +- venus-shared/actors/policy/policy.go | 225 +++---- venus-shared/actors/policy/policy.go.template | 64 +- venus-shared/actors/version.go | 35 +- venus-shared/api/chain/v0/chain.go | 2 +- venus-shared/api/chain/v0/method.md | 25 +- .../api/chain/v0/mock/mock_fullnode.go | 2 +- venus-shared/api/chain/v0/proxy_gen.go | 2 +- venus-shared/api/chain/v1/chain.go | 2 +- venus-shared/api/chain/v1/method.md | 25 +- .../api/chain/v1/mock/mock_fullnode.go | 2 +- venus-shared/api/chain/v1/proxy_gen.go | 2 +- venus-shared/api/gateway/v1/method.md | 2 +- .../compatible-checks/actor-sources.txt | 14 + .../compatible-checks/actor-templates.txt | 1 + .../compatible-checks/api-checksum.txt | 28 +- venus-shared/compatible-checks/api-diff.txt | 18 +- venus-shared/compatible-checks/api-perm.txt | 3 - venus-shared/utils/method_map.go | 66 +- venus-shared/utils/msg_parser/parser_test.go | 2 +- 169 files changed, 4268 insertions(+), 1351 deletions(-) create mode 100644 venus-shared/actors/builtin-actors-code/v9.tar.zst create mode 100644 venus-shared/actors/builtin/account/state.v9.go create mode 100644 venus-shared/actors/builtin/cron/state.v9.go create mode 100644 venus-shared/actors/builtin/init/state.v9.go create mode 100644 venus-shared/actors/builtin/market/state.v9.go create mode 100644 venus-shared/actors/builtin/miner/state.v9.go create mode 100644 venus-shared/actors/builtin/multisig/message.v9.go create mode 100644 venus-shared/actors/builtin/multisig/state.v9.go create mode 100644 venus-shared/actors/builtin/paych/message.v9.go create mode 100644 venus-shared/actors/builtin/paych/state.v9.go create mode 100644 venus-shared/actors/builtin/power/state.v9.go create mode 100644 venus-shared/actors/builtin/registry.go create mode 100644 venus-shared/actors/builtin/registry.go.template create mode 100644 venus-shared/actors/builtin/reward/state.v9.go create mode 100644 venus-shared/actors/builtin/system/state.v9.go create mode 100644 venus-shared/actors/builtin/verifreg/state.v9.go diff --git a/.golangci.yml b/.golangci.yml index 6ebbce1979..abbcc5c634 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -49,5 +49,9 @@ run: skip-dirs: - pkg/constants$ - pkg/util/test$ + - venus-shared/actors/adt$ + - venus-shared/actors/aerrors$ + - venus-shared/actors/builtin$ + - venus-shared/actors/policy$ skip-files: - ".*_gen\\.go$" # skip auto generated go files diff --git a/app/submodule/chain/chaininfo_api.go b/app/submodule/chain/chaininfo_api.go index 50b4dadb17..238b0f6b11 100644 --- a/app/submodule/chain/chaininfo_api.go +++ b/app/submodule/chain/chaininfo_api.go @@ -9,6 +9,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" acrypto "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" @@ -669,7 +670,7 @@ func (cia *chainInfoAPI) StateGetNetworkParams(ctx context.Context) (*types.Netw // StateActorCodeCIDs returns the CIDs of all the builtin actors for the given network version func (cia *chainInfoAPI) StateActorCodeCIDs(ctx context.Context, nv network.Version) (map[string]cid.Cid, error) { - actorVersion, err := actors.VersionForNetwork(nv) + actorVersion, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, fmt.Errorf("invalid network version") } @@ -707,7 +708,7 @@ func (cia *chainInfoAPI) ChainGetGenesis(ctx context.Context) (*types.TipSet, er // StateActorManifestCID returns the CID of the builtin actors manifest for the given network version func (cia *chainInfoAPI) StateActorManifestCID(ctx context.Context, nv network.Version) (cid.Cid, error) { - actorVersion, err := actors.VersionForNetwork(nv) + actorVersion, err := actorstypes.VersionForNetwork(nv) if err != nil { return cid.Undef, fmt.Errorf("invalid network version") } diff --git a/app/submodule/chain/miner_api.go b/app/submodule/chain/miner_api.go index 6495c9bce3..479192e5a8 100644 --- a/app/submodule/chain/miner_api.go +++ b/app/submodule/chain/miner_api.go @@ -20,7 +20,7 @@ import ( "github.com/libp2p/go-libp2p/core/peer" cbg "github.com/whyrusleeping/cbor-gen" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" market5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/market" "github.com/filecoin-project/venus/pkg/state/tree" @@ -458,16 +458,20 @@ func (msa *minerStateAPI) StateMinerPreCommitDepositForPower(ctx context.Context store := msa.ChainReader.Store(ctx) var sectorWeight abi.StoragePower - if act, found, err := sTree.GetActor(ctx, market.Address); err != nil || !found { - return big.Int{}, fmt.Errorf("loading market actor %s: %v", maddr, err) - } else if s, err := market.Load(store, act); err != nil { - return big.Int{}, fmt.Errorf("loading market actor state %s: %v", maddr, err) - } else if w, vw, err := s.VerifyDealsForActivation(maddr, pci.DealIDs, ts.Height(), pci.Expiration); err != nil { - return big.Int{}, fmt.Errorf("verifying deals for activation: %v", err) + if msa.Fork.GetNetworkVersion(ctx, ts.Height()) <= network.Version16 { + if act, found, err := sTree.GetActor(ctx, market.Address); err != nil || !found { + return big.Int{}, fmt.Errorf("loading market actor %s: %v", maddr, err) + } else if s, err := market.Load(store, act); err != nil { + return big.Int{}, fmt.Errorf("loading market actor state %s: %v", maddr, err) + } else if w, vw, err := s.VerifyDealsForActivation(maddr, pci.DealIDs, ts.Height(), pci.Expiration); err != nil { + return big.Int{}, fmt.Errorf("verifying deals for activation: %v", err) + } else { + // NB: not exactly accurate, but should always lead us to *over* estimate, not under + duration := pci.Expiration - ts.Height() + sectorWeight = builtin.QAPowerForWeight(ssize, duration, w, vw) + } } else { - // NB: not exactly accurate, but should always lead us to *over* estimate, not under - duration := pci.Expiration - ts.Height() - sectorWeight = builtin.QAPowerForWeight(ssize, duration, w, vw) + sectorWeight = miner.QAPowerMax(ssize) } var powerSmoothed builtin.FilterEstimate diff --git a/app/submodule/chain/v0api/chaininfo_v0api.go b/app/submodule/chain/v0api/chaininfo_v0api.go index 9b07c0414f..adcbc97472 100644 --- a/app/submodule/chain/v0api/chaininfo_v0api.go +++ b/app/submodule/chain/v0api/chaininfo_v0api.go @@ -9,7 +9,7 @@ import ( v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/ipfs/go-cid" diff --git a/app/submodule/multisig/multisig_api.go b/app/submodule/multisig/multisig_api.go index 99e2c99632..0326302c2d 100644 --- a/app/submodule/multisig/multisig_api.go +++ b/app/submodule/multisig/multisig_api.go @@ -6,6 +6,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" @@ -39,7 +40,7 @@ func (a *multiSig) messageBuilder(ctx context.Context, from address.Address) (mu if err != nil { return nil, err } - aver, err := actors.VersionForNetwork(nver) + aver, err := actorstypes.VersionForNetwork(nver) if err != nil { return nil, err } @@ -48,7 +49,7 @@ func (a *multiSig) messageBuilder(ctx context.Context, from address.Address) (mu // MsigCreate creates a multisig wallet // It takes the following params: , , -//, , +// , , func (a *multiSig) MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) { mb, err := a.messageBuilder(ctx, src) diff --git a/cmd/miner.go b/cmd/miner.go index dfe34cfd30..81605ef6c3 100644 --- a/cmd/miner.go +++ b/cmd/miner.go @@ -23,7 +23,6 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" - "github.com/filecoin-project/venus/venus-shared/actors/policy" "github.com/filecoin-project/venus/venus-shared/types" "github.com/filecoin-project/venus/venus-shared/types/params" ) @@ -54,7 +53,7 @@ var newMinerCmd = &cmds.Command{ cmds.BoolOption("create-worker-key", "Create separate worker key"), cmds.StringOption("from", "Select which address to send actor creation message from"), cmds.StringOption("gas-premium", "Set gas premium for initialization messages in AttoFIL").WithDefault("0"), - cmds.StringOption("sector-size", "specify sector size to use").WithDefault(units.BytesSize(float64(policy.GetDefaultSectorSize()))), + cmds.StringOption("sector-size", "specify sector size to use"), }, Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { ctx := req.Context @@ -64,10 +63,18 @@ var newMinerCmd = &cmds.Command{ return err } - sectorSize, _ := req.Options["sector-size"].(string) - ssize, err := units.RAMInBytes(sectorSize) + ssize, err := abi.RegisteredSealProof_StackedDrg32GiBV1.SectorSize() if err != nil { - return fmt.Errorf("failed to parse sector size: %v", err) + return fmt.Errorf("failed to calculate default sector size: %w", err) + } + + sectorSize, ok := req.Options["sector-size"].(string) + if ok { + sectorSizeInt, err := units.RAMInBytes(sectorSize) + if err != nil { + return err + } + ssize = abi.SectorSize(sectorSizeInt) } gp, _ := req.Options["gas-premium"].(string) diff --git a/cmd/multisig.go b/cmd/multisig.go index 37f7914760..6e874aaf72 100644 --- a/cmd/multisig.go +++ b/cmd/multisig.go @@ -290,7 +290,7 @@ var msigInspectCmd = &cmds.Command{ } paramStr = string(b) } - fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), method.Name, tx.Method, paramStr) + fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), method.Num, tx.Method, paramStr) } } if err := w.Flush(); err != nil { diff --git a/cmd/state.go b/cmd/state.go index 3c351617dd..b40bb1d335 100644 --- a/cmd/state.go +++ b/cmd/state.go @@ -15,6 +15,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/network" "github.com/ipfs/go-cid" @@ -23,7 +24,6 @@ import ( "github.com/filecoin-project/venus/app/node" "github.com/filecoin-project/venus/pkg/constants" - "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/builtin" "github.com/filecoin-project/venus/venus-shared/types" ) @@ -631,7 +631,7 @@ var stateSysActorCIDsCmd = &cmds.Command{ buf := new(bytes.Buffer) buf.WriteString(fmt.Sprintf("Network Version: %d\n", nv)) - actorVersion, err := actors.VersionForNetwork(nv) + actorVersion, err := actorstypes.VersionForNetwork(nv) if err != nil { return err } diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index 32afd6e1f1..c70caaf14f 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit 32afd6e1f1419b6bb7d0f4b3944287fde593ca64 +Subproject commit c70caaf14f8ff5b15eb5166093d9e57055e571f8 diff --git a/fixtures/networks/butterfly.go b/fixtures/networks/butterfly.go index c97106cafb..04c3cb50a9 100644 --- a/fixtures/networks/butterfly.go +++ b/fixtures/networks/butterfly.go @@ -21,7 +21,7 @@ func ButterflySnapNet() *NetworkConf { Network: config.NetworkParamsConfig{ DevNet: true, NetworkType: types.NetworkButterfly, - GenesisNetworkVersion: network.Version15, + GenesisNetworkVersion: network.Version16, ReplaceProofTypes: []abi.RegisteredSealProof{ abi.RegisteredSealProof_StackedDrg512MiBV1, abi.RegisteredSealProof_StackedDrg32GiBV1, @@ -32,27 +32,27 @@ func ButterflySnapNet() *NetworkConf { MinVerifiedDealSize: 1 << 20, PreCommitChallengeDelay: abi.ChainEpoch(150), ForkUpgradeParam: &config.ForkUpgradeConfig{ - UpgradeBreezeHeight: -1, - UpgradeSmokeHeight: -2, - UpgradeIgnitionHeight: -3, - UpgradeRefuelHeight: -4, - UpgradeAssemblyHeight: -5, - UpgradeTapeHeight: -6, - UpgradeLiftoffHeight: -7, - UpgradeKumquatHeight: -8, - UpgradeCalicoHeight: -9, - UpgradePersianHeight: -10, - UpgradeOrangeHeight: -12, - UpgradeTrustHeight: -13, - UpgradeNorwegianHeight: -14, - UpgradeTurboHeight: -15, - UpgradeHyperdriveHeight: -16, - UpgradeChocolateHeight: -17, - UpgradeOhSnapHeight: -18, - UpgradeSkyrHeight: 50, - BreezeGasTampingDuration: 120, - UpgradeClausHeight: -11, + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -2, + UpgradeIgnitionHeight: -3, + UpgradeRefuelHeight: -4, + UpgradeAssemblyHeight: -5, + UpgradeTapeHeight: -6, + UpgradeLiftoffHeight: -7, + UpgradeKumquatHeight: -8, + UpgradeCalicoHeight: -9, + UpgradePersianHeight: -10, + UpgradeOrangeHeight: -11, + UpgradeClausHeight: -12, + UpgradeTrustHeight: -13, + UpgradeNorwegianHeight: -14, + UpgradeTurboHeight: -15, + UpgradeHyperdriveHeight: -16, + UpgradeChocolateHeight: -17, + UpgradeOhSnapHeight: -18, + UpgradeSkyrHeight: -19, + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, AddressNetwork: address.Testnet, diff --git a/fixtures/networks/calibration.go b/fixtures/networks/calibration.go index 9cf0cc8c34..c83be5cbd9 100644 --- a/fixtures/networks/calibration.go +++ b/fixtures/networks/calibration.go @@ -38,27 +38,27 @@ func Calibration() *NetworkConf { MinVerifiedDealSize: 1 << 20, PreCommitChallengeDelay: abi.ChainEpoch(150), ForkUpgradeParam: &config.ForkUpgradeConfig{ - UpgradeBreezeHeight: -1, - UpgradeSmokeHeight: -2, - UpgradeIgnitionHeight: -3, - UpgradeRefuelHeight: -4, - UpgradeAssemblyHeight: 30, - UpgradeTapeHeight: 60, - UpgradeLiftoffHeight: -5, - UpgradeKumquatHeight: 90, - UpgradeCalicoHeight: 120, - UpgradePersianHeight: 100 + (120 * 1), - UpgradeOrangeHeight: 300, - UpgradeTrustHeight: 330, - UpgradeNorwegianHeight: 360, - UpgradeTurboHeight: 390, - UpgradeHyperdriveHeight: 420, - UpgradeSkyrHeight: 1044660, // 2022-06-16T17:30:00Z - BreezeGasTampingDuration: 120, + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -2, + UpgradeIgnitionHeight: -3, + UpgradeRefuelHeight: -4, + UpgradeAssemblyHeight: 30, + UpgradeTapeHeight: 60, + UpgradeLiftoffHeight: -5, + UpgradeKumquatHeight: 90, + UpgradeCalicoHeight: 120, + UpgradePersianHeight: 100 + (120 * 1), UpgradeClausHeight: 270, + UpgradeOrangeHeight: 300, + UpgradeTrustHeight: 330, + UpgradeNorwegianHeight: 360, + UpgradeTurboHeight: 390, + UpgradeHyperdriveHeight: 420, UpgradeChocolateHeight: 312746, - UpgradeOhSnapHeight: 682006, // 2022-02-10T19:23:00Z + UpgradeOhSnapHeight: 682006, // 2022-02-10T19:23:00Z + UpgradeSkyrHeight: 1044660, // 2022-06-16T17:30:00Z + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, AddressNetwork: address.Testnet, diff --git a/fixtures/networks/forcenet.go b/fixtures/networks/forcenet.go index ac074c0051..e49c564aca 100644 --- a/fixtures/networks/forcenet.go +++ b/fixtures/networks/forcenet.go @@ -54,6 +54,7 @@ func ForceNet() *NetworkConf { UpgradeChocolateHeight: -17, UpgradeOhSnapHeight: -18, UpgradeSkyrHeight: -19, + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: config.DrandMainnet}, AddressNetwork: address.Testnet, diff --git a/fixtures/networks/integrationtestnet.go b/fixtures/networks/integrationtestnet.go index d5cf478466..e976eba381 100644 --- a/fixtures/networks/integrationtestnet.go +++ b/fixtures/networks/integrationtestnet.go @@ -28,27 +28,26 @@ func IntegrationNet() *NetworkConf { MinVerifiedDealSize: 1 << 20, PreCommitChallengeDelay: abi.ChainEpoch(150), ForkUpgradeParam: &config.ForkUpgradeConfig{ - UpgradeBreezeHeight: 41280, - UpgradeSmokeHeight: 51000, - UpgradeIgnitionHeight: 94000, - UpgradeRefuelHeight: 130800, - UpgradeAssemblyHeight: 138720, - UpgradeTapeHeight: 140760, - UpgradeLiftoffHeight: 148888, - UpgradeKumquatHeight: 170000, - UpgradeCalicoHeight: 265200, - UpgradePersianHeight: 265200 + (120 * 60), - UpgradeOrangeHeight: 336458, - UpgradeTrustHeight: 550321, - UpgradeNorwegianHeight: 665280, - UpgradeTurboHeight: 712320, - UpgradeHyperdriveHeight: 892800, - UpgradeChocolateHeight: 1231620, - UpgradeOhSnapHeight: 1594680, - UpgradeSkyrHeight: 99999999999999, - BreezeGasTampingDuration: 120, + UpgradeBreezeHeight: 41280, + UpgradeSmokeHeight: 51000, + UpgradeIgnitionHeight: 94000, + UpgradeRefuelHeight: 130800, + UpgradeAssemblyHeight: 138720, + UpgradeTapeHeight: 140760, + UpgradeLiftoffHeight: 148888, + UpgradeKumquatHeight: 170000, + UpgradeCalicoHeight: 265200, + UpgradePersianHeight: 265200 + (120 * 60), + UpgradeOrangeHeight: 336458, UpgradeClausHeight: 343200, + UpgradeTrustHeight: 550321, + UpgradeNorwegianHeight: 665280, + UpgradeTurboHeight: 712320, + UpgradeHyperdriveHeight: 892800, + UpgradeChocolateHeight: 1231620, + UpgradeOhSnapHeight: 1594680, + UpgradeSkyrHeight: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 5, 51000: 1}, AddressNetwork: address.Testnet, diff --git a/fixtures/networks/interopnet.go b/fixtures/networks/interopnet.go index d1c0c55c8f..1e24443cd0 100644 --- a/fixtures/networks/interopnet.go +++ b/fixtures/networks/interopnet.go @@ -21,7 +21,7 @@ func InteropNet() *NetworkConf { Network: config.NetworkParamsConfig{ DevNet: true, NetworkType: types.NetworkInterop, - GenesisNetworkVersion: network.Version15, + GenesisNetworkVersion: network.Version16, ReplaceProofTypes: []abi.RegisteredSealProof{ abi.RegisteredSealProof_StackedDrg2KiBV1, abi.RegisteredSealProof_StackedDrg8MiBV1, @@ -32,27 +32,27 @@ func InteropNet() *NetworkConf { MinVerifiedDealSize: 256, PreCommitChallengeDelay: abi.ChainEpoch(10), ForkUpgradeParam: &config.ForkUpgradeConfig{ - UpgradeBreezeHeight: -1, - UpgradeSmokeHeight: -2, - UpgradeIgnitionHeight: -3, - UpgradeRefuelHeight: -4, - UpgradeAssemblyHeight: -5, - UpgradeTapeHeight: -6, - UpgradeLiftoffHeight: -7, - UpgradeKumquatHeight: -8, - UpgradeCalicoHeight: -9, - UpgradePersianHeight: -10, - UpgradeOrangeHeight: -11, - UpgradeTrustHeight: -13, - UpgradeNorwegianHeight: -14, - UpgradeTurboHeight: -15, - UpgradeHyperdriveHeight: -16, - UpgradeChocolateHeight: -17, - UpgradeOhSnapHeight: -18, - UpgradeSkyrHeight: 100, - BreezeGasTampingDuration: 0, - UpgradeClausHeight: -11, + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -2, + UpgradeIgnitionHeight: -3, + UpgradeRefuelHeight: -4, + UpgradeAssemblyHeight: -5, + UpgradeTapeHeight: -6, + UpgradeLiftoffHeight: -7, + UpgradeKumquatHeight: -8, + UpgradeCalicoHeight: -9, + UpgradePersianHeight: -10, + UpgradeOrangeHeight: -11, + UpgradeClausHeight: -12, + UpgradeTrustHeight: -13, + UpgradeNorwegianHeight: -14, + UpgradeTurboHeight: -15, + UpgradeHyperdriveHeight: -16, + UpgradeChocolateHeight: -17, + UpgradeOhSnapHeight: -18, + UpgradeSkyrHeight: -19, + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, AddressNetwork: address.Testnet, diff --git a/fixtures/networks/mainnet.go b/fixtures/networks/mainnet.go index 605487f06f..e902581087 100644 --- a/fixtures/networks/mainnet.go +++ b/fixtures/networks/mainnet.go @@ -46,13 +46,14 @@ func Mainnet() *NetworkConf { MinVerifiedDealSize: 1 << 20, PreCommitChallengeDelay: abi.ChainEpoch(150), ForkUpgradeParam: &config.ForkUpgradeConfig{ - UpgradeBreezeHeight: 41280, - UpgradeSmokeHeight: 51000, - UpgradeIgnitionHeight: 94000, - UpgradeRefuelHeight: 130800, - UpgradeAssemblyHeight: 138720, - UpgradeTapeHeight: 140760, - UpgradeLiftoffHeight: 148888, + BreezeGasTampingDuration: 120, + UpgradeBreezeHeight: 41280, + UpgradeSmokeHeight: 51000, + UpgradeIgnitionHeight: 94000, + UpgradeRefuelHeight: 130800, + UpgradeAssemblyHeight: 138720, + UpgradeTapeHeight: 140760, + UpgradeLiftoffHeight: 148888, // This signals our tentative epoch for mainnet launch. Can make it later, but not earlier. // Miners, clients, developers, custodians all need time to prepare. // We still have upgrades and state changes to do, but can happen after signaling timing here. @@ -60,6 +61,7 @@ func Mainnet() *NetworkConf { UpgradeCalicoHeight: 265200, UpgradePersianHeight: 265200 + (builtin2.EpochsInHour * 60), UpgradeOrangeHeight: 336458, + UpgradeClausHeight: 343200, // 2020-12-22T02:00:00Z UpgradeTrustHeight: 550321, // 2021-03-04T00:00:30Z UpgradeNorwegianHeight: 665280, // 2021-04-12T22:00:00Z UpgradeTurboHeight: 712320, // 2021-04-29T06:00:00Z @@ -67,9 +69,7 @@ func Mainnet() *NetworkConf { UpgradeChocolateHeight: 1231620, UpgradeOhSnapHeight: 1594680, // 2022-03-01T15:00:00Z UpgradeSkyrHeight: 1960320, // 2022-07-06T14:00:00Z - - BreezeGasTampingDuration: 120, - UpgradeClausHeight: 343200, // 2020-12-22T02:00:00Z + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 5, 51000: 1}, AddressNetwork: address.Mainnet, diff --git a/fixtures/networks/net_2k.go b/fixtures/networks/net_2k.go index b4bb004c55..3020e6951c 100644 --- a/fixtures/networks/net_2k.go +++ b/fixtures/networks/net_2k.go @@ -44,10 +44,11 @@ func Net2k() *NetworkConf { UpgradeHyperdriveHeight: -16, UpgradeChocolateHeight: -17, UpgradeOhSnapHeight: -18, - UpgradeSkyrHeight: -19, BreezeGasTampingDuration: 0, UpgradeClausHeight: -11, + UpgradeSkyrHeight: -19, + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, AddressNetwork: address.Testnet, diff --git a/go.mod b/go.mod index 431bda04b8..66287b8b0e 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/filecoin-project/go-fil-markets v1.24.0 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-paramfetch v0.0.4 - github.com/filecoin-project/go-state-types v0.1.10 + github.com/filecoin-project/go-state-types v0.1.12-beta github.com/filecoin-project/pubsub v1.0.0 github.com/filecoin-project/specs-actors v0.9.15 github.com/filecoin-project/specs-actors/v2 v2.3.6 @@ -139,6 +139,7 @@ require ( github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349 // indirect github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 // indirect github.com/filecoin-project/go-amt-ipld/v4 v4.0.0 // indirect + github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837 // indirect github.com/filecoin-project/go-ds-versioning v0.1.1 // indirect github.com/filecoin-project/go-hamt-ipld v0.1.5 // indirect github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index b583853924..52801fb973 100644 --- a/go.sum +++ b/go.sum @@ -351,6 +351,8 @@ github.com/filecoin-project/go-cbor-util v0.0.1 h1:E1LYZYTtjfAQwCReho0VXvbu8t3CY github.com/filecoin-project/go-cbor-util v0.0.1/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= github.com/filecoin-project/go-commp-utils v0.1.3 h1:rTxbkNXZU7FLgdkBk8RsQIEOuPONHykEoX3xGk41Fkw= github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9ANQrY3fDFoXdqyX04J+dWpK30= +github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837 h1:4cITW0pwgvqLs86Q9bWQa34+jBfR1V687bDkmv2DgnA= +github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837/go.mod h1:e2YBjSblNVoBckkbv3PPqsq71q98oFkFqL7s1etViGo= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= @@ -392,8 +394,9 @@ github.com/filecoin-project/go-state-types v0.1.4/go.mod h1:xCA/WfKlC2zcn3fUmDv4 github.com/filecoin-project/go-state-types v0.1.5/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.1.6/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.1.8/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= -github.com/filecoin-project/go-state-types v0.1.10 h1:YrrJWWh2fU4VPhwHyPlDK5I4mB7bqgnRd3HCm9IOwIU= github.com/filecoin-project/go-state-types v0.1.10/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= +github.com/filecoin-project/go-state-types v0.1.12-beta h1:QZE00g75shqwhPn0/bZL38sFxVAqnXC7zjmYltRdhxI= +github.com/filecoin-project/go-state-types v0.1.12-beta/go.mod h1:n/kujdC9JphvYTrmaD1+vJpvDPy/DwzckoMzP0nBKWI= github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= github.com/filecoin-project/go-statemachine v1.0.2-0.20220322104818-27f8fbb86dfd/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54= github.com/filecoin-project/go-statemachine v1.0.2 h1:421SSWBk8GIoCoWYYTE/d+qCWccgmRH0uXotXRDjUbc= diff --git a/pkg/config/config.go b/pkg/config/config.go index 990277022e..d0d86d8ddf 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -286,6 +286,7 @@ type ForkUpgradeConfig struct { UpgradeChocolateHeight abi.ChainEpoch `json:"upgradeChocolateHeight"` UpgradeOhSnapHeight abi.ChainEpoch `json:"upgradeOhSnapHeight"` UpgradeSkyrHeight abi.ChainEpoch `json:"upgradeSkyrHeight"` + UpgradeV17Height abi.ChainEpoch `json:"upgradeV17Height"` } func IsNearUpgrade(epoch, upgradeEpoch abi.ChainEpoch) bool { @@ -313,6 +314,7 @@ var DefaultForkUpgradeParam = &ForkUpgradeConfig{ UpgradeChocolateHeight: 1231620, UpgradeOhSnapHeight: 1594680, UpgradeSkyrHeight: 1960320, + UpgradeV17Height: 99999999999999, } func newDefaultNetworkParamsConfig() *NetworkParamsConfig { diff --git a/pkg/constants/shared_vals.go b/pkg/constants/shared_vals.go index 6f75503939..75e2893878 100644 --- a/pkg/constants/shared_vals.go +++ b/pkg/constants/shared_vals.go @@ -21,7 +21,7 @@ const NewestNetworkVersion = network.Version{{.latestNetworkVersion}} /* inline-gen start */ -const NewestNetworkVersion = network.Version16 +const NewestNetworkVersion = network.Version17 /* inline-gen end */ diff --git a/pkg/fork/fork.go b/pkg/fork/fork.go index 9ad11c9ffa..78f1386f2f 100644 --- a/pkg/fork/fork.go +++ b/pkg/fork/fork.go @@ -16,6 +16,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/go-state-types/network" @@ -30,6 +31,7 @@ import ( cbg "github.com/whyrusleeping/cbor-gen" "go.opencensus.io/trace" + nv17 "github.com/filecoin-project/go-state-types/builtin/v9/migration" "github.com/filecoin-project/specs-actors/actors/migration/nv3" "github.com/filecoin-project/specs-actors/v2/actors/migration/nv4" "github.com/filecoin-project/specs-actors/v2/actors/migration/nv7" @@ -296,6 +298,17 @@ func DefaultUpgradeSchedule(cf *ChainFork, upgradeHeight *config.ForkUpgradeConf StopWithin: 5, }}, Expensive: true, + }, { + Height: upgradeHeight.UpgradeV17Height, + Network: network.Version17, + Migration: cf.UpgradeActorsV9, + PreMigrations: []PreMigration{{ + PreMigration: cf.PreUpgradeActorsV9, + StartWithin: 180, + DontStartWithin: 60, + StopWithin: 5, + }}, + Expensive: true, }, } @@ -2081,7 +2094,7 @@ func (c *ChainFork) upgradeActorsV8Common( store := chain.ActorStore(ctx, buf) // ensure that the manifest is loaded in the blockstore - if err := actors.LoadBundles(ctx, buf, actors.Version8); err != nil { + if err := actors.LoadBundles(ctx, buf, actorstypes.Version8); err != nil { return cid.Undef, fmt.Errorf("failed to load manifest bundle: %w", err) } @@ -2098,7 +2111,7 @@ func (c *ChainFork) upgradeActorsV8Common( ) } - manifest, ok := actors.GetManifest(actors.Version8) + manifest, ok := actors.GetManifest(actorstypes.Version8) if !ok { return cid.Undef, fmt.Errorf("no manifest CID for v8 upgrade") } @@ -2133,6 +2146,120 @@ func (c *ChainFork) upgradeActorsV8Common( return newRoot, nil } +func (c *ChainFork) UpgradeActorsV9(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + config := nv17.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + + newRoot, err := c.upgradeActorsV9Common(ctx, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, fmt.Errorf("migrating actors v8 state: %w", err) + } + + fmt.Print(fvmLiftoffBanner) + + return newRoot, nil +} + +func (c *ChainFork) PreUpgradeActorsV9(ctx context.Context, + cache MigrationCache, + root cid.Cid, + epoch abi.ChainEpoch, + ts *types.TipSet, +) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + + ver := c.GetNetworkVersion(ctx, epoch) + lbts, lbRoot, err := c.cr.GetLookbackTipSetForRound(ctx, ts, epoch, ver) + if err != nil { + return fmt.Errorf("error getting lookback ts for premigration: %w", err) + } + + config := nv17.Config{ + MaxWorkers: uint(workerCount), + ProgressLogPeriod: time.Minute * 5, + } + + _, err = c.upgradeActorsV9Common(ctx, cache, lbRoot, epoch, lbts, config) + return err +} + +func (c *ChainFork) upgradeActorsV9Common(ctx context.Context, + cache MigrationCache, + root cid.Cid, + epoch abi.ChainEpoch, + ts *types.TipSet, + config nv17.Config, +) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + // ensure that the manifest is loaded in the blockstore + if err := actors.LoadBundles(ctx, buf, actorstypes.Version9); err != nil { + return cid.Undef, fmt.Errorf("failed to load manifest bundle: %w", err) + } + + // Load the state root. + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, fmt.Errorf("failed to decode state root: %w", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion4 { + return cid.Undef, fmt.Errorf("expected state root version 4 for actors v9 upgrade, got %d", stateRoot.Version) + } + + manifest, ok := actors.GetManifest(actorstypes.Version9) + if !ok { + return cid.Undef, fmt.Errorf("no manifest CID for v9 upgrade") + } + + // Perform the migration + newHamtRoot, err := nv17.MigrateStateTree(ctx, store, manifest, stateRoot.Actors, epoch, config, + migrationLogger{}, cache) + if err != nil { + return cid.Undef, fmt.Errorf("upgrading to actors v9: %w", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion4, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, fmt.Errorf("failed to persist new state root: %w", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, fmt.Errorf("copying migrated tree: %w", err) + } + } + + return newRoot, nil +} + func (c *ChainFork) GetForkUpgrade() *config.ForkUpgradeConfig { return c.forkUpgrade } @@ -2165,7 +2292,7 @@ func (c *ChainFork) GetForkUpgrade() *config.ForkUpgradeConfig { // return LiteMigration(ctx, bstore, newActorsManifestCid, root, av, vmstate.StateTreeVersion4, newStateTreeVersion) // } -func LiteMigration(ctx context.Context, bstore blockstoreutil.Blockstore, newActorsManifestCid cid.Cid, root cid.Cid, av actors.Version, oldStateTreeVersion vmstate.StateTreeVersion, newStateTreeVersion vmstate.StateTreeVersion) (cid.Cid, error) { +func LiteMigration(ctx context.Context, bstore blockstoreutil.Blockstore, newActorsManifestCid cid.Cid, root cid.Cid, av actorstypes.Version, oldStateTreeVersion vmstate.StateTreeVersion, newStateTreeVersion vmstate.StateTreeVersion) (cid.Cid, error) { buf := blockstoreutil.NewTieredBstore(bstore, blockstoreutil.NewTemporarySync()) store := chain.ActorStore(ctx, buf) adtStore := gstStore.WrapStore(ctx, store) diff --git a/pkg/fvm/cbor_gen.go b/pkg/fvm/cbor_gen.go index 1d71d36bc6..0d2dbd2026 100644 --- a/pkg/fvm/cbor_gen.go +++ b/pkg/fvm/cbor_gen.go @@ -19,7 +19,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -var lengthBufFvmExecutionTrace = []byte{132} +var lengthBufFvmExecutionTrace = []byte{133} func (t *FvmExecutionTrace) MarshalCBOR(w io.Writer) error { if t == nil { @@ -55,8 +55,22 @@ func (t *FvmExecutionTrace) MarshalCBOR(w io.Writer) error { return err } + // t.GasCharges ([]fvm.FvmGasCharge) (slice) + if len(t.GasCharges) > 1000000000 { + return xerrors.Errorf("Slice value in field t.GasCharges was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.GasCharges))); err != nil { + return err + } + for _, v := range t.GasCharges { + if err := v.MarshalCBOR(cw); err != nil { + return err + } + } + // t.Subcalls ([]fvm.FvmExecutionTrace) (slice) - if len(t.Subcalls) > cbg.MaxLength { + if len(t.Subcalls) > 1000000000 { return xerrors.Errorf("Slice value in field t.Subcalls was too long") } @@ -90,7 +104,7 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return fmt.Errorf("cbor input should be of type array") } - if extra != 4 { + if extra != 5 { return fmt.Errorf("cbor input had wrong number of fields") } @@ -142,6 +156,35 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { t.Error = string(sval) } + // t.GasCharges ([]fvm.FvmGasCharge) (slice) + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + + if extra > 1000000000 { + return fmt.Errorf("t.GasCharges: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.GasCharges = make([]FvmGasCharge, extra) + } + + for i := 0; i < int(extra); i++ { + + var v FvmGasCharge + if err := v.UnmarshalCBOR(cr); err != nil { + return err + } + + t.GasCharges[i] = v + } + // t.Subcalls ([]fvm.FvmExecutionTrace) (slice) maj, extra, err = cr.ReadHeader() @@ -149,7 +192,7 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return err } - if extra > cbg.MaxLength { + if extra > 1000000000 { return fmt.Errorf("t.Subcalls: array too large (%d)", extra) } @@ -173,3 +216,175 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return nil } + +var lengthBufFvmGasCharge = []byte{132} + +func (t *FvmGasCharge) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write(lengthBufFvmGasCharge); err != nil { + return err + } + + // t.Name (string) (string) + if len(t.Name) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.Name was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Name))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Name)); err != nil { + return err + } + + // t.TotalGas (int64) (int64) + if t.TotalGas >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.TotalGas)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.TotalGas-1)); err != nil { + return err + } + } + + // t.ComputeGas (int64) (int64) + if t.ComputeGas >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.ComputeGas)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.ComputeGas-1)); err != nil { + return err + } + } + + // t.StorageGas (int64) (int64) + if t.StorageGas >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.StorageGas)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.StorageGas-1)); err != nil { + return err + } + } + return nil +} + +func (t *FvmGasCharge) UnmarshalCBOR(r io.Reader) (err error) { + *t = FvmGasCharge{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Name (string) (string) + + { + sval, err := cbg.ReadString(cr) + if err != nil { + return err + } + + t.Name = string(sval) + } + // t.TotalGas (int64) (int64) + { + maj, extra, err := cr.ReadHeader() + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.TotalGas = int64(extraI) + } + // t.ComputeGas (int64) (int64) + { + maj, extra, err := cr.ReadHeader() + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.ComputeGas = int64(extraI) + } + // t.StorageGas (int64) (int64) + { + maj, extra, err := cr.ReadHeader() + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.StorageGas = int64(extraI) + } + return nil +} diff --git a/pkg/fvm/fvm.go b/pkg/fvm/fvm.go index 8f5d9b30d5..8e02091d2e 100644 --- a/pkg/fvm/fvm.go +++ b/pkg/fvm/fvm.go @@ -16,6 +16,7 @@ import ( ffi_cgo "github.com/filecoin-project/filecoin-ffi/cgo" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/venus/pkg/constants" @@ -58,13 +59,21 @@ type FvmExtern struct { // nolint gasPriceSchedule *gas.PricesSchedule } +type FvmGasCharge struct { + Name string + TotalGas int64 + ComputeGas int64 + StorageGas int64 +} + // This may eventually become identical to ExecutionTrace, but we can make incremental progress towards that type FvmExecutionTrace struct { // nolint Msg *types.Message MsgRct *types.MessageReceipt Error string - Subcalls []FvmExecutionTrace + GasCharges []FvmGasCharge `cborgen:"maxlen=1000000000"` + Subcalls []FvmExecutionTrace `cborgen:"maxlen=1000000000"` } func (t *FvmExecutionTrace) ToExecutionTrace() types.ExecutionTrace { @@ -81,6 +90,18 @@ func (t *FvmExecutionTrace) ToExecutionTrace() types.ExecutionTrace { Subcalls: nil, // Should be nil when there are no subcalls for backwards compatibility } + if len(t.GasCharges) > 0 { + ret.GasCharges = make([]*types.GasTrace, len(t.GasCharges)) + for i, v := range t.GasCharges { + ret.GasCharges[i] = &types.GasTrace{ + Name: v.Name, + TotalGas: v.TotalGas, + ComputeGas: v.ComputeGas, + StorageGas: v.StorageGas, + } + } + } + if len(t.Subcalls) > 0 { ret.Subcalls = make([]types.ExecutionTrace, len(t.Subcalls)) @@ -327,7 +348,7 @@ func NewFVM(ctx context.Context, opts *vm.VmOption) (*FVM, error) { return nil, fmt.Errorf("creating fvm opts: %w", err) } if os.Getenv("VENUS_USE_FVM_CUSTOM_BUNDLE") == "1" { - av, err := actors.VersionForNetwork(opts.NetworkVersion) + av, err := actorstypes.VersionForNetwork(opts.NetworkVersion) if err != nil { return nil, fmt.Errorf("mapping network version to actors version: %w", err) } @@ -395,7 +416,7 @@ func NewDebugFVM(ctx context.Context, opts *vm.VmOption) (*FVM, error) { return fmt.Errorf("loading debug manifest: %w", err) } - av, err := actors.VersionForNetwork(opts.NetworkVersion) + av, err := actorstypes.VersionForNetwork(opts.NetworkVersion) if err != nil { return fmt.Errorf("getting actors version: %w", err) } @@ -429,13 +450,13 @@ func NewDebugFVM(ctx context.Context, opts *vm.VmOption) (*FVM, error) { return nil } - av, err := actors.VersionForNetwork(opts.NetworkVersion) + av, err := actorstypes.VersionForNetwork(opts.NetworkVersion) if err != nil { return nil, fmt.Errorf("error determining actors version for network version %d: %w", opts.NetworkVersion, err) } switch av { - case actors.Version8: + case actorstypes.Version8: if debugBundleV8path != "" { if err := createMapping(debugBundleV8path); err != nil { fvmLog.Errorf("failed to create v8 debug mapping") diff --git a/pkg/gen/genesis/f00_system.go b/pkg/gen/genesis/f00_system.go index 5e9f5d3613..f104cb7fbd 100644 --- a/pkg/gen/genesis/f00_system.go +++ b/pkg/gen/genesis/f00_system.go @@ -6,6 +6,7 @@ import ( "github.com/filecoin-project/go-state-types/big" + actorstypes "github.com/filecoin-project/go-state-types/actors" systemtypes "github.com/filecoin-project/go-state-types/builtin/v8/system" "github.com/filecoin-project/go-state-types/manifest" @@ -21,7 +22,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/types" ) -func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { var st system.State cst := cbor.NewCborStore(bs) @@ -31,7 +32,7 @@ func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actors.Versi return nil, err } - if av >= actors.Version8 { + if av >= actorstypes.Version8 { mfCid, ok := actors.GetManifest(av) if !ok { return nil, fmt.Errorf("missing manifest for actors version %d", av) diff --git a/pkg/gen/genesis/f01_init.go b/pkg/gen/genesis/f01_init.go index 562d0be8ef..cad47d784e 100644 --- a/pkg/gen/genesis/f01_init.go +++ b/pkg/gen/genesis/f01_init.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -21,7 +22,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/types" ) -func SetupInitActor(ctx context.Context, bs bstore.Blockstore, netname string, initialActors []Actor, rootVerifier Actor, remainder Actor, av actors.Version) (int64, *types.Actor, map[address.Address]address.Address, error) { +func SetupInitActor(ctx context.Context, bs bstore.Blockstore, netname string, initialActors []Actor, rootVerifier Actor, remainder Actor, av actorstypes.Version) (int64, *types.Actor, map[address.Address]address.Address, error) { if len(initialActors) > MaxAccounts { return 0, nil, nil, errors.New("too many initial actors") } diff --git a/pkg/gen/genesis/f02_reward.go b/pkg/gen/genesis/f02_reward.go index c765ccfaea..3f2fe36808 100644 --- a/pkg/gen/genesis/f02_reward.go +++ b/pkg/gen/genesis/f02_reward.go @@ -10,14 +10,14 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" "github.com/filecoin-project/venus/venus-shared/types" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - cbor "github.com/ipfs/go-ipld-cbor" bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" ) -func SetupRewardActor(ctx context.Context, bs bstore.Blockstore, qaPower big.Int, av actors.Version) (*types.Actor, error) { +func SetupRewardActor(ctx context.Context, bs bstore.Blockstore, qaPower big.Int, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) rst, err := reward.MakeState(adt.WrapStore(ctx, cst), av, qaPower) if err != nil { diff --git a/pkg/gen/genesis/f03_cron.go b/pkg/gen/genesis/f03_cron.go index 0e01f4b9dd..3a699dfd2e 100644 --- a/pkg/gen/genesis/f03_cron.go +++ b/pkg/gen/genesis/f03_cron.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" cbor "github.com/ipfs/go-ipld-cbor" @@ -15,7 +16,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/types" ) -func SetupCronActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupCronActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) st, err := cron.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) if err != nil { diff --git a/pkg/gen/genesis/f04_power.go b/pkg/gen/genesis/f04_power.go index d9fbb39ee0..d24c411ee8 100644 --- a/pkg/gen/genesis/f04_power.go +++ b/pkg/gen/genesis/f04_power.go @@ -7,6 +7,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -16,7 +17,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/types" ) -func SetupStoragePowerActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupStoragePowerActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) pst, err := power.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) diff --git a/pkg/gen/genesis/f05_market.go b/pkg/gen/genesis/f05_market.go index 04706c6b6c..68d087357d 100644 --- a/pkg/gen/genesis/f05_market.go +++ b/pkg/gen/genesis/f05_market.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" cbor "github.com/ipfs/go-ipld-cbor" @@ -15,7 +16,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/types" ) -func SetupStorageMarketActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupStorageMarketActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) mst, err := market.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) if err != nil { diff --git a/pkg/gen/genesis/f06_vreg.go b/pkg/gen/genesis/f06_vreg.go index bd6e776b2d..849b10fdcf 100644 --- a/pkg/gen/genesis/f06_vreg.go +++ b/pkg/gen/genesis/f06_vreg.go @@ -10,6 +10,7 @@ import ( "github.com/filecoin-project/go-address" cbor "github.com/ipfs/go-ipld-cbor" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -30,7 +31,7 @@ func init() { RootVerifierID = idk } -func SetupVerifiedRegistryActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupVerifiedRegistryActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) vst, err := verifreg.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av, RootVerifierID) if err != nil { diff --git a/pkg/gen/genesis/genesis.go b/pkg/gen/genesis/genesis.go index 6c1c74cdd6..55836393bd 100644 --- a/pkg/gen/genesis/genesis.go +++ b/pkg/gen/genesis/genesis.go @@ -24,6 +24,7 @@ import ( verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/venus/venus-shared/actors" @@ -155,7 +156,7 @@ func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template Te return nil, nil, fmt.Errorf("making new state tree: %w", err) } - av, err := actors.VersionForNetwork(template.NetworkVersion) + av, err := actorstypes.VersionForNetwork(template.NetworkVersion) if err != nil { return nil, nil, fmt.Errorf("get actor version: %w", err) } @@ -373,7 +374,7 @@ func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template Te return state, keyIDs, nil } -func makeAccountActor(ctx context.Context, cst cbor.IpldStore, av actors.Version, addr address.Address, bal types.BigInt) (*types.Actor, error) { +func makeAccountActor(ctx context.Context, cst cbor.IpldStore, av actorstypes.Version, addr address.Address, bal types.BigInt) (*types.Actor, error) { ast, err := account.MakeState(adt.WrapStore(ctx, cst), av, addr) if err != nil { return nil, err @@ -398,7 +399,7 @@ func makeAccountActor(ctx context.Context, cst cbor.IpldStore, av actors.Version return act, nil } -func createAccountActor(ctx context.Context, cst cbor.IpldStore, state *tree.State, info Actor, keyIDs map[address.Address]address.Address, av actors.Version) error { +func createAccountActor(ctx context.Context, cst cbor.IpldStore, state *tree.State, info Actor, keyIDs map[address.Address]address.Address, av actorstypes.Version) error { var ainfo AccountMeta if err := json.Unmarshal(info.Meta, &ainfo); err != nil { return fmt.Errorf("unmarshaling account meta: %w", err) @@ -421,7 +422,7 @@ func createAccountActor(ctx context.Context, cst cbor.IpldStore, state *tree.Sta return nil } -func createMultisigAccount(ctx context.Context, cst cbor.IpldStore, state *tree.State, ida address.Address, info Actor, keyIDs map[address.Address]address.Address, av actors.Version) error { +func createMultisigAccount(ctx context.Context, cst cbor.IpldStore, state *tree.State, ida address.Address, info Actor, keyIDs map[address.Address]address.Address, av actorstypes.Version) error { if info.Type != TMultisig { return fmt.Errorf("can only call createMultisigAccount with multisig Actor info") } diff --git a/pkg/gen/genesis/miners.go b/pkg/gen/genesis/miners.go index d324351583..7060178c03 100644 --- a/pkg/gen/genesis/miners.go +++ b/pkg/gen/genesis/miners.go @@ -9,8 +9,6 @@ import ( cborutil "github.com/filecoin-project/go-cbor-util" - smoothing0 "github.com/filecoin-project/specs-actors/actors/util/smoothing" - reward2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/reward" power4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/power" @@ -18,19 +16,18 @@ import ( reward4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/reward" - market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + smoothing9 "github.com/filecoin-project/go-state-types/builtin/v9/util/smoothing" - "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/builtin" "github.com/filecoin-project/venus/venus-shared/actors/policy" "github.com/filecoin-project/venus/venus-shared/actors/adt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" - market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" - builtintypes "github.com/filecoin-project/go-state-types/builtin" markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" @@ -95,7 +92,7 @@ func mkFakedSigSyscalls(sys vmcontext.SyscallsImpl) vmcontext.SyscallsImpl { // Note: Much of this is brittle, if the methodNum / param / return changes, it will break things func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, miners []Miner, nv network.Version, para *config.ForkUpgradeConfig) (cid.Cid, error) { cst := cbor.NewCborStore(cs.Blockstore()) - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return cid.Undef, fmt.Errorf("get actor version: %w", err) } @@ -138,10 +135,12 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min presealExp abi.ChainEpoch - dealIDs []abi.DealID + dealIDs []abi.DealID + sectorWeight []abi.StoragePower }, len(miners)) maxPeriods := policy.GetMaxSectorExpirationExtension() / minertypes.WPoStProvingPeriod + rawPow, qaPow := big.NewInt(0), big.NewInt(0) for i, m := range miners { // Create miner through power actor i := i @@ -219,7 +218,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min } } - // Publish preseal deals + // Publish preseal deals, and calculate the QAPower { publish := func(params *markettypes.PublishStorageDealsParams) error { @@ -255,7 +254,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min ClientSignature: crypto.Signature{Type: crypto.SigTypeBLS}, } - if av >= actors.Version8 { + if av >= actorstypes.Version8 { buf, err := cborutil.Dump(&preseal.Deal) if err != nil { return cid.Undef, fmt.Errorf("failed to marshal proposal: %w", err) @@ -282,6 +281,11 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min params = &markettypes.PublishStorageDealsParams{} } + + rawPow = big.Add(rawPow, big.NewInt(int64(m.SectorSize))) + sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, big.Zero(), markettypes.DealWeight(&preseal.Deal)) + minerInfos[i].sectorWeight = append(minerInfos[i].sectorWeight, sectorWeight) + qaPow = big.Add(qaPow, sectorWeight) } if len(params.Deals) > 0 { @@ -292,24 +296,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min } } - // adjust total network power for equal pledge per sector - rawPow, qaPow := big.NewInt(0), big.NewInt(0) { - for i, m := range miners { - for pi := range m.Sectors { - rawPow = types.BigAdd(rawPow, types.NewInt(uint64(m.SectorSize))) - - dweight, vdweight, err := dealWeight(ctx, genesisVM, minerInfos[i].maddr, []abi.DealID{minerInfos[i].dealIDs[pi]}, 0, minerInfos[i].presealExp, av) - if err != nil { - return cid.Undef, fmt.Errorf("getting deal weight: %w", err) - } - - sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight, vdweight) - - qaPow = types.BigAdd(qaPow, sectorWeight) - } - } - nh, err := genesisVM.Flush(ctx) if err != nil { return cid.Undef, fmt.Errorf("flushing vm: %w", err) @@ -364,7 +351,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min return cid.Undef, fmt.Errorf("setting power state: %w", err) } - ver, err := actors.VersionForNetwork(nv) + ver, err := actorstypes.VersionForNetwork(nv) if err != nil { return cid.Undef, fmt.Errorf("get actor version: %w", err) } @@ -402,12 +389,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally! } - dweight, vdweight, err := dealWeight(ctx, genesisVM, minerInfos[i].maddr, params.DealIDs, 0, minerInfos[i].presealExp, av) - if err != nil { - return cid.Undef, fmt.Errorf("getting deal weight: %w", err) - } - - sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight, vdweight) + sectorWeight := minerInfos[i].sectorWeight[pi] // we've added fake power for this sector above, remove it now @@ -479,14 +461,13 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min return cid.Undef, fmt.Errorf("getting current total power: %w", err) } - pcd := miner0.PreCommitDepositForPower((*smoothing0.FilterEstimate)(&rewardSmoothed), tpow.QualityAdjPowerSmoothed, sectorWeight) + pcd := miner9.PreCommitDepositForPower(smoothing9.FilterEstimate(rewardSmoothed), smoothing9.FilterEstimate(*tpow.QualityAdjPowerSmoothed), miner9.QAPowerMax(m.SectorSize)) - pledge := miner0.InitialPledgeForPower( + pledge := miner9.InitialPledgeForPower( sectorWeight, baselinePower, - tpow.PledgeCollateral, - (*smoothing0.FilterEstimate)(&rewardSmoothed), - tpow.QualityAdjPowerSmoothed, + smoothing9.FilterEstimate(rewardSmoothed), + smoothing9.FilterEstimate(*tpow.QualityAdjPowerSmoothed), big.Zero(), ) @@ -501,7 +482,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min // Commit one-by-one, otherwise pledge math tends to explode var paramBytes []byte - if av >= actors.Version6 { + if av >= actorstypes.Version6 { // TODO: fixup confirmParams := &builtin6.ConfirmSectorProofsParams{ Sectors: []abi.SectorNumber{preseal.SectorID}, @@ -521,7 +502,7 @@ func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, min return cid.Undef, fmt.Errorf("failed to confirm presealed sectors: %w", err) } - if av > actors.Version2 { + if av > actorstypes.Version2 { // post v2, we need to explicitly Claim this power since ConfirmSectorProofsValid doesn't do it anymore claimParams := &power4.UpdateClaimedPowerParams{ RawByteDelta: types.NewInt(uint64(m.SectorSize)), @@ -660,56 +641,7 @@ func currentTotalPower(ctx context.Context, vmi vm.Interface, maddr address.Addr return &pwr, nil } -func dealWeight(ctx context.Context, vmi vm.Interface, maddr address.Address, dealIDs []abi.DealID, sectorStart, sectorExpiry abi.ChainEpoch, av actors.Version) (abi.DealWeight, abi.DealWeight, error) { - // TODO: This hack should move to market actor wrapper - if av <= actors.Version2 { - params := &market0.VerifyDealsForActivationParams{ - DealIDs: dealIDs, - SectorStart: sectorStart, - SectorExpiry: sectorExpiry, - } - - var dealWeights market0.VerifyDealsForActivationReturn - ret, err := doExecValue(ctx, vmi, - market.Address, - maddr, - abi.NewTokenAmount(0), - builtin0.MethodsMarket.VerifyDealsForActivation, - mustEnc(params), - ) - if err != nil { - return big.Zero(), big.Zero(), err - } - if err := dealWeights.UnmarshalCBOR(bytes.NewReader(ret)); err != nil { - return big.Zero(), big.Zero(), err - } - - return dealWeights.DealWeight, dealWeights.VerifiedDealWeight, nil - } - params := &market4.VerifyDealsForActivationParams{Sectors: []market4.SectorDeals{{ - SectorExpiry: sectorExpiry, - DealIDs: dealIDs, - }}} - - var dealWeights market4.VerifyDealsForActivationReturn - ret, err := doExecValue(ctx, vmi, - market.Address, - maddr, - abi.NewTokenAmount(0), - market.Methods.VerifyDealsForActivation, - mustEnc(params), - ) - if err != nil { - return big.Zero(), big.Zero(), err - } - if err := dealWeights.UnmarshalCBOR(bytes.NewReader(ret)); err != nil { - return big.Zero(), big.Zero(), err - } - - return dealWeights.Sectors[0].DealWeight, dealWeights.Sectors[0].VerifiedDealWeight, nil -} - -func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address.Address, av actors.Version) (abi.StoragePower, builtin.FilterEstimate, error) { +func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address.Address, av actorstypes.Version) (abi.StoragePower, builtin.FilterEstimate, error) { rwret, err := doExecValue(ctx, vm, reward.Address, maddr, big.Zero(), reward.Methods.ThisEpochReward, nil) if err != nil { return big.Zero(), builtin.FilterEstimate{}, err @@ -717,7 +649,7 @@ func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address // TODO: This hack should move to reward actor wrapper switch av { - case actors.Version0: + case actorstypes.Version0: var epochReward reward0.ThisEpochRewardReturn if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil { @@ -725,7 +657,7 @@ func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address } return epochReward.ThisEpochBaselinePower, builtin.FilterEstimate(*epochReward.ThisEpochRewardSmoothed), nil - case actors.Version2: + case actorstypes.Version2: var epochReward reward2.ThisEpochRewardReturn if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil { diff --git a/pkg/paychmgr/paych.go b/pkg/paychmgr/paych.go index a6af3c067a..c4acd8bc4b 100644 --- a/pkg/paychmgr/paych.go +++ b/pkg/paychmgr/paych.go @@ -11,8 +11,8 @@ import ( "github.com/filecoin-project/go-state-types/builtin/v8/paych" "github.com/ipfs/go-cid" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/pkg/crypto" - "github.com/filecoin-project/venus/venus-shared/actors" lpaych "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" "github.com/filecoin-project/venus/venus-shared/types" pchTypes "github.com/filecoin-project/venus/venus-shared/types/market" @@ -88,7 +88,7 @@ func (ca *channelAccessor) messageBuilder(ctx context.Context, from address.Addr return nil, err } - ver, err := actors.VersionForNetwork(nwVersion) + ver, err := actorstypes.VersionForNetwork(nwVersion) if err != nil { return nil, err } diff --git a/pkg/state/tree/state.go b/pkg/state/tree/state.go index 0c914fa046..fae83c61d9 100644 --- a/pkg/state/tree/state.go +++ b/pkg/state/tree/state.go @@ -143,7 +143,7 @@ func VersionForNetwork(ver network.Version) (StateTreeVersion, error) { case{{range .networkVersions}} {{if (ge . 13.)}} network.Version{{.}}{{if (lt . $lastNv)}},{{end}}{{end}}{{end}}: /* inline-gen start */ - case network.Version13, network.Version14, network.Version15, network.Version16: + case network.Version13, network.Version14, network.Version15, network.Version16, network.Version17: /* inline-gen end */ return StateTreeVersion4, nil diff --git a/pkg/state/view.go b/pkg/state/view.go index 38bbb6a4c6..4ebc1b0cfd 100644 --- a/pkg/state/view.go +++ b/pkg/state/view.go @@ -17,7 +17,7 @@ import ( addr "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" vmstate "github.com/filecoin-project/venus/pkg/state/tree" "github.com/filecoin-project/venus/pkg/util/ffiwrapper" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -141,7 +141,7 @@ func (v *View) MinerSectorInfo(ctx context.Context, maddr addr.Address, sectorNu return info, nil } -//GetSectorsForWinningPoSt return sector of winning post challenge result +// GetSectorsForWinningPoSt return sector of winning post challenge result func (v *View) GetSectorsForWinningPoSt(ctx context.Context, nv network.Version, pv ffiwrapper.Verifier, maddr addr.Address, rand abi.PoStRandomness) ([]builtin.ExtendedSectorInfo, error) { mas, err := v.LoadMinerState(ctx, maddr) if err != nil { @@ -487,7 +487,7 @@ func (v *View) MinerClaimedPower(ctx context.Context, miner addr.Address) (raw, return p.RawBytePower, p.QualityAdjPower, nil } -//MinerNominalPowerMeetsConsensusMinimum return whether miner meet consensus minmum power +// MinerNominalPowerMeetsConsensusMinimum return whether miner meet consensus minmum power func (v *View) MinerNominalPowerMeetsConsensusMinimum(ctx context.Context, addr addr.Address) (bool, error) { st, err := v.LoadPowerActor(ctx) if err != nil { @@ -669,7 +669,7 @@ func (v *View) StateMinerActiveSectors(ctx context.Context, maddr addr.Address, return mas.LoadSectors(&activeSectors) } -//GetFilLocked return all locked fil amount +// GetFilLocked return all locked fil amount func (v *View) GetFilLocked(ctx context.Context, st vmstate.Tree) (abi.TokenAmount, error) { filMarketLocked, err := getFilMarketLocked(ctx, v.ipldStore, st) if err != nil { @@ -689,7 +689,7 @@ func (v *View) GetFilLocked(ctx context.Context, st vmstate.Tree) (abi.TokenAmou return big.Add(filMarketLocked, filPowerLocked), nil } -//LoadActor load actor from tree +// LoadActor load actor from tree func (v *View) LoadActor(ctx context.Context, address addr.Address) (*types.Actor, error) { return v.loadActor(ctx, address) } @@ -723,12 +723,12 @@ func (v *View) LoadInitState(ctx context.Context) (notinit.State, error) { return notinit.Load(adt.WrapStore(ctx, v.ipldStore), actr) } -//LoadPaychState get pay channel state for actor +// LoadPaychState get pay channel state for actor func (v *View) LoadPaychState(ctx context.Context, actor *types.Actor) (paychActor.State, error) { return paychActor.Load(adt.WrapStore(context.TODO(), v.ipldStore), actor) } -//LoadMinerState return miner state +// LoadMinerState return miner state func (v *View) LoadMinerState(ctx context.Context, maddr addr.Address) (lminer.State, error) { resolvedAddr, err := v.InitResolveAddress(ctx, maddr) if err != nil { @@ -803,7 +803,7 @@ func (v *View) LoadAccountState(ctx context.Context, a addr.Address) (account.St return account.Load(adt.WrapStore(context.TODO(), v.ipldStore), actr) } -//loadActor load actor of address in db +// loadActor load actor of address in db func (v *View) loadActor(ctx context.Context, address addr.Address) (*types.Actor, error) { tree, err := vmstate.LoadState(ctx, v.ipldStore, v.root) if err != nil { diff --git a/pkg/vm/dispatch/loader.go b/pkg/vm/dispatch/loader.go index 2e1d6eda94..48106eeb31 100644 --- a/pkg/vm/dispatch/loader.go +++ b/pkg/vm/dispatch/loader.go @@ -3,6 +3,7 @@ package dispatch import ( "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/exitcode" rtt "github.com/filecoin-project/go-state-types/rt" rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" @@ -18,7 +19,7 @@ type CodeLoader struct { actors map[cid.Cid]ActorInfo } -//ActorInfo vm contract actor +// ActorInfo vm contract actor type ActorInfo struct { vmActor rtt.VMActor // TODO: consider making this a network version range? @@ -70,7 +71,7 @@ func NewBuilder() *CodeLoaderBuilder { } // Add lets you add an actor dispatch table for a given version. -func (b *CodeLoaderBuilder) Add(av actors.Version, predict ActorPredicate, actor Actor) *CodeLoaderBuilder { +func (b *CodeLoaderBuilder) Add(av actorstypes.Version, predict ActorPredicate, actor Actor) *CodeLoaderBuilder { if predict == nil { predict = func(vmr.Runtime, rtt.VMActor) error { return nil } } @@ -85,7 +86,7 @@ func (b *CodeLoaderBuilder) Add(av actors.Version, predict ActorPredicate, actor // necessary to make stuff work var realCode cid.Cid - if av >= actors.Version8 { + if av >= actorstypes.Version8 { name := actors.CanonicalName(builtin.ActorNameByCode(ac)) var ok bool @@ -99,7 +100,7 @@ func (b *CodeLoaderBuilder) Add(av actors.Version, predict ActorPredicate, actor } // Add lets you add an actor dispatch table for a given version. -func (b *CodeLoaderBuilder) AddMany(av actors.Version, predict ActorPredicate, actors ...rt5.VMActor) *CodeLoaderBuilder { +func (b *CodeLoaderBuilder) AddMany(av actorstypes.Version, predict ActorPredicate, actors ...rt5.VMActor) *CodeLoaderBuilder { for _, actor := range actors { b.Add(av, predict, actor) } @@ -114,10 +115,10 @@ func (b *CodeLoaderBuilder) Build() CodeLoader { // An ActorPredicate returns an error if the given actor is not valid for the given runtime environment (e.g., chain height, version, etc.). type ActorPredicate func(vmr.Runtime, rtt.VMActor) error -//ActorsVersionPredicate get actor predicate base on actor version and network version -func ActorsVersionPredicate(ver actors.Version) ActorPredicate { +// ActorsVersionPredicate get actor predicate base on actor version and network version +func ActorsVersionPredicate(ver actorstypes.Version) ActorPredicate { return func(rt vmr.Runtime, v rtt.VMActor) error { - nver, err := actors.VersionForNetwork(rt.NetworkVersion()) + nver, err := actorstypes.VersionForNetwork(rt.NetworkVersion()) if err != nil { return fmt.Errorf("version for network %w", err) } diff --git a/pkg/vm/register/default.go b/pkg/vm/register/default.go index 1c09dcddb1..0005b7ae5c 100644 --- a/pkg/vm/register/default.go +++ b/pkg/vm/register/default.go @@ -5,11 +5,7 @@ import ( "fmt" "sync" - /* inline-gen template - {{range .actorVersions}} - exported{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/exported"{{end}} - /* inline-gen start */ - + actorstypes "github.com/filecoin-project/go-state-types/actors" exported0 "github.com/filecoin-project/specs-actors/actors/builtin/exported" exported2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/exported" exported3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/exported" @@ -17,12 +13,7 @@ import ( exported5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/exported" exported6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/exported" exported7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/exported" - exported8 "github.com/filecoin-project/specs-actors/v8/actors/builtin/exported" - - /* inline-gen end */ - "github.com/filecoin-project/venus/pkg/vm/dispatch" - "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/builtin" "github.com/filecoin-project/venus/venus-shared/types" ) @@ -36,21 +27,15 @@ var defaultActors dispatch.CodeLoader func GetDefaultActros() *dispatch.CodeLoader { loadOnce.Do(func() { - /* inline-gen template - {{range .actorVersions}} - DefaultActorBuilder.AddMany(actors.Version{{.}}, dispatch.ActorsVersionPredicate(actors.Version{{.}}), exported{{.}}.BuiltinActors()...){{end}} - /* inline-gen start */ - - DefaultActorBuilder.AddMany(actors.Version0, dispatch.ActorsVersionPredicate(actors.Version0), exported0.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version2, dispatch.ActorsVersionPredicate(actors.Version2), exported2.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version3, dispatch.ActorsVersionPredicate(actors.Version3), exported3.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version4, dispatch.ActorsVersionPredicate(actors.Version4), exported4.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version5, dispatch.ActorsVersionPredicate(actors.Version5), exported5.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version6, dispatch.ActorsVersionPredicate(actors.Version6), exported6.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version7, dispatch.ActorsVersionPredicate(actors.Version7), exported7.BuiltinActors()...) - DefaultActorBuilder.AddMany(actors.Version8, dispatch.ActorsVersionPredicate(actors.Version8), exported8.BuiltinActors()...) - /* inline-gen end */ - + DefaultActorBuilder.AddMany(actorstypes.Version0, dispatch.ActorsVersionPredicate(actorstypes.Version0), exported0.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version2, dispatch.ActorsVersionPredicate(actorstypes.Version2), exported2.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version3, dispatch.ActorsVersionPredicate(actorstypes.Version3), exported3.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version4, dispatch.ActorsVersionPredicate(actorstypes.Version4), exported4.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version5, dispatch.ActorsVersionPredicate(actorstypes.Version5), exported5.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version6, dispatch.ActorsVersionPredicate(actorstypes.Version6), exported6.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version7, dispatch.ActorsVersionPredicate(actorstypes.Version7), exported7.BuiltinActors()...) + DefaultActorBuilder.AddMany(actorstypes.Version8, dispatch.ActorsVersionPredicate(actorstypes.Version8), builtin.MakeRegistry(actorstypes.Version8)...) + DefaultActorBuilder.AddMany(actorstypes.Version9, dispatch.ActorsVersionPredicate(actorstypes.Version9), builtin.MakeRegistry(actorstypes.Version9)...) defaultActors = DefaultActorBuilder.Build() }) diff --git a/pkg/vm/vmcontext/invocation_context.go b/pkg/vm/vmcontext/invocation_context.go index 1ff19cf528..4e8de356a2 100644 --- a/pkg/vm/vmcontext/invocation_context.go +++ b/pkg/vm/vmcontext/invocation_context.go @@ -16,6 +16,7 @@ import ( "github.com/ipfs/go-cid" ipfscbor "github.com/ipfs/go-ipld-cbor" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/pkg/vm/dispatch" "github.com/filecoin-project/venus/pkg/vm/gas" "github.com/filecoin-project/venus/pkg/vm/runtime" @@ -323,7 +324,7 @@ func (ctx *invocationContext) resolveTarget(target address.Address) (*types.Acto // Don't implicitly create an account actor for an address without an associated key. runtime.Abort(exitcode.SysErrInvalidReceiver) } - ver, err := actors.VersionForNetwork(ctx.vm.NetworkVersion()) + ver, err := actorstypes.VersionForNetwork(ctx.vm.NetworkVersion()) if err != nil { panic(err) } @@ -400,9 +401,7 @@ func (ctx *invocationContext) resolveToKeyAddr(addr address.Address) (address.Ad return aast.PubkeyAddress() } -// // implement runtime.InvocationContext for invocationContext -// var _ runtime.InvocationContext = (*invocationContext)(nil) // Runtime implements runtime.InvocationContext. @@ -468,7 +467,7 @@ func (ctx *invocationContext) Send(toAddr address.Address, methodNum abi.MethodN return code } -/// Balance implements runtime.InvocationContext. +// / Balance implements runtime.InvocationContext. func (ctx *invocationContext) Balance() abi.TokenAmount { toActor, found, err := ctx.vm.State.GetActor(ctx.vm.context, ctx.originMsg.To) if err != nil { @@ -480,9 +479,7 @@ func (ctx *invocationContext) Balance() abi.TokenAmount { return toActor.Balance } -// // implement runtime.InvocationContext for invocationContext -// var _ runtime.ExtendedInvocationContext = (*invocationContext)(nil) // NextActorAddress predicts the address of the next actor created by this address. diff --git a/pkg/vm/vmcontext/syscalls.go b/pkg/vm/vmcontext/syscalls.go index db4c30b774..37882a13c9 100644 --- a/pkg/vm/vmcontext/syscalls.go +++ b/pkg/vm/vmcontext/syscalls.go @@ -13,12 +13,6 @@ import ( proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" "github.com/ipfs/go-cid" - /* inline-gen template - {{range .actorVersions}} - rt{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/runtime"{{end}} - - /* inline-gen start */ - rt0 "github.com/filecoin-project/specs-actors/actors/runtime" rt2 "github.com/filecoin-project/specs-actors/v2/actors/runtime" rt3 "github.com/filecoin-project/specs-actors/v3/actors/runtime" @@ -26,9 +20,6 @@ import ( rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" rt6 "github.com/filecoin-project/specs-actors/v6/actors/runtime" rt7 "github.com/filecoin-project/specs-actors/v7/actors/runtime" - rt8 "github.com/filecoin-project/specs-actors/v8/actors/runtime" - - /* inline-gen end */ "github.com/filecoin-project/venus/pkg/crypto" vmState "github.com/filecoin-project/venus/pkg/state/tree" @@ -67,11 +58,6 @@ type syscalls struct { stateView SyscallsStateView } -/* inline-gen template -{{range .actorVersions}} -var _ rt{{.}}.Syscalls = (*syscalls)(nil){{end}} -/* inline-gen start */ - var _ rt0.Syscalls = (*syscalls)(nil) var _ rt2.Syscalls = (*syscalls)(nil) var _ rt3.Syscalls = (*syscalls)(nil) @@ -79,9 +65,6 @@ var _ rt4.Syscalls = (*syscalls)(nil) var _ rt5.Syscalls = (*syscalls)(nil) var _ rt6.Syscalls = (*syscalls)(nil) var _ rt7.Syscalls = (*syscalls)(nil) -var _ rt8.Syscalls = (*syscalls)(nil) - -/* inline-gen end */ func (sys syscalls) VerifySignature(signature crypto.Signature, signer address.Address, plaintext []byte) error { charge, err := sys.pricelist.OnVerifySignature(signature.Type, len(plaintext)) diff --git a/tools/conformance/driver.go b/tools/conformance/driver.go index 0d2a9d3a62..28aa97e78c 100644 --- a/tools/conformance/driver.go +++ b/tools/conformance/driver.go @@ -5,8 +5,6 @@ import ( gobig "math/big" "os" - "github.com/filecoin-project/venus/venus-shared/actors" - "github.com/filecoin-project/venus/pkg/consensus" "github.com/filecoin-project/venus/pkg/util/blockstoreutil" "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" @@ -28,6 +26,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" @@ -232,7 +231,7 @@ func (d *Driver) ExecuteMessage(bs blockstoreutil.Blockstore, params ExecuteMess actorBuilder := register.DefaultActorBuilder // register the chaos actor if required by the vector. if chaosOn, ok := d.selector["chaos_actor"]; ok && chaosOn == "true" { - av, _ := actors.VersionForNetwork(params.NetworkVersion) + av, _ := actorstypes.VersionForNetwork(params.NetworkVersion) chaosActor := chaos.Actor{} actorBuilder.Add(av, nil, chaosActor) } diff --git a/venus-devtool/cborgen/main.go b/venus-devtool/cborgen/main.go index b112308b75..c5ab2b204e 100644 --- a/venus-devtool/cborgen/main.go +++ b/venus-devtool/cborgen/main.go @@ -118,6 +118,7 @@ func main() { dir: "../pkg/fvm", types: []interface{}{ fvm.FvmExecutionTrace{}, + fvm.FvmGasCharge{}, }, }, } diff --git a/venus-devtool/compatible/actors/main.go b/venus-devtool/compatible/actors/main.go index 2eaebce539..186889ecf2 100644 --- a/venus-devtool/compatible/actors/main.go +++ b/venus-devtool/compatible/actors/main.go @@ -208,7 +208,6 @@ var replicaCmd = &cli.Command{ {"\"github.com/filecoin-project/lotus/node/modules/dtypes\"", ""}, {"\"github.com/filecoin-project/lotus/chain/types\"", "types \"github.com/filecoin-project/venus/venus-shared/internal\""}, {"\"github.com/filecoin-project/lotus/blockstore\"", "blockstore \"github.com/filecoin-project/venus/pkg/util/blockstoreutil\""}, - {"golang.org/x/xerrors", "fmt"}, } for _, file := range files { diff --git a/venus-devtool/compatible/actors/render.go b/venus-devtool/compatible/actors/render.go index 30b593d683..236ad675c8 100644 --- a/venus-devtool/compatible/actors/render.go +++ b/venus-devtool/compatible/actors/render.go @@ -91,8 +91,9 @@ func renderSeparated(t *template.Template, dir string) error { buf.Reset() err := t.Execute(&buf, map[string]interface{}{ - "v": v, - "import": importPath(v), + "v": v, + "import": importPath(v), + "latestVersion": actors.LatestVersion, }) if err != nil { diff --git a/venus-devtool/compatible/actors/templates.go b/venus-devtool/compatible/actors/templates.go index 104a415be5..b4276904db 100644 --- a/venus-devtool/compatible/actors/templates.go +++ b/venus-devtool/compatible/actors/templates.go @@ -43,8 +43,6 @@ var replacers = [][2]string{ "dtypes.NetworkName", "string", }, - {"\"golang.org/x/xerrors\"", "\"fmt\""}, - {"xerrors.Errorf", "fmt.Errorf"}, } func findActorsPkgDir() (string, error) { diff --git a/venus-devtool/go.mod b/venus-devtool/go.mod index 93aee33d1f..f48de34803 100644 --- a/venus-devtool/go.mod +++ b/venus-devtool/go.mod @@ -7,9 +7,9 @@ require ( github.com/filecoin-project/go-bitfield v0.2.4 github.com/filecoin-project/go-data-transfer v1.15.2 github.com/filecoin-project/go-fil-markets v1.24.0 - github.com/filecoin-project/go-jsonrpc v0.1.5 - github.com/filecoin-project/go-state-types v0.1.10 - github.com/filecoin-project/lotus v1.17.0-rc3 + github.com/filecoin-project/go-jsonrpc v0.1.7 + github.com/filecoin-project/go-state-types v0.1.12-beta + github.com/filecoin-project/lotus v1.17.2-0.20220920163159-fd0fec07d8fc github.com/filecoin-project/venus v0.0.0-00010101000000-000000000000 github.com/ipfs/go-block-format v0.0.3 github.com/ipfs/go-cid v0.2.0 @@ -19,7 +19,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.8.0 github.com/multiformats/go-multiaddr v0.6.0 github.com/urfave/cli/v2 v2.8.1 - github.com/whyrusleeping/cbor-gen v0.0.0-20220323183124-98fa8256a799 + github.com/whyrusleeping/cbor-gen v0.0.0-20220514204315-f29c37e9c44c golang.org/x/tools v0.1.12 ) @@ -58,6 +58,8 @@ require ( github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 // indirect github.com/filecoin-project/go-amt-ipld/v4 v4.0.0 // indirect github.com/filecoin-project/go-cbor-util v0.0.1 // indirect + github.com/filecoin-project/go-commp-utils v0.1.3 // indirect + github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837 // indirect github.com/filecoin-project/go-fil-commcid v0.1.0 // indirect github.com/filecoin-project/go-hamt-ipld v0.1.5 // indirect github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 // indirect @@ -135,7 +137,7 @@ require ( github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect github.com/libp2p/go-libp2p-core v0.20.0 // indirect github.com/libp2p/go-libp2p-kad-dht v0.18.0 // indirect - github.com/libp2p/go-libp2p-kbucket v0.4.7 // indirect + github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect github.com/libp2p/go-libp2p-record v0.2.0 // indirect github.com/libp2p/go-msgio v0.2.0 // indirect github.com/libp2p/go-netroute v0.2.0 // indirect diff --git a/venus-devtool/go.sum b/venus-devtool/go.sum index 2dfe6055ca..0361c1e104 100644 --- a/venus-devtool/go.sum +++ b/venus-devtool/go.sum @@ -372,6 +372,8 @@ github.com/filecoin-project/go-cbor-util v0.0.1 h1:E1LYZYTtjfAQwCReho0VXvbu8t3CY github.com/filecoin-project/go-cbor-util v0.0.1/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= github.com/filecoin-project/go-commp-utils v0.1.3 h1:rTxbkNXZU7FLgdkBk8RsQIEOuPONHykEoX3xGk41Fkw= github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9ANQrY3fDFoXdqyX04J+dWpK30= +github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837 h1:4cITW0pwgvqLs86Q9bWQa34+jBfR1V687bDkmv2DgnA= +github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837/go.mod h1:e2YBjSblNVoBckkbv3PPqsq71q98oFkFqL7s1etViGo= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= @@ -387,7 +389,6 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.23.1/go.mod h1:V+1vFO34RZmpdECdikKGiyWhSNJK81Q89Kn0egA9iAk= github.com/filecoin-project/go-fil-markets v1.24.0 h1:SgZ9JU3vp7YubyTitEQK8hwEMm1l2Pko01jejviOKMA= github.com/filecoin-project/go-fil-markets v1.24.0/go.mod h1:ZOPAjEUia7H60F7p0kEupi0FR7Hy4Zfz90BpR1TMBwI= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= @@ -413,8 +414,9 @@ github.com/filecoin-project/go-state-types v0.1.4/go.mod h1:xCA/WfKlC2zcn3fUmDv4 github.com/filecoin-project/go-state-types v0.1.5/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.1.6/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.1.8/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= -github.com/filecoin-project/go-state-types v0.1.10 h1:YrrJWWh2fU4VPhwHyPlDK5I4mB7bqgnRd3HCm9IOwIU= github.com/filecoin-project/go-state-types v0.1.10/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= +github.com/filecoin-project/go-state-types v0.1.12-beta h1:QZE00g75shqwhPn0/bZL38sFxVAqnXC7zjmYltRdhxI= +github.com/filecoin-project/go-state-types v0.1.12-beta/go.mod h1:n/kujdC9JphvYTrmaD1+vJpvDPy/DwzckoMzP0nBKWI= github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= github.com/filecoin-project/go-statemachine v1.0.2-0.20220322104818-27f8fbb86dfd/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54= github.com/filecoin-project/go-statemachine v1.0.2 h1:421SSWBk8GIoCoWYYTE/d+qCWccgmRH0uXotXRDjUbc= @@ -425,8 +427,8 @@ github.com/filecoin-project/go-statestore v0.2.0/go.mod h1:8sjBYbS35HwPzct7iT4lI github.com/filecoin-project/go-storedcounter v0.1.0/go.mod h1:4ceukaXi4vFURIoxYMfKzaRF5Xv/Pinh2oTnoxpv+z8= github.com/filecoin-project/index-provider v0.8.1 h1:ggoBWvMSWR91HZQCWfv8SZjoTGNyJBwNMLuN9bJZrbU= github.com/filecoin-project/index-provider v0.8.1/go.mod h1:c/Ym5HtWPp9NQgNc9dgSBMpSNsZ/DE9FEi9qVubl5RM= -github.com/filecoin-project/lotus v1.17.0-rc3 h1:bcO573XtvjXvH0O37xbtwgVncgoVMmg4Px5dE+s2WBM= -github.com/filecoin-project/lotus v1.17.0-rc3/go.mod h1:hZ5L7E4uKWwp8E/8Bw3pBaai4wV7Utq/ZSbl9hIoFnU= +github.com/filecoin-project/lotus v1.17.2-0.20220920163159-fd0fec07d8fc h1:GmnYJOdjmuWZv9wIfwntkit/fI84sUt9lTSnDRwRfXo= +github.com/filecoin-project/lotus v1.17.2-0.20220920163159-fd0fec07d8fc/go.mod h1:DMSDCLtqobi1a8tLSSyNksvaHcEUDQkUaPLDZiQYVoI= github.com/filecoin-project/pubsub v1.0.0 h1:ZTmT27U07e54qV1mMiQo4HDr0buo8I1LDHBYLXlsNXM= github.com/filecoin-project/pubsub v1.0.0/go.mod h1:GkpB33CcUtUNrLPhJgfdy4FDx4OMNR9k+46DHx/Lqrg= github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= @@ -1216,7 +1218,6 @@ github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4c github.com/libp2p/go-libp2p v0.19.4/go.mod h1:MIt8y481VDhUe4ErWi1a4bvt/CjjFfOq6kZTothWIXY= github.com/libp2p/go-libp2p v0.20.0/go.mod h1:g0C5Fu+aXXbCXkusCzLycuBowEih3ElmDqtbo61Em7k= github.com/libp2p/go-libp2p v0.20.1/go.mod h1:XgJHsOhEBVBXp/2Sj9bm/yEyD94uunAaP6oaegdcKks= -github.com/libp2p/go-libp2p v0.20.3/go.mod h1:I+vndVanE/p/SjFbnA+BEmmfAUEpWxrdXZeyQ1Dus5c= github.com/libp2p/go-libp2p v0.21.0/go.mod h1:zvcA6/C4mr5/XQarRICh+L1SN9dAHHlSWDq4x5VYxg4= github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= @@ -1321,8 +1322,9 @@ github.com/libp2p/go-libp2p-kad-dht v0.18.0 h1:akqO3gPMwixR7qFSFq70ezRun97g5hrA/ github.com/libp2p/go-libp2p-kad-dht v0.18.0/go.mod h1:Gb92MYIPm3K2pJLGn8wl0m8wiKDvHrYpg+rOd0GzzPA= github.com/libp2p/go-libp2p-kbucket v0.2.1/go.mod h1:/Rtu8tqbJ4WQ2KTCOMJhggMukOLNLNPY1EtEWWLxUvc= github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio= -github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70= github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= +github.com/libp2p/go-libp2p-kbucket v0.5.0 h1:g/7tVm8ACHDxH29BGrpsQlnNeu+6OF1A9bno/4/U1oA= +github.com/libp2p/go-libp2p-kbucket v0.5.0/go.mod h1:zGzGCpQd78b5BNTDGHNDLaTt9aDK/A02xeZp9QeFC4U= github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg= github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= @@ -1367,7 +1369,6 @@ github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDH github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= github.com/libp2p/go-libp2p-peerstore v0.7.0/go.mod h1:cdUWTHro83vpg6unCpGUr8qJoX3e93Vy8o97u5ppIM0= github.com/libp2p/go-libp2p-peerstore v0.7.1/go.mod h1:cdUWTHro83vpg6unCpGUr8qJoX3e93Vy8o97u5ppIM0= -github.com/libp2p/go-libp2p-peerstore v0.8.0 h1:bzTG693TA1Ju/zKmUCQzDLSqiJnyRFVwPpuloZ/OZtI= github.com/libp2p/go-libp2p-peerstore v0.8.0/go.mod h1:9geHWmNA3YDlQBjL/uPEJD6vpDK12aDNlUNHJ6kio/s= github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= @@ -1375,7 +1376,6 @@ github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEX github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= github.com/libp2p/go-libp2p-pubsub v0.6.0/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= github.com/libp2p/go-libp2p-pubsub v0.7.0/go.mod h1:EuyBJFtF8qF67IEA98biwK8Xnw5MNJpJ/Z+8iWCMFwc= -github.com/libp2p/go-libp2p-pubsub v0.7.1/go.mod h1:EuyBJFtF8qF67IEA98biwK8Xnw5MNJpJ/Z+8iWCMFwc= github.com/libp2p/go-libp2p-pubsub v0.8.0 h1:KygfDpaa9AeUPGCVcpVenpXNFauDn+5kBYu3EjcL3Tg= github.com/libp2p/go-libp2p-pubsub v0.8.0/go.mod h1:e4kT+DYjzPUYGZeWk4I+oxCSYTXizzXii5LDRRhjKSw= github.com/libp2p/go-libp2p-pubsub-router v0.5.0/go.mod h1:TRJKskSem3C0aSb3CmRgPwq6IleVFzds6hS09fmZbGM= @@ -1422,7 +1422,6 @@ github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= -github.com/libp2p/go-libp2p-swarm v0.11.0/go.mod h1:sumjVYrC84gPSZOFKL8hNcnN6HZvJSwJ8ymaXeko4Lk= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -2158,8 +2157,9 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2/go.mod h1:f github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20210303213153-67a261a1d291/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20220302191723-37c43cae8e14/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= -github.com/whyrusleeping/cbor-gen v0.0.0-20220323183124-98fa8256a799 h1:DOOT2B85S0tHoLGTzV+FakaSSihgRCVwZkjqKQP5L/w= github.com/whyrusleeping/cbor-gen v0.0.0-20220323183124-98fa8256a799/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20220514204315-f29c37e9c44c h1:6VPKXBDRt7mDUyiHx9X8ROnPYFDf3L7OfEuKCI5dZDI= +github.com/whyrusleeping/cbor-gen v0.0.0-20220514204315-f29c37e9c44c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-ctrlnet v0.0.0-20180313164037-f564fbbdaa95/go.mod h1:SJqKCCPXRfBFCwXjfNT/skfsceF7+MBFLI2OrvuRA7g= @@ -2372,7 +2372,6 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20210615023648-acb5c1269671/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= golang.org/x/exp v0.0.0-20210714144626-1041f73d31d8/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= -golang.org/x/exp v0.0.0-20210715201039-d37aa40e8013/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= diff --git a/venus-devtool/inline-gen/inlinegen-data.json b/venus-devtool/inline-gen/inlinegen-data.json index d2823090eb..a55b82c483 100644 --- a/venus-devtool/inline-gen/inlinegen-data.json +++ b/venus-devtool/inline-gen/inlinegen-data.json @@ -1,7 +1,7 @@ { - "actorVersions": [0, 2, 3, 4, 5, 6, 7, 8], - "latestActorsVersion": 8, + "actorVersions": [0, 2, 3, 4, 5, 6, 7, 8, 9], + "latestActorsVersion": 9, - "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - "latestNetworkVersion": 16 + "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], + "latestNetworkVersion": 17 } \ No newline at end of file diff --git a/venus-shared/actors/actor_cids.go b/venus-shared/actors/actor_cids.go index 878e813e84..1f5d6ed776 100644 --- a/venus-shared/actors/actor_cids.go +++ b/venus-shared/actors/actor_cids.go @@ -1,5 +1,3 @@ -// FETCHED FROM LOTUS: actor_cids.go - package actors import ( @@ -7,6 +5,7 @@ import ( "github.com/ipfs/go-cid" + actorstypes "github.com/filecoin-project/go-state-types/actors" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" @@ -17,10 +16,10 @@ import ( ) // GetActorCodeID looks up a builtin actor's code CID by actor version and canonical actor name. -func GetActorCodeID(av Version, name string) (cid.Cid, bool) { +func GetActorCodeID(av actorstypes.Version, name string) (cid.Cid, bool) { // Actors V8 and above - if av >= Version8 { + if av >= actorstypes.Version8 { if cids, ok := GetActorCodeIDsFromManifest(av); ok { c, ok := cids[name] return c, ok @@ -33,275 +32,275 @@ func GetActorCodeID(av Version, name string) (cid.Cid, bool) { case AccountKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.AccountActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.AccountActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.AccountActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.AccountActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.AccountActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.AccountActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.AccountActorCodeID, true } case CronKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.CronActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.CronActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.CronActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.CronActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.CronActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.CronActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.CronActorCodeID, true } case InitKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.InitActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.InitActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.InitActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.InitActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.InitActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.InitActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.InitActorCodeID, true } case MarketKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.StorageMarketActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.StorageMarketActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.StorageMarketActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.StorageMarketActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.StorageMarketActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.StorageMarketActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.StorageMarketActorCodeID, true } case MinerKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.StorageMinerActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.StorageMinerActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.StorageMinerActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.StorageMinerActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.StorageMinerActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.StorageMinerActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.StorageMinerActorCodeID, true } case MultisigKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.MultisigActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.MultisigActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.MultisigActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.MultisigActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.MultisigActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.MultisigActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.MultisigActorCodeID, true } case PaychKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.PaymentChannelActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.PaymentChannelActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.PaymentChannelActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.PaymentChannelActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.PaymentChannelActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.PaymentChannelActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.PaymentChannelActorCodeID, true } case PowerKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.StoragePowerActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.StoragePowerActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.StoragePowerActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.StoragePowerActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.StoragePowerActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.StoragePowerActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.StoragePowerActorCodeID, true } case RewardKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.RewardActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.RewardActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.RewardActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.RewardActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.RewardActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.RewardActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.RewardActorCodeID, true } case SystemKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.SystemActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.SystemActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.SystemActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.SystemActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.SystemActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.SystemActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.SystemActorCodeID, true } case VerifregKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.VerifiedRegistryActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.VerifiedRegistryActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.VerifiedRegistryActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.VerifiedRegistryActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.VerifiedRegistryActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.VerifiedRegistryActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.VerifiedRegistryActorCodeID, true } } @@ -310,7 +309,7 @@ func GetActorCodeID(av Version, name string) (cid.Cid, bool) { } // GetActorCodeIDs looks up all builtin actor's code CIDs by actor version. -func GetActorCodeIDs(av Version) (map[string]cid.Cid, error) { +func GetActorCodeIDs(av actorstypes.Version) (map[string]cid.Cid, error) { cids, ok := GetActorCodeIDsFromManifest(av) if ok { return cids, nil diff --git a/venus-shared/actors/builtin-actors-code/v9.tar.zst b/venus-shared/actors/builtin-actors-code/v9.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..db85bc587b91581ddfe9d8a54400970f036b744a GIT binary patch literal 875093 zcmV(nK=QvRwJ-eyXk0P^>esnsQV<|4Pde3|4)KK8K9}fTJy*I#r;Q1T742?l*kW>P zi&PuYMglfC#TL;*`0x(^g!k1yOMigb!krzd%T{5R#Hzi*;RMl>J|bijviIIHrIZ4& z1_B291wCi;vNZbs)=wyUd-YGIqieLVnzOdieo9o*g`QfmhKc1>ot{i@MdelP{)G*4 zRZF(zH)5~R&PLR?Z=T(`YvsDP>^pDz_{n6wdraBmv9@gXb)o7;SGR}cw>NY{>l50tb8Yfv#?@i8+qOquwya|pYKy~h zID64kFQPWILE*{7W0$QWsOs)7Zdp4&G`Jh^=DS(luE;0IIHVJ|9|?zSf;@seL+(J5 zA;rixWEshZBqOzuT99T)AV?@=kc>jMK)OIaA*+xtkXA@4BbTwu_{11zbYg@vhK*ZB zE#sLH%;;szVccQ#8g&?t7{SO0jAcf#(ahMx=td+HjSz_t+lV`eVj>uEjCe+jfJjE1 z5>_DG62rnPBARdp(u+`rFa~jqPJo)xBPbHIjH;nP&@lP}#X@DEHBc^^h0Z{$&@1AX zr-G*WD#Rk*ikIRi@Lc=_NH%f{|H9iy8{X=jcpP`a;rN+1;bwk>C*f`!36H|jTnQ?L zx%{om{V~r|2Yi)#EtMM;SfH>U!ZH=0^M>Nyaso{ zuN=#rbem^+kotTG2lkp)(?Rsu$fm)>FiWC(N1TilNzzdoO1IF#ev$$Mh$uCnr?l1z zKu{PWBuIB@9i*rhCQ2IESWgRJLUMu%O(pykZDs&un~nZ~$N~Wb2@Odg_CSV-;a+?j z{fS~|T4Pc6<$f|Z|D`2LLVzeyS~3CzNZC)sX$go@loAmjK%#&|4RK!r4 zeN*qUBXC+eb-&SD_gR)>iR-Y$G463pbz{HT-Vby?@cgDXj=OZT!w`3C_FdncZ@1mf z{YGii2kZ@Z+wCB@aalSJSAGM4`MJFDmyYX@ho5mcrlmhn>U2#@4`<8>OYWW1r_ukV z^YAdsc%Cr>SC+T;k~WuRS?<1c|8Mv5of!bQ+YA5zJ@7N*aks`bKi_bGGv5GB19=fBIOPwYH0~cnX1sV zw1kq(%^s+@|7>S>i2QdQ9)R8`+Ws+y~+JO~9&Lo;(DS)#-h3m7k` z+PHu*0*L}#k%a>|?hZglNl5APL?~rQjvQ_P0i^*#u%LnksHi1JiY!49SvsP^5hcDS zc)cfnLA0q+a)MLY3=YUBK>&4g06v{6O@2bb|Hlr0u(v2gb5NOz8^27=z`02u z7BpcK5LVbQQKp0FhL)x!CnqH%L!z9Pkg%Yn#L2g|fD7gn;X_IaK}0P`AOj#JxRp2^ z^tuq~d5|UyHaHUeRv@#)1f_(;=UZ@*Bjj{pfx-wUVBw$))B$bilC2y57&0tO^_fW`@GX@w+8mWn7X zY4X*9AUH1(oe2C-FD7WzM3K7Ui7HzhVG*W+BFYGf z4cySa1hi97MeUWo7mWCH_~m|}p9=k|a<|Hz2W*B}`aQQetbNl%kd}VIs>JTu@YG0TCD7zyJdx3~pG! z7u+B!x^Y3#1r`uxU}V9K8%0D6r8GnUQAaysNuq`**>E}%)pUf3 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 G2Zr`{AE#ntiAE6AZw#89Rz2 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

Rg}awjWhK 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

jXG)zXHglhnkItSaihV9f@YAL5=5 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

?xzKt{{+^y~ zt1t*_uE?_B5i52Db%TeLBN`p5hL;rrni0Ayj0c!;%=r%p+$N;2J7FWXiF5+6Ja7Z>E{AV^jglVKjp(W-F??iZz>#9>I1X#xyl^f z@6V~}D960czvmvzs;}17~!EHaH4s2QsfuODm~E-x??8jz4k8eAHL6gt!zBn3Dd z5*$1n%pCL_JwaD=9#}^o03cu>ydXaz&>@f`UIJWQ2V-WaBw}xGZ001@R3+pkVgV;4 zp*$!eX%%-KfEa-pgc^zsixL6)Jjhzxiv^qBR6V!kSDwt_%k_H4to=+I|rge{U;#*r^`MaE>K#t zVxD>QV-ry<+6HCvo?V#IM#GCZjQj@MA8P^=1I40=01MpcGO5GtLL3KvU*0vv3X=n+ zPzmEnicY@Y^PEDr5VtVc?0UzqratCC1*X5_cX?B|t#0{056TcpvIG`X@}v>>a3`70 z&H`a`G!7aeCo3NzxV>#*cyj=}HPITz$H+DiFd;k`JsdtpX?V~P>>?Q;H)C^iZfI|G zryBsw4QY36X=FGMaBpykIGCBWD)2CLIS|1)5imMbDTq2-DFDzA;5zaFWnpsB0@5D| zb09i%0Jl5O40Ud90PGfIwmf5O&?a+bb8bCQZ&Q>jaBMz#kSHK~ePng_J{&&~P(N)T z^FI_o3Uf3-P-+j2AYX58EdaPc(Lez77aT!^c&I~KyDRPg8KYJZ3>*@M(kRPuBq74^ z2V=oF93>1H<1-iqLJT2@2#66Ffgyw_LI@#-%+%D?7>|uXy~Yc>ACaT5H^_UcBALJlWv@0&vB zC(G>U3~(r!Enf;5;n#B~+3-%w1Gae$2Q7m*Wdnqs&4nG&W>h}<#iT88Pw&f0_&bHE zlWQCU{lk)@LGG@>mgRbOe!C_Pl+$KTlNF|;fL9%+C#?v;puVdg>zO@JQn-20rNvvB zyEG~`Pf`=L)We$XPxC{Uhrjm5Fw^5#vZaY%2ySt6gK(a6`-$<%>*Vbj2%Xz~;(9(U zM94XBj&UdWe|GcHVS}B!-Zx})8#;@VugFz$_>u4mGK^z5b`XP)1t8d;X`}7=k&3ve zVaZ~e*rNesewmVg>`iFh4IU^H?_64E?1>ys7@MO~1qu3F;5Ye!hpznppn20z0rYi4 z8#FDo&TJqSzL^#omT0O>%q$sOejdyvWw31g9}6>?agQyPjvGc%bn3HM!FQ+#970an0aGOR z9)MIgtJ!T?k8&b;gx_bH0qQ0Y#rH<3WOF8Wc^caSI6NRjeYfUdYj47K*G}R7%=Vzg z!2QQiz`{Jnd5x1$PcPlmbsm&Ck<~Si4veDquydi_iA#iBk@YcD&!m@eN&qw|v*BWo z%$eWieci4kD=z8qQ`5Lok9U!CAC3Jj7!IWJ$3G5{VJM8BY8%0P@@NvcwO>thKvg>` zWS#xlx{W&YyEb^p0Eh*`c<{l6;9co%5E=%bm$ry^`5ibo8cskP_&3|E8)x5x;q@=J z#s-YU-ZQ35S56QxqGtTg%+rS2r^@_Ok7}c@V)X2CK!__L;_~z!q33!u^I&m`wS;c2 zr;3)vAebOEFjWnJ56p5FA$8YbKn3zTJy#Q(^Q9!BX9Nkz*u)Xr$#Ee6=D77p6buIq z&*ur4LosD@y&k4(uE%)(P|)HGY}USu2#@Vu=9)0>&-sM^Ai?oy(|YQk=N_#dnsz!z zLwF$gPOB$1`U=)y4%o>J3D)IKspP#Jzb}8hkifwL%ZPUnDHwQM-qR9C<-yc+GR=4s+{$QZySs@ z(V&Yh@vi8xmxlX z947mBzbl5ssRnc>fzcX>ou8uv2leCXbh6iqDQ2Y7>4T9xLoZF?uu2!-_kZ5Z7#gcg z?ybJds{r$TWgdEDcBc+;tq}bq;aV-EHLv}hSv_QLq^3C$Z2tR@`pynYhN{xmMmLY@vaPC@(p>6|W zJ7A&kWLR^T)t8|`o|!otHI^nW@3L&8){3^153WUCqXI1OOSg1!Ko|dt_swrbAPjb% za+R_1kY?KG+4{qa!}jw~h9GnY*`M)`gFf>#gQ;ySrMy4S?z3W=IZs{N0S`!%by4fO z>4he76Og#^ZS*dU)>AE2_7$kl*Cg&-{JWiI)rQZ;vRQ-8k zFU3Y4&Cjt^BaekqXIha(8hZenXo>kWyQ)B?wFOBcn z9C}wnJbg7`D0tCMOP7}x)I&c3pDd)6>Kybw9FEkHP*v$l$ zyQV|ZXElWlx;ROB{JH)C8Hmb>s?pV=LH6f(51I#f$H**5T8DVmvU}F0q0f0{#n#Rs zB@*Ij=mUpdiygU32@@3HFV8&wbTN%r{;xw!31N9=M!QbeT)1cU7{(8x`^P-xXCU*4 z++0g}5{kC)$duPo?U~NA+i`n{j6n}9(38!2>Djx1VW_~;3)?*xGlvO|=t$ryU{S@l zzFsrLfOQu?U=g{!JXPE*G&gYD zu9RnyOxSZjBlmZ9g4bn0cZ5j1zpo9e)~R8_{dJCq`3J#iPbD`x;5#8Xt*wXfBv{c)!?vtw=~sgPmXOdrF?tnI>p`r2Ww!{P&? zpejqfhMSND+Ef$P10Ch>-cbE-eWPK*w@^qxE% zMhzGAsiLW*RIiC5Mb@QWGodKM{4B{V#gG?XK9{KHX-%A~I3 zNuKqlrT`{MvF_nGX%`tWV8d^yQtzlZ>XAT@Vn{8rMnw9Mu53l(z*?-zp6IqrXhc}y zwMvdj%*_LZBSL9kmt)#FR!&UniOV!|wW0qT-tbF5rW3+6fjOk)Us zc6b~d7s5F1<`#0>%miuhiMCT8-PL+1HssWo-9K8M5=%OTOsYbf^-DXcP6erxROyC- z@TE1t9x(Qio1N{ikAsZf3K-h1mDE4#`g+v!E!cqc*2h{2L5{j6Du!wbLtf9*C(dL> zu|!p7p7^T0H=Jof-=Mr(zHOTM%Fp|rV;>Z(({3ovfSC^x(=l;{&tnqU@bT(Nnmr$X zd~!y5!mtw;$Wv^Gg4TTYoM7OkI(IH{j@?vW!%kh#5n0bwX|^V8ed5pgiyV#40U>T% z9uCJ27!K!<27nNP@PY82_sY$ghHZ9UQoPE1RuM0MqpNI7msS^+E(SrrFW!UrKjo$M zM_->K{UH3{^ueh67@9llzc8lFi3g-?ANe7&UXy{n!X8TjJA~Es>631Vtp?YZ%!S3J zlxum(<-phZEpzn_J34@U{Jo-o+`LV6sBMYK>3dGGrQLddoFW0?7KHxsdcF>^)wse} zA0!;0_m2wQIP7Rq;Uz6CCM`FXX_@J39=4uYcf45Z1O-NVRYw(!t|rx{NMW?6Ua3%2 zob0orCYyE4O3I?;+lL#dBf9Z$8v7!H_S=#53@o!{1ytzVG&0uXpDhK zq(nv}O_C0d^MOSPQFB-;dX4KCe6#hQftt*e&IEKUk)Fep4C`T~MxsoMug89toy0Od zxpeNtdjdrG^_r&F&S!Dy2S{w+Js6v+F~9uqHUT`Y;RgjXdJPd(U&f=UrFKs|Q6R6W zg8hhcnfD5^q;0$iE=2=NhE#2+`nRk{d^*+Qehk5=*wdh@#aJz(W}$`k@KKvRt?`4u zPndjL49!(5RxEFVFnfZD>sfGneNBQqdXN3~|HQF(^d;#z+OD=hRtHum44x%}*#Zz| zlpMff@Jz~={9Su`=!Wg$H01d$kZ|*(oMe1xIQ}7QFmLXDzGvTn z*xiOug_c6)&1fZZHBR;_pgORYwEfS$iT}H}IHSMEvS|=?Y+B=R@h+~1#S%IcuW;xx zM0-c`%d)oMsj=(bb&=9AE|6~s*QwzAJ)HZ!=koSyKA)ax_d_O{^RLdo+?Ck4<#4{=FhDnEhCGHPWB>FA` z2g@XY&Fl*rCn#I1HHQAARKWZmiLXkIA}4WX!Cr>7&$WvCj}kUwJjgwKfO-$vZ`RM_ zmX-U#2fz8m#9KCfig(R_ObU=#R{o9<607pX50-66Up@M*!xIP@{@G)F64}2d``=U> zI~cKB*c}LJx#`wBbd7af@Isr`$oR_j8dT>Kl>kvduD^#V^L3MSjKTHBZ#E^+b6$rn z@K_>SJvUv-5xr*yc#8JnmXUHQ8;=LkWgfIp)oS@s84)QAa7eE}FaS7*bAUtdyQcj= z#-yL-lcKQms0&oSrv{|AbR)@JuG3d7skGBh6=7t z(YfMW6QZu1J~Sy6IeoeWzc9?Pg#_J{`P?6&;fXQf!Ho9#mV+&98~mm`hyExrZx*IL z=bye^-sR6g8M+bOxdb(Qqc&HJ_k!lzGo?&<;k`rR&x^6if98+TJUhGtIrLtaO~t!F z`lo+n2gj@v2<|ctntjx!Y-Zq(+#cfkQ9+Z-3r6|Y5u(V+04}&AoAK&mOecFyXg~5g zWnM0&V&7q~*;>sZz}wA+|3+Ighmvdzw)iauo(h=|Jb19W!=hKtC^}=Y+L4{X#Jo^> z%YWmFj1L;$oA(lpf2F)Z(OEuA)f3&k5m~d3og=hXc6i90x_X|t`S>`0cUFTW@o#s+ zN~}cN!vRAx)tR zo&~J>flMQx4!Rd}D|x+aly2poo9WW^qskx3Z5SM+rqL-s_3^NGO=VVdj)X0- z0>J6j@fAv|A&1X}s65)XcU%meS84%e#9Y@@b?z$YWj>Vt{#A}^3>-PBl z8grA9Ixl}^I+ldrOwY>8*`9xdcmVk`c!BfDKq*+z#($2-~%c+LhtFQQb6+1zCsa-{)9(>bly4yB(EpH=nCq+0`DX3R2(Q@YaY9Q@h+Z-4b; z=$)D}WS88Wn}Q*L=yq>O>CKDwK;D+_4u86$y3i8p6@+A~r`qP&!)?Mj-GwWOmmQd? z6>$W`OQ5n@GuGYU9SQ9nuYRBq9JA@-G!0Inu%()o5%!`_!NLI?cx)*AgjvLnY3Tpt z)1Ygx$A6*0;1NS6nX4NVDdH?eNy-SnRW}58NuQN62K-9NA#^xC0@@rp*#=9NsbO+e2aWiLK(%-e5DjqFd(Z~0_AtSg z0iE3`?h%Nm(=v3^5O*j)^y9bK^4JtK;R|@j|4)H@vdly zqW_{k;oM-032HF(ZFcD!%5OLI14lNT{>f8--eAy129i_4wKAmlCKyl)O6)+%|Kyo- zay-C*w!MNO#{46)pLPkU^6^0btZ7Us7oM6&zR_#uWsj0}7-4;y4lJ%GRm5h5b5n4W zFMmgO^F;R-J*lDv6#zINdS(9@@>LPAMP|gcn(!fAeZsx-xvRQ9elm50lm5;}XDv=L zyVij4Nu9I!tjzXw7-uVcE5};6h~b_&+&tn@+xA9$OMiarc;)b(@&8I4q#uPO%Iz{2 zdane-f5$Nan&;MZSn=deXZei3U-%GhME_%SV!aDr^-n0s)9cX$Mjq^5l^#t-F}4-> zZwxckj;15pY@y*l(q$`mLtqVje)ge?*Eqv8+BE0PD@YfCw8}0$w2J5-)@v;IkhMn~ zOMC1V75j?&H!l#wGItzZk0sLlbj4t3&n{!dvl&AX_G|F}RKRQ~kU1*#LRRhloPHZH zY82ng8Vezd>p0$!4*sVbo8z47NmODg9Wh!#u1r237jtN-^(?ob%g*purtvQ+K!fy> zl6(G>Lqi_X+nnNA!6|VCoECbDreC!@EadLKx{XUKk)i9HxHzlfw#fWn(2LP zUOfR3OMkHV7)PoL1a{exZ~{Q*0fo1FfRP>@jmM5T0;h;JWDi2mfOvz$S+eTaqZf8@ zVo9T&@j>kc9$J5D9LYgx+M@m%YX;x}2r}kpQv~nF=kPE7)QQr}AEhgaUpOe)UC5=Z z>z#X+3ml+4wr+kZFVZha73Ew@BtGCj#qP(;G?#p@MU@&kn<&^D>i%u=&%pkQ`ssw9TdUDF7{kgfpantXVr@AS43- zMrPGQI|Sm4TpaZQI@A60!TFInhk8*FX}OTn;k1*!hD-&N)HFMlN#X!Al6Uu^KM%Xz z-u&sp$PSWvCQf64lj({R7(_J88;TBY4j2uZw-!JvV=M~%^}^}SA!u>H;8}b0kOY8U zDQhBSDyX70Dw~}>iI{PW?i4>=*LsWzPsXTqYSoB5$@MyjB7%{p35o9SmVdzB|JJbsj?aee)km#-C^OWosps{)tF_zoFgAWa!pTb?~U$ zQGZRCD%^C_CLC;fz+1Fg?Vq7Icgk1UiC#9tOB|IaT3HGhH|(S2Jg!ZFk(%jxcHIQA z^7}Ou^ z_V<0nKf?d$E(qoa+i=jIbh9H_4?F5h3~xWel0`Vs&T$j=_%OblaEWG?J{(NAny-_O zzs}5FI`Y9ZC0|W}x(R0aWSp1W;K9X5JPeA;duX|4YB82+dg!~C@OP|=aMlQ@P!#|3 z>X>Hk%ZIDHPB_magS|^OK>Zvicp}`J&)VClJ?S@`eVmB_ySNwSI$_SO->TUs-c+E+ z6$%T}=sOdQgBLRT<1tZHed9v3gxSSjWSNJPjf8i#Ow*Tbp(K&srx4agOa=nkic?uU z3sIeKB07xyX5UEqK_S;ZChwy;I?<}vg$bU+HsEZvF3Ryu+Pkfpzm69ieMn<}0vfJ& z<)T_FM?BthW#^xr_Sbl}v^_>jHjPZD`0odck3pkBxbMvAl0-)$UMkIV$cWxdu?b`B zDbyaiRoD<6S$|XoMlI7UBu6_2W<=4^Ro4cE8q$GOaDblb*90HqJ;<9p=7j=Na>_~) zl5SZ0Ba|F7wKR)?Ir}*n07!V?L*RK-LH@YA+VirK?oRj~`}SeA^hVo7Z!G{DqB^e4 z-_h#__@4N*b5bo>jC45?Jv+E#;4`u#*OVty$aQ7?e9Ipn%i1rSr{-VJ5pGtqQGKn? zG`GP$Q{ks3K_zssbnDP)C-Czy4n0KBocEi0x}<>PoeLr!o!T0O{r9lq^N6m=dvZ=b zP)HqX{*T3UO{{>M3>8j@AZ9W5>^E)k!SIBA-2DjsDKrE8jX*&{&oIXX^~IIj!v^S) zWDdjZe0FCc=2~-fVCZ@wsHCpr{2?D-VGp0G&_d|b#@GiaqWw#r`Zv}PG0+2m{@#QY zJd4363G+1}kqb&^GtczK*$MT@CCMHzds&ok?XuTy%%JE>To(DYu_^}1W3^r7@cA*7 zF^HRIzBgExPvLy+p9fi_vOHbPP|0zt(2!-VgX9zRDe-8(=~z zZc4d{UxqWz0^_uFD;q*^`1lOmv~P1L^S?y*1+;MQIq zC|t#@%iI(BuKf2Ph?BS-WP$Hv+)o0}TMu+zP6`{jd?bse^-j5_eZ6ghWx<~gn@sXT%wg`Y6+6KSDREZI%t|#jFMm~RZ0zR}k{P98P%AJ0?7`06s{PNBhIk|D_x0g8(7&Mar zI$4|*JRqpn0U=a$sdso$U_=Z%O@erZrlH-E6b^J$>$f1*RbDAC6#X{{gYE1#q5!WETN+?td^;k4}*;uWnnH- zBq&gyKsO<7XMpX~DFVw`)(H+AdgNiT!VeFYC=AaAdB&%KD?h>?x*Bxt0|!;2Hh1eJq7hKL>373HMu0djL@?_c?@$m{V+rIqNYUejtxpj=2`95Isi z#`W->em07h>t;#4?zlMPa2M@l>yW=9J`AdT)5gIf!OJ|szLD~(nW3wyPxfz)| zqS_XLnLX4-R4l3$wJK1*D8sxXFy`2Wzz`;^F-GHv5H8$#kGmW5 zxLd)VzrVY_yYK7v_{*-$|DQRJVb}K=cHOyu`N#0v<=Mj@j@=)_-<^GjJ3PN|%)R%o z9KY^=J?v-roo82`-S_ud<}mla`Axhpk5Bx!b1%*U1lbnsx4x3gvok8j zB;CX*lPFDM3j;=M?r?^rKVy0%MT*LO@e&8u<&Dc0Em_(^aG?iBK?;a3TH)7_jg@ zs0M0R0nDCBst-4yMz%EJ$!5q>WepGxB8(EsAf$4Xb<_wOSEY^06e)F4ph&TC*eR9` z4I4WtwY7u{ZV*YpEF&I7`$HAg1JZAInD1=ladQx~)2HibI(r^r-T$~{EE;+aAD10B zZ8!>P_aJii{5BWUTvu!IxZNV0H+63I20p7^8#epuaE+QBp|~Lw*ba<4Dlcy@NU#%t zQ8yIUMo?fsnN{(W+s*JU4Vp7}MRy+n!?UY1^S1%1JcJCLAo#B3GukFcV#?1i+}{;O z*vl|H%bj-~$NodOFc`gT>c;KbIfB|j%EJBbNs!``Rux~%s>3f{PkY$^Bl{v`(Y+1B{MS21d138 z9oJl#=N`+we;0N+|9*~NA9E|Wzwyi8F310k-Pg5pXV2w_9H`@{V^fkON&5z~mkLAb_RVK@N|COoZyWr6-ZRP7NFxqy;o zgdF!>+oE%2RP18v9q>=$_XAbax1m0UYt?VX2UEXf{Y*brb@g37FwM``MgKf8$#3W- zto1{Mn=t1z`6}I$jxqno+a@}@U$ORDc7D9}HLb~Os`9IGYSAo$d{JrDaoW@`H~hcX z%lwpeQ=Y`l4=u1)A;fN*7*$#T@Wa};#>bC~EU)*&1tv>(qxRk1D?4WBAm)a8vKdSI zvp8XKzYOr;zGI#9bM9TaS60|qVN8qn$CrP>|4cUhfk#F5%sIc~jw{#xY7utVL{vN` z-5O5p??7gwx)c=kw9~~I8pgi*ZP{W!c1~v0yXm)_o1Gi!_wKlIcT<9ffP1HwJIFpE7z6;CRP~J;{EZ~Mvrcv4LJSq@F61vROJDCy~jyn(R@Vvn%#!cQUSymI9s20 zpA(3qfibXaNlskM%%W!sttvW19BjJeU^8TLhxAHj_Y9vJ<^2oz65S zXH3mzX3-{M5{Nv0SS3*eM|h~b19J>u83%{INr9^O9{&X$^jdVP8gsR_$fU0O;RA=D zYov5KrnDhp`f-TR$6Py;4K3w88(m&~JLbc0G~NnKt8;e;{;CQMG8Pks8VoGXPZJFM>S0CkD(0bFf`;VM1Oj1)t1FeqoX|qYY;=GgvNWe3+L7 zFxSFmvXZFDVX7r^b|<(m@eAP1E! zJ`R@&+(Ubtwik9kX`NKewOK@l7HxEf;yRo)dD-Y@mi9Lzcf9XQ5gM1aiNirwPchgx z<0*}j89c;j#f4bgC0YnPluK)~q0bo_weBpmjL*WS8(dfh<)k=5j0o}k z2L447IshcUg~{jojzdvyI7$U??%AB%A>QM@bYF`Fgij9zl!J3YNY@!xJ9MLMt{VX{ zE2z)e{bs4@-cSRAc4SQXwkUvzSOFz)Y^hK#3S+(W)D>c4Pw&9-xYYLX}R5BhF9BW`3io@8Jh_Ks2i8CPhw*iT;D(4Kq zti&PYk>$JW@2%w!{j&r6`7Ry0c*6x9>U0+7n**HdvBhvd^}#53q&I&em2=z706 z1WE<{V}zoj3!|hk>x+}}bma|V9_n?O*BBa)*x>_Cg}~^kP!w+Akj*+}@u*zkQ0|1t zJzcM^Pp2*E0QtsidJpP;u&(|ve1mY~dq)$} z5BY)X57K*3_XAfSpueQvm;1r17tnt|cY;fRzL{3ue$dolt++R!ic2V}1a8vbwXKXD zJ>UVtTX`TdCauemg3K$kbWe@7w=?c?SBA)f<|ktsxK5?(9$r zwEJGq&bDvI3C7B&8HA>@Xl^C3K2S_W7A zC7mu#KhnO{vQ+y{x6;%h%`VhzI|@_O)*ExeWRvh!i}RX+kLzsc|98G2qo>C)9|8T% z?}I1iZ`;raU7Zf)`ZDfFof~}HhE9KK%+4rmN$fySj?ow(ZTQ0zycgeZGIn6cFdDfv zgFI56Qy;1)FT<0GngO|Kxf<+Gn z=9K%8voOyC^y~Q`d^<tl2v zahzSTA#uxoRB2ETeg-B;v1z5}DBUUZY(T~4wQ#&_%Fehcc9I2W4XT`*$24)`)hVL< ziVeXbssmI1@cOEDOnDNP-%*i43b9!2al^q+>tO51!bV>R6o>hTKC<}Nl2Xmcfg8P~ zEauwK!}5F0f9nJ$wNmT6XP$tzBvTCyiG|K`c!Idc31 zOX?y@8Iz6t=W}>zT7QJ{GA5h#4(s_kMI{cq)hdw_7kGf4L zlm8P;&ORtxiQZlxe+l*g`LBbF`?VoNh{mLB?=!qFh_B?Xcm_&8Fi5$=()Yo?)^Fw3 z2Dv*@^Y#sW(VH9Nf+Csdg<;sRN_Kpc6%&GoTGD6a&>$9=P1P6jDfZWlXY7V1E(k@P zV_N{!S2|Iev+!dXJ5XjMzl^}tiVN>*P==yhd{S?lA3$7i=BQiTd-;C2J0iMgog$@h zG_^`Y**ae3Be5buFn`27!))`ZfsqMGj^e zzk}k`9qnFVaANCWb0lVCC@RW8O z`gyQCSa&%R8WseiOk*tY1Arq@+!+`s-MiJZHF<7e26_0tj!nd{k6#eqT};j(!`{to zuM*E6ZsoS^#zLTJ%&wRpbR#SHfGgjHp%*Xd%$f-IA7y$vt~%XfR;-fRV9d~_7&?HU zk*XJ8)|0u@%4GUdu=no!*%AXqKAUN+-Sf-L4*{=Pa%yvX|3vrE(J8jbKB%Ax7VILH z|Bpo2Tx-Vk0;xI0yz$IAR>h}ToT$Igm3;RM7PN0%D7YTXZjfqwL}0TDfVCK6L6bry zj(?CgpNhygCLKSdMRVUY+)`P7LjPx-9@9=dX&Llv{55X=en0U1+?ZPJg6E*e5_j?Q znsY~9`=a6D&scMR-rztcpHTMon)VS{V+iOF@Hp_@WzlMx3DoUrbwV76V$y;qRPU26 zRPrW%+#=A0Pc};glV}6Y2^$M-fn8fC1V|CkOlU7~LMjKn-bJSI`h^?OJ7A7Dwbry3 zCLD$#+Oom`K{y^>QstS3X?^)OFJFH3J&7V#T%vnJ0A7ND@l)i+a{K@i=xukLOcb19 z{9q7=0o`fL1Hfk>>v1LoE6ZhzeXB+IMR&3fOBM3#kxKFU0W~e0&YPiP$^Ya;mx!7VzW; z-ztH@;)2}FF$DG-|N0DELbMHaDyC2ImIfhnQ!YpHtJ5(yBczElZ#ZbiZ*fG>Db zRr#WfYG*o#_v*C5yvl$W9~ngTkqtPr>1+~#i5*qbtFpJCnar(dHo6|zBsUPr?k(nb zG0G&Pl#seL&Z#pT*58%yLCKPMI!8$30)y)%Im5QSfQe`&)iNGuo9q4x^#zT60ZWG) zEc@ZnnZuXlkER~ql(V>p7~qv>z(f#j3Osa=oGVDOEiqNz#@{2J`{V0p9`n&*0v<09=MBLyXBWDY(&?PXRD7=1g-Y^53&gy@v6= z`;(uk(P+dT`+O4n?>V2CpEynNiFrriUxX;U*7|%o&ouWO0DtKyQ1BwpX~!qWM4XAK znyNi@RW-MrXU@71IS%sNiNO4S_QZS=bMHO#pM8ou9&*p~|7pf&$690VIWKY*yV4c_ zXrRbSG%7?8EkOV^$VLd*CCM~M*-o5leRrq_Xbsu{2S2<&sQ5hKZ~)`;(5{_*)$s6l zkm2i)?lpgWsQEdxO>iKBYLLN<8&tRU+h7BV0ct@7=v|tU@{Iw7;i85FPzulq`m}y} zSmDzkgGT#jfci18eHWNMjTZ`_F3<$f76^R(7A9x|(r2ebgUM&%JOHIZS)c{f{24P> z)&N|5gM=_sA2p)?-b)KK)4j-sWs6iub4{I_A!r3RP!L!?kxDU}FY#iD5}*UcZn zb;F!5q=@yc_^@B)0>*l+UYM)M^h$<3L*y!#0*IxRoM4j1h6Kz4W@V6p#^8c%K?N`{ zvIJRzRBIDO+#@JLV1fqsj$w>xrlC3UY3#UrA*XpjC{%rmoc0{lG@J{$&N&D)8e8D? z&&;IY=*fdE@JCbhI}i-MNOKVLo^=O$?_pqOIEHBer~>%nMcP%U@I0N#I1S3k_)~ME zuxleWdfatBbDCmdiqCWbeKN3sObZ2QS|A{E@>HA1!~-(+Dd$3=KC#!?pPVMmz!WU} zM_G6v=LQ(CV$1^11n~?97JzYv;W@=C2pE8S{9$1HPgTeS_3!$3jJ@swcf~HZh#Te( zafxu7xJz6l+^*u03+Ezni(I8^i|E4Gat!oIOYuuE7WtP`t)&B2PXW9$w# z$K{F3j*AYJ;@)&7xje-PR#irCLQ*Vm+#Ts+IL^4YCTYVQbk+wvMekRO(bC!-!^X-HQp_cW3f2;Qg8ZS9jZ@tt97nB^($4apLMhz)sZ^0D|MrOqci=iZi5TqK{ye- ztsTO>_Ssh3Ub|~I_tw_hWP8envhnuaPGU>hdpmE}Z6|u$Za>*Y8)!#urERqTxXotU zLz^cxpk+j6I05~TQK6w7dyYJ8$DOk_of<cgi4TH#*8I<(3WI zyJQGT`S;GfN9;6tlPHnAbwgFkIGed6M_wb$7YXK&)N5B1h3w*6#=*rE347tvzI?!5 zB1SRzXV;uKJ6NtQ$@YG^;RSd>%c`{ifhqLM%UYWHSj#WKm=wvp@k&EOOGCS9wlOB zB@1g=#|^4vV}jnzHz;5<=Ln&s?SH3j7W=`o3_s)B5eR8vn#T1up% zkf6rskf6rqo|KS|NJz&frX?aGrJ|s(8%!HEl6>TrNJmCRHhf1)pCVTQR-Bk9dTAB6 zipS#X{uOb!er^^wha9N0sC-Y7B$fT+gU2`=7N>a}CzUcHA|icbV^P$If?+@dF%*R$ z2!kL9g%Dy0A&3xS2r`T@M$|cfPUTiZuqqd}^0=XSk4FQFghCAW(GZYXz!* za3954e%hwQCtd(dqaqsFr^l0ZJ^YVV#ajNQY!M|xGRbhsm!X*q3_tf) zYtoMW)Iz7B>k$Hv^IfTKiFu0=imKmqIi68&VJbpXqs6Lp6&Si%q`c!Y}bc9r;lO}Wa}q^F{}nShe+Md zC~}7(d(QvRT0@LB^VFG*neb8C9dpr(EK3MVDDG#a0w?bCVWS_o#&`YtI4=wAQPoQ( zqFZG?i_~ z(aIaz=YU)ZzFd$m3jRdQCKP%)Kl(wGZPtMNXxy3A9#4N}Ke6sZOykb|E<{86=P|tn zQ%_7z2BGQz1DM}mMEOgBe4$C0Ff9<(=O^AMx?%Q55*57A4SMYFEN?tpw+RYzp36xt zl+r^}@PwT4O+9s2{F!?cl%RigsVU;*8D_ow@6`;$@l;CKPQ+7;etO&z3^+K6 z!gQ7u4%Hy!RR)0<=S*u)t=lCrM4zyH2<_;~1L@Vy z%fcJinufo0}FoqzEsQLD<=k^5ZIX&lEtL}}$*`?2 zb{^{=bl}XFWCte+LoGStN%s$NQ%POLiK~@&miz=($N7C{lETPuU!njCF9%2CYjB?=G#{zvV z9JBki!R*hb*({5-=e>eEQX*p~B7y_I^7y9>ktUR$h1~{9dsu>oJ?I}Et1$u7eCoGG zEUJ}0x5POASxpfe_7Dzwn@bDCc{M5dKa`!oP)3+i6wfi2Op0TjSodR zc!AGg*fiWrYx}*3&hmCv7`Et49Q#V9Q6&S#&kO5B-BcnITw@$F=%Rw25U*T96h&er z0TUEIC!_pnLBq4q4NcGsU<+hy7p$!w-1+1JAPQ2@=!icud1Y#WDLy)Dh#9Wm?n^%B z(g7i4)+G}y(3zC(qOVz;H5W%WRod+ERu{1C%`%PSu;D_9GoNuyp{0`(s6m3zBnK5}XWDYa!D z>Tr;k#T6KIj@nxgVe=oI&ooYL%qDiP}#yC z9CtHT8zgh>#98mPJ&d+}g2ql>VTUX*&qr(Qx>U5C=~Yp$@-ng>pc}j6JK~!GG`)u5 zqp}vo_l8Nhzg)oNBZ;m@;4B3UEL&ugWmqb9U!gyD4Dt2tGLlb;w#r_YgV@h8fQ%HH z;ci%&VI>x^AzT~gWue_9Qpjzf(r5!V=t}A~%^so?7_gAma@Cmn06&tCbv=XY5I}Uw z!hJO7;2NrPNh~J2*n_=zdInw`CCYJjxh$@LWo5&^5U{N9W8beyHn!uv`7>1?^cd8| zF8pwjnY3jutd4oxr!OQg7m$H5#1Qf3QKqq3Mmbpg>qM<*etNZ!@NDM#q?n$_>5+Yd@Fo4_J?!8Pxx9G9rbP8*xq$~ zl(;*1UF*ZZ$Rd9V&d0#*yApkE7j?Ay$ zA4?8We4LdCRKfQ=3UHBnAK(Cfx=eH`<}AoF9te^rx05)qvYqX5MMf5zAwPiev0(H0 z0dZ5+i^Ir86#;TA8*7{n4$Bgq77kQTr|vg0zUexz(Hs@9l3E1@3TS(*_njsao0LztTNG2-sLieks>7lAsa7k&CyK!ADt>2{n(8jrC zJya}?sMitok=f)6h(9)Y6fA(K3bm0<9)o9!EXL<+UR1sd zHaVhXr|Yxu{Xj%N!l9->#8$#xnHva1axMSWYI4g&;ehA^!P$kgO;M`?<-6HjoLqZtz59t)ye#I+Gbe!bi-QL>;s3!j>5buLJ? z^3{?L+EZzF{_-@|ydw;r>FDdP79x0_hbaO>UhkMB#}#83YK9ZuQP1pr>^E(918!pk z{<;Vl^NTGUh;jA6J{IWTyE)`Uaq7Y`$*YGNJ6w12afc?hr_^O9x91O24u{GXi_6^x z!a2N|W<4i7k*2o@L`yw%?3;BK?F}olq>N()HCyKTW+|*euEBJBzFrcX=Cu-hMfa*s zY=n&J`wJFBO!%>jcDxe4mC`GZR9#kwzrz=~4~7f9<_P(touH%xz-n{Q%&R#hf@gEEH3-4m~1ZaHYHyAuD z)L_DX?T0zd?t~rKkQ`{-J$uh5{a#6fcAXhW>-2YTFhbb>iYIA*72@q9G~?l=FOK=MET z2<Af9DXzwX>Uz8$G|6$L1yo26RY&m9;alO ziu-~k<&=d*AetM-@XyHo^~lkQ_G+rT2%B=(ac}B6u^IV9|38WT_aipf&!I@GwTKHXWLkQ`o_7v!p{BO{_xQfCvD#tFjv)zu!{S5jX z3mJv|ai6p9f(2%s8XIFB!{f#g@og+i`f0J)lYSU{I!0=t&u3mt0_%3}mxg~U%~gc) zUzdkic5XLs@94T|7)5{UeLZ~M*RcP!H9AYUDo>4l6Q+GP9&7j{3R|yqt``k^%K6l9 zZmVQ@7l=4}@dTlx9s*Z?foQhKG3mV@W54^^k$3jCk5d+b52z1X0D`~%*T>_zvUdUj z+?D`JQ1}r`z*f-%;=DoBFhEaSW;7834RCi3iq`?!3qqcWEgVVcivY+S4k?@81--*r%Qc_pwu|+V@=%Q-`?GJlVMw<^A6v8pS+CZrhqs zO_sx(uTCQSPo^5ZY_2{wS5qcqt59X?i*ThH9{J4F->5%P!<<$kqKdHEBJ^1k&oxaGlGZ-;~@=+f3Ls8!U#tJ-C? zJljjy{Cz15?1pD%B|mA$+*Y#NjkZe3uUe_(zbRGsY-mQ*V8WecXh=*H$FSGhs@JLtua1kC1_KxJ;b!lWBw}XFq!5gwrttC(AoF@G{@C6JrjA}T*TDV z+rg3HKWLNiU*^zXcx-zJ%X ztz4SR8YBiL-u-kwKi!ctG-C_huU6C0wryLprD@x$b?er?b|&I$L)QdR!m@W)*?XG{ z*r%{QIoW6F8e!a`U{h9|ZZA zwLe#?Kd$e3rGjV}(#BI5#;kloLGTv)8EM7$>sm#Lb{>9xSVVc8_jk(YZ%C^sKu8?N zUCB*JPZz;4oZYkB|BmFNn16n?WuNEAA?oY@|My=p4Zj+8Vh5HU{yY*Rl+Zmj!Fx%) zc*FOo#{Tyt3&R!^-_O@J5NvC1nVwKS|HCtz#D9Q@aGlTRFWrLw->bB|OZLvKQd)Wc zHLg{bRV7;JeY|T1`M$~$QI}0Jhg$jg4jz=}a-vL%$}?qRvkAb{#D-CgVgdC4Oq_bq zErG++=>+OXv1Gd-1aYNdsa1`vkx3Bvr6!oD-;ky)=*sF}Wot6fqJpZRC!Qk|kaF>2 z=iS*O3kea)c%$9ZW5CgT-BUi}6Ugp4X_SZIV7;zoS)lssdSJ#7yb;@?jo9VIm5MDs z)<`+Q@(W9)BAd?qa&M_xoitt4!Q$zj@3*63%ac86WE1zK$CEx0Akiq#`IP@D|JXz? z0RM8Hsd}!xg=I#B7S}48BkD3;F803VWS;3lUC`6zGFx6;bw^@^Qcr+Rff-b)yn9Nv zSWY?E`L4BHT{4^7NrxP$^LNdu0|Ryt5E6>TV=C>3Y=y*wQ~#yE>9K{$dffREvU>eR6RO36aFwBhLOyBd=&@5% zrvH*MP$DTSH^E-hBpKfe{RhA+bh{Th9OXZ-!=jSepQSB$AUS50feqJWYPc-@AtbEk@1p&JOWJy#Cm?k@C{z9`rZrWwgBdqnWY3Z=UVu_g(t^ zz?)vIgR{fjx|JV6GpJg5i(1}azIm4{<`8_75+tKVxdK*x3JB zsu^DO30I!&^g~kWdL3>5YdS#tqBoG=b?Id@(1E9ZV0=M-{oaeF>QZ^ZceL+W{+$Bf zk-|O~$-uby#d_57$^{!*ui<3&mMdea>gF|Q3Xi6X7Pgx{nWIw)F^@rtrj5n%U4EN# zSQbYncaKc1UjoH^VVD6R3C$67cudraII+Gc=tzo7T+o!t9+tY?gm}eFJYd zXo&Nx`J;=JOx*%z%a3ly);pnvu>_o1wvjghcNj3acPD+JWwQ@aH%=}QD zS-lxZ-46ztL*fIeMQJ0fU(FWvjj=$-bCLv}7~iF$4vBWldHKv^b|)mZrE^1b*G0+M z(nVPUB_va+ECGdMb$g~Qq>BDLfvfsmHm}kQz#g&^Gs}7{SAmFhy2pKTYONgju+BkO zcJ|w>4}j8-QiQ5fYL+3Cqenh;M9F;U1C%qp@1>rv(TTFTEjb*dEIe&0nC}54Oz15T z)UXNXMgvI43s_$`lw9n{+EfN}%wQ{GvHZl2I~J`@3>0FdKwTJsA`~0wGQ?!|5Q+yx zY=y0^xL^i-r%V@Kt-N$SLSbBMuETeZ&-cWUkmeg1A}rVo2cR-EvxwcE2-G#u0AV@< zBct-$eEbUlj{-rz^)+=|a}0*TTbb*@vX~0&SI2pR%a8bA*Jp~#4OY=EuUXvuNm(g_ z8p;mFKN5K#>BPAykBr_OBr)U*=2YS%qi4W@+^K2=o{XaJ3THxqA&-xsxf3w+0V)}z zE$66yV{aZ^;E4@bhUGkSNqjYi4Y%#Uw)gcYH12DH5B|bXHN&uM zaCj@Y#lek8(mLSNr_`nEo-YW{WCw9Nol0 z6I>0AlWIU9UJa>F2nT+Q4GTaUo}9m<73616W0+7L;h8hf ziZKg~&6a#DvhZ1XKlqja`owGAY}!}JZUke^bni~SIFQ%VkttmQvg_Nm|F1Pyf(q$#EG)dG8d46{)PQP5B*3zI_Uj~4 zkQNvNknlgLP%BQ><}P7G)qGSKsOc zg7P!fBpKfN?Nf#YXA`h5UISek7~kVqo`i6DdK}U5#)^pJPw|iO*3Iy?>7cq)@8}ru zIPAx_&sdTf(t{KSK@Qo`J-cB6Df`Fqm!3!fO5x{p5DhKRWeAEM%hZ}A#RJoEysP01 zcVQve4A1$QJLB&}+}&zQqzK+GiO8%2mm~;#RO_^vNlCcbh3j`fq2O&P+RcQ44zL`6 z_hLv7Qt`7uLYebzgJpZ{he>Q^CEbod;QlBx7t9s8St3z&6i^)ASnMS=tQ$a{f{F>~ zR5e?wLdfjlYFg0;q0T`g0-nD?0Sw=^xAY4f*nB>ohjyGV29S-1tvEc}_0?vd{BtS! z()oE1h8l5`rg=5}FRqksMC`)xv?))CCMhx8QA5no0VgjBdT zP1-UuYiqW|9UYN>MPNL%#*dC55*g`wKRE!hMG!$c;-bMq8*L;t0gJv>IPj8=;D#Zk zBL>ZO6)Hwj42>mf>4<3Hjc?vnMR4cZy8-z6EVQeRpnK(MOAnaDLYdg7POD8p0U_7x zoQ~jR2xm=4SmWs^Z(zwQ@3dq^cXpI6k~(o`5&1+vf)l0OGhk3YFq`HZhx1d@a>uU^ zaRLoEaO14t9O1UYDS(q#z%7|xM^$FEMzznSVQ@kpU|m8Jyd-r*F!0-Mt20-I!QroK zngGw(cqd_JL-9202!b4*xGU@- zWI_+Q(#EZUYar-EcOh?tsy;fu9uC5KX<2^0Coj0y2NX|z-zGMkYr`Csl)Yk~!F=AjdL> zl6Wy@sRMOXp<}JLhqW(93Ht=@Ja}>tNNTJYiMli4%!yzhv)|Bo4N12b{6-D?Jd!j6-T&+Hqs^ zk-yFHnoqN*ap5t@Gk^wfKKy$O-ml|x%BvtdXpk#XS^tqR<>rg)Y$2i2mTNJ8YOkJk zd5hNN^%%ENtSuBrNg;-Wu;f){#yb9GlQ7eYShL_c`>G?-B|NvRro#@NX85+Kt*b$& z>ZOmNc7lA;calX^Wc;&P2Gow@I&Tk+5v~>J_ukWq#yi0WQ_IK7k2WTqf_EzEqE)y7 z93lZ65niqYM028w+HWjuCQACQS^fmYmqZ0@Wvd+=#X(oq>9;cVFejHFJz0*hglX}6 z$VI%NG%!=HZgc1(Gv9<6JRt_^FbUm8#-q_A&^dH;ECQ z!GaSyP^f`tk2wBPostf3p^O&Bh(=}v_@p?|69>Rib1F+QnJ01XO>f$pv8DWY@uMq! zR69?Oiu3%-qfAdbMyaPqf1M=KFTdlE3K@l}4|>BLxnR(-no#rRM3LV|SLYA$K+rp( z1scZ7Q1dYVA7y(dtzSJi*ilB-i6IjRnN_G`sFGk-3I-RM<^MVOcG7|ZAMh*MmA?6xt1S_D(XCYmb2Y{;4Ab zQx8$`7EEy}{QsBQRl9eZ+D9Geg)WKpA;DxX>IuMt|6hIDD`~_yg>&sRV^gdo*z-Bz z_s+MIGb~PDQjAho2R;Az2tfdHKBIxyDYc-Zpw*Sihfk-5%9pye{lu_|1h71(0Lx;7 zG*F~va0*#H+F?>mUT^jtWegWW*d=5Y&nZq|zRykC2}ST4^fEe_my%cu;bWU97PuI@ zZk2hEvr;NtDSiiD64yOji0HZR6B{6Lx@$2>5>uitzH?YfcvN#IyVlB3MSDZYF5U0j zNXBnii$tp*(h^~SMTa4@Mg%0ncq$RLmcF;&JeSi{a1wi8TGXDUUYL&ZcomJU1@)%6 zpRT%Z5QZkbXj>)wA56CoEs7TNF}soFTikANUOK7^zKkY2>-i}82D;7=Yw66XLvczh zHCL@2xrsN^nGFC^%wm$OLlfvEYGP(r(UrenE|w~HA2HOb5{(k`*5*1^Rr`X-do-KrJcLm4YDZQTu4Ffdp|Bo)hP$G2+`vjgv>4}GLA&w zFK9@k@xC|9J5*=Ad_K<7g(cD!%M-`}_E1HaXW7aaYXC}AWQQW6Eh;}1D5UCttSA)l z1@iz!O-fN1>Oy_2d{yFgETLqhs>+e&bOE|@Nk4dr#X_taSRe-C1cAD=fIwv#>oV43 zD?AqC+}EoWs}`YQ*Ch9A1<6d)J`)OOs7gOyEhg~aA-85kM!LA*+UEw_O2p4 zRfgTyFvO=atISSV%5of1!0y#1QH)%$eYQRGK<*!o3wlpG8$;O_&+Av_MQNS+s(ab< zOOEa_qe+!cn`a@BsNz%ksRXGEX(~0X_ue~u_LTKq?Y;NjKdioY*SP>wQ16}ZVA_=c zF~G9-b=iAY`v7R~z4xx-(&6SflbgTz=DCxf{B^2ccGlLD+ng>|in5Y~CC*mF{`vH5 z*WeD~{7j-vTqnQEWN}Q8V#MmGf(3iFfm^wi8z_@%#abKyR&}i| z09KfavS%M!w$v`ZU?{I$+{zpgG88t3f&xQ<7~yxB@Vb9N_5 z?N#^v?0ZFW@fM!5fu!cyU)_bOEcbpVEpeAixMygq1px|+6HQ! zWPG7$%F`2sPq$J8wM9)|M}WJwX$I3m;8Ka|S?li5+5p=ht5`~%+Ei**g>5^l!ryB@ zoF-G||JA&nXIMR|$M)~E=~9aPDAHnD{5)N)BYs(T{3qHvWq!D>mqK0J)^**s-`Cz! zsLLK+$J8rc6H7HuT~-EWa9_X=6fR!LMn$+zmnAyHvlduz{(Os!rJY=3%4d9N|z+`Wq^VF!&^onlh$ zc_JaO1i`8x4^S432S_cgIN$uG^7s(=)u@yQ%yb~Ygb_&kWiJ-cb9kF|w(e3El{YxY z04mBd#k?8ckzFJhi3%n2$UrHrBQ+%#oj#cm0$8o zFLeTaJ|L1_{(>&!%ESpggF1Y^pK!>6@&1EHzL@ahkv>V~O?Zj5IN!U?jG^8j0ba}e z(#ZuQujk&x^}{OBGgacB;UoqP>tRj&a80aLqK}xuGSo9Slh-QoB+4$G|0C112_u~u z`ak-MZL8%r`9l9l*Mp;%INXcNyIB9m{EK=dRyRGcz!lk9{C6hi~q z{-0CtWie;QIdg4L@Zr#l2SbQd?3tm+3E73dUC|O5Mn*{E%r#Q-qKJ4vibhQw zn$Z#*c{b1Rj_{_%Du=B3pwZ#t8f|;s z9v6zn#Sm_ZPqw5|nzxlED5Xhbf+pybE#-%$yXIJnAC?2mXUxqBO*7+eG&y;$fp@fF zj)sG#gnMa0x@l%f&0BlI6eKt^^Nh^2G-#kCE}n5(Y7$c9#$@uo_s% z-nAvF=Dm3!fpt53cHUP_BA&8tQ6FFcpv0q%c5}W&S#IUt2@n8EYqwx6ECE?vq(p*24#t<`y^sR=Hl-inRjDJ-ch-TN(iiBRdMrAS~Am^N;Cjl^$Lrlm;{(1qq z@S{dtRf7qXk0z)ZME?lnRQo^Q~>2O+T37OVAwy{nY9RT{1r z%c-j8tHpxhS+>vKELi$t#aJ1jpc=560M@cnf#v11azF-bw`~iySza#}jO(mIwY7yT zmOb1;H2DF>sfj1=;00rB$TOC(lI+SfctLQQQ*sV7Ix(@961O@uuJf zV{Y*FNrRdgzt$GCwXnIc^_(Y*&hi55;;)ygvVzvwis}SoU+PO$`I1bhyXDf*qtkz-Z_4< zY*-MPk_Cem5v8X`V_xwfq zgru{1bxU5LcgAacZ!hkxd2erv*H*tW(2k-gik>HD(Qy9SxWG32*?DJFK*ity13$q; zY(8J+jcq+eoc zLX2P~I0^RQ&d4WZAD9WIS8R?~ES9RO%F`CKg@upSSW8vnrl$Msfp?v&oqxpPP9Sl=NtZ&2$gM{I@X_>;siYf_)F9;R@SEIb9XIOpz}4s+ zZBiddHkuh3+l@^QZ>Ou(B{-Y(r=`iNo;> z>Do|k`10U6=bRfkKRM^TC^O`|$UP97G)eT0oG%Hj-p6N-gm2);rIZhEO`ae%fB-?_ zAmg{CaWykdIj{{iz&(08`1r!yVCL@86ZQR^0kU=uvm&{I45mRHv8qX2;Nk)sU3w3= z=v-W2q-2W&BJ+EY$yRD|OdTA<8#j#j(dY&yr}Crcsj}Ye3=a=f+h5B^wDKe0Z6*s3 zabvo4B2ypdami-FbuZ147IkMaE&8I7(?Ttu5V$Aj{3pA3DxT`;dN2??117>V^ytyk z?Sk$RECU|Sat*^njt9edk6@pk4i>JGF+#Ghr=xfB3vJ}tQ5GO@uxLU}*%-`%wT9R( zp7ms5Pv2o6>dz(|8Q6m!Vms2X0mPHh)`D=p8YuK(-WatrfVrED84vC;Pxv5V z%wV5Su{Eyv)oAo=N8F%{i*t13hDs-e`$9FM4Un3|wo^gUM4$!fx+NM~CaNjlkYQ4~ zF;P!oaA=uSNuo|j$?jARIys~OuB@!<%9dM-bQCdJ@_L;B)QdnnG*Ll(g|CyBsRAhc zJQX_?^9@3HJui^oYy-wsv~5SjMqnZ-3%B$^0wvhA*qyor+@lsvirqSuTvn{k?mfcg z=))yN+ocXjZa7uyN5qDoA4if}*n6|0qIwW*KFH!b^<`cqZxW)=wNLhJQB_uba}e_K zunk)nOC?EUxoxVUVP#>3$6_lhD?xiVm4hlMNz{p$Bsw_X^`qSel|ZN@@KiqmBUcD8 zKqL|ivm}dxAR7P)LR*6^L;Icty`d_Q3=aHqwYg35Ib*yWer=w01A_hV+=# z_zQq*_voQH2j4}sL0T^|YDov5I=n?Ql6ysQmQ(RHz*vGXGUJezcA)LXhJ#;xk8p(ak|mW(NhNM2f5YP7DOblknOIR zgs4Dago@C*i-*#HT<0OSikHchgG?0?7I5aF%9ttGxaCw~5q$3z?O92%sSEXUiypJB z|I{$87C*;H*@5%A?#76HyL*{^9(s(E+pXtdaS+&TVXuyEHpYS4vA2=xrDjn3CkLow zW8gvjy)cPGC51aYG2+|EL}Jb)9h*TP~mz>F_ z+>RS=&DM|uP$_}M+K0b&%6Cv!#UV{DB!h948W1dtuciQOujOjpXbk+<>)W_$dQhJ~ zH$2Y}IEAK>!R3X2xz-+TFTX>%tF|J;y3hJ?EEpzTHKl0V{$FIAlI1SINPLdBsDl2cs4ZBo&h@`q z16@$tIbA9u!`&AJa5SsTO|SkH_i-Y zbmFj4#=R9^S&i#ait|y0{I2A+KTNMWME)^@^D@&20o6urv~$~;g|dc?o(5im_=*`z z!OnH4Nvp8m5Vj_bw zwHU)NI2HTeB0phklO;H#|3{5a(Vd_i`NXCz^5@TcV`rjuIPuROp14Y562JKsCJ-Hq zCMJN~2j<;AIoK#XqxqY~?YC?TJK|R#i&ER><&E-r69CW21Es<_?p@GCzac8Fb;V%^ zxV;owfj=Wh@)FT-9U$7JaUM*1jmmeBNhFT; zJ1t_kGxWRnYPL^Jn|s~-?vo5$1stWE#WiDvIKzTP4qc-ru9AOuLHxrM1_g~{c}}kw z#&77|*U%j-|A~7MIClvdYl(tFU91zxsp(8Aa1;wvX{?!cg8ObYzC_oz!A*snyq)~i zqRkCZfiec_nGy)L%$Ef8n6<|Y>ru&b9ig9vvW{R^Sf9pQ2GNv_8ulh4zMsGx9Fm?X zK?GxbhOt~fqik{idagq)>7&jo?x6=5dtF#)PrSZv?z_0yAFkz5$BLUAdg^tN!YG4& zkD*jOByzwj{$Kv1fDBb4q7rsd@_<=!Nm2P(f(eR!*&tX1#~Wmhqsq zOzQ$RujpUPIh@LsS!CP^yt6|$!=ST&`vLmcES2iSvR}G0Jp_*<&^3@7jx5h%-FReuJ?on z!gcibVxXX(1(0R~ii}~-03uj;+mCBwi$G>&e^Brb0~d+^x!~;PkFR=H=6t(TrhsDl zN~+|cmO`LlgG)9V ze`T+$Mr0Nli=^+^D%MqS&aF?#6-1oI67^!8v4pnD!pAMYwG4odsSKfu6qht!Ce}l< zr4E}b$jdbV*WkoGxJB5<;k3e=g3na>uIM6yGn))d*Lkx1x)w7}$E_#hfBlA7UYD6s zs84PwGnHfUg-cjG9_wa`@DI=Y&6Xvea8AR9aH1ys@Q0>mBL2wpjrK^hk^2I}=SgHf8buTi1!Qq^(MplrIWXeG}gqD$<|l5%&5`C;JUWEk4~zyrYkWQ|$nWNO?>RcTB(r zjzxV&=)s4=f2rL5^9AK1U!DasH5OVl8o0o+syrF7ggUe#9+U#vB43X`DmQf5zWucN zl{&=i;CFCm0LYJM`8)vc5I`ZDjD(KfRb;AQ5e!B|I^R~-5#9AJfA zDN_6%nXaw@pD2*D%JHkl*2GRRPOMZXVusr4oOJ4vgA0kXhaWSzo7Z+GsjMC+SNi8m)8gUudV20}%@1v%?@d+Em2B&bTL z=e$U>dP?g~@l9q{hc7_g(z%({g%|sASKaUn>2RD`J>o&?&wA8pR;Tw&#-d~f_5X1g z7hx`4gQ1G}y?joHn$>5iLN%*jaX+i)%I#gd-V6%c502|&%ICvb5uQV_U9wkGdv*KR zd-XtBK&!KoK3Vm8V~H_6!e>=oAw0u-6yxzYP|E6l&TLOXwKNNys>;c?d`5%i1_=+z4OIyL1WxUGCDFfw zm+~J5&7vaEzo+PeaAIRt z=yAIfKsJP_d5+K|2&8j8TTbW1CSHU@E{56a#`N)_Ke&mhz4~%_;aL?!hh%3G<3_r( z&kd!W7N*)~LuBf5=Ea9h-AQ!?cw5c$j(xA!v`p;ahWKHli*5ZaM09aQ>W$-0F7cYu zPnqPxm}S^?FkD8RkDOURagikZU8OY=a(HL>BffZ!a@^r5F}h~^eQSWxYeImiU4$qG z3^m3n@7YX<;n%SnzzEkmdOkD&9x@d=;=Qo>?{~<;c-~ySIVy*-`@&aM2N}yMu5bm* z3~cNC6t~kGE@H1sQgL@6h;@Nw(cT~Du{=Kua7`RsmI`gLP)siD*AFwNEV)_!KqZaTm9PMbvh{T*15E5NrlGj}&`yrGx zhh!+~5xi57kDZ+S8JTCLh*uO@fpv((k(`HD*rzJT895lWb`-zS=NS^Jz zWeuc0(&l-`q(b8^U=NcR@D5hC_%)zu*uAgY;ba@ZrAo6V6;4DZt=7qNEC3j=yh)E3 z3|^{`orxAH2{K-HdlS6+UF9{DUs8e6twFpKDpyTw63}4-W#f=+5<+INs=IW>OHq%Q z=QqWINlucMOC(G`4)u2Kz*$Cvo{$J^B9^IRWw#5jd_`t2?w&o--3j3B{PO7 zviiC_H%$|@&a1Fqo1#>@>8+iM=BUHG2F-i0GIegZ-k1i^8=#&17j0#`vMos!Zn?+N zAVgd};0w!zhPeVbTaUpDrp|i5Uxq4mWUxP~2y-j7GyoVm_lnV9ERQydT#q|hJRxpr z6|wSmed71xco+E<+XwW*1@J;5ZLIrF$LRxmns8{KiQZx9ZKYRAkeMqyE(~`o#<4fA zqu1%(gT524Cn|d&X^+NxbE9NL&fX~0oz8bEP_zM}q19aj61%3U_{16|!PF)i>#}rC zD@a9Pq#w*;OGI{JxVz|HXo~&$YueXyJIs8B7FC5cft`(Hk z%+!$K7)OpKEJC|R{YY16;#}6Eik#a&&CSzo2;R*u2IS>OC4k3uaV3dl0ND#aW&TZp zM1lZdi+_5!yP_cS%|9H^eMYbsk)Vs1w;iobxY1k}+XDnp;zkLIydfCRYZzp)?{(O2 zxQk*#_Gl-8Q&IC(uy5=AjN(tDnp(}T~}cHKnVLphQD5iO zoqJ%`sH!0?^OW2~Kdu04AAPWPw9LAq?iqfJd~*u6r7SYOqCWe2Ky9saIqP}vPI-VA zEMk~ODpmtDVNnl{Qd_{_5`JC-)KPDT7cp&KV^QB8K%oZZgcn+aAnaH6zPL4hV2oG2MamJ!fy~m>7#3(twt))DyJ|97L7HPGp zACYwRhMNFKH!);aTe1-AS1AHq5fG=h{bL8mU+H{-yL-=qmRbgJE0)9X0{g_>3pd|xFLx5`Xh4VLvk65D=73V_(8g%Kt`5>%W{ts?Cl z9Ghi>WwWIrX@NKV7=PWln;{ET_Amzaz>eX{Zb6K0rd7KQ&T|;a_h<%=aIn6>2=vZ{ z17@!F8vv|zj9XRyueN&UiksP?X`Yq^C93$wH4n!lDse8QOpXc(rRRWEY+OBJBuI{n zb+WCUL9**O%*md&|NkU*b&m?*TReIQ!eGxcfwqJ;)Ev@&$pDO2IGMFxmy)j>NQ$m=% zW7uJxM@If8;d3BDqglc)gD1LxQ^MCKjC@CT6-|uOKIuww`?xD8f&Tp8J*BLyC=@5; zqrcD)1RhX~!DvckK|HwzODFHD!BfFtmG#UqUrGol z)fk|Bpf4pT|Jsa*B3Nf0xPB=?Ba`&U&CjW#$a>W(P%478dj_ze2SMvc~!-#o=PrCI*AC~!5!0}0<{|w~%I-M2rNmK!?n@>JKOH@tb!h9^7 zNIfXc1vKf`faJV3rz}{cbOgo`CUmd_2{M6!O^;j_BT;9fM{93{VnZRdlM?V#^^Zuw zOc*o70-MX4obvy*rW2~Cbld{`juZ5OV3Fy87H!&w!}c_hvxzt z(u-&j$)uVJ$n4ya>G*FcI^*kHU%A{IQ3>kZH#BOimouy*i?rRknL!mMF;=QYS^O-I z(3Ky_Iif${t)W_Api;8M0bqybBdBaAC+_x(1$^cKwsp@OU3#>;!?F>W9#NDZzWD^Z zpyJUJkb>IgnQ=a7cq%soi(xiAgHNcg$_UiGx`}kuO{)x13hM+36VmH2JsXIBAvprg|5^-8}_DXK+6;^ENYn$-KhxM))E{V-6N*M zb%Ehv@Bvzhtf2wKpF9Z#9#4YbS>(N5x!5ylCWJ85I6x|YfyLbt#HAqi;dW*5wV{?= zgoGc{(AZdY90oLOj&g#iks2ca-iqw)-e(<&*~ObPB?&Z*pkGo%eVkG8+uYb~!!^;y zw^^aH5-uj)joCyWEabk5&dj$M*PQNqMFON4upKyDuydQ$LShWgfGaI&O#TAcNM!laCe=4Ka>xA+)(+MMN-m5Q-6k?0QL|Ve7Z+h`42G#Z}_|qz)P|{rC)GHW78oAKr~2 z^;Lb9PKh1q3?6lFXu2_~dAv`F2D)Mg5oImE$w~|kkW=mZBwQDNq`v?&5~N=S)m=Tq z?CQ~8Dh2bgK;NXj*pr?#Jo;bS@IqDMk|a$fBz@A7r-jGM)d0XM{mnvy^^e5?=vGh! z8NeUpx3D`W7wWV+`$D13t%qp$j2G=gCR);zr{L&`UmCm*G37&{)~zb02>X?b4ss`R zFcs?;93%IM$rlbpFD?kuKg6_}r^p-xLio+bc5KWUO_^WwP%CR>gJ$L!NURltos`{$ zx%$TNx#iiim382WmhEB#amz3VuY%U&;ANKYb1YR9wV{G;54?A}M1`hA$)am9B;o-1CdprldV5_Nfk_pFx?{Uz;!RUu8fbU+;PMovW_ zzH@7gcWw=+%w-eY2(>$H83*gIPr8-3pkc@>PBB3zmZ#5x7@&WehGF$l9L$%(5zE@( zI6jBtI>Xy|V)706RWL&tm@m&hv$jk}#TQG$L>ph27QmV?Jxs1%xk&9{{9-l6)Z!XeE7caaR_sku>wHX-jOYGY%;1m@b4FU$UfvZrufE-w{U^kQjg{YB)&B`P8I0W58`oti zTqFAaCkFl&wP-3YGCbX&sJy`65dS9v2=(68C*BzRk&4R&Elsk!EnO&jldd zgpsDz23~x)XESHU0YPoak(3mrXAub4^fA(2_oTPfFo85dW!RTVnM}7(cV#%}j3*vI zAUGChqXGraJ>NsVfy!uOVH|?|xC2?gbQEIvajrmRBq zC@-?Ccei*Keqf~9!?t|Ew;+Pa22oy|Gy_XEzACnom&ZG0%#f4q(uPgV7;i?a^-$rI zHg-rNVc#`3Pg9<35J?IsIRe%gsa4|f>aqvLNH^p2i`9`hNL0gcIAozrNu(cTw2(m@ zip8zR3!MsV7GF#g;D%w}7m4C)eIeiggD;;Qc$vapCF;nb{gfwa*RgYAN>$tuNI z2^yleqw7QVpt`Wa1M-0{_myILzeEEbbADXbz6)yR3_t`p59o2*-@3@7pPI~NilBvP z!V*K=^JVm)6G*EuEat_nDsmWS_WW_z_fQYYl9eC5TKbxgv}RZ`!Llf9wm&&flx`Bqz**EtQDt3LqNM;q`3Wi z<;GP13VKs-zF)}D=apG?su^Xz00UtylmWKiW)f4K;`j61C(~KL;{~FI3#s5&w6Mrh za#jW6C5vJwm{zhT_A69LpHUpeg<8K_xRf~~5IGIOewZDXX21c-lmh0v=vNC;Tlp}G zr5Q0IH4N5}56g*$qN7qO8$DZWqq#U1Uo71}V-x*fBE%*9*l^wZ(qE{kJjnS$)+ijg zhW>*ApP@Wo;VxW?DA0l15{k?)P+`vly@8^K`!KJ{4kx17aauP}$W}uZ0rVH3v>&7W zeHu++K~Pol?+E%wuDc}>{_I+lgxN*uNE#EZXSU zTrGP`XO_t7f5?Iv*W;sh>l}gk+jS&18U(stY(N7@GPlywd45zE_o#cxF|ydj#?RdI z!kk`SNalu+AC`LJMO4mqjf9dGFZcl@VV;)=ah$u1_VD}^Qrowjk>_%Q+A7^z&Thc4 zIvSJMU-jGg0s?VFsBxa8m^bt8{WSLsDY@}>zE~_FZ zp=8!SoaZj!@sOKPX8j-PNu&PdVC-!S@Qps!?D7TOCX`RqtOw|a5Be|XLVG}#=vB$a zETek{yyR|SiIWDXA!LOMI85B004ym`PzWd@MjRxHJ1E|nfi7i+QeDt^cBz6r-lBD22Vo6I=t#@}$fE{E{=a zcgo_eixgDK4D?2rD9c{rkVCaH3P;J6QD;*laI*b$LzhuXfPp015t#K`uJhV(%VtSjn%p+^pm z<}RoM4*EfV%7FXCiu@3q+o(9$r;j*Ux`N!+H?*ps$k?NY_ zJy=(dahm6kWj>Dd(vJWb*3X5^e2L0x_v0ZgjRATna@b3|{SAK$uHzI1Fb3RV3E2U@ z)YyxrYCwky%14Y14+kbI8psAivf<-7rwH{NuIADAplnGTz+RgGOF^H7qsaS!`hs=ZCzl6PE8vDT*$9+R1>gjPNHUih$b>|Gw6_8MSy-spdk|?Q?8Wi#9LueN1zn1 zLD#K8x?8LPH=u84yAWDa@>Pp_w9xXj96}Uvg=b73GnD$8jj&_rV)#j$H_T!{?EtRv z@cm&h{iL6GDPv=#qpTsdg&yQmIcZFeyd~Cy&LtPs#Npk@9UK`bn!K}KzP9b%7T#B$ zJtW59+w629o`dJ5!&{$hUP_D+DuQ`=n7T{C^fOO6E^n?Yi9++5<;`ZSyuSu?f!(y9 z^)^4L_>@*@Kun}TB-G18LM!EJ+_ILUc#QB4@L7U22kqtn5NHsm%zG?gH9La>?-}uy zR-CBFXk_`|)90HOww9O0W=mI>h_hvYK0i_*=6`Ub6h!VIs?l);>ecnO(eUAFB7!Sh z%|!EHS&_<76b0T4zUrIWs+}dH=VP(aaJJe?hJW6(6AVQsYu)-3nXM2coc{7qWs>+F zKr#mGJ=25#=?GuMht?+Vtw#y|rMvWxB8p9=9&RY>zQzaQl|^Q9rt>0SE{DBC2?E7A zapK0w-WQH0#CC0$k`b~L+$nGnCybHH&b&jA;C@3Rb>MW^dkA4j^0DK`kJ}NE+-kH4 zDhSZM9k%1`4Pt+?;aSI@S)Cr_M4rqi4Bg6*_MD!&b0NK!K;Xy=;ubklZpdfwYnR_E zd?i*c`AR4qqrvQ*t!2iXV-yG>%UoM#y(9D!sz@As>$?u7bbn~H{vl`{!Du!*#L{#} zQ@}Sb80>m@A&A`qOy-N+#2#AgXEM20pFmc$7iIJDhF>{=&F4e(Aoogj3ax9d1lYj2|N-c_~EPoT8AbVHW5jQkGqvol$sz}N?)?hdnHj#3bv{AZJ#pf z7K&Bc6KG8P8P26kb}BSxo2IP90Ei^uq5lTEyS^|W=4&~SjSRIXZS(h;61u=ltAbs{ z(>|X_x=w=mo4=KxZ(Qc>rgdKA+$u%2KDFhgQ=ju9nV|Dh8J!o<@pRNq-F}7Q8k|RQ z=y?2D3_(>ra^(l{NG_&)nDnN8!XUl>oj?y5jO`O(B9X_~PEMBs5netd-O2PN;jSwh z#S&xg63Es;Wf~6aUMWt3xM$yvSNvD2DS}V;c?787g1*(@Wn&YHRF+v&Tob^x0ZyvhmyIxz9G6or%wSQzZ zmFuuJB91*7gvgMQM=Dh<+!a%w!EiPV7r$A+Hn>>@Afu59XPDDa!kB!+fNasV6$~@e zb*~k>4vLCFRO7(`y8GQJB6o!LVfSY~B{WUkW7WH9qkokGKdq|}|I<9~T0M(6z#&AZ zMN^FoBI;{f6g{=n2nj{va=UK;yvcOlg<*&sWA=J| zPI+B+OI?gAUAibE5f&);7i= z1#x>5lc_Ai6g85N%bC?rn9#GBVs{Ugo40p9DiMQuQ+L`tCK^WASwnk7<%&B8GVLHi zPe|3aeFo$a`wQrR>ZAbsj=%WX7(A2iOpZ35B<{6uobNd_IVO%b8UBqUc_l-T{ELMB znJ9*IC1BMSCF56v0A?1pzf*Q#Tc(DC!-UO4O*|rCrp+qd>4T-m-@12xH=xSCZlqMS zg0;}I4LBcHn{s}10Dn0yFi{!Y6Bha>6`zFMMsHYDqhVx#bM|elN&&2kJb`0lMx4P> zgsG$Se>)gH@;Q2XudsTIH0vdpy<>;e)?VjKJFLN9DHfAkv)lBMjr7 zqQ?Gyl4U(00_4T3rIUjk}BZM149b@67)aqXP)T*-urFy;0EZx)YaT1BA7}#x(OoXlTryA!Ta( zst+PlG?`XBU~umP>GGq$nmoFL#4GU1EVtYOv^WahFO$tKk0$Tt-K*Q|VtGhNM>#Y) zIwWUv75NMGTUOoNL!h+ zCiRQCrmBjvc0ePg_(mF{mSWTBNvQSAoO6Q7=G&JW#-P95XzCbxr7v|3BO&mqE!$D% zai2?*xC1RsdrL=aM#|JFO(d68Np`CJ3M#2m{{k*g&hSSxoplzX+odH7&P%o4u(wDk zhCXu2xJ#?-2I$d3HW+7F-U*;dWoR!Z*+R2P58Qh(xeq)+!2{=gB{x1GH!@ zR<77Bhy(ZU<1DlWlYbD)tMza>Ki2cLa)kTGY#J&Z+%69MI5~VI(lS_?0Q?o+4RK|O z2%nxs{A2bI6*6KS5grkJyD`9a?19O*1qfy|M&csIkT6v_G9(Wr|F_ZGN1?J$dcGT~LwN4Kw(w;Fv$(qJ%On*Ai#z-iN z6Te+V6Ob#V2;7{;bW1uQKY^XWGAkNjsbGG==WxM`MbMXW6`P2Yk933a^7tFVlGs#E z6UULE9+1yC&u0GKiCT$k+#L2K;mybo8(;WTiT=#W7)(tj&gf>FcBKw%sd(9%f@?oh z-<9X<(St*3v~--&5WeuJNP5_pB#c$cz)6H6Q9CIX11?vS$9!n5Mm3!B$2yZb&CKMc zSc_l3S4e+IsB%xk#9mJlwp(;-M^RIe#HUM_cHbCYAF+Q*k z5Eo*df4}1~BAnT0Ny65P+;a0C%F+|a$vAf&VVPGekr4GsJZX}X4n8EbWRwS;i(FhZ z!jkZg5{dy7k1Q0MMOt*Gb^4hVvZuk+t>daF%eJ@C_5SY(BMj;>UIU~o#m_HqUUprP zzj-3%X+~1=(-Ia!I>(W^RfQTyr~~Qqcp8TylKz{)`tm;8b4ikmZ7wC$Wi$#TDBK=x zZ8{n7*{}$-^8|3*^F&mi!kJ>+#zO(2-Vb@0TS2tOCVGlz=x1-VlP5ejM+`knW<>)B->0?6i-7 zI5~+&geJ7Lg9rR(h>qlVF409Z;Ti$Jvj7a+EDj=EYcQ5~)y=|fd(i|5`TnMc!0UiG zh@cSbqkh0aM46P!nZ1~=8t=5R-yq^Ev~+Z87%>NpzOg+L0;;<{Gr-g2y7=4OAVRIy zg)Lcy`@QLRV1`Rg&*lW9$A`Dg@|VOE3s9RA3`8Fjpo+0y-Q%vbW`Yd|&E0K%nnJs0#45gAg!MK%n1}*n=7wl9e z6@zLFk@yD~)mUTTN3jJFNZSyB=RkaNgh zH7*w1=An=KPs*ke>ZPL%ucNFGWRYjsDytUX&6Ar{=RsOic0O=620Oed1RV$vHT@nA zkS^s~F=MWSs;WA6i71{1`VG6eCAQisz1D;yw-w_-TbZ0uWrZ?NK*fa=n}v8U;`;up z7P`y0FQxFURc}%XY$!}orWzoUB&+HqHDgKT$X}F=cCAg}2tUggRWCWyF^l57M(;Bn z02)!zNLn}Yvu>^Ge*Pcx&=n(`Yz!wqQKtRDDvj$<{V};xk57XF+!a&!t4*Kajnz$& z?qi^=xC>9Qcksf!D2pX>tK^&duvAEXbHw0h+>M>DxYLp<@G3Jz z1Sos{!D2yReKWfJbpMI(8E@yo@R$n#J4ZvQhyU}P8xbw0AUA0#TTtAT7II&gZ~A6& z!x2qGeIs3DCCNvU3b=iigK%9ggdkS_gAsCj;X6zrYnNWv+rV)!983M5&xMXE(}nGx z#mYHt-8MB}0%mJFQcQ{PV^IsrtFX<)%-2aN?*3XhAtkGBJ>1o)m8KHhUqRC5=LFi^ z-X^&`p2zw_dcB}z`*9r!Ef5Dz3FKW=`atH?h|vT_h=n0#Einv<1dL6f8?A&}BB%C3 zcXWC79vA0+qzebBZ&1Vv>SGBQ#l49qh+Cq`Dj{vmG8zNA$N*tLp1-h5YR`LiOCWuL zbNw9hGkw!+T^GX;(@@tg&kwHq@zg(WWEohqBG9mJP&^h(9q2O!yYnzIhtvn2r>Vl;>HP_+kD9j=VB{xN~% zF6{le+sxnYt$AZJbT&6KT%U#olDCDXwxfP%g=}N5Dklpgll5bhTecR|S9|67iQIcj z8QB8(0_pi@O)?$=lUef10q=A>G-1Ci*cE}K)A?z^?GQ7!!_LS8aZBHwR6_Si)D?TXLDZtsT`PW6UC0W;Xi+zX&6BIWJd!tGaejDtlt%h{QN15{X|wKgF-z zl#a9SfqD44_}TYSuZt*hCQP8n?W|P2OsANd$yv?jIL9Xo2G(pcnM=(~q0}#Gcf=Tt zI=}ZsQnBkzA*rOx-PrYzdBOIWc>#;%+U<5WbS!W}qY-zc^UE3Gl8iU+3S5%4@!|-v zLJ!H(h+*MZLpKDa3@&MAY=T0=8XRtyU+;&ap=ruj@QjRO*$f?Xn9i*JA8On=k zqULzDT!hZ3_|S9z_~Q@x_QU^Sif-UsV?Z7^e03~pk&hYK!#VbFG~sfx{J%6nDdY=6 z611e5>5Ztt^>Tz~A7cwf(YUx_~KJ6#9awWeGZEFkn8EI=F)zgT=!89Gyh zRDx_ME0B%Hu-Ug15q`R{qv*wcVrLDXUtUB&+E75mm>IatFR`wibuNSN**rp$vK#fH zPSjKADUwcLB?iitmX>yzV?lxZ*vWpb7Abmt?2UQFTrknQd!p-j(KWv7vt>T$IS;WO z^V2D6{*14|gXTPgGY6YMwgegI6SB&pTxb7-6F%7{8A3C}ZmBYa9d1bLx~@rIH@S1a zs4Uc*5|#`Y7?pE1sdPIrWQYubO@h!A;^#B7;JWD8`e zLaU>FYH74K+8;+xtNN$xl(ktb)sYpgrf0dPZn%K9VK&pZmz(XV=!mG&Y@5g~q*aa3 zQ_G_WN%Vodp&@fzEmUjO_9$A{xC_Z;RaI!Iy0nF&N+^n=Fey(til!Sq(fm5Wq?V~& zuK4P*(jA4c4%auqAgcj@;lxCM*^0i*Rzo=-oe@xgiOH-0lmG?ZWq=a_HlVC1>uS3N z002r&t*y3N005{fO3lS(Z4s_3hL;_og`m=Cw3w|%lcnja9ER66@KZ%=TvcthXKOVK z941Xuo~nOCQ51!zp0!VTR8>tmQDIaShV!J->l14%mSxqX#%l^-IBhFSZ2{WsL}h#3 zFRRN=H5?(K=tf%cge)RD$!LPH;zkLnOrrl5qR+R#-($<`w$zZfnZPYf#XlLB0$h9wwzFHS;iyI6-QPng> zQ4e6$+mOwczyd5Qde#VS&N*6viwe^|PZpH*bXiZ%axRdj>nn-vjl!ttiR$yFF8Lix zQPqszKF>a2asL4tp4*hMqP`dT9PclBz~ z1ieHr(T?UlzDJ#3P!N#}7Ak(EhL%Veb5|sKIB+c>{pf*dLE`5uLD{ z7fJ-dDYC-?2_Z!H3k5FtvO^#}M})p77mQv&u<|#;1#9xSNkqIcEwsR2&acNc(guse z--r^%oF5TBKp_bfCrs?{=!_r&;rxU?#u7u`lY>1$o*#)DKwgY>`8;H%d*frAqaAa{ z!^OFJTdNShpYmp=PmOqUqGD9dsLAbICtc5_ig};hB`BvFsD2j7i=_0%BZxw8=Vn`^ z`Gu|&e^FytH+f^FZZ;JfUCT`&Z}lv<=;5BjC0glNZVK-6J{Fb{co9YSK4JgLj?EPN zW%Kkf`Y3DUg!{xAh>0zD5!{_Oq=lMJHQj4I2DZ$GF5Ug!;%>xA1JluO< z@~|s(Z(JD{x0zxlHwWc}yEZFH`~Sqvp`36xCg`)G1G69QTsB2q_u*JG>(-XFh?U-v zJJWff(6_pe7n-!n!jcVy2T9_UZlp805JO2H(x&LlR>f`Sn-Q4p>|RG7?vsTav2pQm z7t#*d7-@_8*Q_f&+{0IT$=0Z^(23|u78N+4BCh?47rTuPqeQp*PNPrp^s3D4N*3G)DsR1bxJRwTR9I#{JnwyNOhp4; zjH#Iy+h2d)=dB$+Ig5^}E@aw0E2_erXOE_0VxhMLOC zY!xCe^Ahdi#B>86=BZOD!p_Yz>n84lLXV&K0Xm`1?;XM=|Ezk2-V{mHmtXG_P5Er* z^U;*&OpL>6((b6er#k!;Gm|r+mV0?B_qmt8=JAzK=T|-$Ta6MB~*_&eby*t5B7VRe(jWccMZl*@MsDJcv&(Mc@7_Zc_lNqG> z>CQdxvM*|?sczo}?&0>KC)8$cChE)3A|GQ{K-($<R5EWQ2LgPmSMtw+4R+2@V-h>mu3 z|LM*j$UARZ>pyjt*7|I=c)iumOFy0M*C@N~Gw&P{msIk*w@7Tvm(j5?_djhhl$L+X zW++=zX-uya6bm4*E2zrD?2l8~UdB=6^N+)IROYJQRJjhSL7{M32-(ebh)bH$N&HnaW_QPN9%n z!@o&#?s@mlo6TlV%SrNk^Elbt^XQGHcABcre88@BdpDuQkIV(-jv`=Xs=^+9|os#p;4X^0MMw(A6x5%cc*fr1>)SiWoK798|rnH_q+gtQQLgbN9YVIT{%G zCcQ{CHMkat#GW3cj$&uLD)b2`V7F$GQmiB{_f7!-qelP;5C}!%EXiRIGD;cr4b>Lm z*#Sw47@d>g2+Qg}0`%%C5=#!edjM`aA@!~w{3n$%6(+dx{b4a4yb{VCgj5w)6^5g0&e~ zRTx6a^Kq*QUb?3#lV|BY7z`o6Z`i_!t=KG@LK3PyU!&S$H?{-M*!*1Gxd@7&pL`>8aKA^wwYrkk zVyc7qI$y)mhhV5DEn7Aa5H#wfX=?+8qXx^}JjENVY+k|+m&mz|mwN^Pl4g@@ zI@{B&&c3z}1C$QsGi|CD?^-z@HRop`p-JjRQ*#kHNqcPcr@_q2V>I~e4 zFp*uzTW<|#U*tn1#|xB4n>wdN*0iIOTRwbO2~;FUG{_-*Zqt?q_+6s(6GMi81q595 zQ?lh)u@qNK1{-YwO45rq@04+++JmbGR5nSPhqHlVHC*h|wFn^82uyUNLZ5KqnU_pZ zQTRR9^EhfyLARs;K8Q!`bxEHzWo)ympA}$=;+%O-)*<;*;LxNJncA6pB6iKUlPPGp zwTBFXt9P~XpP=Lu<0k(wYK-|FYj#*7V1A{?vJ2f0Pq_JD8q@LwpD@OZ40ayz3f1jH zc>%EGxKOBT*-V!138x#x&`v>>D&=$*`n^=acpstPYJZN!7XvGSyo!hA)NCBM_3jA#=HO+5;Q*MeuA_f(ZsLWSu-~p-;Ae2|D@h*ZCp4_Eff~x2t?- z$olj01sU{F>pVU_4#F4Z1%W>ufWm_{J!s06N42e%D)dd{ajh5uOJb-OU%XN<+f4Qp zGb7gLSy4`Cjsy#RK>${ii4^LaVd5kzu*{zhvM8spFVMvlnwmPEh}61GeIj|=!5Z(? zAJ9~k$^^||V9?vZN-p~I`&{(9K&F`Uu$CGW%tS#<`I?2@K$yNKbG`7nK(N}<9Fa5z zFQ~;Bt3~co*0c29r5hmQM>;E7>plfwC>@NR-a(ZE;|yk`FewrO7*gMDItt?BU4HVD?`424hBR6_Q0!u$=~VfwA!Xom=Ccy~^(uyp8>&jgJCtz0o_w#{^6 zLs8SE&2_Z#UVLZKZ9pJyg^)4IDg4zP;nDWsPJXhE_STSdwhDhc7RPLTP*FwHjEK&oh64Pw-188vOoPiuWQj`~1&fZXiJ1IJ6RS1agUJ%r3d$!j?Kw7#y$i?ok_Y}5BE zyC9=&79+&*x9k+!N!@8&CEiSfpuQ5Ul*-NF^!Q{lC01I>Y`2F*x5(OJSWm|))s!iN zPlCI%Ju?ms(1J?RP#fb070pAFz>D-P;O9Sh96yqepVcpcHG0SR7I-b}n#5#rS1b*5 zW0fZr-|<~4^W9SYSmmBe^uUsDMw#bQ^Wyi(EBV#YqKth)bOUI@sDW{M2`ax5TlS+> ze6>q{I}M?fN{`whVAE4k{A_O;A6nP~Se!IY0WtB*5zRV#W@FVCaV?+vvyqvXiVKpjl1L;TCKJ68T{B6oDBl-{wuQ$@=l_FEYR+>qcews;u7)J%%JWW^m9Bv?gLa+1PMWzuacq(yMraor7kvT zL8b9pl=`T$uB+tJOm*i<5idt9jRjH@qSLzR1xYQ&{!#*F> zgCiDI*xI5qs4p#&ws-lbt{%okK-)##@TL}|z5g$7zh8THv`Po-SI7A-^{?> zE!*6jnzsFSRrp?s!7mLRY1#G{LXa!{OysDrPtIfDPxD?*2C0`ammUKE|7zy;y#Y{g z#YZl|1&OunhFi$pnK^0%gtup%O~^R%<=vo%uE8#EqDaBL2zw+e2<-G1ty{Bij9^c> z9ewD*ZJL`;e*9qXcA_F=v2Y4Mg}e=UGsH~@w?o{7;EfQJH&~M#zk0~3cG(!6KV+fW zspCZ8Htb9Dla!2ag>FR_tU^V!T%G0fQfWdbWjB|~6FVt)d#OBuv$7itr3oCA+*&A4 z?4<10B6(sCB{x|lO^8kpOFTa9>BI>27Ahy>gY`KdnT^S0WEDyXDya zIkhTxLpuc7J7?UTlH9yVo}f0a$Ziz~b+h1+B#^tF)kjCR;=9bid(xOQX-0ue_3jKH z5AmywXZJlYQ@j*@m#lyiz<-ad{CY3M6L=^*`={aYAE+nzC?48*wuUm2>z%wK8$NG8 z>#!4@R`O;Ai#ePc!~fAr-B0nOI$mGx`37_9r22)h-Io_=G@7aMDO8ucLD9~=;jB1` z$wZ{Ni~-D|Rf{ZdwMkH)pOA?_cnn+mvWT;VE!Z+JhVKh_IpYJ5ZzU+@EE>AHbG?!0 zs+ItjLCU928Mt>2c^6YO6BVIgDW$(IS@5<%L0a=5Ry=x|DE+AENm@re|Hd4#heNQC znZKA^(?+EE#inzM%%8nu^~4mfK~M{6cnh+GX?aq*6*op3wlq@BR!miLXKR_k=n}%G zu`_K3iN+d{Ol~ojZL=pG0^%y#Lm<0A&K^y=Q1OG~hR5aK(V`x|-K-eTvqH(56fs&1 zhoYZ@p}^@v^L+wM(XyXFFB-UyhumknRju0VCNJot@jV zM(*V&qdl4ZV|p$nn!I_xbT|&Sj6j=|1GA>$a3->7$zcfEFYW9!8dE{R3c9j5uTv`D z$=~$9Ckl!PP)ZC}E~Jx>Tmrpf=t zd`S-u03cTWL!afr!Aiv{XNV-;`6T+OM|`kAL}Eid)Jw0O1kt~mLuPMbxLAnkwAz6O zOwy?aSl+nGR}IqSVBT>QsTp+OH?V*)Fh@WUEyEcGj&TxuCE=SN%Dq_>`kCek^hZQk z3iW9L24QqOkRoz`J4(QSW}T_MWQ_svYRQ|0K{ur(77sz+6E>+OcXS8lMI?$A=Ev^} z+6B8$jvw_6-~kY=$6`wLJ#b;7SK`zU#H2R}?Y$gh3Oz=F_D(lX zUk)dTR(idTUJEL@TVG{DBc^9a#jjkTrj9dRs80Ui$jS$f_oVeJJ@ekX(HB5xs!Cmt zWSVyt_xQ#zj2mp8R#3?J!+Rv(ar6$s*x!XmUXVqBk9)5)6}S zod=ps2Ih`I=GwcHg(zs2ekYc9MT^}|B_#()$@P(2<_0G{f7Xze&JO$lTfaXnS)wy9 zyIrSb#?zI*J{qJK;|vWo2WCrAQEz~$pZqyOBE$oCyAl>W621?|zJIqXSFt<~CPI?X zw;0YPN!RzdFRo_yYTVAsf4jW&Lkr_0x?3S@lBj<_W*8Ks?r~QG)$SrHVz6$LGIpEy z7p17Nuvd_ox$4bFtR%pd0y}nk^CDBG0}HNwt8jfGs>5!VV?&jCe0{?@X}yFyusXCa zP1C9`SVOzn9Pd6DK11Bav`UxikH~kt+EAGdPy2g%IQ$#$^L{sj9kK?dhU7wDiHsCe zjbu@e;HY=ovREl36%iy8tw!{Xzl1n$A{k%%$eO<>#?Q7BD{c_aU6O(iqn4G}G)wK2 zMq*Tf@f4c&m$p!8i5t(NvJar=PPrO7h}u*3q0OjT(rw`h7XHCWFqmq6-7aK6m$Far z?A}mrS4;PJjqT+vZ`FA)ez3_$Lgli!^Dm)Wjp&?fST>&s-_lG$T!DTQK*SZA4OO%o znLZ%0iK3^eZ7KB>Oc{ip2=r%Lp8Il8JK33&v#aa7Ml!MD*^eXsaHe!4KQN}q67))3 z*NOFhRrN!!8A$h&f(RC$Q4L<^N&CM-$v~NGq6fp)~kn`}-$l#UQ66!WJoWFB6tft|EyzcfVS zMO0)8PBQQ(gyF^-FHE4Laxe{GFx@N|8Bw^lErA_k0=6xm3-{kwVm1P55HziTk2!zB z6;nL$^|wV{-+O402{^ta7h5 z%*#t6Tw*3zXCrt3qg`_Zuo4C9Y&|nt(f(xVBHDa)AOYyWlf82!yAWH0~kks^g{~Gbv{k2YSxVro>tRxP9e@r)4GmeSHUBx3F$)? z^-Y>qg|w{#jPXk>xE8PyueHF+_l3;y<+>>A=RO)yS5PpyG<$6E!h`F&kqq)LU1cwx zAHJbL?vf3a&nunM?UigyQ+e1!G(PXjjTO10Dz}HkF;sDm7?8OJpno0fd$&yDTo7#8 zL`eBy`B>_(?qY}k25gj`G)0UdDKcDDzjY$5SSn2evL1l{Sjsp5O9{ak-_rd^& zyYR`P_)@Z^6N?Z$_!aC~XqA8S06wt>!8Lh77x6A`mK?q^0j0wqw5o_OtRC+8Ne0tf zhODEK@kiq#WS-%WLJv=BUg26Jq6J<5=^we|0ZEMphz&G^+(xd^O;qZ-Nu|o&FGuF}=i0 zbOYoTbRVh>d^VS1PVkj*QxFQ5^`Yx+euG#qLukg}Ixn&li)`gT}vR#)l1rVDyy?_7=qgZ5Ri(sf!ELKN?!J@h>3}y>x3nlxH zX=LtL!>{lkrexuul|^*EnN9q^;&P!0T~^+bQ8`%d3g zs_v|Hx%xRNPqi0Xa1U5T_toyhPwAOe2JLXzA-u+N(x0kwifz+Yxe`1yD>dAlKaSMh z7s21IyhF35^*oXEt_QUHpOoJ5`*Tn@G(yPqdtuKv7(A(g_7{f+-2`Oa6;i;9(Rpv_ z#VqZLKvlf40G|#JOqud))fO&DP0bp6)`-^Mp?GCd+~hT)SX}#mM|5GXPSb^txd3c}GlEQr$u^qzM#N~l6a>`kX&k|@+ zUCk>>Y6*D_XHn3P6I)dSA+RqVTWZ*hXeF>0RP>b1`WG9X+H&Ly_pPZ0^Tcl()B-4> z-s^liWl^gp;+F7KMHF+;dhE_=kXs3$Tj}#{pb*U!9Mq!Aq9af-6qUtfCNLm4qP%T{ssuZ!;(B-hKh}8jjyc;PkmR!uJ8{R&OXo-+w>z9aqZP z@3Z(&e@ap>knJ2wON)pC1eL~YOnT0S&Pt>alUh&d>JAGA>r^7A5G1D{rWm3nk|$xw zwY%sm1Pwx4iFQT@H>ktoKu$JeYCNV(q%KIXM}>~V!U#IR8_lF|WbNXnmjivDws6WI zfiXqtrfD@00os{nBO^W@nEg&+egkVV*y^jq|E6WJGeFl~nq7_#C?mBvT>z3iGyEb) z%((Opr64(4ML9B25ms$ASwPtL3xGpxUobeGH-d#CuZCnQz?V_LE7|)Jf^ty1ei6(< z!k7n9AKwZ0+H(yJ%?&h0PHhX@=KOLkbW}s5(~GVOz>dgNfVe{hjxpSFLEMnd>JZ zbCZc33#@Jnc^M_dCUCVxT)AUle8vP|PHu5yO`ybsdE60zTCYqRG}2FHP2lJ)GpBKA znE;WqCLqe^LnQY|0k7S9`mG7TZCn%ZPv)9{%l6Y%=!PN!;M0gIP`6oxtk|Mk3;c&x z_Gk`jE&#xQA>8&^Qw;)?CqeMG)s>rU$sjx5kbUUo04eo_(xY-9U{Me)f1nVv1A@Y3 z%;f)Zux4(^ehDJN-FaG!n_g^YWm(|{po1SnThbCOI)S8}Rh86CjVQy@NzQ9d4ICgK z_4`o-zXKj~$1wvd!f9~qJ|aQ=+>FR53t2XK4PeihBW znpj}p4ymSs3!tKXnZv%B4DT}4V)3w~U@fWUAd+pQD~`FkFSZlWRm!ep;Qex>xNJTv zAhS%57f(7VsRpd(SYVt6-VG6s;FM6;Zw&7!B;**0ccf8$WZLo60t;B+#Xv9sf&~nU zb_FnYoYe;MY+nm*4Cd5;jEsoH0IE_3KJFu;`W9-Uw@j{O7b#OxMX4t9R_S7}iOa(w z1}LeWk{-4&wxk8qzhee8=oZdwU>WgCB|(TNKb-w=rtNU|91WHfs}==tb6 zAucdj2j0z9E2QT}8rSytFyoRjbQJjf1oTefP?YbE{SysDqB;bXdCsKx$@!9ii#k=r zdTm`3akGu_;J{f)Pn`i*%eO~Rgm;&_u?rAz=A{!FT)-GtIe6VN95;u$2PS+TnLma$ zBu<<*`Ba4VyUK5@_XbWvAKUp~pxXU9cnD8R8QF{>>MLi;-Jy6(Gb6O>6{0jDgh2d= zLWSP=Z!mX$h$feiZ0@}}_?$r^RwMhQBWkiVt~Q6LpKg_D!}ehN@E!Q%CAaIt-x%!a z^Vh9pysDCwGwnJ#SBeYbbirwf0h~wEM5tzEhZv>tGlq)My?Rl zLJb`ok|GqS=^?MqeM(O@&iNbccIC8#BN$?23U#lsAkp$60#bnM7zOy~%N#hiop%oF zBN9QOLI0l7z!E(nAFUhC^$9HC92i2yh))rS$QxkJ)X6M+P+twu{7RuF?*}8qYO8EV zUMg#;c~<+CMJ|)(N>&orU(X@a*^-AkgFM}#z&C+0qj-;r;%0|5!G~_`vA|7EpMkU2 zN3k&!(z3wUYbW{Pb_ny|mMcZWh}-uZef+5$i=kaKrLAY+w&DX~_CWE#>!~nyCP#sL zMnEBl4?d@jV#o;EMqGQqFkeoW$$hK9BL64%_CwNr0||Bkt%b$F+RnULn|v2*3LI8j zyF74Q%?e4%`%RA!()zq%tX{BYo30`2n4B4C_-bi8>!Iblr2iP6mZS0 zCmI9!G(yddG)m}hQGq!kUbqRm3#nY{!25eDpzZfx<$J3s_80n;2y1ZyjTEj zvtnX9m7JY^j^383*K%4TJ5Ar+hs%h@aY#@GCA<)4_h8iI!h1~mQYerEEi2M}N0;x< zgDb$}v7z?~P!1mv{0JscVjRE-(GY;cGzquM_yg@}GN^bb1P{Pa+SGocU~HV~;BXQ3 zvq>=wl?*%w3OgIjNE*mRCU7(wOf^+k$j#vu3aH#WKzIEKb=YDheA8#3^qD5kls~Zk z8x*k)@&G&XC8ZV%221)WNE_vNEYTDG6#^0g;||?^vTKYefdn?ItmPIk084yB92om} zDzlj!@c-QqpZC@Yn;J=hfNp#nlAZS_N%g@ z+$l0CbOf=jOAX*pQwsVkL8vGwB#6{}E=3fR{^#Ssx8}d>J^&Le1*7{X4rts?!r>aZ7x9&^dnhksOt7f#b4hrNKrkWzgMjt`f3_3sg6= zXn9koRy*HcVbmAgk?QtM>?YOJ)4#g^MI^fI5I{#JAud>TxXqVOS54La2jfY2KsgfQW)ZH19*sc#wD7HGs0Q+fYW; zf@dUwKLN`bE#vF|m)*Sr$1MLOV3T;pTRq79&pFxEe2kia$qRZx(YdLDvo|K0SaO&h zicIn7)~BtY^U>|L<0K$;tMroNw=Z0kEGHNJj_uegjl4~aV_|EB;Zbsm-5IV;Z}9X< zeZ^AswZaa1Y2b%&JsewrScxt4-i$zpOQJ+nXuhIk*H~~`?wll`uL&i)cD=gry3|r- z;$WPeXI1_DJP3ByHXM9=+Ftqq?yKsX3PLtf5d z5yP!RTyqb_jdI(+rKtrJmBmL$8 zJNOroc;=wg<8`2SXnnvnBAk(7wlu7tHl}b4fkzQPM9!vN=3~_7EH{Xyq{EmDTLx$_ z^*>Fa@=HZgIZP_Vh|D@7WeAiu$-ip`idX0kYd)}tG7QVTdUUT~Qq*}82eVb}Qv%?I zyQ?z~>pEsD+_VGWd0-)wE)K(i>sK>i2G~f~OE*Kex2}ecI2Bynj63&PCI0wt3vD1m ze6^J#YKyLv0G)4$a&`VcLtiMrMIe9`a038h|5Rna?CF3$&$zYy=(d%)a-|EfZU}1> zTPm(o_^|uQis_;&bkO|64eG!-*xDgE^FrZC=wQDOsKf{wFn`kJ*slrGFYq^+Y=9~Q z5ymlvrdQxC4B+;!0l+Oj`wfBR;F!2cNuUhxgl6p%5>d5Ym%-${h_7smDjbp$cmw2s z?_+xqAUYioyM@IA2$Y)qoxD24N;*DdPSEV$17ARp5f*U_)mtzuVYYyY`70q69VtS% zm$OF;G{WD+Ua=z8B~(TpZw%5ujs^+6y$B0jW?b}kr%cfSb_8XD0a^(dXf_;kB4myQ z^K8=q;4Rr0QIpDm=OH2-s?3l^CtjQM;faW+6bYS0VWeQL-8Nb`{a{ zvu!FRPP>zXH>o>q@JJYfY9qS>$B$0IYN0#oz;Nf&4!q<${O?}PGkzO->TRTne7k${ z^*rHL@G@8f92}~EOJvH4AOlqfV&ka|%WAAoySTk;>OPAEr1X`DBXGr7Acl(xALAaR z2>32=_LIOQp|oZpARJ=;ufc?sab1;g&#OsxluC(<&o3o5w}4MN+gh;%^UTWK7is(R zl|ZyLM3I4)Mm;Zm$M}iGD{HDoT}mI%$4{D5S$7wYym{dCs93r&48!-w3OvEcVHY5o z2Fgw0Y0(2x*+{^~a)^Qm$qfhUqPT{*gl~QNSbg|*?N^WSG2O|v!xZF^V0;cpk1vk| z=g1i^m~{Y5U=!0ZJ$!`Cu)XrY6rkN0O%SP~fZ-xq)%)ueUgMT=TkknM+Z5f1v5=JRO zH!U>Ep}Ne=#Skq)*rtQzd_24#y{+sk+N7PI*CW>D$4s@r?4%qvu&iYIkKCq-A@cGFa89tONEZ0}^xz>_x7oU*@q)MF^f4qBr1*Ew{4P#*{J|0{+kI59DAA z*avP|%aQn4cXWC&VsA(DW0e9P+51e&`xtJkwG!KVc2)ucDYx55GHW9ICSL|n_MSW4&>){z+72(W=m6=0Y~s|%J5epW|cGY*woRp>7h{%?RuYOK(M+!Puaee zcn;w(XC1~EM>CT=tsguTKK0#KzU^hN>@8(VNdmY5lmWE?E2w*!Jm&IorTJ^l_k8Y5 zJ^E`NN0sZ>zxn;oXFl_*_MhDT)ymxF*Y8<5`UA{iej~H0(q_yz`NX|)kvzUGOyj>Z znrd6`?LKjFql)}aN4?al>Lp=lZ?1wodRK1Qt)33m@1t2a;n6hz_a$1ltruG)WnC0u zE0}jIQ-ytdMU|1rWqGYW;4y<_MrS67?f{q~shxH-Go!WIMF!qx(XZG6?OGd+&9?T- zK(r?fn%ow-eWpOort5yIt+k*thRe7g7?IANB9|L#>;n~e&8^MrZY|cf?GE)<^zaGb zxkdMWhG&mmu)d!^;Zp&f0WL93{MymYj3%=7CP8OccM(@8STGawLG8g^xOfZ7Sj7d( zv4n#lhHOVsqtY%rfiWgNPHOaL8P@~NDs+l z2L=e4AR`kR9A2+i5SkoDAVWk*Pt^z{hK15x0_HZv2auHqK~T_Hg}_2lAwq`WfcW46 zdx>G2atlZVB6s0YzsU@NR(qU}z0H3{&HUpf^#(~9{N^{%1arQA;_w(Iv7Z+tL**wn z0J1I_y6Q!-u%IC`RHle7M&QWRR`peV@bw z+lnz9Ct?^J_v5R6c%!wWmoYx(T;-;H9g%c#cU5ohXZLC1i+gIvbhPe2yX(rb?D#sJ z>Mm1i>fw#w5{uf?^>3HW*pN4#^Y-;(c~dWf=emujj&ni|(zyaALo=)iK*^2hTwx_$ zVJUKnYLuWN7wNqB-B-Nkw(>3cs1>I@6PNMdLkK7S)?-J_!RJr%M5?7FiMz0WmjyLlHgn!K1?Rxv1JRI?daf@*?&!FIIG&A2xG@gkz7We7$fiP)n*zr zn!RrQ^Hm|j1{^uyuBP_BySvjUaIs-Z!Be!yOrdpNp>l7?)k4Snz!umiLxYl* zN;##Hd5O4zAFvEVWyp0~mkgDvEM&g)CxKUOP_1yH+~7ROfs_epw4Z_GO46}P>9^T^5~!#xasZsx(n!jq(-xgj(iBv98;Gm4%c>PIoDFJ^t@dA_}F!X6HMqAJ*RSy7oY#%7t?9@^1}F{6c9joh}` zF`UE2R29THt$Iyr_ePA%IA=xe(&Ntgd(kGZ=*2Ehk2sC>_+r*7J?`6oHyQ>@OAF{? z1Bdf@+J;ARmkW1!jS@8$mvLh1%Q~M_@`|W)*#QS$=R$|fizqyrE&k_y--o}>y;wH= z^B8uj%i0NsW;f-}j@oZxn*1_Qj4M*q*rXvi) zp3%q!3SFUSx6B0EDQIKx`bY+w+&hd=zmz4!7l$-_3Tw9A6OLkfhpk1~ijdjYF!I1E zOLzk4@U5VbQ&Oyp+o&`!)o!Bzqf`J86pV+&(I`rC6oj!X+yi8SMTIDi3n~&?Knc? z7H-^vVD&8aE*a?M!^?Lslb(ecpZF>NsAnZz6U7@)6qxWtr+k2s*TnhppYcp?-ue*s zUwVn+yN?pCrG@@7ET9z-b6z}~&}mso|NCThzNu&wQVaW_zZL_=P(XVtqtJ!W*a;O+ zQ#Z<5uYr7MdXdwPAI4-BjCi%Iu?9Ag)_fiEg}Mq?yOpC~8-U$K(P8%!oV$>!V*tLLvB` zbrUbO;cQQ7xV0-G2S7=U7-ih-#jZq%9)r^uJ|Me8Jw47~cOlNt4Gr*vmO9%2X}SZGp&2slp4Dxm zghOsIzEnL4#2En`GpC*Vkw+9l)Yolw(c8H>shifN0a&IN45C0|t8{qIauhnRlAXHe z+LhQqfv>k5yqc_m=?aa45k|A%n^0pftm$CFJ~p{y)WU=IzGHwelWF4tdqiOpA0y5m z7=Uh<3rcJ~?Bl{Kt}*&##_E~opG;Lu+bE>ywi^>GHvih7Z_=qoqB|_YMZhj&fji$Le>r`WDlFXZ;AZ*lin?I;W)^4vTK^FC zI+h@RxEHshQ3+d+=cPw*NcdzgWN~Xj7qwOa$%x4Fb8)?kp24BT5E|7;tg~~5Jgo~x zAr7(b3C?4h-2wtpvUnCJowXBaERHKqAi_N^M-8KE)ZM{*-E*VMkm#qsn=f9me8OfPo6sfrMsqvT4--aIYFg6X+e>~5;jiak$B&GZBWU|yVn zt46Wz7R{Np1JZVFuoqkKRA#PI^}s6$>WUX4`oLf>^HrKav!l@{EGZ3X+0_UsSD)?2 zIB9}&IUL}Cph3T*Vt3~OFI=sWPPG}Rua+R&pGG^0TtiqHSU%Of5rPL6%=&v7&f*9p z06}Lz+h`pc-?6Z*B(Nu5ge{m2%GP_I8v;N_QGihETb9x%29oAD=KyH#3A!2I=Q+p2 z2k0tD9R^t1%(Cy^_o5)KD?U%b_NYL8td(!%%hnlxoxxox&v8Cn>6%-AYu7F-Clg#H zoBuvi$mYVsv!YMZ7J@oH(m_U}nGfiTRu}_8>5iz{Y+rAvN@(A3I~S~lk^p&XM#Bl> z)jByn1c6eY^qXMM<^#7ucgw#u`#;T7As-iox1q2d(cJ%?g>sWh*a5L+kUH z0gt!f_eV}G7k+wfj@!c{v4G`#+l8x~{WdgJPh2=Uke}6N!2Soz%$8eYCxJt9Rx2{v z33$KJst0zxa@#uM=|=$F(s1pjG%O9KmcXZkRcXYa$>7^6xy%W?)whO+ips6CP;)hP zhC#J^hZunOU*!vcHs`pyAE06K;jzl2uDxU0BV|mSmm~*)-QnAoIy^R-k zi4UQc2Gj=IQ>~;M<8;X+;p~z;KVO*3BS}L6$TzeGcocNx@vKf{W{CP;Y52Jx-INRe zJhWi!_)9vF+0>0CGAy;7d9snXi*3-dOCwE4VBeK8xd=blR2O#*X{n7FWfcT==1nT{ zJQ80vIaB&!3rr|=F9+9h`=sKtGCc0)3)%Z>RrN4(OGX(8GZwx>Ont+^14CFhkVEfT z{v)KU1YuF_H`pey{;n;=bbPB#5x6<3Nv9t^qHxLL0G0Xcavs_hv}W!$8-mvD-vQ?_ zt%n9sdqd(QK8@*~C8ReNcq8R-?sC!`fXJ93v@`K#K55m^TDAd>a6$ zRe@ZQ+hh;li7r1*5xd5R76!ww0%V$Kb5Kl z0oJ_LVk2U<&8?aL-3ht*Kde`uCHho0a~9ds9pledYrQ*Z*+ek_e?Wl0IBr(PbN{C5 zmCpT7K?*n+Vz^Kh|Y)JVNb=4fX1X> zPBK}d5${FcX9Vp}Ei-!wK^->TLfG7IgN z9=hNb_`!JaW7L7R(Z=>y-eiRKbvvLxp? z@vV~hL=n3jK@{d6G>zl=Hf1&vI_HF5CxXBhNd7UB+pOtMqVmCLCNW-2ovTBLnZpo# znj)GncN{dob% z*B&nd?nLh*_$9YYvn*M@CMYEI4L1SH7ZT86xh^iiViR`%P;ycJSCW~M`)mg?S~Nlh zw|}z_o^2Y%o*D4%VcoT?^WBPp)R@}#%!$yvy#3e)*=a;eCcbxNF7UKAkErT(N^L2> zDfak~qmwNFZqeX)a5(ueA&U6G*o7O?uLVkG?CV7LT!w&Itm9L0>d)e?ZJSJkE8=oW zB$v0P87WP-zW;ga?HMG+Ft5|C9ek#yXt^T;@Ov!^qDV^>_gz z4(j?Uc`hr@kou?7#?ZpN)G?aAf$MQ?Sd8k3VJK+0;hJC0vS+TwBbkyfyu@nYBgAo^@aa0mzA#|pN=YgFKcXr$7CO?;w4s^m&r%+=^B;enWb0uV4A=PWvxu9Pw5z0 zU&s||3Qpjk^4T4}3vAd(CXQ<&KJcuHn~7uM=mR!>fdE1syeK2`$x+hF%aja$zEN96 z2PG|>NW?)f9TqFWz!94Daa`Qq#ABC1e1xB~6cFTEd z*Be#^w0bnjG)(7u3#($2rYq5e@)|N)rhP zWb&ITlj@P|f;5Z?`{FV~5r9qa-JcZlL->NFj)@%Rpz+* z!rVGe8!|Q9nD|ztH17n#>_w3=n0)d`^*V{oQpJ~$Y$!5ijw>d?c#A`UpK;nD{Ya$3 zNyXKCToET4HJmJ&Eg_&{Pi?B2CVDi0Pf&Gz93#fb%zsaQ z;+uNknfS{`iDoXy#%9+s*k)vTT!ct(*9@yv0&h&Fb3zb4;7Yt?bqgFjRbNbFBX^^o+O>^k zw;Nwu?Y<3{@;df9vBF+U#4Yn(WH9c@S4wr+ixly6OSxRVOWn)6)JL2s?0BYwO~1<_ zB7_TGTTv5YHP%!QAp)nty)Jyq1yLS_R>sSz{jLceN-}(?%JB9kW_$~{Z(f@<2;z_l zi4&8OFJ>MU%*v!dRphBDhWGi_vZNqwx(ddmrflRt&XUJ~=x`T+>(5aIOMrNu-QX7{O{tT#&l3uDi_LPiGn6hGH2HgxR zxdY|tM-lAy!HbG6k{}%Z%A+A-llN<(uoOcoDZQF9T_fBRtkAt47@c-cI7E?;e?NMX z00EC&`%C4K^C4UbdhJNoi5(Ouf;>@+ASlqUQW*))_Sg8oL;+gJr8!TrliSKM`)5_3 z@IWYwP86yv|JgQM=rJ-1s1B2OK8q9D(zE$y@rsjus8zQ+^w4bb7x=F(ZkS)I2El7Y z5U_`vED>*Ibra0=^I?-*l@<*-3e5%pUnhURJ+992z1P|UPBi8I=Bn>lfy}#;JqC zF=@#c6&zb|bO}p?kY8;s`QD;!bB!nYTUpwN1KYa&^%G3|S7y5(0StGaZHuL4HU%nY zruH$BZ)i}4a|qeEbWW4Wh07NV7FeyT1Q`)^;zVAcN8xPN?b!-+-G#)C*Gaji7#FsX zw?WjDa#rJl{POK_Q9 zVN16nWI@nzIlyt@}sKx}l);RewK zG?yg^fw;Gr2>%EPj+X1Gh)!2>nlfhcNyIsEjrt^mt+MswTy2^IBUsKQw6&VG`^NE<#jV^4 zS*_c|wxV<==g;GXri>__9Q5$>P$=z=i6?^bhZi&cm%`#Vt{IC=?CDzod|w5`QM%Qh z|A9b|2xt}-tMP)o6x6|7G%02Pk5TKZ9&ru*=~f{{`Vt+;SZ1U~KvcDJx;0GEr7Pj; zBw@8VP+3i|PlARwwP>|=2PHRReMD)1ptKb+UJk+B!(wTsqJ;o#F@@A&#)>g@Jf-Tn zS@}T&1aA7~h+0^xckt*~@W&hiva?_HI!{T*+UU&lv1{?xjRk4~CU+F2w5rQ*lVRNA zuv@zgPoOz*pYqz{;1&e@Ei1?9@7Bq-nUzrpfrGT(bdBV8w$@p0XD1jx(-cfMAUlS; zI5hJ`!IUc0cm*=B5i)IebH(=cdl~l{?#ro=HCt;KO3~k4VIUdS)l7%G?GX54u1b+- zL{KTuUE~U)zm8`*eJ#9K?j8vvHJjqsI&Ew-EfIFu&L}Nd;YmA3-2;$mLJz4tu^<(t zWri?)niDc*mKWmV2H@=dA?ssaFM9+;lEUcr7jR|Q zGmi%<6A0Y79E%BD+tHwED#d^1nIM~5tO54QCbK)_Y<-yGdmS+D#{I5u4r7V=`~dd0 zQLdYuG@Q!ZL(;xHJXz;kec0qoAPI{;RhvuDU|~&9=0U1nn1`bU;)|8M)%u3*J*xO&F+*-r_W z`%A|ETQ5x^PuSxzLJwO4Ie+PX0EtYZu_uE0d@`aZLA8K<8d{{w2qJt^+Lv79BmC{T z+{e>=+R!rmMpA=As>&1dXP#DR%gj$-6{f|KZcVe^e6}0SJ zdhW_0l=za(KaB-pjLl0e*;62DqD{bfG0AM%mFr2`)O?)C;j7CNqr{3cNO%=>_X(Yi zYWJd2ebgI1ALbpS18(=Eg*==>M-aMz-TCdh$nKsVon?hox&Sos!|z{$WY)A?amW8t z7Coc=Bt4keGYu6my;ZqG5N34ToM23KM*MvNV$#d$(#yV(xyi{iAnwRZ&oPG?*CTvp_EZ#Qw{Q?sfaziFudI$ zIYIEVtU7*Pf>J|O&nB^LBs=vF$Q2R{$U5+c)7}(RFpED>1`m9Mg|M&4@iTAo^GD{*QyVh2mCXyW65Ek)*fz-ZCUiWNAW0!JI2m)@h(k`h>if*| zib4|Qz|=WfXUE4*lgV8OwZ7f3>3V-8b~qCaBUqKQ{j|FI(15%Znid?vH=od?!Dq?8 z%)?knG`7WiB*kxW+E~PgWSx$W_a*pHdP>>hCTe-Ajvgr+I2ej6PtuVSb?5_A`Lw)7 zRk@-A9*_7wpYbz0yB}IlHwfo|m9@|q(S@b6Nf>SN9bK*)m4AzbPe6u%2Reg7ax{)l zTdBeZCSMEMn8BF&)fy3d_3Th{S6edfZD8J1BC6U|AI`VTF~-f>3?3d?@{(ifw2b|U z!Ka_}H*4;AX}T}QucUuFN2wTro@>T9-5N~?(D!@kdB2s^cdG0GIrr#=_I`Na zBa<0%oyYul_8%`t#J^taaCh;(us8njMj)c<*NY~)wDWu$5c%uxR{U(ap#!}Yagvs) zm@UGDo_x$h4K}`Mdq-wjuczArcmbU|Yk<#fczC1Ypa)CAkL`M9ZRJ&a`43Dcl^NOp zN>gh!%tMiZ;Ui^hP#nFYQ@ImX(GLq8xh3Fz4~u1PsIBtU7H|GMp9y0zv{Z0&E;av*O>AMHB928N5@XBaknfXYU(P5j7`qNONnMmP+G| zn}x1T#v?1LJi-=6RRg!3&E|^5Vlmna7K6nYkbn?@3szBKET=&Vt#pxuIQGV!^nqgn;poZEno5Sj^9ouHp)Z=bJt+Y+ooPHTV^od2EsS$OeQz#U= zgi@g&Xx*86&?b$cFW^*`cTlDlgf(K7Y!TZb0IFsJM(YXlX=AnD8r!p(O`Qknn%NHEdTOcW$km~inei3r?@;+2B#oJc_GC|!hrMH=H^BEm!jAc_SzD!3--B1Cw- zS}qGNm&C0~;wHg+-A*Vdz$AJUC z1BqTsA|@fh<$4J(3S$KUu&0{^m&;^;*DDqkQ^KAmV#fEld`f_2)nqiCJJbtAq*y!8 z5O+)R;@HBr+_;6zQM0g`srKxt95S78nd-A?I+akFx6Edt=)pjYEkZpWcb3Mc+E+Vj zSyU13;1%`RzAC$olVNjFkr}J@)C#htR^FY_nC2}-O`&ZNJF15A+aFpHb;dFS?$uQe zYj!_bu-Q?H6}FQmllaWzEmhbPOvgNVPj;}AUrINOD5dD5uqSX$Ou$|ht$*>r$bcp~ z-PTNBEgWE=wFs5DRUy@>rPQRox9-H9u~nv>vTFCV zGrBJrcs)(E5^Z#As7Wh_oq>zlx3$BzRcWgY)MWRuxqs9Q8>6Kjw`^O0P_>h$!5}?h zJLJ#_e@;7%_3zaOGQ9*}DCUMZm^F!eS&3E-`_;;}={MpWy87h>Lx@2A^r3TEt+Z#H zt#T)K(Au$w+e9a6B)x2E=1zBCR~Q3uZK_7v!-n^eCekQVBQ;SA>7?$UGw4{?XdMlt zar9C9=$tm_$$im5x(KsK7pHHu20hdqG*Z7BZo7_YU(;w|P6_8+a6%%xv<7iSSlwah zln^xmDK@W?;aygcn~nhs{qci_p5=MI$d|n4cT^xA5bgOu|MSN8;c)xHKD!UXLLdLk z%4~58l$L}n?Xe!8^EXpcA0yQwf2HDKKBhHUNgjTjZ+WgD|4UMxI1-2XmmHA~`|O*% z>`7kOdc4eUy!-86_}uH3zkA#U-}6Hr-2d8=tUZnvDYsg&b)$e`o zai6}3Q<(MZ^Zp})@AqBzC(jBWeT~of+y8TZ-2Hz2`D=giBV7127sst|962JV5@u>& z_hqQz$U*$5T-a+r8m1Mk0Bs0>CJMIM4Q^jX)?Grb0cUv-Z;y%2{J8&gWx+5-0 zi{+xOhD6Ktg2iBD@+jK@d1|7~oI(|Ml<9;xnP^M8nG(>o#Ue!5hjlZ!Q2XQ_T+TOS zv?Dp2Zo_f#5j{;G93&DB{f&#mpS+}H{Z==_?<9HP## zim&7Zb9&q*hjqrup%Z>%8vMk;OD=+A<08++LL3M8SWgt-I=6+$GxAj>(r})++l{jI zK#@4_X|e98Ln3c&^7=!Q_(v;jW%!M6tSfMhIa&k9uC0niKCf{X;033(I0LOPRa+VN z#YN}*QDb9H%BH>)WW&Sh-1!94j*w!?!8Ut{X-Asjs7ya~Q=S&4C&**uL8iGBmu>`Q z`52LS8Fnd4kTXrw-g8uFHE+#tCpbV5fE%BjWKJ_DDrZCiHdaIj=+<{p$tBRf(&lgzNtsPzwhD(KRm-PxCVQ-^{Hb|=?nkwNSpVwGqA z(35&oa5ZXImYvy;;+I}$a$j8B3ex&iryNlaa$8!aOI9$q!j{efLaXbvMV-ZMc(d%W zI7%F&x0W0bT--5zL$r{W(jz7F;=L6DJT#MT3NWj_;L;ltTA4B zuDav&8`UY-_PE#dx4-<_n0MD*z6&>e9VYeosjmLfP@X6qv#w%-T=r^w!{MLoPIT>z z$#F(C`%!sHVqe@_hh|f*O&6QAO(XG$TXS_x5|8u`i*=6;7N64y3! zQi9~QgWqr>Rnn4!hbM@qFS_Wmzj~_|@mcTmO~3TbCwk;-cqKo28;?<)csd?$cia7i z=Y_1CGS}QFZX9`#zbFs&HHSk7YF}e#S+NBzL^H&b)zK;`^-2+;U?|whv7Y8r*F;G+6XFVNWKr>=`&G43R8N*+h~|>QBZf?aJ8OvvhDra+Kv<6pPg1D- z&NOHY5wI{;Un2P=&F~eLpDgftg(I*|RF{MQU_x#e3x@DfyN=a+9Xj~)xQWsj}lEWT)SzD?+T;3zuj=kT%OE$8FwRyep zW0<$G5w(c&2B&Xc04v-JK3n%38z0w~9{4%LB1j{Zl(wo6D5l$?LdH}flX1(I5o(Vo zLe{r42P9IL%B|0e^lhi18pUG3w+q{@W^?A3&z?I{YlL`Q5D^7J$`{)ziVzbWgAv9N zd4mrX3Ng~T{c?ZxN++2%nB5#RK!QRIM@^?%C1DiupekU}+t$s_|RBva-L} z5%lvvakd2t4Vwd6P1li0LovmA*!o}Sg>NOn@v)QM|-ew z{?XI+-2nm@nS!6ID_pUg%_fF0eSypcek`eaCe@(WR7%T9+qp9rZ1elyFR?Jl@Ak~qy*pwC>wsCapssxIPK<5pJr zw6=ivSO%IDh0{2>0eG9`Q)l;!2V}{u@O<#&XPR_w`w;nqNXCEAcQ^~)Ybc@k+&sRF zV7xtmT=mlg_Q!z^9ms1ce@4DL1V3J&zHa-|iyrlP=76z4d)bNQd#h56zkJdpIT?OS z=cd?<^8xYwJ0_tW#9Xids>pMYAD_v>3+N_+B&uRjb!#8Wq5^=4dbVGkqx+8_8rS2j z>|8CzkgXAtk&IdlSoAIRDz;F!TfDp@$-U8c8(J$#mAtnw&pjs4 z4(@3({)#@slXYpg&FgHSagNif*DYVoOAVtt_1rt8@cZ&7E{JGQbh z4;SkQlAu+y5bb|4g&L6H7c6w69wO8Vow)stJ15v19WkmaWd>1USzLTr?(UgGFRiV7N8yGvx3nN2tr7Ut}9e_1c&I+srI@?oyw9CT;mQrFTZ!Sq0MG2rA{CC0Ybx21=T zbd_rZTR+r+3pwTQ1Gh|;wUkj&$%SMY!}`sTSQ!~KmxJS5A9ByeSvV! zmL;B-W3B3z)60GEpm)AQ-x%t0&4KDaoCJ$SbuxP_3!{m@QZ#l1+svdm*>fD)1uaHT z8rX}ro0^o}eL)S6yi39xlmb7V9qo(%2?4|ulk=M9d{De=pU_2r-!63t(rEd(jR6=S zw`rl^#ldCh>W*%^3D!wtkIH_mecc<>(UZk`(P#qV0EPWok%qO73}f~3yER*$c|nR zC`s83Ezr&{v)~`f$NQ<~t^UD+yhV5?6<)*k$Z)SmPZsCmKsFI5MV=c=hh=mf9&~pZBkNQn^YezE7~Hw=aVoZ*o-C z{D)euC8hU4p175Gw;$nl_xx}YpmQ1XEq81PkWx^gqbDW%(UA!%%5JjotlxD9#X3O; zq{p>bu;XYQ)L!9m+d1+CF`--(>jZH$d_9X^P@a4V-4B(=Vrl-1(&JWKr#zbwXq>C( zktak`iv+MhdRf!qzb5hS!x@1Q3a4n{$71oKa6tUg#THGw`rp!e4z?}VyN7eaSajg4vGZH#yVG>P1R40=5QAfe1qCi*-CBuT~q zCf9?EQxGi=HNLhvU{Oj&rI9ov`;BE%`WlpB;U{G7hEX1^B^a3PPm_YgS*XR6RZI+% zuUqZ;ukBT2NbZ$?a$Fy~ub8L>*@3OYoOYQ{XkSt4K(ZVEkNINswzg-)c+i+yUW9@c zjMY^LrMg?WO84B8r4I2jsvhURbIyB~;@^1rI0aobD{E9Eu`|w;6|zak4Otwahhbqj zK&*nXsbS+3v>;;*o2iXtz!WL-5@CNUh@dO8q|Ucs$|5auL0IVnB(cUolj(Q6Pmf1J zIE{+iPKV5HkZ_%VmEz^#W%3*B(j+ibBOF%+fM*-JDf$mMa4+p2`0zR$b!7jVCGKl# zB{6Ih)>;FeWc4`w20>JE<74_B+;33@ON#?A_TPxo0#|dd>e}r}E<7ZGg?fCkVJ7eb z@g>pmq%m?(wj&BG7Erc#?}z! z74Q|l`Z{TQqBZ1pre5Y3B7~jp-v(oIcy9su1Bt~(uR`NP<&sDQjVWP&VC@9`N4w~D z9Hw@!hLd^MWKMg6*={Gs$_^k^jwUaELBA><#53i`a;a@LGdSPyf(gYmvr%sV=6bft zw=B0o*We=2jgmo%QKRIcI>0A2mJuuh*Wkrv$PE1?tG^^4K^*@oo}_B}qbOfvxwmxG z?nY#Bg+Y_oNj z?mPPpQ*)PxiR`Zm6AA|>RH$-HMQIcV=?gi#_KVQN8<*X+!oWF`g(tSgiPn~Q+rsoZ z9O4mJqLw!%k`~{-VAZJS>o=@x`W)w`Y{EtzGXwz*($~|1CK4dbUNneMWe;vsp#tC_ z1sLF)%`bUU(6yu1r=RQFKpd@7igFgHL}7dthZNF!83BRzwOxq+S&%Dazhz%R0(5}m zFPbN6Ynj~$(8(0$g-uWmv&_=>cR%89P$t@b&m*>=Ykq`-p8MPfjf8FPTjJoxG6%jc zCDeV#_=N{ zJ@lJqZ#&%=hpS(hn_COvg>^LDIT)@yj5RND_b|CxI+4cbVYzlDshVYWQAYA%+m`hN z?4!{*K_ZsI&l`c_RXCPi>cp@Y5g8v>(-l(V>x^P`G+V zy&&8;#AHh-O1T=b)hC2q75zL>;S807Zw$|7CM1=m9F1`aVL12CK&OCe-y;}B)*xer zdBDd6qs6el-d-2K&<}RkYY*4vQg-3ykT;NUiP8|7jS$U@vP*??fuZDE`_avJ#YS>W zhfy_3y3Bu5Sm4!LETWys86-#&BjtR3_E!o~wQrymHHBjoc_Ai;+AS|BM6dz;`&b4B zYJR6p(Xg&XpXOEZBOtg&7yX+;G4*MrIr|hN0b~^F==S<;VnJNMQibpFRW-*Hgn2Qe_l8MqT?r z7vveN;uDxZvjZ@Rm6ARi8(O1EuCJabV%#|R1lpZ`FB!*)Zl|HmW~Z{@&Ryk?P$wO+ zez27(b!UG(-M*bLikD+vd9;S~nH)%W7`ms~z zNF%c@7CmC zy~}=BIZ%C*r%!1_{E`GloY#NP2WW z)Y*w5n}}GPFPGta#YyeZuVq!jwo=m>&95Zx0MQf?&l-rG?w9qV3&9Y0L1FshZe>+2 zoc^oV3~L>n4t*ZzYm8+C#F!)dtdnbrb-pVyy_cmMgE3qC=0MmW?sAy1=PdQXLSq>U zNs8aSRxrWoi$T38Bu$bFU@v8%CnjTgl7^JkAIXfI4#S@15hI@WPY8Sur2t13i}TP@ zW4-m%F!Qg9^<;RDic@YMYL36w3RYWE4*2N`gBM2H?=Lj6)?I$gF^Ri4aceI%{sz4j zTAg)@Hu@~Vf(TMLaYXZ(z*@S_bXsYiu~f>0t}QY9M67^Aoh%6jooo!E9QdHl=S2Cq zwuj2wJ;JXj7M_y+P#EXXD#qX=It*FQ)wB{7E=>okcG+86vgM%#L74VGePETHB9so= zo1o(IA07}#K)>#QlmfqMFsYDfpj(v*_E^e1v>v1Ad)3G`z1Kni>Hp|1S@-^5tTzkw zKh0Wog=Kk?G5r!A{k;xnNuIL4fa#-)x z&F~k-_q!`hDpkvVO8OF%yQn4PidR(!zvdt{D&@~GP_}F;;dWceBhso~-DtuZKJy$4 zQ0$m0o1DQgLpgj0&qV6U4a_Ytjj?444%S=&=CM zm)`vGooFGG-@o67GQFR|$-Mq$30O_##VwzkNQZ{>e=^Gc_YZ;3 zq*3(Z^FMp4Y*WyS~pYnY;q?H8-k60Id%JM$nu)NAQLfdI_5@|nGV#oh zznqRfGDQj=LX?PwK5<5#Or>k$RjMACtXp&2GAVYGFj*W4lRNA5^!jd_DvzIEKSt;? zx0tv{*uSuB*F+cb27$s5WqL$m|94o0gah#PX=?-40>dyo~JOc#Kug9{r$z0~-CTL`h29a@y!kcd-8x^S7K_(i9cbu9p~VDTNn^ zk|Aa;*I!+qa-jMRG#&Xh3kDs!zK05#ZpKfG7%9RuY~LCYj_vqHa=t!K?GSNtjOeFf zyg1U#(pDx6U<;vFum)y1UV|qg_Yjx8s%J9x$OC;6aJxt} zz(t~y0CzE>SXY_Pe;IU!kA(V)mj*g{3{ZgBaY5b&dr3=o4WH{oq$Azd@(S>_gra8i zyNDCBLyZjQ&A&+Vx>i!pg`>cu+!=#b*}?`|`Px_&TxThZjG98sqh{=Y_K61YYczOa zO2iIbyTpo)btqC@878kvu{W3o@`YaI& z7H!$SEtoyslU_ZrkSr1^p_D)s+KFw0T?gTPm^^MB5LUTlTC|xNsO1X}x)RM;aVIdc zmWHLmK1NK+{7LB83>{a~_+XkG^*{_e4LdCA`l#ESg)4KF&L;ouI-+AME!nRNt|S|( z^6;mR>xv9NoxQ*s(EArcRooaS_`HMckqmYG+DuKetT8MAiM$D{17q0$ltE2P{0mBclS8ia}(+sd*$$f(nIU@XGH3VerM>dH4Re)S8ZZsD91o-vML zmN9L!`Ic?osj0CFqZgfHms8Ie<`kAO$>piEhEc>cXK>0u4{8(xPwI(zcDZEU=<)}P z)DbHl@$=22Pw!mf6stIdQI%)XHUa@?ikif)$KK$u0lC>nEj95~OHSiHa_tOI99p*K z{=m48{xRwWm*ARRCV7k{#{x7C-4qo~;@4v@G~i9p_i~m5X+e(~+@FlX6IiOwIrcD0 z;=<)76jhyVE-@aRvx&`%A8n%Yt3S(rzn{Kx?=BUaZ#li^5uV}US++6i^bb7zO69D% zgHF*gj5^0H46}^WcT%eEtB)uiUV(E5rCj`I6O>xbgI==C^vyZU;wq;n9peSO;wjS{ z+_(G`O9AX#7$iI7B8_Sfmd&?3;<6>JEJ5)O&iaSZ zkBoB(L}w@v4d<5VxRH8W0v1Ce?GB~UVVxMb@x|k{2v8r=C2ofeF`k^L5=sMSD=K5S zBO$K~@|N$$7P6I+ArBj}682+9EK+rlrEri1F_}W2oxl>23NBV3q-sa2U{gVk^7fF& zPFn}tU|-8%V+-5XM%V=l+tx-{2 ze8gsKXE83~D^%ooU<;s166NvKgP!IyEB+QhwBNnUQ(WdJp3bh~CU8hn?Kx+0n-9kY zmwC;Dr@4pE`~yi0gvY!?c-bEY3MXMK7#rYDxI~<`({n_FaoORkV_es%-3tUoHmF=h zk108sDJX&qd(E04&x%m%kF6@gW6oLS?TfFv}`6YNbNFyGR4hAN`69^AAfaY(xV zR&6n&FfZg$F?*lL3CyZ2GC7n2J#0)XdQ)d~yGGe%iBM)2o=?*L&^10)j#}hD(%e`X zna~RXn6>CDOTS4d_ruNj|Zn%R^osYRJCw z6O<>3R`hTSld&U>Ag~Jp(N7ys(}GQts7Cc%CsRA7cApN?r^$UH=913DzqmjOW2p^b zm56=*(_^ZXin$!JnmB>*{}(2FK+**iAs#^#AiMklUL0;}t3PRb~v=HJkp)b81WAnl4o)|v%= z6?DY2>7lOS7W3#7PzJO=@90px0OYzL z0fR;Yf;HGP4YNtvB^55;HxIIGn-fEat5xGE92Xec=@94GaA3ONCs{SvDC@?u8X%Im zbu#Zl0hC5shUYiNk`t;d5*UU2S(f;U_K z&>@l?G$QRRce1y%gUbz-p$PY!$xjfjsqmylKT@p|K5kc*{zAz?suObviSlv&B z_mTOFJhaqV?JUxQCCuHAd)1j=l!J(L_5CO1hJy=15pwJ1*@IdHlE88{Pg$ENW7=_foKl$(4P!~XWEv|+kfw6T^vElu=k>D%TsL^t_l?@OkY1sD7t0vyI{xpHBfc<9$YKOO1YFz8ZmkW_r%51GPb_ZlDX%kbA6 zTaw{FDQwr41`|E3&^v7!5wW`1d#M$vY;D0 z<+(R#MAAXV^Mf!Zl@&vy?-GtyRiYi84QMQ* zu5XSvW_Nito#lyUAF@7WqS_Z3jnJ-$7T?RD@aKRzrVa_g&cmV;p&qmV^DV3c{oS30 z4T+t_PapyYeW7k(9Y>k_5_Dqm>lE*Dta=hkvVp)Z>FRlq z%Vis3Du9gW!CC#gFvb}XP?y}fn4}iVa}fF&6>A=u9mqH_=hQ2(93jA4Nv^?k4SNId z*737B)YIJ{wO5Y^r{NE-E_%*e=&I3`WHp&opcim@_bCNx)X2gu$GpXv-EmGmA6=pH z^`^4Vm^ZQsFg61$F>P48vS{p}F-l;54Mx&7z&zvAu7*f(8$&k9ltSUgYGQ8BjszhW zCYF^&HA&N05xll=LuK8hI`Op#CmH)&EOA+1MBa3DoCugPC+DscsB}Fr{89iWeaA=e z>?j@58F>fWQd~r+#>I6;L`KGit{4wa;I3|JRR{gZqo42r4>dqyN~NOvAu4 z@C-Zy&%iVA3_JtRz%%gt(&okhzyQJk7Z+%OTo+j&+G&eUZu4YGptvTAOZ52gbl9EQ z8f9xHSPUb^WQ`dXHxt2Zm3+2_!rJVFl`wiU_F_blK+tAFy3LhoWy$9wt!{~R+7?Ix z#|>~_Op17~3ZZYsrQPgZ4?cvu&>26kje#E}(Q)vm&z<=E0{j4kVxC7&?F zcI;_o$%}-9hZ{3c9xK*uJgvnG%ds1yQ6N}i+Ed8ekZ>1f*qpHE3wb`MU=Dm!WfN`) zal)NYLkJY!ggBv2m=jCnla+547tLI=6b?7DxnqUg8e?N@cUC#z&smLEbY3o(8d-{_ zqH^I`+ID9IHLuhTIpy{7WH3|ZTS=i#Hn5^&vBv*APIIPV*j{E&1+AwZ^3k6dMC(l& zk;!BALVJnjMk85(?}Nq@AcY4&0BVDFx4aFpLcTD`papFeCo*JQa6X)Ct*(lN>?qr?}Zw#1HD6V~x#Pi%@^vAspHDgqW^ zBAMKj;dw+aMrYkFhD2nYLs%#N%o+ZSqCYrjswRWaK>qRRF;9mbbFfa1Z7;4JM1ePG z$TA|I;XeE6Bcd^xv`;+aD%nbu*@4uKdT-L2qV=EzBOifFkx|B$*&@ZZ9$BK-*tUf#W*BELccc7%*GXf~*6GttM}aQ3@1_ zU(w*01(qb8D2RcXYeUeL!so1xTDzXMI8duD#sWLGRxd^qJEX2IMwvTNuP=;YI9FG% z$HO?LsxL;%IHNjM_A(CVGqWH7J3z$0(+>JjTz_EkAuxz)n!8a=GuV&G{zi$bvw0DwQc##mHH}ok~D=h`vxb&3Yy}xNw96NXUev?5C+yP>7nfbnh(i$ zrKGs;8C_sFrIIiZNyhX#?7~sj*X%kB8k?0ga zf>3vwsPH)I{+|1Qnr$1O7MF`{iftIdkaFK+b)66f%+ z>J7oUm_fze8LV~TrxPhg0P#)?%icdUBUtVNuqsdnZd_5a6S7tYzc1gw3htHVUn%mO z-3t}i1#8HlP}SomMv-w!I7muBOsmFBa^%c!PzC=<@?VsxmN{kiLXS6r4K`pTD~N!w zW77AzmPLXvtqe2d!JS{=4DOL;Us-OB!K+XLr#@niud439YS~(gZ?>9}Q}a}wt#C^Iw2_mMF^tJRseH$@8oXYBK3m%%CLP4+>0S-XCbBDmZE~`gjBA33W*wMlyODI zG3ZK>i&#g+KRp8Z-q^Wd00B=b0^0kb4JSn)HM54u37iR7WhDF&lCUXUDO2p-2D#BN zLaGmTX;hpTQX7q@HvRON}Dn)La{R-6ok9# zug4|-+VI10d(P{ZUSLxU61@jm(i9^Q83TznbzC~Kr(0)vf?I_fgH(y0q2+*Nd|j8% z?|sBM7M_8|_P8$pw8r_j*3_4-8&nNb6?eHB3wa@9G?+HzV1<#raWl)cfCLpe@PK7Qn> zwvaY&*Q*M(!yn3vKGhRy!|it^xtec>JCF78NIHNeq|_Hd=S3dB0T>Et(e~wPOBRTa z9%ueay(mWT^Af3(_PhK)k51E5xUWAlf2J@j?0g!K${RXe8lwS!V+QtGL@u=HP(y|R zz_V-FKl%{c27-w|7ZFgMy!*n&I(`Wt*hNi)jnf2GL`BS zkkdaQxC)bM(DAMCo1^*xDO6m|HxDitz>~p4-qV=-jk}1Ft*qSJygB|m(-Pad1|M~J z<=x*3NUe!Zx@J9W1BVQA#OTt0;}(*YMo!JxUhwaH&ba3vBM(9HcP(($n@Z@gwawuH zpBKtKK0Y5tuZ;Tmv&88_uXG*Y>^q860Ly-k7)1)9$ubv~h>?t{f8@SbwLYg5B~rB{ zSnG9jH#8L}oN&LwDH4cJ6M5CFdx2n$@ys_HL)Ste<~Eh|&Y}(pjYgLJD1yeW0G{mrRLH&4az=z8u`RWFS}E+DW=%Rahu>TR(1@ zE$~D~bWB0l7F<#mN0*l)9;AbLST~rX`OM5oxvB|uT&-nQtdLiP4`(rQ6ff`r-2u%3 zx7%)~opu<^XFg-MUT)80Pjec(_41kL&Xb#=dCqe#JMJ~yWtaW+oY#DEWS@O@ANO&a z+uZ!@J$Uq(*}Ud8KYzb-fBwA7I@zZGJFhtp#5&ogvSCp^&XrZD2_|Y zn2kxt)N5*rF)<;TioaoM>tvgficS3=!d{c^HVgG1H>dsQL9RQHW6VNPo`~=4)?YX8 zD#mnlTsu1^4<4^t&2I7Vz?P8qc-vtQa-9>hcp`dEt+P4Bct~lPEE2Q{X_;njWHvK1 z=S73zoI7GQciE%U*e7kb?6GH$Ph`oWu4~lQRWi$F*(p_)%T!BC%4(Uyf`#hJl`5su z%5Je!EYy-sinZcIXN%}k%wpLo7Rnx#gjP~&`ovU~q?M>DOJ$vG6ABa-X`y;VDLP{k zm10^btHdTzvQOyIsI)_s%qZ%md8NnNrFm5;&T>99%F$|EjWMGQH6E2vd?*y6RkBg6 zl3lV<7%4oW$0x%(LyxwJ3fqdFAM_~14xixAC%j|~bB0BL2M46xk#T2TFh*lkqqt?SRyo#(?CHu>8fD$GY*#ZT98UMsZnV>Onnz|w%;k~TQeD-gGI>moMx?RN;kBOSO}>8pl3yK<<-==z zy{cT7Ei}J={npo~Pnm{y@JtJ1e5%MaiG^#PKK<6xvz*F!{8C8#@L7)K>6d(MBt~|f z>QlGk*Q@%-*ggD~uS%YEtXr}9Bu~HfBu_7o>`C^-tsT|-dyyZx5geNGsM0ByLAB6! zCAxtaiC(EF6&i}<@ek*IRK&HZT3^%}9F?nDCBgueh}vqB>ZDGoS2Q&rK}Lp7n37gX zn-3X6Qf#VX<;tWnkRTxxs4H1Ynj>*_Vi#hgeD|B*90qgR1Gg2{w;BF*5Ap`%snvQo zsR+B>(@expuoNkryctiY_F-xuNe1@CaZ=yIn2{LBYvU~QxCjez68GopQykO!Qpx6< z=9%%m>u$TbG_*T=T3?5Qw+P8o>eiH6y3 z5f62c5eNI#{9|OldTA_nVN7Hu?y+_!x~FHf>#Oq7u7Nm8$al-y5L>N#W9|AFw?!S^ALF*5T4YaW z(t>K?bB=#7ZoNOov5tLYQGA(Q=d#Ttl{;(Gcz3kxOoXntcZ;y9<>GK|MOReoRUXws z8(KA6WlvW+5i>ow#7$H~lxin~GIcxLEyB6*Th8SEp5)4BdDc@U&wBdx>s7XS$~j+h zE64hJD>k2g>r5_my_DUzDP*lt;_XRxVx~)xN&__ucyP7&;l@%18N!$xG&B&PgBvn8 zVn9$qOb9VCIb>+q;C%ptg929ApreKZglt{_DL5&hfrbZqMg|8S1eiK{h;g7s3=U*W zjtFF434|a6Q^SP`Xh;wgK~#+lFpyzE1s&82RLlSYk;aV&j8;$~1r$y&p#%~}5W#^F z{vdQTkTPH{FqOjsKp}vT;{y*m;9vsq%cFk_yDs5%#4@e3(zHfiQ(mi7X@5W9VuE!!GTK?E-^Vk=oV0%MP~{Wd5v!H z4qc)PBw7+#O*PRIK3n^0gpONU=!%n?S6C02&&}N*KC6=`Ow>6mMrtAT{xFc2oW)nX zHjeL4bJ{|=Awv%G5d-fJ5F(KC?pzxawGqQE0;q>9U7toGr+H2K2rV;+Rzz(jbi4NH zIO^_PTat-7m&US?&^}t6#6gbg+>Vo+4^~A37hmSS;3Kse2Up3R~$OGp54Q zthKz#y7I(HDp2i{G82wsVEgp=H-p_cseSmDgaweSsDyPWf5VCZ1EMG?r9(6T5KgqA zA>mU(K}3NP0bv+831OocKUu^c}xnWm$7wW>!k3mcNBWfpEb5^3mB}QGS3^c~7F} z=0A(zUX$}TLH{m9lsi$e&RLqA49I|Yw?jS=h6)Oc^5Pm1hsv_&36eXr-1Kw?JUIoo zyxQM0i3CPO=WrCUbwv$6bmnSDtMP<);i4KBK4Lb3YtZKvfXo1lkqgqdB)*G`=pcig zZuz<0^$RTMuWdHdBII(mJT}=oV2}p^2c~rXt_Xe zPbUR7SSxRN4%)jNWcqZ@$0bK#O<3*$0F&g#2iln0E;5I9ZUrA!s0n)e44$~j_jT(w zlMeUVyTJv0;=Ug021N)-h|iK7{#jNnsXO&AXQ*c9u4ea#p9e^lS72as^ig`ch}PYO zCh`8BUeew@x3cF-oKH@-7!lXZ>bJgEA?O?Yoy#gvZ2n+QDu7;vG}kT#ie|ghvG(0v z1YeO2FQ|Bfo~wTR`?pz!PdAe026#)iK3I1vohCjiy6j=Oee!3F*Rf#c@h z)dW(m(<1fAk+Sjm%l%!TN=muR6PVj~WV3xsOww;aGo%NE5}bg3Z@UE=Di&DGx~37mf1RK$7z<@-kT`^tXXQd;Hco9)T=E zl=1}4f%o4R*Z_{TF78Dyc@BfX)-xgB=&J}WkBsrO+FWQi?>LY$sD9c6zi93`54JMv ziI(6$@&09isR*95vv*YA<5xXe{n*%!z7#FeKM)i}1e;v$hZa#jj(}c$@u&C#1k0uv9Cd$!OsTLISn(v&>{RW0WUAwAQ?RXGJ*O658#>ZAZ0Dzt(=xR9#*rM5fcI;B&wPSR$3~#yr zEh32rz7he=XZ+Y#(FRjoaTByYx|4GCm%*lW3(07RXKIkVVX(Z^SmcS6w^AYp;*9{|AtjkYI%Xo^EP<& z(r{N2U~H<;1&VZop8qs$9uxP}DR2~EnbA&fZ@@&3ApbM{Hrm#flWBCuZSWZh|2-*o)1u_wcTuZ{2 zJMg0w6$GGsA4^oD9+4z%=OVE^w9i21R6yr!5tM9_*F*NnQN#CfSBlV%p;l2$EkeX% zKVcL~L$x%spkeBG7I5g1IJ8r(C}YrmeB`8GMYgI01xsKsgyJJi?$1rZ+aSH@Lr@Xs zhT|F|(kYUM<{s~P7)&&ixI@YA7G_OIKn4v!qeZTt7fy5&;zPXy`-9Dx92-d~cEH9H zZgMse`|LBC(jsg;%`YFHvHN9Rt?CIsKbJ+mpoSbTZDuDa&M@}o4Ex2j(v1sTpJ$jP zVuJRQ6xqcvK8@?ycC1DnzQyfebb1T$h(I?ID2PKD7z)!KKZ~S#yXd2G%ehtAHX>a& z9p+(K@a4|0mX9+CAO?y`Zq5*gX6#c{2mIgl9)y`38seb*QCxzQ@l7Q4B!~*CJ-Y}^ z4nZ_Ya63PuQzq&#f{wNx^&wV(FHrleQ=1CM@CvJ6DqO%N8YShy3A4Vl$5ju7>QdYA zn4+>kR%~%r4L~-7`IK0+=nZZZ=?jjDy0oD zKP?>mloLV|_a~*?5EDh?=@N$!UA4Cs44f!77HDxSy_V4rT)m3KN?8-Mv;uf4)ti-6`sgMG2fiS~5LrLe zjULS&e&@&Hlb3P0*^s*l3hahK(=Fn>Uv7k8!=ZHjmb;_BKbX=QQvu_c6w`*dVR=`z z1@a!;=g{Kx?kjO6`$5H6e047b_=5Y2!aY+L%xPPRt{(hDB9{A6Umbp|hIu6Qfl>=q zxH{&YEs-J&Dl0E{8VTN<^Vh1FOFjj?q(?%vmWTf+K$QyjH_;5d`~UER7_I$QiPtIw z5{R^iKj)5qQ6kHg0eFQDBx1UhI{SbG*N0H*dCdA4jeaq>pjI2{4L;jxIl$-8GhCr&8ZfBdv9RR1?o8mr6W6!V~1PDg9X-E9)&$a#fs3Rd<8 z!HvB1rsZ!4PEaqYG<>$N+<~3vBcZ!IN%aUiw+>EI4S!Zj`W>L_GerhL#YF71Aaw;nsi$!SvMw9t3rs zgk;wtan0X4>NLu0zAZR1g$V|#N*3rt=xZIHfsJzZqvQa4S?Ez%4yD~sLlRR!9|S8o zO>#Ql5oFz}4YXfo;PJ%dQ~|_M=A)UVS(oz~ta$8^xmMpib~!3w3uJ4Do%MkboZupd&KuB&L&&=CMYehZ@uB;;x!~*Hw2jU$XvOt8Vy-_rrM8bX_Okpr5HMU_$t!q)S*dq*Q9p74(`Rp zO11UBOB@&G6Zm&#!wUJxFc^>6=9fmAnD87DP<=Y4Q>bHLwIKxu?EgZ!qK;4AYV;W< zG8%iQ4h}Jp9+7H^bKR1UMuWTK0D~$Q&2++!A3?s67Wu9g97d>f~nW2pj5 zb=4oiL_$W)_8j;S8?fC3Rz)d5Xs<_! zAcswKM%zq%>At6^!yMx&j!8n4n7z?Dk^!v5mWCoxBdg?Cx$%uL^7a&HjP!{f7D%pEPZR&4NI&GAnUQ zB53^lm&on7&;9~6ks-Gx_jNxvb-t)-u3d%fKO{^5O<;-KAhhN@Q_VyKz8zG(pby6# z(ra=?ymqmX=QN4^AT<6pzNFa%j-blgb4YAj#?;v-nf{`Ix^!XVkn`O7RETU%Tr(<2-}AZq;H)2M@7HsJ@wiKcRixj1@tchO*~5 zwEGP?g1RL8dIzL@v`&F)m$`QA^K+~WYJ%4VVjf%&w!A$8D~FF&88OhHjU12hj4VE8 zef4q1oBmeEPkhjwnuCjI=?u+SEW7T7ynZd5NTPE4$&mpQVFXG24ec5`H!&HM{eZMb z=&2ev+3i}b!gj({*J`Vz`@8I#{A9akjn`R;hEe0kP;_5sdx>+cx zo`#y>nCO3N6A*LTRrkqS3AYPsT!fW4u`f++O|(@o?*fvP5sE(rMp_#XJ9!-R?7Wk= z-f#cH^X`FA3d@AIpl>IfcMlf9!7ekYHE}Cpl3Ncu&Vi?ykbL!lmMP%~>=!(*#<-xy zMOc*6w-2VNszaK8(aS(aZQzWxrKZJe>|q>GPG$E4_3o7#^2oe6_;Qj}Xq||Jq*$RJ zCEQUZZiCPp+bK?}iUc~KtdN=ZzaLIFcUYW|QNmE^VXOqzUCg5OF2Ad?x;adLnQAAz z3N`UpotGOCJj&$514z~e5Gd1ZhPvbCT6HQ)p;|2m$SyXn86J<%YcI@+N1Q zpR__0jd6Cs0UirN*x=pu9{w2{*cXZ@LKFq^=M_V)Bt;~3K)k%PVG5CpC!Ei0YK=7r zs{8X2g{X1`?uBUc>>SBVA5#IvjO7GKP`-0&(*iC}?#`!UJjHA3#-6@ntXDIHfDj!H z8R=8VBbhnqRKS7@l)(!o)PjJiJ2nT34!9<*dBLBqFP{S*GCuD|t2#(ze*p0= zWD`rMBYC+2yf5+k07o7!)k6Tszsz1~hJVRZ8~rYc;eQk>He2MF)%?F6Hy5EU9n~Jd zLf<#^O_V|u8&;aaNr3*|)p_Sb-9-v_+6ds=;!K?MRmgRKIEAA%MHcGR8|VO|N|vCX z4v-lNvyFW5wZZ2?nF7fHp(+i$W1@)|k`nCTgNpimzc$^$JnGfnHD}=b0_JLcjc4CU zj?XKLY`2cA;Eq-X=11NwCJx5RsJG_ z{K5D6r}mF`s0q4!B2DbeE~&Fw7>bTn`K=sT;~JQ)P?qYkO zpf4XinBmBWn<@pN$Jm(i1PH-}ebf{nSk6lgicbxm01#Z5hfcz7!y?rDDL%Rg_IV7G zyr6X5*_)*1?0FPwf^xjVMV!ygID4xWm^LyrWg3;OS&-3G1U%!h$|jgign{`JaP{e^EuC)P0w4saBz`if9QEI@p7?M0@W}>(1wQVk5v-Z%c_YTv zBI5t?HzkHc#Gk*)naM>6>kfi~4e1g0g%2P3P`KbTrU>4#1AzFbr7RkA^uJkWnyqIk6G0^5y3 zf(!MY>2ES-1&f9dZUOK-G!-xN$Zs8h@dc0WPsgnPyu@-{vB>ItHr`6*A`mHp=-dPL z%OoK%FgL)UT4g3qS`?CpROwUVo}RV7k-O687A2d0D<%a9l|eV#X)oth?Wq7>Qsl+{l2? zrx~jMS&rmZCkv3*cDWH3`(N|#)?j8`Y4Tz~6;ZCS@Ewif@%Xl{pw*@EO2q__aGdrD=L1X~L_+VJvuj8pm{7UGLWpSyj9Uh6f z+vH=m&Y^OkYio>AwTzjDU^&p^NLu3&zHJJfsi-k#%^sZa{Fu1@7RG%OFzc{#{2p^h zvq6B*GjsG>m<={d1&-sGtgvDxY9=jJKidl-HFm>WA+{;>zqQ(nQEZqZdBT2^XPdpkJ(so(nw;*a<%;mP&5mJPJ01u=EnrqBVSKm8RivdJO$u8~w)*vrXo zwr})#jxHyp<*f{MGx?wX}WG7i7yFer;F&_E@PasF(4zXVI+Ms zm;83d^6(tKoyXITYZvVaPoxK~m>K)XA28mu8aite@y-~n)}X}JE;3}p#_tlEw8Fr` zv-=D~fXI6mCelYGK@(z{;Wt1PY*QFi(3~AsB~?n1j0ID)9v`*k=r`+#9-|KEGHVK6 zr1;=AbedJyNCLN@pH1+dHmxv=m#nRZoX`>38l;s}^5@pW9z>0uUm17=j#nc>>{UKf z2G$+gDu_jfBcp)|S7{nF(=B-S|39ZIhZ`G*i%L8HjNpoIcgu^St#y2=4P2`*JOA36 zhsr-m-fnKAT2V7FLhSHc@tHS)qbuSqx+Q8!j_*m3YQH^toaLI*(2h>i^20EppHNDk zWw0uvMRID)cxQH=%!yo+n_Wz`GE-7OfA7EXT4!{hbfT2b~+B2;5F(2}T?M zFpDGs+46Zyn@GRVxqTsqMWC?&`<<4>o`Lv&t!5Li&~?`5cjq$5af9$;-k~p;w5@LD zumy3jfcOOw*L53a;+VVt5#)$!Ax6S^2iV{X{_0OgsMVWxWPJ$4;hScao8JiCa2t@| z|Mw5YH6>PR?_EG8P|kLVH1thP??Wr-#H7l|_TaJ^1pPmSNRcM00XD^iV6bfE7t>fa zDe*->b#!Vd+osUv7kDM@C6ZWE?w@XOj8|$G-ri`PD@+!~JmrYoZ1D?Pf8?&vQyKF< z_vk<_<}r@eHiZ|}MGz_qVk%)Dl{**;5l6|Z?>HSBXuwG=5CBF|B3Qnyw{!n_wj zpS!?cD?wUd%HWFHq8$4-pM)P5oYQOxFdL0+Q-~{pAKlN1;lqb>Oixrfhz}sDQ4Poq z@k;7Sp(7dN-nm-GDo%C5AQGC&`YtRF1iCg@Nq2_0|G`pt)j>P|wP_p@-p!$gyWAMy zI8>Gs!@|Akl-VI}4YR_K%3oD7p?lub%<_Nw6-C%Hf`6zbdB z=wE8dLuBgfNe17X#q3@XcGG=tetppa+~ENFns6mZ5IAh>nOjL3N8!>VBs!<&n{XeM z!4&hin?#_AV?k4*rLws$=pDNsS9B-Ed9mp|#z6ZQ$&t#alt)F5`Z1x%CQ?c%WlB=Y zbOKlc5CUex*1~p#Re=G;QG5Xg1g2pLconrq^`g`$Sky-}DykGM5pAdNz5>6jUqN0w z(9U(;0@T`b)&WUl9)B46Km&rc2Of_%9fZ@u#)#>gN`{${0o0S= zQ<_c+rKA%LG-n?2*ut1&ay2e#J_asXPggA`rxjz$glorR!3M;17bI z2h0lsYru&~8~0*`7d4WwOQ=a{Nk@{LNmEHsNlQt}`KpN5M=IKS zYGs*N$h;4Z3^Y41eg=?o_~4kjLBfWMD;LSA1)iE*9JOfSqs6R%v_%Um3zk@nVIf_j zQG$ht)&VIN$Uvo$p3x2Ea;mDu(gZ?BLQ+Q>Of9*sF##&689qM={B}heYg;>6aRxiP z&W{W$W=^Q0uggf9&0$tnAdHTZROoo=fa(N+IPksK=|wDui|Kz6MEgqCwiW zK_@;q5!JqICxY6dDUWgwNNFP3e4;8c1R4=T!vSpYSrn0xUUh?$5;-!s(qToS?n4j{ zMNcGXB15aFDWwOO38DuL4v2n&no86m5mn%kuB?_sLvs+IkW0V_xfD_(ny8e^5j{Fq zP((3+2ba*A5ShlB#_*=lyByC%oXO(`&J{z`_ozInQ#kj{b@Ng7V9D@1lU=`(5tk@EI38W`)@ z)IIWm&}}0V?;{q?ZM?c^vi7CAT{jG@E86wdRitYXYaUw^Thy{hx5%^@Ck_d(E+Wt& zU2zn%oMAz+-Wft_nvuf;sFL=-Ndevgalnfw96Y$nl2rNr1lx~QB=kc^5IA)p!q<0G zO{6AXB_1WVh*d-{L?pxyTtaqiJ+*>3n>&Co;fyH67IrCIQb<<#M0iG+CDbDHaeZbn zv388GqixFNV8xF77O+TgbVRQiHW8t7o7hhu7m6cmcj!p>il{cE7U z8ZckY&)rY6jNB=xc z#_xIc^D|-0VGI|Bm_9LmeQn$(COHYd(v{o53)jW(D{@;Xz``hj6Hv|p-UhP>R^lHIbm<+w++*WC^rS}j38%h3+% z+d=(0r{Cnu{kR|ZsUHr`=37Nz%3EmkYydy$I1sgDpTuJ@6j%zJSA&78^bnEyI7xgB>hMS>tx)@xo|U_3i|^CLzEj!nCG&6IF3;v2d&7)wZ;{UC zg?p(l5%pG@94u1_ZKIEML8-pM47_euYOfH-$~l*;?Ju-ku5>p}e1w*&aV zAa11x0XY2l4;}(g-f{QeHQpUV@9^QAoVfjP{96wG-~RR?C2=?f3UCe8>GK`+eWHzkB@u?PBop4Qt4t(>wCMyQ|~gM&EYV{a9c4WCzBs-#gZb z<>XFQ8uRY{3!`px?dq?M)%xlNX?x%P&hd<87evfyCcehlET{AeTOExRU*{~{jIUGv zZ0Ll0;L!tJ^AO6#JZx??tI##^oLH?TTw6lgnq*EkYCBXra~G^JiOZtHqGG{iF=>K6 zp;}pYSx>T*V7XznJ)h5K+%pN1Ei)v~L$jmj^4BA%O)B3#f1oPYj z@_br_1o=YN@YK3cnP+NJ=#&YEIfR)um18+JGBx{KQx4VSbi@c0N%OC)zi<<(20e3{ z$vSlM0SOCpc7=g?tcE#h?G1gQ$9h8l#e4BxJRHyGx%fQ4#7q5~ck@%c6c5GU`7p17 zr}{b@(S~Cu+J|=5HuOL|(>Fbq4Q7kkU2Hy^i@n80vy0eXw%eCIW=HKXdx~x5<7_21 zo84wh?J72zP4#Y$hW69evb*dd_STW?I6WFUA~`ZSni&U;el=okcpOq^y{zczp1g*do>q5NDI=4 zG?sQ#XQ{Q+Lh2^`S}?drL@NbOaB)m?NPdXYwfo};1ARay!ig`Ps+ z(R8zPRx+c_Zu8mPHm{ij=Qr7meCBvWMkA+@2jxSbM*fq_*je)3F^*i7>*Odho=hi0 zk)6nPHJsQQ_xZ0_Ok5^Li_PM*m>R>yZ*g1f7MI0ju`~{fe5mviPTeMCp&tM2=7zSYg3IG@ifgq4$%z3#I04s9l zA!o~mI`-}^nzgJ7U$LGbrr3B$iG-|YTqI~RmEO~6?g+V)R1XVq zHDfiV8{%tEgewg0Ec9Yl{+MHO$ZZJrL9z5BW^J~O1V>7N&$1L_>4TyrgDs87lElNU zqm&MPn8QbFrxY&R&6DDosoB_oC*ziz*?EcC5QW#a9I2FuhZem+pa|v_)|l%ScT0FG z`luD85<^#k^@}b$+5rXY>4eocrA{3#9$z8|$m>_iqzH_dc|RA!?6ps+L8cat2sIG} zzhn84rB*970r3=F=*Z6vqwB(nB+0+jzDp^DM22@MDe@MaC`p6*C`%B%tS+(tYSdyg zg-Hzfr-}Ql$ujz58&Z1)bVIKjt=hCDYYc(8C0Ad2OT0}dW5t7X|btMx=_P{PEWX+eiT^FuoYXg_^#07IvK5DtnON$Y${FB`YE5A5& zB|R~sb)65SHhAN6Yk^bVgsAG}UvQyd{q>r)912l_5ZA`IP5!F!q&VJ2@ezwRpfp9* z!l-VwpF-S(kNLbf-kWokw03ZrH z(^E=~G#?01Kns?^ZdEDgh6HhK#J}3I{N2_s7LFs+e+)m*kyC%qJi}c0uJ}fwpVmRA z%xCm!ibbtkf276GlEjb0K?Vm>^QWwfGF7T|38p9<_ja@WP)QAWtF`VmfcEPf2CFFD__)@( z+R8H5x*@wiO2yPezQc;SXqdUy8RW`?BOG4?C<4$-uV&p3TkDA5Xkn%{E2~uk_~$o$ zxQ|{5VAg*@Sq;Ejz}M7hzO^b8c3;u~UbI5>3}xwu^%_ZaSty7fg znsYzLk72})6CaGS=DN@a3s#%qFzcTpiJ6~%evq!qN86t|Hwz33P+$ijZhyLAs)-mb za<&ejO)McO9{eGXkRQB9(KiWGsxDEhnh_p~_fywxO?BPr8h94RhSaj8)^!9I^$NR= zCHuD?Ditj6OSnSi22k9_Ev0EPw5x#jLn1N=KV?`$tAUpn>EYmi5>+OQz$HZ=tT{b9 z=~UmRFO{1U;T2^Gdk(v4#4b7pp!}>-x-N8M6ym}jri^6-T?F@$om`E9E>0jjd7I5j za{As|J@|7V$QG8^w(R6ULaSq4$UOj#Yz<&zaYsPC#OE4)<7!T_JD)?yX1IR32;Os_ zl*qp9sMAfloz}0xL4{#?TL zFI0srm6{2l4hNNz@SVFbjq6*{zkBQ?@0{-AU~_ie>H*rYeViTlkLSAcv3xRbh!tM$ z&)LZVx2xG%Zdl=Q8ptN8Uedql-pa@Lrg~^j<^N^vb~GXZ{!G4n{$Mi@!w=8ep7ea} zaBz9U{I_Ijwj)wEG^2+PR;xQF%;d?=TpS|G_^giaU;sLN;)>yLcWGM<{EM{F43`d~w*O;e*DJb8hFB zUSdo}u{Tmp7_(13?y)T3HeDVe>VnKGZvs>PG0`6qF05D;GjsSP?jw$me*SVPQbctF z6L79QADLA4!S4elM=j^e>qdTxM=p_vNuBJA1p$sf)hDp$1+2eK-n57U3+xJx>rA5&^NeZ*V~4H|{0CC~fUuBr9I(b3e% z>^y61jj`~DKHr9B*DJFw`BlaEw&S0{-UjViC^iT05_7}5JKi$=1=INo?U!TT`bC7% zzls%_pl8e36&fnv%E%~xPV{_%mrM(JffEp=g@({;P+_8jlg%R;qSdDr!# z!K)bU=eJ_(!?kyP>0<|qZXMyZtjZmm$UP}x@t@(`DE@a%z*giGuTSc<^ZaPL8Q!jG zpT&O-+okOu-O_g2D0zW;{`oFWPIO3wDRCBlutKda+MJTy*^1cq#N!X{aL=-Gem4{r z>#+yy%)wUzw09Jnbo^F0G6oYm`jIZ_rYR4v!VjRD8-ZQIQZb`qm5t5*+{8yr)kx}{3|?Izlp)1N{&8dJ7*QaZ1vUa zv3k$Lxm#<-xv@)4jdl=&zi)fYJNw5K`?&?z#-}|1$O%o$u6p?Mlf&At z)aSQnW5|fXX^wDM<=XaR5&z)hgt7C;kLJ)?I?y2}*C7MPAMD@|A?V+Sxv#*NVGq~8 zh-+b7KkgrKC5XH;K|Id58KIRRx*PA0%*l!1h<-T%{hD6dr(l~V^q+MYEV80pxCoeoojM5$}=od}{k6VxW^B5r;#@NPUL$o_ZbJC?dq; zDB?ghfy_r~Xt>zHYdFhuN?;`DZy)Z2kBN-#bTbYdUT@rqcuuliZX6d=zDGE~cXnM(I+)5-RwG`~sCD!iS) z)P+{E0Y~Z|HwS}v^*GfRvQN`x`!k&%m|RK7Y@7KJ!P3EnpV#Bby;P}i%s6nrsiVwz zc~2chWL26k+Bl`R8imGFsRfLk!z7}A?$y8RT@w)&%nqFi zVuMKERL8uA+_hj=$6&un3Cx5mlK-l@O0e7ECyTwQU^JEFm=7#2*B^B_l0#%JS;lI` zX`cTqX6bOE=6Bt%e}5MMiGB>vT0-v!?VC2&ed3wOqX)c_Y&?3xEz}!;I&&rk{C=I> zoEgJoYS`JWZ*pk=@nkHt1kM*XRyODCXtitZ?+IY@S(wy|*qzlIUx;=g&$7Fr(r$o|4rM{;3*gajX^lX=r@B@MV zhVrfx+06x6n^oLdP?xxV3{H$5Q7HnihU@B@t=!1u1N(BGbDivR65~(&h>wO0G`I>I zUR49ihM(*Y^$y}K(*@{&zmw|9%cLWQ8RKdLT#ZY-&kj~sn&Sa=iQsmb)#L0lgm3eW2$DdwQ_P2YWx-%Y!{V z*z>`jAL!}99+&9w+g45XzI&SR|e-ux7 zTD9IK*k8FZyY6J3nAB?)ZBMi_XTThba$XRjPDyj~mha0W>OG&RCt6q3>ofeVIjcYU znSNjCwlA?;A?(&dE2+W06;b!A__8tOj+*Q#ErdE{ixMr`7TDip?egh|0;YV%^Bld^ zm+&J8%nL5(W$6Gexq9@OF-Aq0tM}``c0&z_z;=n^JhtO;@&WLoX?o15%t0Rjr@!}V z_Vgn(5Xiw~I#agG%Q6M`TnXUcE-?g{vfWHG3~uOlqxT^M>GLE1kzJEKsr8E6 zy|jXLXXPJtvKr5CHR8O2Z|M!1nFE}u%S1x(T6&KEorw3eGc{?c!=fhxh{K_=(dSTY? zh({k>c!EkE2p}!%PaJ@(*j8(z0V{pKgX#Dz@vNKv^U?=B2Hjq>iBQrk>#kApL=nTY z3IUiNyg}%v;_?4W^<#M{*4)IYN^4N3?~Kzu|LZc=)Lo|Lj*U7-1K$HxJ+s;Qehp^) zNcy^zOi7j|Wg;JVd>c^W&Cuj2PyelZU=Ke2e2?O-+FfYq9j8XDe4R`SUM$N?|CxAG z@N@X8eUP=1t*0_+{TO_XxuSYY_eZM*-2_1wGV^@Z7Ec9?d29?LN-bHN>9u83Y1IDW z93Zm{IyN0O0?#2+c)YU$?ZMB>rh_|$PIBLmF}(5Pv1(MOzhdi$jonLZdx z`#Pwp-D0 zN15lJF@IY4i}cif2RbuiIKL&33u4n{2m4a++l0*m1V|?371A$P>A6A|f_Zwr8j@s8 zkgyG$K9sh1T#s^3$#B<7bqg;TXq*k*Bm4fUlLM9UAZZWLb9orHKE!x@(R>^A+mMvE zbRbKTQ9UzJuhxOWUNb>Ijy(#4fxewee+J|GEX$(q$sjVV3#@8rAq_^wu~0hNPA?|e zJgs=0Aumm&6SNUu0dx1G;4#F&JL6W!w3Oc2%r+k-0P7gQiJu4SzDets6f{Hd4eu!5 z%zzc|3vUSHw=B7?b{p-7WYfNSQprX;{TEc|S8DZ*?-41+ArFer7|-N$`f{TtT}VOQ zdu=xf<*Mmd-FRbv`h@6fR_}g^{&Y;{m-BPb`vhi*_n`3JS(c-FcbrGw2av%a07@zN8}dC)(% zBiJ}_CEyDDkv;C?<62J6m zuYkY-7_iYX5zhS9@ht91K6dKU&-{XwKamj7AGC6uktGCy7d3zYM>A@#@TXeCJ30$1 zPpt1kuo6$H{Ohjwj{VZuBwvZGyS+-1Qub7r#-+AqJAK*kVM`c{<4oJj2S^_EFQaRq z1DuBgOf>>vX^|`*BhonAsHdP-SKS{$?iuKn+b|6YW~IZyuA}*LouANK%_MeovJhI> ztfy@WdllQHGNYqN%HjFAMNbZc8PLv#j$U)m2EBXk zJ2w=q+!a50lm7m7c;?(yYVOiX5RVfB#P8OEXF4u0?;Y>}RY0o0{_seA)fnL~RvWb; z7lmW5EssuTM>qPlcs8Fxz0~4S$ulv!**!z~{_&P{Wm_R_!tTumDS5j?%Dz5#ZGefI z+cD0PT}4ocdcM-dmJyO{T8N}aBU@cBHt+=M@vM*Ov-?(m)FF8N?wb9GR2xgTb@^z@ zP|mo2eTnW|v=08o?N6}4G@Fe~r~wnDGJ#L4cy%Pa-T;b#kQ`W`j#cNIuvXdpcNaB) zs32{z`RmTD0XRq^U3;8!o6Q2L0l5LE0q+PHlCOEAZ|tdgSvZd0*v+=;DcNH$ zWSqtDOF|=HiG+#>M$cf!P;7+R;6g{1tEC+$9;-d0T8+*o}N+WO9XA%mAkO|m=qc(|<0g>t6DZ9r4Hn}2O zG9Ag5q-`LGq>(jqB+-r_k|beG0+LSxB0~xQ$v}^K1SEN=e4TI8Ulvf81s!G5fK(8Op~`j6Rx+u%Fan^-R9 zi+cdMF9ehgm*K@@z;WY5yNGU+@g8C+ETxdal%5>txy`t}L&>4|VmSa%c3j4fAaM+T zrxia?i1%<90JvZTG$N7<pk(F3Mkjb;2RX6jkFKC>W(#%z7&6&BaC(Oh=2G_YYD&2`YPt=sE z_e^m*cTz9T5_EWoUh5Buv?>aXX9^YmAN4qb#t}4%($YOmsA_AbQZ*+P%PAG97-e72?D~00L zWwo0wpW(HB{jAon|F!o!pWrxMg}y@fG3UtKy*ZI$E|FD8OHx@*LCY!J zIK%C?Py5sa{A#h2VnxUG-fzwo|NsAegpW;_j7AU9)egdsPlsEWF)<;K2C;#pgruZ2 z^D{unr$p+txr|E}IeLyCA6Pg0hc44;D+@A*DhGuFb%TYazHEPAzP`M0_u%2z(sDytm|W*X zZ*`W+0#$*oR5MM!OIo1BGH+l&mrPEV-37B2RVXVp_qDr}FFrlkTW?vSY*ZPqQE9!0 zyMc_(9F;FrF+mp1s-JzP=h9wRN$W%QHY!JX+m{e1WTS7OMA{{MSy5~4fbzyq+d_kidDV2H?icXGMLv$ zfWy5r%dXUNsyC;Cv3rU|*#tj6Bp<9cD{?4ca?H&Oho%Elnm8fLQB_n|X;Z>rW;At0 z7V|1&DhHSsEnL$TrLwS8rdf_qVcQ9TgG&%<3(QT0v8X3Kb)|gaG7}?k8A`Wwl`U7L zDOqmGmaEPQ=cYVMlk=Dy$EL(-Xuv^M^++f(wmkCiFYsbe&b?o)~&qH9!nl(Mb z?^1q{iPxCdptyR{)MT0KD2G3`LN1yhmPRdVt|COo8n%T1XsyK&v~uydSh#Gb^xR3) z6NM|2^%(sG7xi(*kUG(IXU^5Oek~xI!by#=-n8b}t#w0#tyk4*(H}Wt){YC$3(fJS zts3&A5CNHjj#5GgVTj837j=~IqQfty&AK)W=Un@ST!-h9e%7_P8OG`34grdNs5B3g zF9Gv+2pAv|rBRZ^FvtKxAj$_+VuS=F2L}y>ib0VuG!TS>q5uqnC#HY#3xP$tuF)v=H5UkUKOeg8G4Bcs8|Rq!4!Odi07ie2R)?{_e+lZ!p8_Wm4cs;n(auP zaWm6oBiTfz9*{wzNdQsI!4-t}Dc;A5V&4|>$4WF_i3Y>-Ce%NCYXIlPbI?4oU+kx# zWfmROa(hQ+p_zUS#@oPgt@5pDIptYDTAirS~SEMGiOrvcpW##v_ zQ74NhKKD9bMbl0b<92aHq`wq^lJ90`^#*Xm=*wnlmYU7yv9~56HWCBotKo#l$Y8Cu zv|Na5i>y#kDK%T}ogYkVvxOn598{{RglX60FI7(dbL!H6O{2Lt@x;6Hm++*WTF>-& zd-P%#b6E|{_x}3Q8%5yS#6_`Z=3oZ(5OuR7f@b6+oScSc6c9V9-bt5y)Q95hvn5b2 z_#V2A5WsKXhXY-ZP1u(@>|ExZIt4)&9UV(>SrT%UpNzo;{l%dkNs7z$vU*(_6@b^4 zF&4nm@=2eSk0CHore~yONTK?=OFysnU7*RXH~NX#a^e*QzZQTqEZZNH^w)KWh=b zN!%(_IgASNketkg@im}cp&iaibE+=%r%FI?EelF)r>ztsA?7L~2Z-;YBf?-8o+^ z4X6$HOTS=RaO3;TeKKOCqh4kiszd|jfN7ywWgx-Wj4?qGl$#^gsoNo-K}9eDUX|(6 z8g)T!>cqm;dTdae-SI;IoCSIQ_hlaYCN`7t^jIi_^UNSoOwIvWITq1SJ(HT+ zFEtFnILoVT=!!?1QU2qfUhBkiRuo0F&W`%7Tr=QR&h$c}lG`ecp_aHy9n22`u8hmx zgqyB$g{Cy*s&!u!HM)54~MBcCGG z17*H}-n2(vH~MuB;PGZjfQ6(q$74^9%)!KoUQTjy!F&-!M{6>k5&Cv`s7qJN_^Tw+ z#kTMB2YPvBSrn<;8@>rcC(~gx8ppLz%@0I!;IR3%F(S`V7Vk1C)RX2Wj3 ziGIudB9{5BRIp}+szF*~H9%OK3D0dIIvpDC#cof=ZwV70aKj4Rpg*d4{Ng1cT0 zDb18T{q%#Ak{tq?YPfzvOqXKNhEdq3_jL}o1BBfEqHBsE?axnz9|kB zakhnZv=o>WERP8VNxK$e2{qzp;H5cJM5lfH`;$25>W8P4?%9UB>@|2nj3sErcK*3z z!I{BVe{!EoU9lAoI)-C-McCVxD*hBYhb~>QU%r^_hZ4h0acWFj{SWFm#*Fz zd)puj-Uabv!3Wih0SDARvRVU`EHCw_i~VRu)iS>>3Q3F?{3qHtrV$B(`E4)HdGIYG4uynJDMG;FC#*Ijgf|8h$*Eo?8b*X zbS1xS$D(nmygTmnD|G5hq<3UM5FAFWve}Dsk#(1YeKPIvg?(E7ULOc zdJyrgI*)ioEmPKvaVU>@+1t)}>*y1x53@2!I$=}}9mG}vGx2jENTn%Q?18dGa{nLq zHFYEcjK=2gFg75W+TvRbW>=tIT+ji0R%?Tdl_yeX%-`Huxp(`zA`K>T4Z^Mcp5TeG z?=wA!s+szp>J9l=>vDH?wCdZPMgfqxbRK`CNB(PU4&i4 zu8;^CFuHvLB-QSEw=@MaaL3dmeV$JA3o(Sa@;o&c(oB|VPv(Y>t39%uQ-?fxqY9E!=|GAv?z5-an?7<2=! z2`t9dpbKplY7tQX!)}yo00$b-`0*5W7@piwg?UZAq0Lr`DR8zq!yBx7_JW316h9+W z3)G_e_MvjL4}Q4e0B}(rCKqDMfIcGXE@-tGVOlVBM)-SxXs~nyJe9c;ScoO86EVV< z3mrpsm-PTruT@ImVoerRmb>+ z(xnhF0yld#Sm2B%yIUw3slnR5ml=Npo-`@|&hVLLBe1sA!!5eOBlj z;j%q+p+T|JZSGnGdnjhS7<{SEKGD_ONb_0<8=W~$E_ z)Hrz&^C>7Mc3!dqCt`OKO;&MLhjBE|$1zkiH>^Ulp9LuXhIV581HmZ-`3<|{+=cM< z*AG)FONj%j)khF3Sf)Y&2uh(%pQ2;5a%cvSDn8l89sbaRSZlfSbfBij)j~fJe@{(I zljPr6xAjj!4a?nrJ84^Th?3#_(7%# zP7)M2amZFB-4(cqd*eC_v{s-e(I`M}6U_@93BDtR<)8=sjIt}TM4snAMWvhdbc@Kvol>s(tGsOI$@^O@VQ z-2)tYOEwJ|xCX3aMQTl5^jpeAuXra=1?vp!TW^vLx&d@%NA}7C>%w_UF$TU1*0;#1Ald>fqS~G=nr#~}b2 zTPYd8MV`_ZeEJsmlXi>)0*a!o17Vk8DN|GF9+AlEy&L(_!^mJDK5UV3!CjoM*v~g_ zt!G}Hij`fm+y)Uuq0kg0VOrN*JU^lajhV4h*Y<}?yHk3pl&xQ}d7~ABPKK`^<9`F$ zYq zc&7e;cEwk>+#=`MED&HP8A_gU@6K2Q2zm7M>LRk);l;-y%XL{2Ge^$kdwM!)z+jD= zjc}7M!EQHDDYbmjo-0t%Ei#d=GbV74%bv?$hOf)xzhx;!_{d)H<9oMxM{h?xo}2;6 zbImwFi>I#p|a(OSY~oe)$@VCB)Y{i zCd)|x53iI(r$|j{Kl#O5`4tfnJetBpRoDHp{`E2Z<;a>8{40=j=xEt)<4kKXNQ>Di z2p?Q@s*`3Uj*cJkS}yCDwy!$$-G0%jVWO<)(nRuGFqN^~C#;iP_^r-7_~iY?DxOWK zVe7|=gy>+2;4~hkbK;iZD3BP%cbF=X1oyUa_!3mLp86-`hq6t28eQb`MO*e5@?-B zEl)t|$(%jJXZa@}Q8UFJHEoLQcCP;fBS#x5LPa~(rjBSgC83KLPn zNKS7>iBN72rW??pw^w*R3`u=GU}%)?uxvG41Sg>fL!T*?_e7LywvU3oWu_gZ)E}yM zA7qI*(w1oKW+=|wj@m`823gugbM}asGW12ql&EeYpF1uR4cbLU{yqhx@n^lPRkhO& zLAe>k-Cg;}cZNwv$`d?YGe#Agsp)-_U_j;<37i&jp~0m0K3M5kL}`PaGEWOtR=+W2q$ zdC#aqIVuvN!pX-l#fL)nE9CCwshlx9Q#}%8K9{(+qx(xrx&Xeu*QJUK)tTzh%;Nwr z9-1ocNTZy>FbKu2aav0_&IPqWg$uu5QugkcI4YZA6#S?pkIZ{_ zm(9>~TQW7iP|*&+Ru#_>th)vu22_xF6)9|=O^Zp%^O7Ef|2z$DPcx}!be(#%aUdxHSY`cEA2rKeLsD7=cq0b(5+P1Rx--5P&}q8Cg!`d zD?=Xg-1)&ThLIO8iR3W_gHX(fGNDn%L6;f5gH(4z5MuDLHmT?GLh8n~UHOn0?P7T4 zc8;Z`=G)*)pCzNp`%8QEaN6k-k~9X`K2M{W(ELHetp2P4&%Dw>ls`cb=$iIoRGqkp zkt)qr%V9ZnnK6*0U-%&T?b88MsHxRYdaup?5mF@|=3MgT=%{?&{xNg{78vJx@Lbh# zXzk4!xVs-wT$=cB3jU!b`>Ny`DC~)|4Q7$a%VUKS%^rnO>NO4N^{_yt>{J#6W_~n= zBaG0zInG2FxkZ@S<*&|$IB76-Pq4gMkL~yACzG@S9A$)o({_VS)?592vV`e2isij# z7k>)dw-Pz5r)|4(!!*aygUe?5_vca1Ls`?xVKoK`%msw}DvF9owRXekpc=h}MUt{G zUB0qqmBugMS7~(1R3FYl=-QmrIYK}9szK|jke_#zzTyAvbPdOq)~~~8pVl!EtR8a8)(eqKC)4Esb?>Wrm3AsR#Bh;E$y`8x1Y7&WD0FwB}FD?otz(alZgO>IPGi# zBVZoAQm6ECQ@7U3ZE}lj0gC~R0f7NeoM{KY=^}CU=^ug#AdTg)GgSIjC;KvV*5i^40~m*!JTH9 zQ7}l|a$`BT^@S{!x~1Lqf3k@)WimIIkGN=g9kqIzasKHUN7@Ib&Gm+Cm#0e#U1E+h zb5L+97rEJ|_Yx2ybddJx-zFdE6@q?YEC}xvms)k%q3gQpmg~|mQDe-WRx2+Gda;C-743?q#dfjU`h=8@jYHmC8V!#`=qUFpza7L1N3&SRsjyzaynStx6c=kOfX$(mc^CQbH+k>!nfGU%lV z8?y(HGv;ZQdedO9dMpz$T|DfOw)IS0uvTKacwXpGh2R%LN<6I$7(%g5H>u?HJcl}D zlLQic!F7bO{IxEn&1q8!7x~x zC22(WCSg?@-ekB#S(P<&6BhK(qC(>bQ>_%rl0jH34J>(9obezrj3g(o*J_ zF6}F3V@!;xUJ$|<4S>|uL3c(*MhA^qcB6ylCbdvTnhdH^6TQ(sO%y-?ftniAG;3r~ zSphRm&sgqyapf_xnt3h(P*a*T0Rjl$AuOL**_Vew2Ane}2*~6ZNA75q zhjeYODaVux=9Xx^OOZGLjCMK)$MF)f#VpHW(7?2b`Hj7Iy6(tR?`&hFwzm{*KZd<* z9OIm|lIj>wR?LsoT65W>U*mqfbc=|ar}qvmaZjl(cjd0^A<5FcO0}wYq~7Na)k!I8 z!X^@tic=D$*)-vIDxd0EJ8`ouWDlCnUkcwyyHS0fk0IFt0hgC_FR0Ck8#L&5>)qbj zKB)fr+%oV+ zVwC$1qh6m*%==YGsH~pTKJ^*B#|F1ZI?pYr%V?o`45(q(={YXlhNReORW%+bAADrT zJ>uKpa%@s+UlA2c_3)zLPII4xa5*=i_Q>t0eQJ^PC>@h(#k1Na=_%>CRJ{KEHpQib z(r3dg*U9Z{Z_I& zU;HYs<+FYZmKt4;E{7|8tvBkN{FLwVQJ(9+ypw;D^YX-8mxupK=n~065pjiX(^v7} zlFz$TBlRIVjc9;x6^w}qPuW(=Ea)q5(Je9QdN2ib!=P>|cw}Tt`ka}LSMg9ZAson| zJdLkmL*sgD(gOiM#oGX~eD*T~3W)}|RL>CK6a<39L6Jj41%u0> zfjA%v1_XluAP@!yffxk9F%ZNs7zvXwP$?e9z|iSg$hc8VW*aybzh3u#o=`PsPB1#t zxUdVap0%02E_YVd`?{$(@wdx1tXHbMvhc0nEYo1;i~Y%RRs4N1L)eGf*;y8FI#1|t z!7A~_vWD!#;X=%!yI+s+suhcnPswsOxbPCA6vzb{Q9KIy){W}RYDDn?+Ne9NSAAp~ zlhBh5G8BxHUk5kh$3%|kye<>?z}_siPUyF&>3FzH8j3GJS`HBq{3rW@3x#s@37PU4 z7BeY^1@WXp!3-G`WLA3iJF*eX8cl1&M?EO4#{omMqTOy>%BblU!E4GEG(BX^!jpxG@pqDTG?1)a_mPJu|LRe8J)xM9)y=RtE%KtTxM8XQT150V z+Vlt)0bo52oi{zw(1{JPStby(4#uJ4u?oVcUu@cU@c`&s3-!pv9h4)= zq_J@Q?*2!#bc}0Nq3Y6ErCmPwL=26qZ9|$Ye?rVu7OIS0N)=(;V!2^9Rm9ARXXg3l zB73BQ2!aL`!3YfUP2YM}in)dIX!QVgCh?qq_>h>ktU9TKijhYwDL|+Kht=kyC|Hi?7&I?)?LIR z8mW;QsSy%Bd&@Z}g3R4AOuH-_2e|3A&c{QQcS@*{XoTjN_kyw~(#=W-=6=?$Sf^x!Iyp28WsE~jyI2JlUFvP4+X4T>0x9c=P5z%sD*&JnL8d|AG>9&@ojjSIn8U5r(!1`N?#h z=rC!mSFswhq~P?Qh}Qpm|evk||$E&N|uHkJp8lWx>Kdc&sHpBt`gFl9%}ACp_D#^andIXfmceuF}2 z4)cE?2wRm*12s123{=gpz--+1Q_bp8P{CtB<}PHIs3+=zJv|t29jQ!b0M8&1F17%N zEs%gN&*`;xjC^Izv*GbA+iEIp;>!@`bHg44z}>t>av zKOd1BwSOI!r8y%EgK(*A+X+&HUa_@QS0E8u9fALIVksUeNcL?YJ7gLA7eO`C?--Hn zUpwe!mjT;6aZ|$McA3mIz6prC{>iHO(+Ne@@=$#60y3$73Xx?)6>63ffnE>aQjSd6 zP4zJx-P`8~;^m5_2OjCMFidna*2z?WDLtZa*8!RZh^~ROmw_slEZ00pr{sMM$*Ada zi5>zWoync!hAob?emEh?#D&Ee!{gK5M_;|w1R6%2awC9*tN5>`?iLkaIM4HdV%`^U zDDUj8>uKTXRPxmUV7u}+VU6?%qp$Gbo8x(nZ94`D+}6`A0BQ%E3o(+8mTo?1DQ(G^ zf3UR|NL2f)Bo;Z5^!^n;Afq@cQful8Bog#eHk0A&DS}$^XJS}OCylhMpFgz1gB`!V zT3Mkm`l)U&cZeLOt-`}?cfadEX8p$)yvb|MYX35ytJo$NO=$2qjlkk5Iw*JN!zHwA zw99}N(_cH1@X>mDnSkdwFz`bU)uL2o9Yg!cVPV`Jd@zDTR+$tam`y5>EW!I2YPBoL zK)gl2p=uS+{c<9x?*xO8t|7qQtSw0$D*lKj)|*P5(hBw~aqeE`3z6Qvk)bw$oG+8{ z!d6H)=p{#bCx5hjYqm@Mmr2B?UWnPT&%u7K{=s1xVNd@89QS6TSudH_Dwq~quXxY$ z$UvEyklAP=iTou1(|!_>Me9*73{R5d*Ym975WyET42B?{#BR>RZ#dbdPbk2T+1l5I zk{(k*mFpFN2u)Et0TpjLcdpM6e`qe1M6a%3pJ0hke8@~ln%Ipg1>XCYZiXma>ZM_0 zjkKBaw-?{>Gc^#G*s8MHTkyDFY+)GNL)eHo(=K+K@VhD_UX;P*|6K6Z>O@(QbumYe%tcLa*`~ zLR?Ne9Cijk4<{2geP%P3WNI_YAdMwS%~kR{n4(=lLR&v|VS?UyftvE`%vL4P;L(@3YQxz>S}V3RYdGx1qAQMw1XrTE}0hbXik(41bfvq#E_V zqvI7Ik1>BEczmN6hrt=~CI{H;hyW!qeUZn2?76PbOLxHgEir4T119vC#+r?0AmdIk zmMN4XWINZM)1oS`DhdFtFJ-d>ogw>ovNwlAg5e|9k>byAR=+r-;^8l=C+ci;xO(D= z$*Qb@>X@lSQj_>(7qkQO65i*hM(w5XT-_RmW~0SIfYt1kZk{9PVLg4R6il%!+lT(U zS~N4B|G>g!)0O8#N}N&z1h*)z-E$Cujy`~I+dVN33bjubcU;iN_1+*q9=F6nT95<{ zB=Y%SBtaDC&TV0ITw15XT=89~9%$S!3FpH5srByUpo3$HBDaX|=@)Mac>74UFnS@oWlRGn3e8|QQzabw8Dk5VFS8>rg?HKe0OGAS9dx~pMakeGwsa;zEFrRuvmXLP>YfB3*f1Q&gbOt61wHNquk$Lg4oIHpg4OLxC|xJ+0dEkb&!$aoNi*A9!k~J9 zk$R+1W&dLpK~YM46(h_^=Q4~9cg`Z}>;~mkdJ(|wfH#>?KLv|^Ga_?a!3U+%04r)I)ejh!Gsu6m<|Rai}A(;%J1 zM^vulm-gimCTbYzlGa#9*JSC0qtjFB)B({@w*Mpin(n!yxM9o}zy{{!y8*9$NY);c z0`9p^TMcL0+Wq77EW(jL6=$gfC>5=>V-$y1kP*sdF@CIo*4jsX9768dxEu>>s!y2p zqZ>P-P<=p8n|7`Ax)z~+!J!LIUg^XUr~8t-$I2rpN@7=0rqLneb=Mm5hJS{*t|#3r z{IcOI*sSZ+pEI!>0rZUkP24F+Vik7!Sg;+@^P zY9u&yo1mig4oaBn-ytqYb17LvbXdG*QtB_e`7-N#Q9+V>M`=H7fyv+Er@8}C+wh1o z0yZAuq1xvNyGHlTk;H<)GZ-R+b#&61+qm5^#u6=a@1EmEMe3~^>TMPD(Y>|nt*}E` zPC|Gh-32|xdhz3_vww0pBHJe4nyP#Y;CUeHqsYb~xmCHO(PrE&&$9vU18k_e7kZ#u zQDQ#)0UAc6RoK+P=2MYlACb~30Kbf~p{uSPt zspB4w-6Hg7P^oZ(IXW<2d^l%8j|Nl5Z$28BBUWth+}mEVm(hgOqWa?M-FgXLM|;ey zY$sdbEASE?0D_G7`g9#f3gLwXbf%T376RSE7y_$PU_p zaXQ`!vJ?H&2|%jQH&8(i%_ECoLx=tN_-PjCu0!lJeCg0eq(=nZYqbp&tHuP3-zm&~ zD*cji%K5B9hfeH87E5SEd3SVRMb{ifuP9E5j!?$HgZhR(1g#E6PFSM)j zzSDIm3d@x90aG~HJape0x{n_F<;@odLV_6B?rmU45o=>9nQ!bej?n%q-G18B=mDeic4`8CVKSg$8%v9k#XpoDTcB{!!aRq|V* zQGaH^%ii-53!ZKZrqg?i3&awGzl6TYTTo49OXFiOATjXZ5N~wxe(?8(M zQj>4su|c3ct1<&EC80)O2c~qkAEAgRh9D%ktd_h;!jR?gOEP0Nt&8EyfwawWVaduA z1t@~$hZ#_9Y1PCSAz(%$&61i*2OcjeU;B3uZ zBkM_4dZUVdBPg7q<=k)dz}j*(1d-3|!+QZGh(03yUNqrpVJ?DUPQHhR;3Uj&hg+6`oXGsg8vyJp%vSb2CF!!Lno6 zjLSqfuVggQMYKXGo26@qzwtbv&YNm|uw(Fx7$NMRWC{27MkLaGoNHYEuk*_zB8zFg z^9kPd+PqP1e{^Q1Rc`>dr$U6M&BgGT#X(VNwf*#_N6Ydl>iqOQrxU*+6C8Hc8uy9#**?#Ia<(4>cjRe;ZHb}ZK7$JT2K`t7yFV|@K(2@N3 zL7YLNG-|rwpiDP?CiFmjaW`&hOtUa_rvO@q$Qx16h_2EBxOj&Ns-ZSB$cGu~eucC1 zm8159lMe<9x1Ie4iVn!}0rG*~uw&ux!0La8*e#RXejYQ()eLg=806H$=y2f$S9lZ- z;fDxP7qk7~y#c%divi3R*aC+ffmuv}Q_O%-e8D81U=iC3A_|qp7+7KIh{!vsuv%g< zDu^Yy#Tn|WhSYIaHQbo$!OE&j)v3C=t15MZ%Aszs7Obj2>P8dhaj_m?RNs$wHp2-IdXD1($9MWLkMQ-ButWwTLT zXKx0``RM>i;?B~k}{(G8S?c3cnF!Ui`Z6KyPtfx-%4(O>9%=xDnYO#`y7iCwPH z1<73qB#dbo=7ub_Q45Q&Mb%Qakg3Z|uMvxj?yO52%h)Zk7^iVXq+*UICdgvl1#gXE zKo-wfj0-Xd9^sR7j6X0*Qw{;P%CfxOTS@W?2_6bZ!iBg9a5Wt4s^D_C9%Wf@XDk}F z@(5088nAQ_jKVV(!LgHfWhKCFM$N@CHt7i$ISQ9NHo|}>PwR!Q1~Jj0tjR2#UD^m` zJgMCgT&<+HdxJZp(BhDZx~npRz`@3n6?d>4H$dEP5gjW+yI|B zc!MRd23Oz-jKK|f0b6j1N3{fZm7r-zKoV3)PekM)=V8Zzs_$ETiD4reVW2Mclu1qA{1>W7b4&iHbwjlI>Ks#0$?x7&g_pw`@zl~8di zPtCcAXqph-n*(c5va~Y6=lfmiM@L-O-9xaRir|2DZmTHU@}z}9w~}K zs47;E8mlA>flqvyGRPV106X9*J!OyCwkh1!6?QUqV7bfGLRhnlr*t0FPHxxw?`f8AvNH^b-nf?8mZ$Z8b^-+^||x!&N*rfAbQjON*-{~p?oJEec@iO-r}^4tVR zPHDs`_2}hA%$=7n(c#ch>444my?pOE2l~(N`>#_o=3_8rs~$53kzN1mRM5)|#Y=S1xf(=rp-Fmo7C7abH*F2j!F{u zxWsClLEs_w;U50spxTOgmo{=~@y!^5d#uAhY_hrH)6VW{6u~C%M%szb`@1hT;|BJ& zZQVFGRxR+-Ot%mY-2=ZQY{kW3Np|ACwAk(%n`)X>r&zLGx&`L2kP4~3b**u2>zJLRc<)o7N>Q>ytKV5SKPGCxosmVurd4L3j&K?k$X2jMmVvdm#+( z%cX^4yY4J}bp{Efgk6XR*%yBPwyw|?tI=uH`pZvld&*%(qTAZRIfz!Dy*Bz#zg$b` z272RV+nam_8$!W`hH66}d24h=04`M9Uzq!q#u)J?ZF^Nwht8KB-lXlzmrY;3E!@LD z(h+x+}{fN)Q}Ejsm-cHq<#-PR7C)1_v$=sexP&z~=!)8To@PL;eHvY98A zFE8}+<;(XD^xr(^KJlm3sZ(F9e8}@O#*e7^AlmE(Xlk`A{D8IHOCB@gD$}U4uEbV3z+2;oxyeT zg&H3y2Z(rvyTyzv$tfCgNS8p5Fp2iYudBpKWC|=$Cw^j2`pBtj?dow25Y10zVq1j} z$|;)8Q+9PDe5baD}DPJ@OzR82qJ@7*Y zw3=L-1P(4!7B?-iA*ZYU3kBXFgDn=e@rLw9Fc7d1d%N;R*4Ybe;G4K(>1uUJIoK)6 zv6{&#dK~Sb_o~7z3ylEa0D`u(Ydy4Oiy|{-;b}1~B49;Yxqm8cMiT8vo)R~ll=Ehk zRi~?F`8iW-FusW|yNo!Qk>jL52j$O)w=RqoXC0Z~7vKSzsu6fpHE7?&If7d5BubZ1 zG@bE)#_|fq^Q!>?=XXjJ#fC^S)`+(!T847O#wvqr` zIJvZl3KWO{H6TNILAK?wj*3#8!Dlh!55Q$t(((ti4e^wDGV1PN1h9@c6wVMZ1C~0D z|6Xg48fdi4LAbQ$@7t3^C#(ozL-!uD1H7k5?X}ctaLeuH#dwawu&i z8cnJu5He}Kh6b0+B~;SCq#dgdj}sN(V8H{9fgc<-BTwlV@d5pKk)UfF=B}%~VrHKwz zi^0+^hC}usF|}_1`|`0OXpSQ3-i-Tx!174(7IEksn$EkopOl%qPd<)yGNG9)?9W-c z+3>6~w$Qz6B4#OISxR~P@3ploY>O~+&MT?<-I;OKbU%#(KkkrP4y|Nrn=6yL-@^dS0{6`dn&doXETKNP;F5~r<8#~|N8)_4{4 zm#afeR(grT8ipf4Ew^N)N!M`^QPuzhmXx&3;~hf0f^dAC;V8X?0$3z$t=MJO5YOds zBX0sBGf*;BW*WVR91lAWfvwG>ZqY2Oya0?qbHA|&JIvcR+SYY-H=3xW>dBI0}>uOnP_Lqyokq zt%IFx;*qZwacy!Q2|Vs`>{&kMyJef|5J7Hs<0Hg=&y|`NzlCzSKb_PKLpDA%??h>v z+$>ge#YZGSEWZrg`g$5!E~bb5R>dNsvETh7flXoGTN{P4j6alsO!JsFp?~x|={;9Y ztJ9N*kWJkDfTsgOVW(Zz^kySPdqHQ#!AH4spZal<@LP);g>cW{>4ihrfSVs^7K71b`l zZiL5qYHvHL3UV+T&TKxcmy&pOmHOa0QS`;*?csuj0oW0=n530RHoxu$Y>koj`2gFr z(aV(E2(qX4w=GdZakze@EF@~e6+lLj!8cT_I3Sc_%0MYma?KOyw-Dn<9KqZFvu}}T z010-x0rYlwidH$kQ+6kt0b^Q&;?uwKq_7c5_oCF#P#1Q`V%wFNwW(B+3=0k(u5 zEb12C@)wJ-xdy88BPC8zq*?n;Y8P;@XdLZwu= z4-hJDg@H=h?+OE1&}?K(*(AsNU_H;q>%~DZ%PPbPbX9R`Nb~sd%SqsRY^|=vTh!gG z;WSQDLMeVM0)wowgMEt-N)<IpNA3HJ%2>gJR$R%rVs?_?zpiUF#K(08-eNOT~eXS3B~MWRH`^X|hq`IWtKZ}9sb z@~&th0h2MwlvAa_@c&YE_r76u#!96&h|K{te5~^#2|XKBOV%a@7|LtvV?*Scq4~{@ zOB}oy7ZrI;TLC=Ne+$$Y+}Z6gjBWy;?$>dZ+7LC5(DelJr?GvG3viPC-;E8V^Snag ztie4Q@dB8<2W_T9NhQr9JSL@DM7{~oD}o%ZO*fI93}$ z@p+!hc4mP1GxbxG!}$;=VxItbB#X>PK<7JLb;59#FqW-fU)@uynX6Gst)MPhM^(O# zqGSbS`4#Hrm8d0iC7&wCvg&0kA0IWSgV>SMW9I}P=2o^x|L!&wOZ>TCz)&UE?E1rk z2Qs^Q8%pYeBC!T-G8x?ETt4%fjBT6u9*r$Ly}CqKIyHjq`is)B$2 zF_VS(1y3eJdnrMKc3KTwiF%2_8u&r!AEKxu6N6ST1!#vA-Zs`Gt%u{&=l;B?uiJS_ zQH7*3Mp*?@vaNe~^%E}@s#rbI-If;#<=wtf;Ng#PbwSAdR~Cbw*FvLVb(70_F8njx zC&nKd?BBbxO$ssWO0Fy=!a8;U1w?EoFW zoV{fI*esW=+>?Vw7$HvB|IVr>vrS!z=Qn1r{e2Z7+1?Tf?@PYrjH11ELD~AUxJ5D*j(v7E z0z3od*pdGW)=`ZiZg=tiC3T)%nCByluJtx&(N=Z=f%xQ10~iwnk8aZ5{gxf}Wruy( zV+Z!I!w&4R4?FD04m+^Nj_hOyJK5vd6PD=3lO?ERrYNbRq-mig@`n6JrEsE*D7{fh zmAd$$E|E!SnmhTA(NDZdnV~Qr$m3s`8IyVMo(iL4a|~47IS>Gj=w%4WP}M z^>i+$_Ywf_?l5A%@%p++iq8VZGkcR~jn)2p~_p`bQTeY8Pqy!$*@;m(e+XdSACr9}ayIi&2(K^Z`KN&T)C4A$ZQ zVxSf@Jv3=%6pv4Xmv|b2;XlQ5Yy0aBQ6DPC)K+6e(HB8OUX^2J=!l+I2<9ysqjwr* znJu-k39m1SmRF8}^f}ReNTnh_?4Y(&hAE;l$U4%N`L6Yk@|fahSxoc$=7UFLuC^dt zdd1?3rd+cINFW*m9o}X3D<3zRcLHeK6gMLU5k59w{qO948rDYpiR9~nz=>tEb+O|o zWoDNZqc>R@&?i%u)+Pg@D817W-?$DSb9M;ykSD7K&<5b`L7CdDagR7etcp+c9i^kduZG<*(yY%_9r+QUanz;_#m>P4-AN(oVTq{P2Ilt>MgB z%yXbXZ|6Je*-_^kEDN3sH~WKDY0kZ;fC01q5~BW8>sI0 zw(P=ODT|g40C^A-gr2VzD|Fo*_eH|7ZF-k%f}&c*s8v^3D_*0t261!8|j>B<-Lk)ucIk zLxE4W#S=_etcr_eewd>(PNt4EOjKMXB?U^1z{C{R#3#$*l!;Cou(12{2IjEBw79rP z%-`jej!FB)JCmYk=2~3HB_~Ez+_fMUd@n}b!~`6iB-udVUbiv3nC#?Rm|q8 z#F`Y-bZL`AHc?L2#1)wolcVCQ?Gxq9_(07IQ)NForpJUZA4~`HL8X`uW`sGxqGy(- zX--rS^J1P#EQ=oi0oT{1OJA2ReO>zc`nvS>_4Re>(%0A5*QHBemo9yMeO>zc`nvRW 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 z zN^4nPV{{fz24nI}ydRZ48+gk*akL?7{?RIOGy3!U5)m>PP|bNrI*0Hc*8VoiW$-im zy8Tsf0)H85ly#h{>t|WD9}|t@kv1rg#sLRvbKh~!*i%q}rHYurly`A@CKC$a+Kg^_ zm>{hUd8cy#ee`E??uGYcd+jF^r&mY4&olpzxKn!2P&?EMAC7YtN2ctL=58@z>mEO&ze6-*ZO5neJfa>b|OCCYj{nf0Coqkb6hIe z(A=Ms{#9FK{i*^Bs8SNWw&A-jDUblt~9 z51*_V(Z(mQM?np=OG7n@E+v(U>A*}~p+2irouUoBSBT(M4*Kk{C>?^zh+zoz>KCMm z)@qn8Irgv@J`!zI&n$H*@oa6_fxtL4(%3d%PSESoHlAdN2E7AHo5`iH;St}iI|D%xz;z(BB1E4z0} zvH^($nFEOfI~}I5!tM{RTECzyk>DNjK+TV!s3>qFycgmaw~c8*BH$bPRN*gtbMJjI z3I;JHq<~d0{y5J>y&(AVAv}m06uzM^e8txSk&ETGc)uQgN_extV5~|*ouTH`8ZTes zLSEd$s!{4*X$0-!oz*hyG7Q#c7-XGpZ8z;>Ap{Ken*7Nu`!>UUgycqg9Wsm;fw`H? z`H8AUvn=0`DkR<{tK&m>5H%>nvP>n)FqJNSKzMB22=8$cxDT~exsR8?mGB)B-?g0S zRfkrzsuDD&@AR5#gCB7twFd7=mFygzBwgO8%apFC3nxl|L&b`q73l>yk z!DVn8ED<6|@SL4i7ssJx$W{cZK#+qL zj3OgzFpD{3AbGec`*4%EJ%sN_lA}th2qgj(3JI#l4wi@5xr}hOfSFSs-zV!;c!3dE zC`FQ+ke$R7DimIrRS^(H5?7+^NFGd=Vpxh|DXLmGms9Cft;(hvQsGoGl}<(CKo}~u zMN$XCKo}?^U6L$!*d$#N2VxYIU3n8>q6w5;M%jTd(j{FIN4jEGNjHBGHi{~w3rE%! zy8y%~Nbx{j_~!r9k-A2@WX=}8I#}vPOXX5I9ZZ%Qs@YPuyzvc(4>&QP8(o}&gP*N(S%BZ4JjXYtq2C-~2yo zG1Ue2tvcO@)|fTTaI>M;ielYy(U{%n)Ml*8swQZBEi_F{Uwr{;`LIAVHzl=;BcQh& zOS5Br#uc18uM!^TU7v2?cmXky3eh~ z4~rK;9jLD?b*CPK)z)*^%}w09*+?b<=kgEd$h}#w*PrAbXv2AT@~h2z9E)?^9CmZL z&IG%xtn*}$lkv{n?&QzaMxwj@smYFYC*N0FhtZw7lhxLFdS2bh@730Mx(i<-zklxx ze1*-hyHkeV-g&RK{Nmt^RXpSUQ0mcl9SOUbhH1FPH$0;e>oYn}kAc$YEEMk!(r#H7 znA51k{EIhMk^YXE*R0QYB#hUgmp}^9X=XKWKL$R@i%`GeyxYvY`Un|B0GN5%F!s;( z*{~TVo>CpMS9arTdD0`hVcoEXSVB1V-!OIAjS-38V>h@NF1t19Zm8K^D~|ze zrph=!u%JJA7AK0B$|BZv(3oD!B?nGq%1$Z4kTbz-E^%nSFw2*en$+PA)kbf}oA9H4 z@?VZs^NzcJm59erP={7{9beM`FH%yG!X?vVRxo-V>(hw$_;t`Dyh+FDPu|AmB1Y!& z=5#sN8}Teo6#avj@gIL-dqWH>_wu{SDRApo>y$7|DTx#$0J^x`&}gcpTnKp>g@Pi= zWPk#OBuyh|V&YA_4!k4`E!FuZ1$-n0KsBHOXfk$qMLc}y9c zd375({6=93pVsJDcaR%bC^}4Kum@>k9vW;IJNP!3I6NSKpDL*(w0sj{Jv!IxdfMOX znf2@qgC2JE`6s9~e2y1y+Qe;Mgcm%WH+tcIBVG2QU0%zW~oQ=lQxi)=TIpv3Bh~wp)p7hARp@F z^Zxgd(wbuFjwPhGq)K+qPwjLO68b}b2xhnI@k?O+KzBTL9Q~s&^mXL;Ic8p*gbb(G z$j~J_M|84Af z>P{Rpa3+4I`76fUB;)Jkpo}-(Zgv5K!_T=XVKaM85gL_22ofY}XmAC}vaB&flvV-p z2XG1vh|=IszwF08kBk2n=+Wk6X};={Pk@A|CkM3Mf7ul|<5 zUCp+iIyqf&a_dmo(|M~fc`3gfSWJ&-3*MCv5reM*dzim&o_s{&4#p;>( zpI_onNU>|Lcj9B zH5YG|hqo6(qo&*A`{G?|Ycux6_i}hSI+hpL4{38|zDN%1gXC<#A}&+|myAPso? zoo71n@^s@%D_1b;oyUO<=%m{{8po>*9x zm#<;PaCxFC@iVR&xE3KTAG_juT~0o95ol1831b9G;-&{H)ZQqI&d?9&3vEGLC(&8t zNz?gsCIRxqd;R#GOx6@Xc)exfB;m)6N$2uzSUfF3=MZ=4MDl~?D)m@5ax97@+gW5? zk;c*-X{t+=w07&KNvUjAk>WUspgX9J4^)@boh?HwoJFqBy6g`dgN1>bIyFt+&s{sAkjBu@BLI z;-Foa66YUQeNSaRKn%^|kd>j@V#}hc076b0R*vYBp*MwpB8Jn0*jM5g1Z6YYjhWUk zP?j}#1JYRV6;tp#0319t)*&wn$uX-dJJch`83zyp)}z-j)Jm_ytY0%GjwPQ4OAt4F zD-JeT3277#)nd>rS&E<;R#}4>ri|WlAE-J2!o5Mu;RXv>;2#-95JINRwBaMsqnJMk zN1WnGB%Ov-Dx}e=lqiN_Y8HmAEyV&e8%O_Y&}ESj*J>J)m>DnO8D=r|FserEYp}*) z3p}9S4Nic95GwEtp>Wm|LQMqE@JsZvMg23@GMiQGsJ)*azK(~ zNRBF?idF%&lk;`H1eR~86wq;Rvqk_25DJBZQ4-@Q48suUSO@fh!vi6S2nz=pLxgcy zAPNTsF&G0;2*ofAiZBqxU>wOw3MCJ2dRF!noGIL&x}o!k4Jhl540D2LA?1kV2Apwt zd7iGPP>BR2>?Oie=0rT*Rb#dm#L9qFE?hF zcl6OskB<)sD^S4R5=qU%(C?PU9J5vfGZ13o=zcLCObB5?+4fnDpeWK(PdqYwPQ{Mk z3hi@$+7`9Wt~wu|Cd+wLpQnyANjIAy1U5wibZF~7Oe4M7RA@DR(K#q^A?Zx`^qr9YsBOM4!2>>nTg+%i zD#`vMWfZxG!USOEGTsip@Dg05y9RWQ%c-K9o>F1C38FF)?q74|ca!8{^PSS3sZEl> z#w?(#w0dkY*4ffyLd0j=gP+Mcx}l7!nJCk7)z(HTxF(Nen$6`pNw?Q7dm~AtAQ6~G z=)Zq8-iCXyt&dQv)I^FbvPB?lJ8#)3o)dLB?CCeNC3~G3Ec=5w5u=01<{jM#Qh`jq z85PQill^UjnX>c3u#K3z4W$O*2cJ1BaW5%x($=oINgp*IqzPMS9c_n5I>nS7 zA=yWd!~+DXR|FW9m7d_@EbRswM6P=@uTFN%Su;N?_wwXJk)i=oR~FITHWeY(7wa?* zXgEOhbpbPPB1I9eIkaW|Qq?&%BZl}yLl4s#?a*z?(HLpGIe|WZrYbIkfw8HBq=nd% zP`!{tgf}*k@lnR-N@gH9Q1m|JMS~wB2!rs(ZKkn1wiv`aLvNyZZ!>1EEtzCX2zv~- z&w@7&lMgI{2fwk!WN+8X>bT!Jz3FdLEz7LDxySt8U2y^t2hwD4Wbo zyQXk^=!CwF0WJO-@DgY4L*!dl@a4;2PH56WAxZG)Ube6i%P*^NEhYlNS1eU@3mTvk zg_IF?pL}-4@=^z}YAd@;{v8s(9=aRg{Pwpao&4`eL(WKB=pXP{VW2&U=uJq5OTHlW z_rUSjE?SDY!unauyH!a<;l!)!SPta3PEsc-s59R1A)2vSXdb%@0cy;31ez(OaqF; z#c$k_54fo)W+e&?y6WLD%Rxu4>w@+~BuY$woGoL1CBOsQwGZ-K9cl)!0fZ)-g_bKk zCaw*OTE^z%v&Ud6s0*r(gNxV5le?Y@wNAI*2!@G6}&-*WCn2sR&k5m zbL}WC8wPeu>Enzg;79@w97a}gzHR7qEN5!3Nf+teH!QgGoI=#&-8KQkQ6Mgyi`k7F zUF@dedgv0cp1XhtnUXU4ol$5$`LFK&%b zPje>tC|kdM88pKjV&p>+x3Q4>MtVM*+%SR5R-p0r zh1Z+=hCRuVrkQDK^(+w%@L)GK-Hk>+pgs)%@eTR#JlO6@#+*U_SS`R8(^?}J#GBlZ zP?^w~PvOguX+%-d2G8h^QX9m#if_C9YDTf}X?20EFJ@21cesW!Y|m&Im_)TigWD!cuVySopfN`Xe}vY~pf(#_xXsa2jpx6#%0Y^porin5S8PI}12^D9^(A!6hu zlK7+o#ruwK%7i41`Ep^%wd_ide6ax~rRe>WNz}SBg#*lv6B9DIA%t-gZgn&@&hXE{ z@0q5}yC8*NQfTjoS`zANFp0wU30v1b7FM%PxO$9-&c4#<-by2OBD`*$Y1K{49HqEX z3kB6qlLW=l`Vh=0e{VimG|khjI43#c)PNq{7MT4+WW{<4Qr4<{8>x2!&Br7H(=wt$ zJ5}||?8;vh+rQjq(~sR63iG3}`YG%M-kCSXQz4`{e2{AP!_?BF(&G%VgLk^p(Kxy> zMz9gUl#njB4iMYc#u@gel_Imbp-{2A0IX-A-vs=NJNrGC`vZ6m~LhtK`0nT%YEbKrrLbm;ED6?t8~qmY@6k+O{= zf^=p&ah`(&41BSh67RYR(`N2Hor$OHok|jd$$N(YbfW|4*z2CHx#Dj*l@*|sm>R$y z@yJ-M^FHB*j#EZG(+Fq&NeS&Ogx%o^U2tZk>`Al#n;+|-E9h4|2eAihB%2#P#cMOa z!c)Qroh(nzlprxN7?k!%nrB{P^F$E)`cmHX>8;0}NzP=OYSjPGk9;yVl$*I_cSgh| z_AUI4@)L}tdBDLNIo$#u+gq+cA1H{@jBzt2q65CDwOT0{gcw#L%TPcv^p`N56!ETj zw*QrDHIdpD3iiF}vJ10u#e*SGZ5iR5j69pP&ED0fDCLBXyd?*JA6GIHq42`%?yGm< zR#aHn^``I6vgg}D^L~&dhY9tl1+}UYctVb5PJ|bAi<;lNOUO1XI`_W;*b54ngU5?H zo$`{#JN;6KVAf4a;-rXZfXeAEx=U6Az8mxL?nagmv0xmM0M5pLp4aUi&2!mK>5-8E zfKP+h^UwE9pqu|wfLy{l70g=ZE#_;pCo7*jc87ruiDRB6nj|k7ov^Y5rJwT#uPmDo z!$tAkC3C+(ySuWbE(N4mCN3gyAew$r9=5nvL5R=l*Djc%>4xvowlgR1)(aEJ$BYB{63-}ilX1qNLS8|$ zZE0s3Hk1mC9~=AjM{s4CDAm92zXU3B1s{HLuBqV}L)>g@|{Oga;P z?}4)bhsR$%xkT07R5=fSIKcl_bS}Yujp)63jYmY(5P1ht1YN{-{>~TI76HV|H7<0c zce{x1Q1KC|@z-HWZ+{h85mMV9UH4)^ug|Aq=|rcXHQeMkzSrC@3*=})7|SVxGMO{? z4{~>-!B=zLw;y2NJf5YnhNQ3IT$om88ph`8{&KXoKPA~OhBDc6%5S#Sn4rl3G?qGO zVd*D#cv+sZ@{!_oC&r77!i>R)(S=roLBAmwRR@V?IYtGr!^M%Sm%4R}6!SBO((6{I z*U$HG=F=*0buhb!C-ak?LNMI9;y!Sj1qU)zQQ5;fFf$;T@5@+e4Ma=au9Y8}h zR`PT>>-F$z1^*^8UCBOOU1az8X9UsaAsgj68wcR)giTnZvOQXp8E4oSbkiN4u(hXsY zrC34O0o?RaKeQpd#sQqqVy8-H3GEDbdO_Xy`$93tnY@OE;fh^TgXnXY9x zCN@86;&j6(c{3?$1sGvx=V}N-m28}4TrT0Yi&4({;$4`Hl9RaDH#0|EZV;mZv?5%9 z03qOrBEsG3O;5Bx55?p?c9+N=^-=_|KYjlbVUFx?I}vtxFvyPpAFt~v&L77KE_JN0 z9v6yQPuo3sCbvP4`N4QB1Be6GMYle!3Y9m)*}t`>Wd3ZgmHO##(|(d3TQ=VHsbB+{6U-Q-(H?5l|P>}Whlm^}c!qzqr3 zUpLKhI+1kSu8uE35s!lb^tb?qK@&YwIY;S)v}5|Er2CFO?rkeKgmuvlG=HKOTEf$>Gpc^Xat>lxS!f???d3`N9gQO=;CS!?tUvj+Dug6Wfk3Zt+gG`O$R zA7X%SwsT%qX(24ry}xPmGzzAw@oNM~B6fmbvRFdY*nq_=euCpA3uiA1R8`My;}h3T zmeTkB*5jV;YF?j|_rL3B!^woZlIfQAU#CdX=mj*-(#A&(ZhbU^h% zmXRH^7r|(eQ>U|W1DkSh!$zKAGQt@b@?`eOB0hU7P}z~fm@f*!uf*ykO%2o54w8p& zYf!aAwK!EA1trgYY|xGkGiYOei=ZfWaBI60kM_rWU;9RuS0JLo2=k%PSGTtUOELJ| ze#+#oqM}6W%564=-|`C=FNW>4)LA;17-l4ZaY?Som=Z&a1~Nsng00*($T4_qo2UkF zUOGVZEJO5~W&n&e>$9(qW$FbR(!QAIa}qC`W#TSEpxYU*`t#QN+AM8+*v)m%0fQxq;4cn%L6%D?5F-Gj1+ReGbgZGa z*oKq6+$^UCz`_o(7GV`tcviD?<=Z&Gp1@a}j>G*^!%8nCyykHSsT&vjU($)i+eo1- z!(#_XIkNelvvuv&@t%YP4v7*Evx3=i*mDWr7|?FL(w(C@3Pd#fa98iS$=N^d1O9t4%&eZ}@3L0$1YM2KU6Y-P0C3ZiO1q># zA)pYcKt;R^P;AfQN!>ybZSuG6wrFx_T*i)G699K;Pf2bN#R5N1Z-Pi1H|x~rr&tM> z-WHyc8E*&zv^p6RV#>E7?hJfWlp1A3>k-ndep7nnc&=Vy{9PY8TK39!Fp*wCsY=z5 zvVe1w&@Eyoua)OsJj6%{KTlpa3@K<_!bH-kL-85e@u~$+88L_e(0Cf?9;XY+lf-{5 zso^*s7iF%Tiii0HF$x_PXV|_O1-Fch@L0;aat60K42-;+QGINHr*js!T&}FHopFFi z^79x0PjAFz4tx~Z6wQDk?@@a~M&dB{et zaK}T=D=+7d-ol<6Xt_734EX_@p8tCi`mhf)U+sR$Gvxp#FJzBcQR9eVi|y`8>vA3D zoc_N~@u~;SNxbTO@JJOulqVBdI3yHjWTQ^pdo2-FqZOJ@zVW~zxHN~BLK?4Qw^=)> zpy%SExhV`%Rv{D1oxuGKxS$jGqq~dNe23#PF770i+KhaDM^P`%M(6lnhf5Qmn0g1J z5%q|=Z;4w9imUD2)01s`_ZN#AwV`djdLz)u&K&}8L+`s}4&nH{%)fy; zcAr3NXI?d)I!qWkEi*qJqhxZm?;Ka71ieZP}>drj;6k^quj=Au7kc_40-OY?Sp zJg$dE`>x9zhE!sJR;H)4yUfj>Gvo!+<9AM-{n%1>d`5RZSSha|Gjl#=BA$;_U|E{m z*~_=F-sNLbr&w==C$sW7|Mqzw<{Z6sbAXkAoa`}B;wDMvqi|3Sln&6LmNfKG9Nm=o z6N>=`rEhg!X#F@gF@p$C2-ka$^PULwNsJC+4l#eZLgzMgyZu03rLT8qsis=HOd0du z-16F5^cGk3ACz7w;gwwT)9i)R*&?S$osfGV(1rpuoX~NYX5N1m14_2U{;&%lT!W;1 z{s|Lx?!O|k`f5}&*!{9yzv%s+bYxmQ+HV9`U_j!(a9CjI5m}d4wXJe#HEm`7kgyk| zf7AQ{LSBfxAX|KAbL@>7T1W_!(r>=iX}5t`&$p`ps`cQV7wQO?$#iS}m6m_{#r@Ve zg6Y3$@rJr3Uf}WJn>I)~}=b`OUXlIkKhQZ4OW6XJALdoe;v}9R(ADKPyFZBwBk! zt^0#R=<(z0K5^PbmZ8a_b_P}H9y6$lGIfQeX;m^4Q#qRSu|2c*r29hs1Z;yrzm>h0 zm!klkHq@hzd(Z?8@a+qEU2oSLd1bs;^u`MVj+H?63z&?sWv=KQrqEf`EeY;P_-Qh8 zY(TYKmcX`R4;*a^s%Z{Rwvv7BR2H^ReH)2#o)!gHR}`_%u2dX8!u&T(cvg`CWEZ78nswm91c$3(uNP|SX?SX zMT1~3I?U#WgNI+@>Jy?I)BL=q-AR8!nec&(M9Uad+c?B{&+P+HHPcE}Pczr6l|8xl z+hQ9BlJOQ;m{X~E_ZHo|-(;+aGaMnINtIaEW0mew|uh-dA z(tD>EBs2RjbBIg-u)$+-iWF7R*5C_4kV}&wl5m+52jq!MV>;+F9MTg;ptBfwW1myR zSZ{o8j#sVYb#oMWW?I&gQ167M<2=3;3I-ROObR8ThSr#Yg@OB@*Q%N!RWImA?^lU>ft&>h)o-f*OgT+2;5I8GQK{sk zMEbSd5G?Ue21@q-XKlb9^4bh)*pCZgyqMAQP|AjO+E8lq*B8hQVAOCM&**B>^u&sC z&BiUpwPG-$qcG~4Q>PX$KpEJ5!H~GMf*6jiL29tV2|x#wfnv+Z9hA&Ht~QEm1YgR= z0()Xo7FssICBsMt7g5UWm8TY+t!0DxZP~Jc3}Q5|AzfMiEgPIlS25fUd^tEM52Ccs zv(bi|q!m7^6|c1`A}R?C`0*1og0=8^NtT!3r9D^V<1F}@wmRYmqY?%*@6z6~6i-}o zUR*Fs&Ri?orM;--pCIbrLTUpARaR;w9-fuX)up|~%noU{JmJliYxS^F94(_fNJ+1L zXYh8#qdeGzVDYR4-#jmYwI|dB=cGIc`xw)Tp3sAkXtr#^5&%>$EHlL-AO5$7uxE|( z03BvHC=-buAmBTY`{1$%bK1KI+{+&90XFk6dl0STwg%zLaf1}?Vvd0mO=AIg0g6i&XAcsM!JeeW1U?xR? zC%xmr2LnQh3ofJ?0#=tMz)FCOA4huM-R(%A%n;hJc7k}BZ_E^d@EwHMknKbY3osSw z)IeHMSyw_bQx>+1ys+sK(FO+#8_>51e#>P*W%$4#=cHd8aA9%kjhV7MLB;}8gi zGl3kR$wx!DG4Anhy{^i>PR=Xdr$mT|OXvD>HJfm+--c;(%Bpm1BJf?{DDx=D2iRaf z-N|IREP76H%>1ZZ=j{r9<>r-A;Hw6Q2LHs2ajX0|{Tp7eKJ+*-K)k?K^g>5M4L;E| zLDnF`st=cw@n9QG7P*I%2Ud3!qk9OpL*hMQX);E(!&7c5*~?E{3mH#vkn^9@YN3*6 zhCIq2BjG6wYQK)xOIce^*l{-3{1T~Z$peFDiOA3m--dhrV=ylLh zgEvu32{A5-InQGJ$CBNC-=Za0IQSPxN9qKl2o&|ty_MDcJzDocw%Y@SmAO|bD^JBT zCl&z$sL5PXcPQZ9;`<_rjX8`r+!lrxV0xsM@IPo=x2S?nM1=3bN|fz&3TGu*oIQ9KfL_&(@g*8F8l-v%Rmm{?0JofCb?9N$Dzau`X~y)r<>AH4X` zw2hC!@MrapxOfh8!I4om5(k-8H_^&`0M_~vtgW#y#!IixR)8>;R$7v0zGr`R94J)r ziow^QjLol5)kO6g!1Tqwfwpkhth`m;_`vP>Yb)AWGyTK=^$td zEmqSMmmVMZ(w^C&lyEL;uJy_*xI_(Hy9e+oOEhsjw(oNxZ_a?XWN{$@XOKds<-{+j z3;78@kghvz(Ducd05M~aWTgA$x*)=DT*tB5h;3K_hzTt_Ps~UQVNG?T5jl$e(ek3z6vfG4--dj`2L|(ZQQXNn^Y!($Rl# zT>Re&xLug{pwZ(hF~Add^vx>&s-N2@KmL`41K@osp$`C_I&w3N>H^_5!aM8w2u$cG z6YdKTYfe0`&XjV@#M#`+k}%VotZSRdE!XzM3(VMJ&0FMUIt)p%9LF&5n2nRiW|#00 zfc9Xl*AUTySg67?;D~@!-3u1=mLhT_WHzPPYeooxd5u1cUzx{QA@S$Ki$k9brTiTh z$U031%Q0#tS?q*ItI~_f#g*4nT;n9@77OH{bv+qF=v!8$&C9eEh5tn0pw(+Z0NzNw zsF!oNf_Rrra-jf8V%g+r?tDX2U_lZS$h#u$J7gmdpWT!+77XR*u^L8WgS;maA(A# z%=ay%!ENLV>UTFEwE7zR;)s}DTqIu%26?oy7+S@Ag;0v($Zi@rP32ZAZhd5{I0OUX zXj77}$~Q5{Ee8KnKDdQ>*QJH&>5WjU7?212L=YoraCwj$^)C>p#45cZ%A4v7O9MqY z%25(fhRw0nEs!!50=e?-$|O6hV+3;|nG9_>uJE;%VO-oCt;2AEG94+m-Ym5CT!dy#yhrq+?N`QBSn;imz~+i6;s5XLdK}h;)D}4>KcO!{%?W!^ zzV)}DTVZHfbaKZUzJHhSjGHa3Mr>m%neGQR7Vr`t&|(?YeFzl%Du9EkGrLb?p(*D1 zg|aEnZ-^ncQOuFxw5*W?c;F}tmJR~|R1oWwtsMq7gIBb@j%nwZ4#UBXNEBQ%Pp;PV z543R=SB!0h%G1-Nn|h7_T~(p9LaShIA2tDNsYnE4K{G0I&(=j{SutrXz46lrJql9I z2=pbJv)JVbJX@o*JEjL{%{p!P+zdtdt_Ew$Gc%6m6SyRBpJyxpf^~1`*vwhe?t7$- zon%Uf6CbZ#40mHgr6^H^b5+t#DaPjRPP=^cu4gg1qq@@G9g_WQs^nJ@9eZ zhxmHD(W(}~`S>|p)4(f~1+!KM;aPm0!r&k?=P zF#di;B1~jN;Px4uQ%s^xai1`FjeE*Ev;JZmP(kv}FEFdr-0DcdY_m(jWm)2lr zQ`Btx4XVAwCQbe)0T=qA7#XD)Mzx^KOz*1*>0S0{<_}n47+3!^bR&D-^)F;CcH0Ug z2z5Oi5*eEI6YW!j+7+ebqgEFM2`7PfuQ&jTT|$4+qQth zR(7g8^b%#54YsslO&-8 z2>PiVU4KD4XLNuir1Qtp-4?viJ6f~y-PmC;Yt<|)CnRnMm_PWy-pq80%(%mHP0;dC zG7iJz7+bVMPK`&>B4tkk9f*bt#4|=y?zb3)m3{}b`X$;=>GpH~2;=6)5FBY&3(D&{ zrQ1(Uvgwy752DH1u25|YQ5IA{a>$4Zp-Flwg%1!rNyA(9CCa_t&F0?t&JPzf&*?L( zY9=}1t)Y|3(!EX0={MS!klRp`nJ8*n?uXh50ch}po#C-1bFL z#?3r482GqvV^S=D$$X4lEBP^LjMZgL^r^jCE`M9tr_;^`{6)c)Sdfn{@QKnpdz|*B zfhlzQVWMu}FMq+{p`Z!NjKGxbC~Cc+?Zwv&$S$a;bi%GHRId%4Q$U5z!y$EpLJV*p z)${}?q*frav8O!WK!P4#K08JG%ROGz^~iuIpvpR}ySz6eTI$ib2k;Km;I}SEV6dJ_ zb&BZ?8Jhs>p`@27bGsuui=z%VpScF3V}9*{0AIx$MH3&zHf9Om$b=Hb6&D9bdG*ZD zCdvtDV4(fIh4(myY17C_@420tLW#m1^tx|BOXp9c{!`Dzw0jpVvNZ7C# zUci=RD6fE@8#~egXYbS|n!8?4FAvu*r0m*tkfk_7B8_VLGZ!R6KN`KBPxaxo8s)GJ~9Z(C>64|x^aayT%xB#JoUrkRP8bbU0^KI(|oY;^4_ zyuK2k*DP35QUx|GqI=sezKBiS%LM~g_BKaXO-rH(!~LjHm?)KC3-J#KWsO8Z^5~au z?oUHT!&noHX*kkr6Xm0}qVJDZ;bxm4hM4p#xr6-}789Uy1+IZ_ZQ~8wL`8H<9E4I> z`g(BFwH@0prk7L_MPcwh80!}`V;dOF*(MadQidyb>w=I8=ofX|7bygQuh>GNv=z>8 zm#4*q$|e@q+x$Rx;Yljhs4+0oVAOy0RM(It0C* zy8Or&LxT(R#R!2u9w6b64H9gnqUvv@qMX!eOu9=LZi3Ao0Rx|_T60KoZY&O2EFutv zx^-g}TL4t*a=&w;@j=%vOw5dq!o)mxZyEc{Ik&gWICpmA5?(<0{}^9f|3~k5-!|bX z75UpbUbMstdI1YFaJAO+Eh`xQ3dYb)YFc$lh4E~>0k(6iq7x36w36{Eb4rC8y~?nB zM^6_F6PJA)5igYILF*(5rL=)y?M$~$9a`);rGgmJ2dN;(DHLo*lnn_e2<)%F$dsF! zcL{4&NMYe%2{a{S?kmljHKorekh|3&P(&HFxtIB%oh4!c@hK3it}xM`qwAuS^!kWt zrW^fD;MNjBjN4jK^?h+!*e3Uvg$L^3s)hCF@kxf0`v=6r0r-3WXt=#i1Doa@PFij| zbve^NRWRCV4=W2**~rv8>@)i)*~rRtd}hqu^K3$)jNXAmdR1i>eMCtBipTGULRk>T z+KuAMAr50&uVl;8Xz(HHZ3zmRMnkGSJjGD}?P6mqzf!jF1)WglJ9Z;ylPBGvVE-jV z6vRghg0k>mc>VP30f4Tt33B26y?rYk6|yimGO@R=kc9-`S_u=TUS%PR*{a2F1T+0A<0jI?_v$sNX zZXsLnUow?AO^=R9V|#|2;n4}KMa@F#*&WG*Ketfg6K#NGKuna6AmilK!gjPRaNwHx zEE?zmAH}KW(v+=7D*;6W{dwfvrrbuh`KPqk>Te=ai05VB-{Tmz&>^+6TJ}r|ivWsB$xIs8NU=^h3NO_a&-|yZy5~V8lf65HO9r4e;knu+C$0+Gn zCpaGnqde_r*SwotVQ31x&B_FJ6i3h^T~=c6DZx~3Qi+qP+VoOn6d2?2Ii5V9Cq-Bg z%VE!U>Au{y^qiuZJ;$ zv0P)sh`*J?gKXZ7^F&kYA_dFIn~g^ip=+m#fE(0fKU@Bcr2^( ztR9ogY>DViKd=mj&VOqlH$a#IOaVBRh+xQGnZTuW#$E@z_#x2Qks;KeOKTRxxjyr=6RBkWzTGFtve=9{oOXWG2^>uNr}B%7Dn0yq(d z;wf)IC`2kP`wG%vvJFB{wPy1rH|cnDf#i8>!2()89whY0X7z#5WQL|pLDgviF4{1 zzV#!3S~pT2CFPq_>!msVqI8G%j0J=56Bvc>U6xOM#=<%|$dw`%pIof3g=AW?ys4PD z`&@taH$Hp486v&oaWO6bd^ET{Z}Txt-9%mc;%aw$Tn2I9q7Rfiqd*sq2X=-k_@W9? z!Wp(K`B?G64B}v)+4}mtbQH>J+|?LRvz60Ed|W{|H1rxt)N+?9g$oe!$5tiiUFnuD`xVZjJQP#yb@CK~g$>cufAUU=_gK&Kz;8jK5zQT> zZ~^SQlzMGylnGVZp%YCa&s1;i#T#F&pwi2dHWRP3K!P^;C260~$o}7N2gnBmY-tXx z{chb_YtkJi%u|~C1@gvhz0M(kk+=n)`OrSWQw;)N?!%49G+v1b8AwwlW`C z06Lb&`0AX>0`7HlSvLk>Ny?`#Jpqixx2+ZnoC6iLM0blU#jFDJ-DuD6_G=3+bX@JG zu)O&&@VhONa?NZ}KsYPK0a#XrAKn_Dw=KF=-eSD9PwK~ptJeOCj^LFrR~`YqBUIRI z`%ee&2i2u*Cs~p#Z0LZAW%Trx10Q{eU{`8^_F?u3K1~q)1lD!JnllPPt>ug95c21V zgG23s$Ta%^n%@X6P2gtGbYrBNp0UcM0Pu`e(ql+CW5|H&*!K<2OHz3p(~5A0gfkZ) z{^JS}B&AGJ$_Shvj4{R-V~jDz7-Nhv##jXTP)I|F2~iOdLIuMD%{`pc3 zssxI@EM?V*lg?py#PyCyvF6Dn^fDPM#HV=nlF8&HEUOs>ad)aiwK##xTpU@gRvW(R zx~nCTP{a~xQ;^IbFV*Z9YR-SF-$2VI&?4j z^5Wdz1$s$oBF!KV!YM)445DBL`GljGK@Q|dPw}MJ4AunllK)(s%X0@uxrRG9gm1m_ z7m%x*#DPAdOLwaD8OPu~X3}{w$xj@|ectmMKXIP(vM8gn&6%`E{&SnGGjH7GnM-Oe2AJdP?0T?08<90xY-jPRc^3v(%BqN953VgOF>}+|I&P=2)@RTg`eWFK9 zWF9G+NB8jY6CLsyH<~`)VfJ`-?J?JI2z>J+Ht~yV%;Fi2aT|Dr7qJV`kmn=sah+`P z8lT`LC;7-l!JwC%!#8jc4~>VGC*Tw+{V8 z*ZwepDi$SDVNkb^v`35dhGwA06p_}Xc<2SX1De2}nUhk<5&5n7UM4Esd70>(bapQj z9TQ>C*W+!G9ex|$c2p&;~wE}%0sm*Sx`I#WPHXaf3Cq8_EJkz164YTW2CQnY967fmD!Gg{eZQVHH9RZG!@%0;R3#?1Z1Cke}v0;B1cdahNv6Ua%Hw zvR1IW3ZsR|SCO+li(_%@jpbF{My-TGWNkLay5yRrvG>|cven+~ZeUL=i@j}}Q#NNS zSe2UJnq;duVc#yWIAet|tV`)G3pLbXOr3ll=hrm$G4Sg;IQ9&MNPm$AZJh`O{h z^`|Q9a#WQZJPO}SWJ$P*U5(kdiQ#Uk$Nj**qmTNlz3Nkqm8hyJyDMy+EnE=5On?Ch zC?GaM6P4f=9DOra$rscw{U0 z{<6pL5uWzNr+rI@ayx*?J>-7)wpUQId)w1kO4g9I`{LWa_cZVOo4*fyAvU#U?*cO) zl1pz0V7=Dd%nP``+J~*Zs}km)R5ua2fZsKQVoq?>%t$w%y;adD{!GkgmFZ z?}6`6^SZx3^D;NX3V(zZPBr+8-TI2Rc#*EJa=N|Ao19u+Wk)n98;rWXgqQFn?>Fcr z?9nIqm&%y(4N#uJ75WKJ@(aH9C+~5G-qo6Y>}ge1_ijsEpzTtz-nC6sEEVfndu6+J zP1jA40=moJf3c@rXU3s|Z|>!(<4Gx$HRwVQKsuF1ubR;E#ed@I}=BG0wCGdJey?rurEH2XIi zDOrjxOG&bJD_obWBVL(I0z|tnSIN6FD%L*c-;Z;s)~44~IqVZ!ZA+|f$~D;?FbFF? zoV{wW>RcK>5YgG>{$19t$);@LrQkNjSu%f2RO_m27ZPpYHMu6J)15)mgOi6^Yn@%R&PA<( zz`T=hs)uaTTIb>k)V$y6yYS0Goo!n4a*O6=-+AHO@noBP+T`L1)IBLv_Bn-GYn?6Z zm0&Pa$hORqSMn|M@=d;wak5SBX?^Z;&YeDg=T2*_HBQXbHCjgNw970fhpyRqQ`!u2SLVsN{E}s|&gqtCa)rFhG+CExv`E;DkWqp;rh+cR=okG`)GCc!2xzAS=C zUQ9R$o0tI>!47Z(9I}76n-St>-bA*@Ep|h&cW$g~!WTHUKUj?WxPP}4e(jta#uF?n zEG#1{FARYp-sb&J-0({dA_uQS^eZp&=bO*Mf%_BF$JijkP7Gg+hEe#09p3gKkNl92 z5L;#VG*%iKu#BI*#TjdS4Tzb1kJK>Ia%WC`$RmFPW7P|1joRCA>O&s+wzqxH+y3#x zZ@m8u=L}QE>O(SW8L$l6&)(wvu#Vx#YJ?@jvXnA5jP1@?4WstU&piaj_kO?amop9# zhxxR3;dou4ckmy7zVLi+uNSzd++=EGEeis)Jud-ycZ%;yxsyX;S%nP?;wqzs01!& z|D%fp00x2(GKFYF1{?tNK*B*Af`W#F7lefa1BC(u1Bk-FFc=sJ1p;AU5fBQFf?{ED zq-&bm07OTr#M3SGykyCYV0Ap=3t9EdCP3CK;q8(>{`1y*7Bfj4gUPd%$H(5@D^xaB zGq!|TlTUOJBJ@e#K(zCq)ensZu~$@@UzqNt?%> z0YA&hGY(o!l=b|4iEo0E@$dIETS}Lv7LnFRvM_Tc%7Viity_>{ z-j=*yt9VJhs4f@W_?q@2h0kizO(;Wdrn5FSsYPGzFu|S%@UEpoEk&t%^uw`XAdK1^W%yGnQ;l-Av>!&nO=8x$XAX`K2lWxP4-K6$w{LEQoMoxE_6 zd75JJGy-HKvMaw`-=b^v-U9i+)GnD&PDTEnm_7}0_u0e2>8tK4i~w{80Yh z?!>9V&Q$71=P7G!yLehYybh9whueuf&rv2Zm*)--HY`zNXl!eDq-F(iC+% zO=?>nMf1#A4B>Emh0P4&OU$i?G^%-xUMIxHcmqu{B&UPa)(U8$3K` z2za994FsivFi9avU?hlSu*d1N8rIU}IA zSNFzrad*hRa7Njr$YTN*098WcB2jL|7Q#H-31#VS!5ZSR$4jq3t2Il!f1`4A6@DAe zgEzLn{A)xn@g^Oe&xUf);#saNxy@9Ls${BFBT~V4 z2giXLjZ39}8%r?X`M}AGP|^+9FB%b<4J9NiH()$z$6nflFVBxWZvd=2B6Tfy5z%6P zLBQ;zt5=7bQm)KaY9fp*+Cy)CiamirGfqVlsI`9qC4EC1Bou_{+(%Rl_-^F>Zp<=9 zU?Si!2>_(xx-z07$5k|04D&&qyD1ZF`dg=`Ddtwd*2R7?sgPVPd*Vw+_n1GIuoQ~o z+g)lk4a}~UQ)MtH!k`_dZQ^~M?stg86mzr-r#pr2T?*5l6)MkXJ>(abSUmOg-u0F{l5CAA zTBi`YhSufhF&%v1dn%0I;68DvL`WlY6Ll3<2C-fbl}m=M#P9#IZrgmvWy{W_bTri_ z6M~&(R5G`x7YwpYdEbfxJum>>`4s2@o0sFS>%$}1I0!=|Tns>JFYpcIiZIHF_DF44 zm|{)^Hjd%`0+P%z_qMB&X9o?{g%J-8YfZI1;#OvT#M7kfku3kWus{@I+2N!OHINrj z56XJQY1%o!}XB(4OChY5h=*@H^k+LYLmUO z`C`^g4sNX|s`CpeH4SG$KnHpPc>EZ3Hfw%G0GpS|!#8q#(9(3v5!)IQ$)ZeVi`aGW z;UAO8f&*jAD^Ab}Kx-0Kg`CWN`ZY~=FOfu$bgc~v6pLL7cGQc)Sen+!$vPP`4FKt_ zFMW^$uXEMI*ZuT>Hm~^dYuX+ah+aiwwat2BU!hNP+hL z6x5M<(dHcJS!9W6)sF7pKp7tr1Q)Ec=?w^EOpK_1O_o?pG0#7B(N|glfmNmAnLIuF z(}4LQ$Jt$A)MgS>LPbgGYN)E1r4}HAK+bkG;ZmPN^&(A5%{wa)1dnZ;yLEdxSv^o#W3XPj*j``idW%Ps}o}Cbe`U@G&D|ZyxaUlrX0C3sXYL91*#lB+Dbb67kOWjs)(8GIlGy_HL9=GysvZH-AJT zrnFLkM)G`IHfgyQYgn?C%n{|C++i!aqoUrd1c)cbehUBUmJ6VDc5$9mjk58_&uBCR zq}k2v9p2&0_t)=Q^*kLE{VyeT2L}0zfsKGO*dQR%OKhtY0w1U9&5=p?hCzzp!zle= zXXBLAsfn++$kD+t_A^Z6*JNOrtz2x)BCGlWb6(zxr&WGCvUVZsLi&@+nC8U~X%rhW zgc9y+c!6f?rq_`^sE=sx;#?ilLtY%`?k{l8p}_TdYgWfeJ1=Il8H!I5ouIi7H?DO*@u*CTK+W%Ju_gaUjT1tsP`@aV*A@5uI*~W zoE7MOYXXodABrhweelcaQ?`nny*~tzWeWtz`~AxzWAfgku z)MznJ7x$=JN8~Od&-265=d3&a_WS^dX$SOR3_+(={y#j{Ib3L*bu~Sv?%@b!Ej|Zt zd!&JJr(TkmlBL%4V_)LgEW8Y>fcJ%yMjht?@EcYps%goK_8wLlZZ3tTA&vjSIoWtYsx zJGjisCq(8Zzkf~j^puwKy1UUUjWuRK4p5N%uudBmAC9AAR&b+z*}}-GBm!?PA+n6)+1V!Nw#(Q9pk4N zxxMl%ssSX*r1HpR=JCzrsc0hmc?Er6ciQ|;j?E#?ZvrIF7o>D`pP?5oQ8=#Jbf~g$ zZ?kusl6t}@N-PfB>O|e87|F-=b9qOmaP)-{Q56!SPo=Y?9zFm|lk#*AmD`S)E9pP+ zE(t6E{86}f@TJS?r@(Dr$;&FEn5SD1)P~8G=^-!1eCYdQxYXshO0&}?Xse`u$6hU8 zo!ZgYo#mS7#qJVK^tIcPM&#PDL@P$_I;MM@G5`J6vu`f1KdH~kk@DYlp4Z~TdDj~+ zrryqD+zx7|NIJ|LStd&~!gO2#Fj`JX2pO+pdN==MX|u(?`SZmAlr;IT!rzN^bM~-`u9}aY z)o}GNkNJjHpYj!vRWkenuhG?3xgXsr#g~FJWq~&yGVi~2fsLn+HhE$|AlraD8nXl1 z$PwX?DxcT_LPHYSbyuma00V%54+pqkc1dJ;7pg(TSD8nxG9dVjQ^0 zShs5%$SYjRea4%*F&1&}letoTw!olg4`?c+rf7cgxc(TqbN%wCD7jk|DDgGs>q!KV zOl(Malw7-1Ppb@n2mF;sOh>kaigOKTC?N78#9|jiX_ur>frGi4=nC_*XVG&g;uV}>FZv>p!-HdS~lhcVXL(dUh~vi z26wQ8WEV#5)~5nGJpn7nQrirq%p1z!a*f$>}vRR`t2YgD!r(6b;(D&dXsvx6Gq`B{20uJaI|E?YGeWL!2pdWCSQ-443m zlNHMHu6-s3X0u7F2P9jo82$8sA!W}zwR|0?E%a4WCAvVvGD5Mira9kap3f;sd+OR3 z+24w;Pm}yD$qtMuUbImUlt^C`Q7^QpH?#;Z%BTnQ1arn^SU^1Kd8MqjjQQDjrAEZz z^2-2?gs-)jJ^_mz7?hwMYjGed-i*xT*w(O_xBxV4Gpg5Tp2~R@XKK1p#&XLj{#ucx z)l$s*P0-ZLQ||cTdW=^0ECSuTD2`u;1-m{x7YoZBG?CLN2A(r_{48mb!g#2Nd<%#k zUfMD#dM&2{AK)%XaQChJ6T%?r3}41nyrt~pgbV;W-x4FM)a+5QiE(Wa_#dT@qd|k7 z8uAP-Ybo3CTI6ycD_();NZNbR7^aO!k#!pTtllQY68+-TkhwcNO%rS53~hu7b;P)r zQx4lWxyCBGqHoSh^DZ5#roajiBpXBb2Y69frM$nd5PU>UrlY+<{WRBwY5;n0ic^7i zPBg$`XCguoEYq&9x#LGex?#?*$Vo})A!qok5(0)$T($AOx9N>=L%mWXstHa$|FH zsNPnfw35MGkqjV(M6b{klHh>WmJGkG2|#ikyGDK*=Ko0_FX~|u_9Q=r%maR-?(5U9 zROPJ@B-aR~3nq=!`|btCr*VhURz|ixR@S`nhBXc=@e||OpAlYqlIc}{(6RA%K;Ujw zwcf>U0>>}c=W~V_Ir|u~JMbaSmiD%MR+pK1$I+1mlUyiSMnZ5W*&XF3O!48q zpN*LoX}Qhc%J58gZG#d`2lfpU?N(Jw$F}*9D(EY%@pOvzN5xLtCBkFo&xuvC%CyIv zIVKDr^XU?PE3+dv@0sdMDM&b>@N^L2>%tbM`L*&kseW@{0 z!L@#5!QJuJvn8;Rd1};?(h3_dkYJytZj23m7A8{&#C)v`LvUwEGota5#KM4g%ku-p-_j@Wqb#;Hp=3N76-Pi3 zuU*Em^E_;#knN&K6nioo6f(RA-GP=B&4KL9h+vP30(3*moxRjuUA5&e^BlUXZhBJ} zN^Yvtp=syboN{%~-fKcQ=n1>V+l>1yAPx^qBb|3aThPXQ9t{J}0Z}+mw0jpOC`a9S z(XapEx`M?FHm{bQV^FQ7J_O01&3wO>OWeW`{LL-n!*rC-d11PSIbxjxSNL3bNDg#w z;>xNlPk);O|4wNKd5W#`q~&QD&@DipgqT8%8vn-ZD3yrIuCIU=Je4TkFmhQ`^tMxPLKT; zT;U`*QEC8HMHNYi&Y1;yDdctGn%lVXgYNGorpJ!nnWNW5HfYT9PelZ*U`N=NjqroZ zGbC|TK2V8i#nZ4n-L0<(EIlxEhl;1U7svAbpz^h-lT8d_7bc`>8|elZumbMU{lp`CyOMkw98cr zTC9qSU|YME#L4;MVC$k_Mx{uc{Hkqk@BSb}nCD^8jchC@3f>2wh$~ z0Yv~508;?}G)J?{#XK1b!Oa|VF(1r>`Ci`3=OJa`T&QZ7>+l!7=)yzU^2wpx$&};J z(vl)#DZ;Qw!&jW3pp_L4iDY8JIh_Cm|NsC0|NsC0|NsC0|F8aVG&l1f7nWfbM!*VK zg@LHGB&F>@Y{N!& zU`-zmB0yNc@qhtH0}tyk1E#^@SOOb?*7ULXtdEWCW1cmcf)!dG&zdNesUoE^4OpG! z=}4$h($SbeB&vzRFg_XV!ZOUl0)r~3Vr2bto*r>pJ@V+%q^_rOoY)A)ux&@J9SLQrL@H7emW`s@7A=O=+FSrX#h8wtM`LM!dHw3LcZQ3~nl%{G?9 z+Qt8wJOas=crRZi;h0PT@8$Lm^WiPbg<$|7$UZ@lP;aj7i@NsK=_RrP_5blHrVEvY zYrFw~iFALh3{7>74aAQBe2HqHkYv(AMH3~s5Xqd69*VT-&WKV*oNu3?9cSD8M7lhE zV)s_wH%8hqW|2-7mj{QI;)R($=2{6g-o-al+xv&F zE_si?+X!&ZGQxIvJIiCREGEG>vn*p%d;b52ROJPCr8;A@kr!yq+ongv^-C#;taU0X z30zY(4O|KQ`|_V8SFc2_LYl{qUWxjE3eUg6MfxE%pof4N zK$)@Yo`G2&k8hO^v=+DIph6j7Z5WQ= z0$VFkN6~Aq4N^L6Lhu?=7Cul1Z#M1;IlpazXc`{!?yJ2ja40;nWH1Xy&|a=Kn1%3k z1mEpOjr(pPbXv*xwo%1)Ulg92@cC_NvAP$6F#D>i_C?~j_QqcYIHihG@|b!zw88y) z{6!Xv=2JSqu>r=SOjLE`V%pf(`^;|0gFaAHEu%P*4+4GWq zp=O$o^11mQ)w`Nd+vzLkqm(YXNl{4n2+~Kx;UiKEvx+C*ym(tKG_2MM#lV%WlKynj zY?{Y_&VEVayjJz!FrOCFHg|e5M+ER^ek0KyC}GH|I{1AN5uCpk2zu3c}jh4dd=?=59o%jR|-po+m2E$+t>DC{@J z7Nx4Hs;a80s`xK&6r9ba<&w24mS;u1fn9*_2!d9U!NvHX57?4DDEDy0tJ=h zF^@RV2nY#l!g?-klVO}Xzz+}9H?58*2N+C)Mw3vfAXv6+uyDCBWHJf?ft9GivIntJ zBr_u=Nv1VI7z{FkAPABm2m&z#2#*j%2on$@qyl1$$czjL`K43FHwFC0_2$RdW5{&P zgzhQYX>$7oKS_&|>z{ga6%;j`tPya+jhc9VX~t)7 zxsfPueCD6f1{k0BMD$)xBTL4~FuK@kYz=m_^&lf^xfHN$QcDWdn}d7Pe%~?PXFj@6 zMqC#Ac8`xwhb&Dih98+OCe}tbhpOtrK0BOCl&B8v!SIDN`V4a6}Ha^vLx$+24uSU{3rrumNnDgXXKt|@1>4(?j zq}DSoDbb3VYkU($*>Z(}gNfEOadmvnERIGjx{}4I^EESA9=YgtQML1U>gviYXwlr% zc~&^2)SYOs6xVKUPtIS*zRDVX$r4}QIQ6_35TR#hRG%#*hU`EoYN()4B*-|Ai#_pa zjX`;HR72Y80H(j!V%J|C`J4Q0O1(Ky*nu6a%DK*{ULx7)C|bFn($AN93yZ1dukla> zH^m31d<=Of!q$3PDq>Qzv;+W`_e9{mBKSrRG6-%z%mMacKf~LWtb`Hb@oHMcT(P>0 z*Bu@ekIryNZuo#o)1bT3Kq#}b2+yX`9JFm$X2D$7z&2SVZDrZJ zT;5A$l>&ubRZWotWSRo1ft9F{?|~~SY0?2Q5C|&4tO5oiAVxq`BXA;#TX7>w3giL7 zJr-LF##)CF+VJ<3+}*9UuU92EB&;CkU>byEtj+DqNDT8>ZY>yVFv4=5y5^(6O`B4grbnX%ZGLavCZvz)}-J=bfPHV0t*>ybNez9 z!#tK-dP0SN9-7P$7upzM^iP+ctED!)xG7Pex8g7fo=u@r76JRk(rs>EzIGZ7(2CR- z))O~l+wHZTy>BUr{cRsPoYB;2t4o)ldBu8zTu7Zd3K04g{>z*tF4QnWf*_>N@@MW>Mk5GtW^&*|G*OgK7hnO7 zGgj;NGNk3(V6NkEIc|M@SK|m;aZD&j1Sk{a*2LF2={p15T>!d8#12cquxvW2T^K2c zeb1&^-|H~Mre@rXZda-489LRzNvXW=(RktK#rZ(ilQirq9}@@D2k#e zilQirq9}?&o!Fk3zJucc%>dK@HD`YUpE!2cW4?a&)^Qm<``T$wUvrxe#jwvDS8|xY zJUz|J&#rs5-DVBK_4;M_pWx=19U@HbF}9c zBJ@qF6<~vdf=B8+kZNE-!KsqKr9cgX8wxc#9*`fc4rHtVX@X=Sa}G#e0`dk32}ETg z0!7ebfabsr$PeU!YQbhQs-CLGyIXudt)e}l+8zBv1KV~-GsFlrx<$L70h$rU5I=o; zr*Xm;B7_cc6#A}mN3Sr4y>JX!gtzb(q6`RiA&f3;30p#x0ijAQfYaRd-dj1ndfn5{ zKJ(piW-~DJZhH-e`Ow!q#ZlncT~E)F*Z1&wnVdfNm$&3L(~c`ZAVBPtoiEs{JSkV^ zYGjQkFEWWbK9a8k^nrkFu;u-DEN0i;n&wheMQO2^>^xzw*GXBLs}*Y;$=@Urb#O>H z9Uu+}*alnPkH=zm-K}XZMPn+8GthOJ$2>#+9rxDLt2zCOV|QKVxZm zao2stZLZ?G{QHW`W;N&Xx}LY-v+MAgX^+9@Yxu-5jOO$KC;7}Vh^VJ8GkTZD9Oko( zW;N4F4wG~Fm)GNd`^{(f;S-;4oh7GP{mXGrPxIMz$8Zvk5lkA_()jAdew8NCFxEqu zIHB$76;>uCyD9ZVoHds93Tu)l3F%7r(0gdlr(v`WYqt{#+1h3m@)>=EY9YUnlaY^z zL{^bhqKyur6W6Y7Z8ng17VwNxc(`Lbaz(=T+r7fGC;Q!=zId1WD&p z-@wtRdm`^B*dceq>#4umP7bOWcvq&~%&qP-XK|b3@4h0l*Ikzbz3Nq05LM$fVeiZI zgRNTRBC5$2xfw*Fs^-}T^HU9 zsHEmnP-L=}7uQ_-bc5YY3F!D?1KM~uPYot%n%6{OAG%kTuIr^1F16H>czRBQDA|=U z5%ru}CcGh}KqVdsM$_J=mh8QV1lsDkvBzX(E5n%T0ef3gk5~d! z<=F&9f64G=Z#TT052&`(#Ym}-u*d>zmzuU>$I~<)k<$~C7xAax0{J=@0-aC?TB;(L z74k*^0z|HqHm*rruSC|2;ETi?6c=q}ktTtXZKZNluSUWpjZ)CBJ_SVz9qeOu6$MV| zLfcxDIo}n{IbFX#hD;18v5Ba7nph+e3{!G8aOPJG)+InX8LMcRb~-wya5-I!QY_zx zwWF{G0$SleN0^9_JuH7&D4$otcP&eeRXxQaRg2IsDa;$YD(cp5MTEj^BT$HHQtYh4 zrds98gE^WCUg)-$p$)5E==0>*J6P}VOi!KR10kGO7$8KUoH-oATGPuq1j1EU2wiBH z7?he9qe%$DF7;yijc^MFlZf%#a&%~B7GTOOO9O51yjDuHeZ8~J(Y41(n&_IDF-z4v zky+QJ1cEPJWxvxh*kGcT5e!X7vu2$pLLwc~FJ+sCekrV`REUnF%AJPX|8W@lXmGNP zg+`pp01LS9WY2_MAJ$y-5F;RbJo59-;%ijHU1%nJqNu&5JI=PkZj!R6-6L=&ixSjx zAhx+CKpj@k#R&qtm8uWK_u0k`Ki%r=O6GbwhuZ{HHR>Q-JZG=OU?x4w%Ywo9c~kVM zE)H=Pda`I69r_oIyTQrDCR={c44AP%vpiMi`s7g)`6K3(V!{FI5dVpWb!SGZjm;|b zXapr?!;4gqLSCmaz!mACFnqlS9fFX1c)_3ed_y_#l}1)*ct50G8U|4#GWaI!NhK&l z(54(0P^y3_MtJlkUBcD%3vBH&0*xb!RLCYuB;OI9R z#|kx&&-@Ba;^7$lKYT|!Xe{b;hAe4@$m_LkD_=Po{M8CBB>`csIk2U-PoSwIjw&UJ zMjBZFlk_#K5wa!6G&k2fahz^LunGR5+z^^g>P=O;gTA(b7{|_4P*W}~D&l=C$h-S! zosfO%&mSyWG}Ik4nvpUFENPc-qfl5+`xQo{BfY%I6R(NzA*6XolmyNl$xS7MOz zB)#gIb5l2*W9aGPJW7AeXj-0@?WDlU^H?Zw7TS{e2F2KpD94m?0AE0$zZ~bQyi5H* zmI7@_baIavV47j@p92v`lm+Mw=7e8mOq2pQ|HT7JHtIw%|5y>q%pfX2PD$<8e!-Z6 zktb&x`?;~X5_upiGdl0wF=glKK?SoMT&fplD*d_Mio8zhn$~Crzh=)?lWn zFd_?7SU%=}?)VB#bUW>Wn#(6V%d~>yad_V%ls(9|&4+3`F>Orn!JUesJVf&Q6w%Wjz{&A$>uOzsg|-z%{Z4>btxuq{Z?krA9*ZiM?akWEV|;McpS)OP1n->&))Sw>S|2b{DVIzCDR!d0DOGTV(B;Bi_LIKAWjBLG|^O(9*aB+FctyhwkpvtY-xV=h2{W^YPc29RVa7KMNfu zT@ejm!18W#LUffHdh;d?fec^@ckHp3a3ui&*(C_qji#|*KW z?HN3LaAM)@3iitkeUXf*9*Ljm)zJzxOmTu>A4$AK02ZyEO5k!#Ism;tnS_jT6yirQ zi1QL}fzT)p+9A#*g%js~@u3VgHFiW%D<{#gh7RG&gE7N;hCroqj5|6RrVzX0n@z~F z3|iJLR4@X90EGa70BMu`@~7`={n1HRacjq4jAD#2#wUh>IWfk+Hg(p^`Es7+S!cbR zFZ1<#gN92hbt4vwoxkU6#4ivwi&ca5Aor7c+b^bv%knRlZtb3Yube8GNyUTMw|I~SP z6Pm8HyU3efwVTjXrO{+WS&fXyO{gq)ln6~pnT76>p}A$RqYiT$oonRNEb5%ePK(_c zN50|IpE@SRT`{4S`m)J1J1+CwcXs^Aj<4UU@z3gDzjyJI9dRd);)lHEsIORsVVR3{ zwy&6X1n*+F$B@Pc>h1^`HES@wp!cp3;Mo z00l_`kAw&$4-k|H8XP!a!2r+!%1J&^X>ek)Sqo6utQ{PKPN<`ygJM!#@G*HQ@DM-= zY?v8P6fi+RfReKWL!O6g>z#;JvViaJ7rI;8YfoEIS4;=u|tRXmH_+1d? zyb%^R!<=PduU%nL_9P4neLflscK}Nm`Qe28xQjU6Mw=yJL75mcyZK%={`Ktm(*uMb zsDsJM4}+TsLZX~wilG^qB+~|Sa6sru2nYkypkNRRLl720AOv9$20<7SVGsymAPj@f zY3nwEmj#{sigLBTjBb9BrO&qEe!|f)XsvcQ4!C5PvA&;mx-qezb^7^t)-E{OG2oa6 zyp4KigkDq$FEI3nrSTo{I;YsP(sGam00WSW1c_1rUNh501{h!x9g%#qGe*omv^IL^ zcUx+G)Ltb5>VdB>+eUry5Gf>OCb|jEJS08`0Cfxemm}dG%fPO;Q%D{FbsG#zTaO58Kr=Y9k7nXPIG^!Er=rIp6f{)z#I(y0^j-8YW zIhDqv`%f_QO0By{9$Y(-%G+Jb^nAeH)U}rnJhZ~NlbQ+&ycLMdI;95V=`{ zN8l|aD~@w}Av;|Gf3vA`q{@mG-it(LS+L<(g%wR3)mXqEvvjq;4+G!WCHY3T3mG`N z?E;k*KpU8aZl~*%@S)p7;V&3S0raGVN=yM)H0uF;v;lRUny6)eNvG1#1OoGZ#7IY6 z!~BX;$V4?iNVYg74(EcaPnT6!?jNwO05?n#*|YkX#U<^+n)8q~2_4WWHZbVCI715S zIoBU2sYrB_X$+QVh%xI0k@%n-(bH%8mZ;x~4&XaD`y{L~Ssyvpb?zjMbCwTzV=r?I zH(;!`BK*lI&xX14+lPe(d8K&B6aF{K-Yw3V<}G^t{aj!I0ivrB0S?%S0J%hW%NQP= zC{H5NKISEXB|4y>gHjSD3or@y<=}B&X1}pAYAp3_`nJucbOab-Zd2W%JC00uTxZ1? zVt@4%AV`t;*SK}gA~UdBS@RNdGyvUQeO$b9nYk*CEx3%5<(Uq@dspi40{Yzi`RiUg zcHq=eatbNp(5y+75E#kBsvkoFC=$BN$sdkTV5V-#&>=7csQvSmp=6^Vb0t`cSPkmd38$>ruQbi07`Xfsl(5%>jd#cwaTs%ACpDvS%ezKAZ8vLjCj>Y67qJ25UZwHfn9$(YxD|{4 z)hXb)h&}YvL-lkQeAI;+{!0da|6D$KV;i(0bY8+HSlMtMRt=CR;5*+{txMOL22`y7 zeaFk#LPH6fV24#0iWqx&rJ{(n*|%iNguQ#uP3?rTR0FayX(E^)vHuH5hV4HJy7=kG z5>?WztGlt*qaT5uxpTA@0Qg;povoQEek)RVnR<33F9NhR8XB{0 zsx+_Oaq+eNX?Y6G)vd}QujH3$Oa;c^Rjt%P&_tr374J_Kw+6Jh71WEtMS&s`m;*IQ zI(0S5PxeY;KU0tHcz$AJqC2g`a<220sF0>Mxt@v1u+4Q~f)+=}+Ig;X8j8O8?-s>C zAocDtCzZUJGzrO#gFO%Z2R#hEQftL)gYrxmN4VGQ5acN(d#qws|19zKL#ed-vfR<${+i;(O#w@CLKfJO zued_zJOJ68!b0eEw$lB8V<#NA7s)inHTG;;2ks_A2~X$A1yIhAS(MV$r>UL01_ei`74gg1eqN+ z1y2VCbOb;ed^xWq~RHuqw(bb#Ndkaw#hiH?(+eQ~(1kP)I;!c`QM(EZhh!EL^-T1W8;j zOD`{sFHR*-P*GA-U@#DzW(YAcF)=YQF>FI^Ix#XbZf`SiG&D3dH8wXlI5>7Wd^tLR zfr5hygeZlEhb4%KJBo{pIy^i*JUl)=K0ZH<@PJ~~0WkEPXC zhE^;IIB*ixSg@fvXHFPVk=_gD4Ky6=77j_OV-gXh`+5*0trtYFO|q;xiuRC_6NHc3g%fBK;7HOcyAfqX7GhL=1PEcF*tXpdo72W> zUP0n%9tl)KLmfW<(u9FaZRiHnVcM@*f(7k6B@8ue78r2ikNePmcw*L^5ww4I;Uq|o z=43#LwHF?~j9q)q{ws0W!g8-)^$Q+}Rm=|FOM`g9W9K94kidI3UK({rd!WO_*rG@v zXmD&5_~S=EwoO;r=DE^O^H1_woKgK!A?L%nx%R8|!}?4?!diq!prdm8iMzM$NA2Rn z^l zmtX>^wcB7nOH-q9rR|z%-$lRlK7dS&UM)=VoG>^}XGl-%y3gLhHw67bMsa|9HWPy@ zY&XAlo?Ew&&r(QCGZK@Je{R>CsK?O{Muk=gRznUqdH1JJw=H;k$ahdM(3kfnY21iZ zSapASS+FnMb1@Ml+=#@BOh;!_QJC}8)yD)o0g4a#)<0jh3ePKOdv5?cwJ){|y}S{Jop z%325~d?*lX6IofNd3Fli;mE@z_tXvzTh$g#-J^%<1~bs zTWInx;OmKJ2E~k8?oB##K5GznCi@cyKOt0Yq1dzxS~{8W zKemoMoip7c753D`n`aFXW*z zySMQ^A%>;yB~9ZK#xJ+S*gpmhT_*~B4i{du%T1(Sh#I0WPw{o%kEk3@Xon5;X{76S z(tzAl{}`;(9zNir_(yr)ljEsr-Y{jsMdm{s1&K$+^Od2 z45|?ENcj1L0Rh0OtE*(I2nh+TiLD&2f)Jks1T*uVd`K6v_kuLq~__2^Ms_%sA`HQJbrQMmygT5tY+XH8CTg5y2UW9KWy9g;#a+hu^q zIFR+a*g9xC$1E`%RAu?iA*Tj_Q@&%<#o&$bp=Gxr%+Ws`o*p1SV!rQ5Gbk7#x6M)2 zab~C*TXX)63mIn1&nOA>G%`y9pKYVg%JhLz)YsR4-DhxSlT-_e@tdD@i%KIn7Q{RN z$3glm-NL2)<}3G-=3;`r`T~47v9_5%XKXLly+&7PN&$Cq>sL~DWe&}X@`!-I3eLv7s9_y#F^ zm;s*(pyl85X*yEu?wXX9#=+f24_mUdA`L-;u~G~0UKf%GtrOe%zdJTYkYC|}z2j)J z>A2;e;6xgw@{j)7u=4XQZ}-~VpKhSxxp!wZQ1nfNr%;b0@3@DKLbuU*S6u}#5BOXrtI{)E->yn|=>4$NAU zGDbkhc1Gl;s1H72Ico74WngzH>bN|^a1pz(n{cX0H z?)hQ*ES=%Bg#g`Ug#eueivjqGRK;nkNIAwS050kGp3Rw=0)IMt$?0eOW}3d4(`@!M zb-B6Zw0?Om9vHwxtk{X7gA|l>g`rS$LX8PEH)>qkmjqrnUL|({vHfqq+z@UZ_%t{9(2z(e~}L|#Rqf?-6!q5TOdRTU96=F(yY1|F;+gB0$Es3bWh z3G_IlNlcO}Nlea=oRQR2MJgW@$V?z3K?D#yAmac7NFSsNNE+k|WS^><3SbI{)Du!) zPGSu(KtpB$nHe%pVo(-9xhRkT0y8pXWLywH!v@oW#Q-Z_;0tWBz3tn+z!xZhilwk6 zno^h2G09L8TJe^oOnL!H5CEhch(+QCL*%f9qo@={MBxoBw4c4WbRsQ9Pl`q$A_kM@ z3_g<@iJ(X?yWKyaT&NQ068%EGP%P*cnuH9AEC~hUHYg9xkqSXwRL2cW4hM z6ex?@pg|O=S3z&+s=c(8?$cK^6Ix0~>7#zqP+CbR(MY+Z;!d_k?gXJl?3I0Q-l9ABG{MBNVmB>u&DA~$(^{RC_iL8~mvR9UpyK)t6 zl(#aGJR}#%Lj27=Oofx!h?QU|COn0yU@zQ-w=fqL;v$@ciP#8R!B=n={>UpmkPkl7FKQ7dbinN4(Q!xGoYL4i#|KKuGK!gT+dL(t*WFc2@S(wqMaGMv^Cf}?xi(pS3K3@ zx#CcwE(|Rqd0MCX{;8rUF*jt7dS~5PKsi1+K0$JRczD_#x#5tDGXht<>3Tq&(R^bb z%lDH-zQ!5VE}Qeg$^+66h~;5#*dS}z4VbyNj+VD1!L@T0%nVB*havNR+R(9LhY!iLqO^f)(Q*7Qn5sAP$)?4QGr-07RxSd z_r#9MkD8Bm8aFw0}hS{5I-U78**75-jLU1#km0!0tl^Eh|rVY?{;Mj=;P)C z%=xikKHgOCCiHPr+aL8S2gGTGa6!1Q;SrFV&zk$~g7C3GI&2n}r^o8%##Z;Hm3!K; zgZ51~Fja@kEdX^Zby0g1U93aVt-7*T^|9`xH|bDa*n2ur4|b<+>`eXbz~0r5^rVjC zV?EbzeeG)Rq1*Jf^EeRB!>JK;_E5Dw%y{0JA~J^Tj`!gcr#f8s#hh!b%myod|o zQ9Q?ca30(T@9~?oCk-O~Nrh4*Y0!@Q(6Xk!7GB5F!nWwroQ<`Yw$grg(k9wPJIC&^ zcWj(}vwdtH0a(AA6(_5Q`eTU}tM}E*;tTQtePCKXC_bXki60N>BAtFit&~sK5`FFO zZKM2%E!GeDQ~s!0WILs^wpltiA*_DIo2MMEm;*{K$2w%>3CZ0YK|zxzwh=>%>uZDE z59Z^k;uGt9a;j)D+w7QrI4Epvc5ZICnneLlC&$T-p-1NiB=HN>wx2i93({hU@+$v z1`9MF^G80r@1p4WJDlTq99eb$d>R%Co7m0oHbEmoqs72@7a#bmd&dX&PN_~N4K}mz znO}XbI&8=7^>);C18-zic4SqAMk(5fqfXad3I@a8FtMP}$kTdJVweyu>M%Fx_TJzY zYPqg>RqYiIt{wN)uUj%{z752{uo{0!P;No2YWpLJlLRVPBK3&1Qh`(Cj{^Kv;ha3}d5k2}b|Tey+i z2uyC^-n?}PtH#aCM^h$-gqc&@T97G5^cVvo@V4v0Xg zwDAs(13^Q705gafh@)wqB{8QA00dxIcf_OQffB@_(MT#J9LP}+#32a9AP~SH3_}6H zK*liWpkvno!RvmcL;U`kAet*=La#~e3=Dq4)w={?Q*!;gvO1aqMZwv0gHa*-G+@B) zVfdh6{o{S=6ql&!XQZftC@e!OY?@Dr{YpG&Wf?vLA*`Ych?{_ts2^DJTkXI2rgJHP z?M15T42;aTfyX=1mG*Q2V{$zBx|qL1YCwNdKCQ3)f$^i?YQgdNUz=!U-7Y30kmwc? z$gyg)blr<1OkM=y>@y4Lm%)JYYqQAkC3#zN(aQP-*AW`-)Hp{Pg|82YfieqZQO*DGV);*VoZsggOnCfuvBM-f@?5xa`B?NHwG)RB%n9gipQs3a{hB_2ag7$m> zj_$TAfl|6`Z)>`WWaV4BU!hzjy6GXNw%qZ%9G0c}W ze}%sh7FpU&-(fIE0w<-hwW53AohZ0E+U7eW7&H~Sfr6jv3@BgG6_Uifj1!6GY$k+a z6qv_K${uz2LbQ^Zbm&oV5-|adS9}U|XjXo_AbNUO<_77*o#YKN9YVk3g7RnKdK1W? z@xqW{-dwdhhe7_pr5mIzCinzJYQkB5+?Q+Th^J>xj%>>b=X61H{I8CU5t1ZxBOBZ9 zVKBTyU8x!;2BXf2yVjd%ve&6&sVzDMVnQHkAn8mH;{iq4%*>5OQY!sc&%Vq~-)|JT zXQ2XX$U8hN`_YaXv&kxQ!-Hs-7>Bw!XVjmDZOevmg7a;L_5hyq-06{4W^oVfz8T6xlCPgJx%mKpN{aq{PXs+S)dL3 zk&_gvQ2o4OR9J0d4izo$>uU(G57yWE{k8{$u(kWUry53!g&ApG7ee;$002ELEsP$s zTNN^hU&Pb5E%yp8PS4i;eyZ;C~$RwIcu&9!8i9btq#0%bJKIR z84s?$gRZ?0XpzQZDi?W*T-AZBAkMZqceoSupiL7K+n;)PMJJ34X9*-DKVMNZct6f` zkzSN`6-)9qT|&KQt)Iw0MLi-oAa(;{s&hWRU%xOMGQ&s~H%d>i{#M_X^tb$seoq$A zx*`M7zhk?lJ;u3(iMXr3^@hK3fgLJY_F~6 zKfCvY(fVBGHUG^onUSIb?JeG9seCR)c(JPfP+FD%DAuv`;BWFrfy{s8prLwTLmguu z1fW(7sb1PI%3YHSZg~rh!UzD-awx6h9iY-c=_LBTtSex!*pIOVjB23f??4#oWjH{E zdDLeZ_TkNu7@yi)h`{*ASU*Moke<7K-MG|Nv=U=pxuoRI%1wJ343Vp~O|m*8B?@XN za1L={+I1UL`e`*>UOqmS9%(4%&ehh5RoNy(@Tt88dZ(0986WG((&j9<+1fK4T?tjI zoR7dm;(Q7)@##hiHT~*762=@|O^}aPXGJ~thY;05o6)jDFPP|cV@LK<-%ZKdPpUCd za{$*sB#^v5N6zl5^PMZy!(ck9Vb`%R4I&OoG5FfE<^8JlA`7h7N|g98z6?-c)EN)g zR|L1?!*dWq)dh0Zj{;9*L@)I_-?{eZ%iP})@2m0*2*x@;xie56LAcWLqxN1T7lWe@ z2|ieFw0=ZDM5Ab#S_R#M!wsTcVuEgiB<1BTY8ek2uh7}*?L?m-D`tgdEd%%W&KH>fwA&8Lkp+6Y?_*@f{PMQk4)>R-G! z%sGioQr|3yHk{v2$gSO0oM;JdS>WBKuCpv}Ik#^I zN)9BPZlw$kK~Hwsd{{e6bIevvB^vwA%GJQr0!G6;9qizV&&^@*ZoE)l?W_?=@J-D+ zJ{J|NLw4~(1-D(ZCYmu6sx|+LiV!|1CNj2r2Y_t!2*ZtRPV9e0#f}CU;xtR{}nA7T&Fka4X2GK-xlm z1QywTUU`-`rO%;be1rnJBJMN&NDw$LiL4U@j<^IUbq+`AAN2Q5BVE2bp z@0Ca=5&<;G5G+fG0Hbs1|Lsu7UV`VqN>`0^N}~U*+fYf%FzHl+R*hLt^JqKGhov9Q6y8dA01nQt-JsY%*R4L9O z+f_A3+-~dAztRF6D}kt7k75WrOC+r2FwUTy=M}iE7%5bjX+@ui7*OpZ>okx_o}Ad> z-`8Q$lpi0B5WwPx-o4)M>ycchy+c!Ju#mQO@M zyIJMc!~QoD)0-7-4>~9u&msu87P(D++dyCd^#}vv(tAOSV^FUqq9#=iosFbdzbX?5 zjV&ncDCDHDXQ4l(3wc~j|Kb|D^zE<1T`H?dpvzkbh6eEsdcbnBd?2i6IdecqFmQZ5 z@(^W*YP&w8?RheIMhtG=TCj#TG^ZAmE2ySM!t!!F5NHz4h(U)e8YsvDv%Kibw%nMh z9zD#D7w?-mqr4QH3xu6>MhyC3;3n8BSXLFTGh%S77leBD3k=uL%+WNuJ^R9QuB&Du z94PvrKSY29=NXwG)$D$W9S2Tq03G5TP?iXd(+c8@7<46h{HQd{^DhKuD-keh`+D^V zXSR$!*t}jw3=U|ZU%tupkfS9;{1@1K)B#0!@6n2 zR~nn0a?^=iXRrd?*@7S{Rm$&X#;uc5uSut8LJsMk+~3R=?nmLOWfq@)e;Lep2ZNtj zhC#<5vC_z+Z&!Il=7=XSoeD6Oc%*ys^>On>G#n;@$fV#7{b>(KX}LY1B$-#3!AVJ`9>z6byTK z^w83@v#FGU&)h$fQAC=v*CQ6&vZgV~ zy}>L6b#){PDBZ#u=T)$cf&Iihv+hK@YfxN<;_VIAhoDP(0WXXU)+)Z)v6=p*Dyyhl zgoN2R4AQ|g(P~(eVb;D_>>h=07VShrroMz@yp2tR1pRD%)pmw`%eg}??;27{F!|r{jIfE?ZdY1hQ?l@ z2v1D<9@~-JPEX=~$IV(0RkQnvjGC@VEq}M`?zj{q@!{drxnBN&Ezzz6VCb@l00J5? z0rzCx{H`}2udps)2g(=zMY6OS5X}yPVtW^0Ba>M*P}IbyEuxKzjtDc-GW?73X#Y!b zYD?fiBi21xhYthx;HjMN1InK#e#5RjoqjrogB$H$rlf~|>=cPMkf2{&-k(eisQkw3 zR;o>{1Q}oImP~}*j<2`hpGTMn5e~pBi|U1M^_mIilkeZpsayJ#OF-aH)-qKjh(bSA zL>13dzJFi%+CleP#k?s6)g7ZH@-+;49k^@*`@ONIPvg^+0-{V`CP}>sMIioryj4ao z1wi0AeY#Y$O8KwR&@v(g-c)`X9@EDCz>9mX@bD zfXMDgb4PF+Y-}N}B0|%W#1)yR0rU%=y+)EitWDT zyGU+VLiky3Gj^I7BKMILKqDJ`t=&rDNyi_;nu?)Kkohj^pC%yP7eMZ zb^Ow6*P)9<&Wuew%F&fUNR^e_gWCZoU7vS=ouXx#{;yjRuo4xJ{02im)MbbMXJp@% z-+XrX3vTz8$ei8nl4<~dh+x|9(;#zqS~jEz<$AXT*sAetgKd99of?H*u73jJds7LW z_(&UViS4;RRT=M04j4V8cKkibpz`IBhDncuv2{lyu8lBH0Z;iz*7aD z*<|`I5q>+@?VnIv+$jx=)8JCHY!)WE%Ry&P@ec_-qd~<8B;1H-SETCqv~tr9kpYka zhygI$h8WIfpxPvGV4&hm;2?olVRa6ZvK?Hub;ZHq8nFR%+HQ1Tid%vdZyfKjF|t%W z;WRpzrEAKs5xf1pPE2v^k1q>ra&+6h>U0YV$)Hr3$ z8J$3JRARgD3=QizIU`M?|| z!i~CJ5r^zv`WJP>QniPssxXh+wiuXLtzZ4DE>smu&DJ$-PQ{7gvfH+~Xz6mNRJu5% zOBZUoG_wVh?dEp=-TXgis)$hqg4k z@GLxw)7*>>o`&?g%B4-3gZa)) zXIqF--b9qe+KzD~qC0P74J}6GeEas0rL9O!M7e2|kBFR!?|I%LFu?bDa3e8s0`;kT zhd#+10AQfD{}i96X7h~Cd~yIA^d>-n*_Lg#+=Z>xY6?Vz;6b$t6j*609zJY9XOzhS z83HZ}6wG1>Sa^3@dAn&?5L*|lHEV3G+2WuorOmdA@ zqwQJQ+*|f?GikJqjWWV)rrb){YQe`a_U*ckF6`o7G!(Xj#bmV-bn2>{X0f6K+Lfm1 zPx|hO`Qt)N@9agPAda35;Lwkg0m{*N z(Hp;E;444MkL)qb|JGk_&MB-X0;sS#Va^(uj7NnPv3w`p>r@IR=!c5kIFyv2*!3qy zJLr`jFQ5=8t|2`z(4Cw&iZJL)%gocU*Xe+Awb;Y{r6nABN z-=^2iS6FbC)neQIDk{!WUeKn)GfinQW6gWj+g*obHzZ~wk}QCoP46PTi#D6Cx}uG2 zj0eW2Hr!%!Ut??AQ(-91h!k3n;Yz@!NA>7r&*)7R%iGB(A7fIE=$p}N;kwCdneEk% ze`m^r^xTs>mZ73f(7f?%P<2o=Njp_`UHZ0my?Gqm^9UUnMFN#cO|;%sTRBgUW70jJ zzt}YP)V0ZW=5V{IM=a0HmTs65o56K~Zv49Nl*{>!8CJ=Yr_rQd4?(J-HZi)4fkz#BW)E%yBSbm!EV6_8clYvpU@S66X)`dYucGi@*p?p+;RfA z98+(Q)L$Y68%cd7Qoo20;1ns#DkPi)Nh6y^jz_3Ik$TGJnP^kaP8J(=!8aj!fU@5O0$>UkP|=wdY~p-?El<*WE8K8ugyrzm|E zFU2oC6#qo#X$)m5FSXRe`+$8gnVvH3g}6CjC^C|}Q2f)C6DSN-Hx-*;KkO;SyQ%zt#8pM*de^sU%ybx~i zlr;nUk=jB`I?rEq8+B0LMx3194-v-rrFpttD znz(e8cOUb9u+K#?h#S`1^*5v%Kay|pyb!DRqNema@72%ty$5|r`AMzYhjACn#)@wB z?EGZOhkGRBn~+!OL^1Q^qUe`{{T7H@x6LKrtM=lmC&HBqK?ZoGm8)opEM07^5^9gK z5;xj{Mdf1E)v=Qiv8T48Rn*gq$%L4`ltoPY3nPZ!b-+JyVTM@A>^CB}8={6zQ|Ki} zVnMhUbeng5o-8pn-Ur<(8zpl>WE!;JvZTiDH+0DvK;gq3%w;wO)fX#%)iEzLV{-rU zvjezW*D?$EC!&9Co)r7MREZ$)WZC`l62)pe+=mb;AKQO~!TjtD8vEhSRh-#5ZoR<0 zxptgnk(Z_*R^VzG2hh?Hf+ywaDs|Vn>4MMA>s~k-U|>bSUxyP3@iL2qDKgbt-RLHC zA&_5v_dZqJ5Aw9Epd$(Eeu}8(53=L zfdZB)1W8^v)iZt#t@hzW7H@1T1zjG8uo`uhs#9}OR%v+;+jEWO(ca}6F5j`8`6^R# z24Z@k&Mudwo$)MeyCF$Ui<;?+>NA>d7}N?AfCE%F!wTqt5IZEw!!*iPQ@$@ton8A~ znEE;o_Y_Q0t0*I2N%O$1Hc5UkRmsD;#_k>_7y~?u(s3JaCv<~9vfdo@At@)XY+a`p zE=MWtn#P`CDfRcyDA+fKNAcKMbyLur_JCrS5$dc`rSyn@CY_AjiwKq?aM88*o8Q6? zh$YBSK%h(`p+V|Vq26u=fLywvnrGJAvX5v3W#|W}=h|AKDPypUi|D^HXB?AZ6Vv13c51silTxvYx( zS;R1l>O5}O z(!74tN5Ta6vlme~t&62yWSFZwBzGEvU4h8pj^zA$i zd1$x3&nBWH9PQnO?NIhef4Nd9Hq7ek9_$I%#>yV0c;cLny)xQQ)XF@#*NvsQ=uh*~We zT+p}Q!-o2wzt7$RFSMf|olSetPlO@DTxTwMi@I zQKYi@luPx|8B_rYC*>;LO23pHdrsuK66Q}I`YZcQdjm_vlXq%#N7#p)3njh+V zhmGepL~W-v{m0B+<$|{cdWr*4Z-79B%fb!C(3S&Q&DKl15|DDe zViId?u)BW!E=s_1G z_pIe-z;I{~uAnSo-m>1xCjske&ONSXXF1;Sbg45>u#?@TFLB_Sax`(}b~SZ(TESPr zh~g5SzXdWozWH{5bSjKc;J@r`7{=4l8FLa~ioBU9b8`-zhY-O~L{#OT&K?tf7R!*E z%@f0L;c-FF1_I{-^{JMDJ43^2i&((&ajb(Elc2}GF`rDn5n9hgIcR2KM1c?Cb=K(2 z+PpALg2mG$fey@_XyeI<_5sSHd;y#nW7!v(6^eRgWHw;664UhgES`|vtkGSm$Gg>E zl+EcQ4cy0tw5N%}X;~}alnJmMoLd;=ABa0xlBzud0ZZHn>Vd#RWfIgUN=+|)=& zvk(7LdPgM)JKlf|13Iq*k1sd~ITt&>{ZH>W58@O^?b3=KPbtu^{JWpY`s4k-T05Zc z1l?nYkl@SpZ>jO%()uGySSe8kF@7GNY8zyjaLw{?$IfJN#i6LutldP7Gq(FxXDyF5ug)0vC zwkTot#NS?fA75&{@(8k&hPpy%MEBhTfN73EU#cT7Sr{8@+fxm|HFQQ%@DNWOvH`%F zM7-8o7~Ni%Ou$$(LmcU5xcR1P;Vr5wF19)hiC_F9;b&;u0o-(uMAREG00S z0_qQ9CLy2uIUxuKzK;9m07+7mRiNkYca_BcSSi~uP|KFBzbZ5&m2BklxSHrVL)x*u z-bP*V22mqY`1Sr*jHrLZZmBsJ91oIUvr{Z=DFMh#uRw_J?rCw8oFknq3Choa334@J zI~#qkFl|ooJ)KoXk+&0h^gRu!4wA)~xW!ggOcm%e>oDbCjUFjp_^x5QB)PnyDtHb9 z@tkbQwF!6sh8f&jELeA{y-G_c&KS$IT3^SN93@Ytgoq)O`-28@lNer|C>k-3^fSYZU9WQ z9P;Jga)a_q>NuIZJZvT06PX>GsEplac4z6JW-%cwXJSa($t0npsQr$6;zXG{ zdCn<9Z&5u`^A2jh>5`b1|A_6SF2=Fdw|F_Mwzx_OH|YC*knTdWQZ*F=Lt{YnJDngQ zlqIbJ2O_V)WF)_g)Rv2_tmua-Ln3Y0WuM=~NKH2X^&V#8!e*D>_9C?<&I?&IAe_|f zUC5Gyi{=P{)bsCb3gnxtK=w{Cd&f*co^i)+AVCdJ$qQDewPll zSuE|S1s9J#>&m)cB2?r%&K2ymRU{a+WJ}V>EUGLf{AMNW<3w z{dDkE`gH{+iP7LYUx~{-ougu<QR)a36`Vbzlj@v^Vm%$j>Nm)f17b=s1Vzgdz>~MKl$YU3ZSR;0SNFU{ z%)C?vmB3Ajq!e+y72wDC1K%n-6*Cm1^h(+kWtzG~9YELD@lk)P zC|&R-amJp$xrA84vUxaaXUX|Iwq`uIY74`s#u3g|bo+h2*393(Ok*t%UofCGiE_&` zd(CZ4oG`->%Mb&Pn*tdD}FjY&)XnH=l(DJC^=%?I#leQF0r;Fa=kq)X^wdU zZKy7ozX{+b(9s+FbOZR&JGry~70BtDot;X+c&AB`7`&*Z-lXT8y0$`-av+e-L1W_0 zhyD$zr<}(7|ghv z^K2uG8D&Ma*?1U6XX^0L^ z*TfW`TDpo)rHItH_-3x;5D%wGLGpYU4&sy|0D}l?x!wl=av0*2k9k;t;Onfpx1WIA z)%+T`{dSjonZKus-Yc=(1{nokWctWYYzz{dm{s;XBT=UbJq<&W>G>;|SkUdy&Md#cl9yf%(|- z42l0uiGx{h6UYPXt`(U22d-5{!YvSjnHH|h2vgx-7g%O*NF(XZ}`aplCC4hTM#mlL9qu$0hZVr(ca1eB-= zXV7K!6;)nAGq5Y-DXh>3JQ`C-m2ly#YD+-=ye4$sBHnH+LxKXSra`Fcg;#)6XAd9c zf_pESEtab*W7z;l)TM3)BjbUNL^r1&foq*bpimi1%>+!7w#80-*#;`s@>Xe)crmge z-oyQ|gFfZToI~rTPYH{11+=SKV<9bnkJc%VYe|@B=!pDIaS>`AwnNL;);tQ7{@{}o z?fLNqB;_H!ln5X?Y3gE@!|jT!a%+mRd|Cogm{)3;l*Ao3X;p?{<55&$5yKdT;8y79 z=vQ-j2;X5<#Edv*1vY>Ii3YUHE=zafYGCi0;M1=MZM~pz{{F=F_#ZeE6sA!JK6hV6 zaR>s)({kRP4f`3}xW^(WfQg*!PC}v>)DT#~%acqu91q;$)$aP)6Mg*+(Fwco^DZ zr-6dDyHBPVs}jDRs0YASSUd-J;7ZH&G0*-H+8E!;66aleWPzKyqXXtC`ff> zag{V8035j17m7Z%z7B&s!gB;yVK%c46F18@#E}COY}eCj&=nEYbAoTi!2le^)2W$C zs52*JYp~^-98U!%D~(GY8{ECmVybG%j<6L`#|b&!?%@cng%sS<9c6a59PSIQ<~| z*bTu#OS%ygJbOK8Cn>jlWSC)w8D^Mah8bphcfJ>NU z2|U6up1>gN!5z%OCsx1}d~sLj%2vzzQ_ay7RhY_BfmT+1_JwDRQd#P+ma3||H??Pd zwWsd*4B}cb)RoGsJ1eVa*KUZj?)@p_QYDv5%u-uI<9Y8h0 zNbI!RtU0=XidQxITBGY5N3vT%Ac{?_AG#LxwWLJ4RF67~oLRd$TRzbah zSoN%O)CKlrPxYZk)28Z1*92-tT`=BMrsAjxIL8|S@Z! z7^1IMY27uU(P#{S6wp1HT@n=q_M$im8!98)=xJVLmWN1a0hl%zBLZVgeVPk#47x?4~5G>=IyZFjD zzxV;93)DKv)(i8#!@AoT$G6|u0^@Lm)DRrkaFBVwxEmH{-i#ABBVlBjbKsl>B>07Y z+`H;JJbVCRA-izPT}VJA3$)`M>v)BEyknCoaLT2T3J_U$pEflQ*Q##iva;GzeJsKn zoZz~~`4r2s2=qZ!B2y0a*dB=;;!cr=4dmG5 zwB(pIS8+z6iZcrF+{A8dK2}2l4z^Z@EMgf7cyfs+HUuS1)CMN;tu>X$qtZ-jrV<$e zAK(Kl!4Xx3revZz(4@FY6c%B?V6wvxJFzSBGos*!TY+O{h+?hwSg;?}rrxTL#7t}K zG1-#4Q7?=#H5ZzwLt2HwRm>Q3eXtr+Uuuwc6Vwx80iTE}Dvx=ApmAnbU23k*R2hcA z8=S!wjKL3B0SMP)HuDP0bdhte>u!KUs;_jHEN z`MD!=Dx}IaCT?${Eu1&Q?YJ-Z*T50arfH7q7$2%xI_9R7uH__iKK;_a_Vrw(%6S7M zeda@C&!c`?H(avH?ZwC&@%nCOkm>;a!8;e|@}Tv-K9~iqZyT7=Mj;d# zQ!xe`?2;b)_68YSjb^q-8ulW+Zcpe39nugw!gyQc`W{X!IssB-*dyJbA;508ta&%c zk+MG;gM1acMQRQ*ka=t}4&%6nb2vv%D3UH82EKP~+JQCc3tMZDOJP5{qZ2d-SAYn) z6U`(#w7@nVSHqUDPK2>5n$!-M*QK7|z{Tq!+fg8nsA^};Ox;p!w3(pmLtUJeSy^!? zD??BaA+6w+MvLn*TJ(hoX$mX5rO|?8_{P8vw-`R;JSQG>49{ROUNIb!!scn7P>9?i zcXV_}ot+SP;L8WQr91r80tsX9xrt;zSQ6G7;)BA}Pd7Er&F;awy2H(Dt>LT(PnQ#S zUI6`cnr)uJO;WVx9Grv(7sC+HIZl*U8^dG!n--X+Xf$WgmWMzB~im%kjC_+=K#3kXGc3>g9p` zBXa^lr=7g;6n=B^Gfz40C%5pD+nn|ZLC|T^;M!$8&1qJrDZ<^7GvjmDJ$Mb7Q3iLI zcev^cm>Fg&_K{YNNxh6I0sF@!nlTrN=YIOn+?lPLh|m3H^SA>8-eaVng3+sW7df_*$n=lmsO{&dxKK6~w~*jcg8 zxyf0tweaM}lOH?hu!y3lR4(ZL0W*65gP|xWl~Ob#69^16!2tme0>MJUivofIL4u)B zpb!X#!N5Qm6bge0Ku~}b4h#wuS=HnN-YbgIhI9{$=NRUE^%un;D#=rmgGP&+tV-(S zUYJ$F-el2&sL}D4pvTrvl}lDE)t8-OpNz|>QDki^beDczX(?zoSSX)cG3{FCLcWs9 z#(@_Ig0$8-MBsW;2vS=U;vY*Gk;_M>QpaCl2nv^VMj@AI^tK|6 zAlDNvC`JcA{4O9j=~EFny6FfeUu_!>Nn7@NUMz8;!F>|7D`;*9qI@m_9Rbx!mTlE5 z`lS9Ar&QgnR%+7^i?~O9qh|aUWr|mSy(wWcs4sXlsDbP#mP=`KvVSt zW$e!`*`d9~=TO4|=S`E;qk2)a(%Sn33I7WM%Y2}N=HHRo-T#DquNd*k{8rCS?QJiM zf?WNa-950CE#zZK^Xi^ewS8BJ#(JUIYWNYE7ff`RD&-nuGiM>d$dI4O%S`7|fY+V` z+b3|WV%Ulh)GyHLUHkTaWF7$OgKi6v-jqTPqkxQ){FqXXC=fLg3CxNhXQKDa={_AB zNg?zd6p1{|hA1Y%oAjs7j004G&DaeOSE8lmBm2dSy@BYY;>>lDtZLsi4h_+;KaOn} zrTK9h+92v|_!A0bJdF{GGyJHNrdv50m%j|URc?0tg+43^WtAI5LtN^&xf=P-qBJXQ z18R_)LX#*vv;jHIXEP#PAVRCfCZP78j;< zIVMkx8N_H(?mNkQ>)H?mmFocw{JN=0@RuybWBlNs{Cs{rAh@S-N=Z`q*4*2G9k79T zZDeFnZ4f`a-4!8zO=c2e3&-FQD&+s9?oc@`aW1J&d`pKgmkix#P$mL16xPclBchv< zbe+!FDSM87tXBiQb#Yi}q}ONr7)>r8uYe*N?f)+Ovf)`-tO0xBf7>wTF7%uKr{rGC zk!Vpx`}a##>`?*i&xVN1ssec3+uZcuV+U3Tt6hO^%-4`B{ud53MR`RpEh!Gmq0D)+ zP*JD^XG)+&Z7GerXAcUfxz>I_e{KBTh9J||306)9r36MKek&|CWF$OXKaqG-;EW80 zOFf1yd8@q=Ut;&F|C^ys+ZX=|hCM-2FOAwsSME%+bT%u9oDES|2Sk((NrKp`qq)sW zfss_AS3xF6q%7WQ+BPY%?3G`ta``+GAale|1GZ~+N9T--K*5d@lQ|C3TkU!8IS=ig zIUm0jI4#db!>hsoQ>F5>cnqaE<47R(Y>Ycjcbd&m%5f=7rij2=UmakoT|y4PjK$(a zqW&LHV2i|Cs3T4S-nsk4CF@9_Yu`;%y0_@Jxx09k!#+m)T*wlqfXP-xJV%lcb%HP4 zEK?Ej5+fICwO`5;A1^Y3sadE$YqSl$MR&b4D-rd`5X@Dvg&BCT2Lni^sh?Z93U>)}J(st6= znz!$-8<}SzFCbq${xjm9?cIh;q!J(e4v5QCj>t9L2ov~4pYKj1PMqh8i_l>@D_UaO zuzvTFHJUnpk`%$Pq z_1$2tenqqf@x6m9MkEjI+lF#}@DoK`$s!%#$@oBc4%$N~fY%6kzTUC(IuOVW>+-sBr3yZXSv%0$8;PDHQnWSU|yNsVq~IUjXAAD+nt z6zk!1ii(mUa!IG9p7!=HL2GzislbPs7Zx~ABuHN0Z8J<8J?!MMl)aS%Hf)PJ%LFQ= zkS@!`&W}xdsDRda(_3XokQyab{uA`X+Hru2v_ZN8U#%q`p$!@#id1L9a5P-MI1d7e zo_x401CH*Hz`}@|wknpos0WqfK-+IN@kpUpfX)MdboGdz1RHjS0*q(+q@ zhcPmKL{Coit-`+LFy1SpgV*@2^N{5qahPKFDk=wdZ0l05kummEtpYKgO{rr zTMaDhUWBITXL5ALsOEDrI?bb@)_c-zmMb6HDDHT=t4F_XaY^> zi2;;coLoWSg~V(3AV}9b$D$PYjm=OGfFlKqeR$3uSwOpc)~o&hZOdGb*T&5S6V)za zXG58q!Be6gq)W}BtXRNj-c9){Cr495pU-ZhVM7c|POV16J(RiDaG>g4{lL{T z&^7hiR%Q3t(!zMhKl~{3SY3ZeykPKPa3FXvI1oG#7!(``4hn>Wgd@}G!k;FSoIg_^ zn8Z+XZOC7am(VFg@ys)Zq>F1U`%5lt2{5a*iUu06VKE-Dop zQDt?suBOW?Gp^B$jFO5bQeR#vq{i#6?8LnQSIe-`V%8fRpaMu+!(bzsZ##>B+r{J9 zJ0qgTjXP)MFc}#!K{oIIs*xL~s2PA7Lsj#nFL_TEqiFin&B z9Q8u9nmi+9@uS|U9_A47bQepsMt&OO>M`lFqAFQ|3O^*+TNXt+m5t>_iUjoDXno1^ zNL`rGu+@Up7?r8fJP$OuTnPlK!Uq)1`(rjBd#x=>x1(V9u~SFT6rpt6bD++jL+;5>lCE&Y~wk2FUIR`N2sG_Z7MKHHi}pP^m4cVL&nN?m?8 zq1~17=DG5Ie&Sdmfe`D?gOveQuS**(^4AH-$jszssS6@Kxu3P!p6JC2N}GO43t~?X{+jVw1fwf#Etb5$ znK%G4@mI+x9bN3+n=mV!Ep*gH+$OP+)C<0*0;Z&^q0&R|y|2XHLNUs4QX$cPoTW6T zZrVifqN`zq_CF@s3GVga?fdw2Py+ikrxbQ(TBv&3C1-u^Qvr=Dwq;Uus!}pjIt!Sr zL@h|;MzAcsbfNGtoP^M|TcgQD=<*;4MnCaD4#FiK46&^CEas3ku=gx#8M$Ja6!I=b zmDlx5>L4-iQsc&TIFu-lHLGmm#SXY-&&6&{k1cxkT%3r_YQ#rMmbubtxE5On%9wwS z0sr9 z{Hi?q%3rRK11M%`MmBqle2q)7AOaX0DFfA-Q3y$eJ%+tDA9@^|w1w>xHJ-|QRd8Mz znR3eQ5-{dPnD&;;J|&=wzVB+t>n~D%)exL4ajZM@F;c@o3%i<>7;KnfbW9{O)zvAq zR}qr*j_9D&`Q`%oI9Kpl?ayK>D%*e1<~Bsiqysx#Hao%d=VJvm>5`y2&#GmP)H-oU z{$JC#cV=OF?k5Y@AfNr4_`2%RP254AQ=tp9^e{CfO# zq#uNHKK~)1LSysbIg^48Z$c?>$;Hr)5)o+3l}qIe}7c z7=9!@%iBD|w@!5KGjE$ihCKEMtb~lU!yUCEOh>`CGV6D3z~vb)i<{xFH3Dvi=uNi@ z2aX^XbIQnEMB2NK4IclBezylS5;qq(T1&ktqS7DTbEUSkmPTk|y0Dgy2zqXR3xp0) zUw3{7#B~4~Mo14x@aRlB5BQ+**Vm*?>iCa)BY_G9R)ErIxMS2{qA~x2XIP^ET(KxC zBqMLH05jVu?m7F~z%%d+JOj_bGw=*N1JA%SLTx$(=K%5m-2g8l4X3!WI?TST5=(sI zlDf7Y=Y6;0~W|j<}lF_B2uAKvFnOeC#xAvP00+Dnb}E`lfoY8}f z#pit>yDx!Yob{!!q%Iedb3n-)`6PkOj2f9DnnN?Q^-el%1jxKoiQ_( zJl9woOJk_$6Y^P!l;`4^!t32V-9-uZz{o_c}H>_D8Q>9|a(^Re!Mh zgND)pe>w6*|-pjz`NY#>uYMhetqvQFCJai?;Q5mVNP?J!`^b=VGg^@Np1tv!myg~SR{yq zqAZHuP}g5j)M0;dxK2&A*abDj3!h5ds9rg^)6Y;sq)u->dd@?e~jx5R%Osyki`MMdc+3WK*HquE4Aq6xC^e`V-m)6q}Q{w_N|qSw*}MCMZf* zoqTHIgsghmEe2<9An_9x7;eU(1v5+*kThhhPX$iVJ-Y~$>Eke8P1QtwY`0%I2|*3% z;?TLMS&}fk3{8No(Rn06ct;@j!iNId2Xd?AMRM=PO!`7m`r3SYcOdGK5^`wns4JPt zcyAQTvtL}eLMw*>K-}UbL;dwHa+kio5~66komVQZ=J6-7O#AHAte;+<^VkqS$juvpQqEr5BFOo2n6%Ai`x&GmhU{ zfi&>CSfclFhI0@0C{p@Jtpv+}R%dYise1;7P#)mFyf29vW38i3RZjS%HZ%}}&_ltMY$sf2i z-WjxA6t?H~m{5~F;)dkJta|6%*lDn$nwd@A1e4(YlsF`WPii(l`WK{PJZl!IB2*%$ zne_ME@hJ{Z0e4%?kqvfHDsgSG6A+5(X-WYrF_p$QeP;EkWr!MX*7)IsqXgpG1vCx< zY&Rn1v(EgmZT^|(X%pQ^+h~yK<1e=g8Lb!rI^_s7TC`#iNNTx8R-b{(&@L;cRoe16 zLcL@urzn5-@bzV%rMV8m4;v~brn0`wwkrJqMs=4XD9954F69`KVO9v16_TzkR+i3KH*a4AB*%+W`Q$IZE@}=+N8a9`>nF zqNB@BU9l+}dO105E05XESB$l5m*fuJFY{+fq&Q*z(dUi4wwhH}dFPFhy=jSEVngE= zf>L5gvc%=t&bg%6gx&WR!Udux5RUHnD2xn=fe8C{(CRv?PX!*)5|egCvbs~WO21g1 zPt%HJvzg*1QK(>w4~H!_%q9_W4w)B5?Wxv_r(rZ_m#~6FkV)3Az+LsAQDDOovDp*mr9;X z2KF;?!z#uFp~5WB+l|Pm3fpJU$l0 zfe#=*{ zx}Ve*1Zf%kJyRkg84LSIze)Kv>%Y(`116yF zhDObrPf}K9=||TDVWtJAY!qFrZ_h6Bi)jpZ&o=Q-X%++-O^Xb_bKcGO@w|I9dZk`Fh?tmW&dy`DQb9{4=+sin4u=_`rLarH0##6d#SuGS#y>Iw($R zVnkN#sTb;)B24A^v-y?UPH$z7KpqRp7I>$E0q|s!5)J#2ZE?6ix91O&P(rJy-~rqTAuXW|`8B^(xRFPAd_st33wEKQs~ciQi!sxdo+a^rcyMl&Z2L;OQc;<%ejyhviJHQP zlsOoYG=u^Xs}X&)BX<>j;N$C>CLe{pN0x8|iWS`Up!m*6`?ykKMyDsIgG-DQp4i+Y zKI~C@M53_ZNrhEOG-M5@5E<1M%)DE^JBE=^qMl1?%51cipYxFfIc!3U(U!Ejq z*j&Gmc@?H=Z3Oy$9xyMh)b}(&lrax|r(N16$T)>Vn<*$8*I@CFwt(hO@&WQmKu_~S zGBw^bgm^;^EJO+dh_NHs-rX5m9&vawb|G z4vta_h%@It{zU0rXopG}rIA>JJ7SMzJeZV2>~39+HnH~{TB$v$&jBbA$3_T7N88Z3 zyX+AkR@$Zq{4n}+c~~Lw$<=slKY%2+cu%Z_XJzYT7$}u(aZNEyeQtg(GY|n?Bn+Nz zC4Ap`^K+4XXMpqs%Mfobi{$IYarhAF@tgqNDKv9t$_yN5O@duumHluH<*OH^OkN(# z4S2O26&_xkfvXqJ{am7h2f_c^azV>KxS|@C@ zvR@=qg~0-Be7)r3;WmG3nOQ)4hqP(=<%#(ISjg*)Fr=0=^Z_spylHy))Ad8RF~;hJ zIQ5|kx9`46*dZbkz@?D#L(EV003}AYLDKFO;0^qo1NnTdu7K#kHXHO&@X~7LJVCj%u6LBq;3IpLSwWcuy5bdcxGR))BdJd~IKfedA~~UCG2}>Yw0%b8 zP5}(g{&6KS?I#O}nPy1pX8`airyZO4Vvw3ebs=T?R_ruIv@L5A<1Ok@+;L^hF4WE0s$Hjzza zT`Lq{0-FGl0F3~5{lwpJ26Wa}@99%Nz4eXfv)_2ObS$1$^%XA&FxMV>*P%P&NNPj4 zB4@Ga^jj9|TVgMWcE_(dy*Y)HSD(t(fF?vi2{woTj-~-?h)Km}L54>-%ISyK0ndXC zOqK|&3YdV1wE_kiBGQOCB3HaYrxX;Odt>Rqo}pQNKhnPhiMB-5sul{{PtYNr{qm6e zLEgYAG!tIYsJt8yC-Y>L_bcr$?JM?DVJga^W@?fr8I~a^f}Y6hzHSR`+{K0V`G7ba zPnNZ&Qqf%6HuieKR25}WGd0PR49gG{K~Lm$U$=#}jM;JZt9yJs$45@`j;j|DiQ!4e zv(6s&5kJ9Q9tAguJB0i5NS^Y1miubG>7@;Kch^hKy6SWBj;~Jge2%ZUx0l@X(oX@$ z=<_^1>M5S01`*vsiR+C9x}#_0FfFFdR7>X=Bk&ULsQc~PLA)TNc?^}-?nt{Ls3Ba^ zJH{_G+GnWEHk*5eCfT!^dwbYT{NyMNcIfQcCIP(F<~h3i$l0Hs&-%$tG}vZ`cm2F8 z1NwH?P5yevPu(5W-b-XYS9|O3BAzH3Tt_qvLZ z$dBO+&YU<-DBP*_)XJIF_%te(49+wUXnXK*_6f1@m7E9)H=su3hJ#v;l;U_%CE(*gS*p31kbbcqkVyS}={}HlT`bh)VjyrC@m0JcQE@INtTPzKs`u$5e z_zEE)a9nFjcm+I?1{cd#1azUTBEEZj_M(m`JXRQJ2DU`B$|?Gk#+)i+9;$p6=)OV+ zhxg_Z))A&u%R|owci7kBBQ0n}EAMQBLa#cmWwFIvjc3p13HT5oV&0#d8>r#&|o!DI3?>t6bmAf&RLP2_O5l+!m92lwQ^S44k?S;nf?T z!h{1z!tLd{Wa=sd1s$nOLM$kpA9Dsc>o_yC;n`%ZZusaz0|m*AT;%+RvEwg|%RqsJ zoQIaH)H6-^xCO^qm7oI3i!{Y}? z=6}GM3%0i3UWI?frfs66%dy4GO|yW0w)d~qX{p=lAOvRPKN7(-2Cc@P3YZLdHf_=W zQ(Jy^T0Uc7?f`USMNkA~tf0vPFv_5fJqXO?VhORI=$L(fM6hB}0ahF*=3lSU(*_@6cx~!(40BpWvt>E zG<(dB)9PC^{k<|zd{idRBUf_)-N0OuAVw-k*$?VQHb(@(ImZ?`%4fv(W2OPYTjp8> zR)!pFnSJCLUW@_N0`L+AFh3BCb8X+&C;zTMC$RpYS{pSGZ8`~ z+Aq+Lu{lh(WBT7Hwn7lSQEozO!N=EwGXMxcb)W5Y8e=#Xst&V(=9{x`?Ou4_%y49qkNu4 zvKgO15$J#Xk6A*5ZWE+WXMt;->8IjqF{g|3KU(kI{k*Kzcm7@M={hd|A%j9L8fQNU zw7Zq(MetCf`Qm>x-{1XtS=a5}Tg>S(4)$Ngz&Mg?8*;m$r?tcA;$_nn zSf5nQfWo!esHsQu41({1EH3~}q(PEiKY~yl^+Fq|zYAEIKj0D2-^5CtDZ}=Q49;%s zP?EQ#62|conPfE-@2SQAd*I*|>F(@oB~vZx)$B;Tl+9~8lW^cnj{Cxh+s`nT<1=-- zp@kxypffSjil@hj$z>mHI3W$&f8tor7Vxk0eP{FC&<@}$^4B{9K<*m@z6QVUYJ<-m zjb$rQ7Gc{+`Y?m9a!>kNC%8#$8ElE?jWp}(p!7c$r~;3I$RInuFqj;S_(FurNnX;i zE%Q`v_9K%P%A^LD-QPHH$01uVA_~Lm}Md4vr%SyFBmetQe+Bgl$45bPPpy za_Z4WTqkikKmy05@7aO?MBGN+m4>v7DzS50M!)vGsy*cXQ&|w;e}>sY&H7w2#G^GH z#R%Un8Y6|nCw(p+3sw&-x(;9V7w=0dX^79xnr=;z1Of^{Q^6n!Xm`HVU*BY3j*q+qIY3rQRa7p`$8IQt3J*rtGY z3~7zD3J9%r0t0uA1l4O<3eayC5V&h30PBt^!QkCx1wkf`@{uKbXHsRPi%77o@{)qG z(H9)U7VbI`11dMtPE-Sb*-sep$gd1q{cuC7##Nf1b3iUMpV7q;6O&HwBI7M`P;J#= z^IHVXXN;*Axwq;g>wGvc=#kWnOkqWz(OY3R$YL&m^Pz_*-y9Ja_DNq2&#Se2w@hyU zI!#a#K`>-e2cb;FiiOICEYC+-sjRxbFVF)}2LytDj7c-sq)H2RXgDtop?;*{eBgy7 zymD{3rQ9PFqGMSwjo_Lx%?=L%9|7tBROUQQV>G_o(>)y(`E;-Mdaw6-pXYo!Xy&M& zrkOKsXiw)QZJsWl%sb!tYV(xrmDG28WwPk@%DJK$JwE6wXQ|yU!-{MF%y*M3w#`!J zFMobETIl*5LiUkP&8B65*wp^rjL$5VdFHFV-8_x+)#vhG9__n)wan-J^Qn6=yBG5} z^V$0`VSxf)(4HW;2h@8&CKs`Qs6c@9*h6g8i{*<>BzjJ z=(eW{cC0cb3s{t>5n6qNN}*3aC|;f@a=9n)NzqQ7=RY*@mihZ~Io2KS^6q@c9G2Zy z%P}0c?&iY<3i_yqY%ljc0g2s0U`bB-p@~eIfyJU@Bt0o6}m#G%^co?Nz_~n*dMqs=mw>npmbSVy%yqnV@2%Tm;)n)L6%0k)QD8!i zO&Id@LPD#gga|_4s&(68-nzPVFz%+U0NS@)nMJm-pW8+iEWJ_U$m-Tes!!8^3zLuiMnLz<|Oc zsk|nIDhrG}$!@#5+_i3H&NZxM?ZU6?4qw>q+>JXNyK;xO3~vsV16PL}9Mp7Ud<3SUL%hxRLF<&|P1)>5&W&o_w0*;Z4RRc{$+8;Qkl5D74B3WC zhDC;4L*nqq@QNMEYHCz;R6B!Qh87s~FkoE(yl{4*#8lu^k*U=}E9E6MM2d@*a!O09 zuvWn->MyEE6m3Dg&xutmrwG(J5^kPx9Rg3}%pyJSgz%^%CxoAZB&jq86KM#8f-uf< zP7z~>&?~zG!?GB_4g|uWBoN0i5Q0Dmf*=TkAOsMCAqWB?1~H|S<8mHgklWHH5k7hk zVht!=5y;~6nej|=wE|9tt%K*Qq(ew=CN%>%mK~m?&}Y|D6lIRVoB{>wB>Rj2jTF5* z_2#+HdG}%7{|$zFI*;-GglXI8c#rla(HA1PWyG-kV|;M9xxW-Zjl+K9~s4F-xf<|e%Lf!a}Vq{)~EsaiS5L#!+d1^%ZGjj zFqk6AQlvv3Iw*vW!Q{+Dql>FD5bH6)0a4p{QYT&V;$EtzZHtG+w0!2^O zV4bq4L3!mAI27KZgJoXNX?2=Bb@?GZA8Q}ef5q{KpXK4BQXfp$VY+1WvAQdBB1Q)| zHMstUd>os4e6V1*N)jtDALVN?;!JeYk43w*)J3U59K!29Y}2g^fTDC)3DjyG&xXRe z8u>=Yu3o&XV2b`|6{Rp5q3hV7+MjrZuo%EPA|Xpkw8(Vm>rWdhef;9SakCxj%i;{2 zaZqs2aCEfaH~OE)U8T(vc~n7BYhYb3+THy;9}N9B;vhiF2Sd+`Ax8~iIdfr90rRDC zUEZXI$umnTp);IkVO?(k`R-xdYvA;XC`l?_x@7aNosI~;4K5>X8{ERdG#$=NrwBKg zvBm}wd8UAaFcdNyXd06}zCmw=@=0mkiTDfKm?}#5qaLPPZ`0?~tyhh$;xP|pgB}Bo zEN8niHbeQI7#)w;{>TLQgsZM{1m_j*gnh5E%K_cu)*SP zQGR(%yZ~WFv%h$J(Z^*ZAWu$M`S5udoA6 zKjhb{e;6aW3twVc`~Uxo0lDcvufmW=Mo{Shj~|S^e9v>o-iOJ5QDN#or^Cz$d6AG4 zkp`?SDxeTcvJu5RF{25Xdq~DG{%QwIBL7*^hF=0l#|G$eyCDZ}rF%&iH2*&_LJ6Yl zx=2_$qE}Cx5xKOd#`yndfch_hGCXOQ|6lQby~M~SsEN(P270MWpf38lbm&S1x5A;t ze78%Yuy-L)aCEl0 zT_Llx^`2bWY0OE$uJkZHnZEE&iKS9Ku|88OnZGIMR940&pwW@a-v<`_)O#8d_lmZ+ zEz76CHFVSofzVpc(*oTK_w zM58kIdt9?%2!1G4?JtRLa9iT>lZwSkN+pH?y{!K5!9}EV>lG|<#H_jz#{o3G#s=!GEIq9M>%o2m;I|d4d z>g?{a5Y6cG29VQRV+$-FYiNJCC{&M9de)kS`qua|5XpNwFJK7uZZw#(vL7=(Dz!*A zEIt=*57hYHCb@zMg@X|W<8%Xj5hx}ZE#G^7fCT`|bo9XS!DFB*VcW?VGrbF@bxWY8 z;;le;qZ19ZkNI}<;wN#}nU$8f?iHq1x&$St zJUpBP(KLxWEwz4Tx6@$Zc#msAN-d?vgw&75f;wZY_1p&`6JoSr*QJk_@FH7e6^AklVvzqxNJ#D2gv?V$1|l{gCk-* zQSKzxpW%*{8o&yR93fVW2)O5Xg_gqyxIl`AZjV#@p>bj@Mex^4eDK521jFsZa8p_g z14M2WCh~e2$BY>(xs{WOO;-1;Y-O2~$KLT|a)!b2F-(@WB7}~LudMH=u+L)=dD`>} z`cgl)bGic$ElPGR!<`O~i`^taMo1#Sfmz1j)KGMWdFCD+aaWyA7~zo0A5KMVt6VJJ zvP3mrt}!kPMDlcH@INmHN3+cG!<}UXTGN59YkG!~j2Sj8_kMLGxycd(b5;HGhlqxE=BSJ0@vAguvO(Cq= zsdRnhX`ORg7cfr@Z9rlXY47NDNcOv15JzN?sl67u$_bi%W+C|;h%ObTCYYx9&(g1{^PqvAZp21#;*vZkmk?I&ryKSF(zBLh-z-K*(5fyAORAey23JSRbo zQmTvHYe9qZ=pdISM7q_aJ8#sBrm*z9ds#+gtky)=e|5(C#xgn>MM(WD@QrNPO+CH zj7GlaRT%7m!yqmk4Dc#Is1U(VUXfutFTUS~0BR?U4x+UxL_imM5z8;~KYnXtW40oV zXD=qkJ2iPSoJ}|#Nz<3WR zj1Lha2Id?<&6xmM@49CX18A1@sZ7?{v&UlD0XE-|0F=nq+d?jdss;AFc? zXY+Y(U|IG&S(wgj?|1mJ`T zg&?#5hYkPqXMbsM;uAej;SvxEVNtkrx^xLY_%z_NTUhlt^)$fq^Fr1OG&@gPO`V*kY!lO8m6~-#WqpUcq&dOrVS>1KT z8eD;DpFP~fE!;xe#RgiF>Z>-rmKRNh@|wNc7moTw#p+AC z67{M-QHg4hI#iX^ql%>ds6zFH>Out?;yupeK5oNn)EFuZo}=cdKXpgdQG+Urv@6|8 zo9PVcQ>r6{>QPb|QXguI)F~a35?PPZADl(XBweOKQl_*i?UCY0d89}cnC?hx=`6Kr zF5g09>6_MNEjdf>%5TP^TRlS?X(CP3LmEjRX&G8b$IwS@)J1xzi&>eGWM+nvm1rit zL-R6KE|RBYt6ZgVXdSvHPi3i0B|phYbPgSZ?qw#~NUkAA$xc)!oy*I7Bv;8;ySRro zk;dgEIhm#8tK394(M!GKE;NmvX`%knv`jI3DqqRXEMzC?SC!JO@DR;{ ziRczg#FJp3euago7F_I2aLa9GMZ#qwSEi64&8K2c^ z^#~IA+c(=yes86!6TDs%z+{SiTyx8)Ee*LI9MX1I-OjP`_r_d%JEX9-yImrm=dzm9 zVGN4T3a*Cs-g<6DplUZa*V5eduzEV14)^w!@Qi9hd{cZ3l~j<==a-?+~X}lvX z$&Bb?Hmgb1n&h~0TSUem+7-`9&xWh{{d`(K*M3j=cC3S>9WYe$C%ZES!(U6abq4uD>0NcRkJr zzkOlvnO^CaIBP?TQH+u3vM;kv$mXj4@U*Ho(T4 za!8?FRcnQ0`azvX>XJ;RM|!8MsUJkqb5*h`M!l1N@<}Kj?_bPdkY|VMkvtE*laIQ2 zq>d@{)A%%&ZaR=Zh~y_>Vas!y za#kBJ@^_ZIb8bvosO|^*`-A=cJg`-#8|wPoUu0LACRCNg5hjxf1PrdO*K>ma3ELkL zVz36p!IWcWgT`mKw6kH;`2lq_ww?CMZ3duDhN0O}N$CdRo^d`_g`1 z+&0norbJ);k>1L;KIxO4nTzUKe#+ZC5_xuIzft9UA3e`@>2Zqm{+`ttlcU*}FjPs> zC#|qct9;w4A*X8kD3A0{YLSoJJiQEjPm6t-(!fgceNyM&uk%e@3{4po#)c3hdB!ii zU9QuYx~9cj)6mCA)1lD=jwF_#D|b#;O8pNV{IEInNPKfS5sBZZ6mm{(1GMx9qj&%Y z1ZkXQLC6dM0OpJjM5AM&(*r`n!>M3k6b=PZB*SnB0|5xaFc82n6arBk2_b|!2#Z2@ zGzzG-zjI2S(3^>0qJU%bA{hK87qDmBg-}wOUsx35!CK;_N>loZOv5p-E;)rns~&+w zq|rkmeQ99_Q~jw=eBsc*ccgcZBr?y01>ERWVht&BMmCAv9qPMNi{*bm>CcG`4d|9X zatRJdyn3G}Sp|(BBNw*pw0LfU@CtR0-g>-Lu z1IWOO1~ELYaZJl^eK}^4Lu_Q1C#dj&B6&`O^;B`$Jq^UDZum&&n(_c7=b zL8Ql0C#&y#p^4o+xeP)>$WtgO9CmTYnBHmo>0TYRAVuaV|1xRFAGogLs)0o6*9uKl zW`Q<5YBNofSCBB-=cpc`_2*v|k25~+L9PnxFPtw!%zE9b20YR}DY(M?ZA)7q+>8Z? zHO0<@Dpk@|feoo)H`t#BBF0Gia>zvSqGmqoo&qo=QmWoi?WU#2FnnGFikpah(ki`Pz5d7Dk59fJD z?#1-G^|dmgXS5l;3o;%DiKwiwCx$iRexi|V8DZlBdlt6L(lbjIZAr%;WdgYA*hKGS z33BdWMDvyPfHXDOt|F=2u}BUBz*ze)V=&DqSdIo!mr!U^E7_ne8uVlkez!(+)7$A1 z@RApVryiPa0UZ;6{}%A6iS$4&yAVDx3L8ABrhJ5fn;Fb5oG1|=AD-!UTvGp2=h{0| zjqB%x!P7T`M&)B!02r;1bkHri6*)XV|K8P$36JI=A))+6zEB zZz576b75R#?F2c=ZX2R!ruT-i!9zq5& z00fbiS6T6h<4D*8P`lU_xPyKVC88rdVEUWnX<4NmT@BWs=`m#ZbtDh+rn-i_VHzEf zWY>_?#5u0oDER`BUbq@ZUldJhV29M;a%F0N@}^dBG*TlEMHe2AT&H6y{|ECh?OpHE5qQ5w(LwS6g!v ze-*J23XTdO&pr`~?+91UdabKDshBwH+b2ptcK`=|SBc6lSUa z4xE_m?kM&tg$S6H@$q!fK7*3#sKfwDlCheTnOmTMgGNJhDg#!Vh$0*@3Tv1jbWalP z@2f*`zn-39#j)6o$U@1rjA&x}Bp5g{Yk023->O(Yxs`?It z(yv6&vv`Sk^*B;oI-^r=6FCBa&8Ln6gARFbP$(1XFNC@P_WvO`ip4Hp6nS(*Kvi$T zb8hBOV12a^?G^($RClaMJNaTIDxRhJA4_k~#`?A2ZRqO$q>Lw$j?^+5B9mCp2Tw#x z?4$b9XH7>EHU)l@%avbS zr1=<->Ydlnb^oPp12 zJkKLW20(cf{3u-uyLT3(5+>k3v5Nj#sq&%iK9BmpvP4JK!0DF2@X{BI{EmyG0`%5r z8yv}wKFHm5qWU~b0NE&e#k+DjIlPi=sJvih+T^#hnNXifQ6uFK>vfY|2}Me7`||Z z$-s1nim{z2#{vK#z%`Uol!|f`$Ka@tLMBoDx@gPy(Qgl5He@P)19IHmwZ;-^&z=nG zbBGA)8y%Q0ms|X~oCad=Io1o0@Ngzm$)^s~j`mtQ z!7KLN3RBX)i@Z13owYLfH2Cd`5Xcp4Fq$z6;FYEQj&t!T3{cX4bUE|8^lETJ`GI-t zXrFI|I9=6Ml;Dh&Zaqe$jNSdSjX6MJ^ydnEgq6(Yd%W}K`eRecm`SSh*3_kuP9LIFcQc!Cwr zaC)B6{1>2IByiugjM|Wm?Y6=r71TDn&oEwYC;$RyBVI|dAWEDR zxTnplIM>`Joh%jN1E*57Z&$UiO#?La?Hkl|J0x_?-?J6Cj&Nwyo<+q*D>Y3XR)Sdg zG01}Og{-c0fPsa^sLq2?6!;U*a2^!Oy}>njY;#^4Ey2mnF?QkbaAt_q=xxXthDi@c z==|%MiH@7RxPv()`mUNXJx7C@&hy=LaC*Nv2!L&Oa2Yax^h9#4*6XANDEUddgb#eb z*E+%Y@Z#(__=S_L-ZyydOUHP=u?oM?DS{?~Bc{US%7NMNOLCcrX%= z_d=N^n@v!3OnoI0$Oa;`zEhir`@%aC^ZzZ2hFuh!%u5E`{PF;3VsPSN;!5$m;!^SY z^86K4gRXxAAUMn_!G3CbXdo6h^&SpezeTv$!WEEly;B&3&q|puHjT4XkPE(wfDIp`oWKK0ymDDJMh< z`M&%vL(`z>sEZm3xT`ca@qnqqa@KOLml9F{3Y0Ub(S4tSE*_d|dk4*{U0_8~$)7mQ z{Mw(J)KWLibreHvJ0)vXJ-4$mI@xw#{*Asv#M!FP7ck=kP0;ooiUSm3(so!1X9 z2}dsuEhKKY@8BybV6!0$GbYuYbCm&F28FtyUZfkFJ={+-v~)`x{oKH)T;Z&I1{}8t z4SkCj1@c%^wzCy7o>Kr<-pvoHBTjsEyY`3|09pauyi9i(k3UHo)fcA(AL;uNpsNhn zWnP4-FK$lPC%owBG=p@xOtjm|$S8K!kFZJT1@DF3fcS@+5=utf))I#3>9aIxjSd-% zE)}I!3MjKL-_JtUH0iNw{eaf`>DbZgw!M-@!4Uku;zzPZ^LMBK?2ihMi1_@mr9Q9t zR1~MV5aK}Nob{9bGCL*_n3QBE2EY8 zsPdnwUhwzS7SQ$mDraLt%My|fuGmOI&j#Z#JXQZkaEfY4?&Q$ z0$YOZ=^MM1vUKuiuzR=)5BQ$h4T-8ELOO2YUI2rVlS2fF_ez<>8f$JW1SuP?y4Tp} z*9~0N#FV2--y@og6@tY7yY~I&+JfK>7YTW&68^GxKK`aPT zZci?4#2U@eE6!ICB&hDc0N1#cejaLu&Mpw73H&cW+z5jt^1}A-5Ckc=#v!${JQ<)& z{9h$*P-)O12W4jmQeA7#{=Y*Y=)Cbaz5EO**4&s43@Fx2u|^XO8swUJC}0B>8wY{H zS`kgF>mUydK>y(dI2Db=+(4Qs3nuH1PB)MshQAbRG*pG8abm)7w3@03-%0Xp>7kco zrdXrr5e_7V;`|yokTga*$?SlJ14#y^?~v#d4kWI3JgLK-3&FvFMcn|Xxq)O+_eEh#PlP&(b-nq3x~GNTtowku;2fMFa2hrNr0MT|E3pB;zt~_(jaw?sXK;N zOyb0m{`F`g))^q2F{L~Ms9_ij5ZhtTd%_)naC?R2YMGg5OQ`3K{`V4j-E$1zC}H;9VfK(j-lC6_uFF38bFt3cY|u5s4(T#Gu79Q zCa9nBwCq>!DUBQ=6*Y+R%JlXADYyZSc41}A>yO)^zgb42=4^dWyG;68SkrGfpr3j=$yM4|jy=>Nz= z*W*aNHvZwwV``@ED*ChNWy)-)7_65BZ97}wOx=m-D8Vfqw%Fg-)_Ee$_;cQF+cK?j zB23>&&3E+ml(1T7c5YD3lMF!}V}+0&@4#ZP1z5W4D%JJYyuo6;IE>c@08S$EG3fM4 z^IqSPlI7c~C-6?p|Zw zm4>|3i_07(ye@x_3a8$P#qj!Wx7~=>&1#yRX?=s@-Idv&nMx+>qw{XEarwsFKXQ21dqqa~OST95e-L##3D~+P^omS(8BbifIhqHHYB!in zu`J#Gy=lSJw^WK)x5+ZC9h5#Af)bIZw3&}HYg$Olg2Bsc-)q@;Bj;iZ6F3Oa9`B`*!G)b zIOoeM+jDvrCJKMbdcN?l`|>I|ZRK*!DevE%SIuO5Gajrts_iSt?uiS7CfJ_Hll!Ot zlDC-0*&T1y`ape~4r+h>vt%`Qn_PpME9ErquUYlD?pC4`zP{1#HvkFQ{dfKR^9=nZoub%LAz^kuMfkzX6! z0~!M|PPea|?nz_YY_k)_u6-zXOce9P{3h&XYA|JHY=yeAGnnVzUB*#pekm@i?Yj^Z zU;t2hKmjo@N=jVX-ND3!WzX78+Z^R^;xPQnNW3#a(*LoqVqr+z1P#40+)~3d9&<&})PNH2uN+P%a$o^fiL;#`nY#231=PS&}tqLH~w*%{bVw-ro* zt*TTv>&V~>fEdnMSc%-P#S%Yy!Wb9EB_G$4CkS^XOOhnHN?-$hK?pku03b<{G<9M) zI;FVHTv&Exc$b57Fpd@G!jd<`T9;aD{lgUgf|*>o8pBG~tPBa%lphzZ0ALYx!J zHKKwE!W|V>Ap$9&5RZ%pOrS>`zUNc7)KTUbDa%)67MV+TCIY;P$SqdsuE-ng!XmOP zBFiVLUM@*eeORDdAn;r@R{>oZE?>HteD$0t;+J-{%GV9#hFrccr}X8fsFfM`^skkG z28JYHL(4L-OkclzLVtBbU$l6R#jjVJClEKUpff5mM67h-bNR_YtN=slnV#yQICUaWkxE`ckIz#_~V zMY5>%TKQIUyz-T(fLSb(C6C;2>2a~SsGui4NtHcPtE6PMC`z)rv1balz%B90VTJiP zE$;_h3k#Z}EiEMqOAzUYlISR5H7q?mXATyMC*qwf?Ah+Ba>prkvRE->!YlBI60?Mc zwQiT#H1G1A7dgRvbiH`Ry<3vL$L7hPdP%_xvipP=tX&b9%J zc^QHfY6AV4!9Ry_lYQfnq4}_V=x*kpC-2NY1f2z!_3d;~Y0>WYosV!T@Ua@~r z6X=gjRPyYg4fF$};zK+nB(00?peN8ClxOdD3RJgI$gPf-TZxvT+)?fP*9 zF??^V7am!+kOEwY3zI?$Quuga*I_Z3k98Y4l=%x~n)rr#97A}eUwzX~nn`!PXE0hW z-7wTNP4kK&t8fyVTpDJa2%o%kUY z0&>B1!iNM}n@|D@I^4}uPQT8^LME6?>lustR%AbEh~`kCESo=hq=i|-+_p36q_J%f z^l%*z0R%lAIZ;5oxHHNO(qtjtl=oO|f~#$<@!)$`dQo*wOk3^a)M)yLxCE$%W5*30 zG(I_V3a`O~Fbn|UHQ;n(f;>(d+ZICCSGbKHC(^DNp#TnSIfxtCP0DfJAm?HBczu6; zcO`EL^V=J*Hl3q9oCc>6gWbFx#Btm~9K&$D0iRWt7D6`;hrn5> z%ykxIc`yHp1A3^cVqtmr5cK0aI1fp@d&qgH@g40)OCmXgxKEB&<0)t?`~>ebmh{u25i{&Ko*;^(NRBkT z5;0Xg$4T%`a`MhQ@Bb8G?kICsU`*GMDcdI)Jtm|VF-|hHty0TVIIGKc<|L>2g6J&& zjmZy{;yb6L1^Z-j<7vk)F->e+i~h*#n36Y0wj1>(W!@483K^p%%y0%172%AbJ)OGR9m8AE$f5eGyN+-{J}W zI5FZGu~YAqoi9$g598eML_;disS|3YI%Ax@Gj?V;TNmspJ4c*4Yn0rRd#uh%;+##` zK7w7n4i8)$ly{$A5N5kiN6~j3h^BO*Uc(ESuwda;_!A%G zfqeHh{>q{X==D)v$Om~KFXf?NNq&X@*?HKf@IhV$yTY23=&5)Tz0!B^I=mlxgW|9= zb_2^{ZPgh%!_)CP(axV9?K)kEh=th>Ln_|IZ-7Oa(C9d$n#cJUKf<^8oL}*+Pw_LK z;#(9y^C~`r{~qR1f3h&oeeXiO*K_nBuNSd!VcZIq4qRtnXhm0N=!{xpT4GmT=!90C z=;IjeU?9Bvt56Wkb|Ljvf-A~(Aa&;#!&riP{8Lieg;trfb|RhbnRL=vYphhKjMKKp zoJT##?|h0Ao`oP?=jp*c1&K^I(N*-GUZVf>9Uq!M={k?X_w;h!q^|&*g4tj-7!B;h ziESf71o|daF6bx$EXord#4LcH+%{Q1%7}K!$jnX@6-qfY1wC`9$1sN7uone~a_HnM z=U*s_;SWQ3rCWd}Npvm1VCCucR(y=BE@))bV8#qF)nbWsBt@F&vcwtG2pNky{HPkC zYU!0;twgOy93x|>K~@Dq7D=jzBq<|55jl#pbi|EhMe+wn3_3`5rOA{`$8gla)dn3U z?E-<%5}h3pMAV~}K{$-4My(elNNPkz%Z7&02(ahqj(;3S9d{gWV>zph>4)fQo$Idl zO+0z&E;VkLW{GM7R}nu|!IC%Td$Fc? z(P5?PvG2w@iK+-a~}fZ zSOCC*B+H^8rW7&;Kq!4=p@YI5h=c})90S8)NGJ@4MS)-#5DbF>VK7h(1fdLt!X%E< z+%wHw$k`zc5QxWLJs<2gACy+uw@>1a4|c$0N&3+7fd*Xk6U+=4dG&9EMuHS3;tM+* zl%e<&n*sS|I-d7;EWk_bX#^;p^`;+(AxP`ERK=d0P8!a|xc6Bfi~(D16B1lT!wDtd%!c{vn>7D?Ebl2Qa9ZF%<6+85)RB5l5A&pLUYi zOGotBc){KOqYIa~)LtJ`%&$l}bO=%CT0_l#c5K zZd>%!G5_iR_?Bp{{HG$8;J{V7*|>JF;u?X9t`QG0KT=MX6p)Xhr3?SLYDzp){^BZ= z=Ao+NCSI6tE$1!<)K%?Y3Jnwi0QIx+f}~GaAX+Xh(B{nxg6ct3H^va*HycseS+dph zZsL(wAbX;ORvWbwZ|k)ma`gu}htTK|~9J6c$#ze@MF?)P=PmM&!+6;=Xz}TFUvlmokD`@|1kcO}o^t zBsGAk12nLf4JA%t;h`KJFgI(4AFdEV8K9R1bu;th9dS9599ySG48@7XWZV73*_TNc zl?zvXb<6?7-VZ%0(Wx&{vZ6c0=#E-!aX`Yvp#3#XNWr<@f%A0$%KEeubkcQq>ccps ztHYX4*kbl~OiAU3c!~_W9bFj_e757rc)W&&geHm;G);D))rbD#;-A@BN!iAi!2mkT zbvr1l;3%_MUI(=BQn>_(?@s78rDRofH)-K;Isbf2)*|nb>m>8mqHBTNa!~1v7w0r^ z#~blUhyxn9bjEa3A=YWjtrrj^NCztqZD@n36AEu7q8jUbi|{#iz3S}VUv3m(gJJNb z2WC?h-#amF8Xq?Mfz~9yUNb}xnS<1YkMJRQ|R}I%mx<%KY-{&cU~w#o&2DxQnNqw zVS-VsE`LdF)TVg>>@1J2siOArYr?E8`36UYhp?kxsr25TVH&1i0LYU=AHf{`%KP+6 z%K!5~5Y+fcTQneWdYCLoW&-E0LypK&O46ZzjfCWG0l{Y-TzS1`477*@ls0xp0mTX{ znm=eFplE@M5%;2tZ(|JDA$e~@d?BbCLR@+Bxq%Tl!7H(B63RkCB4n%8n|=Tn+1Ebt z(e}<9(gN8Ktqk?r%k`#FX?MCp2X zTbP$QuUeO29Q3zswW6_b;pshCR1j>w#49Y0zAaZ{D%8sWPj89do;;JD(qoxX0p$?_ zf4A%Zq?KC)m}5s~ce;9Ct}H*@gH%w8 zlh`noYw#ZHW)xuJ5Ms(PqhN1ar(k;D z1hU#r50WAFKZ=S3Q1Ez@HN4T|XofK5#ooNSp?1L9D^5|W6IkQLejt(s%o!>-I5LO~ za)}igOVaDBv4SERU27mL&@f$bf2csja^?gX%jZD3E@6_X#bprDsq-fodOgv(OTVpK zw~50G8X%2yJ2nM(} z8BpzK&i&$+ePC8Lf%b2DSocy`cRuN3r`LZ^cv3B9fM*tKEdaIQHBnvu?^xu}Us9gn zX7e3CW8eq1&WDg-3nx@2b9&2E_xAi3M#i_2YEz)wSX z%OVK*0lQ$gPoEXI8pFgTC!dd-s$V@9U8hq!j-bu!UN8;`hOU@y&uo$Y0*-)ZyJTte z)GGsa;XKoyA}t8X*_zEKz%gKD!37M!dxrXUmA7OlPXad7;IT3(0Z2x5&tvNB;w!ss zEuYjX@wccKoXa05)!B_uy#;8C_#Q8dF4Y$mpe|{ZOS>|3hH7}E)XCYYPga0TmZGB@V& zD*LT0qr0)rw$t6_s2u3m5&;qKrUPVNvLwinVen-F>xkg@W%n^%5)y9X2&`zb2|$nH z@detwpvM#V_OatvRVbQm1>)#yYa?_q+dFluWnmjrg;L+pnJC|jw_NQ2QPm_3Cl3Jb zvRiRQcWYRfC#Twq8^77z{AlqXRxfI?EVp47CD4&%uKdyEeB~vlyvI>O*rLd}y=Mlf zEPw7dChYvglu{|l^o({d?~-=bqFl+p~?(eSR4|Jnb>V;gP@@Bxpg_A;Dq1@Z@jaoDthHqXES9_$v&FD?as`oXe9do0P7l7wTJsD-|rqm^ht z3Yvu@cScm9AeqmaI$#)E#=EiW?W#9#aROXIo*V6WnB)s6sG6+>V;`_a26E;ZAaR6in-i=%eCq?J%Mkb z43Jca2|}?VQ1Mk&!QE^);s>| zXob=INIlKsuPzoIu|;?m0*oJw213Ks;0J+cqHqz`t*X-a$9fBo4$*}n&!zJzMrO~| z;2VzwlS&r?q;u;jqLjXlJ_m8NeYUZgC9gdQTfDK2YId(IunA^PDwsbs-za*8d*@gLD|INf=H_mdm&6VQA z595XrA6n0gQ#@aeE1Sxl&7%ueeFy~{W+k&f_TSp*7Aj{-c-tZjFr?fV)x#!-S_u{w zYJP~#@-_nWA(hd6jtN1pG$HN365&6 z$dJJlEp;8s^OQ7XIp-;~A@As#UEu~jhv+SS3j8qCA(I0s^K99WuG+mNIa#8#2$dJC z-OQdsN2~x+Xh(+Yf#z0${T00$sJHz2R0ijL$P2{n%+ma4(Pve4zaBXCaG8Mi6B0A| z^beRjmvyRd4j~Jsa^4im7_S~hh4gwG)O*_3Pleq(=%viGDB?Muk3V2n!m~d5+Y#vXMHJ2?p3H*=NFLbp~ zpZ%`ItENA_4wV98aiE@jGgpbak$7}^3^0R3ObY6R)7E?I8-2jPx|qcJP9dnmj-_y9 z-||Sd6l1~zGQ;_SK*leP&l z&SZ*7)xx<|LY(9v?$7SI#cF~aR0`h3;vF042eqx)M`)WgC0rIj+qgtp7Ok_CNa}aE ztD7LQS%puSn5iT4&8GQ*sLxj%v@E9KsMO(+C4f4{dTxXjz4yEik^2`yMQHiba z;THLeo(F8FtP*hOHt)WNSf&TpTAhL5BE0A!_U@H^;pE1SXQ$1*}dE?1tTpTDdA1GiI6@oICjLP3zXN>46Z!mi|M_l z+U!)em`!mAU6(GDY>rCvznizNn{{wCq(H~$?x!4jXbEFX`NZUs3}Y@FT%q)kx^4mo zS6(eAvzUA7&=k~Jru{6sNZnwa;F?9FCvsZUp)q7Hm(pNhDuHjM(%x&ve1j|h{Z_jv zIoEi`mSHW`VnkH+$@w#&7_F?`MQl|RQMllR zfAsFs4whIiWgjB<GM|>$wp>1Zzt)mrLqb#Eg^DWCyDXpXfM-isYylYSj|a-W+ z4~pkBncx|192_3ZR=oT?+H7p6q=KOqkgZkgCCP~(6E@HdN~#32uJ@Es1*BIBYsnRm zIHf%hE;{)|EczfUr!SJ6&^8H0Pl7*v<8pY$ExkxP}4d~F51 z(*6yJs9HNONZyIheV9DF+luFBV$h=*)SLl?Te#c^5FU6I@T?_C4lxV$`=n$jZn&wZ z76_ffEKR{fD4q|l$K*fXa@S3ao9^GamSFEyb`Tj!M-e3?Le?PmckX=Bg*$yRVPr&Mfr@VIy0_s-qn_uIqL4 z?h$rkW}q`EV2}#!D;~9IG6)3+gs;wba`LkZ6^cS0v6PC6X&&E)$;Z_*K`*MVIdmuQ zuq1eP+7Hp!J0!8Ghpqs!>bx`&(u~0s3`z|zMUQ-_A*!Hb#T`NcU!--BB?gSy{;Pi0r`)fb!Z1I*frUyie zwdX@u1l$@A|0gF(5I!D4L55o4kj@8}Suc~Iv1&lHs5x*+uN4QVWcWw_-+f>vPw9Zu z&2--HXokVQ5Yntd=`L?InM}BMh6HDF)hv)m(_u9EJQDG?_QjbTCv<7DE4-fQ_cR;( zad)ybC~yQ>4VU^4Fg!BfujN^9YECQJ>P&dyirN-X8-AQ_@AMuYR=iP4{c8OeR@R{I zbPJR_+I_@oN@%5 z9{-!okNw2zGL^m68a@(~j~r?0=0DtArm&FRm1m5ruX+MXpBKZ96=bga=qN7?r*4#3 zJ=5{AALrN$JG+fc6|in!0%1hG~{>GqK^zy3|xdV!YxezIdH^f&tVoo z=!w(yv&TIsK}&>DrQO5oFmIaBf@9Q*Sq z8Yj9xpvRaf&MBlpRnQUnyB+-94&o6;#M97M@6i)sxnF@pxz>}j2 zocx9lZPwp=X6@RXV;v2FqiY(t`IX}dLep0y-nsN-5tvyo)4RxQVzu-OTY6TMMa02s zSX~14nrs5ytRcTrQBP`2bLkF2BKc15M`#VtbUVlPl{i$lUZiO<* zg^^?LE^Fs%HhKb2^Cq}NLmyJ9x;i0Tt2bktu47#bz?v&?+oZ^LYamzurw~uRdbA%s z(7Ot^$K7UiMV_Z6!XTWIBfcx}#;2@z^E5l69kRsRWSI%1k#RL;TaX1SOj&_8M0-K* zyyKqs^;mso$+2V+4yaB2&TUMupsbqj>Ci&QkN^?6M@sS;5NJrth(z zTndT?A`P@XVhMRPoVbZM-K-#t5|;IC3DZ zAF>gSBWB~C?MQ>&H--k;KwpFsC#qaY8nHM1rGF>x=1BbOHv<~?jX|(2ebqBK;d*hGLPW6bCSnMP`N^)!FSBu-`_*BcgDod{ zuQ5W#Zk~k-?gb9#%L4W-)em^QVNV?~e!uRd;9!r*5J6z@?efTiY@3gb*)%a21)e;k zw@#|}7UKs*S$6w5=F{a$HE1&`8AhsdL(mHDI}o#JteZTnZiUxPFrF}?wwp%?OY5MF z*IotbOv(d%?Hf`UEWgnId)*kyBOE0Jn-W`&DY(T^yeN1&8dA~yP-%OCMSZWziH!dg2HcpMt<}!JD4K~R__T0B@`sIz57>QE{J!38Y1kIp z-I3@n9nCt^8v-l#poRh}K=IQzaVn%Nv}ME^s!@>VRsli0&W0-x=$SibRTdH!%2j^@ zv4jPZq%xWZrd&Vr0t+GC%OM}7afC50i$ zJ@6vpVVL{19$yTfm!Z)pK1*daeNh@~(MuE1awZb8Oi0%!9iPs4awgAa zq>px~wYGI4Gs+XX&iwq zS~`zy21|M6560~B!$nh}FE^s!08RGNHU+*#^!_=`lM@%A?Qg;b3uH`{D_dLPi4-UR zDwFL3vpEV;Wzqg!bz(m4%!mi@@CzPjvft07eyggN^7cc%KrNA>3vFL>wUTys ziPkdW+>h&AM;f0WGA0EJ8>WE``~ind9T^RRcKaSxKqLPb7vRaUGyw8CBxUkoVHH9G zf$cmS8K#$4{xw4Rt6vpXw{?<3f^@GH`4sA7=P)##k?vtMdjfj#bU-|2LT2eN)V_9^$wDp$J46 zz8EMO7dve~KXo_ZMdp!SeX*CLa(|Q|1}MZW=lb6o!*HeY)VkTQ@7B7qVD)QsIw#N> zOm6!iHm?gp`$N_R%3}?>FtckZJ@TWv_2w)=h>hl_axIRe#E3jj+6qAuG;f(XJBK2e zh@{?xLyC^?)_PfzzfolRrB0*q=C%2NWys7fR|ukWbmPwvLf2TLCc-Cxyh_xh>ltI- zoZffRs_y)Lxy=|us;8)%n{@a~Fb^rao()YaNgy8k#7P>NxL#u-%dQn`2gTJ949s8C zr5;(jCHPoZZXWh5F{MEaSFN<+S1}sl@bKcEv%_d)aFWTsTqg$3N&Zd0izA-MYJX7* z5VPXoVABx`#YO(r+|_?#rXRSHZ&Xhj{jpEw@PH%P83H8cv5HW7a$%(``kjOfokQ_& z-=qbZKal{DKyJU(szU<})eBC{==t_#4odbrlUg2%Z%IcH4~XkGU>3&Tt|8;)hn_^s zP)OeAq^PhtbVdRr3T9pPtS%m6Z9OU=MRa%tu=tfX3d{ZpLs$Y6M+nhIT=&X_1y-Hum=CuDp@-RdB+wud{ajrLC z6wt3Gllw62&_GWlDs#c9@h$GHsJWC2L06o(gjv^FZK1v*hS7Jz+W3jhh>$ zHB#ky+;zfUW{6M?a#K_u_767CWv(ub5;?ez{x#i9QDu&L+@wt{qx9NY=wJQG?oOzH z`M*o(39egCB;ZsZEo|uCdQeXVa4#MJDW(dW*UwwEnAM{YWNwwOaF=LJZV=_A_5Afi zLF|h%9R4dm>*ir`0r@l~=rccsHl{w+Rg~jwvO`9X124GDk!pvEvVCa16vx3}Ui7}K zUYdeoifb_+R>WA$=kXd#w73b}z5$aTm2OlpnfzuUO3_{P6Ct-G%-=KMaK`EJLXhb| zzMWxHvJRAK8+6?$RsvGgFF&>=zksd?Tj-Pb_}o;h0j+Kk(NfXE?z>Y^Qj;#*+p`;;@ z0PunG0X*V|ZVBtK4KpWwvPICzjdCM>i6HZ^865+31A@MwEl0s@9dw3g%cn25rZ> zY&z37flTi4o#}Gl@CNC&jo_U6C8jZo;IGFmx<_0un7v}X0EUq*S?ikaP0#2BPTC@K z4Aa|*M(rt*QydI_@s3wa_jKp=B6FDMiZSUArBW~YM4U)xh4e;Zj6o6ME)idPq*QNS z4`O}RpXlio6rx-|%g2o(Pc`{KGep2}6>Rj1brbyz)TBIExVjpMJJY=bR=pTL=Nh?lgzUa(!Ez&oRZQ9W7ylEI0t6HQ;mgHvPMt~SNB&d_xm?JPC&q-MxJ7_HE`lwu zKBh`|lPdHxH3*Rs_Cg-AD(usb85rt=TGj~lXBS%7L9NrLEp<{O^^Q$hlx=&m*m@V6 z*u$RCISuSz`~1fY=Vv&zrcde(t~Pb10x!`esy_U(4>qFCR0y>O*W2Gznu}d6tGbTq zl`gwhUfoq)lYEnZA-?8n%q8lDPHAAR$VK1^kGl#V>;4e?yS9I`{i;D;wRLVdvMNhW zsj=3`sw{PNDo38tSK^V4rjeB-TtJret0Y(l1vIu)j*-MZHTFsLR9*DxDep{X$_Eu> ziq!@}Y;hlK^;I=+#cTnaM5@Tw@0vi>z!+ydQ5DR_nZj&DDu0J0`-}8C>M2x;qN>QE zSm%(p5dtU_D(VYNEZL+K=jo z6cW-^Jzb<~qP!myh4pZCqB|enj*xOt86R6MRfPqfoFH9Mq?Aw(Zxum}D2Z=8q4^$L zkE>4fypWI@O?WBL6(!mSwub74NJ{aiogYdijtgg` zBR3~aKw~t7Zrm9ix**p9Rd8jL0bO8W)PoA$+Gw+So0Fkr)^cKIi&|h81)(2ThB>H5 zzVwAVXotC?3c%$<&P)z#24;Hi&%QJ0($LiQ%OOJ>{Jc&i> zFyR_0vK8@chfVog(a%WrxCXnDeR5Cc$wB-2k05iWC8+kep4E>v@%cgZf+&J4tOt%+ zpY7QaYYTE&pSL(W!_z#~?ktRTv8B!Vw7os9r)OmyNNBM*t76NZwlDbOdxx|u7KLYM zUl>YnUZfP!O+nq1kRAD?|JZ5S@qM)=AMxUuz?(26T|`2n->}s%TLeGv>HNE`pqsA}GWgrjE;e90VQT z$0Gb9_{IoA;QtMX;BP>V7!Z~N+CBt${to!V_#-?l1w*NpsR@tU;h6P?gD+9-Ri8Dr zPy@Au{;>*n?4#zfZ?mnI+G}kabx{-bPzO6g<8)6I*0NU>=BC_G+*s6f&CdvDiZZ55 z@YZt6xx`##Di$iPV6BEgjaB>F%A_bWjRZ%|kX(olL_Vfv*% zgO_1m)Mghg{Y?`~(3&N9)v_9)desQk>sQSVQ1ncuX*Zp6k#x4WdcXR%3KU$9NpbV#BKy=miaPa5cPI0mZ}Gq%+8eb%JK~ZD4f*ji3*7M60?% zE&JikcI<NnGyW^Fosg?Ta~-Q?>41WwX_bksB=|ViM6anVADK(*(EUic_4^SLpm3qVGI0RkjLlAhO*1TWErxD$_n zr1s|HNX+Z-Hxl1vAfX^h@W^@ny5B6(K`!-ELMHK&D80lp9K<~&SPtSuhcF;>jtC*` z0k$#~&0F%}Z6_VWbsWPveh@InfcQZ`2q8RyHM-+f@S_~eb$k|KniW}&;X2p4geNih z9sfp{oV*K;;W|z_=|3m!(X}pNiJst&4=2ZP44*-`48jvwqdWS;#Ky+N#M9MkrAm4~ z9mVZ~%ecu&Kj~77koUaw78mjs4|1HR z$X?I#pMSgaqyIFd&KFDd?tmJd#(jReM;`MRP1m_62f5U#|FDA7?&;*flb`(L{=Fxs z@e9xK+4Tyi@u0PyV~ebx`furSFlh}oH);w8Y$up#HfM>xcIO#IZ;yRyk8lsbT z3lr7oMlPc{oF2hxoM`8y>zu`9+@|6y9%GAc%dDd57fw2e6aD5gKI7zzlP|XDE>60P z&sd_f_=+vMirXxYbI=xiDGOIUed-PFV1tfU?hQ;L4s)2Pfj3xap)J&oR{rvrcUYqB z@mI>n5jX>_R1@)5%oVVwGw=>q;0rv&Sr*7sZon^iyuYrmU+vEK0SqNiJ*6p>zC$56 z`dqoA)nD3Z?T?#m(TkE?Me{GxFzJJ5gcYV>NNtBaxx_RHGnq{w;7tBUjp{+p<7AOc z^0&s~!I&H5kjx-2$gm8OKe9)D<&OM0r!r4QWsbZ+cIAz%ku!2DV`K&LMYhNlSwT*a zSvi4>ARovSc_K?>19_DrGDLpJD!h|#cE}BxVYtdPOp;5(Ah zh=ZAC+ipBYg*lZ=3G;IPUQ8^6d0`1KEF9F8x}eU~@p1*CfN;)CEBoXge9J+6``B){J9(|* zS$qgD_B$R3F2N>vhGm$Bb65uBunx!IUGC*wZYW#PdN0!~WuECqmNKK{mD}+4WlSzJ zOLoa9z7hBQ2My0{EMva@h57P@fB1)g-}r}Z7zM9j2quxoEcgYN*af#>n4E)0@JI_U z|KO3GiB(owD>9stQ*ug9VS%;SSjwD&8DIuD1TVla3}RzoYx$jR#pbj1*p3=hDqw$8 zk^N1@1!w#X1@^cYiir|TNu_M0xTNUV6l@Z<43o&4*Sx-efKd)uwO_4u!gGNpk(+aW z_QWR#zfyk;Mm?@%9h5f*pYZ8p9(Up@^(9^+_7fPc_@3CXy+>H#7L9JvHM&LDDCKjD z?h#hFC>Q7ct_?%!{#>9*RjL>I8ptj$!H~t>v0VZhA90vl-Bp|&nvh%_vXz9 zG@h$-RqpVn+yyrTzplx6OKATgYsr4H*o|G-C2t6R-IEJ)VYk5*sa=o1xeQET*mXT- zx$AR5ZtHH`jqAD^H{)?hB{h+fFX^`kjNYhpjb{H7j0Avz&^e`MMgk}Rq@Y59nu7ub zgc}8fhJplyg93zbFboC;!k|DHNCbq!q+n1`nuw|*b^)mXuVVSfywV8wue$^^pQ~jd z^!OdD{fpFq)21+|z~km@0zB+)J3j%~`jmqIR&)0bB)7T^a(08xqxl6*3TRn$}ab_&6nO#6T|RkieEz1A%~u&!wh{L zl6TtVTu&(u^{uE6XR>oyeayrMB%;rO(e34F|HtDbG9|8B-z_Zto#ck4l;H$xmb zr&0W_hkCsXIN+RS@wXVX>oPt863#S>yO%+$H_Dt5ERk+iFV4B*>j81^^4s6=bN|}M zq@lpdrLzAh;M{u?sxnB4ebVQv&Ri8=_)V|I0$AhMSMkgJ<~h~=^I|D^Ite*&V3lN@ zsSv^jynVpKNsvg7n-SRNU`V;M`J2IIf0~8`mmYpTz#V55DGhVk8~y5QPw)Y2f0;QnXFTM5twi0Q%-e zl76-Eh@B|n(L39EGQE7MtSZqpP2x;a;X@&wu-(b~`Hv#-J^W(R+K87j$O{LaET45 zP8ING)g?@lK*3u8;gYaj@R?Lz0I@cZU2~4oYs@ zja+sl8X2f&g)J-vp?!7Y@fwI2wkq3dJBTQT@=SwcOz2MX#N=JK&=M;$oDZw0#v4ad z-*Wc6PgjCQGP*qc<|tJzbssV-kv#9%iIlw0#N2A-%H|}3JD-sIRUAocYS{kHAB+n} z?sLW_Ec1S456&diz=quoDQBB;>6}%0inPW)6vK^70kyO~2Oq(be1^1EBbZ5z&wr7h)ETa(F6>VoMk zDT}{aZz}7jG)4@g17bZP7SeNpfG*C%Y|N`u%tLIygZy>}FM#_C7i-HkZN)tV3+GHQ zEwbuRfwLk{v@~r!ncSd&NFK9?N1Kc-gS8yj(9fhf9Ph80t;sYKCwa;xi5{LX)5~Bw z%jZH%oGhQ8ix5r1L?Up6X*gI?Rzry927_VG)e@`^Jowz5(3nJ!++`)uC%8f2s z-87X9%1pDxW$gsQCk{z8&F5{yJs^i*VBkJ!(Pt!VQ7r>tMB;n$XnI>1bJ@&)$-AN| zAETv8MKH=k!f1YHT&A;%S6O3G?mZ=Kcb-8R_j0KcMNrL(mTM3jYz(f&>&@e!!@niF z^z#9-eBT^J6vr}@R%s|lWkFq~2+@b2d*)I;WI-2;eIH6Gy>nE$g`rq7yWYH0XUt=-0wX{Qb03;zoF@D%!PI8}1!Dh}!&%8`)* z=*C*EC9Ee9;7C$<1iKC-QJ!F6GB8Mr;@0?+%-X1E`y&bx?OGaG@3RrUpDsFX z`rrOxB@KGW-`Y|nzy*|S%Q>Hp&VCQlEQOQGytL7T2T%)a_m}c_F3Y8eW?fDdpVM+z zn9*i7+XFaX5je-j(Fep-J&<3xFqD;VhQASJF1SzStJ2;(35WNOS~X?H<;RT?nfi5z zy~pZI87e(~wZk%XHrno6==a3tY*r=v@(!p$;SsIPH#Du2P%cQ+8A7RMmcn_@b zE5hC^wzrNIzM`%aQk_VyG}oY5V~!M(G1Rz3rN^NNbJ@&0nfvi;z$3apbX~6PQ6=h+ zB%tkbkeY_3)zd11RI2)ZDwr^7 ze(gsPAtEcs7jb-?%gr#)HPq3D%kOk}TBSm@{NVQuBsV?zN%IZ#;fbh9^EIek10t0h zEERaza~xzF>6m0i0G>sAC?Q5CW)7jMW7vZ;A%jr2iPu;>r+yAdMRA6PdiL2yQYox= zKrYWVP|_h0w(A2C!%qd5A{TA#vw%Gl3im-0ukzsX#qY@VeMgwP`C9|B;Ok+y(sDcb zAMQmunO{|JZ)-9alj2w1)Z<-O+9)%d65!eZo~=_^FYWv-)PvZA%k%)A#nL_S;$JOk z_o*Q2fxR|xBOQxoojwce1ee&=wRG$L`lf`wZFdVbCksJIMF~y-!}ct6vc~-9E&jjd zFo905PDY_7%&IYwL2d{?wOcx|gBnN{d^FH+G+6SaCBr8^vz59p;_~ef@Th=}l1`e( z2zi08Y|Y%PYdvuDNe; zATJ{9UcMl`9Kmqb58FtW*u6|Qf(^%A_z@i0?@$zEKK`p44K;!u%nc~)(#6+JnY;Z^ z?CrmHn9-ky3?>f?P1QO@&UhFKNj=o8O+^99Py4bZsCKnjBzl9TnWEsqgm8k%SqzfZ zGdO1=8SC7WHoBzLwh0r=8ZenrG;r89baiXiRmrif`nX``S_r4c(D13D20eU2Ug!%b ztZw4w1accf1uPRD6!JLc_Ia=i1n9Ki>T!^vRCbxSuPsVKk^8g+n z5E^&7R*xujBoQ248GS&?pst>8*afNFlJwjkK$i=Z$bN=7FRM;$0ErY1poqgkJv|Qr zM}0K4NEANeC82=yZQnqWRHSh;5wz5-ee0>27zOnJ(^oiVIq4`P*%o+7i*!%r)VW@?%0yWd(Z=uhXO}>@6SGqgz`IvW%@eYUITwG+<*@JPbtc&d557oTIuYk zDOIH z^uFvFfRa^f{xDDQGN|e=RTqfg#pos@5tDO$ovO>+Hvhf}n~$wERl3^S0A*5$tx;!@ zM5zWXp|U=5;%=aR$uVj1|1=E%L*9H%X(OEz^W?6vni0k~?W8}=f444WCHtBGnoAav zs`7{OlM-Z!y$&RHa@-%&|LdZ{ssp9@^0Ce@?dO#ygWo)7t44Yc2N{ZnWm8mO9sv+~Gz$Wu@Zk7uuR&RR)d-@XUuL%SXG$xGaA0v9inth!l3rtKY6!b(=W zOP?eN9qs^*{ev;SxK3sPq@jn9-^UO?Eh7Fm#b|F)ON*YLwyzm8D_zI3uC;Oq9}#BPp!TRozr`c#tnTZ7Z*VNF^k3;&Y4XgA(pPfM+Bu$+T*aAClbw=`FWB`- zIJI0iAt*`%g`fx63q05zdGNxM0rJs7uXywW+_Za~V*ZmpC2oS<p9 z;F_(Ua+TMX6H}o^P8S6#C;Cnp(zVm9pRi<05Z9Iuv|JGB7>&gd0+I*h1PVq=R;|%y zHx&ML?q3S<5?`&Nip3=h^Fji^lu*szLnLO%gqtS4Q4nlIBK}AS-AwgzdUiMh>dAolJ z+MKRkHs=4{;;bV2{R9<_XEoHr)0oe9e7Z0;RevJS{W*s8cD-Pfq0Cht!154%HI(0{ zfh8wNK4G4SQl9m>mJKAl^VXL#Qbz|OK`Gv*8yg;^bP+)H>Moo_N58yM8?y*uNIZ4{ z;2-&2s{3VOTp?Ry*fg1`{Z<*q!IVy&nbjiC$QMEFa3!}9>-+g4GBgYx`i;zHl<_RF z6%yg*i8^ldAE~cn>NM7=JKjvkrs?fe{swiJ*t}7`_`njk7TZS4L!Y8->dAn>*ql$e zA1lz$cH~T6`ig5)9(UY71b`GvO)8967 zdor6jfs@uV;Q5dHr)(MUl<9=klZJ@Df5F{iMlGJE=F?-K3AWG z?bbw^657TM-0fKIe&IwuyRV^9!!RFEbflhQYt19K`v}#%bF=!N{DDVEi_s97;$(Tv z7&1(*{WA6d38}BLia+As(V7b$i|U*ZxNOcYl~A}8|I8aHsHS??yJX^Rz_>S7>4_{G z4>Ea|cu*{XB=G{g;d<8>lVU6_wbH^0b?HEsS~5A!8g#nanq5@x?-Wtk!D!231uZ}- zu+L}{)33KK7igZW`R3ZBCQ1~sf`VzyB%IM?mKDV#>=2v1@}mgjkC}J%+x84rYR4G1 zhApD^LEz=#LG_DZU1=!JZZ2{lF+G0+^?;7r{FbcMXsn}ioJH$ieqk$2Q`6s`M{j;( zu>`XdBB0yE# zShAQ^*sX_Np15GK`vE@gSjP?P{QaS4H$fiRhJC_dn1X!~iE~K{+LYy=q=+0%tb@jTs zdc9s(SFhLWb#?W6yjhp|gnvw&l4>P(ymJWeyz|aG>+E9?KhuxIIP>&KY9u(kQ|qlf zd_&uO8&PW`hNem41uYBLa1RP7C?hH=6Yg;i6*g?JaB^}Xl`46MdmNQIy2&w)S}%`I z&v1{UPIp9J$pn%SkO~w+Ohhi+!p+~p;-{l-Mm(bykjOiY=uu7@X}p9a&}F2?iy|7u zLAVu%9~1|{R`eA|iY-N(qONF46`fK=!=jRCL*%{V9Pha49Os~_VI5YVRD){J9_1x> zNgPcLYx0Kbk~6OmkQ$)EO1_*lObuzmpjl#?tyH3EFB!OF$ZzeP%}n`|Gc}esh|eyY4#6UpN2ToW|zm zdhS0r|I7TtKivGwTbH@{+EK@md9mP?r(^2aI^NFnbRLaI-(#L}%-#GS;q)Ej%-zT5 zd3$-bemm+uF{d5Gfu8$M@`UtVBUxVe-BoY->MSiEk=Lr#SZHWgGczqVo2sVfIhJuq zJN@mf13gDeNF&mB-R&hZcehga>82UT^7ipG-Y%+`7)-XBwa{2Hu9wz}#YcyE#!>F7 z)7vRXN(#x!iUP}(Sgluk-4r5DZtpa;ED5`zF8AY!0o#evC{z_eqkCZTCXDFlH@0hNK*f*S$n zygtFeNt1#U+il0W3R=sO`k2Dfg_JT=v`1k`C(1J-7X6miEs?_a_b81W1>K$ZYPOIr zz7KJZ?;i7*vrc=?Z#k!(c2QOCd52zDuwf)Ia z<0gB;W&g@DH7?oKZ1L8)bd9DNZu{k}|D9a^F3$*X^f5Lp2aZ3J&0*9o|EY#B6o>eP z=cQscG>1jbMz&jM%|Na9tCMeKxiV+WA5pPr76}lZeRvp7ax)!9BC2$Iab?iuIrQ9p z9)lKWlACGp6gBRHO;r0ks%HlMD#h)^W}jKSg1#xZG+M{!<0-Hbh?oE+%dUcY3N|Hn z>aTABNNjf=0YYp^!;+46$!_7(^SBG`TpNDN9e4@WpONK$Ugm9wp3L+n>-Dz_$7>hEujNOZe{ z1VT(iZvP>gLz1Nf2p&Y%ACZ|eJ9~6vsG%5`cNfU=uwyTSB*n)dA~j}8sE|JU_Y8h9 z96(qg9e~LDdxR-cC}zQYMNef@WLM4lO=PVx8Li4ZG;=OIfMB4f+U2Y8UD-feOrzBO}abfjy);pctB3FG@_=VrO-rxwifT`TkNGS zHv)}Fe6G9xg3ciF@L;VMmL#MP+y4m3sfo~Ih!23s{XNnYS%?l>fTR0`j>@LU>eAnK zeH(-$Q5vx^SN1>Ihq?a`+J*oNqUhJn(fU!_r7;aa&d(&&5DB|7RJf&)E;gP<$o3e{ zC%a=C#F@;jQQ7shfv=|1U^fUfxPV#862d2BUl4=9e87lIEiNS}abN%!@5!C)IXu|8 z+cZnIIf@#L*F3acDV0q#?4MUCt(>Omx6PCWYQ(ZGAqxNF#G4W~UVW!2j&dwv{`uI* zmFGPdeat{3A|^4IyO4flbL`a3!#C?Y*P&bL(2sAMQ%Y#xXo?T^MaeIR^-l_l?H&cc z^=8Qe)9^#0iHYR{Orl2BM4a=*7ok9Ll2OE<7>dRaI3!L2i+$$8lgZAfY5ND?>$@6f z7NBEMul@=$F9ZUBM;Lm_wgEZQR|R!~ByeyrpSPA_AY5eYJO?F*GLe^AKwM3V33V3 zA2Hm71(lEl#PjwxpG_q~!x2Ue3kWZ9I)D)efWry72^eBY8$^=Fx6RSi`VoP2rSamD<-;nw4wE?w8&&(?SL>{Q&DjW>B9h-W)5ozi9q|}d zA_q`F2G2IrA>K?EfvUGAy|>13TqE2>$5%m=L1{CnLkmJF4(#e`PZ2y#gXg)jQ8Ta< z?1xqOIfCixij6yK%A<+@D&YFgRK~v1GL%#8LeBZ6j{-<4Dk?a+GwqhORG90}Kfzp> z)dET^=k)6JDm0oWDzXYxk&4-HS|0&4Nok(+oJanU&75J5+*Ucoo>}lpq2-mkV!&RQ zq~u3o5>*tFuy1(cV&Ylvh=D0-c*YxV@GEP8t|JxTBVYJRMd{o}-yp4i1j8_t>9u7To{Rk#4+0C5 z;;Rq>Q)*Xl>NM4;7fMO0XV9IOnkIGXg(TEn`n;)SK$T}_pO#r3W)T{*e3$`3dyu!B zH-G@w4$Yt$G|OWaO)(U9U{>zOEFAt$PLx%Ru7&jf|NsC0|NsC0|NsB*v`_7E z@BsJ#`2hCw$_?-63P$mS8*_QZOS&8&AOQG%e4fht>2*{$F`<~vErz?*(wdA-2Bo2~ zS?siD2`gJ>YkZ9%8HynI@qH@KJN=_tLmoC858UmR)@m{~8I*>`X0g+rC9G_jt?@O6 zAQ{?=dS0>04Q;yQwJu%S&weJE!X2GrL3>_tY4VyEcF$Wn<;GmPbc;*FoWU6Ua;;&v zyySh|R*E%v^yn7*UC}Hzv`T3|`?u}+OvvNJeuV4hPL1mli0*A zmJkzKm04VB*ku%(*fau96xEFk zL@nOq;K$|$7dec_^UOy=3=fPEhKl3T!*Cxy5{U2(ozX`^F6C(4h^snZr*xQ(=agr- zqsK53MdAxbatvq3ykH=M0hs|1+~}9N4((zc*nPjznD*S6NR_@)ZzKwRwiS-im+?B^H5Zh1+!xaGzG*tF-E{Y<)}DY(TZ9?jwxbGYS2?`apS zvIMKLi&a@wOlTLMzF?!6-tYa*{qsmSZ% zL9S6`^9}`uLfUK>U0@a2UMi6*Jz>ITLpfkd&pELt<}FNQOvV)_-bqcZNrS0nI!&|^ zT9O^6WWFORiK2H(7bUofI!HJ%kTlm!f+H=$AwKe% zewArcN^zJ{?JuVApYbYQa|tD|$2>yeO=+Ec7 zgLgi!G>&8=OYKH>>#EHT9+}0Zj$;&?7=ebz8@go`yFA|Tl2_EQ%jJDtds{9|8pfk# z_OqW!KDpy1jpEWKHa!LtZuf}cIYiKu{)7U>PxpMKq`^y==9?FA%}cz7SZVl+kdKvu zbqm=DImxhIERm&Ron|472SET=mi4hZUSGS~Ra-cFt!yZU;RY4*(MJb`u+^6WQ(wyC z^+65fARkBw(mIi*6ypK90XYv^ef7PXzgUqej}(~tUV44)YAW>l`kKCb?dpAZoYxLo zhwU&s$c_(G$m*@x&@#;9Q&)5(<&g(NaKDzq)i-sep zlgRN8(`y6_2(pqo+oaS1Q_vu&QV@bo>s)#dF zG@xT6nqJAeP1zufOEP>22&oHb5Whj|GkR|R46h)U^kt8a)UH05rGs)`+xN~*0HDx7(g=h$un4=Z* z&UsD<2a2zT6&YV!F~obT7aT~z5}tK~S#4VtiL~R!($BXJgGkcB3So7L4gpkI9dehL z6mgwKSeiMD2s+m;3K#AlV^pj0;YR?f)MVlX&`-q|)^Ui*H}-jvg&@6Z5QF}D%IP?lx|4NL{UqNZ^n7B@E%_Dq+FwQN`xSU4C& zA1BA}mn>A|*O0A`LnvynQ*D1p&>Nvl9HI%@Gtq22W;JFPec7^SlSkL1Fm;r~hEmoq zf~4%(3{|XZ!Z{_cQeDVGk}Ibkwv$JUis7s(lBSB&%2WZf0pgi7 zR|y?Rom}sxl;I5}A}*NFtTeOm$J?EQ_>H2`84;{26;+l8cqJp%=g7XE6nYe2f zDGZE>|tHTR_0=2Za8&You8GCYN ztp+gPz<_^bP_)ry3G_JV{{StB4}Qd66h~+gC1+T1wjeY#`i;Dn9>hta-1VHF`*f2N z;!3`t&sW-pbW(Iy=97r3J}NCu!rLKZ$mv+GFI5c=9ei$jH2G9FD zW=K06Mn6G{_OQ3lDn4~A?Q9;gP5H6&e`?T{kJQ|z)FK>o>V3B5p<+~R*&SP8JI=Dy zplI2cB^$+wE!S8K5! z602{hUq{(gry|wD{1PyW)kVoW82)?i0)nK^RgIAHQ%$tYeKU`oV=hPCe35_5Eo$H` z{|AAU#f|kbUbN)ZSlSpLiHd}d4Y)jbpGLk{I; zhqfT_foKGnPI_(>vQ}LnCgAVQy4vo;{lQ8Bo;xJm3dOV)Q^73p&KOy9La zq0is)A)jjHOql{&kAD#z&R@yqi#k%4ZVK?Pl+1Cl6X5V zxlW*i`#Mkp$H%H5!|SX=(oq`Lc{nHSgvB0<#O<-t3 zNUDz7gdHSAK5CqSsa!sQ$_OU)hj6<2;OC9=nv#`yQK40(-`r%$CM@wVA|oxikgEH!aS&} znHXU=orb#<+s!+;04E=yX)^cQOx&VrFkKSl5YQo#i4Rm}Y7F6HAE#NEx(4a$5*j2@ z#2hKOK17-W_R?bl8igppE+-=%b$u%RMofq|PP)m)iYiW40w5%bDWSDQK54-QSWX{Y z#d%EYFsx{WC+$T61YOs=wd>jUkoei^yz~{f z+W)D!iWqENXLGv04E*%pj`I6IgG+g))QM3YDdXRxW zR%gy1|0WMu09OE60C+rzdAP=uf8s3o^j7cs>>eI3iN)Uai9sA<4Q+GVHTp*9tNi{x zY}vuJPrsuM-gF#XS-#(oHDaN#N(a}~`te+I9JQ+Pt!^J*;vjn0=53#?YqMo^FK8Cw z4VXOY;%^Max3_5O_O#PZJMAj|^0X8$D?{jGCTPT5D~CPhq@T=E9QM*lKY8snktx4+ z*h#xunkr>oUiyz>V-|&l*_SEj*4j3$+dBIcwJGW|qnmu*cW*pWU#KxYvXuN}d-(LR zyZrUklwB)N-+OrVc1bM0RhgKtO!1AR7haDR3j#Q0NC-tJmBGTk>PYN z&SZg>V`)-~%CH1+BCaIn#v}%Z&4Y?Mg9IKGf;{XJ9sxlL(a21ak~RlqKZI6Ybb5-C zhE91&m}F}WE&T{*wPEXka^lv}iKXzahNs`vu&;S*zx0 z=PSQ9Y`4a*AfO(XzLpc>58E(ds{x+8|Cz=CkR8{N0f@K`9tdT=?TF9g2Tsu(>O10! zXtjtR>`1I)q?@{S>`~|=#=(7}-s*wgSC+5Ms`cKm9c1}#b;vHDX^%5m7dw`uXx3f{;>@l`b6OdtaC)pO{1PAUiAl=nfwIT8X1w=B*o4@}VP_2Fv0;IzI zks8=Szzo}RAEh<*>0>l9XTlAvDsp+F0rtJ42|V2{S+;P)D2h_ZCg5Ljjf<8G`bZlt zuTO9j-|$~L5DdLOE5`RT|8@H5>4P>p$ZwFlPqb>L?48FMZlZJRk?4?Sf^nTlMe6~p*mr?`4DsVO zM{CLg!?q)fqz!(%oNpI8GLpe&iY9J7FYZR-D93M?nKI42BeDMI5XR|w}~ z!>#iDieffJY7$J@%#Fq#J~FLZC=gdh(L!qg?X5ImUYmwcan7Ds3#vSa{1*ywYdH^q z(J97J=%6t<;Z*~`g$1v;a@w&zw&f{eG_g}(SqZvv2Wyfo>m1v^965z{*fS^p11PZ`p?X^+-pj4&oHgl&iTdp zgPb;^%(8BZg3mY6;7^c{Q=>1_xz_BkaZLddoMYUeYX-O`yRKS7zalzpVc{x=*bG?0 z_CJRTL@oe?6eA@ACMT2?(GTDi{1uoN1sSLqn8+D6H^CZ?8~huD96@RQ3I`ohb7viQ z9UnSPX;dCz385ZAVQ@p(5$PiwA0I|{CIFls#Nr=Tb8{RZE+AYOUxXl$uOQqY1R+Kt zP$6tWm^xu1aCJx`cdH`*A|qfUh#agj#3SnrDmpqKW&oHkG~*;P5G7JjNknEPB}9NG zB2y=@CrBqrOiff(zyw_U6k}v-Y;+iNbg+tyjgD9=MX zG&aU06k_GZ;{QZet8JmN@($shOVa&>&$pe1SImRjxn36vufTVP$56#iLF<}3K+_kZ z0k=(L98w#unHYn>_DU!6etfG}J1e9ETdz)Jf)FE!V$Pz4zgCNv!z1@&`8~HMky>*f z(O??9$}+9A7+KCE#o0RS`d+w*J1_7rf#ccBG@YY8RtJ1sz*5iz4{i~%Hs6kp78v4z zbb9K~rJ<$4EmpGC%18=lrkhy?0-E?Sit}0@liS zyfPTheVfe6m`i4LHKB_OG-a6$85zKsBJXGJoOf3(&nWCth=(WMBuA9Y~s@jrqFyIz7X4~{$6Qz_Q@MHH&1VK7n>g*nR3z*x!ZIG zGRk>Po`U#cxVc?71n%JE{Sy8-IERsVb?Bxi4~zU#SsAhwH(nI1n1$Vz9U`vJml?Zn zkv#n}d!vJ9z#rY3W`pH+y+4F^*kMlq0=f`2S-}RPVn)vMdYR5vr z39V$2gA%<@wD|=BkS_2$HoENF<_mAUX=8on}iKGI&3N&Ih0hx8E4!i`m#F+~mVHs};a}tY3A>k)mXi~NC}VFhtCnV@&ty!$`I(}9$-gH!`eUF3V!>05->_cF}> zq30g|kpuX=B-%JOWnh`&w1um>)&AOce*F5*y7z=BMFqp*e#zb}0wooSw{d|gQP8HS z8)63LT1Z-y;YQ9aB)0G;@u(szQxrF|No-!Fc`iYt=+tptBlQ_B9nG9^3xH7J;X42EGbV1JtWp+8|@b zeNn&3C&iNuxvif2igM&lAmid~=lPB&EacXsvKfZ(6pBe{PZZUF-7)|ZA>oQQL$BaF>&#Y%`KAcVhPEwCM6~25T;rP||4-Sux zPfj--!<}NBx}Bb#NSwW$OP#x&2b?dRbzH8YT`hd_T`}GAU2pI18R5J*ybQejy-K|L zyq>*iyk)#?yraDzPQ^UQ5#Bw%%H_?smnQk!d;6yQK0ZC;`1vFGBL#fDJ^-ISNP$5? z!NI|yp`qd7;gOMF>v>G>W-b`}7iml$N1jUFQXXWnbN*p|bphrkW+4(K6;K6<2^c?B zxLSBw$Wp|~wN|WIa#>VfOs>Y4hftfQ=}tfy}<^|NnaazJ44aG>ZbE#PJlX^3OUc}U+-*~r+$RN2DPd^CD= zY4m+mWGsBFee8Pd{c^d#H9slbMQK2g9v|_&e`~h0wkX!aN=K6Tq7MnM&{bEO9qpnc zC-_w=ie*w`(#qP#_6IrA)cvI0)a2C8RP9vV6v1@*l$D*8y_JKNqZ8Il@NDpG{W4PU zYVhj&G}t=qI>|cUy59Qxbk(}A-|qU}x1<{t5$^TzY8$)4k$>)zP!y~jP4{a+^xr@rC7 z5s|)8>1**I1boJZtSl@HY)qxBO{N#DThbH6uJf!#HA#Km*ZtI`K0rtefl9w67j)q^ zP3yg??}6kEw?ew>OW-3V9IWNVT-YdequzPnp7rgBV4!HIVFPPSDon6qFpQ{lho*9; zDB^`xzKMz!rd#U8yzgsL-ta-BIWjvjwe7wm__TJW9te++P#S`UP*EerjY1tJL5Z;q z0X^v%n2=1#z#%4^a847)phV&OFh=3qsxW`!3R~iY61g*JNe2bMS#dlIL0BsiD$Dc|nbu>6whBjE!mGAB$GHPM^omXeRWlck_-ELh?P+t6NijFa1;dd0=%CO%C z1YUwLM1#%i{Hy!#K(Ax_&T~=d?WR%G2pwVl3HM3Pce!fQKXdz&DY}6$aq~ootFu?B zu3YlXw74^vAjyMidx|A@n~&Q$=ONxS!~P5rKtUn^gBK{pI2gga|K!|IMGFHG!$j^i zKw)~;f7ietXmAY(_ACz?pF~^gmhWRpXZ8xzLv|CVwV zI$RTA%SR|;s_TcSvixz1O&BC-GC2GSRAJLu&t}*4%~LzxjS8JW{eT>ryiADxYj#gr zw5X=oN_z86H-v4|{054n?3JWAi~l_lmNUO`$-1rZNcYvPIevz@D2`{Lw}@|DPNlRB z4M0`YlvSfauwmP0)75NLRt+AYcdWt{HH#HH^UOEed(tXyd#i|nMC_d1hqDijFZ9X@)VthD-uG$(gE%#*Ep{PR9brqP<^G$^5Q+m*lhoD}rBy4SrUq zG&F`w{51MVu$#M{C%(sbfFVQ+(d<&6+_ZB}?lch-RTVzdLBZ*fP0fie-tzwLrAA&B zk@s%P8RKIc;B7T-JNn$lzV7E0)cXrW5`ha^DP!lwTt?{l^SUj=#?KN1U-Ad*UB3eO z^3LoVe;w$;dz1$*2E}~B!;h;TyB@|dl?0ya z=OW9ukY|zA;T?x_Qz3pJ;~xo zxOl9lX6yhcMdc8mJDfKmxL|_JxOKu)DDdYucLKN!$i6WiKZc4-j}@ zzv>fG(VH>Q{Nf>J@|}B%+p^UpZiSqG`DW!0;jp+dIbQv-#ipkpTmTE7#rhg%t! zmo0+^#%>Z&g=Q=6@u2szejMenNmqV3!zd6jKcpC+a0VirzH)P3h>4|Ux2V$C!T(@4k;odUK|=S1HhF7*@FTf9nEj_(G5?GCo4 z0q%MTDuXm&EMn)}lyZ0u-H$37dYwD5TRBJ*n?cuI2^%Jcs&=+MgcDEDX6L%5Pre~l zDeO`g2rF+BT_{t<{U6$+L<%WN#^*n={e zv86C13qx57w`yo{FI~zOMwZ<;gSus@s1a#8RiB)I|@aAI1} zcq{JKKUPSS+{}_ORAYv;4ExsW&ZSqVnIQkR=D;&+A+=L{%4S4!tQ#P}o?`~fXs(qk7k-$a+3coOm~yVyZv7k`n^u8-gVRR910 z5b*JrUQv@SUrxJvB_0|z7{<{zL0;C~|J0|B8|#+*$GQ1LLhJUMCB_qTlR#=kdH#O%#A`v=*+~D29_6-WqR)RR8qB(c|Za2{(-^K0ijWU{c}Si{4;|>!Xt6>k+y&a zDXQDUkZ&1ZH_j=UsGO42tdtQM_VWzD>I5pAa(v}lg~Nzd$`DNx9(AXhl?E({9jFle zq=<7qPNOOsvR2L@selXFgHM8CX>oc6g8Xa1CYAphFfFrp4;&C$N+8Y$^tqps{thrG zx49&M68W#CZ(+flzifFOej9!t{vLi4{uuri{wMq>?k@b{IsElMwluh-;Fm`H^!~D? zuezzq!_v>H#_}HcIiT$Bm|n`!*gv)$uKABGwJR?(N@maGsg`8DltUg%87@?@Smm+? zmSjy;MzKU7WFX>lLjF~9NA*j|e-+^bfc!JzB0>fSzyYaI1mcu{=WD-e?`>*(Q#s9B31Og~u%>I?VlD(6?l)aX{oxPAfRlJk|MmV54 z5U5-BFBkZcLTI$#e4v^UCO17U&+=OOS7iP}IX$W>8m3IzSg3+&sUNF)SH>Xut{VjI zYgTMzZ$VwxzHm~4>$Xo+USLt{m=d}AS=lozjccd+6DevHbITZqN zF%X|VXi+9WAJR-=5W&A=`Wopy5DM80n>L%(j>O5*L5ix%^5HbI*R~jEC>RC={tBD1CIp2$#=2s-s`c$Um|8iyI*Tu_jpqTnm^AE;dK|i6c zJ^ygZf^em#R78HGNlg*`{XutWCq%EKcFd0bua3r=|DE!8H`B-9fO0AV@p({wl6?qH zK%YW=c@V)rYu0MWddOzTVaQs@cE~}O z+G7-5kGb}iChU3Ymitr$7ANLz3|}?X9y1nC?&Yb@<-C+d-;~m2Yv5Sr(gu`2TB|5Ytc>;HwXvM4DiJuovcJFqw~BQQ6xC@?KBD=aH8=l_FmADEla)(AsT zzzRU4Xk(JF$>ys_@i|_~{%kI+yO(F3NE^YiGevdx!Ty$#QUKO1*x^Z4y)2LTdA?*C zK74m!4E_&%`GJK{*Cp$mw7{*ciSk$I<*f;#_s{Dp_6L~5nrL|z82|u^00?;h%ZUVX z_~n2bEd$-)fL8*7Q8iHh$VZ|t^y#=L^8uj(-3=*7*WZ_sF4irs(9q00NHx1K^+k8$gfR{{VPz`30b+-ms@o z6~X@o@I>eT1h7~burAk!A||k|21)L9Sdz)|n?|G_Jg09mIs=lr)F%Jr#h0Q7zlXgH zp|QnrQX1eF=U;*$yi)KiDm-QhKv6u!2@Bvh5~(3kI6naq17ZTffQy7a*!ijYsMWNL z8vZ#7BIW_{A+N<=iL-@St9ptTgAh$&f8i_88T4{3!m@v5F$&SNK|)2HLe_Gx%l zKzevbX`@+yP*k?gZJlL&K9sD`&+pXYV$+LTm6Z`lJNGG&D2*T`D{2e-N8PHBtwGuMQ<54;f5D0@e7^ zA;m>B1`0L^tqzh%nhAr)PBBje6Dx}%D&M|uQ>egBu`(sWK>9#vB3;K>xyvfpygzyZ zJ)e(4Yy1+;0NP-h--S7_X3$j3$}raSUau2GssO2k9G?~+OQyq&L!g6faH&)xeh>B? z6;7Qcv|REOhuV0A#&{PA{5V6BfxYZIHs%=tJ^TUAcL>N_BuZ>o+{?pYq=KX(VWZ%g zcw|ywcURHl&EEE#-Og~LPrLYCFwa#4zk{CBMQqP{nM+x0azEeI{Px9S?wgJNVe<@lzio6#nsY_Zg&JMCi!JJerHr^7kE4$ZpniaiSvIaKQ)fBQ z#f|H{$e<^!95Q9dd@>o^C8|<|s^l&}E`#uhOJthSj5DD2rPD+*ULsE@suo>tbO_w2n zLFxUDT#zz~0LbI-r>kn`w4Rv_qZ!Ce+U?l%u_c8fjcoX2(RcUzbU)PU)v`a?vJ;z^WLO?^cmHX{{WHU_e}AiK!sMnGH>{*wfTsv zR-9wn>}bxe^!mZ9W?)p8SePO?T9Kwx`X6K0i z!`il@X1MpR-m2T}oAdb_+c#&sHO)UJo>^mI8_Tuc6IvNI%KGritkL0@8{|#CznjQ? zww56MJ|0%`p7#Ik+rCHs+))YiDHqbZhMA~PKC>9e_j=#krl7LDQL<$wfgc8IA zEBMcI3_;9b3L!YAV9HV)=1Mr@KP475)snI}?>n{QNLmC4OVI*8tSd@Kgi>=&5NGmJ zt8x>G9?u~I-70}pj^x9ttPYG0D7JCYzycHy*uCoDxQe)PD@G^O=PYac8zqjy>jIx*>+$SPYsn znLMw%W#IXQ*_zF%P~om=)YdCZYeA+bhz&SEkr${!nhBLr;^=yGjvN$aT?=_Nj}K^) zW)n3QtwVEo4xU)ZimD(|hrvKPM#NG;%KPJw(}fE+UO9d2A}qE&0~E0Gh#TRq$~GIK zMb=CZ3@Cpf{{~E=y!H>%u;w-QH5l}te)2(}cB;O!ylW`#HVBdAPM;!er=UqJj!tPn zH|5MqUU+VjF~^fcdvNqD<6~fg{yZ^_Jm9We!NFhRJS0X(9@moXj*vvMRIjk(+REnY z5o?EL|8ccD1n;N{8(?@7kAb}mmJ4?a9>uRN6oVc-`NGVz1Bo_d!B4ZHRo=h;YK%b( zj@%;V?Ql2cJVBskEr>;XrKR;z`co2zvVK($0VJjplN1Xa#(=3OD=&ygxcF8jBb?4R zquJEP=EN!&lDdS?+n(Bt)Q{p$Ayx?FTWXg(Mc+N2TK~hK9DkJcg`SvewE`TYvDiAA9jWLT-p$9# zc4-`9qfdS);J2ssSor~WPa5QnF*jirNgW=R>1y*B{#(>^GIS|Ockk8R`;RM1s9Rhc zkkFqHU^DT5EDTFpm~c^94y`>ktxaP$^2NSHG0WgawbGi3LHQ^czZx4c$2+VVnGT|o zy&9*GwAaAz;4Y>?ZsY+|jcUi(3k99t#J7f4puxi#uD7`i^Em}Kwgu~f+e9l|Zh(4l zi@oN)mR;2oX_(EBE>0M!8t%?rgFYidu=Wnz-HK))WP2mVM^)-L(m%11|9@kpuMl|d zq$@c(~MNIIs=GGzuV`G2E~=o{|V}l*@01${xa+^a0JnUmTOlFbQ^xufjUC zg6PN;%*~ZR{>JQvLuj=JQuLfv97E9rbq9O}J^m_AzTv?#J zCD<$)UO&BKi1Is8yNV4ib!Fx7@{gg+EXUm2NEkS|y>E=Ml^sFc?&E|?-uI4{yb5wE zF8A@)g@{$60w<)!ADEvmDwu)Z=iup^TB%uE6qxN~$L3L5b&w1%aFZA_I^;?0WkjC%YNC!TQ%d zef;E_J*6-*#h+6u1gJ#@$d`fIpU)il@7pWyvrpbPKJxd|`o6bee5Y=DCt>v789P2x zpzIq1Dgk1&G;%K(X3$@UiC{bT;duR3Gx5CqZ2hd+i37xCBbBd3F2DKh$LsLDzEuyg z@C=g9CV0Y5rB_xPqTnnNKc9%=xpv{^XnF*2F;%MMsJ+#<=BCTXg!5j*dfhjBDn0)y z3KQ-oI)?jYh#-ofmq7sM5W>ZxY5+}M6|UrQEi&(sST-NaMPr$zwpN~0)jWu;(bV2! ziN2K>_1$I_MA{+^zKbMC)!i6ccaaUQ0KsLcV6HW5VAU5|8{4QJ+Weqc0To68$vmuR zgMh=cjk#QZt{;3L3eT5oarRi2{l&7)BFFg$g1+@FR?czIFqrOuv^O>WZAJ{YcKTS9v6I0I6hl6K03f3SA#ZAJRLPT9VH=yY#@hlt8ki7#}#6PDu zc-~m-yz@?8b})GF0`y*lc0NPNeP^uQx6R$*_=5s84)F(_L#NfMe%V(_$4oD*QI#57 zNH7IMqks`QRx5znUxKFB07Za55Da(?>LFYahi*u_0y#Op&uB$klcN zAsFXp>*p4ILn8=mkhmaM&lv_qb`~ZoSgY!xmL(hHA|t$iz6mOAmv|xbylatxXVuQ~ zPDM$$Is1%l z*~{nZ$U8nWcahgUF&OXph|k6ay0RPJwoBauis2KIX1kQe6WsQ^q|Y-fKKC;?&wW`z z3Jr$uLY?~oyY8kk=XFWnd!#5XAb@XJnlJ@>X@5_eC#38-BJLT!Rn&V){rX#=l2sO8 z<<0@MmY?V1#Vq0tB8PZ5mbadHhE}oRwpU zs3SBYJ~(It5@JLAShz@q1jcdy+G?Q6aEF@$Z|NHuGDZAy#Ir>U;>0q!t5#GIJhB8D z3Mong-J-p*a8PJCTE%%}Ws#N08txKfx-NF)xt55Fb9B8+Py!^cI8SGacnrfi8mCqq z?GQAW>U#2o35;xOV!a9NI2rS<#TYVzOI476^PCc5iBWCdvf@#aV@*xv7BAJ|t~LeA28Jgu5=B=a@iume`Y7EZ#L;!*T{q0um&UGhtRMpc;3G$D0_}m73eT zp|QO-i3T+}r2wX3ivAi_GSppZ^lhN1#71CkuGdG`RQ(p44X&K7_^En#`Dw zwr)ez6ftUIqKr<(YH-cknAfO|!I~!AYUm=60{!9*SJfcoE}Uhn2?bFOk`zoBmXdRB zS^FXF$c<53VyZzmPShe(=<#+Ck}i5n4LM0-e&Nl#fys4{yn(KHU}B3dHdyQ$zFb}` zUA+xFhynvUzzLGT!p?+_L_7qD1fqd~gn*?&f`$fyfP#U9fdCDWP@%v;0}QZG;ZTGN zkR2pcM7LnE3Cm`yrzYdrG*v1n4B*9PI3>{7u0orsq>Xh#R^WA{%UP0VD|6ebkEl($ zG;p_}TVHSFC<6+MHvs@4coAdb z!??~Ien)GRQpNFY8O@H8cR!{z{)MsAPYs?GI};X-5^F^lzNt;#S#yz(wP-zy{L8Jr zckd(WGg>G_Xax-X5wFlQ)0P`T$5RbP5TpZB;#hCXWf@;?AoG@PmaU2l zI`EE0Y+nxnxF4nGm8MyxdO&%Ico14gy;q9JI9_<8ft;|C;(o>>{>2HeSp(_*P#wMj z`&D0{fu^DWWCO_`TG<@$CTS=YZ{>{6GM&9{;H9a?^U0n>XiyGI-uZg>^gDQQDyl1v z7pf&hjS_Ld_rjI}T&@F_129t@cG-RESoqEZoY5L{``EVvoHCm&GRk(7Houc|Q7dEE zsw$n@Rl@csV|0?8zjNhHwv}9g&fDm|mhS2+G?x?^<3aWVsByGaN1*uO*BCpi*2R z^gfp`>qv(Pe}(CWtiajR9^$qcFLucMYBlHIsE%hAX!9F+uIx+maFEW}c>DB0fGFU(cpa`z~T&!f00B z3I4cV$yDAVQ#VanbPzu3Rbah1sE3Mn4wN!LvMM$KkQZZ6%fX{sk46m&HB!uPt!8J3 zz?qjMlbHnA5Nml#iFY_+?C5lm`vZPT(=>x-F=GnqvAB|q!A2ZDndhc2+Ym(TZkov_ z>7%4AY2G!;B;(N736qd_Qv>L)HKw0g(q1r#py~i=ZXNefZku*m@aDbmNvc`qqkBO-j$r z4o$YZznSFHusUu?aivzy2}X^rJ+!8Ak7FIDz&<^>2@PWoHM%VrTpzsCO1tJCM==|_N_)8Pn!64L| zv&r;LY(`i2Z^XqovQlT!*!nW3Qj78j=2nd=uId4Pfy35LTu6xurH6YtK3Q*p%o6su zWX2g*EM8eQT=b%87NhAux_m`*2=hwKDo*PzaKU>BMF(%UJ0le{#L}WSnt=1Uj(gdhbSZNvTs>&ISVg!6>4N5bKhI>4i3}mTKHxAje9}3Zsy$1e@!z#T z!$imaN^uEmi8t$2$gdUw`rgqOCl^OUNHIep2g^%VsC!DGXv8Sa@DOt0sd`=;NoZG^ zc|eUku;vPw$_SARn#eWPf`GLZm|{#vnwcN7?PjZSdBWdseh6^j_%KHSBsF>@p}V$q zgz7{WOAVuLM28nqzMk=wELzr&RGC-Z4CC;rUu(y0*odvAUy*FnJZU|6IpG}$OGt-9m z#&3$O@8)L2nvjMDIM~xI*amJ3 zwXY?UC&w>|CF+s&q;A@8YOT|zre|jEiRHw?7mU315RIUrth3Z~YHVZWH{_AJGaL6> zjOcl&nvoD*;a4#;!*VCsM6|(01Cd-I-MdhwlYIlI|RRK{KCNr{^Wq~`}O%v7k zps>g$93*Tk&eSI)w3Y!(Y3;tqQ;vzIxx38^3nH!U7`^J!rsWms9yLa_IH!`>4Z}Zl zwm(=G;TtrZ7S&xs)5X+`2$^se^6@-TIrke#a*3OK=%F02nbC2o9<^Jya)$z~ed}H@ z-?S+3B}U(gwEBx56oHl6#4n&q<%^A^-Mlc((|e~N{5r; ze~T-EHo310V?@H=$A|zyz;uorNuW3Tet~k%yfXPaQJ94I^wNnUE@utDZ`vrd3c>r7 zdOc|a5W-Tf5xIyQ0fF;vqqBZn?H5TohbR>@)ql?oQA*3jUWm}jIV+o;$_WKHP^tN0KGeRzjcQ<4DM^qEZ zqB9NnS@L|R+@~Mcm^q*e5qiba#*loJ%8xC1I3M^M;T2h&2aKoE;_K+h{W4iBltk|Y zXXnzcNaI-zGv7mO$~R&pp*~p?5vsWOnfQUU4&qeb)O8)~1qL^kA*dWM# zR|H_sVVvmsEO0ID$LH9%QjW4BW1I;RZZ^G_NR#l3jn%VDm&2976KKvn3SHQ-dAHv! z)eN*`b3%eA;3?!n!g=Hcsw!JS`6L!=+Y`39_YS8SE8{y#!U_gI)?mQI0KI;i-^H4J z&4fhf`UQ{Kv*0Cc%hH~yprC0hN;3e>??qBCcz3xXxb{NJu(A8Kw4NIMKaok6WQ}`( zVg(EA38o0%BcGXDkduPp9&skVfuXe1Dnd{gDY`L;HXr&v_VM1nDm6490!dbkXsg6* zb|ukJWA^Vq-(7^jDLJ$&6}f~E=K45k7>>q}PKPn~1gbbp4GU_scLf18N`utkxqg6w;M`k$|chOQK%1+a@(OP0*lR@$h)ntn%xB| zta@(}E;{Qem@a={zvrDZfUhcc2Z*wbiMzn>QHjY`4-M6WoJDPHtK8xZeXC%&ZCiah zhy3%{P^p~vH&O>Kp*YV#sU7U^>$yTg66nA(u7lR}Z;j8y5)q|KBXh6YlL-M>MRZY-1 zKayE1FUzWLL?LB9cTpN&MA))e(iotkx+lE%IK(w4*BfHxE%-;`pPSiC94rP`s%PNv z!iJPkhaK60x(leUD?E9#PZvj?ws*l@Yd>0)-+sX`^{K@J+3I+;mDtN76?BJ4C|nQ`=LH40}Fjo zoz)|ABqSI`ZoGzWs)$zl@~1GkEV{qN)K3kB+iTg7J5X^KYE!Q}-)_%>@WbB%*&oc9 z1pt@oy<@)<yCJBZp&QByu0HnRFas|2n;D&oFTd5c^Xt-I^2Q zvy5ITTl~abk*y`ihy$x~VOjnQmgBc21@6R=HA*hEzEoOciOx;5ym*H)ZjJY2i+sW% z^B>FvroMR&rW_ZSAN!;;cNu=s9GUYE%hK70sJYnLL*LrNm3km}HtaP;?d*~RsgT*>HBDAt5;2CLn^ z5A?y=%MyMii5#iCOm0ZFMgc4Xta9|OE3YbVxL4raINT|VvNa2PGU#b)?kTe-y=s7z6{w1noOaFE9F{-P#W&ysc}36H|uGrfZzeXim0Gk8P_Kc9<`u zi}r(GB50?JaiMn2rm?9Tc`TVDJKvBWJW(~bj;hp>W4afR*5*SA`0 zzRgC&&~I9D!FX06*P*%{Y@eVMu9G0E-w!kWUW7FFMQa5qi|_+RLc>8^vD*=gb225C zj)X52ju((hq6DE&g7*F%@^BVB6|&=0|5C zF14Qsvj4{MNYp`RHU89(A_1$<_VgEnkvI`~>yXdB%sU8XTC+Qa0V_SE;bKH&o^F!K z5=TH7;rrqN62{bL&#)kvaXEP6N?13OidkKP)@x(c1!t7T`kh~#uq0Mcle^5}Y>u#x zQ|2$n7KHxYWf=gIKB&#SDlu@Gos9o`>f0OhYdORlJf;6EMTRLq_E@7>Wo2J%v3In| zM%S~GAUa+!uZ{YlWOInU!w(E(I(t#?)^V8`ZNXaB^}z+&QIh)KG*4Xo5czB5+Jwc4 zkc>MWD z(uRaoWPzq%_bragwLh0drr1dtd=VIO}WX?M#^PfPc8D6n_d-HyrG5-SohEDn46twdwbl95MR2AJC+jS^wPSoFe_ZXeLi zJ468P7P_>bMC?@m>`B0Y6PM=MTfUekW`e!h&;#ir~nrkS?f(@3HlrP>gYfYjY$+7+s)TF}sFRb?h9J=917d#8`Z_>uu!9dM30~>IFfInIl@ULsN3zv@36XDxa*AvWo2oB7@V7q`-`)JzXglX82dH11sj!%)Fh@&ApG%^%56&s{K#qhQYkiTX^ zIQ}(;`#qnMYJm21X+O5K#8U)aSeTTg~#7m>T5MuVC6Z9V+ut zOscTyYPUowi>5?jty4OPv^?2eio<&+kC`eo5QoYb*zx3rQ2Y7!UKf4=ViJ$BK!hCL za#7WYHL|C>Q+*2k* zKOGA}N$Ps_>Pd5S>GSp(Iuw^$uCUVS4lDGa%kv4ECk8LbM(N?Gk%835Pj|2v;=61& zQ!Sw)|8Q~!>Kj4JzRlz)HLp?C(MRyygk?(cS<)QE-vQ5K^*Cyw>5sx4x<^JSJX7_J zSxPYcRo)gxrh;ROAKodlQ{mNJ`_-Sac(!;h)}})BcM}=R)ixfj#)DKW_|;KrT&Ghr z@j_I5jZyuSOTqv$)>IKdUHKfaNvO-=;c+vGbDGMprFGAe_7g64eeAuSZER-(b6(9d z2McGIv);w|C|*v;tMY$0-?P7e`Ng4%0jYoh0ITP@J6CQXYB4_XsjLO`&rS4vcA@0J zeD*|b|G?%Yl*0V9g0*s;F17M?b<5@`y)zdl^7 z)WI-s!ei{JD_1z4O0lb$M%i*cABhzKf|1V$qh&}W2-NW)NvIU_JdRJ?eDknJ6iQ8C z8u>_>-~WElUv$?$6?exMOE(^RklH%v?yTe$laQWeWyScR)3Djw8`Q^u(+HHTTgW-d z)y^0sAGI=L(Ou>Eh--1Misef9-0UFktmS1diE1;1Hgul9a!)3iawXBkq&E+{_%u~X z>;Be)DZ5bd>EzS>yC$Vdt!jQ@lT)K!F#sG-to$|Z*eJI=9$4*n`20U;G5;@7oi{X5 zxYY6J>tp_u3U$e)3Y6gBa%PT8NGDqmqj)7N`y`WeP~&(30xT#fhXrw>@ z1q>vB3$%v{^oJU##|&%mc1F_zRW4_%uAby~WMnV5rR3JbSDmD!=dnc;r;ZaD2b?L? zx`PJrjZTS$H1ubO7?#4|(f-zo}#1EN{zwNEYR&4XhJFNp#GukiaYm zAs0wAjAsx+-$f~|YQ>6ue()R8jv6|8a-L1s zBQwtXXA8eq#m)&0yV`}5ODoRQ)j_r=M>{s_JJ$Y#=Rywv9cuZQHhO+qP}nwr$VebLTrb zH#zmIR#HDYo$jn&UG=`t%(FX1(Pp^4dy&};Yp0_6@7}x;4`=)H{dpYC+NJ8nNGVZR zsi2ZT7wz|NCzpB6S@@lV!NM4V>cz*pNon7mea4m>w_nS+HLH2(4heUPe*o7anw*jU zD`ThMO1A@oaeN&Lj?9Tg{o@lv$?$(*Kw#| zc^$3h!+|A?uZ~WQ2kp*#-D{fz5%%FRkcAx(l@}SE)|k|RZJv>G z{kb`$G6TfJShMcVK?}UGaqI@DKh&h%njs#~84UcAURYe)LY`0h(mIk+GwO1>2CORk zR~Yj?nTMcgQL>P62`>D5my-Xeu-yPX_jhF7Q&7)|%!;cD%9S{7{L+nxs$P)*SvBGL z?MBr>nL-Tc>`x8)SymGtPCoA)U8gNZP@e2c^}iA29zveg_+(x{Z@rNQl6ap~-SoyX~Am~zbcyqYM^C~$be@q6sU zi^o-Y4i2^>M7oEpgnlrw9`KO(T1z6$CWEJ~lQv(59rMu(G}hwU4bvJRYJGD6qGGQT znU)g()Fcx$%a=#@d^l94&2jwNZt?pPUFG%hg+AfO79CSaH!6KVx>OybevCEQ+FxK-gVl2QzZ~4f9uf$)#?|+ zUJObX{LA(cKVTsdtu_iat=YZ|2Hm=z2 zZKsaR0P~cl(uvXT(;c0_48Ob(Geke+w=K2-{1Ypxo^LbVA`1tcv1wdGRZQK9;p>nshs6>vl5v}~6&F6;h?+?C^FMvOQ7XTH~G8i-wK(TT@ zFuQOkh%CB=nFJwinuj&%po%x?VdYBE14%LGqtSq4G@WL$@kEm#tfznlF%DTV#fn71CubF%>Oz zR&z>P5--H(sQ4|h8jS5YQvQGMM^3%WhmILz-8s~Tjw&R8R88vEH4~~CGh8lDAr7zeCU>7xV_Kuvdz`;G7$3wl>q1nyi(fXRc*=+!YO+cmk{4 zA6$U=mFh%BeasI5-X4l&G~$`iDI<;Wa2yauTJnB$>Nh(Ve*Lo5bSc_Aa%ZIf9l8uq z0OC_gcokz$2*E*;HSn+-R($&W!j*UE-sc!TF>L;jF3I-Q*}g5E-NjC%4dwdc14jc; z_D6EWo_VNdj5zSjIRy;oCm8=Dlp-KXEY2rLS)K8n9usr5b_}Crk!}tgp`HNIEG8;j zIJw(R-0z=;Fo1@cz~M;}VQqU=eJDLVxx;!i0O>ZHu6ZHm)ONu|~K-7~@-KohQu>_NL zec2gAV58srJCns-F5$%ant{S^Q`A8iXeNr>N8Nh6)8+#4NsUgcGK*1fou?%&dU z%qi88HtjoQ3ET};R6qL7@Dl4nbP-qyrLd1EkOeDsQGY|sa%N^#^x+|A6Q%5Gg^mHz zU;h0Ke^l-XM*41h04Sq$R55@vYd8)spp1UL*FL{glQN4oX~!YBIM3b#!?MBk7C^UsMv}a~8f%GS=}vhS&|gB+{{(6{fQm{A0|?9S#HJ)5J=B8Fghls}Odadl zyI=U36+V72->}&C#nBNV{zIAF{;gj)P4~8eM_8_HI9`;~L60}^KbXUR?!Lr~LO^jb z;q?FfeU5!`S9+^~-P0et<$}}*^!m0CedM~~>&%W=Ld|$!%UfbRFj+WN`P9$}Y zlfNh0?Y*{~xv#bPzF_f+FgXk=F!ED$HDoi_J!sBioham{Ijx@jo5ZVCz0dnb`nfMz z<9ynr_6{e#EO#kk-#px05azZp(ZJ|367&CStYN^vq3S0u?!0Xv(|bhCC7dqfI3a@@ z(T$`#=!8RhWLpG#TR!s^VbifGd#i3h-DRkNfm*u`KdY%7hM&!PL!p61?JLAvm8TDc z=`_*!9Z`bfk4^ToJp2dJ7zRYid;)vaG(B+Ul3TT}DIlAW;L~N$Lga~WQR&uK)ji^? zoadY{$wJc3S-t9B4yqk0I($@31yw?2zF64}Hv~?@YC^L4P^Sg!2xUrULa}ps?oeqk zRx_GrUY(zo=hMPqklxzTT_TX{lJj^KL^CW2!vPnRD8V&RQc{9zQOfax zobuL80#NzTTuiErkE#Qgw!(W%iccu#kO}H>Q<^~}g%=Fwxaf!(B|REvoKWBHYE+Ns zYQeAN-tie>WFgF-&|R=?o_HhGTgN8!C7GA(AtIkW1?paZI>0HEgBK?)vyF@#I7vfq z8a)|w_;-*v&Fk^)OM?INZ!tdagpvnM5DM^GQXjkAB(g8j=Lw$fU@o64K3r0#%LGiKR|W>xzm^)Y`MuTsUo88Sctsizil5UQKTA@3goj z$t9GHC6vvjQjs(;Gkcq)#z?j8D8kjS<4aOWqyMJ_#AARn0j9a@1LOr9XA3Aezh~JeH6cb#@URCK8Hyyze|*X>LRr?z31@=M@;Q?DMmb*oCYhFB}7_ zxY^F{QGRbJ8$3(o^93By{WrqlLlF!UktLu6F`|kIk>Ets!HJ3G$$WzdkEZWHJN6@K z__xPF-)QIv$W!q?#XAr>{{*GJ1D{5!dUm5E;|763IX9q3JI`}4O2ktO3NSeekQ|Q$ zc(>!>(t0(msK&x>qLo}qhgQ1Y?VC$WM@Ly227-01HsZobVPK>K0-JMU#h(`4Xj7kI z1a!3ttW37~dUzBlD9Fz%Z%P^Ibm0OldFufbDO9ym`7c$7YM}^JDBH?w4Wdv??bt6o z{ZE)Fxp*9d(y8_F?N>iKh@9XLZP+@g?{5}W$11Nw%T?Hye$Qz?OU=7?U zGuy|MPPsb8QT_e-WJ|X7CDg8Dl_faDU%i#);K~@6j;w_l!DZvEzp(I1~N$)n@DHV93n&rZOuHl7! zfDF@xS;=fFHGq}w2{Sd{lVFEF(a#dIK2H_AdWP~K^pVCYdjzPd?z`I~8MGf|0u0UJK{ zyX@QVqab<>7+c!Yk*Kn06)e*PH1@0tJUqiWkn4A)Naa?tK=~maYkOMYgQ#F>cg9wiI@2T$hJ77cvZa z&OG?TeIN0MC91fgtR(N&xqkx*b-aK{qW1R+b17#XlYsldnxiNjtAh4JC`p`LeDYAwX!LBNJRI3lKlV>~lJ z1g{L*Al4xZQ>U7?n&1|FX6tf>hp^86E*r7;uX5TQ7(jeFJ_>=iwQJYjAb@)@*l9W_ zl%l;g6}aTc)5%A2V-|P=X=e^R@oej;rkw8{ZLT|3Z6#RZ+$j;mDW72y)kIEvNl6ypr6hUA=(pX2IXqo?=fTMC0G)%)T=tBk~`nY0!Bo4Jh|Sas~G?WExa~bbf)tdIU=M9+phIr*uUTIKkYt zX=*C)UGM7#rbJb3HR)&=fzL8DAk{kpm2_rYkQRGX`W{l9ow9!w zuKJQ*u2k?yz`Djul@stv0(sK1&*?f}9d{2Kt7 zxli->Z~8-22-iI0XkK)X#i1=X%MXPO9|Gomq>vHz8MkY-vn5kn0fda&4<_GbH;NeJ zupz_Kk50Ue`lW|zab>*Z@2{ITL-1<0;yP$c{ znndU3bw{HyGxyADMGQs+$WfC#yiBV%5z&}SVtTze7vJ0=7hN?r3u+Y2fLLJ26LE$D zSzA>!r3TF1(}IuHHQ4B%sa=;kqJ7YH5RuY$$LE*!iisBqt(ugc zpf-KwD%W9YPUYzsCx0?x=2BARA^kw+;EL0V{MFR+Lbpx42R@ra)+hf4zFQ%WSg0vO z7);N=LCet;hxH_^^mtzz04!rsBmJ}Pk2Nk~QM^ainDg#crC0Y43#^=Jw>J*-VIwou zb;b{N1CZ3F9yst^Hm4{RBxAs0GqL8hab|R-zEU6V&G>Y;$YQN1r`$6pqBm^YhIOZV zlg3j{pj)Kyop2Tb8uKz$3X`(9&VxLzWFjC>q(>lV#nMQ>P)6{VQC0T}WtxMv$C5`O z=0St`3}vcc)PnIgnUA1+Pac=<~_+9V66lC`gEuXims>W zi^gS3)R2h%Czc+1RK8d37cG->#Ma{gi(OV^g4F41?$+T#;4_0^n>tgweHBD>6 z4Fp|3LG|-^z}3roRCrDT4k-{>_!Q3l0TNfvS>4vnNwxqt!^4?RAp|K5{57ie06JlAfNLnqKb@nl)A+lp)R=6mWL@Cgm-0Owz;h&mhtr zU|g*^m+3!>z~EwIUvYW(sD5R>YWskacQy3sx5Fkj%nNBwwO~!wE9P6{8ylcoAcK7qkIn5uWMk3ps7%*-j2A$) zjt<~SV?p*zPkkBw6Dnjo-_%=(!BdjoAmrA_5CMyO$i=BUJKm+7b`ZIGR=!e^2C4vi z17ep{SLx$vMO+iKT6IH*!?ME2wB>T#j??Q=Z%{{D#DZKw0(U@*09;Ug%tyW0AoBCo z74Rqw8;1d~8LaLCKu)wi{`!eVUkOlE(K z4{4!OT`v|y1L^o*{9Iky;Pb6x`3UnMppgmLBB{=^Hb(5Ljl#Rx#DYvE3IJ=_gPWQY zwq^L=Kub96xf$imwA2E~Zl;*RtH6_2h}`W@AR|o!08oUVq{Zxk_RGSrKR}+Zbx2_Y zR|Cx99E1EPf=2jX5wr*~0Gp!j{XA(B>+VLIRMhyAy;+H zh$Be?CEJ9FgY=4&I_(0Srr<9Z#6Q_mbQ z19B@M;7p7vON92%j)Z*;|G*_*Fe3dMFUlozOqIq0vb&0;^WdbrMPjfk=8L(RM(d8* z=AwpKJ_=Xk4baIqsIdbUj1-SfNI*nPfXs4MO|pt+(agw9kxy$hjQ-SkSb0mX-BYzvHxd5Z7@0kwrp=GTmwzWhKO+mm})T%!gapM=m@*5u0PN^JQIuX4zWZ7Pb|>%<4jy5 z6oh!EZYuJ6Wjih<9$V!@0@cqblGBPv7?FmZ)(_~P*c;%YK9l#vA(p|JBO45VbV#%h7~4GGmTk9;`Q|-D1WOBbUocC1 z;!u)6Vuq#enmop#LEh+U0`1bonk?&!+ufIp`x)r+<#D{PbthUn@&i7nmff-P^R{*g zA0hlE2SUpiCfC^vCi1M+Eh(bxE+zspyix!`gfcxgR@Ke7+KWB1r_!3>h2&E#r%CDI}xdku4iMZMn~vdl>juqyQMh z$lCM|F6kisJxB0)Zw}@XIXYK5Q89RCA$L~d+VTkG6?_#|8p5^p0Cc|)_&61bq9OyF z;k-Xw+@ZJ5K0+4Wc|S@}&QL6H(pnkb(5{&LG6>{GXxTs-nS&K$R{DFve<2-EIBGx% z(8fX>f~zp`0>=y}0v^sDJH;omLE(IUTtL5RTqHwc$|D`8T)hytx>0UBPkI(R-D#gf zKjj2x^PQ8@x|&JB-R4+R<pUI(#8LOez=YENt&9m+_1BP(_YOLH{$(1L z6J!}cbK00nxqmX2i+@Dw0G{{W@Y)nCD9@*?e_XO8tQXA}H#!JSKme z)VM4;aT(45ix}P!{?}H`9|RK+0AO*5KwJZW05R>9z{F_urDeYiybUN1C=f{H4`}J+ zawb*MVe(-WD`htZ?Q10|6s(J5?zVn|W+ZQerp$B_d4h<_MZABbKW#xl*})ZPUefo1 zz1G6CKDlu$YcW%0qn72M`IA7Yw2GYNgu6^~&ZL@!i;C2rlmt}?=FlmBX1P#??wSk? zc{0gTiI7V^;WNu~?H5_JI2g|i1|+8O?s+4VKE!v_VH-%pO^qCZPjmG|t3>cc;aKBJ z&u-TP#4u3<1$CBKgN3?$8EUe+W-yb_Li$1`x<LE=QSP)Y=+ zV^lN+IPGDRu5dF4XFO5Jr7HbDY?3LGQ=hyVo9@Io`A zphO5cfpdM!1&p1Lo_q3d13@W)^?VMfXZ>@)#h@5v5CE3_-|&wI6k8tv13!Vhfd7kl zpd;WXtuiUH_y>gL46vtwTe-|wJBF;ts#_q_IMy@&3<8^Wo;$VJ83n!89{V+08*n2T z(-B(hT>1gbC~z7G0svSs)FQ7O14{upg`P(7vk6xM2K}EtgdsJcWnLk)!Pib5zli~P|!WTg(^B`9kh07E{ z+^o2XUk)Kk__~%pApbfRIe*V6=+2@qgh3P)E1$wal&CDCT}W71Lcn5bptQ~+0P4I6V#8VZWM#p7f(P46I8nht_&WT}w z$!J10${vzzfRO`Zi~-`GyoNIT^wH8Hx0dbo5V1Q*)INfW7@29Ra5S@tZS;^@cR#@0 zvcCK%$0~+4agg&Ndg%dHuK|2<7$WdqJ@_qx5zWCCVpX}TJpG(KWD^6#);P}DI8K)I zAo@Dc(EA7(<7_{jDq)CzyuNMqAm#A{Qz|2rMy*|)AMYlN2e5qeiT z(2_Y$uC6_uq;>%7eKc@l6w+3HDt?>&gwj-8UQSkq1fCUa8lmY!q-bgNA?(XB;#9#R zf<(2y>M`&&*ilA;5H0^#5>bHuAEa`whWF(r71jus6*aA8rIRWNycW=pps55Q>a$6C zlS-)#_aK2FU^hcah8Rj%7vYUj`}Xwu`U{@S%E?i0hJ2|uI@1u zC@0{T)ep|1-aO{fOq#*h_R+J4Y2U+xFv9)P$0M~7lRc>I z#N|;3=v#s{Ov_2AOw`f>Y0srv0~7QF05h4t~5}Rz=X$=_WdIh zC#6Gvt^KiqQ7IS%0g-Ux4@CsR`%GzAIeChz9*asktxH=k8mH*KN^?Ag(|nfbXBICT zEpirH$}TpyN?Rn|&a-?iQe7{!yVR4VzIHUHCskp!6VyMd|5OV+!-Y1WI?H5dj!*Jw z$}IQ9p-HVd$++JLcJCL2wTmOa+-1Uec*nc1-6P29tWCQd@T|zu7MZn+LDpKRZ-9q< zZN5ZF^>+RlI>&^y)(3XLMbRReZ)pkmUC{5K*95(mO_jQAG_!SGXR`lZW2#5;YK!Dv ztwm1hM?#b<^>pVcvpSp+WXBMdCg4OCTqCKb;4vhWTm~X*Qm=z zyX*y)*+rv;&ef)wdD4l4lDBZGtCG9T;gO31RtTAsLZG~BtE)o1{B>fy1U{ zYpV*^iB`>3lZ%g@+sNIPX_~JHPz*-ycR-80jFUvN=c$YKc!K7baIF>Y5`)iEN!mqr z7Zvtc+;@f5uicOCpUHOLUB0bT!L*0MCg&QpPU|f<_Xd;f^Tj{>k63LEXxxtYrB;4i zwQ)Fag7haE8jRAXqT-WN6YDD&iyw#>Fnp=6;tFm+Bi~W2gZu zS=f!(H|Anm{L6T;1AKIcDBDH^L;Iws1hs={yDzl0hnx0vu~}T~wa+y8N0M>eJ{Kmr zzSnMgkIy?ndj})vyzkF0cX-eF;PlgD+32TcW#GK;B>$~{TZYdyUEP-#ZPvEaV;oU- z4IOK*{}|w(n({cK^8Q}y>>X0oX0@N%bey*Qy*AV9%;@U-{Cw8)^-esyCz0EGCAoV< z{rB7V*Xi~ByH%%q{EdnY(|1T%8xz-F8r6Q<_3wqIHo2=+?E_cO6P|^iWzE&@C!w-~ zk-w^g(f0Q*EcR2ao5vmN{Cs<)o6ls92kh=4EwkH*Oh#M0lY=AO?A&(y?8w7rP6zYs zBP%@L4Li?_#`f9lcSKWr)KB+hbd&qM(LLJkSH_$68yDYDFWxI&TiH;I2Q;2@LD?Lh z_v(@zyyu-6M@HVn_w_{^&-?R4nO)uq-Ja)K&IhFIF{|&X0{fZ5?hB(_ULg1$pUht*Rq_qn>yD_VIeat>b#L_GZG4b7~1b&-a{; z|FKf-W5VYFjrhJdS^!`0pF0Hl0aopdkvmMvTt>FU$e>a8cAAwF`t4v+_K4AK;Iv2L zPxpj^``pR?@gJGqK@+&4B%DxkPVj$D`DOPRcel|`-EKO!F+2wt;`t!gad)=tS)Fvb zPIhf4yR|VWowTus6uDm*B=Jk{(%LVIq#GOvkCRPjKE~ zPBv?&Xx^t}wSmVwkDIkK%t&Awj^w zAVWp+1Q-yYK!Ab-;t;<)VtIR>;1@@GA`MCr1m}T93ej? z3l<@)2)8rV@`n@EXSD2-D?yp^RiT)!sfy~j1`eu03I-;OL?d5jxI%i6-a}P9TuL;% z>rVa&4v944X`br z)kW5N7a76LlA9#dq~yCODk4X&F%gNR7MUg!?~OPaqwEm)OV(%IhDnuCEyCIJPMTjH zc|wnP-Kj+-@P9@A0%L8^vK8HqB|53Ys&)BwEOIO&Q=9>47wlmu%4SJ)=r2efC&6|N zyCCGLrtDE*fEU!cS^-R_Yth1IMSw^N6dr-SW&_RuhhZ@T?C)h(_Ku-WL4Pll2d$SB z*!n*a25W%pb@7jIjF!|GYT^L0rErN^A_W+>tnKUd)j2&Hlm&6LmQbtuMd4yD`hz$( z{9gLN6O^apTO+1=CFVeIp%;=8CNHBga~ZW6lkg&O1a8b%$TTg#yfFm&tea+*jTt zE0aV*=hqth(Xexz)OmKin#+*aOa?%f^YSeZ-Uy-R{VZzHi9czY zwJf@StYG_EBU%*6Aa8t@oB)iuh{-26ZyB~PcaW7!~;3JasZotxRro#V^4;_3Oxm)dTET^D;Q9KJfA zu&c}jAD!35#H!u0Wo+)H`7ciT(H+bs`+@39SnNf=Mnk|Gm(r)}eCI=z)jG3|3+y`H zy*JtFP=*rEBk|>YBagK6sl0Z{U1i-m-6%ZKO1J8$<@0PoHXpa)2EN~k-v2Q~0k6Kz zy&!~?f<`Tiri=)&X^Akm`|VR8A60h|#)gO^+(HZH1{&y0EM=P>BjX#vxF?8$ zdQ$Ht6c=g&G2Ty%cIsMZay4a%SWh?L^(A=BCgkG*hpHXYiNh(zf02o{5FAyCvsKV> z&|Pse*hf=RSGRnTj++~)m_{&3#{-##%gmK;PPMS*ee-%&y)E(G*KySgk^NBrgX{Cb zDtNrp_oz9jE04{H%wRU}C6vr?)#f?2Z~^?~T?UtNRjHSgOZTKz6TDHW)3KG_)_{|g z^p#1g#_OwaH5F$v-|?lu=WtYyLfJK*Im}BMYvH19Zw9k&xf714ttY@?Z*VL`U2jl~ zC$?+I_Q)A0+~w_+#!(fh{ub}qSR~mZ2Pni>0yxyY35|@bb#q&0Q_B8|2RLpP`+Bx> zjy`E8P-TC%S%9oto+UFGWftmZRMpWEqI%*FT*CA z)wjWjUh2DEjNbLyAa1vMeds6fi9sU7&4#_ae%H!=m?m(4&FkwbD;u z{4(sP>v%^`Vo}d0gZBGGXQ8E%4#17o)Rr;Kxnr#s`DKn(mJY!1?RkI;sAwaG`ZUD~ za^dOHrx5EY@|n!vHAes|#<^VKf3dME>TBYFUq^1W%M3!#z7_I9P413lNAbZ$oG-=Ue4$0!og~*t_r% z0yM_j!h5i6|5S{$UouXwHN@r=qu6M=6^;LWCF57GF0+wFuMiYnTfUKkTZKQ+*zhhU ztZf_-qf!()yzFeQDN89{5}MH5;UX7%%?i{!z1*XNu(8d)+FYm#rm*Dnvmh$+~|y|B=fSoQG5^? zr~M#UM+<`&7L8?+9UF2Me{7^jSOw|o-JpCC989mF(qt_8;Co8{6oL`DvD(gCaWSvY zi*}VNdKph@6c`|MCsm=OsNuvXPOb|Q;RoqENv&Dp8~zGVnU9vH(-E5yC(r>`ntOO8 zm)?o6GL10M<@y*n=kmOC_D1dF# ztS_%`P-Cq{x)v}d6CZ&j}Lxskv8LC{{}9S!nf zjgoUU)>k*_mMxie=31CqKys<(g$a~d9}ZTvAeh;QI+XKJ;g;{4)k^r=A*v?3029Ea}JHd1L$w^#kVB`eZOt9@?x(Vjith05r9v*1pLtW zOtOwB#ii}63gy9?Et`3^yJNp2FGjmGepG077l{KGF-vo(S}KA_wIb@Ql>wLLN4X}> z4lSavXxYS8Zb^C&$`TEgz?sfaRL)WIBehLI%nQ$mNK6)?}2e&;BxtHJ55Ycd< zGU=!fEb4VtrS&QqNfF@Bxrne?fc4bwXc^~u6jpQMDH<|x=HoGJT@jg&iKl6EjF%J5 zm2}%r6_p`5&Qj!}sHsqA>Cn3bQ&*mHqXq1<1Jg=R?*pYhL|yL%J$3?)ZQM@9GDq?F zgYN6aTW9Vmr+i}-8?m(&??|E6z3 z6VW3h<&-zVl(!1n3i%5{kSPfsP~~KcI=0V9TE5L3!QVy-qumC#JMCp{!JOV?tA+yq zauDWRzBde3n774^K$QC|)(^NM?$Wo+9VtYJ9%K$Mq?=u^&=Z@9t=iI^I_B3g>0xNB z{YP;9*)NI%h2r#+MA{4w(?oS`WZ1R1;olja^;IC$Hyiv7Ibom>GKK(XtG^5ZhBXZG zXVJXcRFL0j@lY-hxIf{UdJ1j}T?qG9SZF%(-*#9FN{zYksj;9IW0+k99t&Lef*t4kM2hmw5Q;7aaVZB@{=PuvKm$jA4VypHLfTX6(S3IPhbKIz zB9=Yf_@=M6QR2R|g?uV8-QpydI_L#&tmaJrbyHpA=E6eNKU+J3ZayfA6U7fy*X2`y zg`I-1npFKG|nOsVZi&9*d>&(wvqlKCB7G#HV z7-tAWy+IzgZ3eyW%5#YHe_21w+Ckh(yVhmA2Sm=tJ86Wb^Otr7h6@gOg0x)uqfn}s zmy4u_^~<$X0nm?2dFG0b`)-RiPPWqnx;J$tth ze@2h69-}Dti6%BRAlmn-%NGBv?unD!oboIcga&B{Gp{Z`h(X)04~viI;(KEug#ldW~hDpO;6YN2Xxkpa{C)JbtxLB zqFBN+ncM3?1wxSZ4=QP&uXOKu;itk+Biw(TZ^8fVd@uiY$U)Wu6Z$~`;!*E8KmqVc zKDQYFFiOi#{bBzr1peQ`|8l7Rle7Jw{Qq-T{;T=F`7gKSe|Rj{o&c8SDCjcviy3f7 zy-f4#D1K}qKe$xwm`RzL-&BxPc8CZJETp>_7vfu5somqq?Txlr5V_H}*5LTJ$&-1H zd5ic(XYrxlU`A4_blzT=2du*2%7E&CMu2>+SX$9Ww-iTWpD!=%3v9LR^RI%ZnH+_$ zkZ#sFnip@{VjD%(1>2M9;^{26#PbGXcphCVLAj^6y;>VvyiY^7PxnLcee*fJGeaqbz=JAwk))jnKuQz^2}d1W3x3?y&`Dss{x!|>l2wnwLrxa|Mp;)6xR zP@i$YW6M>O-)$KHgXZotQ5bcPn7&`I-Z)|3IAQucu9#<^FxNO^n(lYH_KvLD{)P-$ z=bqi}yyPBzkD7GfW;w0e*iCs2>g}TG?LFBnQ!8GLIXIejJzU zKAVRo3I;lwteAhDa+p=_ksewjo7i=SE$~WjuDr%~6x|Ruh%R%rim;7#IUJ(V3&}08 z(zEh}fL2bSr=%6683EmF%CLv^OuJ7++!);WkiV28RZI}9xD!{_M+)OA`Y4xB6$4f9 z!vRUwDbcLvKNOiss927ol{^W`wN2#wgL!kv2mbrUw|7*(A2a^z zIYk2?f<`0(fP_kj9VoK%-XDe!Cjp4?FbLRmA0UpmD|!BtY&`zJfaHbKCPBW`;atDw zL-64aT&BdUYkbt1 zdCu-jO{y5R4;tKs!p(AlYy5Q9?l&>y_;ym_!o3KXFZkKZGXq@NA7$bSG}#Uoppf*$ z2r>8)d~N|Uj%A3z~jiC!hTlbT&c0WVC+6geyIYkQ=r1J|>X4l*sJq<3>IZ;aNW2o!uas+I6Sq$)`e0Z9=7i9ltbL~v|nR2+W+ z^L(-BX;s(iYROZKr1;kZz3)h~Z*Ku}*fY)Mz32QP$ z3BM&VF&so(-_o=;6U?=ks8RaAi*v6roa31$F61Fvz87geBzGBaQVp0E$7BPE(b}p= znbT*G;S4Q-Y6zL^E0z7?lExwf0DyA7tdZ%D5fXRk=_)AWacF9mO==z<1a=BM}cHey)|Y4Bd_L)xxo z^!Ts!VI9}9W?aZ_&*d1erQ#9jVZvD0!U@y}t8t;r(>jndM=6&Vv!c{G;T{I6so98K zKyFR7zoSWUr7j7ftcj@_DLD-k)=?=9RO%?#kgLHi8#rB!v#r%JH4UWesH!G0ngyzq z&|fF%3#z_S8uV)F*nbseot4O2mU23kaIe}!3=P)NxGJ2^Ph@~^RBOHqmNm;>LiuXN zs2xpe>98syo*igAuVka{%Ydwk&>YLCr!1ZS8a~9bIkkvjId-(nl(kJR6Wn^Te~UshGg#7mufB0#&K`;;M|PD zuz5P-(Wc8PXC^dOsP$qaR>7azS>UaBUTY$iq3F&pXt5{Ds~?XF+gLoX`fEeGCGlxn zc78LAbCpQJA~jV#_^Q1G7{XOcIB7nfgAxNNY|`KV zS3C|nDEP~PApk4D2o*sH4MB(pDG8l7)&!0KD^IAeUk!$CU*`%ljrkk;9&6)BoOZpKuc}y4K$$5bU@v58}}ZfhY@I2{1=RG$=(&k_#Jch)!^} zEs6=VtQAu;6sMQ7P2x6BYyoI;pL0Fd4njwCqM-&cy>e;+Ee&ADoIyr$t~IfVc1!pq z_QRDA*MMWDiM-mO)4V)dQBSS$~5MUtYS? zZH2fUUes7ZP0W!R%oSw<|4(j(laTo-R551fD<%LfZ~;BwI=np8UJ58^nGD*J7nJG1 z=QI~lmJ~gkw15B-oBLG))#;5df(LLMlUM!f4(*RO(&DXsGH5oOs-3EEj_gSbCe?#J z4AUbvqso~-{B2!~v<1;%jWYIpcYML&mq<+&>bpU4y97i$tbyRMINV-&LUJ|Zr5RSM zGY{%pB#Rt)kEiqOqOJWAW0qJbN7{b=I*%pG!0SL(oH5bDhcX1V{)1$388R8%OLo=mqCHyjYDe^N>N7S-o`NQOcg#iRQxVMH(+2g&|`e2F&$ zu>x@rvj0t$t=F#Or09NngRDnMv%rdYJRX7Rj#KO{g56uN9i7%QwpZe8hQ+eoa$){07*Fjt48AUI%DiHMB;Wc0BiLVQos?1-a&Z8+-}1l=^m<5FxE_I}7bFsRo>QmL3W=cP zpWC1Ne*j)Up}*%i<%}T*&lNusjd^rRl%-F7+x%JEQLK^1x`!KR+c_tD6KUN30E7qc zTKsVY+WSWUzQjg|4$}})sQ2#=Re}VoRoCZCMfahk4ezeeXu|_4veHL>H!UQ&6fR5% zwU61dYqDAD6qy=pQ?|o?MT+`eLJ8>J;lTjq%y~d7B7g*D|0sc(uQJO3eT_2WQA%&1 ztr!Ec=&Z+s)0|L>~u%vb@)e|-}bGusuyVBdh45C0pB_4}uLMqf&6fl3ELP0KY2 zRvfr8jXi^H*vWje|Gv{+pqvRk6JhGx*hdU(9swNG__xJVRl*n3g2`M)RZBk)UTWkd zYE}dw3jLaooKOiiSfn$Aizpu^Ad;VUPRbrP<*QU92GP zc@YBVC4kTRG9)WnOc5()%!n1yMZ-nDt2nVJtIH(dc}qfa^^6-S10v6GBg&cE)|eX3 z-5rCZ3)qS=yJ7~ZfjZj4<)rbetlBu78N#OCTHqTB1FEOPFke9vLKHrhsX&>zwUX>P z4rf)+8Rk)`8so-#?4?YwzsyMV7UU97q$y1|rn-H@&+w{#s5L5*S`1bZhZM#gN11e1 z48nqN;3v$AuhnSA#!x zTjG9^3@k3Vd0HktGWaw{c+9gZ!Colk{F}sM^d39g9Kg+r{|l##v+fvHaBlnR)*zWX z2bew5vV%a3i&-1>&z)`9BOVy@a1NGFU3I}}*!oyEwqI5;+^853?UQ@W`jN*ETF{Xw zWJefD?Ce3F=S{j`Z&EU)EvVnBqA$P^1F?g$rk!B=gwcYO6blAYt?=x!>VY%%yjB`q zgXzq;BQMS6HS$k5_*1tvjsIEU3eb>d`AH~-Q+M$@P6FFURojS-S|c2c zbw{`qu;sy($G5BP(I#~a9iw0LO}Ef5bWh)CoZitoy45-QwbnMeM(gy9W^-3QqFY)d ztugPkJ6;_=mfQyuiF9(}0puY}qQ{eHb>O%TnIk4Ya&}=C<_tIA*JZj3cXBQy=5fC4 z{Q=(c9p^nFp1cSrv=m|j8G)dBh&@L$fP989H~9`T=NMTkD|3u2m6bWa$2a->b8hms z2$Fm6*3K>e$UPx$-XqyXMhfvh;izn^ zUH$k$WvCxiMrNvvwSk(B5Chz^^OC7DR&H{!gUd;*cy(m9UCK&ip^QY0PC=-#)MtPWzcrUkM=A)bgj&sjFb2!dJd5C-?`($Fq$wm2vO_1BTWS0z- zjmSZHn1vZ>Ido=U!ZHgOG_s_V_MWnm%~ zR;qYQ;=-kp#&!kJ5J|C%Pc38J?a9VEPQ~Lf!%uHKZ&JVQ`mLvt=(KQ=u9N%ZzV3~FYh~CS z7I(>Y>f%S9Zj+0ItHUk2#;&KEM66?x!MkMKA@~p?cggK;(arI6kI-461$1+`MDXX8 zdqixck@~2S`lz!sQe*8GjnqGOPCIpzW@;?GrH{XK`Xb0ya!8KkT zE)Krq#qS9NU0+WNsV~jt47xrV>F&5kG>yDrht&v1$vAN7-d+A})K#d&c(chqylnAdYd*9DM< zqtHCjG!3Y6k%3YJgh0&^RtMA|+4Yv!!L`Y~GnsA(s^dxrm{Hr6fF4*8$K8(|mjE;{ zCNvtK$w{ijW>I{(>Mu|)&zKGa>@dFgro#{wk#VlW1c`GUhRX$lUb0v0^-fyc87K+> zu8^9dFB1cE!@L>RVB8w;5}fPExqz;V+oIzHQ94eK$k91f$M*b3PwDVHjN)q)I-wNs=yT;@A9eT@0 zKk22m(o*lVU2TMC=_0@MQu;|#Z5`}`Uk!PXp;o4_bs7py)7dOF@hVBvSH6#T>L=Yp zBQ@04@6pc9hemY4v`#AbZKWQg@)JM&vn=}&*ivVK_Fq2~eb-{My z1a}+fUwV+;I71rDU@Nrypgx1$x6QI&d=n4Lv)eYi=bg3>OoXR^xSoOkL#t2io$>#T zg)y%0;=b+MCvBRTr}ap}ecLrV%uVwz{>4uJ_x0@-pCZsF*?W%m2KqkOePnpJzGHlx zee=rA+b%ZmafWz1=5gNl#BBrr<2>ImZ~Uaa`=qC_Yy4D<+b+AsFFVl__R)Xeb$++J z@^NTA7m-(f(%!vFFVPF!yKipxmEZj5H^1w--nZF(+Zo92ji?f`d%sopVeZ_%?TqA= z-}TLZKG*x6>$8|Ifv)=bvJnbjF@}0K(&3C@?pRe5PW?xC$4u_jopRXLB0@7{NV@v?vtN65Nfcl$Fv)AM+ok9j8e z_dH&S@A3U@bls!=h#s%>xrcfl5A{6$=#_Zn7xB9H=`j06pLFc`*fS8m0pIu+*eEu7 z9~qd~v+vnn!9jXn{*2y20efqNarE}(XMW~?+Xrm)`@iP^-?v{$sry(Ny>CJiJ5uR| z_|brOe9aD4kMX|EC-J&Ze#`6L<&of`9;4TN!R{Nr%*VWo`|L7;Ki_xzHM)ECEuIA| zmI4M#RR{Wu7R9k7SCz{$k$alB)XZ`M_ziP(ol!R>0&M_|bctFBu6L7Zxw*J3I~J(I zfDvMUArdixS}!+=hT7JY8^q>JagET@RDD8gCHSZ{)dy{@ZTHu~&jp6Ux~|C7S_&)b z2^H8C6@Fj=TbbRU$?!r~Udfq{d*e-|6~BVFbCXIavNM?r$yf4KTPVA~Tsl zb&1fbYDrqEr)V&Z22p4kiK~jfa4x*GWEPXbWCZXOfJa?Z-w&FiteUdx%CZ4EEjlc8 za5^kHw_eq&sF%&^68t2Lb7Ea_--vTcyQoLWAkZV(p*FOI|4iT|Dq_tR@%4W4xc0z>&Ek#M!2%3gu zwsoCZiG-Lcs7^sm1pOK$G?~#zTTr24g;Yib;D-kDAx%*7IF|QMJKA41?8RHW+RPCN?CL^x)#)fshF^ z1{=U>!v=3%NhncSdBCCDcoUlqH5D7e9JJXCg@?Aox~eLS6Cikqu6R~5fV~c&od`~L z-WyQW2K$9DJMqCQ>Q$r?LIOeL*fuj zN(BvqQYj#)*U%w&K>sSDEX2|@EuofNO-yVNbYPOCrIG;*;_DY)*|p}PLCe~dp}_%p>r4UNfcF33h;AP3cCHd|joJPcTE zMFkJc=ZBY)f<*&BwLK5b2DR3IUKXgUdP2qjE(oeTptBnqB7V|P`?)VZ(mU zdY=FG413;h+Antgrv1Sh?K^Gvn_FfJH}0EX-l=FTbznHc6wnbMT8B25|=Si|lr{d)MyW7x!+rcQn|2+b|v}IipAf zv-2$XZtr&QU!EZGw|>Yscg`Q#GCs*Sw-BFX$Ji_0$Pd}R9pi`mknQ`eUxFA6j%=uu zPK;a&dH~aR01OTZC0UXqNtC1v1i%Nh;YCK91_+6VmPW#HKo|~%1))$N48uSe!>|m) zpbP`TBxy0_wE*d>YpRU@o$BmuK%v#>cUW%mL_aBz8Pd;GKlT(}h(`PH5;7M6DLj=c z%m+)`+p$m)BpXZh07N8GfzCj??pX`hz|E@6Kwd0@^BT8~)Ie!Fny~aYHKLSpPCi$R zCDrz3bY8kiNHw=Mkz}pAKS^XaL)W0Y;C&71tDsYmQ}dYy&;ENMPXgDw#F)xMcL9tos{98Zt^b@fI^vJtSa&%oLJO_o6@W!Q5FTU&8%0f+B`(@*HvOkQqTG^$O4FhHMuSu zN0SwHnZOm0zH#XI=NkvMpyS&h4`d*GZkTGtd}dUNAunlCC?Ilepi^e zg`MTNgA9VjYJcO~{0IG;NU5#r2rdQ~X;a1)u3vKb*y%c93w%}AqN*rBhgNJ}KJgjs zUwrtC`Tt23JzcW6t5v@pE~653pFB0QqO4SUmU^kYmyER6ES*o2c1^V@!fi{qb11v( zw7)lJ3n>v0hGf&Hb#)nDb*ocp4XLO=wYZ{!ElLjw215p z0)8cl;1f_eMNF5zl_}yfO>mYcanzcySq!f>1|d(Ls1_38G}$ZVQHdCG^SPc$jCdJ_ zFeu60j^<&BuSWdijpo|9msE}GJcn`)V86JLm8~O=6V}`JM)!3aB~od6EI5&Aunp8| z<`M48_&Vs5LZ1wD{cXdK90+sS_(4Qlei?NHHE<55Rqd2y6-3YOZBsI%!rD1nOOI)9 z!Qn)g>s801m?E4|0mu*S7v0h(6u7>6m-B0bem;H;NrUz8MC>ChJs+pP<`%Rs%gNp$ ztr}3FZGC5?s&b074zWKa`CH8x-F^>>V;gx5rHi6VD@=w3XhKl*X0P{;MTFGj>Lbbk zv$WO`5cePcSicc%jsm(CZ!4n1M;n<4^7p%MyE^BB-K`NT6;Nt zY685PR^NcV%3w{a+jxAu%M}aHlfhKoRS(3{yL$o1%G;rfhF0vIhF@g+a>F0=67 zLS-M5q7A}d6O=m4*laAow94az$|6$eDf0l^=u_S4$0`JVFx{Yc=~fr)QRZwVM|uTl zVjgS{fO`uB%sd`$qX~f+B~3-4eRqc9 zlTG;34gRHl6F2U~)LAa@&C3O@D@&M!yQ;V)398BEe2M}Yt|}qdb!ly0!JFu8^Qv@v z*s?pDk2}r=KgZ-LAPIGv$hUHh*Q9Y_F?FIe{)2skl{A&7aCa_2x4W_4h%Pl09Fc z&UC9xb}@vioO_Uiwh-1NOPvN*+E!J5#?}J6fGd)D%-tqFf{agRt#t%|JHu^-yhtBQ zdZ>bX7m~&x$mHzD_ld&to*tMkvlai?Z+`7v^kYTdqr@Zcq?O z2)U*j;KQe7Kf5J=i730q-5(69L*0oS_z}Og3QlJve(I#39MRLuogR4qgO51>nPo^< z`P!fc=bJ5%$tkHsVTwxXLm(TBdzeB$gOHerR=B1J4A-}c`O8T9dH{{2lV^rWG&ESnJoz{gI$9+s!E^MTs0eHaUG?V%z z@UTRmg5W0T=W2NB7g*TxD87eAvIdC(wAs^rS_@V9OW8xwLMvcc7qNkim>F0|AxAv? zLz`{we8{B3Dt)@qjf*Y&UXjkF&;6DR;+55n^~PpJ`Bg>3us%u5>(D4V*0~%#e#FI;bWt$U-*L#)}HRX)tD?|4kAx?xqJ&8nPLw`0N$64#* z1wOCn8>@AgSqr}vaMScOpIV}V%7&8L<#w^GJzQdrLKVU?*fMOJ1@$^zeR}Hh7B&cf z0{tB|_l}RNyD1B-kLYH?U_S#UJx#guvBiWA0NSUd09m3u@@y7J%G@T^P`MQd>K)=t zZ$G_bB94ZcoQ?wazI-an9o)ho4%*g{mM5()hP>01iLXmRRS-;Knxhsdbrb)6E{1>i9n*)B%tCL8EWO#7}fRh5Gk9MYsI%R!a)F)+6kc$IFwfK(*N&IdOEXvOk-ny}~|NDiz>}TQ_ude4Wk_Sn-_TH{etAMBDH`HpM^S^VrX0`^G68uEnss)ZTr2xbR}x0!m=Us0W#JhmZZh$u0R=;_KXY3+$Lb8L8u}30)`y?W&b1c;QFF4rJqWa~z*A8^+PV+!8B`KPtc$l1y z2vD{YsqrXf&Xwy4>_2GipRCSzQzIx7htU04ksZ^O2)wwYgi9|z%h|*2bH9^>)eIKQ zw4%EJSJ`j-_xQb={Y_o!0sBRj|KwC6ux*)t+D3f7D}ru-j!Tf=Nm-q)OQNefinzJlUGG+*OL!jpZ}Q3!JDX_mCR_K6U6i86c;=a{;JdZ-H9sPtF`z->>dVTf z77d&XV9BN=WXdFJ2~g6v#rI$XSn=kj+YDne4J1c=w<-2)bE+0<$Z-kOZtf2ci|Ol_ z=lPrN`wR36J^_*@+Vnrk(&FH(O1}G8e3)tgH@G9>F2lAH^TTG}fS@#XP6CS@l#&8# zyd{`u$xY)i?$}hQkm1bZC9V&eg0Fl0V6Z&`G63)olp>sZMpI%K9DkPyp;#UWXL@jq z93$jqSFnI+nFK49*!WC-8@LLHkejNQKrp8a_T|rSVB54@aoVP_x1F$k|Db|OU~;Ue zuQpKH9nzgd@h;qj-2mzdUuF2;+e}JuJY$|o9r6`|CPr@#32?P8Az9ZMdnZh=*wfOEI7v|iFTvyo8A8vzdZyE#{ToCFVT^p z7YfW{w~YAy);AkAb?U;aqdTAm*@c6FDNPTRu!9(>z&sBMvWr0j{3?Ls?UyG7O1`jj z)fbOB35Yxxa0S;1(L3>OuMxeNHHxT1s5}E5E*s|>(01@1?f~!tMBLqTmhB%Y2%Z$@ zCiUPAw!d}mI@J3TDnTBx2mqCUH42d*6ZI=>FWuFG&Yo-al)khhZv6Bczt)&14nP{q zc){MZkQ+OXeI=+8VwaOm1H76&8Eb4|+| z#17jm0MZkYtDTaS+79_o22ZUfi*n@i#C4t^OXf8ZAC<(E$9?TDkE&S^1_?!M&_cN} zHd@e+&-lIoZCAXJ6-$&eC|l~($ua$P45F4i_JsVM>YVU}!ioV`%fJJ;3m*D3km?T* zxd93`3UsfJ;x?v$dLs_txD3zm1ORzoG)+~L=bio4k zK=hU38FvUQ@toV(^A+4n3(jo|NxSWEM=D*va%zkf=Qam1mOU0!Wt!(J04SW>WNI7H z@|-5u(l$&b4B5vM0?FW}XQ11C5JYHgwQTmu;bubC@7o@va#H{kOONcG=<(11PJ0h; zbrpcinQ+gr(=nQ51uxGo5EQHV5!Ea}RYUr%a6CYsvD8sgRvD&1-=d6|0~9?Zv!IV7 zjVceTZ9`dbgrH$%0x*_FAq$Vp-)!y9ugkT(r^j~}GR{rv(4)x1Ui9jnt4iUQjs9`^UKb zT*Of66|)BbBd#yh*K%s>%KdaMmAU34q~RNK|HE5SSOP(y8l0jR{(xJNKC;?loCbG6 zQl0Be80gJcS&!i4FhLCSk#`TRiO3oR14QW}c;{@id51H!_fLtpBy?2(QCtp+J&%r> z+lq4QKdFcSL@Qr~q`CeVKjTXw*!t=e7VKyhNvd_=W>|@q`|f}=onyxUMlVFh0=rNV0Eh3u3Iky>_1_4ml zx$2l<9besu?LdVs8%T|K)j-maAq|?8aD>>vAuE^dl)q_k!f$EqtSckCQtnJ$KQ4c( zol5P(lE-U(1fpbnRUdIUp(?yP!x&)R+#6YvwsUWpcBJdUO~+%$Ag$>-HuQ>`ENRZ5 zI%-!(T!V?x#|s>NK{^mW=jDH2SHOc20`**D{zf2Lsd^;}x#xj3hx(J1JcaA{S!X*; zpbGZ*9L68@`i}0i&y7m7q1rZhwAvW2x^t`E*v78uINI}*2;e9`pYQ~0XiI~%c0^M zoLq-N=4#=CR@Jke?4uTPhHTip8X?v(W(*Pn?QYN&I;)tey>r^;8A^XWG;IXWQUc#$ zt4hI=&UqB$ST*nP06_R;{h3Fu^+ZYe0hrKki*qXnP%G=O!`0cwkL(4kTWfbF54!>$ zg2XvOP&j18D0sQr1|T+v)6flNL4@D6BV3o80*~|b z6v^zDxoURjM2;HL_WW9g-@MUNaLQ7KA6f%M{p<~9B7c!aD1*9>;GQ%EKDLWj*`s3D z$r(zmxLkZB!Udl}uJtP3zpOJ+gv_I8K~Rr40(#nwsW^TzKB)N|n25@r$Q{R}|L z7$^gZVS7o_pD&Z&x)tOgHU>I0ny+0k)vvnI-mDli?Ln{O!_k z+aT$4I!kWL65^cT>oLmJggUaQG5wQ{&;w(+Omwu*t4QOs(qtRn zl))^)G?e1PFd1Z1%1(*g{6bc}+g27K`O|YY>xISx8*y9yKK;p0p*AdZXrXSkg-kLC z5D){OqN5JgM){b>2l0V%9G$6cAfJm+Xr5#l%jk+5CUNaaEMioY`c3MXZdvhPe^KWW z5P8(UR-o1y;iw}Nb+e(%`C{XH`}e;gjtrn!G5J<}I(g5<@=CH7mm(_H-Hv~fVx$@t_9peAF*uBC&i$5~K$Jn&mD@}ENFQaU zdrF7P5w*!MtgK0M1B_L3O7U|)&wb1}b2J3qfwWsv?&G#7A8$_bYcK!4gPiPzkqw_U~|Wu{zChwAk@X*v6u3UB+ z$cpxLo{w1{@ULpM3tM@he)Xu+doqG?(prW6%>&y3d4#OoIm~$`D{CBM&-f6jG#CccNhtkiU3w*JRKV96R4j?+gs+b8&Y$u4 zqZN(el)P8CxkFzprKOS!>Y3m9jl=2&NyqS=ryOe%J!~~>PXvX~A9Z2lk*wZotfbQ zc(#^(R*SuQITSn)toDaSLem#I{%qaY?*2glw@QQJ$)m05QfMhB<5lp2uNuoL^*3(v)(;O9x*^h5H&6j!Iy1^_2=1UR2Bxs`vBo@nS9wTqK=>qt-u3xX0!X)Ui_B@ zE1en%A(`=2E-Jvyy_OtI@^k8?S|~%5V^Jkdb)}REDa>1@0LE&itF<>Y69kI@9L4Ec zgIG#rN5|+FL^HTVyITH8G4-X)4Qi(@?x{LsuqyP+J0T?!?FZFm{P$DRQ>|?7dl|)f z_}t8!#V<=P9{c;$%qKdJ*K+58Qr?aD%@kdk9|PL$oID>TDRd(xFDF5dkZ*c2!RN=M z)u=_}#fl09L1;aqD8t@5KHZp!Ef?~jOni@MJv^47)dw-eu_E{4S?Kqj?zdJ#*gS7g zsgt8~9dM`a$NUC5NkFDRPO)NcT%$-e0ns4pdg> zPVpxA9;8$f#<4TyQ*oi4^)4O{c_U%z1gVVVkp+Ei|KNbXW%rz7T#KRaQq0^g2GZ{K zxG_O-y80w@30&iQrp8vPcVu<3!>fB^v602j{~b^(mKMjMbn4i+#)VDPw?&ER)~RSRJY z3aWQ92rgr*WI_cnt@J4=xr2dBW6h=gYV_`YDZ8imKx28q-ZSLmO-Oy@#%9h?RM_{z z$Ql4#bRWe-dIC%U00;{K0Q~wbj0Ach+KFTUfZ@=34%kcp00{X3 z0Q~920RT`m2+N0f!2tp9 z0P_IqN6xx8m*DR44C)cj2hl(6gJn2Ys_oOl_O(wB8>l@ruWy<|?=*+b>0oPU9bAJu zWYowd(;fPkQ=zNXIQ^k}9ioL;hGV_!j8~Y|Gz7a1 zN3*cFNqM=FiFY&VIA)uP$}nQtLbyv!j@=4aHi4|Zo{b6<6^Ynq1Bl}?b*_+1GDG#C zerJ#F;v>001#=KGbdZ2RfdB$BGBQ#EP8k{+02pALUN#;e2x1X0FjlM-*JP2IS!|h& znL;gN$x0Qb%~UdxCJ+nhOg+K$F@sVo&y&id5~)-&Q5uZ^%e6$7D9WL7sXS2@l|&Z- zHPmHqJ;g@6GLsb3s|k;Pv&nT4R(HNyYU9H@nMvb0nvw!zX_sgc-(AE>6f=n@p#bcp zR{HApwwq4%#M9?oPoh>jjsKhFyU2k~A{a53BwhbAN7#@0y5gJ-x{3Fw(Y9hX&J zIpy_Mv6^DmQWW8hXAsKifnvS|#fO4B$St7EUVPARGG-UynF>LVleN{4U@ftf8hLwr z+f3cm$lKf7X6mL+cCsaNRj)X~b&A&xY@rV7wM8Jm>-9b#erWqJ+kyviUtc-Td;a^* zR{~t;y6(x9U6U&TmBBI`yN3I&?beQSX?FrG{jQB8Webf!Kzq2DO;UX#%`CH;3agox z#2|7Gb&?yQkC(Mt8XrO(-%ilFBzZ9FVq>g}PR_=I*%+NP2gqA_Lu=Ao^NyF|!E#b7 z7p+MvMRUBLMR~fG1RJ|6_T_@{&2kRV-qV-LNkUaPL>xn9N+CN->bN{-&u6hExjPwy zd2glB%CHXCSd}HYE*E!sw#>Yn%yWe#Q{l>j*chBgj!Cg8nDyob-(iLxL6{UqWjktu z-D;~ZX{%?3BT?Z9heiG9)NmWtl8$J;<^^ZVxQ{oT!QM^qOc1_w6+bHeT68d!=5i*r ztg;EL)gzyCXDarC70dJlIEylIayLi`VokQTdO~TP4eyJc;Uc( z{rZF0sIrRk9zrETkWvPjnHdoYvTb5m7|l=&Lm~{sAP9p%2!bGl5JCt+gb-v1V~RQB zWLg770r!YdArH|4OA_4R85j8~h#Cz|kyrj5eXR(Iwq1-6{o_e+0v!Pm9o}xL@Dwkx z(dS1R2Q7leh%s1PuD%uRG5751u#4>Tz-ZNGx2X&a8S%T{K02w-0Al(l;Yy4jmXe9i z(mxnRu4a4jb`zys6$lDaWzab-ftS5q;=(pIH~pj;6H?2sbon@+!QpGhUI0^YyBT3k z2m~zX(|cAKl;$%2-ho^((Fk9#Cs@EAHSQ!hMVXY;j$KWO;RRtN)twkj|F3NPCYrAh zo@Ma3znDBJ)_;-BPKAbv%UFMde=jObaC@0J**`nQl??ur#j*{&V8Wexh>es0FZibi zW#-T=kDRAj^5I$~uE8r!;KoSl*O)9ku1-#o8ny-d#mSUN%-R{tEqUTonEcAlo{Nqq z1ITIziknwX&;|EPJ#wH@gVLNDz;Yw>sg*&Q&D++?;rrO8EhP!z0`lzI^XVoYmUKwh z`u)0H-5+cHDI6v6uE9O#!n1;$)VxTZOkg(?Ghzak^fsU&-Bo>EcUM; zg$M`l=^S$m2X%7@_A%zv>yTgKL^Uptvt;lLtQlSv+A*Z2;XvHAf)elA$}*NPv1#Al z{N6r3a_U;H$00Uv){G?rhQ!i=^eJ`0Et247nPHGvkPR+n$ynZyP&!!7jsN<~)Yfic z^Kn!6dS6+Uu$r0DYmsyVOdN1><>N+y~?qJWuGz{oR7_4_R1CxHFXZ?DGj#t~x1)sL(Oe!9`OU%!Ev!Qr)nfzYO}K zseN9oaHJC}jNeOk6wM|$rxzPg5Q6rAFhn)>gV3EPz8fCDBjJpkh8rEG!X!@nApu#+ zebn5-Ri;gMB^wruC~$ak-iZ({&@_~RZy?nl>7FD2*{MDehz;XXtdvoSVWAVb-m7W{g4%?-CBA1>okcn)YakTY|$8Ci-_NN*z5H2o@}_cMZSm&^p^4t*`-K<;n8c;=X)WiwTzuu zf-4%1Et8qE?am&#K7g92gk(j3ftMl_^#^WeNqsx8Z-A`PT?roJEu=f`I$SSgxuey; zu0ZgFrDN?FkBx2Z8C*dMfNV#YvHw{VD#ZX9hA`Z9p+ z796?~t;Y=pe{QSd(WVUQtoV<~5WO=ml_2>V7=+S2wh3F97IM3S#*EDYmK(-5uKqiq z(4gS+=wAu5v8|tl`lou6?gNR8#;YZr);_K9bX}K@#=?!BYx@*fhSM7;b6}`U28jbm z)9%+MIe<3x?gPH0HpSkPK^~krNdMr;&WEINP$W+aSn&|$w8SX}4bJIgcoC_)z^I3M z$>U{}z=$MLjvElf*3GA2LrTnHBT%?yp=xb!q*@S z;qdzmX|oG?q}Dfp8-^=+04+&uZ%frM=cb-iU~BV_+q3|qaxAM3oVl=w$K9m)96k!K zW!mT8rl1`y`rEM|tC^1CFziFM9X`>Z*7`?gDc82l6Ea!$ks2Eb;tdKR4Rm+fPs?p# ze-XD0JSzk7M zz~De2^*#(^0&@Z_0$D?*(HgIevCJ7P6-X7z6v7lgOgtu;rQTBC^pZ9TszdaPh3XLf zVxy3TNX29CXrub3M?};kvO9b9y4j=G%|`WvngdLy?DUFR>lzWagkDbzTcZLF1o}g}bgyGh6!X@-j%g38S?ipNm28py&@C<^&Z}RI(yP9mv)-Mv2GQSWpB>V! zh8bJdAYF3uM&NkXF6r7?(zBj5$yw58hxAC_j#(5fVx4$&JRa7laogI}AnlzYxwBge zb8R-QG3?-kxxTO*U2EvqE=SiLeW5KhM|WHMB$RclKiZ=;nuIp7yJn#vHU)@?i+CQB z#hfA%^5o^{&=wz$&)@Wssrweg)@_;O$%qrO=o3y*7 z8z=j6mgwPdoJvaqZJj3=N*2f3*dSZ9Kd1?MJE71H^g=4h;sO8xdcz-KO|B`ESQyD2 z1`)1kN|H#dBN&E}4&BHZWO_I+)Pn6fS387SJHoEBjagSS5gf2B`}~NS{(-1E@x(0p^+&y75033J1&O z4jx&TIjnX(o1816EBEM{b7MVMgQ`TGJsyFE#@9`d4E|N(i zs~GR`9`ErIfnw(}r@~;T^h&_s5K# zw){cnx?B(U#b>wWu3VP)xFIgkMU-b|WEAqu>;8DYAD@jcnSD?h1_tASe&BdNBFvFa zxB^VT;v#^H1#V9TK@Urc3n~EetjG(fVt(A1D*`LIP6yuf=9^yLZE>Cxgn7%IEAQQJ&-e&eRenGC4UN!we3rxLM~-#!Hmndc($Xv=Nc-Fbp;U?>%99%jsnuriIJ)iyRz5B1t7TG>LEguCje zPSGoR*-D+%M~!S^51XfpmdNgU!@6K48jMDx!DuuYhpa=^kfp2WLcYxlEsN!K&^mBP zpO1m6mplje`OItHRwOJk<{b}uP{pgt@*1bT4QXf0P{^N*RJ1|vkhqM*|MC)^l6QQC z<6QmMssaN%DqngUGZGH;B))#fZ+Hz~ z-O1IL`IA4n>g%7lldD3euhxq`4JcX8RSkM z``EX><-%`$OXyjD`Y$MFpl^NaK^z6hp`6Lr7jYF2^YzWg_>d>TQ#jM3AL2~T^r%C* zviPpzyBz1@yL^|0UK~UYde)clFDC;1eG~_J4L&YDKiN+XI+8E%d@Jub3Xzz1p7kup zc}w))v%Y(B&s)df7 z<}LW}TaM#L8Oi3%JipN%n!*99jtFQ3YqkQSL&v;h$N&1Z=v+*&w zQ6~D2XZ?t;zjD>1eDxK+^qMby$%LQqr7wNSYrX{JIIcR-llbaSuKEgBKf_fNuA=ao zH@W&OKUKcsGkoT&pYYXBc+E}tlAAuvIoG!j|5FX;j4%LG^sN?8HovhbWXUKtmdeM8l=sj-ZLQcYI9QBp#?TVCl($NkE4witA9{=+_SQjh^XG5O8skV-WzH;DA))$M}uj#4o+l zuexvgq-ARQe#NUeOaAGf-svp)r4Js(BcJJGF8;*JP;gnmWTp7$m5+p1uk=ZO^ie-T zg>6!7>rgQV-cWzO$d9tAVNqq5z zRDSq8FMK2J7~p~()x`@_{Xbm7%jt!D@m@LC(v^IpU!Unu{J3;3+A;~k0%A)+Jl^Qn zXZjNpK3po0-CUf-dDg{L0rhez6>{FG1eC!aacYxvg@ z?pSe=y;4>ln@? z&`cpyMS;G8pjx^$w=C@dJ@UG~0H3m{qVr9ZB+EL`?mX>Xu*WXKXoi%Kl1o+sXD&we z9&D`^&Bd^*>0YR`j_)V9$;^j*$Xdm(DdMposec?wjB7cN<9~{1^qG${#&aU z9eueRmx0`%z@h}^>_Ii`H_&@{&WT=mFc`rHM>G(I6{piCDDwpBoSce>h)f~Nfp;dB zz^Rkdlf&K_^56Q`J#rS=jrZPXW0n_m$;_RL(#-o(b)x-fhPy}R$Z$u9$D)Hk&T_ZS z_eFmXer*2UrBA12BV)Z$dFkSkyo|_4Yk$jY&G&yifJ(M}4y(J1L$IT!qj2rcGzY8> zC3Q^mpv_0Y!DE23$Kk%N*B6=hy5f0kMTDYXEM;M=Aev)mz1jidqC~4-$I-j|v(eGv zIm8wC-yen9H2Ubn_R-grtF6nkanqGUb2)fIUHj;|(@t7Ye-IY(2p4J>)wu|QZp`PP zk?52aM{1fqhG80k^DZzc{sNIUn>x+&@e|r*NtyF9)U_e(vRO*Hs=T98`lncMhVD(P zt~#6Q|Nz4 zwxbjyI;3Oxg+ozZ3%_3nPHm%e=bV=Fw(==EP!LdG-3Sd>5X>b@A)Q(b&T`C&gSDzh z;B3gK>b4_=@vI&7>)$fy6D;5@{2?6r2_o0w-XKsSZ0r9GmJIgVu&xr#L}#et=2D`F z=7VEq%tQ5{QJ0lO#yR7@k-?!l96QUg-4|RI1B~4#fej#BrCaw@(0&<^$K7jOUfcUl z_?Mbg4!V-5iPO|`9DsEyXb5OqV?^CPvFub(GG?DCI?YG}`jSmMLlv~$Kzl3j1XWyd z#^VQKD(9Sb#}q)J3O%t+1>J%SX}ZE_+N%X6c{jl>!+j{pBZYxfmx65RgLV5-8}ufw zVewF*D^W#AWqp}5U59kPRt?SJ!4tPv$OV|L%O>A)I5)7H ziZ1vpfKzcHF*X$!K&LDDd{dzY1U&3u-&9-|1XS3biU7I%#>)_NE9zS+E(QWGt$qip zNA4X~)bXkYTlY3+8CkIcH4<|84nJ70VnSs<(^^#!9qmLXx6DK}-pdM+gutX#`|vbi z+g9Tzm3b{wrB3mb3^3KxI+g%Fl~a}~noKRS99l^%_&&+y)m`A+lt2oCa8>T5Uu1Az>AhD<~+wUtk5 zeQXO5IQI zP>68x<{myxhfZV3XEKjKEPXHD`k=a5Xtc$d7>zB-c3Om{+7ZnP$1v@?J?yU5wTYb@KZt*#RW&^cW5oi3dmEo5M^)vXC;@QZl)R z2Da#@(C=uhf+JJrih0pM-AHqmIIguOo#w#hfeLNyX1J2xEcb7ZPi-!lk{Zdlod#tx&61)DK>} zo}SfF2|Zh|c%7ECR_={+C8ml_IrdD=<~3@Y_Kw27Yb2~tW!aLOgK_qz77?D>{$)+8A5+08CGm>lh4?ALggpc>-<5N zRJzW2gscG}(`E=cd410v!(#~Eb*eC+7=KWSae!DY(S@dnWz7WV-TX<9+VGZ|&@3sV zAZTy)*)T6TQ#ZpRGIBTJ*nGmF=zguWFCsl+gOZTw>%30|m8@-1|^pGl2V z(^@NdziQpY&F@l*W2_t&xrEIi+Eg(xVSFIzYy<^Oov^EES*`KG05n@?9+0TFtrD^{ zI`V$mLKKOmSA-8GSjbHqRiBax6e+LA48VT@^JUcy6@&=6H<)^{*3f7_NK>{?MU&MR zktWwk#@G-9#+AhVjxfn(F?o%#0fFik9aTgmf$Pz*?YRX2oOX>hXl0B@fV__fogh+#kb25!-;dy6fN*#&Hzy`HLQs^2M9DqiH?LmF)NN5BEhOBZxaTtNv??Sgf|f7R2C}fpEreW za)O#YgX%=u6Q)rnA0)a(-{PXI#$9FtL7>P0dH{#m1`4UbU#b?FXh>pU^fL};z@)oq6s#w*Bn5oJat&|Q0-POt%Fsr-!NLZ(z3XM< z2fNQ2TDVyJaZ9nwAxF}`%H@Cyrjw##eI3D_B^Qj-5|hnGR!`F3hI={OAt$K7)|vGj z{V5>9;H^*}{pfc5dhOn_!#_T5>YB6?igFk^D7smRIQ3$kod8D<+Qu$E4K%rpI_=(ZGF*wo$`g=q>*+@ zTb&V#$-3GNG47PLb|%Hf`fQa432t0$>$3_BcGghFeMP+Utl&US*kIDwf0?5jHu2HX z8I7qr4PWFyvlSC61PB4sHO`@8pAvKi`?@F5z1yof`?cJ-6?{^#FY z9PHwJM6dRoZbc}D>f9*iLwe1&zL=67L<;^&A)|L#*V0{+X(aVy=C{x9J_QpEqt*6C zAo{sfdJ{!AYr#2ES~!zyhR)&0PDpOJ@`cdGmjJvqIPM)DA_M?<$^gr!$F!hQzaNx) zhOBJ`9BO!exllKwXh-D|IKuvb(4b!87)Vh+ppjFQLCks_+?zWS_xbZ5+jT>xbS04WEReF;){GQKp zqCxMqNh_w5w?^;ad_9~AW5KEMA4EqP8C;`N2L9AdeI4ic&@DD)jim?wJQ6-rLEHzPK;=S9AhHVpl}#CiD8< z8u>5&Tr1sbAS5nr@~MkS!n*TYL%6v#UO9(X&*ZjTabIs2P_=;A?RvqT@1)VB_TWYP zMWvh3H4gemn8j_=69ZO{SkH;P|CX!!liJU{{taCFkxZfTT*oIq6#Xv01MMGTy7bd) zImHUWXG?IFhdup{5t48}AE__Nlw{y#W(j-`ov`6^EsB5~y~!?Pso9D6`*!4E5~M9} zk|0Q3Zc$e&AXFylyEI~^ zII1L2>)g2i#>5SgGh0qz6`M)g3n;+DLv3K*NGm@0^qkHBo~=I$xAb!U@|Xxx$;#nl zSeA7GRYh@L!7f?57sYuSi$>OIai)tD0c?F|5`@1_MMyNcZQ^nw>O{DQl>ydLVsUN+ z&zkAIZF3wnSMq8YZBgXIC|J!tP2QvO=(O<47pQxqfzT3 z5IFo@ItRKh$BunMNmDjp_d;;THN1pHWH7*^4njLvOJ3De$CfoxZdIGI@3?#bdw=lz zHkVqsoV;ohwAivMexwyljzpNSO~JOTJ?(ssrhz-a)ZL^;GUa0Mq*CFcC-Hw!66S;Q zV%@Mo_iRH|qsqMg!TCszcAx9m?Rat$X@#-f@-N)FQ) z54DTv6%JRwoqbuc@)x6zeZ+lgNy?4=W%K+kWSicEqL~b{+Ie}FXmBa%ralJOWxm{M z2M0CkRuaqbDeu*{wDS@A&UTT|iM!qFeDarw(tM4Ng@q59Gti-2_L3*o+2mrVy7Zeu zY9jnX>-ZvOu09VkT&w%jN9H2Emb4^zvrJfgB>%z1dO{`apz+8{DLEde@~SDkmV2r4 zOoCVuBc@y$XoqYh`%f}@Iwi#FO(!U#^xU)s`(NXb?W$+S9`IxRHlpbSZCZNvA+|^) zw#sP}!W4BfDR6yoAX1sVgd8KREkx*OAS|OEPhl@}I%$p0&~aGp+B=@2L%CeAic1hD z?$)sezEzDfzD%V(OaAs(|E!u1wzBC2&pUAmOb}uK<~e-2SR&w%12O~IJ%^xy_eoD$ zs26~0;WOdA3?`kBqMnb0;}V$ZLWm}oe(u?8<9b8#{%)Z~=%&*P%MSvP39AG(J6Xmc zI{JU~fK~uD75hIqqRV`=6Lc8(w>1`Hj~ROV0!D|ChHpm-gGg*`6^ij7WL2nx99mQ- z{6f1Q*J>lW6tkKnD#PW!9_M@pwYry;#cz`aSa`~EKB<$i7ud6_9&2)Bpe|0HyMlu>}Ap6WDRPz>i0FP6hxNCVS?94TNC; zx?SiKOW^D(9hz)F0-2OVGcwbl>E`?9z9Ifg%-wTge{pH>;!y<`P^r5rV1*U74bnCt zTc*LD7-NhvhRG+0VID$^F~$&s5jF#3UWRxAG65I?EdjTOoMon$#6e83uP)6i(D2^z zj#KgGKQam7EpBC92_hnvXVMu}o{4Fk8|LYjJc95F$3oSlxA{hLZkR6I8Iy&3yChzN zUvQ6yZ9UxUVOojQ&Ia{*6Q;=}VVyS?!7SY3iO9z|@WA`-$4lJh_2e-QLB{6wuwS?s zMWLwMGjVRB9@Qhcp&qNT_S9oVsw--->QrGBsyHUl0<&<298-rXG0WI+uhRRWC>eN;hQDBo$s)$-v3?bW8 zDL0Zc5(K#-BT-5b4*AUgyIMtAk&L*(H3)(@Jd`InTUSMeefNv|Km zrVLCwI1Y56XBd%dE*|iNSR2ma=E+}2fH7A~~`nDG#xJu!ZaNZo9ys> zR-gObXJII5k@N{c3%EPM~G=^DV8d`Nn8lG?5HiN}r zT{gtRtOc909u{ReENL-p$zDv0i6PaPvs*f+UyL(tYn7I{ANQka7qu~K(kkuJEyVtS zb(%$m@7@~NDGk&-P3&HS=vk-SkJj}N=R6c)MVk|ohO#Lt4rTmeLv+J7q9EKO5@KAj zgmJ|aylgzJz*#{RN`J1ItuY*A&&OQ zKsR2^mDXIs+AD@bP&r5ghh(6bi~}TT1)R$}rPInrn;Iun7&x%uJ-9e=aiBqfwig!( zFtHT&hpx9!pu9W{QDq*ULNxz`xk;k!<@x&hs)N3o`9|lfv<=}!W{cT!v@9J%vF0ki z#gD$?MX{VznS;a=Dd(g)CkK6b7xa3g^KNukGPfL5<)H2L0l3v7V{4IN*_AuHB-mB+ z;ePZ=(=5wo*pqE*vK6e#O0cCRu_IQ*w(JG_vL7~r?XVlRS_s|3n(e{dfjMDNF2`Dl zMaV*&p);OLMP@UBnZ!y^B`V&@$$}A$kr9`R#Y$DGR4SE1p-`v{V@CgOeti1o$ESZ7 zV~pNw?EV?MySrtbJB=6^ojZ;F!@x*`f-Hu^yDBzLs3d7ck`8XIFs3>xih8DJMH{?2 z654uqbb@qrWOQs4+)6U0Cz4XM&*j~Yt7@U{^{z+rx`&5jopUmEPowA|tZ_veMGv*` zt{O;V?lg%$=^c~lgkf67Q4wQS@3K+LTGqHy*Q^LS<|D=}!?_z0+9A5uBRJqw>rM{4 z!DQ+mrWsMBjD+gkvW{sO3t}}awzsEUSqgT7wE={psPm+A2zr%cx7r5VCUkbNsiH2jURSEoD)T>=8hHyIiGj5hIC>%wcW!0o@>FYa;xL5mC0D2? zyOGG@CL&EPh!e&uv9EPO*;1Z5lU2#i(=h)|K^5dX*nykxdsdLyOI41%9 zEctq7fwBx{@?|sn>J>y;ivqQ6?%{SN4CM0i1SX&IOVRa#?a13z7-YumUqHs#Dkzg( z-#5r_8B(i@`uWo?2KL-cjRxl`5#*^b2YpVM@u;1lQZTT7IL10dM5`_Ytf~dlF4sb< zN#Jz2HkFL&0lE8ul@0J^=q1yc+!mZbohkN_$f|SOy~?X%o+t4e6AUrF| zjbAcARg(W$)xGGxY@en+BW|GQkit?i3iJPRCvB;~qh#VqY<4s+R6>wcMf*Q?EoE21 z4@)u!+G`fHMmVV1iH`3gP6F}bX(zhi@nA@%b9(|HmX?EAC-;%-O;MQ}pBVFa@o=}37`v;)TOINK z5FS^@s|~3UiBeFHv@luko^-@k92=~MyLiNR=@w#KqaD6?OwfS(e~+oCjT^uQU|oO>AiN;^yND>M!+A~4$z`U^ z7HV32pAwCQIl59`RpPl>8@U_OGAgSke~pD!`XYG8ZRPdz40<|y86~H$0Yy>JWoCzA zPmm6~y1b0KWS*(R&}6WvvTX0m~%P zu!jl`-0~N`dVH?OSuw24nmuy2+^jje8*ktdgTZ;aYbM*Sps>dhVq0Ci4*@BE7uh+Y zZ-JFmu&1l@e%;c_mJIIzhM@|jUh*`95PMmDua^2OhJhX}ydBvy9zCFkux;mQ7m#ND zByXsIND*5Cb>cv_-`8K?*fT(h%FH8+c2url@jS6pH0wE=Z`sWZTq(nu~Pmb$idroH$0jB=czAP`L|+` zXnAk+9c))0BI8iFXwx5JgTFKdN6$JN^rXJTo+WOtM`i=)Mt)#O6w;|90kZ^qhUE}pN@fB7SQm!2oSvOfL~)pvnO z7LOLJd*B_p+*BiLq17^;ws#7eyk;WHNsbm*?WrrktF2aXYdye ztCAYwB*T$*rp=KcgWbjg>Cb&&uhjHAAuze2A`Y|4?vn?qJ-zah&w*^gszX|!j$PYO zmoWd*blgOy0#A2Fx=-Ii8F1y}mF2UiPyaqQJ=Cb9KWxg@juar58*s9GoKWvT zaCT(*G~chA`4vfe&h%>R?Omwlh(nXJ+hs|33bOER%}_qc`pl@Y9) zc+@Zq=Oi!;RmmwSe|qaLHA|b@U^njodm=Gh-EDhC+%}$^$+Ssj(Gl;od;U3T>2h!i z6rKP&l>8l1(8jFN0k~Pfjfjx=c8e(6>v>c215}0Vh_0f;AznXt1~e=>-PpANYD1JY zsG_$gQp)U<9C&~)9^i`y_~HR9Mo&HTkb8T`)nJ0Xy1T=Fu>#lup8?eY7cX<$!-JqL zQZ#R|edV9I_?e48ahb39>u1rip2TCV)}%mn;1ro6pQ!npCsYS}j<1DBbCUwi!SH_} zw6xIN2NcClQ7vMWpj3lYfZ7`2sX&zf*j&Rsr6oRH5+b<;>rex zyQwyyP>oePp>gdRF+RfWYOju}(Th+nJJ1BTP=_7;WC`UP> zB#&nkMN`O8j&hVdR4hr}{7oB{Fc)kNsG2QnCX9(fUvl(?H$`MGnImyCMMERqD2?wH za;rDl=~Ha!6B130?y4!$3X?Dileih<5B@08nUTy$T}DtPbrQ!P6Pz@OlQ>W%ark3` zl(v#9az&;{mrIyDAyt+`q5xO5*4nI9nVeZ6WU^_@nJs1eV58YyQ^uCF^*H8?roo)i zP~Z-!Lc(kgxbYP^lP_{6Q%Kll6U7x?Qv!`8Tj)zlvaE%h_{-~SWb81C124NsS9()S zu@;3zXQC}U6y{=wqQ0k2yvmoE?#;SJo-CexC?t}Brd;M-xck%lAD%(>P+L5gka=pI3*4M*$eSQ7z zz3)Es?|gTkD`>T+(ork}6p-vL_G3R*28~u8#maGI{cjmu#RarFkx?FO<;q=fUI}%e z`+Tz)`kE!o`L@P=J61nJ*YC|~qKE!i6=IF@!g0I`FVEZO?fp zN(0B{%rwOe3@%ux!KXFEY{CshA&1r2z@zoe8;NA}N+82q4&aUvOP0JrG({O(AWbnO zd6A|#6pl<75^rERMWT>o#gZ+s1=56>VmLBH;s*-w0|rL;0%r(ER7~OsJb^4x!+;7g%vq=boMP8P5}k(66}(__U=7ZgHaCw5 zA1Sh#3%U~x%m@jQP|)&t0006=BmqJUyxW3Lo3k(*!?LZ}8}6_0!f9(uTieEL49oUr z#ii}c%B1#X-mHo+0u#6FOQ>S;Tye#XZOgW-%d+gs6iH)fA;p>|#xSLu9l}&COu5Wj zn1b=ghS-ytAxx#F%@keBnzJxBPCSk!`!olwMk-PBo@UtgEw^*izsf67kqv3#$yoW;lU(R{h5d?(x_BZR?= z0W9Mr!$lG!BnC)-JQ%$7c#E%Ky!Y4js17VpSK(-U>^LLYkK!ti`EMCqMQF(OEz>rh zmYFEwix<9BX0BEAOv*-RqIOKvTI^ZBw5(G!igxLi)-ci};C6;)>6MN(tX29%r}V2$ zbl9|AjnXBWM4$AC7SSf%>JVMhAez-5+Cz8fx2jjop*Qq;wO-eB4cl4-0tiAASEokk zC=90S+pTX57?_|;S|%$KRg1Pp)VQc=nuc#$S)^N32y&iQ>>sqI8 zT%7BWcHp2pxrN7!ATU4KjVx$2Yz;sv9)uj?WBv4$` z4@SQAgAgMb;~3W>C94utdx+qLtQ80lvJ4Qe_9!W}3`<7cv4Xim60J^cDB$J@T?ZRv zkb_5%gU6Xtlj%zErpyM)38ewk@Qo|iunoUp9{(^9yWpS}YF>?|S0glz(Dki(C$)Q8 z*E)UEIj!2*J*{hQzJG=uo zc!p;_v_Oz&O1N0p;b8|9<8-cbo$FlZJeWSHLJzCXu?kkfF$}{jIv|-cBPT9299(Fa z<}8ROs3a^3y>|oyoCLsOj4{Ow(G0>M1GGSb!;%371&5u4g9ifz1BU{{Az>I03Ijr6 zK!6Ac1Q-YhjVp$S-IC!YA<-2*Yxp!6nD!)q*uU{!R=OG9e8|`ouJ>q)PcXP zzC4&8%Qo1FWr#n!pFs!$fHS7oBdS^M#$uGnoQTBoPmh3wi4B4(BV*+!9!EE3YeR+4 zoZRo&XOfclBl4$sv?9c=U2^ykm`@aD_91ue3 z^j5xmVh{+9hK2RFxDYp<{Cao$2S$s^I|>G2(l;e4oTwu>#ng5Zs%fLxPQ<6h!5v0g zo}aX(dVnVwo0D<+K6Ll^k}JGsu!ri8{fM=RFc(aP9+dJaN0g}=0Mys%-X8xYqvuH6 zWGOp;n~$$%e1GLoV?r!jM5HO`D(#$9hT1c+Ue{7oX$oU4HJyoWKHyeZU}MB$WefpOJX{1cQ7u@$3O|ly{bT^g>vFEU4ll8j@VkC zaZ4Z3oM?h?0D4B^XK?_aG8W=0W?&eQwlp-(X2#K08X9sDUknJ;F!Nd61 zF3P447Y(q`WGuO&n2#P*zb0g&(P-u$t?-ZDnVhCyv2P8c8OIzLqBeGg!}9^4s*q! zM`N*^RX{P>+|hnXud_R?+CYKkcIqYg^Jd^L<(kkllljx4m91h{34(#HxW`^~`W%P( zjk$6N8GB$X$n#{B#bIyf7$|<^L6Wn6=#=I;x5l{$RL{f&PQr=_#P?OmQRF!Q)yd*B z`Svo$eaFW%V!`;&SMRJ$1Ln@8&)YJSg4ogDXUZ-WISwHXh1FZLwhOwh4vDQoAguW+ zP7m+nI$Q_GX*9w`sb(Zvfr^aOX$FZwqDY1+ebbCHvLuKfXvKVL4HWCIUArP{fXakBxpUQ(`=LHWNJ1f34qL?T8Jk4Ythba__bN$~C3LCi z+OLaQRYMMH35IU=VhVWZ8`Pa@_$&<|S5MtS0`@b5tP_HnJB|ifE@Yt53h%!IPwI)al|6!=>9Zu6L-Nm zp+$V@8Q68EB%Z5zo%s>c*sGBJ8{Na501QGSu*92H?8MWjnl5uk zq(4Be_s%jj$&&2U6ht8}FUf6zD64Lwp&SRLzl|KDR%=?1bz!oi9Aqb8iu8r zO?(+rYbP&s*>!vLQ4??3frhgB>`$}^rzVo~(BVWu!hj(Vh`a^$-U0%V9y>`|(0Z!e z1%=rIj#~4jwzd-b7R7GZhkCF{B0U_FwX6j=FG#>wF|bG<4!LYL-2Yt|VJX3cw_(Y> z%~p0Kq=n|j3wzK~q>}Mv=vqx+*2NOo0_!esbaFyOX=YB`7l!lbypttyLWdlLR+0y~ z2KZ$&9hBe?##qoBL?DYYkL!yvOa(XbHK`V@iK<<{BJncF>%!!F(Bc#lM#+8j0Vm>D zV6j=HW@_5t^-58Tbga=>?fCJHRo~|U?S`zg1fqjr#r$wW1JFAb0Xsx0e%^V0<&3x* zgK{~W4uX5yAF_%L)cZY6vq>PO>$H&Xwq5moH?5Cr&O2Kf zD)fL$i1;W$<^2p`voXwJk1yD` zWdM?wGvq{#d#tD%cw1-iVFSjV9>%za^sqzpC$ivJTX~UVRTMH^ycD=Mct#g}h;m}Y z0Wh@lTMfdpfu|8{jvZI$Z$CIBQxTFuhWAl&Pz{A?+YdpPSdO}=N59rdoIoYiSw*8# zkk?JxjW$iu4|%qJf}%%#nMD-Dfb49hMtKnycVX3d z1c(G?AvFZD+Pf4jNKwk+@)7CcKF8wNLTLvs#;crhKgF&v1VbIzw$xoOpi3)C1&)AG z-lO}#Pw{Wd$#?`Ks5e71dckgsulXx^8xt`hV0jfQ4)m#@rD&w6eK{UU+GBDnVs2KQ z);F2P-2sT=mt!5sBxI?Zv#KR{shV{!YzX(|bB4qMK9;K9* zG%y`75L0y#@Gz;iu&)(Ka*wam1d#)WTGD;-@hA=th%j7U#N*Zq1-yhPgcQ6a1MBWY z<%1j0u}kLA+;L>M%A>nS-cCjlG(ma-wNGEk_&Y zm869J!6Y){w8S?nYAw1i*oqesCrt70_ZBr{Zf1R)XBj^WF=Q1zYe?X^f7LX!F5|~D z)Br2eli$FM%u~@Pf22zM`RrD?Ujr{dW#0{*WSCTbfzfI_!Cvil_c2tyRds?%B5a6) z8V|f^bmYx{XpUFd8&=B~`>fAu3S0&%I*}@uAr{^{h_Pv|h0AQfDCk8-(T>6UIRPz7a#Gnpq z7F%kFc^}wKUtaTFzPx0B;Y;o8$!mIM^UZ(E~pO&jvXF zz%c%Lzy?%O0P0%25=r3BDjl1K-|+=b#!u;8+HN3>2w;X8W|(1y8D^Mah8bp{DllkI+F^FC!Lgp2oNzbnC-b!+=n?rK&7&#uTbMYqnKzrz}&29f~yY05$*zhXe;o!l8{@uGZ2e04> zMxIN%G}~cxO`p@IZsr=)pBQ51CT`Bm+}xQw6KBHA*Q8CFNt>`~o3j~fkA`q*M5S4q zHZ?7cn=&(JvS?6$^Tou4XrbCv5u(i(aYam-E;N@Wc4tB#x;0Z0LxH8jDNC8$T=C|* zq)cu~Ol))w0(NCyU2E|{nK!lTl%W`|jts2VdX8AF5-Ut)|3 zaRr715rrrtzKAR$Omq=bh%EsE9xl&!p1bS1b9dYq^zIzIPK~LrXIypFRo6JjGp@So zs%xC%{U%9Iopg6Dy2yGqyvsA3=HKl3=k6?baocUTUEOIG^wwhzyUba<_19n4vl*6J zYr&A%p#B~^j3w>(6&AyWHazL#&T>%2`B!b^Pn+n3I^nx@b6>7o7uOZ$>e$!6E7|B#J4VVPlGRWf9m0JYfXc;0e644m3m+ z#?U8Dz$@DUvML@Kkwj&WJu5@I(5wt?fEYnZuDHxR*-Az-^Gam~sR;}KP?8;kg(&bT zW2R_1OWYy0JY-~@EJYVB#VdwBsqn@e7_Qrc2M>nf!EuCb21k{#2Gfzj$lxbx%tttw z$T;u_gGp|tAW%jP1oa2#>KtVI7q%9o@>M|JH&+MQS_~e4@;zj{tCl#^gZQq`QTOn1 zW%{3+ySalrdwL$uyD`Y%8QdEanMk+1o4Y@J;Qq`NgQ5?4d&q+aeXfrWfA#j-Kir<% z^N!CPrN?9E@gJW3;CpIJja8b1yPLZ_=NVl*^zwkXJV!mK8OnuCvU&J3@X><%4u3x#4}1bOj`NpKC*)KeYJ(H8VpX9X*W((0&+ z>R4$FRkC`thwkVLDx){FhT`B-AS>l<$1G@zXHXv)#x87QLmM&-!&p}Bs3&&e7-mt! zC0d7H2(;J|YQiY!37SGl(8?+}1*4#M1R+rk{UI^}LShy^VM978h>n#`AssudaEuE= zE2EBi)J7sx%_L$fnfOHF6FxDO@Ck?DlMY=+4TtDx8I6oQxYQUaMV^R*h$KP?m-ZG4 zMakCdQirUT>lfck3pP4j(rUM}VHv3w zVFY<^kqkGyltqN;JklD%L)0Z&B6)|4$HL_F``L7%kWb;wx3Q?^{!krO>!mfTDb^;< zv|Xc08A!l;t-M$V1!gO+w=bG7l1*^#{3uqQ)z~}}i$PNrP0m=&w1nEmJP zfBt^vf;DK;jt3>Z2q!h%*)&%D8fC20Oi-ah=G8#dsuBP6R|7X z;Zmf)BmcL*tIw&VcE@luUN+25@*F~xYFcPSNfcFjSjqKT z#7p(G!+ZdlVDC@yXc0^MM!^zG5@p=f;7^E9k)qluo*-aaVix%!06Mb4q-|@{8kccK zncl3B?+IU;tosEsicB*0NZS0U22NIG!tEIK9DB}@BPfK&eE3!)kGa~&BC5tS^kc$y zk*|%=D4SDWEb$~yvn-%vNF$Zkz7B|EdO)>h7tRbFk)5xk zdw7{+ebG#(Ej=RMf_!5Z#OQapUOI6BtZEa<0HZA+M!I8mxM2LOn`l znb6kEX|xZ;Xv_Sw_E&dLbW?W?vXy^tPD8E)+0zYVEBuvHXV8zbJ4&<+g6qUM6Z(oo$8d9xiN;G6E|u zd_CGNG-bIGvkxL#G^0ZbtpBDZx2-%PSxheLX}qUmmf8Pv<~c)-GWj+F(4}P%yxR#b zIvFr+yMWW6@P-{E{s7gZx+Q+|T++P6&V0K!?C{s>pRiZA$_yV|=u=0;I5K*nmx%SS zY%utD29+wOd5xF6Oc!tvh;qGL&000OO0Ra5}IS>NOPXHQKpbM9)?v<Y5 z1mwEbgU4YEuR&3emcO(>kd3RkdIc2to7>P94ZemHI}H_nrrx~y+IzFNvCrl`pTNtw5IJ9aFfgW)TVLbvX`87*-xHwl5@P{BX51=1%BYKW;MylVFy8ZwS#{g z!9DuarlY*194a}y9J*?x7$bhNswS|qrg0~+nt*-;8JXC)dgSRvQr3+j22QRlYE!0b znTgCm>&R9Oly!`crbv}?JjdZf$*;GuF{;K60%OLAz&K#^7&S(VaW!I$7h_7aqY?rT z^kN^#deRkLEsNZa{n(5O(@Irdu_P-DvBLCt5_GW7mSgF1&>ep$Sb49?`+c??bhoN+ zs631VM>Hy@tp?(*|GQ9qIagydMl(nJY%f}(n#70F18FVR;yWs^Q61H;W-!+?ZF^$2 zs!XrNGyHz1^-4jJR50<`QjnEoxyywYUU-=M?sDOU7ar!m@4h3EoaQ{2;LV#~F_}tc z3yjOlsZCohiSnqqqw{ce$Fqk}E>bzWhV_-vH$`74~~!@hMY z!;J1Una+JdhMS4gAQ}f;HHd+xgDTzKJq56xN& zm1lkH8zol4Hv$9LPTg5w17~%3+MUf=2CQS3rdVPrgK;E_1v+~u0Cqr$zp6dI#aZ9> zEDy_=#UG5p9$dmCe1J8W#x0z}COqR69^n^hq4gU05gTvsj;&2cxN(GwO=t<9!Ze-Gvp53ZAq6#c_s{&(X z18aHf9Vr#b8uPOvF|h+}R;Q6-R%DIA@SVH%^){pib{hTcv(I|xXLP`Flwf3TU7JBK z0=(N8m7K61oWC2x3wLm|79`}dO;{pZIpp(x}^(ih83#b$vP_U^K&h_ntaVLxm zWUCO&6{4GgVuyB!?zmhDOyZkrNaP8Y*bOcQr&F~X7=n8n>7JbhOtTW=iED|&#l>(D@=Yp_L=E`Z$>}tH zm#-Ygq*}zB+&Geun=ZS1?1$QwRnh5mkp#%v^3n)78mtk}NoNRM`U@%Z$p3tw_1SPb2SjE#n>&oV%hrs+EsWF-*xbd6@&3gXDEH=y2>ZN@L?nKs;RH(Kl* z1pLdvfhRL*nYjs-+g@REos|=0=S7IBToKM4Y&B-nLt|wdJ0y_)Iy0Dra1JR%n!ItM z7}x|5eNLwBmYo3{{;b<7Y?ZB&cY*0>`SWgh1%)UBZPWq$Fo+F+6V(=Nos(CPcJG;- zreB_Ey=)YBgSqqZf!ux5mG6Ih!Ph)nuR3Dq4yM%P5_cy!;Q&|_I+4W? zW+w@Y3gU3jUL5sHLD7}G!r641;KBEj^~mUMS?qqE`$*9KIlANaNGx$d>dah+BfxYn z4u=C1V1U31Go}u(9YZvHJ`p;sPqHoF1KO>0seDyR0?&hzd8~E4lrx!L)c}axNVJO; z88db4wdhX@6!}ij%_hd1T+}v?T4Nc|?TerTr;=X>5IZB%my8V!Dnv|;%q&_8sfE<# z#fQSfMA@`Sr-o}XSq5p)QQ2Ck@66Y-nb!RHn8ulnU#N=$ZLayh!-d`3H1=M1g)q?$ z3erjyAGWSQit1Sk%DKAZPYTUL??#Y;fEqyQm99tt<76~j&;lz72`Yj6_V0JwN0^;+V=QjTb#4b%BPWi zm>XsXZ{4dNj82l5ntwaf0R`7L7Mwpht9NBXEjQM=69~&rJAe|GYEJ=?!ADagxENC- zaylMkKVogFBS=Q~5J__Ckw`5$9$e} znwl9IOo?vs7o)4TtSf&ScK5bx$nHf67mG3(>@Vgq4v({`J`Al1+R-X3499%j;&NoEWB)Wz=@ zhtoQk4?@~XO+{pexDEfJOPyU3f$Ha(X$saX6h4EGy$mB`u9^XI1mkp;bj9;y9S0LV zA9udvLqnvT2c#2z4NU88KJ)F10VNOZNtC}#ksSgGxQrOXpe?)CU(^hoh}oANDv6LPqum?GQ*3HeR5 zOm$fZF}3S;p)Vv0d{o{LW+O^LR};`M2+u}0VGq)C8bywq(*sQ(fxs^Tolgf6# z%?M`_pfZ$W&!bgBVYSxN!)Q)?F2%~)N6YX8T$})kn5Z64z=qJI1Bj#Fok4{Vs?p2{ z1c|t7H^jO$jwrU)W5)Tx$s*~jB5iX`l|j|c`Z&-|vOfl~XV9rQ?-G=y1glUh2c*c4SSuqMNfwMUmUNP{#;N^KHq zR+o+W8l*uQq&FAsyTG1@=Fx=rFta8xHJrHJ%!Mm2|5Z?8vE4s1<9;zR( zTGlA&C>&!i79)$k-ng{dYY-&hIeekFnqRz-)@nXp5>M3tE}XJ`ma1keVNh`c=R#M`@^e9P@wzS70793|zmuYBbwT|CN-`P9k3-gEm2 zC(m;7#eg|*fej|183diAg_2^9x3DrK)yhm|2XR(XC31nhuxxW{$PKz zPdtS})eb8&tQ?i2XR1r0Wn`)ZTjA9ktc=}Rnc87@{p()~QC4*|hQ45RUA$3Obru(6 zW6n`gdlg-c^+NrqHI=5%h@H&^JLjvmDOX*gZMrYAqMvL~}KMxN7_ z=0~;%>t6F1!|~*xk|7BQ%f!CWUUa-`4i55;cf4bs zCOL+8%)>se0K+@RF%0Ma!@0LGj&J;99`#?H>Ews5`tRh)_fB>XefWVE{^CNzq3)`yh@{~;JpQ7I7y5x+^^xI64)o(ix9|&e z;}{JzWDQSNcx<2s8tFzn`_p27ZnE0yfiJ|(m>PaV}n8*|`g-GH4rOADPm(9T$+k1e1218Z#a8Attf+;xt!xCYvw4R!_{ zopT&`;yG^oE%2}R+@428kGXyAH%UFWDf*z*z=$L=hS#oc$`&(6>q z?9EH|yzTe)!trBzm{eiN@q*lfL0fR=ZiuvaAF+=ZZ^QIj-3?UB z_WF3WY^A%J8SjFiyFu@U=mYhE`k)^)C@2_ArFc9cg@i3gp+KyM!o_N4;O)|nil~E?8N2fBCtTJy_+(n5>Vc#VpKt6G)7B? zwVcshElFxAtUem6{`SuUe_W){ap(btx*%Ts15GvScA1RQHk2S7L`WaQ_DTwlk8TkD2b9Nj196-Z!Wu=s5r@^N!{zCFbBqK;DW#ZlXl5n_$pd3xkWeBZ6cU=k zz(61n4ur&@AP9sY2!kLbf-o?{fFudB)LJI#y}9App5fxC61Jip?Uj>eq-Xa+o^pqrIOoA1>kn|QBU!<&CyDUXVu|4m0X&(rLK=U)Y0 zs2+TDbeME>XhSlv-7NzrQF$4R>*O^A$J%^m+5S(IovaUZ$RhyZO=3VJ^k_PUPeq*IUX$ zLEkHagr>qvdaQ2$#`V*7lg_8b<>(NFt8WgAaywJGcqnQXA#p|dZ1XD4131iZlsJ@^ zO+lr=zzkT<8PsX9g%cGE7#8#n){I~Y$1}Amq6WJg8M3T;`Z9gEmD(Pw@M|4hY*Lji zN7twzrE-m=t*=uaqhmpU<9#ZAooEQ@^iS6CU>I0miF2@>spV-*^7c}mW&xiEoTgm& za)DNKXU*{?0bVTdjT2j;=%=*uqpk)?2n*Jogf21}o>3Tc#lu<3e^0_Kwb7W8G!D2c z)8UW%qFHlKbptV3J|z7kC5Wx&!_l8dsAxi8vlt6~niT$i?1cNH6oo3{Exvovrt6h5 zSlK;^HBL>a)jpKpm<}w40E4Xs{(ieF@y?e_0BZmzDN*A41-KR`4ffNP&oqGOHUu2D z$al(F<7PqJyuF+Oj0vQigcSPl!UqqT)77bYxh{dm8V!TRVkC+G?+kLQs>_8o2 zI66guEaW*Jr-<_4L2J}`OT%raY{MQ}?i*i zp2av{wcd6nXr2dX2t$eCawAkWm?-X+bKp{Ns7H z96`f!SA0y?8-8~U3{so)&YNI-FiEUy#}~a-Htq^tC)?RdX`jWv$vcAB?Yv9n6Ot+Y z0_5X8v1=+7e=#J-T#_f|1iQ7kFcn7B?`OW$cuhJfKeFJWoD9uct=E%!h9&z_+Y? z=A-zBOkI`dq^ST|)@s%ye+_am+M5rmf;@`b0F}5vytpkHr8E_;u{S7zQYjc>9h$WJ zB&-UYhbW8V2yFYZ7*3o+btQZiKqMn(I;=eHHCQ;cw8)?0Vsye#}nEET=#Pc6x zw1Ba?1P~AV;baAWA;jnv3A7*uX&5`!P0NdA;xf#IdTVD>M=|k6G%$CB1O_E^7zx0@ zBp8PUUr^8e_Kli=>z*q1bLAuZvbVPL5Zk2MZ^X?Q6Hu&?6`(3X4^S~`@YuPiD$yDzcc`aHFO;Sn# z0Ayoi9Kd9@g1K<@oAwn18v|t7z5NZOLWcB-C*KODUQVEg!mw(44A$AV+VAc6`;)$a zspK7dX81=r-woFbFco#h)$m@ zwFDRfPo6kI3&mIB)a)Bjh`l`p7CK@hdK9##+l7WJTMTM-W()qpWiJnW#Ar-Z=c>9S zf|I^js7cY3S8ISz)8zu6t-}h$<3mz7Z=Abe1{G1+2#)kk(gf+L=RpxBcGY@=nfn8D z^6$;JDRYq{RftoCF$wHym3`*j4pKs*tNd8ywA4x}VdGt<%0edgSlFA8FBr^zI zOkkCe+ux$bA)b@L%sHbk-ZdVzjqlO>m%h0%Ydr_nU{#;8#DxfbVO)W*1^~#T>fpj# zRa56=BUrz7Q{K)B3~6*TCa_Lmw(?&%up+o}Qj1uJ4&|m~ZYWIp7&%(hwk3FPt~*=J zwdf7N`o4lGEJMT zSC-eI60>SWI}AbW`mr3tKwv~(ku>2ZM=%S}#Umo2B!^NjRkI!C-y!M{ zkd}p8OyGtPP~r)CYF%z#oxh1Zt#Dwxek%*^JGRpUjyvv~vDGLPZh^vB9^>@#rFtz; z+qZ8VjHAxz>I*|)LH||5H_Ew?;H2gEx*Q!T6*8l8djbQe@FdmNJUbwSsI@+<`i%zB7ox-+!ZQnz89RD8IpR27kHdd-FmWJc6PYM?553yzq1&b|Z zmTsibz)^UIO{Dae(q$b^-_Tj{?+mii4w8H+!t$!sQ+n3X+RkZ(@16b>GUpqg;1Pl- z`fEcvIGai74wC~@S6ku82aX0?8GEmbqDqE~B6$@vgQ9s(k!x1~)M(78WVjGMM#LKb zMQIm!L+w3NFXL466a}hHGO!)@Y=Eiyn}0Lr{Q-dy#74JsL!Oq-ihdn)rVSwn$gXrd zQaIiRsgfM|WQ;BV)EeCS(ntfa@1O~6TCpyMul1wZ@pxQYAAF4_Y(XyUO=H#VgCBe` z+e=b{svDPXSukwy4P2}MG$my-Q!~#)mzwjCPS$3Zx>|#IwyLiMd*8~i2Bq2NXX{@n zC*lEr30SYSEb+>D#xQ6#2Ge6^{UNdpb55|BFGjf9Bpr4^y}5Iouj||hQs0xu5!8K@|KyJu=ovypAPY9- z{FD3=+dW-0ux5xnP0F%lnE}jK^=}+1(id#d(d1rIN>)Qf$mji#WcqjkxW#ij`rjc$ zwVtG8F60t!5Hh;n2OlJN+!T}mbvrH-PNiJ?$vjfmJk^-%dN@%JGysN->`bblL|I;= zM3t^BbV*mLHBIdKH6?3vlWeqZqSrhLOk7O!We}SL^n{*S@#v%BO#v)P05)fsOu!CJ z2ma$H!b8J3R1jyq2Fgu?)4mq|qCbX>E`j;m^SF!#;~#Acu_-VbKaK{tAZ?W3__3gx zD)e6)!Joo|M{@hc+Q+)l-doBf1Bn2B0Du4#W-s2~Y@JcPIk*+sETI!kzi{kVX3u1o z@W@{hSSwFq^C|o(gD=4mkMlQ=^ErR>H#lc9mxKYOz4ew<~#&dZ&Udzti<#sJx=FYiW?u;B{ zJ2ILQIG2eaHO>9fooJkQ&;%|822e;Gz*Haz(Ctc^Vi!pXGs;yo>vwSuAA`o%Hx&Mm zz#_4wqk(;vrm6Qds#(%hXPxApW1iyKowT0PTFFx%TCG~w`n~G52@r`jcWB%LhPoI& z;3>KogRC~teJ{i45G)gG`1+(fYodGF&p-?m8fj z?~`CBoFGbCfz(_o897a`V4^ruQRFW5Kd`F$DYQ+@tF|=Fsz%+5H>~pozMvqZQVHzo zL4Q7|52{89e|}yeA=HCDGV;@sVG1wIHs# zU>~^KvGz{i``$~vi==nH)K~q~Q#D_N@?W^fh}J3^Ilo0U?ACLI@#*7($Q{5t$jWvj&nPTK8{nQo}4lqLhsQ5Gkx@ zq{U95;cl8v!KpIpoJ%UA%ORd#0@op>Uf5p!1oMYCx&-jJ+P1ZOp~^}`F<=j8cN7|w z75jc5seJ6;-O|Kx@rR`-{+jOx>#@FZ%MC3$R0`!?r7~oGNOWl|hz>1H@z$vm@*fgJ zYT1J5(9#ro+mkr-5&X|MNoZL7mRWQ_N}V~in76cdOE6qIBK{7T@ziN;<(m)@GP(8> zD-!4T@8>x1&Oh1#=v(Li4WZ1*k!R$&n@zgCjO2A;a(hP=ap^c7-i6gWj+~O;3I^3p zf)E&dF)EfZZv7eYeeP9tLj-gXvOHb135hmfAKNj)W{q=To39A^8iz!Gs6K=x5m3P! zn-UYU3Z0Rhv4BmDqYVffnvB*Z9AUWk@6Hn-;2wwh#;ym;XsRv#^S-pjqQ1g3qUWZFd1c^ z6=5tMuLf1X6%GPiA0Hy1O2>uajT`EHrDOC8VvD9(-sCf4gq(+1P{pAMI;d410Spj! z!3B!m?I}bwm=Kloc>W{D6EnmM`O-?&q{uo2A8sLq)>G!M!{5pLehtW2vHSUTF|Jag$<0b5=rjR@IQ43qLl zMoA}p3IUWvxIG8oDEh5EF=p;%C$z3%W&m)a#q~-dV+2SIvUl9S_+{1B1I;=I3DGXO+#GG>cuAnx^B?*Jmp}z(s ztsY!KEm58RkwrV3pbrujiYq`%1Kou3Mr=8!f0Kun;b#V5tx7*_eKT(ndXkz;Rshy; zxI2Y5QFiJdk%$7aY5P*BY+ze;F*gXF9YGz(3^aLVX(Lv%c$##me_W7QB^6$iK3~J) z>qia)ISH7&pcafduv=}G{@9G(wK>1MR8pkGZw$z*Rm9K4Wg7l;8w%6uG=9*zB=T)!v-U7oO|tA%r=2f5T?T9BJY)@Y8wHx;=*J5g3KA7a3}ZHG zP>h1z-Nk;Kv=T)D=P^&;I758LL!`KUrNY?h8XvNyYfBUc&!AT1fZ`3+q z;>37+DdB9>_t7j!>_4|;&8a*x%;%$JtH;n~$-(S>`SQ?ZiF8bb33l`DX)WV(40XVAG!}FVu zegIkA1-B)GiO`z`ls)g4vIB-w&wMK#&`378mB|YuX#jGtBb>appKcx6p4U9fji(Vn znO6Y`!PeYfWyPFrQD%1)mn8Tp9NquGFF6+KFS_>W!yGZYr@4@iIHIU(d+U>!Qx%Wb z1{{vXkE6;cluE={NkP|!5^Fuh1kc$_|I3JVPLlB|*s4dr?hJaT*FdH%DIyFa0LIco zJ20he)_A)?5#Y%iRAbO4p`}s8pSAF4nvls1L_H`#gWs4R6>MB0Sq?LXfifv6Fd`x% zA|iron+}HwF#sz7F#zGU32e@-*&H36G&ku0n{&Gsuq$FtdcXw+!i|rcQY`jbd#&Zz z%%#1|t+B{(T%HA!%Rb2_Cl`JG`t&-<@AvW8vB$?l-(e=$9Tyi5Z=Gr#9_}s9t(kR- zB?eoWdZ9cKh5Aq_o6e^;RLK{0;qvm)rPERArAv2&)A)!^GyZ3k|2gd5CQ~~5FiM|APA2@LI@&+5Mm-R z5fMp29spkgydBe@!~ktI?(>ynCK<7DYB*(_ddzC(<6$Z@s~I(zHI71N8MB_L%2C5i zzB!mBOjV8=V??&h=Z0VZUim)f1xH;Bmky0T5Vo$_RbYqm+N3VG<7vdC@h%}rhaz7@ z9DDhdH~4Ue{Fu-p1db+QJ4HlJh0HDBW53;-bH3N z3Ws>zF30vJ7Ca0aRs$7^PI-8t!GYQJXevr;r!jn*HJggkIxtybu6(k)&JF-etFXCt zuYW1DIKA*??C^>=yH{h9sa4F}iIN~ZM(kQY?+Fu;jZ!xj_npca9&Cs%|8br)64~@e zp~1z54wv}JE{0<6ed)Z9CL&xDDnYnM?0P=$85_Z!vNjg?mC6||Y>2M?@t!miUG%-N z6O&tl(23afeBLuQf;;80h#!?d5gQnW3o35NuySc)>Ob^O*a|JWE6GF^(iaz?*mpCk z4_twKwMj$qV%G)h|HC`8syqS`-)3uhayPt<8Ii9C!|wa(c^`PYNhhQ)*ZKI* z)C6{vrP#Qy4@D1ESTDe_{dy9lgQfq!+2i}e#b&JT&^UAL?uX`nq1t|J9!~aJ?A9cx zrEjoX;UF4_h6=(BE@ucbUCb$yvf3Vdh?4Q8Gb@WFC#Hd{w(WYiDjuABU^XFq^<}LI zn9~>uwRp~-L=bk@BYpdW9UdpzZ31U&@?A^xgk7yQtrjE^sgT+Zr!t-r(-0Q!x#m^1&2p|4zY4JD*@4n{U-lAg0sf zDRH`E^)w4_X7@mMEO9yxKV({(*coXU#!_8xA_(V(Z7u^E!tmK%@Re0f{t%>N0P0bI z5J>Q@I%61I`nUildq|+NSR#=;X!1Nbxr*b^v?~Fo5*06)nk5FdR>0sM2o-!w$a3!| z;;=X@4vWLmh2_9A@C-a7(rhC+$# zSTB~Ur4m=72TjGRb0%TdI&s2uVy`C_5~YHT9uh~Yt}lqX03B+olD~w z$34UFi}5q#jCYM+jc>73=ghivj!TzrQ_fk&G1eJ3dWhpyJKtDmTC!e9;nJ-|xb%Q{NFQC~5XXf+4q;&ESeu$3rl%I#-|oX(C_1oX>Ut-W37)aa){^fetu@=8vxVb117@E1+yUm49S6@ zQ^_zd@z$NCOrmg+U38Z9&TKQ-otZH-M&d98DURM4&l7SM*>8;ITZY`yf(L}Wv0u(< zZmj3>SGLTOIg&xI3{6Jm5z{2CChVH8v$VX-AtrTEXu2^{EH!?{&j?yQARcjXx#YU2 zd{b1wZcA(hNb`tKJiIR9g_-W*%2*z;33R-<@(8PVL~EUW?sTIj8tEjb(Usjc-QH0vJ$$z{aT*mPV!#hy?2J z-QhFn_meORVjGU1!n2Ysdsah&=C8kcNuv9XQMkEj@H?5;~wC_|TDHO_P z#fE-E&8Vj1WLjGcER1da7F@OzTWDL^WVKh##A#}(hp(0X5bYf`ANqtEJT!pAfB+7f z_9Qt9ELdQmfP#&U4FLfNa0m#%qj8<4vv<))9uTwq!I_@sX?lZ;{@|gRUg-1CA^gK5 z;h#IOfwkUQwX}AgrZ#(NBVC-~g*qY6V^?whwTouZ8IakUW)|bqI|JPp-$fn}ubAX5 zr)VefLcWBa5C$Wt=Nm!1&}~D*DAxJrR_Nna=;NDDi(ol5>(VvnoSHT3)FsQQS(j$b zdd4wa`sWm%rt!_JPusY3YZSMP;xU5S73l8@))<#vcGVOYdG7~41&tn!ls9^ZkGyx0 z_jIIN1AFf3MHnL<@A6LH#dygH!7=fgodb1D^I4ph~`_1F952H3VqOf$FM*^MR^K2Lu6v>IYEO@D&vUsBQpN@gyg~ zlNSNi(L)q&HTg;B;pyZd3imQGNogrfT6>5}WfwuHU-gsJ<@s<^)y3bds1tDMS8%?o zk}fV)EvOW9sf*nHlN)$dNy$|gxlBdz-YY!AHT=SRFL`J~!4BAY3lRK=ryl+WyJa>s zJ)OLVoAzdY1auo73U%_ve1-R@Q+TpJLyH6u$DyQTP7O&~kT!F`U%cQt%VY&rjmHMttzj;E2`a z)T1+js^0lUq3^SAhvrOhYkut;Pk{BJJp&zG6JZDI1F~N~KXqiY5jU0`x(pdd4 zDRIt^p+Mq;KNoqd3qznx8?%TNc1CVx%ci9uw6cvRb$(n-YOM`<7hs2mwN_d#A?~2B zP(QR7{Q}GmL$8qbQIw;va5Zw$qNt-;(mDlx;RmnP*8a#V- zGhZ^=wf<%08IZ!5&889BqGzi))c@N$imeD~jqnwcn^p)XQ35MR6J;kBD4A-U$%g4C zG1KN z>m%4)0&V5sgmV4o6`}wfD8hkyH>C{}ZvkQPV@=j49Hh@}m)6Hh9dycy5IwSTa(I+@ zihhJ3ljksL0aqwcQ-Mu2;0-eJr@kl8$fhh%#-XR2Q<+*jln2-HGA3ud;HNo>K|2YL z#L|>lK?56@eCCy{qi1anTIoboGrmXBwA!xnQin*;cW4o(8Q+zf zqSJH{tK2F&9Ej*j$}By(Rmd%|h?}9vwzkUr8Fk9~FepFj9pZ}3E>Vyyrcz?M#gNZ4 z8zi+7PQy!ZqqGrQ&gI;r?=iT^iSxKS^GPFY&O_IIe2lP?+n-QEhk+rL3$OV?`>(K$ySOLpAKrDY3VS2r`nKxBnv}PWU z9m|-M)&R{Fsl`8Lg_+tstuPO z;!*H*72_8cjk6?_?s8$bmUWnN$HF5H;BnI;{DAOp^#%;QCl(8bg6i+lqAz@9QHO7C z`v-&SjY1R3ZVGj>xQtLG3b%tFv&s5er5&t#y2@wh47EXk9u(c63;BZ$Xj5}1M+@Wp z35DiP!9NebjA^WKe>N&OA0N~pU<&y?PXz_!mD9!;)294D_J4{%Aqu%*p<28TZ-_V7WPp4R3p+&tUR@(e3I%Y>=wIq_a0MOX;l2dERo_q~PmCP-=( zC>#_hd|A3HpWzhQH@W?O01;bDd7NYR*@JYQ8KW;HwOSAKW-Vzae-Su>B>lZ>|6zB; z>dQ0*#_VrallhCJl^@YljwlLsGrU+`Y8jz6ts);@+wy|9=K< z7#up4Iv-Oszc%3#Z1g>$lJfzwu|&PFVrB{W2o(EmM#I~Z4^TkTPU!wvDyH&vYOvq` z0Pr}xF=vN#Jv;fZ(nt3CYld1tp~nd7vCLf-@P5f%y=Y~}kRxJzN=@U`y8Jqo!t({{(@a(Gfe?nUguIOs9{I(0$xU;uHN=h@FT7Ih znoh*6vt@E?@C~xMXH{tjAZbeFp}PJ~42N4*HrCXdVqWckE;VkYRdUN6j7Zr=Q-QcL z=7<>~H^+A0KW0K)qvhHuuyWjiCeez$TuO|JW=c#oKF7HQL#!0{`gYq=1CD2!$vL!ozp}cgGHNvOlXz&R*kC{O*ro=1az_%mBMImKogcL_5 zmbp89m;gp-XqRhrZbKPL026=oerZ5A-}eVYgvj8;9$kS(o|b>`{lnf^%T3SedkXKUc8A3KN*S&z!j(qO3q5M93g|4I0Q!E^pDf zM{qazf~nxfs~c=nJ)q`Fxx)Me*G{m2-p_7z`;tlNM!eq=dHM#4ZE7=#VA}TQVbk?5 zd4jOmQYz!w%(U4PSv9_!;k^cfZ;cu~N{Sien%?BTGn^ZD>GcjIRdNWk@Io_s5gWfj zu#If$7SScJ^Ks%RVS~J>a#mMifm2kCbI6+k$x@FpYS2gwR^lultx3Z%*bzU5;2+4o87nas zHlN5t)`A6;C>-=m7<4P_oXbE0W`Eno^1e<$DKELuFoq`?fl`-9{%i95>BeoxZp?r{7P67Xb!V5s(Pg1M|LwFO7~uAw~c1a+IJW^FhM(*8?9 zS?%wzycaQqfV0PCs) zoMgdghU*sAL0ep)?aH#1#|8i|KYGXgz^I?+09rh_97t?rY%u7NwJ$kjN@)W<=>Kz7 zRaI40RaI4eRaI5}7ffmaS^-u8F&mW4$R;&FPQV%5VivO)gh4FIKX$}IurbcCFec#! zb;S%=Xk#PI`K*8jDDkk1<+OGu-nb|pVU>m55N05 zb3GZ;+ZbI8a3)G?NR8E$1EXLKj88SG=b9ZWs4?+{jz^S=BJKiFy{H@VEtpR0Svs`8 z>C9ergUiA3XnZn)r@(uC4I6lg_qRGHn302A!9fmkkbCTqZpKQSuOp&{MatXVv zZ%5nFuFIM*aCFU|=_5<7ErqTrVM=)UQ)Vd34P_bB4<+&aF}D z&-C%LHDk)4sVh^`glv^QZ*eJZG)Z1{1HOIiY8$PFAR&+uNEu3| zM0AiSqy#cXo{$sB2PBMiFd!zF6Q%^y`%2UiabID?f0y(mOwEm+u)L8_*Uva%iB~~m z#FxT55|VuLk?o`$!Zn{(kJtuuxm5Y&lTXeCWj_+17D1OIuQPqy!J4dzcQwZ^R5y2R zhZFF}A8#ZB!~t7xf3zN-U2?BWTV#@Rzu1rTdkIrMyR^k78TTW3bCZ$8{k${}3y z$@-xkAb4_md~(qg_TWwn7Gfbj(TyoE|Eiu?j;sgO7dhd9R;?a&VSgwtXgwx~Cv^hJ849*Hqtm2>)fugW=}BTcah z7vL4r#V6_F3L~$u1BN{V6KJ^cAWU<5jIs?D1mu#4IOd$*@=!QCjKX4;Y+7u9#5A1R zUF;1#dtD9f@+BgFllFO>nW1Oza%-F3^{<27^TJO*!q=WQwrn*30V;H~mJQHG)_5-- ziN>R`csv(Kmr~2k>RoPRqVq2_hDT}PzjUv{OdUe>Q%Tq7|Een?(J?*io90yrPu<6L z99SQG$cw&H%{r=H%X({s6CKDkcm~gL9Ot?3RjAFQHZ9{RU2~hJUmC{_?XY#NyQxZ1 zE&8QrTIP1k*EEd1D2KJpFZcwXc{i?aZS#}&*V~G3T3@h3hj5j5DXH<^1w4;a#i) z>VNZR)xUZDmg=eQ;acXjR?*NZz0xYr-8zk?Ug@)(@$`aG*C!7=u(u;QnugK^upwTb zT%A#HWa*Icb$#9Xp|@N%il0l-johK5=^Ocwtu9HgfxBTTPzYJ4`r~S#5SMhd>l;CT z+;1&G31+U=mf%DjL#83_ve}`!$IH3trJ!_#+u7yT9 ze-e72(w)VPW*IEzxb>&GyGjU*XsA6rV8i@fC0Jo2lVKc#GdWLTQT*8(Njl&=p*Qd$nZbtAoY{ zdM+@&9g!nb4+Vt*s1wBDKl6M7f|x@LjmV6Gw#7prF#stL424R8P#_QnhCxC=7z_l2 zK_~t=lsnq6Vn>cBO4Wkun1=rPjr<9e~%Nk)$Gjf2~ ztBkOzg1GQ#0!qH67K5$j09S0TBYhvqwrS_wo7N3$X}_ppRYrMDp3SzDEYn`oWy$@m zs>GLmnZRVjxZpmTh);PBB*CGd zGr^tHPxdf*{SaP8|8*;yxH`lZB$VVJP8$DBSP=VibrA+);u?q^Lwe=ZXyn{vyHm3j z`N;f-EQK8}_xAGMgDk^w5wL(@q-KX0OM^=2686>t>W^rE2Wk|am$xbbTgD#dv38^> zmR9W#``LYI1Eux}i1T55U)S@dHYOtUsmhT5w5Bj^Hi?U6n2S;``$6)Fj07Hxaq+9% z(aavbS&Dfp|5u8?OA+I#MPi~t1EB9C!zIbFm7F9x!*8<*I-)9DJYK<3hveMq;m|5c z;qi&At~qcK<=V66s$kDwf~1a^VZz`q{3R*E^McZ7CL$k3d7$SIkThlm)pZi@%45Vg zIKyRllr-r30~Vr}dZ!I=)H_m!dfAwABp=ZkeLc!kyU zO#;3((yS~a*c|l9l8xEqN*bofzfSacq&0&O*n|akx@qtp=w)o~qP8e)yS2h>Vd^z} zBpR$CDUd_v4wMeRuixBuZ=)>^;(AA#=kagR*F;;Q5%^b%+C^^#6$_>t0L=vGCO|g; zngQreKsO-*z>m*H9rMy0lAq}ytYrixi=4aYH&66rMPrEnLDm4)V&!k{v;e3MFfoE? zWuI9lbC4hYDtV;<^mlI}sAAzlhM6G32_(vi{_0%^rzjZB5frb1=NfX^yhtD4qw!A= z?0O{if&joc4zPh_Lzxwshp-K_X~gq?St%wgp9ml+5fP;1c|dSjgnGdOMj-;@WXqtG zv~-C;{`YA>g8VQ{C}1Yj?jlTV!@y{qEzkfmHKvA_!M5d%vHEgQY3Hrt5$uI!uFt=v zBZiV0Ok2fx4qlQp1l1q1<3ryWRGmjfgiDlK?L0j_hR^Uu_VNzwMkS#dDw`K?nP!G`!&k-=Y7AvA$%nprrGrpQ#qWb04yM$877alfOmeN1r-ETere62tPl^-bK8ot!%9LmV zk7YGjOAvyzK-I+zykO*bK&Q(4yp|3Y>wOgXVQ#v{;T~cjz|Bt+2WJj#JO-X z+u<>zb|xQ!2FGEP2=vJBG03>FvIG;SO)9l*-bK7FD4;UZtWDr!M%wf83T~}zxa|+z zk@MwvYEljRqD5dWdm1iY<0K{Bj(t<4OUKjVD*{d58&7LG3;Ug~%sC!YF$QWNMu$ig zm0e!m8j<2W1z?rdI9)E;h11TA@VZIva~+w zCHFi5*{RkLSvN9)1!t{u^b~L@DV2Nc{mOONgMY#Xe*(uqO1SNE;6XSBv5>ygJNW{f zLLO2pk=BB+)HS2o83Vo%Kp5TeYPO0~ z%v^^MAxdDt8wGbM`Sk8Nd^A;d!p5?WeSC zc$+I1hr-VC!mVqZy>pZ#O}FS>ZTGZo+qP}nwrv~JwmogzJ=3jTXtzYcDBP%i@_TG9ewh8h2DWXQMBUHeNUjVTKRi< zPk<1)qi~|*a2wJBHx`m3vq^D-lg3p^cGlq=*|BIZF%o|MMG1=g7*F;zcdScSg2a&~ zx9KGwgCALP!FBS^cH=#M*+ggL^?PbY=;NE+M~8MVJSO4UqlDNGX9 zKe0oI{u3`G<_91di;$ItiJ6r-+wgs7rSB^~03M+r(+|Fp&Pyi@p&jdV-z12I^;hX9 zIX?k~H+3Jp;csGg0WOM$Y^bTyBSvJ=X6~#2iuWT7;YPTySp(?;imDz~T|V|$`HoDP z>LWhQco{VVp zk16`$uEu_+wjXXgkox-|r-wY30!Xaq=4W z1I=istQb=TG>u#XYsQ}y60RNVPaby+g2rYGcb}p+z4gM)+ZPyfp#$#BEr!yQZA}kB zB+PQ2q4F_vlYalkYV)vRe?xJs|5hvhZR z|LrjOMSukY0ik;PvMLk9CMy0V?KN_! zU&%+Z*vnjcP8khq4Ou9q*_cusvq!=e%gc8Ahrj4Q7WqF(7C`{VfW6eF@W0=#Zks`e zL2E(VK?gyrL95{#L0h{)`-J%jCqT0!%r|;I6685j3aXy@l;!7=PsYHRFX>+{|8FKTX9vn+cr{la+H{nYEN*h8b~Rhib{AW{6s||qfB;s zRNi_)_QO*2rGznB5tCIfYea>|v^{sbaez#gCeW{T_^1v`-~bFLp=Sh;|BCDu22=+G(03hi z8*v};9&r=#81WWy6>$)M7xC~M@rs+za0KLVN5L=sgF#uBq`Z>9@}OcOW25B=K;|%! zJLZ5>yA)8az?D+4TjZitaXw!fe%Q0zr}A=|KAi%zUw%jy_mh6 zy_LO?y_&t5J(oREyp+ANmc8+B9sOZ`oXWRLD5(0Y+^J+RcjmBgq#HBkQw=(HX@L|9 zF{_3}MbBlFHB4vmmGW08vR}xfUdS7QS2C$&^MzU_k11iAmj*H4X9t|eBMHN z)?-=JV;KXr8YY!o-oS#KX+=yU4~E>agcm%}zu?$v|0nq5eNQ78;D>Mio?9S(*<&{B zw<(oqt--y)O~LKKJ;4pZV-YREZJoj0|AlCfqPjT@F(&#C;!Sy2O+#ZR zZ>X=CLUhNNlgU5!Gvk<2us7fWUo~-8I(?F-vXJtq9Quu@tp1Hi9(qzbRvzAHezgZ` zA%IW#FQTyee@y)3X7CUU@C?W=Iu67ia0tfvwwk-tV1glFK>14O-_Z5Y{m|9W&CtEj z<PV`{E(K!v8oqwaqjEA)2gF64FZHfLg?(iK#-p{cynR)Ni7iPI0K zf9{e2|M}m3|GqT8C^8rvum-c@=+zhBy&wt?V2I%W^Q1UWqpJi3wgCbB*-sD349X5F z4$2714Jrys3(5-53d+e3D#XnvIQgdmUhRTFG5(j1C6Y8V8aJkVQ5(~sCdaO0)vX0o zEXKzWjEY#W)gDJnfA7n){FVKxDEzRTuuu!bs+DJ?Ro8?b$x5tJ{>|%E^FKOH()^DA zXPeu)zyNyeEA@+g@ebV*-*~W7g6fI0HKAEzKF&^93>`zHiT}ysd3xDXw zU*Go&7o~KnUol=B-c=lO`4$Jn|8q<4)cW6TPX-Y{g3ZFj$i(Wm(i(v<+9iKGm)l$o zkD(4nY*C!*TRT^u1goS1{8hQ^R}s|zv_<*^42^NKpIveOfQ8J*j-^u}a}6mc1nFNm z`8+&ZK`~cG(JhMZ7pPA0um?-2w1?y)9tAIuRj!7g&OWpfb$ipO?ZIlqKrUf}8HpyL zIFC;Yz|NEPAw0U5C2C|EReH1yVB8h3UgHYg3Yh*lA|W?p$=`@_3|bg+-VuV+XB}=# zYj&{sqNJr!;SomVg0p@f*rOWV4tZ~3gPs?YjTd-gk21J}M#}})JDT@8M?xh~(k;-$ zD-kgl=et_w9oUQ>b;Kjug7&zjY1JSX4Co0rWWXIGZfX79TDn_bqgoVj0b!d!=ni}6 zY~sa)8rSH)p*RQq0G?OX1Gv5I+|Zm{RQ~fOR_qmDP-h2fzZcBbQ&EF|U)pRJT$HwZ zD_S3%Gn<i}N1O&ELSSxJ5(An{XXlXBBx+kO6&wKHyX! z>U>0^!so3YhVal~WSJHNCaHLKu^{R#zNkd|(#gJHa{&;6)ZDb=%yRTCv@{Vw>ZKks z_9)k-Qlg##9Dd|=FHzhw13y9n;OP2*EgZnjB(xbkR{QS(dpU}c5;FliW^Ks<)LDpl zXx;(T(m6zxRu#7Z$bVWM;eT4*5CDJye%T8afWV&&m9I~9{Usd0aBU|)4g}?+53n-) zg(9(iE(5U_m*xg(qj7xCtOK-LpMZpcJ_Cqswe#^<6E78vqOdRd zR))Lkx^d2;sD?O88SDA#3U-qFUjL?cOnz1s!2SF>JgL&mpogw)RXxk9d z*1QT@H*Q8q=^i|WsZe2^uf<@??0ovsWp-l_c%n{}5V57BhtV2W#VBPeGkDraUiO7x zJq2$%pFLEhZypS6#E9lH5i1TMQ7Rj|RO7NH_&D}QYY-ew0vWX;F-(&cKUa~_`WycK znvhZnSF>v#MNJPvwcJ5#VO0YjSIMg+0jp{tqpqhqlh<9!q58$bTDG~6tyM@w9c8sE z{wcPXqsKLz@-u1e8kSv2V3gb!j?YqzObjNY02V)|+kzQYrJ8Fz5w2WR=x4r-0QK6B z*TKArC$80$93Ew~+X|YLASd8ODD&zLmH5A>$%au$B*@r!pvH__4*|7p;9-)bctL`ia6&*sa`5;i;nz{%I>lX6f%9O9WK3J|1IaL}`Z z!>+r=BJse4MA!x>%(9zcO+bff2CMq;%j{$2!s*-G;QG`k*{fyQIJaaIt}sPwP8h+8 z)tjO0$}>WR)zhSo@N(}ZUH)kwz7XW&h>_2S<#*S( zBK!pc-dS1|idCB4Ne*v4x$apespIWQ_gpJ{{b^Ftg?Gx*qffDF*C9pEoPg|^W|c>H zinBqXPQG>-OBAnVNtVGoA8w8u0jhhljV?-sZ9)LV@J0Uhy4L;*5w3M&&hk{HG56ys zM(hRGE=Db48K;B8U)7%mHjAv^xI3UhGP*gN0u58~mdVbsc})Ehy)843p%+s2;@e46?>EEu8s5@A+w z{eil58?Ebs`umKsL$dsFNh6mJ-iru7i&QrYY?};@RWh`vE?kGoQRAP0zuf{g*5Q6phH3A~zgx-oL$OBo=V90( z)eSTVBJ5|%1#io#1@a*RfSgBz2>`|3_#vLFv8OX!@@*FNO*+}46g|= z;2}p10={!bhY1>ekFXCiz=kql1PMrhCK5n8NnKzWmlea-oV(4KS(m7!Qc{lfavLE%6U8pA&)9pgxhTBEG$H zV_;?=BglpfOl|jxUWP!AVq)GGUL3a)nX=-K(nnT!Atf9TZg>`15Mn*fhp5_@LWvyHh zbhLt9NNe@zMLK}se2MBe7vRL@%iNR~}8(+(Td-b4)h zwek@TWZ!795|X~ifn1|G18=rp7! z^Xa<(Yan7Wc5zW4LU@7&L6Xp+Ou7@ZGpTFJ6_o}QCtu0u=hN@$&8}R3oIm!gBMI~$C-C$7#)Ie~=G-klMHBFr6*#(AI(OZ}jDrYDo zse$oiC~a+bngSpwgQ_dIh_B_OItWQNEOAa|1naOk=^8R4WFY1`S{XPzhtbB_Fs_rE z!8+2jj*94eK3_8l6dEk$lVc?s)9$3`l#c?>xti3mNtc^031bhHl8Ieb1$dPN(q)t9 z=mtNDEM)IGcW0NqGhx1$K0|WyLiT1PeDIh=!vvrg?AnM#>S+PwFg0o()ETg`)b;=a5f@-%qjN}`xBwBs(IU+Zek;a|Z#9;g%Eiqpx+!WEdGS3Ve}#A+xTZGA&llxpKs;T26%{2rnZVTOtaNXl;bCQ5NTY>7UQvIM98l=x|7XM(< zTt=rbK}SeoqypqraW}Vy3Rxr%1eW*ZGgpX$M~T`J%KqS2%=~Kg?RE+z#-~AGcB&`K zd-A3ZMp;<8&mVBfx?fdPnaRuUl*|*xJl$v{d&XA8#p`EEpKh{POyuQtR-WtBo#)vG zlLuK-TYn=jV=%^q5E`n;YzdEo!Iv_AEcQMpbU)9Q5|<3uds@pTxM#x>)5C`kiW%h( zfGXX0YlTc!NtM$Dj62-=>k=BSDkCCC+g7ecl)C!8Yc(UQTS7M&?L54@js{bVMzK5u%bNIH?r5Y^CMRZN;cH1q6;)9@qtoDyZ z3)qZQL%cnPnIH_QXE3ManBFUIC1nE^KcxU93 z-yKHwl?Yr`k~}9SY?t~aEMbuur$rWm4br#cB3QKTs$Bw``{$)hjnIrl7NSgUJer)* znD3jbGA6--OhpHT-RGT`;T0e-&IAiWHMv+YbI%3*=IgdW*lBv-yr^HQ=aQjlIrrJ{ z?1f5GLn2%qwhwy;Rd?gDE#bDy4S0^MAPb^C`&sd+(HTWa(;?6V^3Q_-;6D!rBtQTH zKxSJ7WWYAx+E{T+ZF1(A53INMA9Yq{4PKApdh7pp1 zm>zcV9B11hcuum9m3c<(s8RQ9Jo*Da{}kH-Yco}(vk)U};6(rHkz9LhAS;qhKHVcoz# zs6}GERt4E{OFHxHv$Ec|8@_1dQa3o*HMpb=(5lnXJGt_yS=Z_o2T_d*i$n*jtWBq! zHH_QYcL#u9RKfgZ;K#s&O&sgWkHJhiLUI4QNWwe!y56Ld*DRrKvt!qCu5O~RjwtRb zf@59%bA1IWOBaKtn*!Ed8u%E-b+M-7%&$#N{Q!%7_b-S%p2v3J*7X*>UIPmn#-lVj z?){v+{Kx%*_|>v9&n`+YKELBdwLrg~W8{K|V{2=hg(b~(d6Et2c;|014*o6zm1B_x zf>s{Qh0%NO=K_`vDu;r|UG+dU4;hvuPie9_6Gz+98C1&EA%p7q_G|Rg5U2sAiwA@q z5p+^U`iKx5#T$l-C1P#l*z-SeM;h3x-qx0I?)H<;qOcx3O4>mjecg*iBX}(EykTZ{ ziB|%C=BwJ4yrmcLfnpipExbU`Q*sFYfaLvMxgUlGxkE!6}0|&9r^4PgEm>Xw_yQ2oNjHit!HpGXnf9I9iBJnN9zlP%R zc)q_ak2u0P@b()uE*i$=z6EPuDVDRSo}!5b(-mf3Zg%h-I?eXyDR;KB(+f<$Kdsfr zQ|3OEewr1tj-6Bbk9z2PTI2gZWvi)k&l|?{tw(X~y5m;p^;8sOP4+00-1SKb`S;FI znyZxDOd$~aJ45>50*1Z;YRe23KT5JC#vgb(ics}iV~FfP#_R8;K``Can>IQg{TCzr zhkZC6AlBQfU-d^euhV)G5Q9aS2t`(nh%7`HRmRIhupX>*DbjFnWs@ zpu~1CgxlIOouwhVl9pahD{E>Fz#zP6j6rE&GE_18Q5|z(m>d~j>d&K8vaeT0SbJQn zq|X9TBM7}zo!bslNjs9(N23HaMo42GSDG{UT~<(OPod!1Rxxy~qQxFWrCG}D{V~Gr z+d#tGNWr|Al(IQOTxFDQ2Z+!6$(nzW=J}{KY3epWL_0*lWvPeq&*)X(z_>Gj#TjDi z8DgPt$7wYHhgF!f8U*5JUw0Y4HOF3zV9BT}WPILmiv1tW|>A zG-*_dtb;gDvC;zFIL|jj<$I>RWrn3LTZ22=^H6Oc8|N0=i9%O1axRGS5IGPv6g6Q38{10P&&Lu{ytHjh5l1zSIxPLzD>o1Y z;iU*G2^=rs1YzTA!)H~8in=60QwK&1*y()uw$M;ghIma4;JY@_viTbwJ37kNiTx>^ z5c%?Xz@07P|H(B;l3&Bd;9vX#(w z1`KX=@Or0qawz?=evr5GH7YfgJaUNWZ~i)qzZ2^>sF55Yc5bMka>K_51a88<(yV-x z*;a@kZtN@AP5Y;6V~k^eTtM^K5)CXhe9I2&w5@Q()E0N>xW?IpJivhGd z7Z&>ZaRAQ%arUd9%{DC2pJiv`{<=tz^DmcWwRHM6badd!A;?hGEXpMf+oWJ6hZle| z+*OcC0bAh7fWM%B0UbaY6sK4z42cH!wKX+~1O|N5bSu(t8{`~trVqY*-(&gvvDCCb zIxR3WjDZx^S=*&`>r&l@%0>yS9Ox)Flo}V=c-zpkiVPQ0##8!<99SxA-)9=*=u3{2 z;CI{1Lu78*v?fyj0&UnR;DhrbflM-+m?|98`m!`ug7RhIg+xiIUE!l(v^%M(Vw{(x zi?S`#sa`HwFC&v%RVGs|Y?Tfqp_P$J3R04}hti@4bVT88A}Pc8jl(zcHCE*1>x#h` zHJc#yJ-rHG7FvFX%mz#&_Ohc8ZdsoOrTrWn@^DdQ!&=V~G;9z{wjXp!NwNv$-@$_R zNaRHLX+E#j;RB>>We-*Kxx?(cmx>(~Q7$3nY~Wpwmf|BXbZNjd&#^CkW<#X6`!jVI zdF46xc1s=yLy9BXp+!%HwFbv#KORUa!iP*FgWWb3k*i~7rx597P^|mKS+t`CGb}g-!)^s|9R$_jJ=+~TqSBGvF z4~JGM^RkhLW;%RIy@bVV22T8GbKVsolio8|4U!KZN`ox{!H4fKs0}?EL`Oia;6MYc zGmPV$e@)~ekEm!fgrONLtSIMHJP~GBLY$M7gNTws_OUT;+|VZ*R-mxuD=#*@ancFd zh^yrH$d&|wBN2knxyjm%%8Ljy4(U_R_Fu(Sgr`VrkQjJO+a&c+cZ*tY`GP(KKoNFH zs)D5jGe&Oj5N(rTJ60CnJpvw-Z*9-wW%D2KD$*56>8yJ2YKY3jdd1~%p1gbjFx?@9 zhU7o#F=+oz>Ue=0)nTTn`Tc@~l$!H}nfhd${H)Qs}tQ{zzmmX{1MA7SP})AYHj8osY`4H|@$lVO35^Yx~JTWO;r zsM!pQ6d7}!L!<{{CKUvQ27xpl*d#A>9_tjG+of;x8B$IJwjV~Ou|~>xL0US=s53wy zS=we%n1ZX}kVr6@ppnClqqT6D#%RUG z>=PoEkD>guJ*HxxP&5!?g!(c=17Gt?I*naL9#AR80xxkrMG*^x)px`tqyUDJIdRiD z#<~q9m6iqP^T&5dJ@4HRsRVPM6fb7%2=ff=fo)@y9X)AK|LVFf6F;f&VQ>&eEUtvbF-uzf_GI|a^!ciF4SP9~v zZWiH%a=X+ezn*{M2R$=IGF(K|BELj732Tl;)jj{D%89H&S%B0kB>At68q77oi9!l_ z2>$~k@xB;#L3kKhmoY#kPzg1fF86uvS!;{7=U9AS0bUisR*~FJBuzq)w<*9+O2Akv zh(H+vi*;mKBJPg_G^>#pBDF+fPGuKr@MN@iZWIj%jn&Pv%J z=bn|FeH^p~(pIh3krk1$R%=a^hemSNTHbv{;+09XEl}G63BzQX6&uKisS1)hQI;2T zq}b_7*v*;%3TRevX)<{cii+!EMg@ls;Nem(#M5v01Z)LGXr+9pR_!iq34YjO{KC;R zt5GAGvgYdSB@0=`W3Xn+_(PO3K4>BT&-SCDj72{q>T2stL!d3qqct{ji5H`*Uw5|H zP#~@lcYqR5C7OaEl8AW)VYnhm;l){;Zp%nSOOZLau_8PdaZZbHRSH>4veMAxCFmCJ ziT)tj9vP3|rhsTHB(jH4#x9#bX$x%aKk>$AG#C?2a}!Yw#zj(OIvhkYO{aC7NWdJ@ z^;3V>)QzKref(t&R&>X?4;pX^On040G%z zje)Lx^je=?+D&g3A&E<;DXamYQ8NtwB%$iS%JKpZgF(d|FkHrLT@K?~(1DB~WgGV@ zq@P{X!3uh2K?p}~-iDc&J#0}BQ82RyIypkJFBAFgrL0I}gj|2$bM@xab9MLf-^Vw; zysNjK>7%#*w~xNR``;V$HNu{W2_rQW$lf~N(NqpMdxYnsLpVly4AeiJp3;8)r0nlO z(NYX9tjy#n5a$4c6$Avxut|Y@0t9G?Ktl%%NYEevaG*c{0=OX}=$-(yF(oxNe4z2| zaOUn4Z>Hws;EQKmi}qE;oZg$D&pVo0)9Gc&ge$jYEW*J!&u*z}_3CnC^j7lSWlq`G zI&3~~&*u}3F`iVEdMCF#tkJ6@m#aH$N8m|^?*nbe4pfi-(`a56kk8j8^7Bxh>v0cu z`AN9zWj?n>Y^m$UOYrd|*~{lkBfc)^?T52DLTT^3s=IleG|tm%*>oYc{LWizd>^)a zweZs=gM*So4!{455q`(4W$2dYM^BK;*SWG1J`Mu5Td187)ZX<9e`ZL7!6ucwpp0&m z0BvD#=1&`K-e3!Ot7NxRNX`n%9qwk>kd(3y0cu*NJM!x0^2b)3i(o^ToC=zuxnS`=8H2L|s+TPoB&@Xp$|T zeyNXes-7XD0bOLn7a`QR`U{-7EYh*G0?!pb%l1BOIR-w%B<#{hGu?96MC%Ord0!GG zeQ1*MMXgP-eVqNyGP--{ZlPq`@+02t{SfQ=>W*#udXshhdcv;%d}81I{OxN-e7UjT zDAtN-IS|a34V(vB-_wa128bIEDGvMj$c=_|WvOaKV>)L?@iW=x#P853HZvPU%92LewWB#WFZ5njm0zj_5iBg7iZ%OIa@}@;6Md>>S0Z7wu7Xr~kF@nj6 zB76`!9YhYTqty@5?gWm7tH^m6CU!`QG2EMlpb6=4=AckM`?@ieDn@^R<^piJWxCgQ zU|_{x_FqFd4K0&wU^~-MnU%K^MtTiaaP%OqJW8z5VmV;3;gT+h*5@34J@OCjn1$6* znnK5GLUO4zK@60%Sc5N!1$ipDV2b8}BZg@B$4LCy{vUrpd6zQy>%ZDZmm6*UF@X|w z$h60^7uwTt!D{Mwee%HGdaM|~5+_LKjUv0X?N?S3>Nq%hp6|nd)syN%F(rS40drzup;^L2`S4i~ z0jL>(1z??xg1R#J`x+KHp_GTw;$WDSIi1GB_AmXEo()MbbA$X%j;&8XS(x});mQXB zy5ikp+~dQO&t$*YPjC;6>@P%0J&)OCd=aQNu?2Ec;)WfE>^H)C6k#)^C4v_{pl~@f zzxCDIOJ^BdYbD2f1jPRpF zyZkF!c6;5r*cA1%4^xx?U+LtJ?>0+(kTpdy`?$H+lq~%8W#nC}&n;MKuBr>b+qj|R zs~;3I9^)#zP*pJ&J)#Ak$AWXVNBx|DnX`oFJd?ReuV}Q-fWf%&>CCi?9B7~dTW@7t zVsp?!EYpuHRRTkLEZjJm&9I@#V^@V)?s5(83te9OcHkvgVphp> zZK|b~*TdbU&$@u~RmV!s_UsSGL=WFAw@RIgY1hvUe-Q^K*lDDphtQ}W(^lxG5hzUi z+g4LuA!mdXX1vLe?|sEwcg7dMoE%0qW}g9FU{lS3 zvZ~u~9@za!#J~*YfuvtN1ymiot(8x8kfe{jTphU14wE?fUw;AFQWMsL}qI#j@OYJuW0OJjb>g( zT2qh|)?l4U0(Is;i?B}rU2H@=68R!5PX}rPQ~=@uBs3_s*C+ENSxKi6KOqtDMp)ldQbxj!cw!_3&dYQR8_#1T?S1Yh-Pm9N=T!q=41OI-nt%qmq+<|0 zuH)s*Kqn{6%IVMk{?<`G`3be(+PaR1!%n>+nw$>@+$-1u zm7e2is%joVn%2cmAU5`NxNUXz8}mM8jlQjwc*J%p3fGVUTto8xmc%}#vkf_i-W^{ zr$HNr99SU``g^ofh!fU=_pG|7vic`gb#Ak&elc`a?cYlC;YCH>GtFtQC2icr#=R3C zBLeF`Ju%Hq#QlZ!sjR}N^`wLnkVHWm@mQ;{5fAA=CoV2rT)4yur-20~((J4|;?D)M z2q2omoNtYEZU@MHyJCWJvm)D`0)c^%4cjyf&iPe_H$=cN*hJVdWX4g9rXqwG&M+}z z#tnj)RGgF?mGC&mkZ~P*F@eN#LB?|8#l=pxI&9oonXmQbzM86{OG$A@;PY6ag5`~# zr#}XNfeulGqNp)TQdtWpIJABDu0n_c^9dL*po1hhKm{4T^VWrkL==2GE)WJI;bS1h zcrcOg?_bc|*Y1`q3B}bB6A#b+wIxN+VNq2d@UzxS>c84y2%VGY7bwQW&;CFPt@9{P zrw@_M)&}^3O(vcX<`?cHwh8H9g>E_|_!tcdV;hl8ta`qQXeSzmaCoAfz#3`O``ywj ztsfdD8g=}PSB1M(LFF$89q1-j-SlWbiDsK3Qb|t0vIwAuIkqOBl_h9W7l2W*N;Tn9di5EORZ{UN?18$H6`~ApyU!6ott!Lmz}Kbh>0kC zP>GX-bz1@aIG&X!mQj6_R1G-+kgPr^1rAdZd5(eVPf@QK^}*+MNCkI;;#%PC_l=kEgQZ;Txo%i#@A$G!sWxCcWBRGtLY%L8NB}BG->9Gc413>9CuE z;UEwQhup~`x+YY!!`MToQS+4O%DyElh+rkS&|=ENQyXRQ)3XxX-;I!6{L-Vyor zt@|njR{SLCgzuEXsYMc1{$>E#CDmRZsCAX+#!pg&^_hMq8V92o{X2m^S{3XO8@mR99koPKTjlY;q zU|umx7^IOIKTZL+;-Ev~NwRHCwqc-dRC9^Z+ryk;3hL~BBpzTv@#Vs$l z=I8`=JR)}m)TfFg7;0L!ef*GiEA)H6#pG6u3sp}{pMZSdjcQ4Py6`_V(P0u!Uyo<{ia{N9Nj?wW$2 z;qBS6n13nw!D>fYsXMvyJGi{rA<<`gI=LQPX34{eMjGwQ<;!W$A`2{vTM=1v88GLZ zlQ}h-4zGCMvT(c67{?vvTa%k^J}>iKUA=weEkAwa_C9(0)Nb843y0dwx(ylDUyhAQ z2pFwy7S4SM2&sPnVWNQ@iVE_*2;GB5(i)A`H65!rdal$9cSVH3u3bhCbg!IH z?mDXZzk)5E*>9GcP`gD&xIqh(B_{?S(ugQ@I!$O#x9evrE=c85%DYLcyD8#QX?=HD z)%}`)8`|>1ibLMl5`R=!<2XWFEVaF&UF4S+Tn!jdpG8D@ZmN_FOs|r0u}ucCkkdDD ziSH|>^7_hLaI*cldDrHb{?nV<+5q0!gnhfN0zQsoFW5T8lGo#9`-jP+&@Yiuh^hRu zP$u26FvBXmRTCP5+ld>Qv0jr>m=GL^A|_BURgO5KZT6G%iN0|&8!t3U6v;l1P}uy< zIUV{Ghkx=>7IFH#2JpvAq0Y38+n%A_rE%3^XQC*12y`{%UW_W0 zujL3Ybj@b{h?OFi*LzYG92w_VTUC^**M^ec94Xf4+8YW#rtS7Wwl1J*cX7TQ#NM zdAB^m^LU~tq%gL%3*E_w!`yh{NUm=axiz{jib&VocN&(A|=^c3U4 zwx{6V$UYwZ9osf}hy1s4N7PH6Jv9oh!CZ@@nVf*mTPrU+`H@Vby3MPx-!fZdvxX=j7@-UN+V9yq%Tl{v)%Gzta5Y z>oQDBSANUPxZj3iwbyap@GXUP(<3fjM?bZZ*On}Xnj!-o_M3c+a7P{sc2{L}OKM#( z^X&T7M!D16soI`bE7s-1%*#$0yQzsO{l0UqK5T|V?!Qa!&*S>JL!x^pnC6^vSn|5z z(S7M#IENfMIKjW_Qvk;O3xV%qSXu~&MbQ>vem;B-jrVO*LA*^WhMr-$oRv2<;$jbX4$JdAuIFfy;;l0E}y zvs;?!!umroZ@cyVs*^F6Z%UMmg1S>hSUv2LfzE0vEvuQQ2|rOhPmi1KgdJ z`zFGnIXT%VA!%0g2|>bO(5MvB2@0$P5`gM6fq>N*BtRn)84$MvW9tIpkg@UEs<5a4 z5)0Yoh>Cka0ZAOhL9$cW%4Izq80OAioO(|APA(=zjv2G*z_BBg%Ro~jZFa-9cJ!1- za%N-h7_mI^ypiOTPF3#*^zy&6)I@&<8xofm6=O1)v6AZaVietf{i~=R7ziCWvPszdJnfCIlT@ag18_qwh*;*}r;%I8&L#HCqJkX=seoPZ&)KhyaE@2}7L9%QoxlWhvO%#oMM z#=n;n=>ch$Wg)I`5;HXwxZk@O!v$f30;V*xb!FaC`(SRGqgqyT=sgpifOp5?y1g=Q zZ=uQkUCEX?_%22ic-k>f4WJMprRP%cb(R6-C=8J=AGKSsOp&yFmpVPs(SzI{d2f;E zkR9@GFvq~X*V?@|!*453b&Feg`s+wyMed`A>Yzk0481Uw&zw@>b9ChIg3wv8H4%sD z;J?|WF(bPuu!itJRYxAf1V(2!feK-B=2(acSs9=aPe@5GI@&2rL>P*!5>9HEWg_D? z#OHFQ4{bp|#5=c?Y?|MwnD$Bqfow7wk5Vly-UFp020YLi z(UsB1oh+zN<@ax3;bkSC$x%pf=c;x zs((n6G_Zn4ez7kYQYa7_?I%z+Y3T4HI{`c9-ogfr-54lN@AmEDDG8cPRf7F2Eq^^W z!K-C96gY>;7|T}r`BAlal!vazMP{n=%mBuZj+BxOLz%%(mU_2F;!I_*`u5wNIR*U) zu);kn+D)#y!bTth(tl@Bk#lGRPh_aU`Ky(QiU6;u9huYndd6T^6L*^#ZRts>!g?#5 z;c!fHZ8(+>7mG~=P1%0QqoP;sGC1UHP;`4)@CdpAh^jh}jKq&YUo~p;HZrtGyPaBToLPJ!da;UR2*8z#WTHy2$$t)VqV&}fA zQmF>bd#s%{3Rz?x^4Bg!OT%zzisS8dt@0|CK%e>de+jdaEz$M}p!(CfLV$O$b84Zz?*QqGF}~Y* z@peN5%SC~G0G$!Z;I*XJQnINu<8q|GKX$Y&nW*5M31Q%SvXA!2VKoOHe6fAWIvH+Y z@cfJhGie3kV~!5@|?vJYu|g)}4=gMl5)=vP_`GgQD8Wzf@?TlIxbjgrZ615mOZ;0WtPO zE}6G57N3==ccN8rMoK7@()~E$hre9VCOAKD1L89*7DUHGSOZhIotn=ocjg;DIY?!Z zjVn~_EBFvKNo=@i5L8|aFGfWw>Bf$_A|5d)keSonY4L_|)OpIyDTvsfxAYpl-A|7y-d1Cl6Qp@5(cR9S>!86THOEY3oP{naz zuD~dRL_PvFak3bL^`wt{BOkD;pr!m5q*#=o%3 z*7yz*)S6WPA6@4Zq)FFB>3YkyZQHhO+qP}Hx@_CFZL7<++0|9kU&KEVb2Aqiu`|xj zygDZ@R<8XliIM@7&BDB}##U3WlzCfRz9zg;494p#?oDEU;gEB}y(s>gvJ!PM94sz(^xJ8qlydR7^ zF1*vs4vVKt`Pn35XVG#Al8N&cEQ0NAzoX zUFXB1Sc7^tuuPVugn(d4)tz5G7a7iG4p>IE{|g8=-9`;N@S{r)3+fIPJ*Z|P;*fiv z0m%bI0nz}B_3XpUHzA#Ml_uPLNh(j7$%}+KCN9_TczAfE$eTyS#l<0_#6G_6?&86b zBqIlj#rJu0h=qDvrCglQ5RdFSHb_zM(6G9fSsfg*;Fqrhrd^Yvj{c0QAjSXyU z6>eg4Oy|h`igJEU`xkznyS8U5b(za)371n>ch>W^fmb(7b4bu6p{lBIKhBeji^3|%w%!6{XZ5(yU~Mp#;kOF+US zV~Ye18!660Y9*RWWhZT*!;GJr$)cHrUBr#3L}#^uA#d*}`5as6VQx+MW~r0@V`x{0;e>8TwR+Fzp*h z`IN9QrOjo!udtcu4JA6=>ymc6O!-cgXLoahnag;e5z&4Eu zy0X#v&C6hF17doP)Uf-ctVv z4+*k2(NO{_%JqS?qu}nv=}Cf86h79zr1G(~{QWn%&%Qx`O#SIxO-3tS)in6clOgl> z<^h#3H#E2#?vmJ;m)kjy@0iOMKQi3IZn=MMt#|C(EviAvy0EK>eh?=HOgGLrlaudt z1E>0B!$$jR?h2pM2rY&)0sS%GAM|EQD;&AuCZ23hOHR1_kGX`CYn1 zr?0WPB{lD(5^@%(Tc(c6I-X)uYB=V_DtY%6D`*~^3(X4Ea^NM)93Jof6F=32^KAc3 z8`R>9TqoPw`gUV+4>JV ze5tZPR_~Y>*?y{IQ@A=R6=rSGn;;9HF` zb&sw;eH&*Gho=iBgBs5H_#3rb-fw^ZyrFQMDRrs;dAr-I(3m;pD;w5T_w&3ef6e$u z`fwYRlx4|V+KXHfHCCr^TxVZqw_4tU@|iK4^JKldJn8kDFSR9~mNga1WI8sJ-hnd; z>*#`qak^+g#IfgLKCD$G1DZer1u7s30ft39j)pG5hz=0|9IezpI--WdlxpkJ|N)fgmHCyOM4Fva;% zHJmPYmam~~Kg&@U$chh+be8BElOv@B#|DbKDAh$$j6in^R1u&%`KNIPSo=P66nWI?ZY3)pu zejcUwsNHd>=(4GE5G^xBh71*Uw}En$>>TB)Rfy$hXLYMiAzo4n<%3*|cVnqhgf~eE zCDuLZd=aV)g;EI(S#g}v6sZ2IU8}R_#{Nl(Ia8M0>9I*Pl7`&RH=4vdl9YjTr zDw$Ni0SuNti3c{12llqHbHNChR5Q^>HYiaJs~|Y;gGmTXI3Way914Mvl{Ldk($R1r z5DeRwloA^_kTYA6huD@YFC}S{o^MShWpAr$j3;`m1nVWu{kS)7n?jDYbC^$@W+^he zWY}`VuDG}D+IEXDdxs!mFE^W=|ib=gGJPJxQ?i`>9)QCLbb!=_}8xS5};X>M)KU-`I9Q;dVE)jB3k{pjk zPzaF-6&8GU&=K>WNhZjc5KrGIx#@JgEeuu7-5=G)7oCwMDIl z4Kcy}fsc>u$aFl5Rxo!+a5OK}FK6K{mTK_EKNW@iKzGVr&-F)YW&kB!5yAR5e}1cG zY$FoW5;V-0`XRzJD=2Tkdx5O4fRfmhEALI!12Yki;W|^@Y~G!Lc@N`yF=R_keP9vo z^nAu`Y3RNHs|h{VUQrYJQKoaJ-aDB)JT?jOd6 z(==Cm!L-{rRYq(m$13}(5cs?&%T}L;8HCqr&&1Nz-ynw&S5=iqu7S^dMFGPj79}|e zg(YdF(_(XT>@FuOSJb*t0tlL*u!Q;5-r}ymKhzohK#8DX?PvF5trP$RV@Vnz+7vd9 z^ob_94XLrAH&TZcxG)%I^zXIBdf-6Vm_&PrrZPpQo-m`%3}!7x>Q+2!HFW$-Lxl$j z)hVfg?G!Y@F++Pbw2Edq#g=WdtfVlQ%T7Knq4!^jHbU&*wABJZ$2~1KaJ2hhnIwM{ z8s9RfEHVV*11b0FRp9TFNx}%sz!|I;^I_g0T-t$y$~HU7tP*rZBH2fQDJm$N*M5~j zESocE=*Eqvi$4m-Z?3!|SP=5WbQ@}c<+Ka}}V$><<8i{cJ36wH-*gtqoB@s5bo zP9Z92Qb>Z*!p%UVmBHHrHwY4le4e=9081T&nm$NgCe*hMR!&#{THaH<7>PAO5|XIa zktw>AZq5~WrgKb8tkKYDM}@9qalyIEB18Sb*%)xT`HRm+k;~z<7y9cB(%qfVC z5cOp?=MdGa_hH!Avs>)z9UnLSpH4bPjCVvZ56uU+_~(x%@sPnTL?~}FIY7n_8j;Z_ z2#S$lZz9JDV_@CqMl=DPrNzZMF_qm5%kT0ryn>*Y{6@`P`4f1p!L^orP1p2u2vD{J z4>G&>ZKC5o!4JO9Rm>?Ce~7pqVHnXjAi6D(s6+a|ZHU>+2g>C~Gnd@=D=z&L<*x4- zveb|wLVg6)&Ym9O-!w@y>%V;#?x$7xRkaQ8*3lN^G*u+frR7-eniLJR-?T-UH2i#< zxuGjI!-613m)oVYc0>g#?|-OaiT$JS22Qi(PX^y7{1gkQ ztC8j!Kp#rJQYJYnZlE_G;Ovgs`bM<#59{O~(6tf!vGUtWL<5qets`3{uuZPd1pcHr zLd=wvc|fE;qx)}dlXy(__GB#z)(_dOIjovx$lRGWY_c$vx|bom$PE;+HKGRWtZA>KYy$l|7J z^07}4GyGle%?a-b<>0x40jakH~CkoPO5o-_|Yu6VI z%XUPFs@XV)h}ME4*fw)*B^@mZ*`ChulWV}43N}aw&Dr0?K{@4{cI`v`T{Jd?musFZ?+lHvmVSTGbsuCTY^XK} z4DL1B9g%iSH>$=m`74->79o|Rj)neqUx))AWvtgXFqDL3jf>MPJk={8Rwd zvO_(8jqXQ2fst@oZ7VHA>bi;dq6x0*+reIhecLyNDhTt7a!*R544g9o+7Kh^iX_5F zh+7&tBZ@?eUOD7R52J0*u#e;2E&cJ()iNe~re9VHD?tyrXiKnUg28QD_8~$W)o@I{ z50KMx)6a@N4O$uf@;p0uveozJrWQ>r9f%r==39Q!#tP(Agd)j}q5EfNs@VF(eLA&6 zP4{kuM6m3ryu;-;EzeRu)+C%4uY)ey)ZPKUyWxWjD@Kl7tqSxW6ed@(BIPVipNH<< z+@aJI+(}!NE4|N>jE{pSU8smW8;}M1-NgkX4-8hqr$*x5XL)`WnD(s=Vv*w8&JNQT zY?1?u<`runP(wADgd#LEp__>l`_?K@s`<7{5Iz#X=mP;7LI|)RO21GTh_Z?K-Z|R^ zle@O&b!D1@1#`3BxYH$O#hIj)-6pWj%5Be3`z~v&jkRz%r+|lB+KDHnrmSJ%WP8zo z{TI^(OqOdirKo+;jn2^&YTKi}7QQR0^vG2wdnoq1;L&d)T)f`~;a|3}%x*9=(9PsK zJ!Op*eDZTo-67PE4iIlxDxWjn8ggmwVp$GGA$Eq|#HMN$Aw3FxNw`i50lxeX16fQj ziAqf-Fari~<3>0vLlBU+fis zR`3A1l(oYciRF~uS0PKDh-u%kD1si%KaBaOZpMyxk7f*euCI3$`A9RAJ@WyTt`_1i zTVwE*7_nbXccC;_&$86MR`z){GYgE z$(OoYI<~cr4Ha4A_-*L>%($!nLcsptiJu?{)Q`{$?Nb~49?4sTmK26sJaeRKKn|b) zP>C`+{Is$gN4;34?^HBHj1gn%vL^b=MTWBoGv2B0bLGT~+a_DS0G-P&JyKWq_%I9x zI<{-Xvc$-l5cdTtZc%(sl@Qwwlo6VHUoavPkqs0NcvzBaLWITiw~AN#NF^h3LgN$; zG`UVJEH{i4H8eS3uP=SZ^*@ME$`y`t&Zx9yvVPUypRf1 zlUW~;;OG4;c*7PJgiRYfZ9)@Ba9lQFfR?dfA!nHLMO}MynA10y;iv(= z+z?NGkjyjO!giQwBizb&n60d`i<`E|Hr|eQNK+dDHdyW+GB#LYMaK%;vH^Bl70wN0 zx(Ym=N{P~|!_u1(ain+v2tO5rM3QxFDJyaSbNnDqk6)F82#Qy)G-VZJu=I3-swCo9 zmU&j!rg(&TDibLHObb(Sp$X`uVL!7^1;+g2$`!a-k;-hb@&wcsJI}Q;G0#cCQr216 z=`ac?wdNettT8O8YGbO+dIzo2ST70Zr)%TiXDZ8alTpKLx7kCD?C0N|tK#+AHEGB4 zW|u$jBKhk*NdBa4DL4BkFwzPd)yKMk+K5~ueXZYCxrVTL)lg{YEmtK9H5FSciL5sEmU2T-h^ExZr{sO{|VqRD~5ynXu3A?fnc$tL)bnL!HN^hNG% z+^=gDr}W7szSR4Aof6qfWRyRD{%A!e$X?&wSrG9%BSPd3p;P(k9uosFI6)crg&BbG zz+q_Yv9W85gH2eU3mn?F#`x!)>dKWIB^R34jP}ow5JwDG2;nLk8XFr28wbP1fpLC! z&RJzRV!7U?9V0}GFOX2TM3OJEq5TRR1XU}fqJ)YLUQ?^zmHxL$mC(JHSSz5cm1Neu z$LN*Q{3@%Kv>u};-od;Gpsh_igOXEAOl~hJpVfVoxNgA~F9#xFUhU8}sLhVfW0V{?G3_O_aDOS2HH; zq}-z~2ni<>!jAa84(OGlH3xql9zmw5zhiQaIV)ltm>fgX7p*wl zS>u4ryK}F&J{jywrbg^MCuF`8Qx_0kC`=ugO{%9Yn7Fc(nrThi_?*r(-#<&20$xBI zuR3f4|vbw2Ou<*@BT;SoLpE zze2|Pb~X?rcQtP;*+0%KiOQiICm;$Z&&p~HY9C8zb+`1@$4%mw@S{zLi-gNER5&zx zSC5I%w(NzC2vvvD?a}H>0@AkEPhUp_KZ?Hs%3|oN!l~|vpDez;$<35&rI*yC=Fiz* z6%nF%Qg6V83>YC@0eXVSlJo=1N1YG*?&dsHFc>iz@T;jMgr$^D!59(m?K;G-q!%K* zvnl)|%e-DJ&cjtiHa+1zY~ROw_SUjN9BAH`R5jLlLshS)bEP+ZBC|e{4=e&9S&4#~ z_@h@nkSuF4_vC${ZymFH#{=)mn44!kP!2=?QkUv8t#&l;EIh5zmcp3nU|(s6qrIFx3(2Ma0(r#932q)ba@|_MPecnXy;W*(hf;^%n0OxgV zl{V30P4Ele7l(<3Gjw$fXeTM^vGb0_K|HwdQ7kU?=_PN1Q{z1WawVzXxC6UT9&e>s zDM?B|Jsvh$zR7=6g@u{n8YGfsWuW{Cg;6LOb!7II#8M8yr!yUeu_l5Wh1H`l?X*iY z)#^0<4f3eHPfgB8JON&#YIi`Xw|^l5=4Gu>*wAAWm!tW1iI_PWe3I)m*vC3k&>wOy z)&$aSO+Et9xW191$?`YUu|S!eVOgSC<7(+`CWDL#D+<9gk`$+x zvWW8dO!1>k;C!Pe5dGZjCskBJlY0~+iOdmZ(sr^AO}HWT zYeX947BfM`u&IJL7m%zRVPi8uAC=~Me5yo1&QD;|#IX;spFn>e z0!0fbG`(qC`rA>qJ#fYz+^Dhv#e5z4gCLM`cHlwUd{h~Cy(wD1I)nkd7ewEP?EQyH znoy+vVw?6@G?{4Rhw|WaJeFY9G*o`5%6gf<`8Jm*kzYh>LxKztnf7}^ytd~98*bQj zO*4Wt|4^g;jA66>H@b`ccB2}(E!cP#X&Y6^vVS$KdtvDG+{ zARzGk_XjV*5N%u{gPR1w>RIN5g(-SuFn~5?cFsdgUm60KRMI+iPu-dW%8XhvCy2IG zc6b&y<}4z9gx~@XRK<_JvBJN$^plGIlrX!e%5!ZD71!3WK%&IUePgL8JP;(FVdi94 zzs|6)B%_ZRB5PH}b1}rcEB_3mExF1+Z@-62JxE++<#*?U#(jd%uGHotsz)hU>I4Hw zcchHmRbY}ZsrgbjNkr3!sB8GD+z54Cwf~Leha|td?&9|knxqxJn*;|{5Y5Cswg&Rn zm1Lz8if`3qv|4rY9TdTgW~!Q@MA9E6+eHojwt+)Dlvvr|6=J;>}qu@hcY1_H|H@M2La= zSjcSOrQ8aw_9zT}t`e@5t!slGq^^yy3hrRYH1y=UK+*}dXd0?17OCcjd*Tv0k3Bz!aX^#({kk^lZG+A6Qxz#)4Eo zIH>pan9kCELHGUWGgjGql$fwAsM-Cq3zn-_;@>sf^zX*cv~Z7zOBX$M!C=ctt_rG$ z9r6mv7<$fFCuGbaJ`O%cRno3WEe^Lb55vc>ha=Yb3m}Y4peV)qWPYDM%ZsmtioMcV zYSY2%DuU*wXREyE1^ZA{EF>R%H|!|6n1MbmhEq?re^XXbvA$`QB%9V40t3icFXS9> z4QVb{oVveQK9Oaqk}tNnw=q43kU2-ML^4D(TSK`k%BtnMrYaKlj!n%D-KN1C(4tT^ zVzHr*n=YqEjzBVHUV#e*1M+Ka{d~6v>S^5>P(?+e7c7*SogJAf(wz8f_#P#}cmdL- zp}nLX)$mcD@ZHTzQI@3-crY-8vr#IEv*9wY`!S@lq63vv@x(Vp2GppdUMv_wTEfnh zZ{O19zD$dA5t}>%{p^^u&Zmz-0|3elJFDO}a#E^y4nH7Ch}}nh$Tac_d{%Ca-Nupd zxcnQ<(}BioH?*Yy;0({dS?|DAwkW5K9-PX%BpwZyjbleMz}8{G_M~*6J-13M^l|P$ zmfSeoDIUKwmT7f|++c*}`e2!;0Ji?6}}n3v+(X^MHiJ^fnSI94Ni^ zM5`6%pziq$^y=rekuY*2b@yHjnFPfAL-b2M;$6IkmWP$ZsnE8i#HjWWfvH=!LdTW3 z(Lsic5#hd1Cs;*D6LMIZ(DOSj=kTFVcOWVim6mcZLG|;`MlGHg;#4)!QJ+7zgwHFm zd>ZG}8k^+kYunkktp_AR`u$;ZQm(@4;9DjwUszIRBW|a~XY#F;;Td5RZAw>IAlSzz zr)YapLpR!u{k8zn_in!NK2VTZfAt@cP#rf#41vEkz&@tma#P^iZ)>1N@B*VixK1}HCiz zD2-P^bF<5!3-7%?sz^0dne>*Y;S*l1N>DcgONM?#U~G9)#r_Q*riXWFx?R#GA`>Nh ztH6jIZ|t0SERccQ)J#vZD#WommWAo82;SzcDeL!)y9rswAs6V%J`bEmoBeSk2>@@O zFj5|?PBuRhR#KKuBiVHu3HU#yDDZzu(SJ42|LPeaAj0kFun{nzAoaE-yrM-v6T-&eQ{L0U3^ zJ|i0N)C=VG+(JzAg*Uh~n}_5U36H#wz$S-m5(#-WAsMe3(!3IOod4|o@Jud6!|4|& zV65Ow|09^fE#c_EblgAVGK?=Sq8e-+h6h2YGDV=hX5!Oo}BL?1t<)Qx>yab&T%wet0;O zyOp7!H%HPyArOGQi*f5Q?Q9->0eyk|>j;w&3D;bXiXcrWu z$o7Tenv~*J`6BhCOT#DZaU*s8W+Ku9?s*sfB8`m7tunv7<*xX6mE!ZPvI|^jQIm;# zK`^}{6aLWi4D!Ve6YO~-qrnt6XKoqpFX#yH_>&Z9l)*<9gfQ#8>kj;;2x7ul2n z%DUFgrZgkeoFy8}(*8f;8FsOiNc2reySQd~@~imKc5<7g>AkLSkj#p zK!&iwSSMr5?sYTQhlYB1&?_5yNUG|4j!M0i`%^3qa}*%;)Lr?UP1Kd2BQs;*G$hqM z)%~$dxiwN#%xAT!8ii4kJs7X08}mT`IJ~0x(Pl(Nyr4E~Nf%S;ss#awxGz~2q7`H) zUc&1sUzErr|5h64+UcsWQlZihn18npX{umvXC%18Qg<=K?S|U|LN{)sE z6DL862Btt<5eYekKVt3=MI8-+M*v_Tfd&C!hJ?_BmTbpXNT+}xhzBto6Xvbuh&all z#lVQzi1v|~p#>)4X8Onbb3uy5`>@mq_TQ&O+fwx>Msrc$C`T1u_p;wy#wP?C&HTUq zn)cyyPixIxwnccK(^_yUbH?J1&dNb&^j&0&FLv*G zK^rWx_P)Zw{R0)*2p@2ZS|VpXBgZXw&b?f6`u`CO0lWb?Tybc@&RZ}EAY?$fc0!d)0) zX@kKGpITzuu3esyB~lD$i;GyFgj|-cF{TIbDUzf%XF}TK-@Z-hD_*O*9VKMRmI5WRCnH3oMGN?`?qO#bYX4w@~%!g!Anny@K$}GG~CWpl6b?cMe zHg*r1F)Z-_ougMS5euYQJwr6SnX>51C!e|)9-Q5@EB%9RAlIs&Xm4*q2)>8ay8Abs z{ry6F;9~8`4eK5r3&;6A3a#OgtLZXskJ`NHpW0%!om3GCx;7Kma6)RoHt5QeYlvty z&*N5Y@PxLCyG<&8@2EL>5c2P+0i11|i5TclrlgF_vj&B0=;OtUUP-#>GNB~1JDG4b zafr}icLxqC(p{rwl^=)X{g}aNSn${Wu#BlgpO1%!2pkI zMJr`|dUjAyj$zW^7_E;)z9bygco~XwrNt^~nfBD9YiFI6Y?^1&QD^hn;cCewqcKE0 zo%T4PnfAkzu$U@Vz`$hiLIDUMT zJ8S$$6Rs!F9=+*)NUm?h=eGfIx%d|6F3G!ZeXcJL5vq zaPI@y_kMlvj1ALZ74Qu*)Q_VP4?I*Cml`FC*$fPGZ@f_&52sI#H#+-U5CUQ89~le} zB)g&aPkZ_hBI_teSNLG+0&krLjh{>ghYCHBxb5P=CR zl_{~npS_esP!~$$Q05S{IeT`N-RSJ;ms#k&>dY%s={2v0`M}?OCQXyql2B_v%xg+0 z`u50JL)!~I>=elKj90r_RM1yJzKHNC@%-{UD&{TZ1QLAML7w*gMekizwst8zv5Ptr zSDCIGRr{$-B=gdWZge#v$JR;v&s$cRX3GIN9au|7Ms|V(v#x=oYIFtT8C5kI7nH{0V*6og^v)i6y!vN3;_oGCz~M-E5Z&FL58rvLM9`Mc(H&R=0Hf0dyn8G3_W(z zj!x`{gfY5}WZ277K~mv52zK3LSHv{c@Sqg8)BKe!$Dzw`(5~>Wt)AG-HT{!Fx2aOtb$*F;A-!$5#q>vSN)Z+p+l| z_39rj7^XYel*~Rqu7+AgDjKEWy=xb-2JJ=qip%kQwO!q-bbvycJewdq9c(5Cb*5vc7D&}Y zLv)&v1Fj3dXJ0dMI$6sk0%gi>{yrOm-bzdzAJLacz#NA%Iop1XOD=JJsdFm^>^nAlx z+PoNHL5O4hFt_&o*xiYF+x`O`Wj8@l${DSkk{IWQV@WY*J;TKH0K~%+*cH7A&o+t^ zn$Mx#qvs_y(r^1UYIX30A5uP z7$jl+bbC0eGfx0G^Wzo2mx2XBVm(!fLAWSYD2d#=D-lu6Ztt2Z7RaSa-kV&ANs0%0 zd?3cQMQyy$2qd|L~j1EY<9H*G9Y-zoU4|IIhg; z!P3;Y?(wdLo%!)3>4F*|AF8AR+EJxw4t1mo*ahMVsgjC3LI5}=(R2}sPxJ^-f-Zs_ zc@d(R_UlXpiU9b<*~A#Whh0IM6yuuyJmP zsW=%B03-N2)xmnUQrOi=n4~UV6$Tj^9BlFaG{Z-taxW;cVN2zz@a$ZQr@Z&`CnUJ& zbvuwo@U`oDnD2Dz&LU+)X2d~$a7jSL>g!NL3IyLhJEv3^YOm#O@J36-gC)-Y`VdGd zZ`eP7{BI}!$;c`W-TE{&+@Sk)Na!!bs!PXU!NZV##idA-dQAYX@uoaEZ+9Z4XS}6W z|Jkpicfvk7RQ=PxB@As9t_5aU_!a#c_c_6e-66X$JyPem%8*LUeBtbKr-Y<16F&rs zCX;*krjS^jyT@f_g2RX#QB8a+xdgR@lDtwaa6BRunq`E>iX99C`-~25ZQ{Nf&Bmrq z7~E)1-9_362l&rBUmb2g^MquP zEr@3CkQo~}?{D{6sxSgNxE#YkHX0~xC7A-u0qaK~I@jct&+E<`U|$=I)1$GeC6Pdd z^La!{Xri=%-(iG&$o`Z>&!^WWY&9Lo7hoksY?aFv&fDLEJvVxI1Y3U{GtI=HZ!E8K z>iX!ERYgrLC6^CXLt5;?j*da?b(k^W^0EZ2i7OeH+zAgiW=cJ0FU1Y0+$YA6uN`%X zyq6K@y3w>N0?QOtMi2=p8^pMbvLaw@({Koz8dD{q3}E#7U)-*NS#hck;HUy`P`DY- z2s*u+soAIjIsS_%5j@4dvS2U1ue*{bj#(kv%u^=M)TtCpoO(slxHFA}j>|)`4`@@@ zU~&OXim}O!N~%2sp3JqKKc@J?S6IMHbtvFN9TIKV`&q6_Czv%$6sq~`;PYT6_*#Q!zr`kQX%CZ!L?eSoVF=K)UJziR zy%5ADh=eV)B-!&o=rpxMLMK7=5_9I_m7H|{b%bR$G_G0iFF(4RMgUwWH+9PQU4m?8+ ztG-Ct0|$lnwj%s-%|t zI&wRRox{(;OP#W!?uA2ZKKE_6;ExIZaE@T#Hbwb8*(ht}2`5?O@(Cw;fOVUtyYkeR zSiFRlcbH)OFi(_#C&Ft6>`23%%%Nc-Zj;iQ6|tkRZA35u;|64O`Z+ii#g!q$gm9_T{%J#eIFbnh{ofJX`E^+fKTzF?gWgjB2K2#% z0ilto6CTDH3CRIw{9HX6HK$7fzauZpTXGV0%EtGgjbm5WE?`jXP2He3i;1rrc4Vn- zyAhOSz>XVyX=a2ps#e0jvxM_N<|ObmI)QOSYfkPm26Ge)VbT){%r!2-Q*D>BZO~$l zd0Q$lONq?P2m`y!F@@IuzUP4+7P?YK_o&6j+7n`#4lCTx*&O|RjSA?DIYKAFjB4dh zIrl@Uo_ZVgOq-KR*!m$B=Do#W1Gg~X1XC5utU%X;KYsPyWE)=xg3-WJJGARGWXBC) z9*QgyDbL5iFt*wtHBNx{63dJf;0d!QDg)(hdYXV_HI07P?0@(eIr8umH!)BWLZy}j z*idHS`X&d61&fOwff_tbQzH(aZM^7i*-+I88q@IaeoLsm1xV_e1$?`H-WnbmvGv=1lc z^iD!Kokn@0JhPyRhD9IZ89onVwrMY4!Gwhg6Yi9JWFb;SM_RuhZ}EHBZmIrmj+3{# z>eKWF>SYVWL1>YfNs8>{u+&0dMmgz)$T2kZqjn`CD|8$>%@}pzS`< z3fZu$R*GXpb!9bLOo5+$7cvyYw&qS=`N>H<42?78VwaMx%)WVzmA6|--U@|US#lGB z!s~)yROc2@8fn^E6hr`*N9_qLvBjMmw#Nic3cCBFW7z+|1TI*1E8;V`Qt7OlS96c2 zZtqDpLN$)qu{S*2S>(~&6M1Z1T`6tHX6k<2vZ`5ZVj$GjW^6Chx+>e+UU|GAV?D#H z*b>ixi^2JlwmsZYU7qQ(>OV-s;YlSUFOs`(gTLpO)r2AJKVJsI;owWTA-f2Cd|-HX zt)EM{|AKEp?k7%EW30Onj<}r)x}a2!9mSY=YPuy(!EFL*XfPxAy)DZW0vbgEZ?_yG z&}2_={4hwBU+ID@2jNfq=jZEq+gK`$S+Qu^s0SEC1WQfNmrMZeUGZg?AKn>v6w0iP3WjBY(p*>Jq1An}J#W7@C z#uoCU&Tgivl8o~Tlau~3o8!+UN0~dPnmV7{WNrC0KWwG3dBEP@+B9h9j?0feX7#^B zJSit1`A^j_IPGVtLzfP#nXOzlxbe*A$(Ho^wv#NBz zY(@3XnH_!Hx24i~QZALfe%k7#7Oqs}R@JwX;;n?R6ys`|emUa5THVz|aN&4|S0(UL zHn$QneWhGSa6v;aqP2#LLSk;s&i90T3f6Vf85Sce6;7%Wk2D^=K)r(PGOEkSa1nF# z`jbDFjyC>7lRh2rH4*Sd0A+S7LFC`)r`A2wHP<%ORv?*20JW|>+h0YWt}4@Nwv}vM z*(R$)pS?tm{dI7nJgWgtgnb{}wXgbCy)>vXds)+-MNSO$wkvvL-{4#=2M9yuU}Rmz zAL39SQJ^Rf6!F=ffq!A|=n1jt043|I8TMD^)E#?4sAWllZx^i!xUkLL8i-qn5dJxp zyD~#?<@hT@aa8;fA4J@3?7uB=y+fZ>P6b-pT_kA2Qm|EsDT$ zV$t>Fsm@1Jk9K?W8I13lQ@*UxuOF^+FrhK5{fKU?KBywX*8x2i+~~^c0;zD5v0;bD z(7jXY^G4r|hc_+OZI%D`(v<~Mt^I87Zw$DxH6;G4Zm@r;Ctt1o)pdtm_0d6ZS1ye0 z>A~bjq8BERhd(#g`i-L{w6HLOztk4r6!%6Kf8Z{D;@wsr7$q+>t~}EK4(z>lcc#Ia zv0F%a8CNi{(B==}lv4jaS^eFa}s5g#2mD$6`lVix$eiHvG zso1y$MhjKjXY5DX{pTQggPavaPh?}z_Z72!D45m(lpGUZ(6f8RG4t*+DtQ>gE$Q6( zHT!7Pfks$?F)&BvsRQ}RoP6+M(P;A4Q7H>47n#N-7IkUvQe(1)^A)Su)H%+$#($%3 z5R$B>s8L^dUZhy>ukQ?XFEAMCEy=2CQ`2hBsg8XwyFujgT}OEiS7Gmjx-gt!wj_Qr zYfOvtWt*oFeDW?cm(wv`jJ5pZ%X;?xNK>BdDdN^}Pkxr&9rb6A4fjWv;ojUEoiIbX zyo2@S9w>duY`QOUAAMMx4SEhBpvT{wdjPSi!_|cen+N?m1N%9ThhEI4cc%2!j|z_N zIWK05l%%8px=)G#xQz8f6M`4jQ{FUcLfgE&=!nO&Enf8U40+bG_S}&d`Zs2;i5U@^ zc`r<~Q)mIS{l~=Nn0-jh8gOI^_XK$7M4K2BpXNF3@>cL~#>~gYo5Mo<>*(`pLn^Cy zFDij_w8pGq@6VEd)&|mG6mH7jR+gmgYqkk6+WQx^FYu9i>|5JatvJ?xeE57^eD<{a z_n%t@3-lF#ktqXC3VRgn&KJDs@<%u_VyK_OK`cmk({|ZhJ^h_Y;@!X`7l~D+BOg?K6>e!HENw{S}M+l8Sp375IQk9PA04DGdo2YE*F} z&kL7K;NQ4lgTY*mCu9qz~hF%gRKe2f~8? z)W9DE;Ul|qAi`G*m?s1ffkAT~{O^RpwuUpRG7wIq7|w$D%~;;|Qb_(%#oY_=%*J0+ zq1dy1R;=d)?MB^8IZ`*^xkB)Or4DR-12EO<-cOAus(u1;i7ka+BJ3pC2`0Iy>WUjZ zxp-(&**6=aIlm-bG1M#kCo1S?JERgevn5T+$$(9MNEX-5)wfy_a4Yj zBeO@8TTq$&kQ!VRrUs)*h2di5$lW-s6~$!D8AYJ+hD2p`cybxB_tX-l!8vOd#72fs z9a@Qs)WfG1J`ncK(NL;E5L|I@Rw6Vmb(-0vBjd@N4jGJy3jHu1ROFN_oOq8M)Q_*3vom)3*>>6h<%e8 zYkstVAXEHk_(>b;`m)-I$%8DyIYfzeoLE3Auu@@d-bqjLl=P}S8|z}tO6L9PKLLRP zuwTKT!U&+`uIvek+fJ;8qktZS9w23fmNkJBymS>|I#T0;YU_Rj6e}rB9v*B=amgX| z(OHbjblT_(4$8>(Yk0{$&iRLksz^eaM*MI*?t`De+9XY*nPML4r}2pg%LMcw!m1n# z;Y@CPTm+D0(OX;`JYYwPa}C^IZskQm*@ZZ7ORW%*ON(sP!2R@;La!wh*m?Jx8%`n1 zPgOtfp!$D^1d6M)K=z$&gJ5cxjB}y?dF>J`z~!!(;(_LP;cAjv3kD&QAW=yQkPk2E z4=Me)0|-o>k02X(WD9In)*X_z3MCqr12Q1v<&U@=V@u1MY^-+&*!&|OmIwzl!q?ob zApHdxMkOK58x5UgcK9eGR>S;~I$^26%N6%<10?}aCanv1F|c!mw-8N&KLf~kc{Bhc zjch4ksFz!Sy__=Y4%t(NV*=7nxN!e^E69n2mt!$Qr{SAMhtCF)VDJk`nRvClhC$ znGnSZhf(a|oGdt5{TSS!231uO8RFV;>9LI<2j>3+sX$i0#28yn7(y#Q$wiqN+6pLn zWo%Afp;KWEEF|hk+#;Kfw}kaHJ)5f;7cFC~4mw~VjY*SofC$7P5{Hi?b`!@QaPu31 zQ0|*rsFA^Y59`3LVy+YNDk}S(zxPdZ2)NHqDomlK;R3nvxqJY$2OV09N5qVM(5RUh zC73oBt2e?&QZzyx1w$W9IdAu;|F$h1Geh5E;}EV|S!}XGw!Be3lKUrIIlUG0 zXzj=WeNyn1+B8q8ZYY9E5nvN+Ed~@#@zh zf=OKr+2@rB(uZG%G2z;;*mzPoc$>J>^v2AR)o&5Dd3w%DW>xSd4dE@wB#D0cUv0HS zgkkM|)Az$4pflIv=5fo?n(jxRn3wMT$k=u`Km~7n!nVONKMkBylSKq)sHOIU#b1p)^XW4WI z{+uuaD5IxfN`j)8(cyoRb{17_hF0^#9VP~?sS>P(&T4037PJgt@Vu0M`t0c_#rk(XCtSHoph3Y;;~C=<@;YeF>l=lH z+7O&F0(|VT$qi01^$y|c+fTv?bzhy7S58%?Amk=rY)-u`YP~|+M5&Fbq>9YOlJegA z)=q`y!xEYsrRzvRKoAzNynA2uWaA+axgL01lRPfA8fjk9g)tM>C$v&7g~`c$%vu#z z{1*Ja?H9i>%GY2f5?J<78K3dCNYm=|;RkSlr>c9u>VOvJM3u#NCW0T6hKtHEN)?fu z|2zple5dTj@??4bh~^xzDgsThf)SS4lNFmGzSMYiq^KJD6ELBZfQ~sS#Uow`Y%8ee zZoHYtW|LBOX@dFnh;hr4Z4t|`x#cx7(_eBu3}ny4wGwmw*oUjo7Z6h?zHs<`E6De^ zSbF2gm=8N(Ha&`orO~qfnU2d6KSSO8FtNf2s{9IRnet}wKPYwm2VwqUF5UW_LM)xJ zSvWZw$p1?vYs|tMz`Z(423r;izn2;3dIA$Rc8)A8(DjV^q@cbP)+YO}ID4DhkQhF< z>ycIWLYYDcdmpF(E*kC}eH&9K1ZDsCqA`A3$YSY>o2C)_-F(6UM8uEt%`2WztggY# ztCwau1ZHstE_M5{EsOEE5T-Nx$CkF%gO$`A2F?+YW+q*aIhMN}T_YzJS=5yQcWJ+O zcYcu?!QsrIBwq;C1lWFQ9(~Bwa3u-MmomrD7-dGC7;M;V>>px1qUx4T(=Q%ksTb%yhM}m zMrQ!A@_YiTH@T`+Mo*}=do^3hiPNrwj#G}F5W#IcI|}ArJ#2u*F2RJbM?m;6KQ+(^ z@M!#49P*N)lf}FR zQ|9(zz1PT@YZZ4iVgLo?LenNlt`k4e<UR zwkP!X4DZi>?B!yTVOep_VL(g*IJ?4$zs3r3tI`>Fy-GAx)DG4jhX$fIpcVblJ*{`= zQJeZ<1y`P%8mo4qc*Qp{XPrzSAs#cxYL|iV6%6JR$JfES&gk(IHdAoVAP{E@xi%W2 zzwWkba$_YanpURks)?a6{%t-+!#Z!F6jd^;koxV{@v8<%I7GOj{+G`BZe@4eL(etE zGj&B_%HYb$*_DIEj?Q7{xa#uLH$^t-zcnWaK;=hroJsv3iyKMpV73TQl*g{J!BoaY z+N3{zDe01lr@~0_0o-_Y71$MZbn%Em<~77?t%(8$U!Q?t&}1>?9b@UnC6=#@r#wkS zUg*~S)~^XHA_t+!r3kBzirX`|Bki`}t>t4O1~!BM}Y3;>3fPO;pcfwwVC3oMvj$gGrM8 zdM=$3Oj8m*<7qa$qd(!eW9{5-&kUXZdHe;iE6Xge^de}qj2825cOIDE=eKC^WiSsm z9%6VD1??+`6%ch5SaH_pqb?wyk|3Hw!9EK)y*d^d?Jjut-o3LuP7enh|DF@A%Z$}^ zK4Mhp@6i#!*Q>wgFh8wmGiW)TiVgb$=-IFW$r@c(m>ONi-FbN{R{D5vl{ zONrc5u$Lxu0e)K#c5O{x^|PceR#zb@!_q>+wSOaooV8B<4U%zcyZ>Nvr)~NUBYVQ8 z|6#JvZ1x@K&?ETA%llz<{48+EHL#jlOarfumRR?U>kg=Tbtt@Nw=jaM{`B$Mnj1;C zQSdQTgr_aL5NB=uPWhrbYyDuu@R2$+$9%XlJ>okt&y8 z+D{KLl%O!}kpto6oURYct11+OS*0()n7w&n@PX^8LAv8DzQ-|ajpAICXiCa1V-oi< zX;pxBaL38Tx_ephH>Y?t31p<3B&Q?-3EFlSI67)Q^08W$Cg*1e;aM^HHbD$|+Ew~O$000O80Ra5}IS>L&000OA0Ra5}IS>NG000<(ww48e5I@UKAkRpk zZzmLq1BP`R9gs`_00;m90Q~xF!J7q<80jPe7{@#D zq;tzJ^gM%kEjB@fTZ1cnEgKKyAP+_nR0322MFRK8bH$rN*X{+nL3en6?hD5i>Qt}j z6Ro04PTxM+CU@utbxx<;9*v@H+J=H&)h^9qR%sUE1nwlR;<7JL4uea9?UkcU?G(Jn zx+GeJP1^OI#Fp$DTe>N%dva+P-Ant$W?2JFG2VT5Iz8*OS2dV|>IAoXB0~YXrw%2W zpw@*&y6R{BrOo_(nj6C_+o3r+A!CPG>c57*<_>4rF*ZwSm`!Kz zhU6or_RS5-(zp>*-w0evj*o!Z8QSQ^ZU}QptGFYyn+ww`?rX|YS*lBvL~k*9OW4&s zaY3xi;$_{COJil2_Q~2@mT9XTCHLFFlG=~gh`SS*XYx@-KApXrt?~OtrO^V*GI0^Z z6G*esN19I?X%$zs$nCV_xfLZawLGWddMQDE!n3P|I;o|ob#Zf)yJzF%P`;7(XqE2q z9`Es*(6$S_E_Su6U9w6xiK9uo-r3Ds^AS9qG>>eH%Wn#6WQ+F6Hi@ma$Qo_X7TKd+ zVNcj@cPx?pu|(F#7VVG~Zk%m`pHQjKny^ET8dI9>u_!Fis<6g=vQ4aNx#jzJwm18& zPAnNyvcD6_&l=i~>mbUsSK5%9HxL%)g&nl_VpV+y6_VsR8H?YLu^UDem9^9-#%zcv zgFqeFZc0M#A`oIvD&r)-^ulO@>`Y$8*#C;22sLza_8$)sc}vW#10ZL%WSk&DliKzA97 zu@X0gk~(gJg@yQsOJL$l{rXCOe58;17!TuD%5QoXpW=(&g+J;j zDpW_Q;h&emLR?4*2Voveq;1-UgE**JWLTDA9t?zkgj^UWMX?VLT56-;;r=^s^D36Y zK)i$d>vZ2@9C9KaRRXA*KfE+i24w_vLCSuP|4Nq>Nmcm@g%H5 zL(g6x;d?lV|*pvWqjr%W)ovYr`x8cZ#Xdabt*(*xB{I z*eZNywq{zqtGvpqQzUTbwqvFAl9|M?!&SOi952Ih;F3%d?gI6}QCs~A@}j=nK3+I{ zFwO4AhY`%M!vik51+E1h8Z>x-RB(k>?-69fx;*Yu&-KAl$E;p;)`vSwPB?$zW8EWWo_6gJ4N$d*b2{5 zSt^}s+vT|_muQvjkyTn2QdhOgTXc{2m9v!u4OY-MLj zZD-kPU+F9PBt*;Xp+;(+Ci2L$)R!;*?UwY_dO~8Hjv~`GZPPZ~gM&Zgmp`6-XGQ{LoFzJ;Cg`$hbS&u_ysz64Kg6$KB447+&qbALYVXRo3>@vAECUO(W&sZ(sHz|KV5g?_DVkQ_)IJqrEDTM98M(R*872 z54dqq6t#$rgJqO3@h^*D7Z1cpIEjC;CG3KQll#VqwN;{vc*9TF2`ljrhR_tw*)RAI zY(wFr^zIh?OJA)gJcNgM1xDgyx{|W&8fh#I!Qr&(@W{Z8$0ATifpT)Sls}VJWc{Ql zn_Nt_^wn~~OJ7|j$cNB$1Q+ckZjoZ_!pL61F;1TRqLtvCsO0G2;lXh`QRsod37(lWx#-##x0??2FfDexj16Ce3U>KnT^#bs)!NUp#^aAJ^8bEm5 zAWRBlXb|2w;DxI2et_ARlQbwm0ZRk}1{P!h>~-kqSgkl%9UdO54;5VlA#iv|VTZlDR{A30K!X4stTr6;3cA{^&&WEj!?1qpum24uV*=w(< z>OI;1(PS0bh+&m~_OKQL1NJ24P#>fZ(Ijz&ymrJORQl?|&%W%-#$Bat+Sd8fMG`Oe z-R?BXE3#4Bb}ofwV>X^f`KWC>*KLCNCf{V5oHH}YzFd=gxkn<)I+=JPbz$z7%DNEE zK`QVF90HXcSflgQcx0*7sX<0OOuS+Z(Z^xc@xehZDC$vp(157o5)T|jD6z{dwaq@c z$9y{XjF@+F&pTPoz8Q**qgi(QM!n^l&p#5~OgM94wlq`9HZ!6AQ=Flgne5Ee?p#|X zu_R$@G=2i(yCfxmNJZZEZ+<5Emttr?vqef5@B2{Wjr=en-vbc&W#ODcWU zdWl%5bn9rHLkp9N0E2-fhAE|xLkvW#8wBA5MU{kz1%?#|1BJt(kSIV1hC%^QC=3n- zLSjH5Un zlwC}-n}dU3)CvODv}Sc9!kQ{QG>K!M`q)feF?S!0oDU)=C3<7AxaRejYLGk z;~U#E5OfAIu(ZtH3BHS76&k5clI8Ep8&wEsC`7PM@EI7K)@$XZ#~5OFU-Gp6-I}(% z^ng^9s4&@EFbf+@pIaSS#XvPtDwf>kXbC<9T2vyIyk1kSFxfxUUK0`(sc~D7qD*MY zH3PrC1b!)VWQ|bV#Ph!rO6!iww`ti$=~}PX&u&ULA%Z458^ECLwXX`j&QS(49Th2` zxXOeht0y(on~wYpILv6Rybwbv-LaHNf);&HwBfTd)X6<;Lalh zY+pzoSvR}XE#z>mF7+?#~JQ%6Z&qC_r=W~HW7Vh7EIyX zPKSG((z{Wjs;Vl9jK)YHZmLfZb50f;L|UKhQ`&%py2>NkkHY7-8QxnP0RX@+| z!al)oHBrwgQgKz`GP#e1MgLI9vOzQYaS#z&!>Az#=J}!9INBQy)PaMj`9bQ}E3y-f z;%cJzT>Ut!rqiyIpwiroRC*_)#`x9e?6i+2)r)bKK76@<;CICASI2~ z+W%s3NL=~O*+fb!f88OSEG@s>HG`;qKoLM>8su_Y-Pd zcw!7vDv0Zd8iHMWX}4K=W9hD0gmvBQxTL?utD{dx;CK7E{@>ZzYf&{p zvPMSz^Fs8+Cq@9~rd?_PNVXHDvHx)pSHHKgZ6u0_Uo)L$gC6~n+m&IQT((135?2Xh z7UYq!iN*jexw%!W6{%V5@!@GR4^rIQ=7&DSpKCuKKaX~DgREF$)Z+MZdtQrQuX+hhZN7%dy&o*E5urvc{RGWXPW6aG zwGMb!{=r`Xd6y4*>Ok0eJ8(;ly9efKvJvFWHioTrJT1e+oVhZv*W*RE0P~9EztDng zDApwQ`ytcEA~=f)7XK#xO0LU9mP?6kCUCA8ICp_J$5e946cwO{AIR1re`G?-ohlbN zE5qXRt=7b5cjFz!pe;I%=rxRsD=c7beTGyOAbrn*IZ8YMw>HgUB25G$oAwF zcAFsd&MAP}jp3Qh^n?m#f>)d#!|yR}eLS```Z6X`3Kb_{mZkt(AIK@n(*ylOblHF` zjgiVDw0uOB4G`rKA?VM48lTGyRwlsVqBHL^ep?W)oGcfBlm z;*xtDDjV)9)|~ARpiW%9dc@U8FOK&qn_+ROi~jkcUiHw|5*k8PGQIb1eaTFas*3lc zwmMn+Em^Gs%3gS#-sD!@#a1AK@3FXPX3f<;24%(__3pC3Lv@>t`OAJrYvYye@kTRI4m$jlhLnbkrAm)uW34X=Hag0HL$e7nVaCSPV8 zpG1{F{p%GO9u2 zqocyso?1b164B7jj%+_ADP7#`fR7ued~{ufks#;A#Ua%-`}Y?4hq1&h@jb$AUJX0uRAA_V}bzdt9VjZ0H{*$ zPbM3yM(h(B$Q)}=vcuebqvOkK9n2K(sOjgIZEbQ6hdm%!sV zy>|9~p2$8W?E}H-Knrifwn(x~UOz^RR5ZNC^b4d3js(jxu_N>EoSyM42)*4+)8&7l zVs2JVoCNq`eygR!&<1P=VD4I9?mcFv?t9H}biRTR9nry1k&iV}-lIR z5x(p@?G3zY%uj-a42~c%cmnu`rz#if5jT5QJ20sVjb||^9#YQWl+4%yAiLkwhO6M1@ z6wrt5M{sr1@Ts?3pq&{2qC8IXqLNe4pC`5HQ* zLDkIM*_1h74|an@>wV8Q9(hA>kaG=Bu@pd_>xX;sd>qoO0ek|lJyacy3d=B|+SKe{wdm%=AlEY#t%qjmSz@KaQpv-%0;oJl zPEFgjnXthF$Ba#qQB#qCyxyiIR3%zDmek-p9t*j341z1x*;;8KMmu#`D;S|E^ z+k|ryC;KIkLZaIz!>Lwi8R_7k2=n9#OF#&6LpOgC?3d>4i^qd^H)0`VlG($nJbf~1 zFaCT8f_mqycqQ*TqHAtJ8_cms!hw_5fx9qCl8|m6B|w&%DGAPC&GtjvYGJs|9m%;! zd|rrYx*zEQb#Pn-lz^*;tS9!K#|loR-*CNMD$T+ODoy zK*&&9J&D$UrTb8TH6oli9z^Sat%r&j{cO}8iG#v4;IH6WN}>Rq1oJLqfXphLFu@M( z!p}IlsqT;>rwk#XW=hiBBwL&FY%n+1Wf!4GrvOKdq#zGYU2SvCTJa0;Z^A4fLX*|NQXng(_XD|;FlkpPifin0VWKfi zkcA3Y`U~j+G)gbh*G-=4u$rmV!8~9^lax`h# z0CtnzipI2f;R6HefCxo$rv7nUA;CK41lp;tJh`3e%9k>-*ZK}&gW z%zRwVez|rOoq_AI1S84`0jTr&Nc(iV{;9Fk6ldY0hL!kXem*&B08mZ6wrdi(+#vpw zkLK3|@4Baux1E75wa@=*iYLCMA6cHX+8jXi^H?E6Cz3Wsr(5t5rA9`vmrR@D885Yu zrXA2pZ^COo0dLoH0z}*pcL&000O80Ra5}IS>LY0RSKX*vY8~fZ#qcJH?gBPTPBgaUi`Y1i9M< zetLUO95A>50M*pG)}Tve=zAU#FeHzFubYLN)Lk_pu))m zcQd231?*2$JEP1bQ_7SZP41YJa!Q5F1y4gvG-Q7Q|#S7v3VQC)@>0xw^jDZ2C;3s{~lluhzex& ztDE!>mXQ8w9v#$KI*ab<@a}CFnn(NeJEdWKCq3iJ*n@gW>u4&C)KmIM$Iv@kr?coH z{q%<~l)OJw5^vU?9MMYY!~H+RAHo0ok^DzLj!N4XD%meon)n;VpV(*?KXUp`|E)Mb zSS_Prx{nX|WQAU#VR}usx%C*Dgb$q${*Tlvpf38^!|yQo5cMS zE)_5YNlk3x58Wsmii{M!;-GkH9UvAz0CiJ)k;G~wn0minGNV7mk2*i?G7OKL%u$|l z+8|c}atb%`iLQ%;VTi+KSM1RRf-6e}4TIQjA!aql0 zQ$CN8QSQj!Q&fzTzo)49T|^->P0m>-t0yZmPu9sbdBvacQ>2VgLDz_vS>#_2Ugj!P zImqFZTcje}3|W*Hu5g)kw&kJRv>t_1Zl)3T^3Okq$SAT*mdU!TTbZ)cI$WRDV-B&# zd6#3hQGUrx>k*|7xp48j48gtM^?P8oXo&-vQ+hC;$n6^U8~MfavP;L2P2eczmAsNs zlzGi8?u}#KMf{~k&lQS=T3n$Xj!jvGwk%>ODQt5?ao%pQhE4G^UC5*8!G0qT{hxnS z{J*1rbo6_ObVkHnRkm_`;pU|bA}{5oZ0szVDEqRS)qIjcBpfOBGAip)OS*DwnEMoz$aRrAnz)DpLKS_W12r;R013>XaMw z`%G$-YNbA@TPl{yq&A^gp5c{; zTm;J@5=WssVpJp{uOHv%=ePLz{o?Nre=&B}9yLY9p>0$Z6~~rw;yZCtVbquo_Lf>h z`ZiayO;K604NML*iln5>~XB?2?L6MQ802~g31H44Y1-KF~ z@*4&?$nzzHUQ zp=0+Ui3g1}7dW6W7aWNXISqcqbDU=f*h%9gT0r?tGOi84h6m;3yvz@SG~v1Sg9Ch? z7YU5o3MxO$8%4u8UrPjo@6iUO<3u{Bb{s|Med2MBgYR%T=N#ypc%O9dvG*QxIOkHv z7pk|VzEd{-0_PgyNi^S3GI5B*NEp6%?)<~=Mf zhmLR2xSRg)#K)>?@^^iv?(##dQ7rHK zz4U?no_FZ@4k`Z&{M%8x>F<(=H>EdeOQ}UER)Tf>4}+fPmb8TAygz(n;0A8sZu&u; zrL(+9xEINGlzfGfEN>%sQ)l_?C$hZVw3}GohUzSzeTltYV*_`M{j-Jm25uS~XalWz z-(Y)j92b8vhBs0Uteo-0xHGGXYi!{j+QN-v z13CQL9`pMy#G4)5HdYz#!-sYd2fj@#hxzcWvHZi`&DvuFnR|m%FVO8a{!q9R{^4!t z6(as0;~PW_TE0P3e8d-`=)E;+g8#_<)jiIvekXlLH4R&tWiKLP|mmXvCTNn znA(ANia0ztKNma~y%o6?Ei^@%;?0c*G&mX?4c|@elx?w%TYfD;T~C*jYsu|2R)|<9 zA?Y1jN+anVT1qE<;D z0jC)7faTU^NJ4-kGn>>k;R<}Hr83hcw#AQNt{Q3?#D| z651NVG)K<(NIc=9h7PBZ1+Eq{0*scn7}5-=Njrll%wy}7bT~=Qvt37+Mifhyx@XT! zijcLnq#2tr?{R+Fi2{+G>1l)EWU|-eYFqxpb=%g=$xhT3$2i=1!YD3=;#_!Lf!(-G z!Z;}z2^&bZwG{q92VyK-4TYga6H0)wY&8sV3QXX_NY+kd3M=U4k}FR3;RWs0IWikT zVWdNf+Ego?ja%6`3hVH~fjkidcpfY}Bc4ja%ul*~5RuwlcD!v~vK)p4q~VFS%X zgbX-r00GSa0|?63D@Lplpr!#$Hj;tP&|!s;5k`PyAf%}VSg4&seAk0E)Ha)g#T0JecrsdWeki}bD zSZu|3*3@gsUy{e9DMGrkvY1JldJq9c7Aq-%PEuK0WoXHaw@NiLyfG3aD~JP-pa`Iu zE+C1m5S!VU;OGNU^ZHQ22(i=DE_$duR1$15cvx>L;4ueG80S`jw(6iz4m6wM7Vf0AYSV>~na+cm7D*NfYzcdru@cj4 z!Flj2e#Lii8Iy(52HSv<%misH278@A!+GO9lrr;tseq!i5m*34Uno^*Rg%YN-Z>4%H~t0h!ng3;^L)><@GF+f;?gg5qkj=0!l&c< z9T3^Ml)RFPicYJOqtnyj<-9pDik-_R`K0dTUszbU&ZmR(yO;O!UOL^Ydv!0Cefi5@ zx!iL3`X7nxO5O#B^IGOs>^Zy%6cn#vGO#!K5+QsD59PJj;h$P$jz4j8a+coad3dCk z@=k6)`j!!1`xyTe!#rNH2kA_n#NYZ`UCFn8WyNdX44XfJ!--|sd^@mCcSDrXcCKVs z@-D!z!M&+B`4^lXPU};4l)jtZix)767p_mi!TIgOv3cDCx;_~>ey5^zpM5T8J=@vb zlWgwE|5JpKGnD^G?a}qD^rWuTugpyeJILWnN z=Lt&Jvoe#()%krmIN713iPnvic*hn#h-iv;Gl3@9*HuT?tx@etv>J7I zU0Riz_|G?^TZ=1kHLgah(>h#p0*HZqF;hMmn1(_~2h==I z+N{INgc?;$fEH>hXe5}Kw3nRpgHSnRo~DVme2{){Yj3z)FNJdkGfk1y6d_?UVXzN~ znr=1`kr)j{QP7>X_JT2am2?rea$QFZX$%NzDDZ&ElDKeYu+qR@F)&T@Wu7(DG`aA{ zwd2aA=8sDS^hM($o{-L9DZD5^!j+bkgv1_7SYcLx0Rzpv$(8VW(a;m^+MUOd4zH0e zwe|of7sHEWhH99lBC|C1N;L$MlBmSa?EDTCBncyE0ER=7BucU%NkVCA#vD|EhQ=9( ziUtLk$6;YO6b^(3!9XYs2!x>+hyxf1Xdo11QC3r03dVr-X3(xJ!hsLWr_z@cuz4@8 zK$=#A4p~|H76@G`}75Eh5&Ss;8a zOa>r>(Wx;|G>=Q?(i-i;A!a(5>K}$m5sZ18vhNbdwce+6db^%78iaO7!#SFZv-|SN zqik|IKfI)1ct1^zBEn3 zFwPo=Qf`DWWvV;{x7!h)g4nZUn5w{_C9HbfiwjXFDJ6ZE0^y3E!kV28t{u}PA z5BXX>@z)`?=FH5N8h)gR_;`q>Y)k^PAV74bi^Ngp%y~6SnLTcRVXP72Y~ia*i&@9p zdr6amL?R5&G|QE)E}Ah`rZL^fu_6P0QPKeagV_JSqe)gx(U*G*MA)Ae=ARNOHM(bo z4fHKx;ZNva&V`7-boAk|Db@N?g4|c&PtwiWOx?>zTTZ`sF<68f0k;@QzUsHKFt2?s z1w;tOkhe>y=~~MsG3i%c4UTx4WDw|L+G!=R zU0DUQa2*hay6~7yjs5FH;2+6hd1O9Xfzti#Fl#{q>Jbh}vQbTSk6Cl3pdc7?n>qQ` zJNIsRv^`rOzLnNp#N9YtN)Rg#>4s*7>zy18pRkO z?FyL2spIf4Dp`cs6Cn`2MkxKHD`$c}qlhS7?)xLsvr574XRq|~bP4FcC+J&jV$el` z+PA7_cjAb4Sex1ai_er77yiZ7;*=1Rg)=LQ)#>S4hl3(*>aBbtcLv?i-Q5hHmi!x` z^`Ks}j8=$2EFy^Tc3DdEWk zoRz@gE_JLQZmRNXD<<3~6PS@vS(VpZ7Lg6(_fHkah!#>W@9i%2iH zSk46UAW6cp@U)}8O<)MR?v4QLD@|+%v!M@$-7yOBx!{Y@h5~fz{Ks=q}Ol z$pt*5)U_oO^B~09_hErF=;H=K3!JrreXPAo$+)G07%Zfe4rR7jk20pX;hu9}ja8$_ z+3TI$CtzgkPOK)LG!r<{Cc|OTwkX#XA; zhh^YvJ=RFXVOyc7v{QqqmV)&&l5B+)RTG=&?s2dRegR~QQioa3wN`pW3&zC4ssgYI zS(Hxd7Y!vrtV(TPI6byki$2Y<_^%tuSJLx2quEocX+owta&QfY>yckwQF>Qc$Ajle zdl^M3^`p!haY$$g{2JYx)WpAnsvizo7!2``0EHkpK`)fL=M|rOKa!$kfgMjAY2yC1 zW8C!hm>UpEyO2_ULMjugYrQCRiG|MIKo@X}YoVK748P=`h*3$Mfyjg&8T5gsd&hL) zH38hxfTg5^I4H)}oD_({*?4p?e#(&IDDA8c_ zkWTJbfjva}kpGSW0?H-qjF{*W`TyB=jN_o|E6}45cfX{pvl+-t>;ls7%-@&|bp#qC z;8ew0feCl01u7e{F|b>+iem1bU>?7dxU1&TIufwp1~jL811X1{v}UIvxtDN>oN+;? z9UznqJ`uuq9CkXJtCUDDUvKG}L{}tgaF}1SjA$4z>i$Tv3G;K=%NX>Lol06{>{%|l z=;d#`ZtO-Wx#f97kw>8uXM^WrS3i@&I*1F@YuP*zBu<0)q|__DGQsPb z9H*u@jtq(cS{890_PO`e6}9(H!NF<~N%>rWq@s_<0smm}IN-BM89~Mpd26K+*<0YM z@VFd6T(||N^>E9yFy)q6Hhbn_!a(KIR?+SK32vaJDVJZdCrs=r)_o^M$LG+9pl61R zqTkn;`nsBzidoKhej66g*17-2=Mn~AksEgbc&@Ie@Js6rKN$lp~xw=?j3`3{hL^s@X50=Rx7nTIm}oJiB&x| zcR+Ab5f;!_d>ATf?7CQ9IZ{NKT^Gwi$WbGmkdBfjLnK|M=-gWvf^wu1IVG_mGv46{LIvroK=Jiy$-YV4+=_P!t&cD(X2RNrj!+*pKT|&0)v+_;eaQDWGtI)XszUHM{}u z+rU#GKfM#t$-%JV$`(eSh!EeXC`W$@g5MQsG&HR{`>4j12#&+S(VkFjDLMd#{>c>_ z_EZwfa}x)p0KsXizjCh@^9U)Xs18*C;TW7pBWj=o zK*WD6aar}gmfD^cJsTf;N;+tMTnbAI&vZ?5x7M0coS{3FT*ScV6Ap+HS7M?ktvDJg z+nZ<?Uc{zpyMn`KPQE(-AmZneicP8X|4Fe*yKz!p`wv?cw!JAE3gjcQglgUyRw5n1#D#XbnN+~sB zXM3bE$FTr;BaCB2(02GzII*UQVUZ3u*?=VBU$Z<3--S=Amb{k)NQSTspf0w+HL-7r zv6S%GvTgjBa>TIXc-?jt2a!vJ!|g4Zh{AQ)Mf{UQPBw7{UVLDus7QpTpU{Oo3?x|< zWYiTP5~$-t-a3DvjkvEnI(EVq;Ay)-T09UCx%H5K@r^ViNGih80Y;Ib)}%aI|gc7nHM*v@h(m#o>Vi+|U~g~1D#d()qoXO(c1+f(wr$(CZQHhO+qP}nw$It`d~fE?y)$XEI!%72(@EMDF#OR*R^+T? z(*bPkh@iR|+!82|{22sTrSc|9U|wtiblUSS&@%xei$}OZ z1v5C61c&fi_P&{|O8s*Kluc6z^vOMe3XNqo(;NA6VyQS2`u6i%o-Pcq2!b$NnmqPs zha+8=1%~@O;X0R*ExI)_2>voM!U;Pl85IO7YyM|;@<`7(coRd1Y(Fn98y-k1nB*}U zHeTjIvd?P*D$TxpxliOn| z3$A>JVrC&yf%@Z7VK))}1o`@i=^awz6;CVSnhC6-pANie9(si`{eT2tSJ+O!dIH|A z)Dm|Hp<|xJlur7eoSG{+L3kBB6ZYQaxl?RcwLXSY;1l5z}?M zpg^O{UzqG^aJyZZ7dBHJSK)>3b>hVC@Dx7H)tX3E(tR&%95X>CDB~ z{fWMW-{wQY!!GHSnbVrE3O-Obb1O7EKUH@Le8h{rt#;llEMOV@U*!$H}) zE_u?Tn=_Gx5~<$SOy)0Xei+GbchTS|DXsJbdO8`RfS?{%IyVY|C9VV$^8n!V z$s1<9TB9MYfpVj2ZB%#<@a-gpB&z|g^Nc@YkJu_J$xC|nUA;;mZuoC{GK=0L_kQ8D zK`r|!nG>uxOS&fKcd<&SVG6*7!2K+7{%5qTnuUa|3gw3+;FXJ;Ud3mPSA-uwq(o50 zGuUsT=+}|vnz?Uk)x3VH^K<41;}!XO{167RNyU$Wwy@Or{`KCUt}d#zGf!V8)^M0@ z-J$Lc9<36vXs(Vv-9M_=4gBrsQ|Qvd3J7~OOvj5I1T7yy{Mjp+SZ^-1E*!{+P?QpK z$T~sXK$8r3e+w)UC=J@mxM3_n)Bf^dF@7n1Tkh&91UEqvYtsteQTd?JR*zZsJ3$h! zx^I)cmB~)ldB~Lgo)g7lmuf9RZ?346Y>ND2`5d5vEuVO|6<6k_k2rHM3!`;z1xZ9H zYi?uD1_~6xZp4BJcKI8@yHz<~jW0LWp=QQ$8Y9TKg1#A757H~($mK^$SHs8}nK>B= zxDwBX1wUx}mg4bu*T~!iOQ4gk6YhO=XvLWCfpcU)JPFXg!f{&ROuhHT55{~ z8pd*a0jRMN9MGKhS$?qwE^CG9cGlRiRZJ@SJSElCMH5@43=AwT3`w<_GIj)e0G&*V zpiKAsF}!G3YGDd+3LClROabOG?48+Jk3*o)$}L z`%)C}EnJWEQ|^NURSL`A+b8)uf(5tUnPuO+rT+R5SFTvLJsW~uT6NVTo5oi}=tLYc zexX0CDk!}3qEZIoPLeywT0~)rY~5{YTEm9|_Q=?u7=TR+F$w?@5>PVcUnIF?yq7fh zcVjY|^>8+de2feMH1V^C=`{xOBfG2dTy%&Nn+imLv;}TY_RTJGN^K7df9lc5-|=KW5@n)#}2!{FQO~ z?C-aPJw?`G^X*$qSZ(NMD~v)tsXoM-TV3sgA(wv{kcMO}*n*W(-jQA-q5-1exydLD zT36)_jqdw_GG)@6Y_91RA%6yvmGHq-Q(hDLU=jTbZm(vUeYwloZ=;* zmvByv;XFo0-)DM`=#X5sKjM;ZlO&3kqj%nejunK)nZAuWbVHdcToaMRd3ko=%^0e9 zv4E(<)dy$APu+5SVH7bCgywXgy9<-HVrRHQ@hy8=tLU*4m>L$+pfp>RB~clv%Einm zUGtO6q6XvX)F(Pd_&%p^(3bcaZB?OiCxzoT9k{#S8{%t&K|LYqXe%(PwPlKQ@M~ub z^Kp12LHCht3(kfFkCc^oX&4U{d*dq1K1S$xcF4;G=boQf&ki3AJ1QyL2hqSAdt=(5$S)X2qaP#xS@Z;Ys_A#{ZD|# zVPByRbs`11^&Y_ph*hC0sS~&BZXs;F;c;!dKQ3ix_-0$0h8{|FA5!T9Ot$0cubB2v zBQ^9Ev*CY!3ki~ul%QKiY38cb7~U_?Ir8o~W%I#V^|Hk~)4IpUhnaJlUe);5Fu;nohCTB6MTH;eE zal5ezH41NUlpr~3_qDv2hH)-WsHlGP7f%m(gxcn#GL40VCj%`ebb=0H9Hpw!6x0D$ z)9?+W+PGrQG;Qd|>=V;K9^$^N9bp3kix0W~632*Vt8ZAB3*EWsFp8k5_a$169f_h8XCw#Z9jn|%%c;i`jRI3tt zJ>Jmc8=*xdJpP5>uF2TWI7_aie{3Zu()0gOpaydbu%{$^8V}4#>bJkz+UfGLfRS%& z5T0ETGn|g^3qjIt^6KFn3RmI6!~8QJR+O=Y7DOj*D7!S}VzGv2D@__Li*-f6p_^qaT!@A;EbF#tn_IddhwtI3W>}O~%~)0MP~LzTB6pkb(RBrc_1PSP@&i-!r7r$rY!)0N-rpci4?|rf2EIvOz9$(!Cv{1N&&k~( zK%}zWBde3RCl5(8GY;=H)8iOxk>FRSk~q7PLKNY>2^-X)fdBnhNCo%V8)%gV-6q-Q ztt8Pzldw2>l*GLTtgtfI-f-&e=f+g*#_(Njh1jrkKNpCUVunceP;}2F-}DEekdWK5 zqHaa_>kv$3r9q>=qL%z&zD_d!9(F6v$X^0cU>Tt;(FuYg5}OG`BdZMZhIxNl6@$i- zhYY;oq<{sg;ZQ&Sjx5bP?r-_~jf^kBAWTDF>#d4e%VJ!<-c0gNIRFQLXZ&BiQvv;Q zTS+{x5Rr|~C4umU?`uOG^IuiX7$0d*zX`sgNhx%KxXcl)?r+RQ-;P+AP4T8I&Y-s?J` zPKVAthskqhAbSG2avDy~M{_Qms9-0v#E_NRiSY1cl>k5#45G-(`a%NNr1REgE^9>T zW4kd~TQ%js7?QzQH)l02S&a$^CMLks3QVQF0tJ>a+!r^y?Zh8bI73yLE#TE}(#1dR+(&G^IU1En#X!OnUHV0ra%g0PSl; zP_<&xN3;D?v_Tv_y(DJUaEk4*XSU$xt2-A}m}sPjFnHA+{qXCNlMQ=~;%XKFDnLMZ4C^k`Z2VnB z5+zb_xIFodD1Nd4pI6`pSn^Cm#7&BV5Rrhe1Z&w}&k3uxqgLhka6iFNw$XM^6pcD9 zmfIbs>T?ynj7=MZT_FnT?GYHw@nZv+vrgRtXcu<_&e$xq!vp~)+kZx#O?df?`?^+; znERZ&6*?oC8sD^lwwNyWhXGerd}^|}CJG$FD0Cq6p0Z_!kNK`-FA}_l^YzOdt=Hy} z4DK9%)(+xbwFL!AkD+VMi$XC2(Hn9ecKCz2A3a*j#bMB+T9E!uK&6k7T>pBCywFy) zcV1mi3jcbvs6M?a$tOZY7#RHlc$pFcolvo|R&etgpgrLOr*Oarux0dNU*36-fX+Z- z3~aFUVk>Lj>3QzoF-p!m zs$HDcL{Q?VuAGvRv4&8|;=hMEWDt4X)#^Eo?^ShA=wsF{VUf_e>->HV$PM+4`@~Hn zoNi`%-ic2`2){U*PcQ1X&Zd=+Em>N(*OQ77xgZaQo+S5wCKPSYpkbT_QEItHuOaX< zBbHeUy?9;p(aOGDE)*2}w(}|sYEub#&mgh3?LDeCD%b~V*lI9Cgf$y%xk^^49H8(XfbSJ>8`$5M(uxz`SR$0s^KIpGgJ&qmJqTzzV8f*mlUn38lLG}*01={0UlDO6G+x_7+L*boj{zhDBG%>0ZyzIT+2T=imBRu4=k6j^Su+R+Ay&D^xa>! zf0+YYe@c(U-)>#5DD~{o@h_>s1=-xDq%c|oHqYUbXTia@l=SsX@p_Y>4d&C;e*`aO zQC*FRJ9!^hf=7^kh8fq(e}DiLf;6m3vSOpx z;W9N$iIJ(oeccecIXL1axyoL8(KxW_88k;L{LQ%4pQ=7`v5+n{gsQC=DljnBxvb^i z$`{4WC-ib-`k2O7Pj@EkOYsUDAX~`SAPYqUFUQ!F7It6*f=Jfb66%rLy+(t!AH*4@ z(vvT=hVPtByAQJ6uuU99%W1uWx&rgRX^*s+gXZxy1O_B^TWTeC*~J^lcE>=`@Yfpq zyb8tOKj<|J4GX)=AN@(9sY@>tOW__Q<8-}xD{6!({9_|H;UTWIYPva8p+5I1MNTwC zeXqCCpU}d=U0$ZGorGUg*RzlDN~r6vs6X4Jn}UP6HEBYt1S~Kegj01cJfK=AQJ=43|WgV&sUHV>E?pMv2jgou0vEcY~A$Q zT(p}k1f+Um&)TX!*27&-AE`+s3949QJ?1D;r$Eb*@_&RXUbj`Y33sVn$G_t;Ye=K2 zY@;Lab*_bAkA@-PB|P~I*fV$lHTIK}aM`9;sZ_UXQ%O*~&WV6;GKFu~o8fk*%SBk; zYI{O&g6oDX8UKC63Q6}#gZ|0gPrEmhh}qJ97RB_*5Gu6L|3oCKdP?Ol#Rrz1;%8i-T;tDLa>hM~jX0}Fn0DdGn^eG<>0n?;-EE%)l|C|$r)wuj49Y&(w zQ}0M!<2PPJ0-7kioh~Aoj~v4zjv9I5EpDm4@1&S~Z%_7d>x1y%K`>1j(a(pQpF_f& zpX{bk3u8cOxFHTYo{^f-pE_OMJN1=obl>HKM~&hwKEb+ZJ6Qlo{+_Y9 zB6@nw9Q8W6*$Y~j1WK*q!c}6nNfU@d2?m9rxu++6lpLgD^&HqV{GzZc&};?F@+Z<) zZMRNsbRQqyw%-uMm5N~Y^j%1Fko?swHFrd%q5CuLB<0{GvnH|qNT>v(m_RfGm2|b( zJ`Rw4eYmUrtooDOOe3rEAQrLvKtvZmxR|9%3s6CpHg-Ai+$7MjaU$U>U%obqXQy!w zXkAk>Jh$chb3Av5Gx^BGvTj;zYL$_}x1u8+D6-GwjJT{&w2LG`6|uEh4Y-%BEzHsQ{wycaL4tgaStsI3>xzD}qSL;P=oo+plffvo2G5wKq9Dsrc`2JMZq7g_ zyaS=;JeziMnFvcQFN4znspFeD*!zf*XTbsRp}czY3^1hl+5ZIGhhXZLfJdnn&5(c@ z_Bzo}tQ=#ybwwf=fQq!-gkBI=4#1i9tk46{?I;g}x<;#KmBBiP{z@&$#O+J-H$~PA z<4|twsSPNO#XkkjXay-kI}DydAK&C; zJs{H#l*lmEps=}8yS7tK2bSNL_8Z6fsVc``5D=Ehz0mV%JyeNp^hfM#))GuYkeKk3+ z*BQVo-Gj<;B5t}Zo2L_M$oB~*QqO#jfj?~bnEJ2?$c`1Rs*)N?GF>n{qJukC{m~Q# z`Mx8!-UfE#_scIZc8xy3mtYF4#F!PpWmXRiTf!6J9@!mS%%ZD9u8b4c7Y# z@_T0$(mBm0$z@Jm$jkl$GMx_W(e_4?}7OINp7ul_&$|KYzab@l&U{*T@NF}wQb^Pk5*`~Q^d z*ElaNVO*0G9#?ocp4Ua8Z_Kd3bAw+CsS)0#8(427^kC8l|4sY!n8g#>`BCUXR5iCOs}0_|WdCbD=*1 z-|LEW_~-QP3Q=eb)N&Lu6gp!?Gsk6dHb;yF7`oQ#1*}JgIY-#G{KD>)8&FHGu?@)? z>zJ5Ag~epC5OnM4&y>CDp5TG#EIcWi%J0;_v{Jh%LRbKSPI>HCfEQd;Ku zx^GzLsvS2?-F@Ab#K$?|&B?qUc*%WVwk>nUjLCW5viIe@=3F`3$KiSq1~Q*dLkO5j zmNJEwNn}@T%PvdeRaCf^9d!^ch4yjJIBe!|Jr0BK5%o^G=fll+&uG)H#LAr?J!qF( zIOWyq-w&w8|DJaD)A>A*Tvm3)U$BJAE$D_AgYWC&6>&Y$F{IUsQEPK#?_85b@6PD7 zJ3JA}m`DCKDuS#`!%qx@K%PXImX{ilzlr2VB9iNgWJVOHiR5b}*}D--M#u7xz!E`s z6cx2k5J*M@IW3fsszfY96m<=;m=|%Ba2zRSUQz++$$^*xa2B#cn?N`Lam673EGz&p zH6aiUPN4-U2S6w(598qoP6j3gtpK3|=E}#-&rgJ;AWDvb*_Q7R9 VATh&mCRl*L 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 ^&<1-1oBQven%B+|8W2+^3v{;@#{v z;BZRLU0-;AcHQ7gTVdP4NjBI{cGX0GL}_5*Zg$gf|4!Q^6uA8!V057WDLcRX zJnv`0TyY#Ie6YW0IC|(J`|A8OI|X!kmQf6<$+UqK^C<$Ql<#KmW|xA>Ky{#cP%Eez zGy-aD0X2Po{8L*%U7&5yPtYc)7qkw7YyouTR8>@GZj_c*boK;{^p}@+J?&=KWR`(S zK~1CmS5;&G{OCY&MR{;jUSnQJ@CIlYbhb4N+DR_I0tMZEcJmQ*ehs<@)q)y8H=Eh( z*=yN>P~!fLUi7NL@ol(HFfVBR3G%4lRUs_!mFDZabXxk2(ys7PrS715Xc`tQiT z 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" } diff --git a/venus-shared/actors/builtin/builtin.go.template b/venus-shared/actors/builtin/builtin.go.template index e3b60e615d..69c3e584df 100644 --- a/venus-shared/actors/builtin/builtin.go.template +++ b/venus-shared/actors/builtin/builtin.go.template @@ -9,7 +9,9 @@ import ( "github.com/ipfs/go-cid" {{range .versions}} + {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" + {{end}} {{end}} "github.com/filecoin-project/go-state-types/abi" @@ -18,7 +20,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors" - miner{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" smoothingtypes "github.com/filecoin-project/go-state-types/builtin/v8/util/smoothing" ) @@ -52,7 +54,7 @@ type PoStProof = proof.PoStProof type FilterEstimate = smoothingtypes.FilterEstimate func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { - return miner{{.latestVersion}}.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) + return minertypes.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) } func ActorNameByCode(c cid.Cid) string { @@ -62,8 +64,10 @@ func ActorNameByCode(c cid.Cid) string { switch { {{range .versions}} + {{if (le . 7)}} case builtin{{.}}.IsBuiltinActor(c): return builtin{{.}}.ActorNameByCode(c) + {{end}} {{end}} default: return "" diff --git a/venus-shared/actors/builtin/cron/actor.go b/venus-shared/actors/builtin/cron/actor.go index 74131e28d2..ea8b26f49d 100644 --- a/venus-shared/actors/builtin/cron/actor.go +++ b/venus-shared/actors/builtin/cron/actor.go @@ -3,11 +3,11 @@ package cron import ( - "fmt" - + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" + "golang.org/x/xerrors" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -23,20 +23,23 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.CronKey { - return nil, fmt.Errorf("actor code is not cron: %s", name) + return nil, xerrors.Errorf("actor code is not cron: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -65,43 +68,46 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store) + case actorstypes.Version9: + return make9(store) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } var ( - Address = builtin8.CronActorAddr - Methods = builtin8.MethodsCron + Address = builtin9.CronActorAddr + Methods = builtin9.MethodsCron ) type State interface { diff --git a/venus-shared/actors/builtin/cron/actor.go.template b/venus-shared/actors/builtin/cron/actor.go.template index b14526167a..83b01d5886 100644 --- a/venus-shared/actors/builtin/cron/actor.go.template +++ b/venus-shared/actors/builtin/cron/actor.go.template @@ -3,30 +3,30 @@ package cron import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" - "fmt" + "golang.org/x/xerrors" types "github.com/filecoin-project/venus/venus-shared/internal" {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.CronKey { - return nil, fmt.Errorf("actor code is not cron: %s", name) + return nil, xerrors.Errorf("actor code is not cron: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -42,17 +42,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } var ( diff --git a/venus-shared/actors/builtin/cron/state.v9.go b/venus-shared/actors/builtin/cron/state.v9.go new file mode 100644 index 0000000000..cb340945e3 --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v9.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron9 "github.com/filecoin-project/go-state-types/builtin/v9/cron" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + out.State = *cron9.ConstructState(cron9.BuiltInEntries()) + return &out, nil +} + +type state9 struct { + cron9.State + store adt.Store +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/actor.go b/venus-shared/actors/builtin/init/actor.go index d1fb69b57c..be089ad8f2 100644 --- a/venus-shared/actors/builtin/init/actor.go +++ b/venus-shared/actors/builtin/init/actor.go @@ -3,9 +3,9 @@ package init import ( - "fmt" - + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,25 +29,28 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" ) var ( - Address = builtin8.InitActorAddr - Methods = builtin8.MethodsInit + Address = builtin9.InitActorAddr + Methods = builtin9.MethodsInit ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.InitKey { - return nil, fmt.Errorf("actor code is not init: %s", name) + return nil, xerrors.Errorf("actor code is not init: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -76,38 +79,41 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, networkName string) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, networkName) - case actors.Version2: + case actorstypes.Version2: return make2(store, networkName) - case actors.Version3: + case actorstypes.Version3: return make3(store, networkName) - case actors.Version4: + case actorstypes.Version4: return make4(store, networkName) - case actors.Version5: + case actorstypes.Version5: return make5(store, networkName) - case actors.Version6: + case actorstypes.Version6: return make6(store, networkName) - case actors.Version7: + case actorstypes.Version7: return make7(store, networkName) - case actors.Version8: + case actorstypes.Version8: return make8(store, networkName) + case actorstypes.Version9: + return make9(store, networkName) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/init/actor.go.template b/venus-shared/actors/builtin/init/actor.go.template index fa4961cb87..9b8ebf523c 100644 --- a/venus-shared/actors/builtin/init/actor.go.template +++ b/venus-shared/actors/builtin/init/actor.go.template @@ -3,8 +3,9 @@ package init import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -17,10 +18,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var ( @@ -31,13 +31,13 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.InitKey { - return nil, fmt.Errorf("actor code is not init: %s", name) + return nil, xerrors.Errorf("actor code is not init: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -53,17 +53,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, networkName string) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, networkName) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/init/state.sep.go.template b/venus-shared/actors/builtin/init/state.sep.go.template index 17aa65b9cd..5059bd1955 100644 --- a/venus-shared/actors/builtin/init/state.sep.go.template +++ b/venus-shared/actors/builtin/init/state.sep.go.template @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -105,12 +105,12 @@ func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v0.go b/venus-shared/actors/builtin/init/state.v0.go index 52fb6f7fa5..185b572199 100644 --- a/venus-shared/actors/builtin/init/state.v0.go +++ b/venus-shared/actors/builtin/init/state.v0.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,12 +88,12 @@ func (s *state0) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v2.go b/venus-shared/actors/builtin/init/state.v2.go index 61ef5d2f0e..d2052f395c 100644 --- a/venus-shared/actors/builtin/init/state.v2.go +++ b/venus-shared/actors/builtin/init/state.v2.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,12 +88,12 @@ func (s *state2) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v3.go b/venus-shared/actors/builtin/init/state.v3.go index 4ea03f994a..709875249e 100644 --- a/venus-shared/actors/builtin/init/state.v3.go +++ b/venus-shared/actors/builtin/init/state.v3.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -91,12 +90,12 @@ func (s *state3) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v4.go b/venus-shared/actors/builtin/init/state.v4.go index 95b393e952..fdb333cfdd 100644 --- a/venus-shared/actors/builtin/init/state.v4.go +++ b/venus-shared/actors/builtin/init/state.v4.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -91,12 +90,12 @@ func (s *state4) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v5.go b/venus-shared/actors/builtin/init/state.v5.go index cf85332c27..0251b64c2f 100644 --- a/venus-shared/actors/builtin/init/state.v5.go +++ b/venus-shared/actors/builtin/init/state.v5.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -91,12 +90,12 @@ func (s *state5) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v6.go b/venus-shared/actors/builtin/init/state.v6.go index a1b895011e..293ef84e39 100644 --- a/venus-shared/actors/builtin/init/state.v6.go +++ b/venus-shared/actors/builtin/init/state.v6.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -91,12 +90,12 @@ func (s *state6) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v7.go b/venus-shared/actors/builtin/init/state.v7.go index b670323197..d5d465bffd 100644 --- a/venus-shared/actors/builtin/init/state.v7.go +++ b/venus-shared/actors/builtin/init/state.v7.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -91,12 +90,12 @@ func (s *state7) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v8.go b/venus-shared/actors/builtin/init/state.v8.go index 3944f0eee5..65750fba10 100644 --- a/venus-shared/actors/builtin/init/state.v8.go +++ b/venus-shared/actors/builtin/init/state.v8.go @@ -3,12 +3,11 @@ package init import ( - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -90,12 +89,12 @@ func (s *state8) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return fmt.Errorf("failed to get address map root: %w", err) + return xerrors.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v9.go b/venus-shared/actors/builtin/init/state.v9.go new file mode 100644 index 0000000000..e54759484f --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v9.go @@ -0,0 +1,114 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin9 "github.com/filecoin-project/go-state-types/builtin" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, networkName string) (State, error) { + out := state9{store: store} + + s, err := init9.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + init9.State + store adt.Store +} + +func (s *state9) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state9) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state9) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state9) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state9) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state9) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state9) Remove(addrs ...address.Address) (err error) { + m, err := adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state9) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state9) AddressMap() (adt.Map, error) { + return adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/market/actor.go b/venus-shared/actors/builtin/market/actor.go index cacf1c50c3..7ee02bf919 100644 --- a/venus-shared/actors/builtin/market/actor.go +++ b/venus-shared/actors/builtin/market/actor.go @@ -5,9 +5,10 @@ package market import ( "unicode/utf8" - "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -15,7 +16,7 @@ import ( "github.com/filecoin-project/go-state-types/cbor" cbg "github.com/whyrusleeping/cbor-gen" - market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -31,7 +32,7 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -39,21 +40,24 @@ import ( ) var ( - Address = builtin8.StorageMarketActorAddr - Methods = builtin8.MethodsMarket + Address = builtintypes.StorageMarketActorAddr + Methods = builtintypes.MethodsMarket ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MarketKey { - return nil, fmt.Errorf("actor code is not market: %s", name) + return nil, xerrors.Errorf("actor code is not market: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -82,38 +86,41 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store) + case actorstypes.Version9: + return make9(store) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { @@ -147,11 +154,11 @@ type DealStates interface { } type DealProposals interface { - ForEach(cb func(id abi.DealID, dp market8.DealProposal) error) error - Get(id abi.DealID) (*market8.DealProposal, bool, error) + ForEach(cb func(id abi.DealID, dp markettypes.DealProposal) error) error + Get(id abi.DealID) (*markettypes.DealProposal, bool, error) array() adt.Array - decode(*cbg.Deferred) (*market8.DealProposal, error) + decode(*cbg.Deferred) (*markettypes.DealProposal, error) } type PublishStorageDealsReturn interface { @@ -161,44 +168,48 @@ type PublishStorageDealsReturn interface { } func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, err } switch av { - case actors.Version0: + case actorstypes.Version0: return decodePublishStorageDealsReturn0(b) - case actors.Version2: + case actorstypes.Version2: return decodePublishStorageDealsReturn2(b) - case actors.Version3: + case actorstypes.Version3: return decodePublishStorageDealsReturn3(b) - case actors.Version4: + case actorstypes.Version4: return decodePublishStorageDealsReturn4(b) - case actors.Version5: + case actorstypes.Version5: return decodePublishStorageDealsReturn5(b) - case actors.Version6: + case actorstypes.Version6: return decodePublishStorageDealsReturn6(b) - case actors.Version7: + case actorstypes.Version7: return decodePublishStorageDealsReturn7(b) - case actors.Version8: + case actorstypes.Version8: return decodePublishStorageDealsReturn8(b) + case actorstypes.Version9: + return decodePublishStorageDealsReturn9(b) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } -type DealProposal = market8.DealProposal +type DealProposal = markettypes.DealProposal +type DealLabel = markettypes.DealLabel -type DealState = market8.DealState +type DealState = markettypes.DealState type DealStateChanges struct { Added []DealIDState @@ -225,7 +236,7 @@ type DealProposalChanges struct { type ProposalIDState struct { ID abi.DealID - Proposal market8.DealProposal + Proposal markettypes.DealProposal } func EmptyDealState() *DealState { @@ -237,7 +248,7 @@ func EmptyDealState() *DealState { } // returns the earned fees and pending fees for a given deal -func GetDealFees(deal market8.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { +func GetDealFees(deal markettypes.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) @@ -252,10 +263,14 @@ func GetDealFees(deal market8.DealProposal, height abi.ChainEpoch) (abi.TokenAmo return ef, big.Sub(tf, ef) } -func labelFromGoString(s string) (market8.DealLabel, error) { +func IsDealActive(state markettypes.DealState) bool { + return state.SectorStartEpoch > -1 && state.SlashEpoch == -1 +} + +func labelFromGoString(s string) (markettypes.DealLabel, error) { if utf8.ValidString(s) { - return market8.NewLabelFromString(s) + return markettypes.NewLabelFromString(s) } else { - return market8.NewLabelFromBytes([]byte(s)) + return markettypes.NewLabelFromBytes([]byte(s)) } } diff --git a/venus-shared/actors/builtin/market/actor.go.template b/venus-shared/actors/builtin/market/actor.go.template index a2476b1b7c..6f76f58957 100644 --- a/venus-shared/actors/builtin/market/actor.go.template +++ b/venus-shared/actors/builtin/market/actor.go.template @@ -3,10 +3,11 @@ package market import ( - "unicode/utf8" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "unicode/utf8" "github.com/filecoin-project/go-state-types/network" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -14,35 +15,35 @@ import ( "github.com/filecoin-project/go-state-types/cbor" cbg "github.com/whyrusleeping/cbor-gen" - market{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin{{import .latestVersion}}market" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtintypes "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/adt" "github.com/filecoin-project/venus/venus-shared/actors" types "github.com/filecoin-project/venus/venus-shared/internal" ) var ( - Address = builtin{{.latestVersion}}.StorageMarketActorAddr - Methods = builtin{{.latestVersion}}.MethodsMarket + Address = builtintypes.StorageMarketActorAddr + Methods = builtintypes.MethodsMarket ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MarketKey { - return nil, fmt.Errorf("actor code is not market: %s", name) + return nil, xerrors.Errorf("actor code is not market: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -58,17 +59,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { @@ -102,11 +103,11 @@ type DealStates interface { } type DealProposals interface { - ForEach(cb func(id abi.DealID, dp market{{.latestVersion}}.DealProposal) error) error - Get(id abi.DealID) (*market{{.latestVersion}}.DealProposal, bool, error) + ForEach(cb func(id abi.DealID, dp markettypes.DealProposal) error) error + Get(id abi.DealID) (*markettypes.DealProposal, bool, error) array() adt.Array - decode(*cbg.Deferred) (*market{{.latestVersion}}.DealProposal, error) + decode(*cbg.Deferred) (*markettypes.DealProposal, error) } @@ -117,23 +118,24 @@ type PublishStorageDealsReturn interface { } func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, err } switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return decodePublishStorageDealsReturn{{.}}(b) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } -type DealProposal = market{{.latestVersion}}.DealProposal +type DealProposal = markettypes.DealProposal +type DealLabel = markettypes.DealLabel -type DealState = market{{.latestVersion}}.DealState +type DealState = markettypes.DealState type DealStateChanges struct { Added []DealIDState @@ -160,7 +162,7 @@ type DealProposalChanges struct { type ProposalIDState struct { ID abi.DealID - Proposal market{{.latestVersion}}.DealProposal + Proposal markettypes.DealProposal } func EmptyDealState() *DealState { @@ -172,7 +174,7 @@ func EmptyDealState() *DealState { } // returns the earned fees and pending fees for a given deal -func GetDealFees(deal market{{.latestVersion}}.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { +func GetDealFees(deal markettypes.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) @@ -187,10 +189,14 @@ func GetDealFees(deal market{{.latestVersion}}.DealProposal, height abi.ChainEpo return ef, big.Sub(tf, ef) } -func labelFromGoString(s string) (market{{.latestVersion}}.DealLabel, error) { +func IsDealActive(state markettypes.DealState) bool { + return state.SectorStartEpoch > -1 && state.SlashEpoch == -1 +} + +func labelFromGoString(s string) (markettypes.DealLabel, error) { if utf8.ValidString(s) { - return market{{.latestVersion}}.NewLabelFromString(s) + return markettypes.NewLabelFromString(s) } else { - return market{{.latestVersion}}.NewLabelFromBytes([]byte(s)) + return markettypes.NewLabelFromBytes([]byte(s)) } } diff --git a/venus-shared/actors/builtin/market/state.sep.go.template b/venus-shared/actors/builtin/market/state.sep.go.template index e23898f4eb..62d260bfe3 100644 --- a/venus-shared/actors/builtin/market/state.sep.go.template +++ b/venus-shared/actors/builtin/market/state.sep.go.template @@ -9,7 +9,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "fmt" + "golang.org/x/xerrors" {{if (ge .v 6)}} rlepluslazy "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-bitfield" @@ -24,7 +24,8 @@ import ( adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" {{else}} market{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}market" - adt{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" + adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt" {{end}} ) @@ -221,7 +222,7 @@ func (s *dealProposals{{.v}}) Get(dealID abi.DealID) (*DealProposal, bool, error proposal, err := fromV{{.v}}DealProposal(proposal{{.v}}) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -232,7 +233,7 @@ func (s *dealProposals{{.v}}) ForEach(cb func(dealID abi.DealID, dp DealProposal return s.Array.ForEach(&dp{{.v}}, func(idx int64) error { dp, err := fromV{{.v}}DealProposal(dp{{.v}}) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -260,12 +261,12 @@ func (s *dealProposals{{.v}}) array() adt.Array { func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) (DealProposal, error) { {{if (le .v 7)}} label, err := labelFromGoString(v{{.v}}.Label) - if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) - } {{else}} - label := v{{.v}}.Label + label, err := fromV{{.v}}Label(v{{.v}}.Label) {{end}} + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } return DealProposal{ PieceCID: v{{.v}}.PieceCID, @@ -285,6 +286,25 @@ func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) (DealProposal, e }, nil } +{{if (ge .v 8)}} + func fromV{{.v}}Label(v{{.v}} market{{.v}}.DealLabel) (DealLabel, error) { + if v{{.v}}.IsString() { + str, err := v{{.v}}.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v{{.v}}.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) + } +{{end}} + + func (s *state{{.v}}) GetState() interface{} { return &s.State @@ -295,7 +315,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn{{.v}})(nil) func decodePublishStorageDealsReturn{{.v}}(b []byte) (PublishStorageDealsReturn, error) { var retval market{{.v}}.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn{{.v}}{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v0.go b/venus-shared/actors/builtin/market/state.v0.go index 12ea6fea8b..390975379e 100644 --- a/venus-shared/actors/builtin/market/state.v0.go +++ b/venus-shared/actors/builtin/market/state.v0.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -205,7 +204,7 @@ func (s *dealProposals0) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV0DealProposal(proposal0) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -216,7 +215,7 @@ func (s *dealProposals0) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp0, func(idx int64) error { dp, err := fromV0DealProposal(dp0) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -244,8 +243,9 @@ func (s *dealProposals0) array() adt.Array { func fromV0DealProposal(v0 market0.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v0.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -275,7 +275,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn0)(nil) func decodePublishStorageDealsReturn0(b []byte) (PublishStorageDealsReturn, error) { var retval market0.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn0{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v2.go b/venus-shared/actors/builtin/market/state.v2.go index b3d7c48455..6c1e14dfa0 100644 --- a/venus-shared/actors/builtin/market/state.v2.go +++ b/venus-shared/actors/builtin/market/state.v2.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -205,7 +204,7 @@ func (s *dealProposals2) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV2DealProposal(proposal2) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -216,7 +215,7 @@ func (s *dealProposals2) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp2, func(idx int64) error { dp, err := fromV2DealProposal(dp2) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -244,8 +243,9 @@ func (s *dealProposals2) array() adt.Array { func fromV2DealProposal(v2 market2.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v2.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -275,7 +275,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn2)(nil) func decodePublishStorageDealsReturn2(b []byte) (PublishStorageDealsReturn, error) { var retval market2.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn2{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v3.go b/venus-shared/actors/builtin/market/state.v3.go index 3bd5eddc86..130d4675d4 100644 --- a/venus-shared/actors/builtin/market/state.v3.go +++ b/venus-shared/actors/builtin/market/state.v3.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -200,7 +199,7 @@ func (s *dealProposals3) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV3DealProposal(proposal3) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -211,7 +210,7 @@ func (s *dealProposals3) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp3, func(idx int64) error { dp, err := fromV3DealProposal(dp3) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -239,8 +238,9 @@ func (s *dealProposals3) array() adt.Array { func fromV3DealProposal(v3 market3.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v3.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -270,7 +270,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn3)(nil) func decodePublishStorageDealsReturn3(b []byte) (PublishStorageDealsReturn, error) { var retval market3.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn3{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v4.go b/venus-shared/actors/builtin/market/state.v4.go index 0c35d6f27f..8cda0b006e 100644 --- a/venus-shared/actors/builtin/market/state.v4.go +++ b/venus-shared/actors/builtin/market/state.v4.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -200,7 +199,7 @@ func (s *dealProposals4) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV4DealProposal(proposal4) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -211,7 +210,7 @@ func (s *dealProposals4) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp4, func(idx int64) error { dp, err := fromV4DealProposal(dp4) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -239,8 +238,9 @@ func (s *dealProposals4) array() adt.Array { func fromV4DealProposal(v4 market4.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v4.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -270,7 +270,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn4)(nil) func decodePublishStorageDealsReturn4(b []byte) (PublishStorageDealsReturn, error) { var retval market4.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn4{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v5.go b/venus-shared/actors/builtin/market/state.v5.go index 29bbb596ed..cfdb18ee8d 100644 --- a/venus-shared/actors/builtin/market/state.v5.go +++ b/venus-shared/actors/builtin/market/state.v5.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -200,7 +199,7 @@ func (s *dealProposals5) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV5DealProposal(proposal5) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -211,7 +210,7 @@ func (s *dealProposals5) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp5, func(idx int64) error { dp, err := fromV5DealProposal(dp5) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -239,8 +238,9 @@ func (s *dealProposals5) array() adt.Array { func fromV5DealProposal(v5 market5.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v5.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -270,7 +270,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn5)(nil) func decodePublishStorageDealsReturn5(b []byte) (PublishStorageDealsReturn, error) { var retval market5.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn5{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v6.go b/venus-shared/actors/builtin/market/state.v6.go index 435348ae12..5742f6da0b 100644 --- a/venus-shared/actors/builtin/market/state.v6.go +++ b/venus-shared/actors/builtin/market/state.v6.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -203,7 +202,7 @@ func (s *dealProposals6) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV6DealProposal(proposal6) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -214,7 +213,7 @@ func (s *dealProposals6) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp6, func(idx int64) error { dp, err := fromV6DealProposal(dp6) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -242,8 +241,9 @@ func (s *dealProposals6) array() adt.Array { func fromV6DealProposal(v6 market6.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v6.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -273,7 +273,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn6)(nil) func decodePublishStorageDealsReturn6(b []byte) (PublishStorageDealsReturn, error) { var retval market6.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn6{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v7.go b/venus-shared/actors/builtin/market/state.v7.go index da7269a88e..5289c5618b 100644 --- a/venus-shared/actors/builtin/market/state.v7.go +++ b/venus-shared/actors/builtin/market/state.v7.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -203,7 +202,7 @@ func (s *dealProposals7) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV7DealProposal(proposal7) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -214,7 +213,7 @@ func (s *dealProposals7) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp7, func(idx int64) error { dp, err := fromV7DealProposal(dp7) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -242,8 +241,9 @@ func (s *dealProposals7) array() adt.Array { func fromV7DealProposal(v7 market7.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v7.Label) + if err != nil { - return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -273,7 +273,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn7)(nil) func decodePublishStorageDealsReturn7(b []byte) (PublishStorageDealsReturn, error) { var retval market7.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn7{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v8.go b/venus-shared/actors/builtin/market/state.v8.go index 235ba81c9a..0514a7fe4f 100644 --- a/venus-shared/actors/builtin/market/state.v8.go +++ b/venus-shared/actors/builtin/market/state.v8.go @@ -5,12 +5,11 @@ package market import ( "bytes" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -19,6 +18,7 @@ import ( types "github.com/filecoin-project/venus/venus-shared/internal" market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" adt8 "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" ) @@ -203,7 +203,7 @@ func (s *dealProposals8) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV8DealProposal(proposal8) if err != nil { - return nil, true, fmt.Errorf("decoding proposal: %w", err) + return nil, true, xerrors.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -214,7 +214,7 @@ func (s *dealProposals8) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp8, func(idx int64) error { dp, err := fromV8DealProposal(dp8) if err != nil { - return fmt.Errorf("decoding proposal: %w", err) + return xerrors.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -241,7 +241,11 @@ func (s *dealProposals8) array() adt.Array { func fromV8DealProposal(v8 market8.DealProposal) (DealProposal, error) { - label := v8.Label + label, err := fromV8Label(v8.Label) + + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } return DealProposal{ PieceCID: v8.PieceCID, @@ -261,6 +265,22 @@ func fromV8DealProposal(v8 market8.DealProposal) (DealProposal, error) { }, nil } +func fromV8Label(v8 market8.DealLabel) (DealLabel, error) { + if v8.IsString() { + str, err := v8.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v8.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) +} + func (s *state8) GetState() interface{} { return &s.State } @@ -270,7 +290,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn8)(nil) func decodePublishStorageDealsReturn8(b []byte) (PublishStorageDealsReturn, error) { var retval market8.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn8{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v9.go b/venus-shared/actors/builtin/market/state.v9.go new file mode 100644 index 0000000000..42288b731e --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v9.go @@ -0,0 +1,328 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-bitfield" + rlepluslazy "github.com/filecoin-project/go-bitfield/rle" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/internal" + + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" + market9 "github.com/filecoin-project/go-state-types/builtin/v9/market" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + + s, err := market9.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + market9.State + store adt.Store +} + +func (s *state9) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state9) BalancesChanged(otherState State) (bool, error) { + otherState9, ok := otherState.(*state9) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState9.State.EscrowTable) || !s.State.LockedTable.Equals(otherState9.State.LockedTable), nil +} + +func (s *state9) StatesChanged(otherState State) (bool, error) { + otherState9, ok := otherState.(*state9) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState9.State.States), nil +} + +func (s *state9) States() (DealStates, error) { + stateArray, err := adt9.AsArray(s.store, s.State.States, market9.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates9{stateArray}, nil +} + +func (s *state9) ProposalsChanged(otherState State) (bool, error) { + otherState9, ok := otherState.(*state9) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState9.State.Proposals), nil +} + +func (s *state9) Proposals() (DealProposals, error) { + proposalArray, err := adt9.AsArray(s.store, s.State.Proposals, market9.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals9{proposalArray}, nil +} + +func (s *state9) EscrowTable() (BalanceTable, error) { + bt, err := adt9.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable9{bt}, nil +} + +func (s *state9) LockedTable() (BalanceTable, error) { + bt, err := adt9.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable9{bt}, nil +} + +func (s *state9) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market9.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state9) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable9 struct { + *adt9.BalanceTable +} + +func (bt *balanceTable9) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt9.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates9 struct { + adt.Array +} + +func (s *dealStates9) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal9 market9.DealState + found, err := s.Array.Get(uint64(dealID), &deal9) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV9DealState(deal9) + return &deal, true, nil +} + +func (s *dealStates9) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds9 market9.DealState + return s.Array.ForEach(&ds9, func(idx int64) error { + return cb(abi.DealID(idx), fromV9DealState(ds9)) + }) +} + +func (s *dealStates9) decode(val *cbg.Deferred) (*DealState, error) { + var ds9 market9.DealState + if err := ds9.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV9DealState(ds9) + return &ds, nil +} + +func (s *dealStates9) array() adt.Array { + return s.Array +} + +func fromV9DealState(v9 market9.DealState) DealState { + return (DealState)(v9) +} + +type dealProposals9 struct { + adt.Array +} + +func (s *dealProposals9) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal9 market9.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal9) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + + proposal, err := fromV9DealProposal(proposal9) + if err != nil { + return nil, true, xerrors.Errorf("decoding proposal: %w", err) + } + + return &proposal, true, nil +} + +func (s *dealProposals9) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp9 market9.DealProposal + return s.Array.ForEach(&dp9, func(idx int64) error { + dp, err := fromV9DealProposal(dp9) + if err != nil { + return xerrors.Errorf("decoding proposal: %w", err) + } + + return cb(abi.DealID(idx), dp) + }) +} + +func (s *dealProposals9) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp9 market9.DealProposal + if err := dp9.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + + dp, err := fromV9DealProposal(dp9) + if err != nil { + return nil, err + } + + return &dp, nil +} + +func (s *dealProposals9) array() adt.Array { + return s.Array +} + +func fromV9DealProposal(v9 market9.DealProposal) (DealProposal, error) { + + label, err := fromV9Label(v9.Label) + + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } + + return DealProposal{ + PieceCID: v9.PieceCID, + PieceSize: v9.PieceSize, + VerifiedDeal: v9.VerifiedDeal, + Client: v9.Client, + Provider: v9.Provider, + + Label: label, + + StartEpoch: v9.StartEpoch, + EndEpoch: v9.EndEpoch, + StoragePricePerEpoch: v9.StoragePricePerEpoch, + + ProviderCollateral: v9.ProviderCollateral, + ClientCollateral: v9.ClientCollateral, + }, nil +} + +func fromV9Label(v9 market9.DealLabel) (DealLabel, error) { + if v9.IsString() { + str, err := v9.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v9.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn9)(nil) + +func decodePublishStorageDealsReturn9(b []byte) (PublishStorageDealsReturn, error) { + var retval market9.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn9{retval}, nil +} + +type publishStorageDealsReturn9 struct { + market9.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn9) IsDealValid(index uint64) (bool, int, error) { + + set, err := r.ValidDeals.IsSet(index) + if err != nil || !set { + return false, -1, err + } + maskBf, err := bitfield.NewFromIter(&rlepluslazy.RunSliceIterator{ + Runs: []rlepluslazy.Run{rlepluslazy.Run{Val: true, Len: index}}}) + if err != nil { + return false, -1, err + } + before, err := bitfield.IntersectBitField(maskBf, r.ValidDeals) + if err != nil { + return false, -1, err + } + outIdx, err := before.Count() + if err != nil { + return false, -1, err + } + return set, int(outIdx), nil + +} + +func (r *publishStorageDealsReturn9) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/miner/actor.go b/venus-shared/actors/builtin/miner/actor.go index 3df7e041d7..d86c48794b 100644 --- a/venus-shared/actors/builtin/miner/actor.go +++ b/venus-shared/actors/builtin/miner/actor.go @@ -3,12 +3,12 @@ package miner import ( - "fmt" - + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" @@ -16,7 +16,7 @@ import ( "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/proof" - miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -38,14 +38,17 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MinerKey { - return nil, fmt.Errorf("actor code is not miner: %s", name) + return nil, xerrors.Errorf("actor code is not miner: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -74,7 +77,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actors.Version) (State, error) { @@ -104,8 +107,11 @@ func MakeState(store adt.Store, av actors.Version) (State, error) { case actors.Version8: return make8(store) + case actors.Version9: + return make9(store) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { @@ -122,8 +128,8 @@ type State interface { GetSector(abi.SectorNumber) (*SectorOnChainInfo, error) FindSector(abi.SectorNumber) (*SectorLocation, error) GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error) - GetPrecommittedSector(abi.SectorNumber) (*miner8.SectorPreCommitOnChainInfo, error) - ForEachPrecommittedSector(func(miner8.SectorPreCommitOnChainInfo) error) error + GetPrecommittedSector(abi.SectorNumber) (*miner9.SectorPreCommitOnChainInfo, error) + ForEachPrecommittedSector(func(miner9.SectorPreCommitOnChainInfo) error) error LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error) NumLiveSectors() (uint64, error) IsAllocated(abi.SectorNumber) (bool, error) @@ -152,7 +158,7 @@ type State interface { sectors() (adt.Array, error) decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error) precommits() (adt.Map, error) - decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (miner8.SectorPreCommitOnChainInfo, error) + decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (miner9.SectorPreCommitOnChainInfo, error) GetState() interface{} } @@ -190,7 +196,7 @@ type Partition interface { UnprovenSectors() (bitfield.BitField, error) } -type SectorOnChainInfo = miner8.SectorOnChainInfo +type SectorOnChainInfo = miner9.SectorOnChainInfo func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredSealProof, error) { // We added support for the new proofs in network version 7, and removed support for the old @@ -208,7 +214,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1, nil default: - return -1, fmt.Errorf("unrecognized window post type: %d", proof) + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) } } @@ -224,7 +230,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil default: - return -1, fmt.Errorf("unrecognized window post type: %d", proof) + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) } } @@ -241,12 +247,13 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil default: - return -1, fmt.Errorf("unknown proof type %d", proof) + return -1, xerrors.Errorf("unknown proof type %d", proof) } } -type MinerInfo = miner8.MinerInfo -type WorkerKeyChange = miner8.WorkerKeyChange +type MinerInfo = miner9.MinerInfo +type WorkerKeyChange = miner9.WorkerKeyChange +type SectorPreCommitOnChainInfo = miner9.SectorPreCommitOnChainInfo type WindowPostVerifyInfo = proof.WindowPoStVerifyInfo type SectorExpiration struct { @@ -274,8 +281,8 @@ type SectorExtensions struct { } type PreCommitChanges struct { - Added []miner8.SectorPreCommitOnChainInfo - Removed []miner8.SectorPreCommitOnChainInfo + Added []miner9.SectorPreCommitOnChainInfo + Removed []miner9.SectorPreCommitOnChainInfo } type LockedFunds struct { diff --git a/venus-shared/actors/builtin/miner/actor.go.template b/venus-shared/actors/builtin/miner/actor.go.template index d6cc6ec1b2..65a2b2bae6 100644 --- a/venus-shared/actors/builtin/miner/actor.go.template +++ b/venus-shared/actors/builtin/miner/actor.go.template @@ -3,11 +3,12 @@ package miner import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" @@ -29,13 +30,13 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MinerKey { - return nil, fmt.Errorf("actor code is not miner: %s", name) + return nil, xerrors.Errorf("actor code is not miner: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -51,7 +52,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actors.Version) (State, error) { @@ -61,7 +62,7 @@ func MakeState(store adt.Store, av actors.Version) (State, error) { return make{{.}}(store) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { @@ -164,7 +165,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1, nil default: - return -1, fmt.Errorf("unrecognized window post type: %d", proof) + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) } } @@ -180,7 +181,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil default: - return -1, fmt.Errorf("unrecognized window post type: %d", proof) + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) } } @@ -197,12 +198,13 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil default: - return -1, fmt.Errorf("unknown proof type %d", proof) + return -1, xerrors.Errorf("unknown proof type %d", proof) } } type MinerInfo = miner{{.latestVersion}}.MinerInfo type WorkerKeyChange = miner{{.latestVersion}}.WorkerKeyChange +type SectorPreCommitOnChainInfo = miner{{.latestVersion}}.SectorPreCommitOnChainInfo type WindowPostVerifyInfo = proof.WindowPoStVerifyInfo type SectorExpiration struct { diff --git a/venus-shared/actors/builtin/miner/state.sep.go.template b/venus-shared/actors/builtin/miner/state.sep.go.template index 604f43979c..ea0281bcaa 100644 --- a/venus-shared/actors/builtin/miner/state.sep.go.template +++ b/venus-shared/actors/builtin/miner/state.sep.go.template @@ -14,10 +14,10 @@ import ( "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v{{.latestVersion}}/miner" {{if (le .v 7)}} {{if (ge .v 3)}} @@ -67,7 +67,7 @@ type partition{{.v}} struct { func (s *state{{.v}}) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -212,7 +212,7 @@ func (s *state{{.v}}) GetSectorExpiration(num abi.SectorNumber) (*SectorExpirati return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -583,11 +583,17 @@ func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorO func fromV{{.v}}SectorPreCommitOnChainInfo(v{{.v}} miner{{.v}}.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v{{.v}}.Info), + Info: minertypes.SectorPreCommitInfo{ + SealProof: v{{.v}}.Info.SealProof, + SectorNumber: v{{.v}}.Info.SectorNumber, + SealedCID: v{{.v}}.Info.SealedCID, + SealRandEpoch: v{{.v}}.Info.SealRandEpoch, + DealIDs: v{{.v}}.Info.DealIDs, + Expiration: v{{.v}}.Info.Expiration, + UnsealedCid: nil, + }, PreCommitDeposit: v{{.v}}.PreCommitDeposit, PreCommitEpoch: v{{.v}}.PreCommitEpoch, - DealWeight: v{{.v}}.DealWeight, - VerifiedDealWeight: v{{.v}}.VerifiedDealWeight, } } diff --git a/venus-shared/actors/builtin/miner/state.v0.go b/venus-shared/actors/builtin/miner/state.v0.go index 02db7ee143..d98620f1b8 100644 --- a/venus-shared/actors/builtin/miner/state.v0.go +++ b/venus-shared/actors/builtin/miner/state.v0.go @@ -8,16 +8,15 @@ import ( "github.com/filecoin-project/go-state-types/big" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" @@ -59,7 +58,7 @@ type partition0 struct { func (s *state0) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -194,7 +193,7 @@ func (s *state0) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -515,11 +514,17 @@ func fromV0SectorOnChainInfo(v0 miner0.SectorOnChainInfo) SectorOnChainInfo { func fromV0SectorPreCommitOnChainInfo(v0 miner0.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v0.Info), - PreCommitDeposit: v0.PreCommitDeposit, - PreCommitEpoch: v0.PreCommitEpoch, - DealWeight: v0.DealWeight, - VerifiedDealWeight: v0.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v0.Info.SealProof, + SectorNumber: v0.Info.SectorNumber, + SealedCID: v0.Info.SealedCID, + SealRandEpoch: v0.Info.SealRandEpoch, + DealIDs: v0.Info.DealIDs, + Expiration: v0.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v0.PreCommitDeposit, + PreCommitEpoch: v0.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v2.go b/venus-shared/actors/builtin/miner/state.v2.go index c5a2e513fc..ff14a3f7da 100644 --- a/venus-shared/actors/builtin/miner/state.v2.go +++ b/venus-shared/actors/builtin/miner/state.v2.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" @@ -57,7 +56,7 @@ type partition2 struct { func (s *state2) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -192,7 +191,7 @@ func (s *state2) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -545,11 +544,17 @@ func fromV2SectorOnChainInfo(v2 miner2.SectorOnChainInfo) SectorOnChainInfo { func fromV2SectorPreCommitOnChainInfo(v2 miner2.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v2.Info), - PreCommitDeposit: v2.PreCommitDeposit, - PreCommitEpoch: v2.PreCommitEpoch, - DealWeight: v2.DealWeight, - VerifiedDealWeight: v2.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v2.Info.SealProof, + SectorNumber: v2.Info.SectorNumber, + SealedCID: v2.Info.SealedCID, + SealRandEpoch: v2.Info.SealRandEpoch, + DealIDs: v2.Info.DealIDs, + Expiration: v2.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v2.PreCommitDeposit, + PreCommitEpoch: v2.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v3.go b/venus-shared/actors/builtin/miner/state.v3.go index 21847b7e7b..127fc8a618 100644 --- a/venus-shared/actors/builtin/miner/state.v3.go +++ b/venus-shared/actors/builtin/miner/state.v3.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" @@ -59,7 +58,7 @@ type partition3 struct { func (s *state3) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -194,7 +193,7 @@ func (s *state3) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -546,11 +545,17 @@ func fromV3SectorOnChainInfo(v3 miner3.SectorOnChainInfo) SectorOnChainInfo { func fromV3SectorPreCommitOnChainInfo(v3 miner3.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v3.Info), - PreCommitDeposit: v3.PreCommitDeposit, - PreCommitEpoch: v3.PreCommitEpoch, - DealWeight: v3.DealWeight, - VerifiedDealWeight: v3.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v3.Info.SealProof, + SectorNumber: v3.Info.SectorNumber, + SealedCID: v3.Info.SealedCID, + SealRandEpoch: v3.Info.SealRandEpoch, + DealIDs: v3.Info.DealIDs, + Expiration: v3.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v3.PreCommitDeposit, + PreCommitEpoch: v3.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v4.go b/venus-shared/actors/builtin/miner/state.v4.go index ce377c783d..354f4bf136 100644 --- a/venus-shared/actors/builtin/miner/state.v4.go +++ b/venus-shared/actors/builtin/miner/state.v4.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" @@ -59,7 +58,7 @@ type partition4 struct { func (s *state4) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -194,7 +193,7 @@ func (s *state4) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -546,11 +545,17 @@ func fromV4SectorOnChainInfo(v4 miner4.SectorOnChainInfo) SectorOnChainInfo { func fromV4SectorPreCommitOnChainInfo(v4 miner4.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v4.Info), - PreCommitDeposit: v4.PreCommitDeposit, - PreCommitEpoch: v4.PreCommitEpoch, - DealWeight: v4.DealWeight, - VerifiedDealWeight: v4.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v4.Info.SealProof, + SectorNumber: v4.Info.SectorNumber, + SealedCID: v4.Info.SealedCID, + SealRandEpoch: v4.Info.SealRandEpoch, + DealIDs: v4.Info.DealIDs, + Expiration: v4.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v4.PreCommitDeposit, + PreCommitEpoch: v4.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v5.go b/venus-shared/actors/builtin/miner/state.v5.go index faddc30df6..7c286ab327 100644 --- a/venus-shared/actors/builtin/miner/state.v5.go +++ b/venus-shared/actors/builtin/miner/state.v5.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" @@ -59,7 +58,7 @@ type partition5 struct { func (s *state5) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -194,7 +193,7 @@ func (s *state5) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -546,11 +545,17 @@ func fromV5SectorOnChainInfo(v5 miner5.SectorOnChainInfo) SectorOnChainInfo { func fromV5SectorPreCommitOnChainInfo(v5 miner5.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v5.Info), - PreCommitDeposit: v5.PreCommitDeposit, - PreCommitEpoch: v5.PreCommitEpoch, - DealWeight: v5.DealWeight, - VerifiedDealWeight: v5.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v5.Info.SealProof, + SectorNumber: v5.Info.SectorNumber, + SealedCID: v5.Info.SealedCID, + SealRandEpoch: v5.Info.SealRandEpoch, + DealIDs: v5.Info.DealIDs, + Expiration: v5.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v5.PreCommitDeposit, + PreCommitEpoch: v5.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v6.go b/venus-shared/actors/builtin/miner/state.v6.go index 4ac230a8bd..19e0a492d0 100644 --- a/venus-shared/actors/builtin/miner/state.v6.go +++ b/venus-shared/actors/builtin/miner/state.v6.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" @@ -59,7 +58,7 @@ type partition6 struct { func (s *state6) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -194,7 +193,7 @@ func (s *state6) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -546,11 +545,17 @@ func fromV6SectorOnChainInfo(v6 miner6.SectorOnChainInfo) SectorOnChainInfo { func fromV6SectorPreCommitOnChainInfo(v6 miner6.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v6.Info), - PreCommitDeposit: v6.PreCommitDeposit, - PreCommitEpoch: v6.PreCommitEpoch, - DealWeight: v6.DealWeight, - VerifiedDealWeight: v6.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v6.Info.SealProof, + SectorNumber: v6.Info.SectorNumber, + SealedCID: v6.Info.SealedCID, + SealRandEpoch: v6.Info.SealRandEpoch, + DealIDs: v6.Info.DealIDs, + Expiration: v6.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v6.PreCommitDeposit, + PreCommitEpoch: v6.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v7.go b/venus-shared/actors/builtin/miner/state.v7.go index cc21fe427b..d258e2f6f8 100644 --- a/venus-shared/actors/builtin/miner/state.v7.go +++ b/venus-shared/actors/builtin/miner/state.v7.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" @@ -59,7 +58,7 @@ type partition7 struct { func (s *state7) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -193,7 +192,7 @@ func (s *state7) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -547,11 +546,17 @@ func fromV7SectorOnChainInfo(v7 miner7.SectorOnChainInfo) SectorOnChainInfo { func fromV7SectorPreCommitOnChainInfo(v7 miner7.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v7.Info), - PreCommitDeposit: v7.PreCommitDeposit, - PreCommitEpoch: v7.PreCommitEpoch, - DealWeight: v7.DealWeight, - VerifiedDealWeight: v7.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v7.Info.SealProof, + SectorNumber: v7.Info.SectorNumber, + SealedCID: v7.Info.SealedCID, + SealRandEpoch: v7.Info.SealRandEpoch, + DealIDs: v7.Info.DealIDs, + Expiration: v7.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v7.PreCommitDeposit, + PreCommitEpoch: v7.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v8.go b/venus-shared/actors/builtin/miner/state.v8.go index 84c3b2b9e2..ca0adfb058 100644 --- a/venus-shared/actors/builtin/miner/state.v8.go +++ b/venus-shared/actors/builtin/miner/state.v8.go @@ -6,16 +6,15 @@ import ( "bytes" "errors" - "fmt" - "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" builtin8 "github.com/filecoin-project/go-state-types/builtin" @@ -58,7 +57,7 @@ type partition8 struct { func (s *state8) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = fmt.Errorf("failed to get available balance: %w", r) + err = xerrors.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -192,7 +191,7 @@ func (s *state8) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, fmt.Errorf("failed to find sector %d", num) + return nil, xerrors.Errorf("failed to find sector %d", num) } return &out, nil } @@ -546,11 +545,17 @@ func fromV8SectorOnChainInfo(v8 miner8.SectorOnChainInfo) SectorOnChainInfo { func fromV8SectorPreCommitOnChainInfo(v8 miner8.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v8.Info), - PreCommitDeposit: v8.PreCommitDeposit, - PreCommitEpoch: v8.PreCommitEpoch, - DealWeight: v8.DealWeight, - VerifiedDealWeight: v8.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v8.Info.SealProof, + SectorNumber: v8.Info.SectorNumber, + SealedCID: v8.Info.SealedCID, + SealRandEpoch: v8.Info.SealRandEpoch, + DealIDs: v8.Info.DealIDs, + Expiration: v8.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v8.PreCommitDeposit, + PreCommitEpoch: v8.PreCommitEpoch, } } diff --git a/venus-shared/actors/builtin/miner/state.v9.go b/venus-shared/actors/builtin/miner/state.v9.go new file mode 100644 index 0000000000..7c7cec02bf --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v9.go @@ -0,0 +1,564 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin9 "github.com/filecoin-project/go-state-types/builtin" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + out.State = miner9.State{} + return &out, nil +} + +type state9 struct { + miner9.State + store adt.Store +} + +type deadline9 struct { + miner9.Deadline + store adt.Store +} + +type partition9 struct { + miner9.Partition + store adt.Store +} + +func (s *state9) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state9) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state9) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state9) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state9) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state9) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state9) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV9SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state9) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state9) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner9.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state9) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner9.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner9.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner9.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner9.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner9.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state9) GetPrecommittedSector(num abi.SectorNumber) (*minertypes.SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV9SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state9) ForEachPrecommittedSector(cb func(minertypes.SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt9.AsMap(s.store, s.State.PreCommittedSectors, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner9.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV9SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state9) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner9.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info9 miner9.SectorOnChainInfo + if err := sectors.ForEach(&info9, func(_ int64) error { + info := fromV9SectorOnChainInfo(info9) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos9, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos9)) + for i, info9 := range infos9 { + info := fromV9SectorOnChainInfo(*info9) + infos[i] = &info + } + return infos, nil +} + +func (s *state9) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state9) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state9) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state9) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state9) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state9) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline9{*dl, s.store}, nil +} + +func (s *state9) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner9.Deadline) error { + return cb(i, &deadline9{*dl, s.store}) + }) +} + +func (s *state9) NumDeadlines() (uint64, error) { + return miner9.WPoStPeriodDeadlines, nil +} + +func (s *state9) DeadlinesChanged(other State) (bool, error) { + other9, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other9.Deadlines), nil +} + +func (s *state9) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state9) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + PendingWorkerKey: (*WorkerKeyChange)(info.PendingWorkerKey), + + PeerId: info.PeerId, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + return mi, nil +} + +func (s *state9) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state9) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state9) sectors() (adt.Array, error) { + return adt9.AsArray(s.store, s.Sectors, miner9.SectorsAmtBitwidth) +} + +func (s *state9) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner9.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV9SectorOnChainInfo(si), nil +} + +func (s *state9) precommits() (adt.Map, error) { + return adt9.AsMap(s.store, s.PreCommittedSectors, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (minertypes.SectorPreCommitOnChainInfo, error) { + var sp miner9.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return minertypes.SectorPreCommitOnChainInfo{}, err + } + + return fromV9SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state9) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner9.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner9.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline9) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition9{*p, d.store}, nil +} + +func (d *deadline9) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner9.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition9{part, d.store}) + }) +} + +func (d *deadline9) PartitionsChanged(other Deadline) (bool, error) { + other9, ok := other.(*deadline9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other9.Deadline.Partitions), nil +} + +func (d *deadline9) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline9) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition9) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition9) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition9) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition9) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV9SectorOnChainInfo(v9 miner9.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v9.SectorNumber, + SealProof: v9.SealProof, + SealedCID: v9.SealedCID, + DealIDs: v9.DealIDs, + Activation: v9.Activation, + Expiration: v9.Expiration, + DealWeight: v9.DealWeight, + VerifiedDealWeight: v9.VerifiedDealWeight, + InitialPledge: v9.InitialPledge, + ExpectedDayReward: v9.ExpectedDayReward, + ExpectedStoragePledge: v9.ExpectedStoragePledge, + + SectorKeyCID: v9.SectorKeyCID, + } + return info +} + +func fromV9SectorPreCommitOnChainInfo(v9 miner9.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { + return minertypes.SectorPreCommitOnChainInfo{ + Info: minertypes.SectorPreCommitInfo{ + SealProof: v9.Info.SealProof, + SectorNumber: v9.Info.SectorNumber, + SealedCID: v9.Info.SealedCID, + SealRandEpoch: v9.Info.SealRandEpoch, + DealIDs: v9.Info.DealIDs, + Expiration: v9.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v9.PreCommitDeposit, + PreCommitEpoch: v9.PreCommitEpoch, + } +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/actor.go b/venus-shared/actors/builtin/multisig/actor.go index 5b796af884..0c2bad8904 100644 --- a/venus-shared/actors/builtin/multisig/actor.go +++ b/venus-shared/actors/builtin/multisig/actor.go @@ -5,14 +5,17 @@ package multisig import ( "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/minio/blake2b-simd" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/cbor" - msig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" + msig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -28,7 +31,7 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -38,14 +41,17 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MultisigKey { - return nil, fmt.Errorf("actor code is not multisig: %s", name) + return nil, xerrors.Errorf("actor code is not multisig: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -74,38 +80,41 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version2: + case actorstypes.Version2: return make2(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version3: + case actorstypes.Version3: return make3(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version4: + case actorstypes.Version4: return make4(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version5: + case actorstypes.Version5: return make5(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version6: + case actorstypes.Version6: return make6(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version7: + case actorstypes.Version7: return make7(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version8: + case actorstypes.Version8: return make8(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + case actorstypes.Version9: + return make9(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { @@ -126,36 +135,39 @@ type State interface { GetState() interface{} } -type Transaction = msig8.Transaction +type Transaction = msig9.Transaction -var Methods = builtin8.MethodsMultisig +var Methods = builtintypes.MethodsMultisig -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { - case actors.Version0: + case actorstypes.Version0: return message0{from} - case actors.Version2: + case actorstypes.Version2: return message2{message0{from}} - case actors.Version3: + case actorstypes.Version3: return message3{message0{from}} - case actors.Version4: + case actorstypes.Version4: return message4{message0{from}} - case actors.Version5: + case actorstypes.Version5: return message5{message0{from}} - case actors.Version6: + case actorstypes.Version6: return message6{message0{from}} - case actors.Version7: + case actorstypes.Version7: return message7{message0{from}} - case actors.Version8: + case actorstypes.Version8: return message8{message0{from}} + + case actorstypes.Version9: + return message9{message0{from}} default: panic(fmt.Sprintf("unsupported actors version: %d", version)) } @@ -179,22 +191,22 @@ type MessageBuilder interface { } // this type is the same between v0 and v2 -type ProposalHashData = msig8.ProposalHashData -type ProposeReturn = msig8.ProposeReturn -type ProposeParams = msig8.ProposeParams -type ApproveReturn = msig8.ApproveReturn +type ProposalHashData = msig9.ProposalHashData +type ProposeReturn = msig9.ProposeReturn +type ProposeParams = msig9.ProposeParams +type ApproveReturn = msig9.ApproveReturn func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { - params := msig8.TxnIDParams{ID: msig8.TxnID(id)} + params := msig9.TxnIDParams{ID: msig9.TxnID(id)} if data != nil { if data.Requester.Protocol() != address.ID { - return nil, fmt.Errorf("proposer address must be an ID address, was %s", data.Requester) + return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) } if data.Value.Sign() == -1 { - return nil, fmt.Errorf("proposal value must be non-negative, was %s", data.Value) + return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) } if data.To == address.Undef { - return nil, fmt.Errorf("proposed destination address must be set") + return nil, xerrors.Errorf("proposed destination address must be set") } pser, err := data.Serialize() if err != nil { diff --git a/venus-shared/actors/builtin/multisig/actor.go.template b/venus-shared/actors/builtin/multisig/actor.go.template index d48440a53d..06971f2832 100644 --- a/venus-shared/actors/builtin/multisig/actor.go.template +++ b/venus-shared/actors/builtin/multisig/actor.go.template @@ -3,10 +3,12 @@ package multisig import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "fmt" "github.com/minio/blake2b-simd" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -16,11 +18,11 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtintypes "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -29,13 +31,13 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MultisigKey { - return nil, fmt.Errorf("actor code is not multisig: %s", name) + return nil, xerrors.Errorf("actor code is not multisig: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -51,17 +53,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, signers, threshold, startEpoch, unlockDuration, initialBalance) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { @@ -84,12 +86,12 @@ type State interface { type Transaction = msig{{.latestVersion}}.Transaction -var Methods = builtin{{.latestVersion}}.MethodsMultisig +var Methods = builtintypes.MethodsMultisig -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return message{{.}}{{"{"}}{{if (ge . 2)}}message0{from}{{else}}from{{end}}} {{end}} default: panic(fmt.Sprintf("unsupported actors version: %d", version)) @@ -123,13 +125,13 @@ func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { params := msig{{.latestVersion}}.TxnIDParams{ID: msig{{.latestVersion}}.TxnID(id)} if data != nil { if data.Requester.Protocol() != address.ID { - return nil, fmt.Errorf("proposer address must be an ID address, was %s", data.Requester) + return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) } if data.Value.Sign() == -1 { - return nil, fmt.Errorf("proposal value must be non-negative, was %s", data.Value) + return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) } if data.To == address.Undef { - return nil, fmt.Errorf("proposed destination address must be set") + return nil, xerrors.Errorf("proposed destination address must be set") } pser, err := data.Serialize() if err != nil { diff --git a/venus-shared/actors/builtin/multisig/message.sep.go.template b/venus-shared/actors/builtin/multisig/message.sep.go.template index 55e6901634..21ea637130 100644 --- a/venus-shared/actors/builtin/multisig/message.sep.go.template +++ b/venus-shared/actors/builtin/multisig/message.sep.go.template @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -13,12 +13,12 @@ import ( init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" multisig{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/multisig" {{else}} - builtin{{.v}} "github.com/filecoin-project/go-state-types/builtin" - multisig{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/multisig" - init{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/init" + actorstypes "github.com/filecoin-project/go-state-types/actors" + multisig{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}multisig" + init{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin/v{{.latestVersion}}/init" {{end}} - + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -35,7 +35,7 @@ func (m message{{.v}}) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -43,11 +43,11 @@ func (m message{{.v}}) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } {{if (le .v 1)}} if unlockStart != 0 { - return nil, fmt.Errorf("actors v0 does not support a non-zero vesting start time") + return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") } {{end}} // Set up constructor parameters for multisig @@ -70,13 +70,13 @@ func (m message{{.v}}) Create( ConstructorParams: enc, } {{else}} - code, ok := actors.GetActorCodeID(actors.Version{{.v}}, actors.MultisigKey) + code, ok := actors.GetActorCodeID(actorstypes.Version{{.v}}, actors.MultisigKey) if !ok { - return nil, fmt.Errorf("failed to get multisig code ID") + return nil, xerrors.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init8.ExecParams{ + execParams := &init{{.latestVersion}}.ExecParams{ CodeCID: code, ConstructorParams: enc, } @@ -90,7 +90,7 @@ func (m message{{.v}}) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin{{.v}}.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil @@ -102,19 +102,19 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, method abi.MethodNum, params []byte) (*types.Message, error) { if msig == address.Undef { - return nil, fmt.Errorf("must provide a multisig address for proposal") + return nil, xerrors.Errorf("must provide a multisig address for proposal") } if to == address.Undef { - return nil, fmt.Errorf("must provide a target address for proposal") + return nil, xerrors.Errorf("must provide a target address for proposal") } if amt.Sign() == -1 { - return nil, fmt.Errorf("must provide a non-negative amount for proposed send") + return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ @@ -124,7 +124,7 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, Params: params, }) if actErr != nil { - return nil, fmt.Errorf("failed to serialize parameters: %w", actErr) + return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) } return &types.Message{ diff --git a/venus-shared/actors/builtin/multisig/message.v0.go b/venus-shared/actors/builtin/multisig/message.v0.go index 520582a236..bc35eca238 100644 --- a/venus-shared/actors/builtin/multisig/message.v0.go +++ b/venus-shared/actors/builtin/multisig/message.v0.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" multisig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message0) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,11 +37,11 @@ func (m message0) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } if unlockStart != 0 { - return nil, fmt.Errorf("actors v0 does not support a non-zero vesting start time") + return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") } // Set up constructor parameters for multisig @@ -69,7 +70,7 @@ func (m message0) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin0.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil @@ -79,19 +80,19 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, method abi.MethodNum, params []byte) (*types.Message, error) { if msig == address.Undef { - return nil, fmt.Errorf("must provide a multisig address for proposal") + return nil, xerrors.Errorf("must provide a multisig address for proposal") } if to == address.Undef { - return nil, fmt.Errorf("must provide a target address for proposal") + return nil, xerrors.Errorf("must provide a target address for proposal") } if amt.Sign() == -1 { - return nil, fmt.Errorf("must provide a non-negative amount for proposed send") + return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ @@ -101,7 +102,7 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, Params: params, }) if actErr != nil { - return nil, fmt.Errorf("failed to serialize parameters: %w", actErr) + return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) } return &types.Message{ diff --git a/venus-shared/actors/builtin/multisig/message.v2.go b/venus-shared/actors/builtin/multisig/message.v2.go index 6398e67229..ea02287c05 100644 --- a/venus-shared/actors/builtin/multisig/message.v2.go +++ b/venus-shared/actors/builtin/multisig/message.v2.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message2) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message2) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -66,7 +67,7 @@ func (m message2) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin2.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v3.go b/venus-shared/actors/builtin/multisig/message.v3.go index 6354087e51..4bca3d6e3d 100644 --- a/venus-shared/actors/builtin/multisig/message.v3.go +++ b/venus-shared/actors/builtin/multisig/message.v3.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" multisig3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message3) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message3) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -66,7 +67,7 @@ func (m message3) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin3.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v4.go b/venus-shared/actors/builtin/multisig/message.v4.go index c712e7c040..18e0e28ae3 100644 --- a/venus-shared/actors/builtin/multisig/message.v4.go +++ b/venus-shared/actors/builtin/multisig/message.v4.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" multisig4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message4) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message4) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -66,7 +67,7 @@ func (m message4) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin4.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v5.go b/venus-shared/actors/builtin/multisig/message.v5.go index 77fa796c23..15744a5e6f 100644 --- a/venus-shared/actors/builtin/multisig/message.v5.go +++ b/venus-shared/actors/builtin/multisig/message.v5.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" multisig5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message5) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message5) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -66,7 +67,7 @@ func (m message5) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin5.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v6.go b/venus-shared/actors/builtin/multisig/message.v6.go index f319a7111e..364df4e4fa 100644 --- a/venus-shared/actors/builtin/multisig/message.v6.go +++ b/venus-shared/actors/builtin/multisig/message.v6.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" multisig6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message6) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message6) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -66,7 +67,7 @@ func (m message6) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin6.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v7.go b/venus-shared/actors/builtin/multisig/message.v7.go index 0c4c9b0f46..e86709de4e 100644 --- a/venus-shared/actors/builtin/multisig/message.v7.go +++ b/venus-shared/actors/builtin/multisig/message.v7.go @@ -3,7 +3,7 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,6 +12,7 @@ import ( init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" multisig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message7) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message7) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -66,7 +67,7 @@ func (m message7) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin7.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v8.go b/venus-shared/actors/builtin/multisig/message.v8.go index 3c573f1b0a..79e41fcb91 100644 --- a/venus-shared/actors/builtin/multisig/message.v8.go +++ b/venus-shared/actors/builtin/multisig/message.v8.go @@ -3,15 +3,16 @@ package multisig import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtin8 "github.com/filecoin-project/go-state-types/builtin" - init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" + actorstypes "github.com/filecoin-project/go-state-types/actors" multisig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -28,7 +29,7 @@ func (m message8) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -36,7 +37,7 @@ func (m message8) Create( } if m.from == address.Undef { - return nil, fmt.Errorf("must provide source address") + return nil, xerrors.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -52,13 +53,13 @@ func (m message8) Create( return nil, actErr } - code, ok := actors.GetActorCodeID(actors.Version8, actors.MultisigKey) + code, ok := actors.GetActorCodeID(actorstypes.Version8, actors.MultisigKey) if !ok { - return nil, fmt.Errorf("failed to get multisig code ID") + return nil, xerrors.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init8.ExecParams{ + execParams := &init9.ExecParams{ CodeCID: code, ConstructorParams: enc, } @@ -71,7 +72,7 @@ func (m message8) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin8.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/venus-shared/actors/builtin/multisig/message.v9.go b/venus-shared/actors/builtin/multisig/message.v9.go new file mode 100644 index 0000000000..6d031705de --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v9.go @@ -0,0 +1,79 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + actorstypes "github.com/filecoin-project/go-state-types/actors" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + multisig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" + + builtintypes "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/internal" +) + +type message9 struct{ message0 } + +func (m message9) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig9.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + code, ok := actors.GetActorCodeID(actorstypes.Version9, actors.MultisigKey) + if !ok { + return nil, xerrors.Errorf("failed to get multisig code ID") + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init9.ExecParams{ + CodeCID: code, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtintypes.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/state.sep.go.template b/venus-shared/actors/builtin/multisig/state.sep.go.template index bdd7b86c6f..56d46c629f 100644 --- a/venus-shared/actors/builtin/multisig/state.sep.go.template +++ b/venus-shared/actors/builtin/multisig/state.sep.go.template @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -103,7 +103,7 @@ func (s *state{{.v}}) ForEachPendingTxn(cb func(id int64, txn Transaction) error return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v0.go b/venus-shared/actors/builtin/multisig/state.v0.go index f522309bbb..2a57b89145 100644 --- a/venus-shared/actors/builtin/multisig/state.v0.go +++ b/venus-shared/actors/builtin/multisig/state.v0.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -87,7 +86,7 @@ func (s *state0) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v2.go b/venus-shared/actors/builtin/multisig/state.v2.go index 8711f5c12e..ef663756cd 100644 --- a/venus-shared/actors/builtin/multisig/state.v2.go +++ b/venus-shared/actors/builtin/multisig/state.v2.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -87,7 +86,7 @@ func (s *state2) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v3.go b/venus-shared/actors/builtin/multisig/state.v3.go index 7d268a79f4..720f4a5eff 100644 --- a/venus-shared/actors/builtin/multisig/state.v3.go +++ b/venus-shared/actors/builtin/multisig/state.v3.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,7 +88,7 @@ func (s *state3) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v4.go b/venus-shared/actors/builtin/multisig/state.v4.go index ca68431738..a25e8ae059 100644 --- a/venus-shared/actors/builtin/multisig/state.v4.go +++ b/venus-shared/actors/builtin/multisig/state.v4.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,7 +88,7 @@ func (s *state4) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v5.go b/venus-shared/actors/builtin/multisig/state.v5.go index da2ca284ce..67cd348fa8 100644 --- a/venus-shared/actors/builtin/multisig/state.v5.go +++ b/venus-shared/actors/builtin/multisig/state.v5.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,7 +88,7 @@ func (s *state5) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v6.go b/venus-shared/actors/builtin/multisig/state.v6.go index e6e29fc4d0..6ee2c78b6b 100644 --- a/venus-shared/actors/builtin/multisig/state.v6.go +++ b/venus-shared/actors/builtin/multisig/state.v6.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,7 +88,7 @@ func (s *state6) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v7.go b/venus-shared/actors/builtin/multisig/state.v7.go index c190bcc159..c7a2318c03 100644 --- a/venus-shared/actors/builtin/multisig/state.v7.go +++ b/venus-shared/actors/builtin/multisig/state.v7.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,7 +88,7 @@ func (s *state7) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v8.go b/venus-shared/actors/builtin/multisig/state.v8.go index 2718a22521..c89c5f643b 100644 --- a/venus-shared/actors/builtin/multisig/state.v8.go +++ b/venus-shared/actors/builtin/multisig/state.v8.go @@ -6,12 +6,11 @@ import ( "bytes" "encoding/binary" - "fmt" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,7 +87,7 @@ func (s *state8) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return fmt.Errorf("invalid pending transaction key: %v", key) + return xerrors.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v9.go b/venus-shared/actors/builtin/multisig/state.v9.go new file mode 100644 index 0000000000..ef5a19f3d0 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v9.go @@ -0,0 +1,119 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin9 "github.com/filecoin-project/go-state-types/builtin" + msig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state9{store: store} + out.State = msig9.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt9.StoreEmptyMap(store, builtin9.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state9 struct { + msig9.State + store adt.Store +} + +func (s *state9) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state9) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state9) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state9) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state9) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state9) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state9) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt9.AsMap(s.store, s.State.PendingTxns, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig9.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state9) PendingTxnChanged(other State) (bool, error) { + other9, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other9.PendingTxns), nil +} + +func (s *state9) transactions() (adt.Map, error) { + return adt9.AsMap(s.store, s.PendingTxns, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig9.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return Transaction(tx), nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/paych/actor.go b/venus-shared/actors/builtin/paych/actor.go index 10468718f1..3cc0c0de2c 100644 --- a/venus-shared/actors/builtin/paych/actor.go +++ b/venus-shared/actors/builtin/paych/actor.go @@ -6,6 +6,10 @@ import ( "encoding/base64" "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" + + "golang.org/x/xerrors" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" @@ -38,14 +42,17 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PaychKey { - return nil, fmt.Errorf("actor code is not paych: %s", name) + return nil, xerrors.Errorf("actor code is not paych: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -74,7 +81,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } // State is an abstract version of payment channel state that works across @@ -122,33 +129,36 @@ func DecodeSignedVoucher(s string) (*paychtypes.SignedVoucher, error) { return &sv, nil } -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { - case actors.Version0: + case actorstypes.Version0: return message0{from} - case actors.Version2: + case actorstypes.Version2: return message2{from} - case actors.Version3: + case actorstypes.Version3: return message3{from} - case actors.Version4: + case actorstypes.Version4: return message4{from} - case actors.Version5: + case actorstypes.Version5: return message5{from} - case actors.Version6: + case actorstypes.Version6: return message6{from} - case actors.Version7: + case actorstypes.Version7: return message7{from} - case actors.Version8: + case actorstypes.Version8: return message8{from} + case actorstypes.Version9: + return message9{from} + default: panic(fmt.Sprintf("unsupported actors version: %d", version)) } diff --git a/venus-shared/actors/builtin/paych/actor.go.template b/venus-shared/actors/builtin/paych/actor.go.template index 6c0d6c3cbb..0c8607e885 100644 --- a/venus-shared/actors/builtin/paych/actor.go.template +++ b/venus-shared/actors/builtin/paych/actor.go.template @@ -3,9 +3,11 @@ package paych import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "encoding/base64" "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -30,13 +32,13 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PaychKey { - return nil, fmt.Errorf("actor code is not paych: %s", name) + return nil, xerrors.Errorf("actor code is not paych: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -52,7 +54,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } // State is an abstract version of payment channel state that works across @@ -100,10 +102,10 @@ func DecodeSignedVoucher(s string) (*paychtypes.SignedVoucher, error) { return &sv, nil } -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return message{{.}}{from} {{end}} default: diff --git a/venus-shared/actors/builtin/paych/message.sep.go.template b/venus-shared/actors/builtin/paych/message.sep.go.template index 7961912f0d..752c8aaf2b 100644 --- a/venus-shared/actors/builtin/paych/message.sep.go.template +++ b/venus-shared/actors/builtin/paych/message.sep.go.template @@ -4,7 +4,7 @@ package paych import ( {{if (ge .v 8)}} - "fmt" + "golang.org/x/xerrors" {{end}} "github.com/filecoin-project/go-address" @@ -16,9 +16,10 @@ import ( init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" paych{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/paych" {{else}} + actorstypes "github.com/filecoin-project/go-state-types/actors" builtin{{.v}} "github.com/filecoin-project/go-state-types/builtin" - paych{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/paych" - init{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/init" + paych{{.v}} "github.com/filecoin-project/go-state-types/builtin/v{{.v}}/paych" + init{{.v}} "github.com/filecoin-project/go-state-types/builtin/v{{.v}}/init" {{end}} @@ -33,9 +34,9 @@ func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount) {{if (le .v 7)}} actorCodeID := builtin{{.v}}.PaymentChannelActorCodeID {{else}} - actorCodeID, ok := actors.GetActorCodeID(actors.Version{{.v}}, "paymentchannel") + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version{{.v}}, "paymentchannel") if !ok { - return nil, fmt.Errorf("error getting actor paymentchannel code id for actor version %d", {{.v}}) + return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", {{.v}}) } {{end}} @@ -64,8 +65,10 @@ func (m message{{.v}}) Update(paych address.Address, sv *paychtypes.SignedVouche params, aerr := actors.SerializeParams(&paych{{.v}}.UpdateChannelStateParams{ {{if (le .v 6)}} Sv: toV0SignedVoucher(*sv), - {{else}} + {{else if (le .v 8)}} Sv: *sv, + {{else}} + Sv: toV{{.v}}SignedVoucher(*sv), {{end}} Secret: secret, }) @@ -82,6 +85,32 @@ func (m message{{.v}}) Update(paych address.Address, sv *paychtypes.SignedVouche }, nil } +{{if (ge .v 9)}} + func toV{{.v}}SignedVoucher(sv paychtypes.SignedVoucher) paych{{.v}}.SignedVoucher { + merges := make([]paych{{.v}}.Merge, len(sv.Merges)) + for i := range sv.Merges { + merges[i] = paych{{.v}}.Merge{ + Lane: sv.Merges[i].Lane, + Nonce: sv.Merges[i].Nonce, + } + } + + return paych{{.v}}.SignedVoucher{ + ChannelAddr: sv.ChannelAddr, + TimeLockMin: sv.TimeLockMin, + TimeLockMax: sv.TimeLockMax, + SecretHash: sv.SecretHash, + Extra: (*paych{{.v}}.ModVerifyParams)(sv.Extra), + Lane: sv.Lane, + Nonce: sv.Nonce, + Amount: sv.Amount, + MinSettleHeight: sv.MinSettleHeight, + Merges: merges, + Signature: sv.Signature, + } + } +{{end}} + func (m message{{.v}}) Settle(paych address.Address) (*types.Message, error) { return &types.Message{ To: paych, diff --git a/venus-shared/actors/builtin/paych/message.v8.go b/venus-shared/actors/builtin/paych/message.v8.go index cb50a79c3d..a27a8aa067 100644 --- a/venus-shared/actors/builtin/paych/message.v8.go +++ b/venus-shared/actors/builtin/paych/message.v8.go @@ -3,13 +3,14 @@ package paych import ( - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" paychtypes "github.com/filecoin-project/go-state-types/builtin/v8/paych" + actorstypes "github.com/filecoin-project/go-state-types/actors" builtin8 "github.com/filecoin-project/go-state-types/builtin" init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" paych8 "github.com/filecoin-project/go-state-types/builtin/v8/paych" @@ -23,9 +24,9 @@ type message8 struct{ from address.Address } func (m message8) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { - actorCodeID, ok := actors.GetActorCodeID(actors.Version8, "paymentchannel") + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version8, "paymentchannel") if !ok { - return nil, fmt.Errorf("error getting actor paymentchannel code id for actor version %d", 8) + return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 8) } params, aerr := actors.SerializeParams(&paych8.ConstructorParams{From: m.from, To: to}) diff --git a/venus-shared/actors/builtin/paych/message.v9.go b/venus-shared/actors/builtin/paych/message.v9.go new file mode 100644 index 0000000000..f681cb8d54 --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v9.go @@ -0,0 +1,113 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + paychtypes "github.com/filecoin-project/go-state-types/builtin/v8/paych" + + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/internal" +) + +type message9 struct{ from address.Address } + +func (m message9) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version9, "paymentchannel") + if !ok { + return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 9) + } + + params, aerr := actors.SerializeParams(&paych9.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init9.ExecParams{ + CodeCID: actorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin9.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message9) Update(paych address.Address, sv *paychtypes.SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych9.UpdateChannelStateParams{ + + Sv: toV9SignedVoucher(*sv), + + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin9.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func toV9SignedVoucher(sv paychtypes.SignedVoucher) paych9.SignedVoucher { + merges := make([]paych9.Merge, len(sv.Merges)) + for i := range sv.Merges { + merges[i] = paych9.Merge{ + Lane: sv.Merges[i].Lane, + Nonce: sv.Merges[i].Nonce, + } + } + + return paych9.SignedVoucher{ + ChannelAddr: sv.ChannelAddr, + TimeLockMin: sv.TimeLockMin, + TimeLockMax: sv.TimeLockMax, + SecretHash: sv.SecretHash, + Extra: (*paych9.ModVerifyParams)(sv.Extra), + Lane: sv.Lane, + Nonce: sv.Nonce, + Amount: sv.Amount, + MinSettleHeight: sv.MinSettleHeight, + Merges: merges, + Signature: sv.Signature, + } +} + +func (m message9) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin9.MethodsPaych.Settle, + }, nil +} + +func (m message9) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin9.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v9.go b/venus-shared/actors/builtin/paych/state.v9.go new file mode 100644 index 0000000000..b34c7c5022 --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v9.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + out.State = paych9.State{} + return &out, nil +} + +type state9 struct { + paych9.State + store adt.Store + lsAmt *adt9.Array +} + +// Channel owner, who has funded the actor +func (s *state9) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state9) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state9) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state9) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state9) getOrLoadLsAmt() (*adt9.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt9.AsArray(s.store, s.State.LaneStates, paych9.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state9) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state9) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych9.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState9{ls}) + }) +} + +type laneState9 struct { + paych9.LaneState +} + +func (ls *laneState9) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState9) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/power/actor.go b/venus-shared/actors/builtin/power/actor.go index 58610c4eeb..40e49f86eb 100644 --- a/venus-shared/actors/builtin/power/actor.go +++ b/venus-shared/actors/builtin/power/actor.go @@ -3,12 +3,12 @@ package power import ( - "fmt" - "github.com/filecoin-project/go-address" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/cbor" @@ -31,25 +31,28 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" ) var ( - Address = builtin8.StoragePowerActorAddr - Methods = builtin8.MethodsPower + Address = builtin9.StoragePowerActorAddr + Methods = builtin9.MethodsPower ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PowerKey { - return nil, fmt.Errorf("actor code is not power: %s", name) + return nil, xerrors.Errorf("actor code is not power: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -78,38 +81,41 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store) + case actorstypes.Version9: + return make9(store) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/power/actor.go.template b/venus-shared/actors/builtin/power/actor.go.template index adc719a859..398682beda 100644 --- a/venus-shared/actors/builtin/power/actor.go.template +++ b/venus-shared/actors/builtin/power/actor.go.template @@ -3,11 +3,12 @@ package power import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/cbor" @@ -19,10 +20,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var ( @@ -33,13 +33,13 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PowerKey { - return nil, fmt.Errorf("actor code is not power: %s", name) + return nil, xerrors.Errorf("actor code is not power: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -55,17 +55,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/power/state.sep.go.template b/venus-shared/actors/builtin/power/state.sep.go.template index 62280e8f53..de95355ff1 100644 --- a/venus-shared/actors/builtin/power/state.sep.go.template +++ b/venus-shared/actors/builtin/power/state.sep.go.template @@ -22,7 +22,7 @@ import ( {{else}} builtin{{.v}} "github.com/filecoin-project/go-state-types/builtin" power{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}power" - adt{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" + adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt" {{end}} ) diff --git a/venus-shared/actors/builtin/power/state.v9.go b/venus-shared/actors/builtin/power/state.v9.go new file mode 100644 index 0000000000..0701baf0cb --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v9.go @@ -0,0 +1,188 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + builtin9 "github.com/filecoin-project/go-state-types/builtin" + power9 "github.com/filecoin-project/go-state-types/builtin/v9/power" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + + s, err := power9.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + power9.State + store adt.Store +} + +func (s *state9) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state9) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state9) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state9) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power9.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state9) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state9) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state9) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state9) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state9) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power9.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state9) ClaimsChanged(other State) (bool, error) { + other9, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other9.State.Claims), nil +} + +func (s *state9) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state9) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state9) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state9) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +func (s *state9) claims() (adt.Map, error) { + return adt9.AsMap(s.store, s.Claims, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power9.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV9Claim(ci), nil +} + +func fromV9Claim(v9 power9.Claim) Claim { + return Claim{ + RawBytePower: v9.RawBytePower, + QualityAdjPower: v9.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/registry.go b/venus-shared/actors/builtin/registry.go new file mode 100644 index 0000000000..8d2126a325 --- /dev/null +++ b/venus-shared/actors/builtin/registry.go @@ -0,0 +1,220 @@ +// FETCHED FROM LOTUS: builtin/registry.go.template + +package builtin + +import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/ipfs/go-cid" + + account8 "github.com/filecoin-project/go-state-types/builtin/v8/account" + cron8 "github.com/filecoin-project/go-state-types/builtin/v8/cron" + _init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" + market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" + miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" + multisig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" + paych8 "github.com/filecoin-project/go-state-types/builtin/v8/paych" + power8 "github.com/filecoin-project/go-state-types/builtin/v8/power" + reward8 "github.com/filecoin-project/go-state-types/builtin/v8/reward" + system8 "github.com/filecoin-project/go-state-types/builtin/v8/system" + verifreg8 "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" + + account9 "github.com/filecoin-project/go-state-types/builtin/v9/account" + cron9 "github.com/filecoin-project/go-state-types/builtin/v9/cron" + _init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + market9 "github.com/filecoin-project/go-state-types/builtin/v9/market" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + multisig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + power9 "github.com/filecoin-project/go-state-types/builtin/v9/power" + reward9 "github.com/filecoin-project/go-state-types/builtin/v9/reward" + system9 "github.com/filecoin-project/go-state-types/builtin/v9/system" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + + "github.com/filecoin-project/go-state-types/cbor" + rtt "github.com/filecoin-project/go-state-types/rt" + "github.com/filecoin-project/venus/venus-shared/actors" +) + +var _ rtt.VMActor = (*RegistryEntry)(nil) + +type RegistryEntry struct { + state cbor.Er + code cid.Cid + methods []interface{} +} + +func (r RegistryEntry) State() cbor.Er { + return r.state +} + +func (r RegistryEntry) Exports() []interface{} { + return r.methods +} + +func (r RegistryEntry) Code() cid.Cid { + return r.code +} + +func MakeRegistry(av actorstypes.Version) []rtt.VMActor { + if av < actorstypes.Version8 { + panic("expected version v8 and up only, use specs-actors for v0-7") + } + registry := make([]rtt.VMActor, 0) + + codeIDs, err := actors.GetActorCodeIDs(av) + if err != nil { + panic(err) + } + + switch av { + + case actorstypes.Version8: + for key, codeID := range codeIDs { + switch key { + case actors.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account8.Methods, + state: new(account8.State), + }) + case actors.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron8.Methods, + state: new(cron8.State), + }) + case actors.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init8.Methods, + state: new(_init8.State), + }) + case actors.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market8.Methods, + state: new(market8.State), + }) + case actors.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner8.Methods, + state: new(miner8.State), + }) + case actors.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig8.Methods, + state: new(multisig8.State), + }) + case actors.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych8.Methods, + state: new(paych8.State), + }) + case actors.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power8.Methods, + state: new(power8.State), + }) + case actors.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward8.Methods, + state: new(reward8.State), + }) + case actors.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system8.Methods, + state: new(system8.State), + }) + case actors.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg8.Methods, + state: new(verifreg8.State), + }) + } + } + + case actorstypes.Version9: + for key, codeID := range codeIDs { + switch key { + case actors.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account9.Methods, + state: new(account9.State), + }) + case actors.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron9.Methods, + state: new(cron9.State), + }) + case actors.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init9.Methods, + state: new(_init9.State), + }) + case actors.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market9.Methods, + state: new(market9.State), + }) + case actors.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner9.Methods, + state: new(miner9.State), + }) + case actors.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig9.Methods, + state: new(multisig9.State), + }) + case actors.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych9.Methods, + state: new(paych9.State), + }) + case actors.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power9.Methods, + state: new(power9.State), + }) + case actors.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward9.Methods, + state: new(reward9.State), + }) + case actors.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system9.Methods, + state: new(system9.State), + }) + case actors.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg9.Methods, + state: new(verifreg9.State), + }) + } + } + + default: + panic("expected version v8 and up only, use specs-actors for v0-7") + } + + return registry +} diff --git a/venus-shared/actors/builtin/registry.go.template b/venus-shared/actors/builtin/registry.go.template new file mode 100644 index 0000000000..b909d3c4d1 --- /dev/null +++ b/venus-shared/actors/builtin/registry.go.template @@ -0,0 +1,141 @@ +// FETCHED FROM LOTUS: builtin/registry.go.template + +package builtin + +import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/ipfs/go-cid" + {{range .versions}} + {{if (ge . 8)}} + account{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/account" + cron{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/cron" + _init{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/init" + multisig{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/multisig" + miner{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/miner" + market{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/market" + reward{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/reward" + paych{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/paych" + power{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/power" + system{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/system" + verifreg{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/verifreg" + {{end}} + {{end}} + "github.com/filecoin-project/go-state-types/cbor" + rtt "github.com/filecoin-project/go-state-types/rt" + "github.com/filecoin-project/venus/venus-shared/actors" +) + +var _ rtt.VMActor = (*RegistryEntry)(nil) + +type RegistryEntry struct { + state cbor.Er + code cid.Cid + methods []interface{} +} + +func (r RegistryEntry) State() cbor.Er { + return r.state +} + +func (r RegistryEntry) Exports() []interface{} { + return r.methods +} + +func (r RegistryEntry) Code() cid.Cid { + return r.code +} + +func MakeRegistry(av actorstypes.Version) []rtt.VMActor { + if av < actorstypes.Version8 { + panic("expected version v8 and up only, use specs-actors for v0-7") + } + registry := make([]rtt.VMActor, 0) + + codeIDs, err := actors.GetActorCodeIDs(av) + if err != nil { + panic(err) + } + + switch av { + {{range .versions}} + {{if (ge . 8)}} + case actorstypes.Version{{.}}: + for key, codeID := range codeIDs { + switch key { + case actors.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account{{.}}.Methods, + state: new(account{{.}}.State), + }) + case actors.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron{{.}}.Methods, + state: new(cron{{.}}.State), + }) + case actors.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init{{.}}.Methods, + state: new(_init{{.}}.State), + }) + case actors.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market{{.}}.Methods, + state: new(market{{.}}.State), + }) + case actors.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner{{.}}.Methods, + state: new(miner{{.}}.State), + }) + case actors.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig{{.}}.Methods, + state: new(multisig{{.}}.State), + }) + case actors.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych{{.}}.Methods, + state: new(paych{{.}}.State), + }) + case actors.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power{{.}}.Methods, + state: new(power{{.}}.State), + }) + case actors.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward{{.}}.Methods, + state: new(reward{{.}}.State), + }) + case actors.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system{{.}}.Methods, + state: new(system{{.}}.State), + }) + case actors.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg{{.}}.Methods, + state: new(verifreg{{.}}.State), + }) + } + } + {{end}} + {{end}} + + default: + panic("expected version v8 and up only, use specs-actors for v0-7") + } + + return registry +} diff --git a/venus-shared/actors/builtin/reward/actor.go b/venus-shared/actors/builtin/reward/actor.go index 0a471291e8..9ec0d3bd06 100644 --- a/venus-shared/actors/builtin/reward/actor.go +++ b/venus-shared/actors/builtin/reward/actor.go @@ -3,11 +3,11 @@ package reward import ( - "fmt" - "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/cbor" @@ -25,7 +25,7 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors/adt" "github.com/filecoin-project/venus/venus-shared/actors/builtin" @@ -33,21 +33,24 @@ import ( ) var ( - Address = builtin8.RewardActorAddr - Methods = builtin8.MethodsReward + Address = builtin9.RewardActorAddr + Methods = builtin9.MethodsReward ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.RewardKey { - return nil, fmt.Errorf("actor code is not reward: %s", name) + return nil, xerrors.Errorf("actor code is not reward: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -76,38 +79,41 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.StoragePower) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, currRealizedPower) - case actors.Version2: + case actorstypes.Version2: return make2(store, currRealizedPower) - case actors.Version3: + case actorstypes.Version3: return make3(store, currRealizedPower) - case actors.Version4: + case actorstypes.Version4: return make4(store, currRealizedPower) - case actors.Version5: + case actorstypes.Version5: return make5(store, currRealizedPower) - case actors.Version6: + case actorstypes.Version6: return make6(store, currRealizedPower) - case actors.Version7: + case actorstypes.Version7: return make7(store, currRealizedPower) - case actors.Version8: + case actorstypes.Version8: return make8(store, currRealizedPower) + case actorstypes.Version9: + return make9(store, currRealizedPower) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/reward/actor.go.template b/venus-shared/actors/builtin/reward/actor.go.template index 170a699b8a..426d7cc763 100644 --- a/venus-shared/actors/builtin/reward/actor.go.template +++ b/venus-shared/actors/builtin/reward/actor.go.template @@ -3,19 +3,19 @@ package reward import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/abi" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" "github.com/filecoin-project/venus/venus-shared/actors" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/cbor" {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors/adt" "github.com/filecoin-project/venus/venus-shared/actors/builtin" @@ -30,13 +30,13 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.RewardKey { - return nil, fmt.Errorf("actor code is not reward: %s", name) + return nil, xerrors.Errorf("actor code is not reward: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -52,17 +52,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.StoragePower) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, currRealizedPower) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/reward/state.v9.go b/venus-shared/actors/builtin/reward/state.v9.go new file mode 100644 index 0000000000..31358125cb --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v9.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + reward9 "github.com/filecoin-project/go-state-types/builtin/v9/reward" + smoothing9 "github.com/filecoin-project/go-state-types/builtin/v9/util/smoothing" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state9{store: store} + out.State = *reward9.ConstructState(currRealizedPower) + return &out, nil +} + +type state9 struct { + reward9.State + store adt.Store +} + +func (s *state9) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state9) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state9) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state9) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state9) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state9) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state9) CumsumBaseline() (reward9.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state9) CumsumRealized() (reward9.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state9) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner9.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing9.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state9) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner9.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing9.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/actor.go b/venus-shared/actors/builtin/system/actor.go index f741a577cd..91336011b8 100644 --- a/venus-shared/actors/builtin/system/actor.go +++ b/venus-shared/actors/builtin/system/actor.go @@ -3,12 +3,13 @@ package system import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" "github.com/ipfs/go-cid" - "fmt" + "golang.org/x/xerrors" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -24,24 +25,27 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" ) var ( - Address = builtin8.SystemActorAddr + Address = builtin9.SystemActorAddr ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.SystemKey { - return nil, fmt.Errorf("actor code is not system: %s", name) + return nil, xerrors.Errorf("actor code is not system: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -70,41 +74,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, builtinActors cid.Cid) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store, builtinActors) + case actorstypes.Version9: + return make9(store, builtinActors) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { GetState() interface{} GetBuiltinActors() cid.Cid + SetBuiltinActors(cid.Cid) error } diff --git a/venus-shared/actors/builtin/system/actor.go.template b/venus-shared/actors/builtin/system/actor.go.template index 85a8b28632..f6804bf0d7 100644 --- a/venus-shared/actors/builtin/system/actor.go.template +++ b/venus-shared/actors/builtin/system/actor.go.template @@ -3,20 +3,20 @@ package system import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" "github.com/filecoin-project/venus/venus-shared/actors" types "github.com/filecoin-project/venus/venus-shared/internal" "github.com/ipfs/go-cid" - "fmt" + "golang.org/x/xerrors" {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var ( @@ -26,13 +26,13 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.SystemKey { - return nil, fmt.Errorf("actor code is not system: %s", name) + return nil, xerrors.Errorf("actor code is not system: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -48,20 +48,21 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, builtinActors cid.Cid) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store{{if (ge . 8)}}, builtinActors{{end}}) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { GetState() interface{} GetBuiltinActors() cid.Cid + SetBuiltinActors(cid.Cid) error } diff --git a/venus-shared/actors/builtin/system/state.sep.go.template b/venus-shared/actors/builtin/system/state.sep.go.template index d8c00bcc97..9aa213039d 100644 --- a/venus-shared/actors/builtin/system/state.sep.go.template +++ b/venus-shared/actors/builtin/system/state.sep.go.template @@ -9,6 +9,7 @@ import ( {{if (le .v 7)}} system{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/system" + "golang.org/x/xerrors" {{else}} system{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}system" {{end}} @@ -49,3 +50,12 @@ func (s *state{{.v}}) GetBuiltinActors() cid.Cid { return s.State.BuiltinActors {{end}} } + +func (s *state{{.v}}) SetBuiltinActors(c cid.Cid) error { +{{if (le .v 7)}} + return xerrors.New("cannot set manifest cid before v8") +{{else}} + s.State.BuiltinActors = c + return nil +{{end}} +} diff --git a/venus-shared/actors/builtin/system/state.v0.go b/venus-shared/actors/builtin/system/state.v0.go index 4ed3ec11e3..fb0b12467d 100644 --- a/venus-shared/actors/builtin/system/state.v0.go +++ b/venus-shared/actors/builtin/system/state.v0.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system0 "github.com/filecoin-project/specs-actors/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state0)(nil) @@ -41,3 +42,9 @@ func (s *state0) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state0) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v2.go b/venus-shared/actors/builtin/system/state.v2.go index fae8a959df..96a995fa68 100644 --- a/venus-shared/actors/builtin/system/state.v2.go +++ b/venus-shared/actors/builtin/system/state.v2.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state2)(nil) @@ -41,3 +42,9 @@ func (s *state2) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state2) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v3.go b/venus-shared/actors/builtin/system/state.v3.go index 159f329d0d..6bbca3f7da 100644 --- a/venus-shared/actors/builtin/system/state.v3.go +++ b/venus-shared/actors/builtin/system/state.v3.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state3)(nil) @@ -41,3 +42,9 @@ func (s *state3) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state3) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v4.go b/venus-shared/actors/builtin/system/state.v4.go index f4d97ce9d5..6c9e501754 100644 --- a/venus-shared/actors/builtin/system/state.v4.go +++ b/venus-shared/actors/builtin/system/state.v4.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state4)(nil) @@ -41,3 +42,9 @@ func (s *state4) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state4) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v5.go b/venus-shared/actors/builtin/system/state.v5.go index 4045c1e67e..0b862c16be 100644 --- a/venus-shared/actors/builtin/system/state.v5.go +++ b/venus-shared/actors/builtin/system/state.v5.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state5)(nil) @@ -41,3 +42,9 @@ func (s *state5) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state5) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v6.go b/venus-shared/actors/builtin/system/state.v6.go index 21488b278e..8f783219d2 100644 --- a/venus-shared/actors/builtin/system/state.v6.go +++ b/venus-shared/actors/builtin/system/state.v6.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state6)(nil) @@ -41,3 +42,9 @@ func (s *state6) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state6) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v7.go b/venus-shared/actors/builtin/system/state.v7.go index 84142089c9..45c6cd33c7 100644 --- a/venus-shared/actors/builtin/system/state.v7.go +++ b/venus-shared/actors/builtin/system/state.v7.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/venus/venus-shared/actors/adt" system7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/system" + "golang.org/x/xerrors" ) var _ State = (*state7)(nil) @@ -41,3 +42,9 @@ func (s *state7) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state7) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/venus-shared/actors/builtin/system/state.v8.go b/venus-shared/actors/builtin/system/state.v8.go index 08f6abd6e9..c1e49f2d8e 100644 --- a/venus-shared/actors/builtin/system/state.v8.go +++ b/venus-shared/actors/builtin/system/state.v8.go @@ -43,3 +43,10 @@ func (s *state8) GetBuiltinActors() cid.Cid { return s.State.BuiltinActors } + +func (s *state8) SetBuiltinActors(c cid.Cid) error { + + s.State.BuiltinActors = c + return nil + +} diff --git a/venus-shared/actors/builtin/system/state.v9.go b/venus-shared/actors/builtin/system/state.v9.go new file mode 100644 index 0000000000..cd38110f1f --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v9.go @@ -0,0 +1,52 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system9 "github.com/filecoin-project/go-state-types/builtin/v9/system" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, builtinActors cid.Cid) (State, error) { + out := state9{store: store} + out.State = system9.State{ + BuiltinActors: builtinActors, + } + return &out, nil +} + +type state9 struct { + system9.State + store adt.Store +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +func (s *state9) GetBuiltinActors() cid.Cid { + + return s.State.BuiltinActors + +} + +func (s *state9) SetBuiltinActors(c cid.Cid) error { + + s.State.BuiltinActors = c + return nil + +} diff --git a/venus-shared/actors/builtin/verifreg/actor.go b/venus-shared/actors/builtin/verifreg/actor.go index f1bcf16089..b1f9678e40 100644 --- a/venus-shared/actors/builtin/verifreg/actor.go +++ b/venus-shared/actors/builtin/verifreg/actor.go @@ -3,7 +3,8 @@ package verifreg import ( - "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -24,7 +25,7 @@ import ( builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -32,21 +33,24 @@ import ( ) var ( - Address = builtin8.VerifiedRegistryActorAddr - Methods = builtin8.MethodsVerifiedRegistry + Address = builtin9.VerifiedRegistryActorAddr + Methods = builtin9.MethodsVerifiedRegistry ) func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.VerifregKey { - return nil, fmt.Errorf("actor code is not verifreg: %s", name) + return nil, xerrors.Errorf("actor code is not verifreg: %s", name) } switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -75,38 +79,41 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.Address) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, rootKeyAddress) - case actors.Version2: + case actorstypes.Version2: return make2(store, rootKeyAddress) - case actors.Version3: + case actorstypes.Version3: return make3(store, rootKeyAddress) - case actors.Version4: + case actorstypes.Version4: return make4(store, rootKeyAddress) - case actors.Version5: + case actorstypes.Version5: return make5(store, rootKeyAddress) - case actors.Version6: + case actorstypes.Version6: return make6(store, rootKeyAddress) - case actors.Version7: + case actorstypes.Version7: return make7(store, rootKeyAddress) - case actors.Version8: + case actorstypes.Version8: return make8(store, rootKeyAddress) + case actorstypes.Version9: + return make9(store, rootKeyAddress) + } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/verifreg/actor.go.template b/venus-shared/actors/builtin/verifreg/actor.go.template index e7a751d2f9..4a29beb7f7 100644 --- a/venus-shared/actors/builtin/verifreg/actor.go.template +++ b/venus-shared/actors/builtin/verifreg/actor.go.template @@ -3,7 +3,8 @@ package verifreg import ( - "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -12,10 +13,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/venus/venus-shared/actors/adt" "github.com/filecoin-project/venus/venus-shared/actors" @@ -30,13 +30,13 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.VerifregKey { - return nil, fmt.Errorf("actor code is not verifreg: %s", name) + return nil, xerrors.Errorf("actor code is not verifreg: %s", name) } switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -52,17 +52,17 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, fmt.Errorf("unknown actor code %s", act.Code) + return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.Address) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, rootKeyAddress) {{end}} } - return nil, fmt.Errorf("unknown actor version %d", av) + return nil, xerrors.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/verifreg/state.v9.go b/venus-shared/actors/builtin/verifreg/state.v9.go new file mode 100644 index 0000000000..2abe362a03 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v9.go @@ -0,0 +1,85 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin9 "github.com/filecoin-project/go-state-types/builtin" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state9{store: store} + + s, err := verifreg9.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + verifreg9.State + store adt.Store +} + +func (s *state9) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state9) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version9, s.verifiedClients, addr) +} + +func (s *state9) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version9, s.verifiers, addr) +} + +func (s *state9) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) { + return getRemoveDataCapProposalID(s.store, actors.Version9, s.removeDataCapProposalIDs, verifier, client) +} + +func (s *state9) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version9, s.verifiers, cb) +} + +func (s *state9) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version9, s.verifiedClients, cb) +} + +func (s *state9) verifiedClients() (adt.Map, error) { + return adt9.AsMap(s.store, s.VerifiedClients, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) verifiers() (adt.Map, error) { + return adt9.AsMap(s.store, s.Verifiers, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) removeDataCapProposalIDs() (adt.Map, error) { + return adt9.AsMap(s.store, s.RemoveDataCapProposalIDs, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin_actors.go b/venus-shared/actors/builtin_actors.go index 948ae842de..490cf1f44a 100644 --- a/venus-shared/actors/builtin_actors.go +++ b/venus-shared/actors/builtin_actors.go @@ -13,6 +13,7 @@ import ( "strings" "github.com/DataDog/zstd" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/ipfs/go-cid" cbor "github.com/ipfs/go-ipld-cbor" "github.com/ipld/go-car" @@ -25,13 +26,13 @@ import ( var embeddedBuiltinActorReleases embed.FS // NOTE: DO NOT change this unless you REALLY know what you're doing. This is consensus critical. -var BundleOverrides map[Version]string +var BundleOverrides map[actorstypes.Version]string var NetworkBundle = "mainnet" func init() { if BundleOverrides == nil { - BundleOverrides = make(map[Version]string) + BundleOverrides = make(map[actorstypes.Version]string) } for _, av := range Versions { @@ -39,7 +40,7 @@ func init() { if path == "" { continue } - BundleOverrides[Version(av)] = path + BundleOverrides[actorstypes.Version(av)] = path } if err := loadManifests(NetworkBundle); err != nil { panic(err) @@ -88,7 +89,7 @@ func UseNetworkBundle(netw string) error { } func loadManifests(netw string) error { - overridden := make(map[Version]struct{}) + overridden := make(map[actorstypes.Version]struct{}) var newMetadata []*BuiltinActorsMetadata // First, prefer overrides. for av, path := range BundleOverrides { @@ -127,7 +128,7 @@ func loadManifests(netw string) error { type BuiltinActorsMetadata struct { // nolint Network string - Version Version + Version actorstypes.Version ManifestCid cid.Cid Actors map[string]cid.Cid } @@ -215,7 +216,7 @@ func readEmbeddedBuiltinActorsMetadata(bundle string) ([]*BuiltinActorsMetadata, } bundles = append(bundles, &BuiltinActorsMetadata{ Network: name, - Version: Version(version), + Version: actorstypes.Version(version), ManifestCid: root, Actors: actorCids, }) @@ -262,7 +263,7 @@ func readBundleManifest(r io.Reader) (cid.Cid, map[string]cid.Cid, error) { } // GetEmbeddedBuiltinActorsBundle returns the builtin-actors bundle for the given actors version. -func GetEmbeddedBuiltinActorsBundle(version Version) ([]byte, bool) { +func GetEmbeddedBuiltinActorsBundle(version actorstypes.Version) ([]byte, bool) { fi, err := embeddedBuiltinActorReleases.Open(fmt.Sprintf("builtin-actors-code/v%d.tar.zst", version)) if err != nil { return nil, false diff --git a/venus-shared/actors/builtin_actors_bundle.go b/venus-shared/actors/builtin_actors_bundle.go index e4311f4914..3ccee1d1ed 100644 --- a/venus-shared/actors/builtin_actors_bundle.go +++ b/venus-shared/actors/builtin_actors_bundle.go @@ -7,6 +7,7 @@ import ( "io" "os" + actorstypes "github.com/filecoin-project/go-state-types/actors" blockstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" cid "github.com/ipfs/go-cid" "github.com/ipld/go-car" @@ -36,10 +37,10 @@ func LoadBundle(ctx context.Context, bs blockstore.Blockstore, r io.Reader) (cid // LoadBundles loads the bundles for the specified actor versions into the passed blockstore, if and // only if the bundle's manifest is not already present in the blockstore. -func LoadBundles(ctx context.Context, bs blockstore.Blockstore, versions ...Version) error { +func LoadBundles(ctx context.Context, bs blockstore.Blockstore, versions ...actorstypes.Version) error { for _, av := range versions { // No bundles before version 8. - if av < Version8 { + if av < actorstypes.Version8 { continue } diff --git a/venus-shared/actors/builtin_actors_gen.go b/venus-shared/actors/builtin_actors_gen.go index f07c37616c..7406ef9684 100644 --- a/venus-shared/actors/builtin_actors_gen.go +++ b/venus-shared/actors/builtin_actors_gen.go @@ -22,6 +22,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzacec6xctjxybp7r3kkhase56o6jsaiua7ure5ttu2xfuojt4jhlsoa6"), "verifiedregistry": mustParseCid("bafk2bzacec2hcqlqcfacylfcrhhliwkisvh4y3adwt47xkf2gdvodwu6ccepc"), }, +}, { + Network: "butterflynet", + Version: 9, + ManifestCid: mustParseCid("bafy2bzacebor5miojgkvov7gtiirg7hqxgm54x3hxytbho3qloqryg2r67qaq"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzacecd7kgfzbyu4sylskgf7wjqabo43y3d7xqgvz7r67pzr3ovn3sj7y"), + "cron": mustParseCid("bafk2bzacea6dc2a6skmp7saa43dcofp7zvtklvya75bai2k4k6qnkpcfzklug"), + "init": mustParseCid("bafk2bzacean5v7lbsspxmdkcwhac44sk332uwyfteibtxyhgoeabwbzbh736c"), + "multisig": mustParseCid("bafk2bzacea43lypvbof5kwnk2flzrwdrqqvzypom5xyheeuaab6dmuiafngae"), + "paymentchannel": mustParseCid("bafk2bzacecsdimcgztl4tfodnqc35jojoy4mzaqqidubialqmqaa3zpv4h3rw"), + "reward": mustParseCid("bafk2bzacedy3utj67mewe7rpieaex3sf7qxfkgiwtlgg4wlqyl74la65njbn2"), + "storagemarket": mustParseCid("bafk2bzacec4xpazf3l2p5qkknjsku2sd3skqevk7gxryumbelwhfbs7mgjnpa"), + "storageminer": mustParseCid("bafk2bzaceb5scwcdcou56vyhxq3c7vcefjau44v2h6nvsus45wqopt3hadzae"), + "storagepower": mustParseCid("bafk2bzacebxl4ssugntkckifkq6sydczcas463bmonwi2m5hddurzzcukdzyg"), + "system": mustParseCid("bafk2bzacedtw2ebtl3uccbqfcm6jd7teinlpktcglopuaxa6ev334jhs46hso"), + "verifiedregistry": mustParseCid("bafk2bzaceds62ys6rpbtjjsemohalxnkr3jtqhflifabn3xlhpi45mvi757po"), + }, }, { Network: "calibrationnet", Version: 8, @@ -39,6 +56,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzaceaqrkllksxv2jsfgjvmuewx5vbzrammw5mdscod6gkdr3ijih2q64"), "verifiedregistry": mustParseCid("bafk2bzaceaihibfu625lbtzdp3tcftscshrmbgghgrc7kzqhxn4455pycpdkm"), }, +}, { + Network: "calibrationnet", + Version: 9, + ManifestCid: mustParseCid("bafy2bzacectdlm3f5m252s6ken3ncnndvwj4a7hqyev2m7iba4lubkt72r2rm"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzaceag3pkyy5youg2i4qyrhqms2jobycddkhd4eebtlkeqj4wu4sw7ji"), + "cron": mustParseCid("bafk2bzaceaii7ryi4sjqqrrwyqaxulzqgiigkjqfa3f3ghhisleaqrinyal4o"), + "init": mustParseCid("bafk2bzacebpi37hcleu7cpqgs5zdg4zsw7qpydt5w25jny2dyyscsyidquvcw"), + "multisig": mustParseCid("bafk2bzacebt522zme5n3q25mecukjvomfyyzduxormgnprl73mdb5ekda2ywy"), + "paymentchannel": mustParseCid("bafk2bzacebdxmtmloxfyhxkoj4p4ze5gojqohvqjmdmv2t54xyrgfnjs52p26"), + "reward": mustParseCid("bafk2bzacebt7vup2pdxie67goc5ourij32z4ofejlrbv7styzm47ytvmmxx5a"), + "storagemarket": mustParseCid("bafk2bzacebeohybortft5jiihfvfly5oiygvf2hulnuif7vivklind32hbr3c"), + "storageminer": mustParseCid("bafk2bzaceallhekg5fhibexjurqcwrx6uzacbyq5eofic6jbdiu3vhepq6xsw"), + "storagepower": mustParseCid("bafk2bzaceassqqdljvblivbcrkv62a36gxjwf7dmkgez6ezq2oydx3dv2b3z2"), + "system": mustParseCid("bafk2bzacebxsecqifqvqxavnmsuwigmnc5rcuxoezspmykeqinkbgrkfukmgs"), + "verifiedregistry": mustParseCid("bafk2bzacedrmxfk5qifi7ujcb7mm73mwoy5e7nbndxhbqauuyol6cunf6popm"), + }, }, { Network: "caterpillarnet", Version: 8, @@ -56,6 +90,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzacebu47th3xerlngqavlipb6cfu2utljkxxzgadc3totogto2tmx2jc"), "verifiedregistry": mustParseCid("bafk2bzaceci3niq3rmbcmepgn27zvlgci6d5t4dvthx3pbmmx3wcu5elova6i"), }, +}, { + Network: "caterpillarnet", + Version: 9, + ManifestCid: mustParseCid("bafy2bzaceaknnblpmv3qqeqlgdycpps2vkgbgkflugbqz47k6zwrqte54hqy2"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzaceckajm6tcdpvfsrvagduv6cuefuo3modkpfupum6ibspulgvporrw"), + "cron": mustParseCid("bafk2bzacea74zhlldpihms2ohp3wvefojifvudbblmeju3izwrpcpxemp43fo"), + "init": mustParseCid("bafk2bzacea5nqh4l76vm4ys6vgrqyt77tquk66il3w5ho3zxugka22fipdkdw"), + "multisig": mustParseCid("bafk2bzacea3ftmx2roav4psh63r5n2sol6x3kwpmfwe473pexhj6lg7pruu2k"), + "paymentchannel": mustParseCid("bafk2bzacea2gqhnycejjfuinywoz4j7pmsvxn3i2y5epdx5vqpo23phx6jeac"), + "reward": mustParseCid("bafk2bzaceamdxogvus7zawqtju3vesmj6ffpf3ta6dlwvvstyfbf23sow2tes"), + "storagemarket": mustParseCid("bafk2bzacecvh6qhfe3ityehpibxmmw43l7recwtru3l4n3yrdj5bmnv4efnrc"), + "storageminer": mustParseCid("bafk2bzaced6ya5wlvplkvnvmhuc2uh5zq7oft6pyyoouwouuoreuk6grn6vsw"), + "storagepower": mustParseCid("bafk2bzacedbfoblr65vbqwx37cym6v3zhbgrau46vma4c2lbh6toz6q5dyrtc"), + "system": mustParseCid("bafk2bzaced7z2lu5hp4qpsesbmubq3chrad3sl6kgveldafksh4w252ijjaw2"), + "verifiedregistry": mustParseCid("bafk2bzacec6fdlcvlnaiktdptogae3bgofhzo24lhn4hs6rsa2zbnknfpsct6"), + }, }, { Network: "devnet", Version: 8, @@ -73,6 +124,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzacecf7eta2stfd3cnuxzervd33imbvlaqq6b5tsho7pxmhifrybreru"), "verifiedregistry": mustParseCid("bafk2bzaceaajgtglewgitshgdi2nzrvq7eihjtyqj5yiamesqun2hujl3xev2"), }, +}, { + Network: "devnet", + Version: 9, + ManifestCid: mustParseCid("bafy2bzacecogd7hb3dap7d4abyikdgt6b2zs46s4qyilsgxk4rsienbvvstp4"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzacecrgqcwn2j6c44tnfx32om4upg56b7gdwslfgeuyfsm6iwkiuhm2w"), + "cron": mustParseCid("bafk2bzaceblepwha5i5cpac37arpcxjcebm5k7p4e5ed7bwcq7ie6fryxgno4"), + "init": mustParseCid("bafk2bzacebjr3xwsdzfie47rtffibt3irr7a5qqstt7fsbwnolzz3z6oy5frw"), + "multisig": mustParseCid("bafk2bzacec66uf5u7o7q3u3pufrtufya6ntwrreysrwwlzqdjbtj36ajuamz4"), + "paymentchannel": mustParseCid("bafk2bzacebouukxeahifxfoymmvibngg6abftd7luiq5x2c7zxulvqyerwoeg"), + "reward": mustParseCid("bafk2bzacecj4pry2xb6w4kd4xxvs3dqd2endfynnwrkf66zakmt376tafy6ym"), + "storagemarket": mustParseCid("bafk2bzacecmij6fgaasgu7zm354fltmvhwmepzwadhl4euxhb64yg4pgfkxgw"), + "storageminer": mustParseCid("bafk2bzaceb5qyhchlvqvcq5cvrc5tuyjrrz6qkgbbxx4vr4wxhtoa4bfp56bg"), + "storagepower": mustParseCid("bafk2bzaced377v52henedhmudi2isuxe73mp2lrv2zyyxfp4r4uppz3sy2ipw"), + "system": mustParseCid("bafk2bzacebb3gdmg2fqexijivo7dkxj6g6gu7ou2jsw6opszr5gfmwt4fvorw"), + "verifiedregistry": mustParseCid("bafk2bzacec5xfb3a56mlclymhvs2br3qzx7sagqda4dvl4xz3fgiymkkbz5tk"), + }, }, { Network: "mainnet", Version: 8, @@ -90,6 +158,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzacedwq5uppsw7vp55zpj7jdieizirmldceehu6wvombw3ixq2tcq57w"), "verifiedregistry": mustParseCid("bafk2bzaceb3zbkjz3auizmoln2unmxep7dyfcmsre64vnqfhdyh7rkqfoxlw4"), }, +}, { + Network: "mainnet", + Version: 9, + ManifestCid: mustParseCid("bafy2bzaceb7nrn4icde3yt7s2kpllliodblq2i3iuslh3l6swgjqyusual72u"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzacedchhykcbvptlrnts62xa2h7fewsyvb4imktudll7tbogkwj4ccpy"), + "cron": mustParseCid("bafk2bzaced2e2ivtglevf5tnqay6eqdl3m5ilx4az766ojbhmy2kbxmkogbni"), + "init": mustParseCid("bafk2bzaceapzqn6e3cfpf4ntln4dkyrqe5egygmjczefduy7fuabxh2npqq6o"), + "multisig": mustParseCid("bafk2bzacebxihi4x4lzelmmdtxiz5gub3cjgthrgxuj5mxl2ihxaz6qhp5qbu"), + "paymentchannel": mustParseCid("bafk2bzacecv34ahs6k552won2vj4r62gur5i7inqnycg7y4dg27ktlq76stlk"), + "reward": mustParseCid("bafk2bzacea4er76nlnzz3muuvdxs4dbygejztezanpafi42idj57n75sumu7o"), + "storagemarket": mustParseCid("bafk2bzacedd3pjxcwgxfli4a5udw3ebbo4gom43epizbldvto7ovduqk6udj6"), + "storageminer": mustParseCid("bafk2bzacebtuopxp2464fxulzfyr4iw7bj4pelfxlatudaf6q5qtahokeo3lo"), + "storagepower": mustParseCid("bafk2bzacec3dmcwtizgy6qhxg6fgb4ykc2pamxxh2n5oyeqvebjf3ikzd2sui"), + "system": mustParseCid("bafk2bzacecrm36gf2gusruvhfc6ukf36qflsr5pdbquvfyysprdyudsatoufm"), + "verifiedregistry": mustParseCid("bafk2bzaceah3mwu6tb4jmffohpoz6nyoxpgno2hmxz455rycw4o2hrat3yg3u"), + }, }, { Network: "testing", Version: 8, @@ -107,6 +192,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzaced6kjkbv7lrb2qwq5we2hqaxc6ztch5p52g27qtjy45zdemsk4b7m"), "verifiedregistry": mustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"), }, +}, { + Network: "testing", + Version: 9, + ManifestCid: mustParseCid("bafy2bzaceas5fka4rtyvnqwvvwdi2qqhbnu7hnyz37chhpflh4rdbwnoupols"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzacecsmbmd42fsg33wd3u5vxyp4n4a4mac423fduauishjhiyv2bqz7w"), + "cron": mustParseCid("bafk2bzacedajlwnkefucjxzasudkfojrz3bnhnnirebvacxrtly5y2kfb7qiu"), + "init": mustParseCid("bafk2bzaceat7cvf7s2vnmqoldzafkpjygi6wv3sfnclenfbahk4htsgu4aqsa"), + "multisig": mustParseCid("bafk2bzacebh7pwb7eoyigwgjs2r32ebtxwbwgxqd4cvou4katq4axmhd7lxsq"), + "paymentchannel": mustParseCid("bafk2bzaceb6nbmyo2girdpnwywby7yzelx7g6s4snbq3kb3mmd2pp33qefkww"), + "reward": mustParseCid("bafk2bzacedttgmuddtlrp2ie4i2vzuueury455knof5muqtqlslscxrk7ucl6"), + "storagemarket": mustParseCid("bafk2bzacebjtz7fg5n2sm4wg464fyg5vcvux5hqrsdwki675hsquhh3rpe5rg"), + "storageminer": mustParseCid("bafk2bzacea2c2genvtsktr3f6yjlny57gwqyt5dbqrfws56wn5ssyl2tevjjg"), + "storagepower": mustParseCid("bafk2bzaceasmr5xc3c7jgihqcb5pdv557kfor72wlmzmh4syvedknelebhsve"), + "system": mustParseCid("bafk2bzaceabj3whuno364pjqn7sphwquiqpl2w5le6aa6quwytgyxshvelcwq"), + "verifiedregistry": mustParseCid("bafk2bzaceamn6gzihkytyqym4dqs7wqmo2fz6kpge4tphumvutsp2ys4bwaha"), + }, }, { Network: "testing-fake-proofs", Version: 8, @@ -124,6 +226,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": mustParseCid("bafk2bzaced6kjkbv7lrb2qwq5we2hqaxc6ztch5p52g27qtjy45zdemsk4b7m"), "verifiedregistry": mustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"), }, +}, { + Network: "testing-fake-proofs", + Version: 9, + ManifestCid: mustParseCid("bafy2bzacebr7bo4shotwq4cct3ablt6hlcozg4h2e52av2q3md5di7sibrqj2"), + Actors: map[string]cid.Cid{ + "account": mustParseCid("bafk2bzacecsmbmd42fsg33wd3u5vxyp4n4a4mac423fduauishjhiyv2bqz7w"), + "cron": mustParseCid("bafk2bzacedajlwnkefucjxzasudkfojrz3bnhnnirebvacxrtly5y2kfb7qiu"), + "init": mustParseCid("bafk2bzaceat7cvf7s2vnmqoldzafkpjygi6wv3sfnclenfbahk4htsgu4aqsa"), + "multisig": mustParseCid("bafk2bzacebh7pwb7eoyigwgjs2r32ebtxwbwgxqd4cvou4katq4axmhd7lxsq"), + "paymentchannel": mustParseCid("bafk2bzaceb6nbmyo2girdpnwywby7yzelx7g6s4snbq3kb3mmd2pp33qefkww"), + "reward": mustParseCid("bafk2bzacedttgmuddtlrp2ie4i2vzuueury455knof5muqtqlslscxrk7ucl6"), + "storagemarket": mustParseCid("bafk2bzacebjtz7fg5n2sm4wg464fyg5vcvux5hqrsdwki675hsquhh3rpe5rg"), + "storageminer": mustParseCid("bafk2bzacedaxvye4reegpy2fecjuzwt4nly2myhplnvkzhssquo2jjw7vfmuy"), + "storagepower": mustParseCid("bafk2bzaceaoteuuvld3bzy3t3kzjp5iabgkvxjc5cxq2ziwankpxqqixkqqjw"), + "system": mustParseCid("bafk2bzaceabj3whuno364pjqn7sphwquiqpl2w5le6aa6quwytgyxshvelcwq"), + "verifiedregistry": mustParseCid("bafk2bzaceamn6gzihkytyqym4dqs7wqmo2fz6kpge4tphumvutsp2ys4bwaha"), + }, }} func mustParseCid(c string) cid.Cid { diff --git a/venus-shared/actors/builtin_actors_test.go b/venus-shared/actors/builtin_actors_test.go index 89d666258c..782ec676c0 100644 --- a/venus-shared/actors/builtin_actors_test.go +++ b/venus-shared/actors/builtin_actors_test.go @@ -3,6 +3,7 @@ package actors import ( "testing" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/stretchr/testify/require" ) @@ -16,16 +17,16 @@ func TestEmbeddedMetadata(t *testing.T) { // Test that we're registering the manifest correctly. func TestRegistration(t *testing.T) { - manifestCid, found := GetManifest(Version8) + manifestCid, found := GetManifest(actorstypes.Version8) require.True(t, found) require.True(t, manifestCid.Defined()) for _, key := range GetBuiltinActorsKeys() { - actorCid, found := GetActorCodeID(Version8, key) + actorCid, found := GetActorCodeID(actorstypes.Version8, key) require.True(t, found) name, version, found := GetActorMetaByCode(actorCid) require.True(t, found) - require.Equal(t, Version8, version) + require.Equal(t, actorstypes.Version8, version) require.Equal(t, key, name) } } diff --git a/venus-shared/actors/manifest.go b/venus-shared/actors/manifest.go index 1754594922..de69f774e3 100644 --- a/venus-shared/actors/manifest.go +++ b/venus-shared/actors/manifest.go @@ -8,14 +8,15 @@ import ( "strings" "sync" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/venus/venus-shared/actors/adt" cid "github.com/ipfs/go-cid" cbor "github.com/ipfs/go-ipld-cbor" ) -var manifestCids map[Version]cid.Cid = make(map[Version]cid.Cid) -var manifests map[Version]map[string]cid.Cid = make(map[Version]map[string]cid.Cid) +var manifestCids map[actorstypes.Version]cid.Cid = make(map[actorstypes.Version]cid.Cid) +var manifests map[actorstypes.Version]map[string]cid.Cid = make(map[actorstypes.Version]map[string]cid.Cid) var actorMeta map[cid.Cid]actorEntry = make(map[cid.Cid]actorEntry) const ( @@ -54,7 +55,7 @@ var ( type actorEntry struct { name string - version Version + version actorstypes.Version } // ClearManifest clears all known manifests. This is usually used in tests that need to switch networks. @@ -62,13 +63,13 @@ func ClearManifests() { manifestMx.Lock() defer manifestMx.Unlock() - manifestCids = make(map[Version]cid.Cid) - manifests = make(map[Version]map[string]cid.Cid) + manifestCids = make(map[actorstypes.Version]cid.Cid) + manifests = make(map[actorstypes.Version]map[string]cid.Cid) actorMeta = make(map[cid.Cid]actorEntry) } // RegisterManifest registers an actors manifest with lotus. -func RegisterManifest(av Version, manifestCid cid.Cid, entries map[string]cid.Cid) { +func RegisterManifest(av actorstypes.Version, manifestCid cid.Cid, entries map[string]cid.Cid) { manifestMx.Lock() defer manifestMx.Unlock() @@ -81,7 +82,7 @@ func RegisterManifest(av Version, manifestCid cid.Cid, entries map[string]cid.Ci } // GetManifest gets a loaded manifest. -func GetManifest(av Version) (cid.Cid, bool) { +func GetManifest(av actorstypes.Version) (cid.Cid, bool) { manifestMx.RLock() defer manifestMx.RUnlock() @@ -114,7 +115,7 @@ func ReadManifest(ctx context.Context, store cbor.IpldStore, mfCid cid.Cid) (map } // GetActorCodeIDsFromManifest looks up all builtin actor's code CIDs by actor version for versions that have a manifest. -func GetActorCodeIDsFromManifest(av Version) (map[string]cid.Cid, bool) { +func GetActorCodeIDsFromManifest(av actorstypes.Version) (map[string]cid.Cid, bool) { manifestMx.RLock() defer manifestMx.RUnlock() @@ -137,7 +138,7 @@ func LoadManifest(ctx context.Context, mfCid cid.Cid, adtStore adt.Store) (*mani return &mf, nil } -func GetActorMetaByCode(c cid.Cid) (string, Version, bool) { +func GetActorMetaByCode(c cid.Cid) (string, actorstypes.Version, bool) { manifestMx.RLock() defer manifestMx.RUnlock() diff --git a/venus-shared/actors/policy/policy.go b/venus-shared/actors/policy/policy.go index 54bfbb3834..c64588ca28 100644 --- a/venus-shared/actors/policy/policy.go +++ b/venus-shared/actors/policy/policy.go @@ -3,15 +3,13 @@ package policy import ( - "sort" - - "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/network" - "github.com/filecoin-project/venus/venus-shared/actors" market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" @@ -60,14 +58,19 @@ import ( miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" verifreg8 "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" - paych8 "github.com/filecoin-project/go-state-types/builtin/v8/paych" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + market9 "github.com/filecoin-project/go-state-types/builtin/v9/market" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" ) const ( - ChainFinality = miner8.ChainFinality + ChainFinality = miner9.ChainFinality SealRandomnessLookback = ChainFinality - PaychSettleDelay = paych8.SettleDelay - MaxPreCommitRandomnessLookback = builtin8.EpochsInDay + SealRandomnessLookback + PaychSettleDelay = paych9.SettleDelay + MaxPreCommitRandomnessLookback = builtin9.EpochsInDay + SealRandomnessLookback ) // SetSupportedProofTypes sets supported proof types, across all actor versions. @@ -94,8 +97,6 @@ func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { miner7.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) - miner8.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) - AddSupportedProofTypes(types...) } @@ -152,15 +153,6 @@ func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { miner7.WindowPoStProofTypes[wpp] = struct{}{} - miner8.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} - wpp, err = t.RegisteredWindowPoStProof() - if err != nil { - // Fine to panic, this is a test-only method - panic(err) - } - - miner8.WindowPoStProofTypes[wpp] = struct{}{} - } } @@ -185,11 +177,13 @@ func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { miner8.PreCommitChallengeDelay = delay + miner9.PreCommitChallengeDelay = delay + } // TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. func GetPreCommitChallengeDelay() abi.ChainEpoch { - return miner8.PreCommitChallengeDelay + return miner9.PreCommitChallengeDelay } // SetConsensusMinerMinPower sets the minimum power of an individual miner must @@ -227,6 +221,10 @@ func SetConsensusMinerMinPower(p abi.StoragePower) { policy.ConsensusMinerMinPower = p } + for _, policy := range builtin9.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + } // SetMinVerifiedDealSize sets the minimum size of a verified deal. This should @@ -249,45 +247,51 @@ func SetMinVerifiedDealSize(size abi.StoragePower) { verifreg8.MinVerifiedDealSize = size + verifreg9.MinVerifiedDealSize = size + } -func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { +func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { switch ver { - case actors.Version0: + case actorstypes.Version0: return miner0.MaxSealDuration[t], nil - case actors.Version2: + case actorstypes.Version2: return miner2.MaxProveCommitDuration[t], nil - case actors.Version3: + case actorstypes.Version3: return miner3.MaxProveCommitDuration[t], nil - case actors.Version4: + case actorstypes.Version4: return miner4.MaxProveCommitDuration[t], nil - case actors.Version5: + case actorstypes.Version5: return miner5.MaxProveCommitDuration[t], nil - case actors.Version6: + case actorstypes.Version6: return miner6.MaxProveCommitDuration[t], nil - case actors.Version7: + case actorstypes.Version7: return miner7.MaxProveCommitDuration[t], nil - case actors.Version8: + case actorstypes.Version8: return miner8.MaxProveCommitDuration[t], nil + case actorstypes.Version9: + + return miner9.MaxProveCommitDuration[t], nil + default: - return 0, fmt.Errorf("unsupported actors version") + return 0, xerrors.Errorf("unsupported actors version") } } @@ -331,6 +335,11 @@ func SetProviderCollateralSupplyTarget(num, denom big.Int) { Denominator: denom, } + market9.ProviderCollateralSupplyTarget = builtin9.BigFrac{ + Numerator: num, + Denominator: denom, + } + } func DealProviderCollateralBounds( @@ -338,59 +347,64 @@ func DealProviderCollateralBounds( rawBytePower, qaPower, baselinePower abi.StoragePower, circulatingFil abi.TokenAmount, nwVer network.Version, ) (min, max abi.TokenAmount, err error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), big.Zero(), err } switch v { - case actors.Version0: + case actorstypes.Version0: min, max := market0.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) return min, max, nil - case actors.Version2: + case actorstypes.Version2: min, max := market2.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version3: + case actorstypes.Version3: min, max := market3.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version4: + case actorstypes.Version4: min, max := market4.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version5: + case actorstypes.Version5: min, max := market5.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version6: + case actorstypes.Version6: min, max := market6.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version7: + case actorstypes.Version7: min, max := market7.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version8: + case actorstypes.Version8: min, max := market8.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil + case actorstypes.Version9: + + min, max := market9.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + default: - return big.Zero(), big.Zero(), fmt.Errorf("unsupported actors version") + return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") } } func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { - return market8.DealDurationBounds(pieceSize) + return market9.DealDurationBounds(pieceSize) } // Sets the challenge window and scales the proving period to match (such that @@ -445,6 +459,13 @@ func SetWPoStChallengeWindow(period abi.ChainEpoch) { // scale it if we're scaling the challenge period. miner8.WPoStDisputeWindow = period * 30 + miner9.WPoStChallengeWindow = period + miner9.WPoStProvingPeriod = period * abi.ChainEpoch(miner9.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner9.WPoStDisputeWindow = period * 30 + } func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { @@ -457,15 +478,15 @@ func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { } func GetMaxSectorExpirationExtension() abi.ChainEpoch { - return miner8.MaxSectorExpirationExtension + return miner9.MaxSectorExpirationExtension } func GetMinSectorExpiration() abi.ChainEpoch { - return miner8.MinSectorExpiration + return miner9.MinSectorExpiration } func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { - sectorsPerPart, err := builtin8.PoStProofWindowPoStPartitionSectors(p) + sectorsPerPart, err := builtin9.PoStProofWindowPoStPartitionSectors(p) if err != nil { return 0, err } @@ -476,25 +497,6 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e return int(uint64(maxSectors) / sectorsPerPart), nil } -func GetDefaultSectorSize() abi.SectorSize { - // supported sector sizes are the same across versions. - szs := make([]abi.SectorSize, 0, len(miner8.PreCommitSealProofTypesV8)) - for spt := range miner8.PreCommitSealProofTypesV8 { - ss, err := spt.SectorSize() - if err != nil { - panic(err) - } - - szs = append(szs, ss) - } - - sort.Slice(szs, func(i, j int) bool { - return szs[i] < szs[j] - }) - - return szs[0] -} - func GetDefaultAggregationProof() abi.RegisteredAggregationProof { return abi.RegisteredAggregationProof_SnarkPackV1 } @@ -504,174 +506,189 @@ func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime } - return builtin8.SealProofPoliciesV11[proof].SectorMaxLifetime + return builtin9.SealProofPoliciesV11[proof].SectorMaxLifetime } func GetAddressedSectorsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { - case actors.Version0: + case actorstypes.Version0: return miner0.AddressedSectorsMax, nil - case actors.Version2: + case actorstypes.Version2: return miner2.AddressedSectorsMax, nil - case actors.Version3: + case actorstypes.Version3: return miner3.AddressedSectorsMax, nil - case actors.Version4: + case actorstypes.Version4: return miner4.AddressedSectorsMax, nil - case actors.Version5: + case actorstypes.Version5: return miner5.AddressedSectorsMax, nil - case actors.Version6: + case actorstypes.Version6: return miner6.AddressedSectorsMax, nil - case actors.Version7: + case actorstypes.Version7: return miner7.AddressedSectorsMax, nil - case actors.Version8: + case actorstypes.Version8: return miner8.AddressedSectorsMax, nil + case actorstypes.Version9: + return miner9.AddressedSectorsMax, nil + default: - return 0, fmt.Errorf("unsupported network version") + return 0, xerrors.Errorf("unsupported network version") } } func GetDeclarationsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { - case actors.Version0: + case actorstypes.Version0: // TODO: Should we instead error here since the concept doesn't exist yet? return miner0.AddressedPartitionsMax, nil - case actors.Version2: + case actorstypes.Version2: return miner2.DeclarationsMax, nil - case actors.Version3: + case actorstypes.Version3: return miner3.DeclarationsMax, nil - case actors.Version4: + case actorstypes.Version4: return miner4.DeclarationsMax, nil - case actors.Version5: + case actorstypes.Version5: return miner5.DeclarationsMax, nil - case actors.Version6: + case actorstypes.Version6: return miner6.DeclarationsMax, nil - case actors.Version7: + case actorstypes.Version7: return miner7.DeclarationsMax, nil - case actors.Version8: + case actorstypes.Version8: return miner8.DeclarationsMax, nil + case actorstypes.Version9: + + return miner9.DeclarationsMax, nil + default: - return 0, fmt.Errorf("unsupported network version") + return 0, xerrors.Errorf("unsupported network version") } } func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { - case actors.Version0: + case actorstypes.Version0: return big.Zero(), nil - case actors.Version2: + case actorstypes.Version2: return big.Zero(), nil - case actors.Version3: + case actorstypes.Version3: return big.Zero(), nil - case actors.Version4: + case actorstypes.Version4: return big.Zero(), nil - case actors.Version5: + case actorstypes.Version5: return miner5.AggregateNetworkFee(aggregateSize, baseFee), nil - case actors.Version6: + case actorstypes.Version6: return miner6.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version7: + case actorstypes.Version7: return miner7.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version8: + case actorstypes.Version8: return miner8.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + case actorstypes.Version9: + + return miner9.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + default: - return big.Zero(), fmt.Errorf("unsupported network version") + return big.Zero(), xerrors.Errorf("unsupported network version") } } func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { - case actors.Version0: + case actorstypes.Version0: return big.Zero(), nil - case actors.Version2: + case actorstypes.Version2: return big.Zero(), nil - case actors.Version3: + case actorstypes.Version3: return big.Zero(), nil - case actors.Version4: + case actorstypes.Version4: return big.Zero(), nil - case actors.Version5: + case actorstypes.Version5: return big.Zero(), nil - case actors.Version6: + case actorstypes.Version6: return miner6.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version7: + case actorstypes.Version7: return miner7.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version8: + case actorstypes.Version8: return miner8.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + case actorstypes.Version9: + + return miner9.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + default: - return big.Zero(), fmt.Errorf("unsupported network version") + return big.Zero(), xerrors.Errorf("unsupported network version") } } diff --git a/venus-shared/actors/policy/policy.go.template b/venus-shared/actors/policy/policy.go.template index bb3b932f0d..1eb19be7bf 100644 --- a/venus-shared/actors/policy/policy.go.template +++ b/venus-shared/actors/policy/policy.go.template @@ -3,14 +3,13 @@ package policy import ( - "sort" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - "fmt" + "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/network" - "github.com/filecoin-project/venus/venus-shared/actors" {{range .versions}} {{if (ge . 8)}} @@ -52,7 +51,7 @@ func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { miner{{.}}.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) miner{{.}}.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) - {{else}} + {{else if (le . 7)}} miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) {{end}} {{end}} @@ -86,7 +85,7 @@ func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { } miner{{.}}.WindowPoStProofTypes[wpp] = struct{}{} - {{else}} + {{else if (le . 7)}} miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} wpp, err = t.RegisteredWindowPoStProof() if err != nil { @@ -141,10 +140,10 @@ func SetMinVerifiedDealSize(size abi.StoragePower) { {{end}} } -func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { +func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { switch ver { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (eq . 0)}} return miner{{.}}.MaxSealDuration[t], nil {{else}} @@ -152,7 +151,7 @@ func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (a {{end}} {{end}} default: - return 0, fmt.Errorf("unsupported actors version") + return 0, xerrors.Errorf("unsupported actors version") } } @@ -175,13 +174,13 @@ func DealProviderCollateralBounds( rawBytePower, qaPower, baselinePower abi.StoragePower, circulatingFil abi.TokenAmount, nwVer network.Version, ) (min, max abi.TokenAmount, err error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), big.Zero(), err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (eq . 0)}} min, max := market{{.}}.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) return min, max, nil @@ -191,7 +190,7 @@ func DealProviderCollateralBounds( {{end}} {{end}} default: - return big.Zero(), big.Zero(), fmt.Errorf("unsupported actors version") + return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") } } @@ -242,25 +241,6 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e return int(uint64(maxSectors) / sectorsPerPart), nil } -func GetDefaultSectorSize() abi.SectorSize { - // supported sector sizes are the same across versions. - szs := make([]abi.SectorSize, 0, len(miner{{.latestVersion}}.PreCommitSealProofTypesV8)) - for spt := range miner{{.latestVersion}}.PreCommitSealProofTypesV8 { - ss, err := spt.SectorSize() - if err != nil { - panic(err) - } - - szs = append(szs, ss) - } - - sort.Slice(szs, func(i, j int) bool { - return szs[i] < szs[j] - }) - - return szs[0] -} - func GetDefaultAggregationProof() abi.RegisteredAggregationProof { return abi.RegisteredAggregationProof_SnarkPackV1 } @@ -274,28 +254,28 @@ func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) } func GetAddressedSectorsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return miner{{.}}.AddressedSectorsMax, nil {{end}} default: - return 0, fmt.Errorf("unsupported network version") + return 0, xerrors.Errorf("unsupported network version") } } func GetDeclarationsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (eq . 0)}} // TODO: Should we instead error here since the concept doesn't exist yet? return miner{{.}}.AddressedPartitionsMax, nil @@ -304,18 +284,18 @@ func GetDeclarationsMax(nwVer network.Version) (int, error) { {{end}} {{end}} default: - return 0, fmt.Errorf("unsupported network version") + return 0, xerrors.Errorf("unsupported network version") } } func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (ge . 6)}} return miner{{.}}.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil {{else if (eq . 5)}} @@ -325,18 +305,18 @@ func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, ba {{end}} {{end}} default: - return big.Zero(), fmt.Errorf("unsupported network version") + return big.Zero(), xerrors.Errorf("unsupported network version") } } func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (ge . 6)}} return miner{{.}}.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil {{else}} @@ -344,6 +324,6 @@ func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, base {{end}} {{end}} default: - return big.Zero(), fmt.Errorf("unsupported network version") + return big.Zero(), xerrors.Errorf("unsupported network version") } } diff --git a/venus-shared/actors/version.go b/venus-shared/actors/version.go index 05afe84f4f..414c962102 100644 --- a/venus-shared/actors/version.go +++ b/venus-shared/actors/version.go @@ -2,12 +2,6 @@ package actors -import ( - "fmt" - - "github.com/filecoin-project/go-state-types/network" -) - type Version int /* inline-gen template @@ -22,9 +16,9 @@ const ({{range .actorVersions}} /* inline-gen start */ -var LatestVersion = 8 +var LatestVersion = 9 -var Versions = []int{0, 2, 3, 4, 5, 6, 7, 8} +var Versions = []int{0, 2, 3, 4, 5, 6, 7, 8, 9} const ( Version0 Version = 0 @@ -35,30 +29,7 @@ const ( Version6 Version = 6 Version7 Version = 7 Version8 Version = 8 + Version9 Version = 9 ) /* inline-gen end */ - -// Converts a network version into an actors adt version. -func VersionForNetwork(version network.Version) (Version, error) { - switch version { - case network.Version0, network.Version1, network.Version2, network.Version3: - return Version0, nil - case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8, network.Version9: - return Version2, nil - case network.Version10, network.Version11: - return Version3, nil - case network.Version12: - return Version4, nil - case network.Version13: - return Version5, nil - case network.Version14: - return Version6, nil - case network.Version15: - return Version7, nil - case network.Version16: - return Version8, nil - default: - return -1, fmt.Errorf("unsupported network version %d", version) - } -} diff --git a/venus-shared/api/chain/v0/chain.go b/venus-shared/api/chain/v0/chain.go index f79cd1b0f1..0a00b19c1a 100644 --- a/venus-shared/api/chain/v0/chain.go +++ b/venus-shared/api/chain/v0/chain.go @@ -13,7 +13,7 @@ import ( "github.com/filecoin-project/go-state-types/network" "github.com/ipfs/go-cid" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" lminer "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" "github.com/filecoin-project/venus/venus-shared/types" ) diff --git a/venus-shared/api/chain/v0/method.md b/venus-shared/api/chain/v0/method.md index 3910eba23c..4ef8596fc2 100644 --- a/venus-shared/api/chain/v0/method.md +++ b/venus-shared/api/chain/v0/method.md @@ -1301,7 +1301,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -1316,7 +1316,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -1597,7 +1597,7 @@ Inputs: ] ``` -Response: `16` +Response: `17` ### StateSearchMsg @@ -3157,10 +3157,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -3279,10 +3276,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -3646,15 +3640,10 @@ Response: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, "PreCommitDeposit": "0", - "PreCommitEpoch": 10101, - "DealWeight": "0", - "VerifiedDealWeight": "0" + "PreCommitEpoch": 10101 } ``` diff --git a/venus-shared/api/chain/v0/mock/mock_fullnode.go b/venus-shared/api/chain/v0/mock/mock_fullnode.go index 1107f43e15..bc350a58e0 100644 --- a/venus-shared/api/chain/v0/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v0/mock/mock_fullnode.go @@ -13,8 +13,8 @@ import ( bitfield "github.com/filecoin-project/go-bitfield" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" crypto "github.com/filecoin-project/go-state-types/crypto" dline "github.com/filecoin-project/go-state-types/dline" network "github.com/filecoin-project/go-state-types/network" diff --git a/venus-shared/api/chain/v0/proxy_gen.go b/venus-shared/api/chain/v0/proxy_gen.go index af42818341..9d2be132d3 100644 --- a/venus-shared/api/chain/v0/proxy_gen.go +++ b/venus-shared/api/chain/v0/proxy_gen.go @@ -9,7 +9,7 @@ import ( bitfield "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" diff --git a/venus-shared/api/chain/v1/chain.go b/venus-shared/api/chain/v1/chain.go index 09099b9984..7cf8a72add 100644 --- a/venus-shared/api/chain/v1/chain.go +++ b/venus-shared/api/chain/v1/chain.go @@ -14,7 +14,7 @@ import ( "github.com/filecoin-project/go-state-types/network" "github.com/ipfs/go-cid" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" lminer "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" "github.com/filecoin-project/venus/venus-shared/types" ) diff --git a/venus-shared/api/chain/v1/method.md b/venus-shared/api/chain/v1/method.md index 534dd05927..ed1a36f4db 100644 --- a/venus-shared/api/chain/v1/method.md +++ b/venus-shared/api/chain/v1/method.md @@ -1270,7 +1270,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -1285,7 +1285,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -1606,7 +1606,7 @@ Inputs: ] ``` -Response: `16` +Response: `17` ### StateSearchMsg StateSearchMsg looks back up to limit epochs in the chain for a message, and returns its receipt and the tipset where it was executed @@ -3485,10 +3485,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -3607,10 +3604,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -4011,15 +4005,10 @@ Response: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, "PreCommitDeposit": "0", - "PreCommitEpoch": 10101, - "DealWeight": "0", - "VerifiedDealWeight": "0" + "PreCommitEpoch": 10101 } ``` diff --git a/venus-shared/api/chain/v1/mock/mock_fullnode.go b/venus-shared/api/chain/v1/mock/mock_fullnode.go index 849512d2df..91a7656992 100644 --- a/venus-shared/api/chain/v1/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v1/mock/mock_fullnode.go @@ -14,8 +14,8 @@ import ( bitfield "github.com/filecoin-project/go-bitfield" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" crypto "github.com/filecoin-project/go-state-types/crypto" dline "github.com/filecoin-project/go-state-types/dline" network "github.com/filecoin-project/go-state-types/network" diff --git a/venus-shared/api/chain/v1/proxy_gen.go b/venus-shared/api/chain/v1/proxy_gen.go index b23ef6ce29..f9bbff1ae3 100644 --- a/venus-shared/api/chain/v1/proxy_gen.go +++ b/venus-shared/api/chain/v1/proxy_gen.go @@ -10,7 +10,7 @@ import ( bitfield "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" diff --git a/venus-shared/api/gateway/v1/method.md b/venus-shared/api/gateway/v1/method.md index 2028774e2f..74692ab605 100644 --- a/venus-shared/api/gateway/v1/method.md +++ b/venus-shared/api/gateway/v1/method.md @@ -197,7 +197,7 @@ Inputs: ], "Bw==", 10101, - 16 + 17 ] ``` diff --git a/venus-shared/compatible-checks/actor-sources.txt b/venus-shared/compatible-checks/actor-sources.txt index f2b05786ed..4aa53bb5d7 100644 --- a/venus-shared/compatible-checks/actor-sources.txt +++ b/venus-shared/compatible-checks/actor-sources.txt @@ -17,6 +17,7 @@ SOURCES IN chain/actors: builtin/account/v6.go builtin/account/v7.go builtin/account/v8.go + builtin/account/v9.go builtin/builtin.go builtin/cron/cron.go builtin/cron/v0.go @@ -27,6 +28,7 @@ SOURCES IN chain/actors: builtin/cron/v6.go builtin/cron/v7.go builtin/cron/v8.go + builtin/cron/v9.go builtin/init/diff.go builtin/init/init.go builtin/init/v0.go @@ -37,6 +39,7 @@ SOURCES IN chain/actors: builtin/init/v6.go builtin/init/v7.go builtin/init/v8.go + builtin/init/v9.go builtin/market/diff.go builtin/market/market.go builtin/market/v0.go @@ -47,6 +50,7 @@ SOURCES IN chain/actors: builtin/market/v6.go builtin/market/v7.go builtin/market/v8.go + builtin/market/v9.go builtin/miner/diff.go builtin/miner/diff_deadlines.go builtin/miner/miner.go @@ -59,6 +63,7 @@ SOURCES IN chain/actors: builtin/miner/v6.go builtin/miner/v7.go builtin/miner/v8.go + builtin/miner/v9.go builtin/multisig/diff.go builtin/multisig/message0.go builtin/multisig/message2.go @@ -68,6 +73,7 @@ SOURCES IN chain/actors: builtin/multisig/message6.go builtin/multisig/message7.go builtin/multisig/message8.go + builtin/multisig/message9.go builtin/multisig/multisig.go builtin/multisig/v0.go builtin/multisig/v2.go @@ -77,6 +83,7 @@ SOURCES IN chain/actors: builtin/multisig/v6.go builtin/multisig/v7.go builtin/multisig/v8.go + builtin/multisig/v9.go builtin/paych/message0.go builtin/paych/message2.go builtin/paych/message3.go @@ -85,6 +92,7 @@ SOURCES IN chain/actors: builtin/paych/message6.go builtin/paych/message7.go builtin/paych/message8.go + builtin/paych/message9.go builtin/paych/mock/mock.go builtin/paych/paych.go builtin/paych/v0.go @@ -95,6 +103,7 @@ SOURCES IN chain/actors: builtin/paych/v6.go builtin/paych/v7.go builtin/paych/v8.go + builtin/paych/v9.go builtin/power/diff.go builtin/power/power.go builtin/power/v0.go @@ -105,6 +114,8 @@ SOURCES IN chain/actors: builtin/power/v6.go builtin/power/v7.go builtin/power/v8.go + builtin/power/v9.go + builtin/registry.go builtin/reward/reward.go builtin/reward/v0.go builtin/reward/v2.go @@ -114,6 +125,7 @@ SOURCES IN chain/actors: builtin/reward/v6.go builtin/reward/v7.go builtin/reward/v8.go + builtin/reward/v9.go builtin/system/system.go builtin/system/v0.go builtin/system/v2.go @@ -123,6 +135,7 @@ SOURCES IN chain/actors: builtin/system/v6.go builtin/system/v7.go builtin/system/v8.go + builtin/system/v9.go builtin/verifreg/util.go builtin/verifreg/v0.go builtin/verifreg/v2.go @@ -132,6 +145,7 @@ SOURCES IN chain/actors: builtin/verifreg/v6.go builtin/verifreg/v7.go builtin/verifreg/v8.go + builtin/verifreg/v9.go builtin/verifreg/verifreg.go manifest.go params.go diff --git a/venus-shared/compatible-checks/actor-templates.txt b/venus-shared/compatible-checks/actor-templates.txt index bb2193324d..5aa537eb3e 100644 --- a/venus-shared/compatible-checks/actor-templates.txt +++ b/venus-shared/compatible-checks/actor-templates.txt @@ -18,6 +18,7 @@ TEMPLATES IN chain/actors: builtin/paych/state.go.template builtin/power/actor.go.template builtin/power/state.go.template + builtin/registry.go.template builtin/reward/actor.go.template builtin/reward/state.go.template builtin/system/actor.go.template diff --git a/venus-shared/compatible-checks/api-checksum.txt b/venus-shared/compatible-checks/api-checksum.txt index fec33ddb25..371038bda0 100644 --- a/venus-shared/compatible-checks/api-checksum.txt +++ b/venus-shared/compatible-checks/api-checksum.txt @@ -142,6 +142,7 @@ v0api.FullNode: Shutdown: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 StateAccountKey: In=3, Out=2, CheckSum=9b6f9fdaea5bb22c60772266c418d98f StateActorCodeCIDs: In=2, Out=2, CheckSum=d52881195cc100121739e6c85c45dd9f + StateActorManifestCID: In=2, Out=2, CheckSum=e04ec685bb3d32a892d45c5215586589 StateAllMinerFaults: In=3, Out=2, CheckSum=a17e05b21e1ecc8da867e2f76df6c46c StateCall: In=3, Out=2, CheckSum=b33ab6c7df31d805c256c8ab6691b085 StateChangedActors: In=3, Out=2, CheckSum=cbc0cd36e495552a6672caab9f839468 @@ -162,20 +163,20 @@ v0api.FullNode: StateMarketDeals: In=2, Out=2, CheckSum=46b5eef922e8252939bf00e1e80ae89e StateMarketParticipants: In=2, Out=2, CheckSum=acc9019d0b6e389743c6f992350f407c StateMarketStorageDeal: In=3, Out=2, CheckSum=94af302d39beba9f0ce7648f4118b6aa - StateMinerActiveSectors: In=3, Out=2, CheckSum=10a984fbf3118e0dab152af36aa64424 + StateMinerActiveSectors: In=3, Out=2, CheckSum=a6cc03c30ff0302d5dcd3002e55585b7 StateMinerAvailableBalance: In=3, Out=2, CheckSum=a05010da3c73edfba49c3b5d28a216cd StateMinerDeadlines: In=3, Out=2, CheckSum=5b128c75ba4953740906520cca96b962 StateMinerFaults: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 StateMinerInfo: In=3, Out=2, CheckSum=4ba684a8519aa97d4df405cee3496e7c - StateMinerInitialPledgeCollateral: In=4, Out=2, CheckSum=d2a137a064199d4c8bfd685d21e991f4 + StateMinerInitialPledgeCollateral: In=4, Out=2, CheckSum=b456dc2029fe2ac176ade895bda96dd5 StateMinerPartitions: In=4, Out=2, CheckSum=b3cba1da3bd87c433cb8f9df7f7edc09 StateMinerPower: In=3, Out=2, CheckSum=0e70a6360616c25624118181f764d7df - StateMinerPreCommitDepositForPower: In=4, Out=2, CheckSum=d2a137a064199d4c8bfd685d21e991f4 + StateMinerPreCommitDepositForPower: In=4, Out=2, CheckSum=b456dc2029fe2ac176ade895bda96dd5 StateMinerProvingDeadline: In=3, Out=2, CheckSum=8c6037a054ad720ecfb3d0c3f4f90fe6 StateMinerRecoveries: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 StateMinerSectorAllocated: In=4, Out=2, CheckSum=2accd56a9e9196fa1ca85a1d60e19fc2 StateMinerSectorCount: In=3, Out=2, CheckSum=573483cbcf3ccdd38063b9ce16453dc2 - StateMinerSectors: In=4, Out=2, CheckSum=067ee5993041463c27212b948a59e1e5 + StateMinerSectors: In=4, Out=2, CheckSum=532dd2620e4430f0ae9113b75104e12f StateNetworkName: In=1, Out=2, CheckSum=afb82130640a26dcd9d7010f31c69572 StateNetworkVersion: In=2, Out=2, CheckSum=47de92e3b59793ade53abd96c347bace StateReadState: In=3, Out=2, CheckSum=f53f39943eea93d5f3dd64f1389e4c64 @@ -183,9 +184,9 @@ v0api.FullNode: StateSearchMsg: In=2, Out=2, CheckSum=e4186ab56a9d2e3c99174110e3f697dc StateSearchMsgLimited: In=3, Out=2, CheckSum=8990ed018d033c44ebb38c0d077bc6d0 StateSectorExpiration: In=4, Out=2, CheckSum=bb669c8b66b6f74c681b4345c9e4cc8f - StateSectorGetInfo: In=4, Out=2, CheckSum=1fb47cbbd06b1a50e47a087a28998016 + StateSectorGetInfo: In=4, Out=2, CheckSum=8d176fd8a2054079b0017f795f9a4d56 StateSectorPartition: In=4, Out=2, CheckSum=e3743df55a360243a32ac64ce1282c53 - StateSectorPreCommitInfo: In=4, Out=2, CheckSum=04d3c9135dc061d98706f61158224288 + StateSectorPreCommitInfo: In=4, Out=2, CheckSum=f0961d63ab3679dafcf6563a83126d56 StateVMCirculatingSupplyInternal: In=2, Out=2, CheckSum=05c2114e08be095cece55db19e214d2c StateVerifiedClientStatus: In=3, Out=2, CheckSum=e33ae4cd2315832f2d6f2aa74b68c34e StateVerifiedRegistryRootKey: In=2, Out=2, CheckSum=5ad3a497ee24e321c780a69b8d2f0936 @@ -238,6 +239,7 @@ api.FullNode: ChainHasObj: In=2, Out=2, CheckSum=7fe71bcffa1b110db106e0104e98a32f ChainHead: In=1, Out=2, CheckSum=6d1e4c4d8184dc8d645a56278f14cfad ChainNotify: In=1, Out=2, CheckSum=9525148e93a5b83600ebfbde4d24f3e9 + ChainPrune: In=2, Out=1, CheckSum=af574df2ee0daa338f8d54b5f5da15a3 ChainPutObj: In=2, Out=1, CheckSum=8f14a26d66dd2a48d50d58af2ff7d722 ChainReadObj: In=2, Out=2, CheckSum=6fd9244d87bf5d14fb5e79b0dbc0940d ChainSetHead: In=2, Out=1, CheckSum=cdfe593ac791e823186abb77bfad49a0 @@ -367,6 +369,7 @@ api.FullNode: Shutdown: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 StateAccountKey: In=3, Out=2, CheckSum=9b6f9fdaea5bb22c60772266c418d98f StateActorCodeCIDs: In=2, Out=2, CheckSum=d52881195cc100121739e6c85c45dd9f + StateActorManifestCID: In=2, Out=2, CheckSum=e04ec685bb3d32a892d45c5215586589 StateAllMinerFaults: In=3, Out=2, CheckSum=a17e05b21e1ecc8da867e2f76df6c46c StateCall: In=3, Out=2, CheckSum=b33ab6c7df31d805c256c8ab6691b085 StateChangedActors: In=3, Out=2, CheckSum=cbc0cd36e495552a6672caab9f839468 @@ -390,29 +393,30 @@ api.FullNode: StateMarketDeals: In=2, Out=2, CheckSum=46b5eef922e8252939bf00e1e80ae89e StateMarketParticipants: In=2, Out=2, CheckSum=acc9019d0b6e389743c6f992350f407c StateMarketStorageDeal: In=3, Out=2, CheckSum=94af302d39beba9f0ce7648f4118b6aa - StateMinerActiveSectors: In=3, Out=2, CheckSum=10a984fbf3118e0dab152af36aa64424 + StateMinerActiveSectors: In=3, Out=2, CheckSum=a6cc03c30ff0302d5dcd3002e55585b7 + StateMinerAllocated: In=3, Out=2, CheckSum=808e4357d56c3d08769a9d7a249ea7c0 StateMinerAvailableBalance: In=3, Out=2, CheckSum=a05010da3c73edfba49c3b5d28a216cd StateMinerDeadlines: In=3, Out=2, CheckSum=5b128c75ba4953740906520cca96b962 StateMinerFaults: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 StateMinerInfo: In=3, Out=2, CheckSum=4ba684a8519aa97d4df405cee3496e7c - StateMinerInitialPledgeCollateral: In=4, Out=2, CheckSum=d2a137a064199d4c8bfd685d21e991f4 + StateMinerInitialPledgeCollateral: In=4, Out=2, CheckSum=b456dc2029fe2ac176ade895bda96dd5 StateMinerPartitions: In=4, Out=2, CheckSum=b3cba1da3bd87c433cb8f9df7f7edc09 StateMinerPower: In=3, Out=2, CheckSum=0e70a6360616c25624118181f764d7df - StateMinerPreCommitDepositForPower: In=4, Out=2, CheckSum=d2a137a064199d4c8bfd685d21e991f4 + StateMinerPreCommitDepositForPower: In=4, Out=2, CheckSum=b456dc2029fe2ac176ade895bda96dd5 StateMinerProvingDeadline: In=3, Out=2, CheckSum=8c6037a054ad720ecfb3d0c3f4f90fe6 StateMinerRecoveries: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 StateMinerSectorAllocated: In=4, Out=2, CheckSum=2accd56a9e9196fa1ca85a1d60e19fc2 StateMinerSectorCount: In=3, Out=2, CheckSum=573483cbcf3ccdd38063b9ce16453dc2 - StateMinerSectors: In=4, Out=2, CheckSum=067ee5993041463c27212b948a59e1e5 + StateMinerSectors: In=4, Out=2, CheckSum=532dd2620e4430f0ae9113b75104e12f StateNetworkName: In=1, Out=2, CheckSum=afb82130640a26dcd9d7010f31c69572 StateNetworkVersion: In=2, Out=2, CheckSum=47de92e3b59793ade53abd96c347bace StateReadState: In=3, Out=2, CheckSum=f53f39943eea93d5f3dd64f1389e4c64 StateReplay: In=3, Out=2, CheckSum=ec89143eb01290212c3ce0032f62c5fc StateSearchMsg: In=5, Out=2, CheckSum=05ad20588933ea6ffa941f47b826708a StateSectorExpiration: In=4, Out=2, CheckSum=bb669c8b66b6f74c681b4345c9e4cc8f - StateSectorGetInfo: In=4, Out=2, CheckSum=1fb47cbbd06b1a50e47a087a28998016 + StateSectorGetInfo: In=4, Out=2, CheckSum=8d176fd8a2054079b0017f795f9a4d56 StateSectorPartition: In=4, Out=2, CheckSum=e3743df55a360243a32ac64ce1282c53 - StateSectorPreCommitInfo: In=4, Out=2, CheckSum=699963129f096b031a79fbd0e8c11b1c + StateSectorPreCommitInfo: In=4, Out=2, CheckSum=80eabb64c62e90a2cf0e497107b774ff StateVMCirculatingSupplyInternal: In=2, Out=2, CheckSum=05c2114e08be095cece55db19e214d2c StateVerifiedClientStatus: In=3, Out=2, CheckSum=e33ae4cd2315832f2d6f2aa74b68c34e StateVerifiedRegistryRootKey: In=2, Out=2, CheckSum=5ad3a497ee24e321c780a69b8d2f0936 diff --git a/venus-shared/compatible-checks/api-diff.txt b/venus-shared/compatible-checks/api-diff.txt index 8d4f102cca..70e9d0d81a 100644 --- a/venus-shared/compatible-checks/api-diff.txt +++ b/venus-shared/compatible-checks/api-diff.txt @@ -38,7 +38,7 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v0.FullNode <> github.c - CreateBackup - Discover + GasBatchEstimateMessageGas - > GasEstimateMessageGas {[func(context.Context, *internal.Message, *types.MessageSendSpec, types.TipSetKey) (*internal.Message, error) <> func(context.Context, *types.Message, *api.MessageSendSpec, types.TipSetKey) (*types.Message, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 1; nested=nil}}}} + > GasEstimateMessageGas {[func(context.Context, *internal.Message, *types.MessageSendSpec, types.TipSetKey) (*internal.Message, error) <> func(context.Context, *types.Message, *api.MessageSendSpec, types.TipSetKey) (*types.Message, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + GetActor + GetEntry + GetFullBlock @@ -55,11 +55,11 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v0.FullNode <> github.c - MarketReserveFunds - MarketWithdraw + MessageWait - > MpoolBatchPushMessage {[func(context.Context, []*internal.Message, *types.MessageSendSpec) ([]*types.SignedMessage, error) <> func(context.Context, []*types.Message, *api.MessageSendSpec) ([]*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 1; nested=nil}}}} + > MpoolBatchPushMessage {[func(context.Context, []*internal.Message, *types.MessageSendSpec) ([]*types.SignedMessage, error) <> func(context.Context, []*types.Message, *api.MessageSendSpec) ([]*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolDeleteByAdress + MpoolPublishByAddr + MpoolPublishMessage - > MpoolPushMessage {[func(context.Context, *internal.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 1; nested=nil}}}} + > MpoolPushMessage {[func(context.Context, *internal.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolSelects > MsigCancel {[func(context.Context, address.Address, uint64, address.Address) (cid.Cid, error) <> func(context.Context, address.Address, uint64, address.Address, big.Int, address.Address, uint64, []uint8) (cid.Cid, error)] base=func in num: 4 != 8; nested=nil} + MsigCancelTxnHash @@ -80,7 +80,6 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v0.FullNode <> github.c + SetConcurrent + SetPassword - Shutdown - + StateActorManifestCID - StateAllMinerFaults - StateChangedActors - StateCompute @@ -89,6 +88,7 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v0.FullNode <> github.c - StateGetRandomnessFromBeacon - StateGetRandomnessFromTickets - StateListMessages + > StateMinerInfo {[func(context.Context, address.Address, types.TipSetKey) (types.MinerInfo, error) <> func(context.Context, address.Address, types.TipSetKey) (api.MinerInfo, error)] base=func out type: #0 input; nested={[types.MinerInfo <> api.MinerInfo] base=struct field; nested={[types.MinerInfo <> api.MinerInfo] base=exported fields count: 11 != 14; nested=nil}}} + StateMinerSectorSize + StateMinerWorkerAddress - StateReadState @@ -124,6 +124,7 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c - ChainGetNode + ChainGetReceipts + ChainList + - ChainPrune + ChainSyncHandleNewTipSet - ClientCalcCommP - ClientCancelDataTransfer @@ -158,7 +159,7 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c - CreateBackup - Discover + GasBatchEstimateMessageGas - > GasEstimateMessageGas {[func(context.Context, *internal.Message, *types.MessageSendSpec, types.TipSetKey) (*internal.Message, error) <> func(context.Context, *types.Message, *api.MessageSendSpec, types.TipSetKey) (*types.Message, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 1; nested=nil}}}} + > GasEstimateMessageGas {[func(context.Context, *internal.Message, *types.MessageSendSpec, types.TipSetKey) (*internal.Message, error) <> func(context.Context, *types.Message, *api.MessageSendSpec, types.TipSetKey) (*types.Message, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + GetActor + GetEntry + GetFullBlock @@ -175,11 +176,11 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c - MarketReserveFunds - MarketWithdraw + MessageWait - > MpoolBatchPushMessage {[func(context.Context, []*internal.Message, *types.MessageSendSpec) ([]*types.SignedMessage, error) <> func(context.Context, []*types.Message, *api.MessageSendSpec) ([]*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 1; nested=nil}}}} + > MpoolBatchPushMessage {[func(context.Context, []*internal.Message, *types.MessageSendSpec) ([]*types.SignedMessage, error) <> func(context.Context, []*types.Message, *api.MessageSendSpec) ([]*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolDeleteByAdress + MpoolPublishByAddr + MpoolPublishMessage - > MpoolPushMessage {[func(context.Context, *internal.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 1; nested=nil}}}} + > MpoolPushMessage {[func(context.Context, *internal.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolSelects - MsigGetAvailableBalance - MsigGetPending @@ -199,10 +200,9 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c + SetConcurrent + SetPassword - Shutdown - + StateActorManifestCID - StateCompute > StateGetNetworkParams {[func(context.Context) (*types.NetworkParams, error) <> func(context.Context) (*api.NetworkParams, error)] base=func out type: #0 input; nested={[*types.NetworkParams <> *api.NetworkParams] base=pointed type; nested={[types.NetworkParams <> api.NetworkParams] base=struct field; nested={[types.NetworkParams <> api.NetworkParams] base=exported field type: #5 field named ForkUpgradeParams; nested={[types.ForkUpgradeParams <> api.ForkUpgradeParams] base=struct field; nested={[types.ForkUpgradeParams <> api.ForkUpgradeParams] base=exported field name: #8 field, BreezeGasTampingDuration != UpgradePriceListOopsHeight; nested=nil}}}}}} - + StateMinerAllocated + > StateMinerInfo {[func(context.Context, address.Address, types.TipSetKey) (types.MinerInfo, error) <> func(context.Context, address.Address, types.TipSetKey) (api.MinerInfo, error)] base=func out type: #0 input; nested={[types.MinerInfo <> api.MinerInfo] base=struct field; nested={[types.MinerInfo <> api.MinerInfo] base=exported fields count: 11 != 14; nested=nil}}} + StateMinerSectorSize + StateMinerWorkerAddress - StateReplay diff --git a/venus-shared/compatible-checks/api-perm.txt b/venus-shared/compatible-checks/api-perm.txt index 8a683d73e5..4c9ae87448 100644 --- a/venus-shared/compatible-checks/api-perm.txt +++ b/venus-shared/compatible-checks/api-perm.txt @@ -11,7 +11,6 @@ v0: github.com/filecoin-project/venus/venus-shared/api/chain/v0 <> github.com/fi - IChainInfo.MessageWait - IChainInfo.ProtocolParameters - IChainInfo.ResolveToKeyAddr - - IChainInfo.StateActorManifestCID - IChainInfo.VerifyEntry - IMinerState.StateMinerSectorSize - IMinerState.StateMinerWorkerAddress @@ -66,9 +65,7 @@ v1: github.com/filecoin-project/venus/venus-shared/api/chain/v1 <> github.com/fi - IChainInfo.MessageWait - IChainInfo.ProtocolParameters - IChainInfo.ResolveToKeyAddr - - IChainInfo.StateActorManifestCID - IChainInfo.VerifyEntry - - IMinerState.StateMinerAllocated - IMinerState.StateMinerSectorSize - IMinerState.StateMinerWorkerAddress - IMessagePool.GasBatchEstimateMessageGas diff --git a/venus-shared/utils/method_map.go b/venus-shared/utils/method_map.go index a1da9a2801..0188a73c58 100644 --- a/venus-shared/utils/method_map.go +++ b/venus-shared/utils/method_map.go @@ -2,19 +2,11 @@ package utils import ( "reflect" - "runtime" - "strings" + "strconv" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/rt" - "github.com/ipfs/go-cid" - - /* inline-gen template - {{range .actorVersions}} - exported{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/exported"{{end}} - - /* inline-gen start */ - exported0 "github.com/filecoin-project/specs-actors/actors/builtin/exported" exported2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/exported" exported3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/exported" @@ -22,16 +14,13 @@ import ( exported5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/exported" exported6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/exported" exported7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/exported" - exported8 "github.com/filecoin-project/specs-actors/v8/actors/builtin/exported" - - /* inline-gen end */ - _actors "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/ipfs/go-cid" ) type MethodMeta struct { - Name string + Num string Params reflect.Type Ret reflect.Type @@ -43,7 +32,7 @@ type MethodMeta struct { var MethodsMap = map[cid.Cid]map[abi.MethodNum]MethodMeta{} type actorsWithVersion struct { - av _actors.Version + av actorstypes.Version actors []rt.VMActor } @@ -60,27 +49,22 @@ func loadMethodsMap() { // TODO: combine with the runtime actor registry. var actors []actorsWithVersion - /* inline-gen template - {{range .actorVersions}} - actors = append(actors, actorsWithVersion{av: _actors.Version{{.}}, actors: exported{{.}}.BuiltinActors()}){{end}} - /* inline-gen start */ - - actors = append(actors, actorsWithVersion{av: _actors.Version0, actors: exported0.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version2, actors: exported2.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version3, actors: exported3.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version4, actors: exported4.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version5, actors: exported5.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version6, actors: exported6.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version7, actors: exported7.BuiltinActors()}) - actors = append(actors, actorsWithVersion{av: _actors.Version8, actors: exported8.BuiltinActors()}) - /* inline-gen end */ + actors = append(actors, actorsWithVersion{av: actorstypes.Version0, actors: exported0.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version2, actors: exported2.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version3, actors: exported3.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version4, actors: exported4.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version5, actors: exported5.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version6, actors: exported6.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version7, actors: exported7.BuiltinActors()}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version8, actors: builtin.MakeRegistry(actorstypes.Version8)}) + actors = append(actors, actorsWithVersion{av: actorstypes.Version9, actors: builtin.MakeRegistry(actorstypes.Version9)}) for _, awv := range actors { for _, actor := range awv.actors { // necessary to make stuff work ac := actor.Code() var realCode cid.Cid - if awv.av >= _actors.Version8 { + if awv.av >= actorstypes.Version8 { name := _actors.CanonicalName(builtin.ActorNameByCode(ac)) realCode, _ = _actors.GetActorCodeID(awv.av, name) @@ -91,7 +75,7 @@ func loadMethodsMap() { // Explicitly add send, it's special. methods[builtin.MethodSend] = MethodMeta{ - Name: "Send", + Num: "0", Params: reflect.TypeOf(new(abi.EmptyValue)), Ret: reflect.TypeOf(new(abi.EmptyValue)), } @@ -106,24 +90,8 @@ func loadMethodsMap() { ev := reflect.ValueOf(export) et := ev.Type() - // Extract the method names using reflection. These - // method names always match the field names in the - // `builtin.Method*` structs (tested in the specs-actors - // tests). - fnName := runtime.FuncForPC(ev.Pointer()).Name() - fnName = strings.TrimSuffix(fnName[strings.LastIndexByte(fnName, '.')+1:], "-fm") - - switch abi.MethodNum(number) { - case builtin.MethodSend: - panic("method 0 is reserved for Send") - case builtin.MethodConstructor: - if fnName != "Constructor" { - panic("method 1 is reserved for Constructor") - } - } - methods[abi.MethodNum(number)] = MethodMeta{ - Name: fnName, + Num: strconv.Itoa(number), Params: et.In(1), Ret: et.Out(0), } diff --git a/venus-shared/utils/msg_parser/parser_test.go b/venus-shared/utils/msg_parser/parser_test.go index 66da289015..b64a792783 100644 --- a/venus-shared/utils/msg_parser/parser_test.go +++ b/venus-shared/utils/msg_parser/parser_test.go @@ -15,7 +15,7 @@ import ( "github.com/filecoin-project/go-address" cbor "github.com/filecoin-project/go-cbor-util" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/specs-actors/v8/actors/builtin" + "github.com/filecoin-project/specs-actors/v7/actors/builtin" "github.com/filecoin-project/venus/venus-shared/types" "github.com/stretchr/testify/require" ) From f93ba73d6bd7b46a6b6747956c14d9784338d167 Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Tue, 27 Sep 2022 15:37:42 +0800 Subject: [PATCH 2/4] fix: fix lint --- cmd/miner.go | 2 +- pkg/fvm/fvm.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/miner.go b/cmd/miner.go index 81605ef6c3..bed6bde4e2 100644 --- a/cmd/miner.go +++ b/cmd/miner.go @@ -135,7 +135,7 @@ var newMinerCmd = &cmds.Command{ return fmt.Errorf("getting network version: %v", err) } - spt, err := miner.SealProofTypeFromSectorSize(abi.SectorSize(ssize), nv) + spt, err := miner.SealProofTypeFromSectorSize(ssize, nv) if err != nil { return fmt.Errorf("getting seal proof type: %v", err) } diff --git a/pkg/fvm/fvm.go b/pkg/fvm/fvm.go index 8e02091d2e..5dc4bab103 100644 --- a/pkg/fvm/fvm.go +++ b/pkg/fvm/fvm.go @@ -59,7 +59,7 @@ type FvmExtern struct { // nolint gasPriceSchedule *gas.PricesSchedule } -type FvmGasCharge struct { +type FvmGasCharge struct { // nolint Name string TotalGas int64 ComputeGas int64 From 01b8dc48f94bfd31bcaa592f8f383b05fa0aae2d Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:04:34 +0800 Subject: [PATCH 3/4] feat: Add a function for migration configuration --- fixtures/networks/integrationtestnet.go | 3 +- fixtures/networks/net_2k.go | 37 +++++++++-------- pkg/migration/migrate.go | 54 ++++++++++++++++++++++--- pkg/migration/migrate_test.go | 1 + pkg/repo/fsrepo.go | 13 +----- 5 files changed, 70 insertions(+), 38 deletions(-) diff --git a/fixtures/networks/integrationtestnet.go b/fixtures/networks/integrationtestnet.go index e976eba381..98b59fd10f 100644 --- a/fixtures/networks/integrationtestnet.go +++ b/fixtures/networks/integrationtestnet.go @@ -47,7 +47,8 @@ func IntegrationNet() *NetworkConf { UpgradeHyperdriveHeight: 892800, UpgradeChocolateHeight: 1231620, UpgradeOhSnapHeight: 1594680, - UpgradeSkyrHeight: 99999999999999, + UpgradeSkyrHeight: 1960320, + UpgradeV17Height: 99999999999999, }, DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 5, 51000: 1}, AddressNetwork: address.Testnet, diff --git a/fixtures/networks/net_2k.go b/fixtures/networks/net_2k.go index 3020e6951c..d50f42da38 100644 --- a/fixtures/networks/net_2k.go +++ b/fixtures/networks/net_2k.go @@ -27,26 +27,25 @@ func Net2k() *NetworkConf { MinVerifiedDealSize: 256, PreCommitChallengeDelay: abi.ChainEpoch(10), ForkUpgradeParam: &config.ForkUpgradeConfig{ - UpgradeBreezeHeight: -1, - UpgradeSmokeHeight: -2, - UpgradeIgnitionHeight: -3, - UpgradeRefuelHeight: -4, - UpgradeTapeHeight: -5, - UpgradeAssemblyHeight: -6, - UpgradeLiftoffHeight: -7, - UpgradeKumquatHeight: -8, - UpgradeCalicoHeight: -9, - UpgradePersianHeight: -10, - UpgradeOrangeHeight: -11, - UpgradeTrustHeight: -13, - UpgradeNorwegianHeight: -14, - UpgradeTurboHeight: -15, - UpgradeHyperdriveHeight: -16, - UpgradeChocolateHeight: -17, - UpgradeOhSnapHeight: -18, - BreezeGasTampingDuration: 0, - UpgradeClausHeight: -11, + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -2, + UpgradeIgnitionHeight: -3, + UpgradeRefuelHeight: -4, + UpgradeTapeHeight: -5, + UpgradeAssemblyHeight: -6, + UpgradeLiftoffHeight: -7, + UpgradeKumquatHeight: -8, + UpgradeCalicoHeight: -9, + UpgradePersianHeight: -10, + UpgradeOrangeHeight: -11, + UpgradeClausHeight: -12, + UpgradeTrustHeight: -13, + UpgradeNorwegianHeight: -14, + UpgradeTurboHeight: -15, + UpgradeHyperdriveHeight: -16, + UpgradeChocolateHeight: -17, + UpgradeOhSnapHeight: -18, UpgradeSkyrHeight: -19, UpgradeV17Height: 99999999999999, }, diff --git a/pkg/migration/migrate.go b/pkg/migration/migrate.go index af7b098144..7260990e6b 100644 --- a/pkg/migration/migrate.go +++ b/pkg/migration/migrate.go @@ -31,6 +31,7 @@ var versionMap = []versionInfo{ {version: 6, upgrade: Version6Upgrade}, {version: 7, upgrade: Version7Upgrade}, {version: 8, upgrade: Version8Upgrade}, + {version: 9, upgrade: Version9Upgrade}, } // TryToMigrate used to migrate data(db,config,file,etc) in local repo @@ -121,7 +122,7 @@ func Version4Upgrade(repoPath string) (err error) { return repo.WriteVersion(repoPath, 4) } -//Version5Upgrade +// Version5Upgrade func Version5Upgrade(repoPath string) (err error) { var fsrRepo repo.Repo if fsrRepo, err = repo.OpenFSRepo(repoPath, 4); err != nil { @@ -159,7 +160,7 @@ func Version5Upgrade(repoPath string) (err error) { return repo.WriteVersion(repoPath, 5) } -//Version6Upgrade +// Version6Upgrade func Version6Upgrade(repoPath string) (err error) { var fsrRepo repo.Repo if fsrRepo, err = repo.OpenFSRepo(repoPath, 5); err != nil { @@ -197,7 +198,7 @@ func Version6Upgrade(repoPath string) (err error) { return repo.WriteVersion(repoPath, 6) } -//Version7Upgrade +// Version7Upgrade func Version7Upgrade(repoPath string) (err error) { var fsrRepo repo.Repo if fsrRepo, err = repo.OpenFSRepo(repoPath, 6); err != nil { @@ -259,7 +260,7 @@ func Version7Upgrade(repoPath string) (err error) { return repo.WriteVersion(repoPath, 7) } -//Version8Upgrade +// Version8Upgrade func Version8Upgrade(repoPath string) (err error) { var fsrRepo repo.Repo if fsrRepo, err = repo.OpenFSRepo(repoPath, 7); err != nil { @@ -281,10 +282,10 @@ func Version8Upgrade(repoPath string) (err error) { cfg.NetworkParams.ForkUpgradeParam.UpgradeSkyrHeight = -19 case types.NetworkInterop: cfg.NetworkParams.GenesisNetworkVersion = network.Version15 - cfg.NetworkParams.ForkUpgradeParam.UpgradeSkyrHeight = 100 + cfg.NetworkParams.ForkUpgradeParam.UpgradeSkyrHeight = -19 case types.NetworkButterfly: cfg.NetworkParams.GenesisNetworkVersion = network.Version15 - cfg.NetworkParams.ForkUpgradeParam.UpgradeSkyrHeight = 50 + cfg.NetworkParams.ForkUpgradeParam.UpgradeSkyrHeight = -19 default: return fsrRepo.Close() } @@ -299,3 +300,44 @@ func Version8Upgrade(repoPath string) (err error) { return repo.WriteVersion(repoPath, 8) } + +// Version9Upgrade +func Version9Upgrade(repoPath string) (err error) { + var fsrRepo repo.Repo + if fsrRepo, err = repo.OpenFSRepo(repoPath, 8); err != nil { + return + } + cfg := fsrRepo.Config() + switch cfg.NetworkParams.NetworkType { + case types.NetworkMainnet: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeV17Height = 99999999999999 + case types.Network2k: + cfg.NetworkParams.GenesisNetworkVersion = network.Version16 + cfg.NetworkParams.ForkUpgradeParam.UpgradeV17Height = 99999999999999 + case types.NetworkCalibnet: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeV17Height = 99999999999999 + case types.NetworkForce: + cfg.NetworkParams.GenesisNetworkVersion = network.Version16 + cfg.NetworkParams.ForkUpgradeParam.UpgradeV17Height = 99999999999999 + case types.NetworkInterop: + cfg.NetworkParams.GenesisNetworkVersion = network.Version16 + cfg.NetworkParams.ForkUpgradeParam.UpgradeV17Height = 99999999999999 + case types.NetworkButterfly: + cfg.NetworkParams.GenesisNetworkVersion = network.Version16 + cfg.NetworkParams.ForkUpgradeParam.UpgradeV17Height = 99999999999999 + default: + return fsrRepo.Close() + } + + if err = fsrRepo.ReplaceConfig(cfg); err != nil { + return + } + + if err = fsrRepo.Close(); err != nil { + return + } + + return repo.WriteVersion(repoPath, 9) +} diff --git a/pkg/migration/migrate_test.go b/pkg/migration/migrate_test.go index 1dd430c8e0..c9192ad7d5 100644 --- a/pkg/migration/migrate_test.go +++ b/pkg/migration/migrate_test.go @@ -22,6 +22,7 @@ func TestMigration(t *testing.T) { types.NetworkButterfly: &networks.ButterflySnapNet().Network, types.NetworkCalibnet: &networks.Calibration().Network, types.NetworkMainnet: &networks.Mainnet().Network, + types.Integrationnet: &networks.IntegrationNet().Network, } for nt, paramsCfg := range cfgs { diff --git a/pkg/repo/fsrepo.go b/pkg/repo/fsrepo.go index 59a030477d..6cc54def94 100644 --- a/pkg/repo/fsrepo.go +++ b/pkg/repo/fsrepo.go @@ -26,7 +26,7 @@ import ( ) // Version is the version of repo schema that this code understands. -const LatestVersion uint = 8 +const LatestVersion uint = 9 const ( // apiFile is the filename containing the filecoin node's api address. @@ -247,9 +247,6 @@ func (r *FSRepo) loadFromDisk() error { return errors.Wrap(err, "failed to open paych datastore") } - /*if err := r.openMarketDataStore(); err != nil { - return errors.Wrap(err, "failed to open market datastore") - }*/ return nil } @@ -474,14 +471,6 @@ func (r *FSRepo) openPaychDataStore() error { return nil } -/*func (r *FSRepo) openMarketDataStore() error { - var err error - r.marketDs, err = badgerds.NewDatastore(filepath.Join(r.path, marketDatastoreProfix), badgerOptions()) - if err != nil { - return err - } - return nil -}*/ func (r *FSRepo) openWalletDatastore() error { // TODO: read wallet datastore info from config, use that to open it up ds, err := badgerds.NewDatastore(filepath.Join(r.path, walletDatastorePrefix), badgerOptions()) From bfbc6d46be1a521626d22667e4f78337711105bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E9=A1=B5=E7=B4=A0=E4=B9=A6?= <2931107265@qq.com> Date: Thu, 29 Sep 2022 09:20:03 +0800 Subject: [PATCH 4/4] chore: use fmt.Errorf replace to xerrors.Errorf --- venus-devtool/compatible/actors/main.go | 1 + venus-devtool/compatible/actors/templates.go | 2 ++ venus-shared/actors/builtin/account/actor.go | 9 +++++---- .../actors/builtin/account/actor.go.template | 8 ++++---- venus-shared/actors/builtin/cron/actor.go | 9 +++++---- .../actors/builtin/cron/actor.go.template | 8 ++++---- venus-shared/actors/builtin/init/actor.go | 9 +++++---- .../actors/builtin/init/actor.go.template | 8 ++++---- .../actors/builtin/init/state.sep.go.template | 6 +++--- venus-shared/actors/builtin/init/state.v0.go | 7 ++++--- venus-shared/actors/builtin/init/state.v2.go | 7 ++++--- venus-shared/actors/builtin/init/state.v3.go | 7 ++++--- venus-shared/actors/builtin/init/state.v4.go | 7 ++++--- venus-shared/actors/builtin/init/state.v5.go | 7 ++++--- venus-shared/actors/builtin/init/state.v6.go | 7 ++++--- venus-shared/actors/builtin/init/state.v7.go | 7 ++++--- venus-shared/actors/builtin/init/state.v8.go | 7 ++++--- venus-shared/actors/builtin/init/state.v9.go | 7 ++++--- venus-shared/actors/builtin/market/actor.go | 11 +++++----- .../actors/builtin/market/actor.go.template | 10 +++++----- .../builtin/market/state.sep.go.template | 14 ++++++------- .../actors/builtin/market/state.v0.go | 11 +++++----- .../actors/builtin/market/state.v2.go | 11 +++++----- .../actors/builtin/market/state.v3.go | 11 +++++----- .../actors/builtin/market/state.v4.go | 11 +++++----- .../actors/builtin/market/state.v5.go | 11 +++++----- .../actors/builtin/market/state.v6.go | 11 +++++----- .../actors/builtin/market/state.v7.go | 11 +++++----- .../actors/builtin/market/state.v8.go | 15 +++++++------- .../actors/builtin/market/state.v9.go | 15 +++++++------- venus-shared/actors/builtin/miner/actor.go | 15 +++++++------- .../actors/builtin/miner/actor.go.template | 14 ++++++------- .../builtin/miner/state.sep.go.template | 6 +++--- venus-shared/actors/builtin/miner/state.v0.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v2.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v3.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v4.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v5.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v6.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v7.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v8.go | 7 ++++--- venus-shared/actors/builtin/miner/state.v9.go | 7 ++++--- venus-shared/actors/builtin/multisig/actor.go | 13 ++++++------ .../actors/builtin/multisig/actor.go.template | 13 ++++++------ .../builtin/multisig/message.sep.go.template | 20 +++++++++---------- .../actors/builtin/multisig/message.v0.go | 18 ++++++++--------- .../actors/builtin/multisig/message.v2.go | 6 +++--- .../actors/builtin/multisig/message.v3.go | 6 +++--- .../actors/builtin/multisig/message.v4.go | 6 +++--- .../actors/builtin/multisig/message.v5.go | 6 +++--- .../actors/builtin/multisig/message.v6.go | 6 +++--- .../actors/builtin/multisig/message.v7.go | 6 +++--- .../actors/builtin/multisig/message.v8.go | 8 ++++---- .../actors/builtin/multisig/message.v9.go | 8 ++++---- .../builtin/multisig/state.sep.go.template | 4 ++-- .../actors/builtin/multisig/state.v0.go | 5 +++-- .../actors/builtin/multisig/state.v2.go | 5 +++-- .../actors/builtin/multisig/state.v3.go | 5 +++-- .../actors/builtin/multisig/state.v4.go | 5 +++-- .../actors/builtin/multisig/state.v5.go | 5 +++-- .../actors/builtin/multisig/state.v6.go | 5 +++-- .../actors/builtin/multisig/state.v7.go | 5 +++-- .../actors/builtin/multisig/state.v8.go | 5 +++-- .../actors/builtin/multisig/state.v9.go | 5 +++-- venus-shared/actors/builtin/paych/actor.go | 6 ++---- .../actors/builtin/paych/actor.go.template | 5 ++--- .../builtin/paych/message.sep.go.template | 4 ++-- .../actors/builtin/paych/message.v8.go | 4 ++-- .../actors/builtin/paych/message.v9.go | 4 ++-- venus-shared/actors/builtin/power/actor.go | 9 +++++---- .../actors/builtin/power/actor.go.template | 8 ++++---- venus-shared/actors/builtin/reward/actor.go | 9 +++++---- .../actors/builtin/reward/actor.go.template | 8 ++++---- venus-shared/actors/builtin/system/actor.go | 8 ++++---- .../actors/builtin/system/actor.go.template | 8 ++++---- .../builtin/system/state.sep.go.template | 2 +- .../actors/builtin/system/state.v0.go | 2 +- .../actors/builtin/system/state.v2.go | 2 +- .../actors/builtin/system/state.v3.go | 2 +- .../actors/builtin/system/state.v4.go | 2 +- .../actors/builtin/system/state.v5.go | 2 +- .../actors/builtin/system/state.v6.go | 2 +- .../actors/builtin/system/state.v7.go | 2 +- venus-shared/actors/builtin/verifreg/actor.go | 9 +++++---- .../actors/builtin/verifreg/actor.go.template | 8 ++++---- venus-shared/actors/policy/policy.go | 15 +++++++------- venus-shared/actors/policy/policy.go.template | 14 ++++++------- 87 files changed, 353 insertions(+), 310 deletions(-) diff --git a/venus-devtool/compatible/actors/main.go b/venus-devtool/compatible/actors/main.go index 186889ecf2..2eaebce539 100644 --- a/venus-devtool/compatible/actors/main.go +++ b/venus-devtool/compatible/actors/main.go @@ -208,6 +208,7 @@ var replicaCmd = &cli.Command{ {"\"github.com/filecoin-project/lotus/node/modules/dtypes\"", ""}, {"\"github.com/filecoin-project/lotus/chain/types\"", "types \"github.com/filecoin-project/venus/venus-shared/internal\""}, {"\"github.com/filecoin-project/lotus/blockstore\"", "blockstore \"github.com/filecoin-project/venus/pkg/util/blockstoreutil\""}, + {"golang.org/x/xerrors", "fmt"}, } for _, file := range files { diff --git a/venus-devtool/compatible/actors/templates.go b/venus-devtool/compatible/actors/templates.go index b4276904db..104a415be5 100644 --- a/venus-devtool/compatible/actors/templates.go +++ b/venus-devtool/compatible/actors/templates.go @@ -43,6 +43,8 @@ var replacers = [][2]string{ "dtypes.NetworkName", "string", }, + {"\"golang.org/x/xerrors\"", "\"fmt\""}, + {"xerrors.Errorf", "fmt.Errorf"}, } func findActorsPkgDir() (string, error) { diff --git a/venus-shared/actors/builtin/account/actor.go b/venus-shared/actors/builtin/account/actor.go index e723bf1487..b6ec5b9619 100644 --- a/venus-shared/actors/builtin/account/actor.go +++ b/venus-shared/actors/builtin/account/actor.go @@ -3,9 +3,10 @@ package account import ( + "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/cbor" @@ -35,7 +36,7 @@ var Methods = builtin9.MethodsAccount func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.AccountKey { - return nil, xerrors.Errorf("actor code is not account: %s", name) + return nil, fmt.Errorf("actor code is not account: %s", name) } switch av { @@ -74,7 +75,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (State, error) { @@ -108,7 +109,7 @@ func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (S return make9(store, addr) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/account/actor.go.template b/venus-shared/actors/builtin/account/actor.go.template index a5be26200e..04cbe1e4ce 100644 --- a/venus-shared/actors/builtin/account/actor.go.template +++ b/venus-shared/actors/builtin/account/actor.go.template @@ -5,7 +5,7 @@ package account import ( actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/cbor" @@ -26,7 +26,7 @@ var Methods = builtin{{.latestVersion}}.MethodsAccount func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.AccountKey { - return nil, xerrors.Errorf("actor code is not account: %s", name) + return nil, fmt.Errorf("actor code is not account: %s", name) } switch av { @@ -48,7 +48,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (State, error) { @@ -58,7 +58,7 @@ func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (S return make{{.}}(store, addr) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/cron/actor.go b/venus-shared/actors/builtin/cron/actor.go index ea8b26f49d..a12ac348f0 100644 --- a/venus-shared/actors/builtin/cron/actor.go +++ b/venus-shared/actors/builtin/cron/actor.go @@ -3,11 +3,12 @@ package cron import ( + "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" - "golang.org/x/xerrors" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -29,7 +30,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.CronKey { - return nil, xerrors.Errorf("actor code is not cron: %s", name) + return nil, fmt.Errorf("actor code is not cron: %s", name) } switch av { @@ -68,7 +69,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version) (State, error) { @@ -102,7 +103,7 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { return make9(store) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } var ( diff --git a/venus-shared/actors/builtin/cron/actor.go.template b/venus-shared/actors/builtin/cron/actor.go.template index 83b01d5886..5a9fcdead6 100644 --- a/venus-shared/actors/builtin/cron/actor.go.template +++ b/venus-shared/actors/builtin/cron/actor.go.template @@ -6,7 +6,7 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" "github.com/filecoin-project/venus/venus-shared/actors/adt" - "golang.org/x/xerrors" + "fmt" types "github.com/filecoin-project/venus/venus-shared/internal" {{range .versions}} @@ -20,7 +20,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.CronKey { - return nil, xerrors.Errorf("actor code is not cron: %s", name) + return nil, fmt.Errorf("actor code is not cron: %s", name) } switch av { @@ -42,7 +42,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version) (State, error) { @@ -52,7 +52,7 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { return make{{.}}(store) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } var ( diff --git a/venus-shared/actors/builtin/init/actor.go b/venus-shared/actors/builtin/init/actor.go index be089ad8f2..7bf73d25e9 100644 --- a/venus-shared/actors/builtin/init/actor.go +++ b/venus-shared/actors/builtin/init/actor.go @@ -3,9 +3,10 @@ package init import ( + "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -40,7 +41,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.InitKey { - return nil, xerrors.Errorf("actor code is not init: %s", name) + return nil, fmt.Errorf("actor code is not init: %s", name) } switch av { @@ -79,7 +80,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, networkName string) (State, error) { @@ -113,7 +114,7 @@ func MakeState(store adt.Store, av actorstypes.Version, networkName string) (Sta return make9(store, networkName) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/init/actor.go.template b/venus-shared/actors/builtin/init/actor.go.template index 9b8ebf523c..0bbfe0c24d 100644 --- a/venus-shared/actors/builtin/init/actor.go.template +++ b/venus-shared/actors/builtin/init/actor.go.template @@ -5,7 +5,7 @@ package init import ( actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/venus/venus-shared/actors" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -31,7 +31,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.InitKey { - return nil, xerrors.Errorf("actor code is not init: %s", name) + return nil, fmt.Errorf("actor code is not init: %s", name) } switch av { @@ -53,7 +53,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, networkName string) (State, error) { @@ -63,7 +63,7 @@ func MakeState(store adt.Store, av actorstypes.Version, networkName string) (Sta return make{{.}}(store, networkName) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/init/state.sep.go.template b/venus-shared/actors/builtin/init/state.sep.go.template index 5059bd1955..17aa65b9cd 100644 --- a/venus-shared/actors/builtin/init/state.sep.go.template +++ b/venus-shared/actors/builtin/init/state.sep.go.template @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -105,12 +105,12 @@ func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v0.go b/venus-shared/actors/builtin/init/state.v0.go index 185b572199..52fb6f7fa5 100644 --- a/venus-shared/actors/builtin/init/state.v0.go +++ b/venus-shared/actors/builtin/init/state.v0.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,12 +89,12 @@ func (s *state0) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v2.go b/venus-shared/actors/builtin/init/state.v2.go index d2052f395c..61ef5d2f0e 100644 --- a/venus-shared/actors/builtin/init/state.v2.go +++ b/venus-shared/actors/builtin/init/state.v2.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,12 +89,12 @@ func (s *state2) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v3.go b/venus-shared/actors/builtin/init/state.v3.go index 709875249e..4ea03f994a 100644 --- a/venus-shared/actors/builtin/init/state.v3.go +++ b/venus-shared/actors/builtin/init/state.v3.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -90,12 +91,12 @@ func (s *state3) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v4.go b/venus-shared/actors/builtin/init/state.v4.go index fdb333cfdd..95b393e952 100644 --- a/venus-shared/actors/builtin/init/state.v4.go +++ b/venus-shared/actors/builtin/init/state.v4.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -90,12 +91,12 @@ func (s *state4) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v5.go b/venus-shared/actors/builtin/init/state.v5.go index 0251b64c2f..cf85332c27 100644 --- a/venus-shared/actors/builtin/init/state.v5.go +++ b/venus-shared/actors/builtin/init/state.v5.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -90,12 +91,12 @@ func (s *state5) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v6.go b/venus-shared/actors/builtin/init/state.v6.go index 293ef84e39..a1b895011e 100644 --- a/venus-shared/actors/builtin/init/state.v6.go +++ b/venus-shared/actors/builtin/init/state.v6.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -90,12 +91,12 @@ func (s *state6) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v7.go b/venus-shared/actors/builtin/init/state.v7.go index d5d465bffd..b670323197 100644 --- a/venus-shared/actors/builtin/init/state.v7.go +++ b/venus-shared/actors/builtin/init/state.v7.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -90,12 +91,12 @@ func (s *state7) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v8.go b/venus-shared/actors/builtin/init/state.v8.go index 65750fba10..3944f0eee5 100644 --- a/venus-shared/actors/builtin/init/state.v8.go +++ b/venus-shared/actors/builtin/init/state.v8.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,12 +90,12 @@ func (s *state8) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/init/state.v9.go b/venus-shared/actors/builtin/init/state.v9.go index e54759484f..7de9d41845 100644 --- a/venus-shared/actors/builtin/init/state.v9.go +++ b/venus-shared/actors/builtin/init/state.v9.go @@ -3,11 +3,12 @@ package init import ( + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -89,12 +90,12 @@ func (s *state9) Remove(addrs ...address.Address) (err error) { } for _, addr := range addrs { if err = m.Delete(abi.AddrKey(addr)); err != nil { - return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + return fmt.Errorf("failed to delete entry for address: %s; err: %w", addr, err) } } amr, err := m.Root() if err != nil { - return xerrors.Errorf("failed to get address map root: %w", err) + return fmt.Errorf("failed to get address map root: %w", err) } s.State.AddressMap = amr return nil diff --git a/venus-shared/actors/builtin/market/actor.go b/venus-shared/actors/builtin/market/actor.go index 7ee02bf919..2dcf1e1d85 100644 --- a/venus-shared/actors/builtin/market/actor.go +++ b/venus-shared/actors/builtin/market/actor.go @@ -7,8 +7,9 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" + "fmt" + "github.com/filecoin-project/go-state-types/network" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -47,7 +48,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MarketKey { - return nil, xerrors.Errorf("actor code is not market: %s", name) + return nil, fmt.Errorf("actor code is not market: %s", name) } switch av { @@ -86,7 +87,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version) (State, error) { @@ -120,7 +121,7 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { return make9(store) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { @@ -203,7 +204,7 @@ func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStora return decodePublishStorageDealsReturn9(b) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type DealProposal = markettypes.DealProposal diff --git a/venus-shared/actors/builtin/market/actor.go.template b/venus-shared/actors/builtin/market/actor.go.template index 6f76f58957..aec631c364 100644 --- a/venus-shared/actors/builtin/market/actor.go.template +++ b/venus-shared/actors/builtin/market/actor.go.template @@ -7,7 +7,7 @@ import ( "unicode/utf8" "github.com/filecoin-project/go-state-types/network" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -37,7 +37,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MarketKey { - return nil, xerrors.Errorf("actor code is not market: %s", name) + return nil, fmt.Errorf("actor code is not market: %s", name) } switch av { @@ -59,7 +59,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version) (State, error) { @@ -69,7 +69,7 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { return make{{.}}(store) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { @@ -129,7 +129,7 @@ func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStora return decodePublishStorageDealsReturn{{.}}(b) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type DealProposal = markettypes.DealProposal diff --git a/venus-shared/actors/builtin/market/state.sep.go.template b/venus-shared/actors/builtin/market/state.sep.go.template index 62d260bfe3..d2492352e8 100644 --- a/venus-shared/actors/builtin/market/state.sep.go.template +++ b/venus-shared/actors/builtin/market/state.sep.go.template @@ -9,7 +9,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" + "fmt" {{if (ge .v 6)}} rlepluslazy "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-bitfield" @@ -222,7 +222,7 @@ func (s *dealProposals{{.v}}) Get(dealID abi.DealID) (*DealProposal, bool, error proposal, err := fromV{{.v}}DealProposal(proposal{{.v}}) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -233,7 +233,7 @@ func (s *dealProposals{{.v}}) ForEach(cb func(dealID abi.DealID, dp DealProposal return s.Array.ForEach(&dp{{.v}}, func(idx int64) error { dp, err := fromV{{.v}}DealProposal(dp{{.v}}) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -265,7 +265,7 @@ func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) (DealProposal, e label, err := fromV{{.v}}Label(v{{.v}}.Label) {{end}} if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -291,14 +291,14 @@ func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) (DealProposal, e if v{{.v}}.IsString() { str, err := v{{.v}}.ToString() if err != nil { - return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + return markettypes.EmptyDealLabel, fmt.Errorf("failed to convert string label to string: %w", err) } return markettypes.NewLabelFromString(str) } bs, err := v{{.v}}.ToBytes() if err != nil { - return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + return markettypes.EmptyDealLabel, fmt.Errorf("failed to convert bytes label to bytes: %w", err) } return markettypes.NewLabelFromBytes(bs) } @@ -315,7 +315,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn{{.v}})(nil) func decodePublishStorageDealsReturn{{.v}}(b []byte) (PublishStorageDealsReturn, error) { var retval market{{.v}}.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn{{.v}}{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v0.go b/venus-shared/actors/builtin/market/state.v0.go index 390975379e..b3ddbbe4d2 100644 --- a/venus-shared/actors/builtin/market/state.v0.go +++ b/venus-shared/actors/builtin/market/state.v0.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -204,7 +205,7 @@ func (s *dealProposals0) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV0DealProposal(proposal0) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -215,7 +216,7 @@ func (s *dealProposals0) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp0, func(idx int64) error { dp, err := fromV0DealProposal(dp0) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -245,7 +246,7 @@ func fromV0DealProposal(v0 market0.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v0.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -275,7 +276,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn0)(nil) func decodePublishStorageDealsReturn0(b []byte) (PublishStorageDealsReturn, error) { var retval market0.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn0{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v2.go b/venus-shared/actors/builtin/market/state.v2.go index 6c1e14dfa0..06630ba249 100644 --- a/venus-shared/actors/builtin/market/state.v2.go +++ b/venus-shared/actors/builtin/market/state.v2.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -204,7 +205,7 @@ func (s *dealProposals2) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV2DealProposal(proposal2) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -215,7 +216,7 @@ func (s *dealProposals2) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp2, func(idx int64) error { dp, err := fromV2DealProposal(dp2) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -245,7 +246,7 @@ func fromV2DealProposal(v2 market2.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v2.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -275,7 +276,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn2)(nil) func decodePublishStorageDealsReturn2(b []byte) (PublishStorageDealsReturn, error) { var retval market2.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn2{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v3.go b/venus-shared/actors/builtin/market/state.v3.go index 130d4675d4..b46f3069d7 100644 --- a/venus-shared/actors/builtin/market/state.v3.go +++ b/venus-shared/actors/builtin/market/state.v3.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -199,7 +200,7 @@ func (s *dealProposals3) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV3DealProposal(proposal3) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -210,7 +211,7 @@ func (s *dealProposals3) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp3, func(idx int64) error { dp, err := fromV3DealProposal(dp3) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -240,7 +241,7 @@ func fromV3DealProposal(v3 market3.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v3.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -270,7 +271,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn3)(nil) func decodePublishStorageDealsReturn3(b []byte) (PublishStorageDealsReturn, error) { var retval market3.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn3{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v4.go b/venus-shared/actors/builtin/market/state.v4.go index 8cda0b006e..88225a6d84 100644 --- a/venus-shared/actors/builtin/market/state.v4.go +++ b/venus-shared/actors/builtin/market/state.v4.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -199,7 +200,7 @@ func (s *dealProposals4) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV4DealProposal(proposal4) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -210,7 +211,7 @@ func (s *dealProposals4) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp4, func(idx int64) error { dp, err := fromV4DealProposal(dp4) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -240,7 +241,7 @@ func fromV4DealProposal(v4 market4.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v4.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -270,7 +271,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn4)(nil) func decodePublishStorageDealsReturn4(b []byte) (PublishStorageDealsReturn, error) { var retval market4.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn4{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v5.go b/venus-shared/actors/builtin/market/state.v5.go index cfdb18ee8d..0c20925266 100644 --- a/venus-shared/actors/builtin/market/state.v5.go +++ b/venus-shared/actors/builtin/market/state.v5.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" types "github.com/filecoin-project/venus/venus-shared/internal" @@ -199,7 +200,7 @@ func (s *dealProposals5) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV5DealProposal(proposal5) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -210,7 +211,7 @@ func (s *dealProposals5) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp5, func(idx int64) error { dp, err := fromV5DealProposal(dp5) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -240,7 +241,7 @@ func fromV5DealProposal(v5 market5.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v5.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -270,7 +271,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn5)(nil) func decodePublishStorageDealsReturn5(b []byte) (PublishStorageDealsReturn, error) { var retval market5.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn5{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v6.go b/venus-shared/actors/builtin/market/state.v6.go index 5742f6da0b..cd85d9e1fd 100644 --- a/venus-shared/actors/builtin/market/state.v6.go +++ b/venus-shared/actors/builtin/market/state.v6.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -202,7 +203,7 @@ func (s *dealProposals6) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV6DealProposal(proposal6) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -213,7 +214,7 @@ func (s *dealProposals6) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp6, func(idx int64) error { dp, err := fromV6DealProposal(dp6) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -243,7 +244,7 @@ func fromV6DealProposal(v6 market6.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v6.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -273,7 +274,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn6)(nil) func decodePublishStorageDealsReturn6(b []byte) (PublishStorageDealsReturn, error) { var retval market6.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn6{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v7.go b/venus-shared/actors/builtin/market/state.v7.go index 5289c5618b..4c3e23860d 100644 --- a/venus-shared/actors/builtin/market/state.v7.go +++ b/venus-shared/actors/builtin/market/state.v7.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -202,7 +203,7 @@ func (s *dealProposals7) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV7DealProposal(proposal7) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -213,7 +214,7 @@ func (s *dealProposals7) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp7, func(idx int64) error { dp, err := fromV7DealProposal(dp7) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -243,7 +244,7 @@ func fromV7DealProposal(v7 market7.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v7.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -273,7 +274,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn7)(nil) func decodePublishStorageDealsReturn7(b []byte) (PublishStorageDealsReturn, error) { var retval market7.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn7{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v8.go b/venus-shared/actors/builtin/market/state.v8.go index 0514a7fe4f..8995bdc36f 100644 --- a/venus-shared/actors/builtin/market/state.v8.go +++ b/venus-shared/actors/builtin/market/state.v8.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -203,7 +204,7 @@ func (s *dealProposals8) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV8DealProposal(proposal8) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -214,7 +215,7 @@ func (s *dealProposals8) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp8, func(idx int64) error { dp, err := fromV8DealProposal(dp8) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -244,7 +245,7 @@ func fromV8DealProposal(v8 market8.DealProposal) (DealProposal, error) { label, err := fromV8Label(v8.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -269,14 +270,14 @@ func fromV8Label(v8 market8.DealLabel) (DealLabel, error) { if v8.IsString() { str, err := v8.ToString() if err != nil { - return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + return markettypes.EmptyDealLabel, fmt.Errorf("failed to convert string label to string: %w", err) } return markettypes.NewLabelFromString(str) } bs, err := v8.ToBytes() if err != nil { - return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + return markettypes.EmptyDealLabel, fmt.Errorf("failed to convert bytes label to bytes: %w", err) } return markettypes.NewLabelFromBytes(bs) } @@ -290,7 +291,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn8)(nil) func decodePublishStorageDealsReturn8(b []byte) (PublishStorageDealsReturn, error) { var retval market8.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn8{retval}, nil diff --git a/venus-shared/actors/builtin/market/state.v9.go b/venus-shared/actors/builtin/market/state.v9.go index 42288b731e..bc66a7f2e5 100644 --- a/venus-shared/actors/builtin/market/state.v9.go +++ b/venus-shared/actors/builtin/market/state.v9.go @@ -5,11 +5,12 @@ package market import ( "bytes" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" rlepluslazy "github.com/filecoin-project/go-bitfield/rle" @@ -203,7 +204,7 @@ func (s *dealProposals9) Get(dealID abi.DealID) (*DealProposal, bool, error) { proposal, err := fromV9DealProposal(proposal9) if err != nil { - return nil, true, xerrors.Errorf("decoding proposal: %w", err) + return nil, true, fmt.Errorf("decoding proposal: %w", err) } return &proposal, true, nil @@ -214,7 +215,7 @@ func (s *dealProposals9) ForEach(cb func(dealID abi.DealID, dp DealProposal) err return s.Array.ForEach(&dp9, func(idx int64) error { dp, err := fromV9DealProposal(dp9) if err != nil { - return xerrors.Errorf("decoding proposal: %w", err) + return fmt.Errorf("decoding proposal: %w", err) } return cb(abi.DealID(idx), dp) @@ -244,7 +245,7 @@ func fromV9DealProposal(v9 market9.DealProposal) (DealProposal, error) { label, err := fromV9Label(v9.Label) if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + return DealProposal{}, fmt.Errorf("error setting deal label: %w", err) } return DealProposal{ @@ -269,14 +270,14 @@ func fromV9Label(v9 market9.DealLabel) (DealLabel, error) { if v9.IsString() { str, err := v9.ToString() if err != nil { - return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + return markettypes.EmptyDealLabel, fmt.Errorf("failed to convert string label to string: %w", err) } return markettypes.NewLabelFromString(str) } bs, err := v9.ToBytes() if err != nil { - return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + return markettypes.EmptyDealLabel, fmt.Errorf("failed to convert bytes label to bytes: %w", err) } return markettypes.NewLabelFromBytes(bs) } @@ -290,7 +291,7 @@ var _ PublishStorageDealsReturn = (*publishStorageDealsReturn9)(nil) func decodePublishStorageDealsReturn9(b []byte) (PublishStorageDealsReturn, error) { var retval market9.PublishStorageDealsReturn if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { - return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + return nil, fmt.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) } return &publishStorageDealsReturn9{retval}, nil diff --git a/venus-shared/actors/builtin/miner/actor.go b/venus-shared/actors/builtin/miner/actor.go index d86c48794b..bb7e4d2300 100644 --- a/venus-shared/actors/builtin/miner/actor.go +++ b/venus-shared/actors/builtin/miner/actor.go @@ -3,12 +3,13 @@ package miner import ( + "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" @@ -38,7 +39,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MinerKey { - return nil, xerrors.Errorf("actor code is not miner: %s", name) + return nil, fmt.Errorf("actor code is not miner: %s", name) } switch av { @@ -77,7 +78,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actors.Version) (State, error) { @@ -111,7 +112,7 @@ func MakeState(store adt.Store, av actors.Version) (State, error) { return make9(store) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { @@ -214,7 +215,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1, nil default: - return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + return -1, fmt.Errorf("unrecognized window post type: %d", proof) } } @@ -230,7 +231,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil default: - return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + return -1, fmt.Errorf("unrecognized window post type: %d", proof) } } @@ -247,7 +248,7 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil default: - return -1, xerrors.Errorf("unknown proof type %d", proof) + return -1, fmt.Errorf("unknown proof type %d", proof) } } diff --git a/venus-shared/actors/builtin/miner/actor.go.template b/venus-shared/actors/builtin/miner/actor.go.template index 65a2b2bae6..0d84d17fb3 100644 --- a/venus-shared/actors/builtin/miner/actor.go.template +++ b/venus-shared/actors/builtin/miner/actor.go.template @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" @@ -30,7 +30,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MinerKey { - return nil, xerrors.Errorf("actor code is not miner: %s", name) + return nil, fmt.Errorf("actor code is not miner: %s", name) } switch av { @@ -52,7 +52,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actors.Version) (State, error) { @@ -62,7 +62,7 @@ func MakeState(store adt.Store, av actors.Version) (State, error) { return make{{.}}(store) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { @@ -165,7 +165,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1, nil default: - return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + return -1, fmt.Errorf("unrecognized window post type: %d", proof) } } @@ -181,7 +181,7 @@ func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.Re case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil default: - return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + return -1, fmt.Errorf("unrecognized window post type: %d", proof) } } @@ -198,7 +198,7 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil default: - return -1, xerrors.Errorf("unknown proof type %d", proof) + return -1, fmt.Errorf("unknown proof type %d", proof) } } diff --git a/venus-shared/actors/builtin/miner/state.sep.go.template b/venus-shared/actors/builtin/miner/state.sep.go.template index ea0281bcaa..f43d4098b6 100644 --- a/venus-shared/actors/builtin/miner/state.sep.go.template +++ b/venus-shared/actors/builtin/miner/state.sep.go.template @@ -14,7 +14,7 @@ import ( "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/venus/venus-shared/actors/adt" minertypes "github.com/filecoin-project/go-state-types/builtin/v{{.latestVersion}}/miner" @@ -67,7 +67,7 @@ type partition{{.v}} struct { func (s *state{{.v}}) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -212,7 +212,7 @@ func (s *state{{.v}}) GetSectorExpiration(num abi.SectorNumber) (*SectorExpirati return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v0.go b/venus-shared/actors/builtin/miner/state.v0.go index d98620f1b8..c2a380bcd9 100644 --- a/venus-shared/actors/builtin/miner/state.v0.go +++ b/venus-shared/actors/builtin/miner/state.v0.go @@ -8,13 +8,14 @@ import ( "github.com/filecoin-project/go-state-types/big" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -58,7 +59,7 @@ type partition0 struct { func (s *state0) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -193,7 +194,7 @@ func (s *state0) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v2.go b/venus-shared/actors/builtin/miner/state.v2.go index ff14a3f7da..124817ce99 100644 --- a/venus-shared/actors/builtin/miner/state.v2.go +++ b/venus-shared/actors/builtin/miner/state.v2.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -56,7 +57,7 @@ type partition2 struct { func (s *state2) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -191,7 +192,7 @@ func (s *state2) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v3.go b/venus-shared/actors/builtin/miner/state.v3.go index 127fc8a618..9728adaede 100644 --- a/venus-shared/actors/builtin/miner/state.v3.go +++ b/venus-shared/actors/builtin/miner/state.v3.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -58,7 +59,7 @@ type partition3 struct { func (s *state3) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -193,7 +194,7 @@ func (s *state3) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v4.go b/venus-shared/actors/builtin/miner/state.v4.go index 354f4bf136..d83ebc194b 100644 --- a/venus-shared/actors/builtin/miner/state.v4.go +++ b/venus-shared/actors/builtin/miner/state.v4.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -58,7 +59,7 @@ type partition4 struct { func (s *state4) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -193,7 +194,7 @@ func (s *state4) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v5.go b/venus-shared/actors/builtin/miner/state.v5.go index 7c286ab327..0dd3f59df5 100644 --- a/venus-shared/actors/builtin/miner/state.v5.go +++ b/venus-shared/actors/builtin/miner/state.v5.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -58,7 +59,7 @@ type partition5 struct { func (s *state5) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -193,7 +194,7 @@ func (s *state5) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v6.go b/venus-shared/actors/builtin/miner/state.v6.go index 19e0a492d0..bae344a9bb 100644 --- a/venus-shared/actors/builtin/miner/state.v6.go +++ b/venus-shared/actors/builtin/miner/state.v6.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -58,7 +59,7 @@ type partition6 struct { func (s *state6) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -193,7 +194,7 @@ func (s *state6) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v7.go b/venus-shared/actors/builtin/miner/state.v7.go index d258e2f6f8..117145f5a3 100644 --- a/venus-shared/actors/builtin/miner/state.v7.go +++ b/venus-shared/actors/builtin/miner/state.v7.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -58,7 +59,7 @@ type partition7 struct { func (s *state7) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -192,7 +193,7 @@ func (s *state7) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v8.go b/venus-shared/actors/builtin/miner/state.v8.go index ca0adfb058..8dfebb363d 100644 --- a/venus-shared/actors/builtin/miner/state.v8.go +++ b/venus-shared/actors/builtin/miner/state.v8.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -57,7 +58,7 @@ type partition8 struct { func (s *state8) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -191,7 +192,7 @@ func (s *state8) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/miner/state.v9.go b/venus-shared/actors/builtin/miner/state.v9.go index 7c7cec02bf..251a4e0fcb 100644 --- a/venus-shared/actors/builtin/miner/state.v9.go +++ b/venus-shared/actors/builtin/miner/state.v9.go @@ -6,13 +6,14 @@ import ( "bytes" "errors" + "fmt" + "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/dline" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -57,7 +58,7 @@ type partition9 struct { func (s *state9) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("failed to get available balance: %w", r) + err = fmt.Errorf("failed to get available balance: %w", r) available = abi.NewTokenAmount(0) } }() @@ -191,7 +192,7 @@ func (s *state9) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, e return nil, err } if out.Early == 0 && out.OnTime == 0 { - return nil, xerrors.Errorf("failed to find sector %d", num) + return nil, fmt.Errorf("failed to find sector %d", num) } return &out, nil } diff --git a/venus-shared/actors/builtin/multisig/actor.go b/venus-shared/actors/builtin/multisig/actor.go index 0c2bad8904..fe779be592 100644 --- a/venus-shared/actors/builtin/multisig/actor.go +++ b/venus-shared/actors/builtin/multisig/actor.go @@ -9,7 +9,6 @@ import ( "github.com/minio/blake2b-simd" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -41,7 +40,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MultisigKey { - return nil, xerrors.Errorf("actor code is not multisig: %s", name) + return nil, fmt.Errorf("actor code is not multisig: %s", name) } switch av { @@ -80,7 +79,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { @@ -114,7 +113,7 @@ func MakeState(store adt.Store, av actorstypes.Version, signers []address.Addres return make9(store, signers, threshold, startEpoch, unlockDuration, initialBalance) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { @@ -200,13 +199,13 @@ func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { params := msig9.TxnIDParams{ID: msig9.TxnID(id)} if data != nil { if data.Requester.Protocol() != address.ID { - return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) + return nil, fmt.Errorf("proposer address must be an ID address, was %s", data.Requester) } if data.Value.Sign() == -1 { - return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) + return nil, fmt.Errorf("proposal value must be non-negative, was %s", data.Value) } if data.To == address.Undef { - return nil, xerrors.Errorf("proposed destination address must be set") + return nil, fmt.Errorf("proposed destination address must be set") } pser, err := data.Serialize() if err != nil { diff --git a/venus-shared/actors/builtin/multisig/actor.go.template b/venus-shared/actors/builtin/multisig/actor.go.template index 06971f2832..a73b4e55c9 100644 --- a/venus-shared/actors/builtin/multisig/actor.go.template +++ b/venus-shared/actors/builtin/multisig/actor.go.template @@ -8,7 +8,6 @@ import ( "github.com/minio/blake2b-simd" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -31,7 +30,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.MultisigKey { - return nil, xerrors.Errorf("actor code is not multisig: %s", name) + return nil, fmt.Errorf("actor code is not multisig: %s", name) } switch av { @@ -53,7 +52,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { @@ -63,7 +62,7 @@ func MakeState(store adt.Store, av actorstypes.Version, signers []address.Addres return make{{.}}(store, signers, threshold, startEpoch, unlockDuration, initialBalance) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { @@ -125,13 +124,13 @@ func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { params := msig{{.latestVersion}}.TxnIDParams{ID: msig{{.latestVersion}}.TxnID(id)} if data != nil { if data.Requester.Protocol() != address.ID { - return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) + return nil, fmt.Errorf("proposer address must be an ID address, was %s", data.Requester) } if data.Value.Sign() == -1 { - return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) + return nil, fmt.Errorf("proposal value must be non-negative, was %s", data.Value) } if data.To == address.Undef { - return nil, xerrors.Errorf("proposed destination address must be set") + return nil, fmt.Errorf("proposed destination address must be set") } pser, err := data.Serialize() if err != nil { diff --git a/venus-shared/actors/builtin/multisig/message.sep.go.template b/venus-shared/actors/builtin/multisig/message.sep.go.template index 21ea637130..c709234b01 100644 --- a/venus-shared/actors/builtin/multisig/message.sep.go.template +++ b/venus-shared/actors/builtin/multisig/message.sep.go.template @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -35,7 +35,7 @@ func (m message{{.v}}) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -43,11 +43,11 @@ func (m message{{.v}}) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } {{if (le .v 1)}} if unlockStart != 0 { - return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") + return nil, fmt.Errorf("actors v0 does not support a non-zero vesting start time") } {{end}} // Set up constructor parameters for multisig @@ -72,7 +72,7 @@ func (m message{{.v}}) Create( {{else}} code, ok := actors.GetActorCodeID(actorstypes.Version{{.v}}, actors.MultisigKey) if !ok { - return nil, xerrors.Errorf("failed to get multisig code ID") + return nil, fmt.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params @@ -102,19 +102,19 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, method abi.MethodNum, params []byte) (*types.Message, error) { if msig == address.Undef { - return nil, xerrors.Errorf("must provide a multisig address for proposal") + return nil, fmt.Errorf("must provide a multisig address for proposal") } if to == address.Undef { - return nil, xerrors.Errorf("must provide a target address for proposal") + return nil, fmt.Errorf("must provide a target address for proposal") } if amt.Sign() == -1 { - return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") + return nil, fmt.Errorf("must provide a non-negative amount for proposed send") } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ @@ -124,7 +124,7 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, Params: params, }) if actErr != nil { - return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) + return nil, fmt.Errorf("failed to serialize parameters: %w", actErr) } return &types.Message{ diff --git a/venus-shared/actors/builtin/multisig/message.v0.go b/venus-shared/actors/builtin/multisig/message.v0.go index bc35eca238..bff3932c93 100644 --- a/venus-shared/actors/builtin/multisig/message.v0.go +++ b/venus-shared/actors/builtin/multisig/message.v0.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message0) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,11 +37,11 @@ func (m message0) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } if unlockStart != 0 { - return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") + return nil, fmt.Errorf("actors v0 does not support a non-zero vesting start time") } // Set up constructor parameters for multisig @@ -80,19 +80,19 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, method abi.MethodNum, params []byte) (*types.Message, error) { if msig == address.Undef { - return nil, xerrors.Errorf("must provide a multisig address for proposal") + return nil, fmt.Errorf("must provide a multisig address for proposal") } if to == address.Undef { - return nil, xerrors.Errorf("must provide a target address for proposal") + return nil, fmt.Errorf("must provide a target address for proposal") } if amt.Sign() == -1 { - return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") + return nil, fmt.Errorf("must provide a non-negative amount for proposed send") } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ @@ -102,7 +102,7 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, Params: params, }) if actErr != nil { - return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) + return nil, fmt.Errorf("failed to serialize parameters: %w", actErr) } return &types.Message{ diff --git a/venus-shared/actors/builtin/multisig/message.v2.go b/venus-shared/actors/builtin/multisig/message.v2.go index ea02287c05..0bbec6fc15 100644 --- a/venus-shared/actors/builtin/multisig/message.v2.go +++ b/venus-shared/actors/builtin/multisig/message.v2.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message2) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message2) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig diff --git a/venus-shared/actors/builtin/multisig/message.v3.go b/venus-shared/actors/builtin/multisig/message.v3.go index 4bca3d6e3d..301b7d8cdb 100644 --- a/venus-shared/actors/builtin/multisig/message.v3.go +++ b/venus-shared/actors/builtin/multisig/message.v3.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message3) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message3) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig diff --git a/venus-shared/actors/builtin/multisig/message.v4.go b/venus-shared/actors/builtin/multisig/message.v4.go index 18e0e28ae3..f63fc4c021 100644 --- a/venus-shared/actors/builtin/multisig/message.v4.go +++ b/venus-shared/actors/builtin/multisig/message.v4.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message4) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message4) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig diff --git a/venus-shared/actors/builtin/multisig/message.v5.go b/venus-shared/actors/builtin/multisig/message.v5.go index 15744a5e6f..cc5eedb3e0 100644 --- a/venus-shared/actors/builtin/multisig/message.v5.go +++ b/venus-shared/actors/builtin/multisig/message.v5.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message5) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message5) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig diff --git a/venus-shared/actors/builtin/multisig/message.v6.go b/venus-shared/actors/builtin/multisig/message.v6.go index 364df4e4fa..e98c5c0ea7 100644 --- a/venus-shared/actors/builtin/multisig/message.v6.go +++ b/venus-shared/actors/builtin/multisig/message.v6.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message6) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message6) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig diff --git a/venus-shared/actors/builtin/multisig/message.v7.go b/venus-shared/actors/builtin/multisig/message.v7.go index e86709de4e..749b54c0b1 100644 --- a/venus-shared/actors/builtin/multisig/message.v7.go +++ b/venus-shared/actors/builtin/multisig/message.v7.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message7) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message7) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig diff --git a/venus-shared/actors/builtin/multisig/message.v8.go b/venus-shared/actors/builtin/multisig/message.v8.go index 79e41fcb91..659447be9f 100644 --- a/venus-shared/actors/builtin/multisig/message.v8.go +++ b/venus-shared/actors/builtin/multisig/message.v8.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message8) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message8) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -55,7 +55,7 @@ func (m message8) Create( code, ok := actors.GetActorCodeID(actorstypes.Version8, actors.MultisigKey) if !ok { - return nil, xerrors.Errorf("failed to get multisig code ID") + return nil, fmt.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params diff --git a/venus-shared/actors/builtin/multisig/message.v9.go b/venus-shared/actors/builtin/multisig/message.v9.go index 6d031705de..35e8873998 100644 --- a/venus-shared/actors/builtin/multisig/message.v9.go +++ b/venus-shared/actors/builtin/multisig/message.v9.go @@ -3,7 +3,7 @@ package multisig import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -29,7 +29,7 @@ func (m message9) Create( lenAddrs := uint64(len(signers)) if lenAddrs < threshold { - return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + return nil, fmt.Errorf("cannot require signing of more addresses than provided for multisig") } if threshold == 0 { @@ -37,7 +37,7 @@ func (m message9) Create( } if m.from == address.Undef { - return nil, xerrors.Errorf("must provide source address") + return nil, fmt.Errorf("must provide source address") } // Set up constructor parameters for multisig @@ -55,7 +55,7 @@ func (m message9) Create( code, ok := actors.GetActorCodeID(actorstypes.Version9, actors.MultisigKey) if !ok { - return nil, xerrors.Errorf("failed to get multisig code ID") + return nil, fmt.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params diff --git a/venus-shared/actors/builtin/multisig/state.sep.go.template b/venus-shared/actors/builtin/multisig/state.sep.go.template index 56d46c629f..bdd7b86c6f 100644 --- a/venus-shared/actors/builtin/multisig/state.sep.go.template +++ b/venus-shared/actors/builtin/multisig/state.sep.go.template @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -103,7 +103,7 @@ func (s *state{{.v}}) ForEachPendingTxn(cb func(id int64, txn Transaction) error return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v0.go b/venus-shared/actors/builtin/multisig/state.v0.go index 2a57b89145..f522309bbb 100644 --- a/venus-shared/actors/builtin/multisig/state.v0.go +++ b/venus-shared/actors/builtin/multisig/state.v0.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -86,7 +87,7 @@ func (s *state0) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v2.go b/venus-shared/actors/builtin/multisig/state.v2.go index ef663756cd..8711f5c12e 100644 --- a/venus-shared/actors/builtin/multisig/state.v2.go +++ b/venus-shared/actors/builtin/multisig/state.v2.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -86,7 +87,7 @@ func (s *state2) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v3.go b/venus-shared/actors/builtin/multisig/state.v3.go index 720f4a5eff..7d268a79f4 100644 --- a/venus-shared/actors/builtin/multisig/state.v3.go +++ b/venus-shared/actors/builtin/multisig/state.v3.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,7 +89,7 @@ func (s *state3) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v4.go b/venus-shared/actors/builtin/multisig/state.v4.go index a25e8ae059..ca68431738 100644 --- a/venus-shared/actors/builtin/multisig/state.v4.go +++ b/venus-shared/actors/builtin/multisig/state.v4.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,7 +89,7 @@ func (s *state4) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v5.go b/venus-shared/actors/builtin/multisig/state.v5.go index 67cd348fa8..da2ca284ce 100644 --- a/venus-shared/actors/builtin/multisig/state.v5.go +++ b/venus-shared/actors/builtin/multisig/state.v5.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,7 +89,7 @@ func (s *state5) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v6.go b/venus-shared/actors/builtin/multisig/state.v6.go index 6ee2c78b6b..e6e29fc4d0 100644 --- a/venus-shared/actors/builtin/multisig/state.v6.go +++ b/venus-shared/actors/builtin/multisig/state.v6.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,7 +89,7 @@ func (s *state6) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v7.go b/venus-shared/actors/builtin/multisig/state.v7.go index c7a2318c03..c190bcc159 100644 --- a/venus-shared/actors/builtin/multisig/state.v7.go +++ b/venus-shared/actors/builtin/multisig/state.v7.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -88,7 +89,7 @@ func (s *state7) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v8.go b/venus-shared/actors/builtin/multisig/state.v8.go index c89c5f643b..2718a22521 100644 --- a/venus-shared/actors/builtin/multisig/state.v8.go +++ b/venus-shared/actors/builtin/multisig/state.v8.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -87,7 +88,7 @@ func (s *state8) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/multisig/state.v9.go b/venus-shared/actors/builtin/multisig/state.v9.go index ef5a19f3d0..38ddcd4372 100644 --- a/venus-shared/actors/builtin/multisig/state.v9.go +++ b/venus-shared/actors/builtin/multisig/state.v9.go @@ -6,11 +6,12 @@ import ( "bytes" "encoding/binary" + "fmt" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" @@ -87,7 +88,7 @@ func (s *state9) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err return arr.ForEach(&out, func(key string) error { txid, n := binary.Varint([]byte(key)) if n <= 0 { - return xerrors.Errorf("invalid pending transaction key: %v", key) + return fmt.Errorf("invalid pending transaction key: %v", key) } return cb(txid, (Transaction)(out)) //nolint:unconvert }) diff --git a/venus-shared/actors/builtin/paych/actor.go b/venus-shared/actors/builtin/paych/actor.go index 3cc0c0de2c..ba2e16ae80 100644 --- a/venus-shared/actors/builtin/paych/actor.go +++ b/venus-shared/actors/builtin/paych/actor.go @@ -8,8 +8,6 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" - "golang.org/x/xerrors" - "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" @@ -42,7 +40,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PaychKey { - return nil, xerrors.Errorf("actor code is not paych: %s", name) + return nil, fmt.Errorf("actor code is not paych: %s", name) } switch av { @@ -81,7 +79,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } // State is an abstract version of payment channel state that works across diff --git a/venus-shared/actors/builtin/paych/actor.go.template b/venus-shared/actors/builtin/paych/actor.go.template index 0c8607e885..8d9e98b308 100644 --- a/venus-shared/actors/builtin/paych/actor.go.template +++ b/venus-shared/actors/builtin/paych/actor.go.template @@ -7,7 +7,6 @@ import ( "encoding/base64" "fmt" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -32,7 +31,7 @@ import ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PaychKey { - return nil, xerrors.Errorf("actor code is not paych: %s", name) + return nil, fmt.Errorf("actor code is not paych: %s", name) } switch av { @@ -54,7 +53,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } // State is an abstract version of payment channel state that works across diff --git a/venus-shared/actors/builtin/paych/message.sep.go.template b/venus-shared/actors/builtin/paych/message.sep.go.template index 752c8aaf2b..62ac6108ff 100644 --- a/venus-shared/actors/builtin/paych/message.sep.go.template +++ b/venus-shared/actors/builtin/paych/message.sep.go.template @@ -4,7 +4,7 @@ package paych import ( {{if (ge .v 8)}} - "golang.org/x/xerrors" + "fmt" {{end}} "github.com/filecoin-project/go-address" @@ -36,7 +36,7 @@ func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount) {{else}} actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version{{.v}}, "paymentchannel") if !ok { - return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", {{.v}}) + return nil, fmt.Errorf("error getting actor paymentchannel code id for actor version %d", {{.v}}) } {{end}} diff --git a/venus-shared/actors/builtin/paych/message.v8.go b/venus-shared/actors/builtin/paych/message.v8.go index a27a8aa067..146c989c24 100644 --- a/venus-shared/actors/builtin/paych/message.v8.go +++ b/venus-shared/actors/builtin/paych/message.v8.go @@ -3,7 +3,7 @@ package paych import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -26,7 +26,7 @@ func (m message8) Create(to address.Address, initialAmount abi.TokenAmount) (*ty actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version8, "paymentchannel") if !ok { - return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 8) + return nil, fmt.Errorf("error getting actor paymentchannel code id for actor version %d", 8) } params, aerr := actors.SerializeParams(&paych8.ConstructorParams{From: m.from, To: to}) diff --git a/venus-shared/actors/builtin/paych/message.v9.go b/venus-shared/actors/builtin/paych/message.v9.go index f681cb8d54..a588ea34c8 100644 --- a/venus-shared/actors/builtin/paych/message.v9.go +++ b/venus-shared/actors/builtin/paych/message.v9.go @@ -3,7 +3,7 @@ package paych import ( - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -26,7 +26,7 @@ func (m message9) Create(to address.Address, initialAmount abi.TokenAmount) (*ty actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version9, "paymentchannel") if !ok { - return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 9) + return nil, fmt.Errorf("error getting actor paymentchannel code id for actor version %d", 9) } params, aerr := actors.SerializeParams(&paych9.ConstructorParams{From: m.from, To: to}) diff --git a/venus-shared/actors/builtin/power/actor.go b/venus-shared/actors/builtin/power/actor.go index 40e49f86eb..6608884d59 100644 --- a/venus-shared/actors/builtin/power/actor.go +++ b/venus-shared/actors/builtin/power/actor.go @@ -3,12 +3,13 @@ package power import ( + "fmt" + "github.com/filecoin-project/go-address" actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/cbor" @@ -42,7 +43,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PowerKey { - return nil, xerrors.Errorf("actor code is not power: %s", name) + return nil, fmt.Errorf("actor code is not power: %s", name) } switch av { @@ -81,7 +82,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version) (State, error) { @@ -115,7 +116,7 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { return make9(store) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/power/actor.go.template b/venus-shared/actors/builtin/power/actor.go.template index 398682beda..6cbbe997ab 100644 --- a/venus-shared/actors/builtin/power/actor.go.template +++ b/venus-shared/actors/builtin/power/actor.go.template @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/venus/venus-shared/actors" cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/cbor" @@ -33,7 +33,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.PowerKey { - return nil, xerrors.Errorf("actor code is not power: %s", name) + return nil, fmt.Errorf("actor code is not power: %s", name) } switch av { @@ -55,7 +55,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version) (State, error) { @@ -65,7 +65,7 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) { return make{{.}}(store) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/reward/actor.go b/venus-shared/actors/builtin/reward/actor.go index 9ec0d3bd06..358c5dbe1a 100644 --- a/venus-shared/actors/builtin/reward/actor.go +++ b/venus-shared/actors/builtin/reward/actor.go @@ -3,11 +3,12 @@ package reward import ( + "fmt" + "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" "github.com/filecoin-project/venus/venus-shared/actors" - "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/cbor" @@ -40,7 +41,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.RewardKey { - return nil, xerrors.Errorf("actor code is not reward: %s", name) + return nil, fmt.Errorf("actor code is not reward: %s", name) } switch av { @@ -79,7 +80,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.StoragePower) (State, error) { @@ -113,7 +114,7 @@ func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.St return make9(store, currRealizedPower) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/reward/actor.go.template b/venus-shared/actors/builtin/reward/actor.go.template index 426d7cc763..62c639d51d 100644 --- a/venus-shared/actors/builtin/reward/actor.go.template +++ b/venus-shared/actors/builtin/reward/actor.go.template @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" "github.com/filecoin-project/venus/venus-shared/actors" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-state-types/cbor" {{range .versions}} @@ -30,7 +30,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.RewardKey { - return nil, xerrors.Errorf("actor code is not reward: %s", name) + return nil, fmt.Errorf("actor code is not reward: %s", name) } switch av { @@ -52,7 +52,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.StoragePower) (State, error) { @@ -62,7 +62,7 @@ func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.St return make{{.}}(store, currRealizedPower) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/system/actor.go b/venus-shared/actors/builtin/system/actor.go index 91336011b8..9c2b8c7ccb 100644 --- a/venus-shared/actors/builtin/system/actor.go +++ b/venus-shared/actors/builtin/system/actor.go @@ -9,7 +9,7 @@ import ( types "github.com/filecoin-project/venus/venus-shared/internal" "github.com/ipfs/go-cid" - "golang.org/x/xerrors" + "fmt" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -35,7 +35,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.SystemKey { - return nil, xerrors.Errorf("actor code is not system: %s", name) + return nil, fmt.Errorf("actor code is not system: %s", name) } switch av { @@ -74,7 +74,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) (State, error) { @@ -108,7 +108,7 @@ func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) ( return make9(store, builtinActors) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/system/actor.go.template b/venus-shared/actors/builtin/system/actor.go.template index f6804bf0d7..d9c0675058 100644 --- a/venus-shared/actors/builtin/system/actor.go.template +++ b/venus-shared/actors/builtin/system/actor.go.template @@ -9,7 +9,7 @@ import ( types "github.com/filecoin-project/venus/venus-shared/internal" "github.com/ipfs/go-cid" - "golang.org/x/xerrors" + "fmt" {{range .versions}} {{if (le . 7)}} @@ -26,7 +26,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.SystemKey { - return nil, xerrors.Errorf("actor code is not system: %s", name) + return nil, fmt.Errorf("actor code is not system: %s", name) } switch av { @@ -48,7 +48,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) (State, error) { @@ -58,7 +58,7 @@ func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) ( return make{{.}}(store{{if (ge . 8)}}, builtinActors{{end}}) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/system/state.sep.go.template b/venus-shared/actors/builtin/system/state.sep.go.template index 9aa213039d..72e82666c0 100644 --- a/venus-shared/actors/builtin/system/state.sep.go.template +++ b/venus-shared/actors/builtin/system/state.sep.go.template @@ -9,7 +9,7 @@ import ( {{if (le .v 7)}} system{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/system" - "golang.org/x/xerrors" + "fmt" {{else}} system{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}system" {{end}} diff --git a/venus-shared/actors/builtin/system/state.v0.go b/venus-shared/actors/builtin/system/state.v0.go index fb0b12467d..ff6dc110bc 100644 --- a/venus-shared/actors/builtin/system/state.v0.go +++ b/venus-shared/actors/builtin/system/state.v0.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system0 "github.com/filecoin-project/specs-actors/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state0)(nil) diff --git a/venus-shared/actors/builtin/system/state.v2.go b/venus-shared/actors/builtin/system/state.v2.go index 96a995fa68..376195b254 100644 --- a/venus-shared/actors/builtin/system/state.v2.go +++ b/venus-shared/actors/builtin/system/state.v2.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state2)(nil) diff --git a/venus-shared/actors/builtin/system/state.v3.go b/venus-shared/actors/builtin/system/state.v3.go index 6bbca3f7da..eeb00d03cb 100644 --- a/venus-shared/actors/builtin/system/state.v3.go +++ b/venus-shared/actors/builtin/system/state.v3.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state3)(nil) diff --git a/venus-shared/actors/builtin/system/state.v4.go b/venus-shared/actors/builtin/system/state.v4.go index 6c9e501754..7498d996a1 100644 --- a/venus-shared/actors/builtin/system/state.v4.go +++ b/venus-shared/actors/builtin/system/state.v4.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state4)(nil) diff --git a/venus-shared/actors/builtin/system/state.v5.go b/venus-shared/actors/builtin/system/state.v5.go index 0b862c16be..fcf197bf1a 100644 --- a/venus-shared/actors/builtin/system/state.v5.go +++ b/venus-shared/actors/builtin/system/state.v5.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state5)(nil) diff --git a/venus-shared/actors/builtin/system/state.v6.go b/venus-shared/actors/builtin/system/state.v6.go index 8f783219d2..dc1e1ca1fc 100644 --- a/venus-shared/actors/builtin/system/state.v6.go +++ b/venus-shared/actors/builtin/system/state.v6.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state6)(nil) diff --git a/venus-shared/actors/builtin/system/state.v7.go b/venus-shared/actors/builtin/system/state.v7.go index 45c6cd33c7..c56156d1a7 100644 --- a/venus-shared/actors/builtin/system/state.v7.go +++ b/venus-shared/actors/builtin/system/state.v7.go @@ -4,11 +4,11 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" "github.com/filecoin-project/venus/venus-shared/actors/adt" system7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/system" - "golang.org/x/xerrors" ) var _ State = (*state7)(nil) diff --git a/venus-shared/actors/builtin/verifreg/actor.go b/venus-shared/actors/builtin/verifreg/actor.go index b1f9678e40..8da58d8693 100644 --- a/venus-shared/actors/builtin/verifreg/actor.go +++ b/venus-shared/actors/builtin/verifreg/actor.go @@ -3,8 +3,9 @@ package verifreg import ( + "fmt" + actorstypes "github.com/filecoin-project/go-state-types/actors" - "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -40,7 +41,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.VerifregKey { - return nil, xerrors.Errorf("actor code is not verifreg: %s", name) + return nil, fmt.Errorf("actor code is not verifreg: %s", name) } switch av { @@ -79,7 +80,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.Address) (State, error) { @@ -113,7 +114,7 @@ func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.A return make9(store, rootKeyAddress) } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/builtin/verifreg/actor.go.template b/venus-shared/actors/builtin/verifreg/actor.go.template index 4a29beb7f7..fee636c120 100644 --- a/venus-shared/actors/builtin/verifreg/actor.go.template +++ b/venus-shared/actors/builtin/verifreg/actor.go.template @@ -4,7 +4,7 @@ package verifreg import ( actorstypes "github.com/filecoin-project/go-state-types/actors" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" @@ -30,7 +30,7 @@ var ( func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { if name != actors.VerifregKey { - return nil, xerrors.Errorf("actor code is not verifreg: %s", name) + return nil, fmt.Errorf("actor code is not verifreg: %s", name) } switch av { @@ -52,7 +52,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { {{end}} } - return nil, xerrors.Errorf("unknown actor code %s", act.Code) + return nil, fmt.Errorf("unknown actor code %s", act.Code) } func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.Address) (State, error) { @@ -62,7 +62,7 @@ func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.A return make{{.}}(store, rootKeyAddress) {{end}} } - return nil, xerrors.Errorf("unknown actor version %d", av) + return nil, fmt.Errorf("unknown actor version %d", av) } type State interface { diff --git a/venus-shared/actors/policy/policy.go b/venus-shared/actors/policy/policy.go index c64588ca28..940dd4069a 100644 --- a/venus-shared/actors/policy/policy.go +++ b/venus-shared/actors/policy/policy.go @@ -5,8 +5,9 @@ package policy import ( actorstypes "github.com/filecoin-project/go-state-types/actors" + "fmt" + "github.com/filecoin-project/go-state-types/big" - "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/network" @@ -291,7 +292,7 @@ func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProo return miner9.MaxProveCommitDuration[t], nil default: - return 0, xerrors.Errorf("unsupported actors version") + return 0, fmt.Errorf("unsupported actors version") } } @@ -399,7 +400,7 @@ func DealProviderCollateralBounds( return min, max, nil default: - return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") + return big.Zero(), big.Zero(), fmt.Errorf("unsupported actors version") } } @@ -544,7 +545,7 @@ func GetAddressedSectorsMax(nwVer network.Version) (int, error) { return miner9.AddressedSectorsMax, nil default: - return 0, xerrors.Errorf("unsupported network version") + return 0, fmt.Errorf("unsupported network version") } } @@ -593,7 +594,7 @@ func GetDeclarationsMax(nwVer network.Version) (int, error) { return miner9.DeclarationsMax, nil default: - return 0, xerrors.Errorf("unsupported network version") + return 0, fmt.Errorf("unsupported network version") } } @@ -641,7 +642,7 @@ func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, ba return miner9.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil default: - return big.Zero(), xerrors.Errorf("unsupported network version") + return big.Zero(), fmt.Errorf("unsupported network version") } } @@ -689,6 +690,6 @@ func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, base return miner9.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil default: - return big.Zero(), xerrors.Errorf("unsupported network version") + return big.Zero(), fmt.Errorf("unsupported network version") } } diff --git a/venus-shared/actors/policy/policy.go.template b/venus-shared/actors/policy/policy.go.template index 1eb19be7bf..47d5498d74 100644 --- a/venus-shared/actors/policy/policy.go.template +++ b/venus-shared/actors/policy/policy.go.template @@ -6,7 +6,7 @@ import ( actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - "golang.org/x/xerrors" + "fmt" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/network" @@ -151,7 +151,7 @@ func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProo {{end}} {{end}} default: - return 0, xerrors.Errorf("unsupported actors version") + return 0, fmt.Errorf("unsupported actors version") } } @@ -190,7 +190,7 @@ func DealProviderCollateralBounds( {{end}} {{end}} default: - return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") + return big.Zero(), big.Zero(), fmt.Errorf("unsupported actors version") } } @@ -264,7 +264,7 @@ func GetAddressedSectorsMax(nwVer network.Version) (int, error) { return miner{{.}}.AddressedSectorsMax, nil {{end}} default: - return 0, xerrors.Errorf("unsupported network version") + return 0, fmt.Errorf("unsupported network version") } } @@ -284,7 +284,7 @@ func GetDeclarationsMax(nwVer network.Version) (int, error) { {{end}} {{end}} default: - return 0, xerrors.Errorf("unsupported network version") + return 0, fmt.Errorf("unsupported network version") } } @@ -305,7 +305,7 @@ func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, ba {{end}} {{end}} default: - return big.Zero(), xerrors.Errorf("unsupported network version") + return big.Zero(), fmt.Errorf("unsupported network version") } } @@ -324,6 +324,6 @@ func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, base {{end}} {{end}} default: - return big.Zero(), xerrors.Errorf("unsupported network version") + return big.Zero(), fmt.Errorf("unsupported network version") } }