diff --git a/x/staking/exported/exported.go b/x/staking/exported/exported.go new file mode 100644 index 000000000000..2d0c2fd1c391 --- /dev/null +++ b/x/staking/exported/exported.go @@ -0,0 +1,16 @@ +package exported + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +type ( + // Subspace defines an interface that implements the legacy x/params Subspace + // type. + // + // NOTE: This is used solely for migration of x/params managed parameters. + Subspace interface { + GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) + } +) diff --git a/x/staking/keeper/liquid_stake_test.go b/x/staking/keeper/liquid_stake_test.go index c543afde0463..36d0e8c6d10a 100644 --- a/x/staking/keeper/liquid_stake_test.go +++ b/x/staking/keeper/liquid_stake_test.go @@ -1002,8 +1002,8 @@ func TestTokenizeShareAuthorizationQueue(t *testing.T) { require.Equal(t, expectedUnlockedAddresses["10"], actualAddresses, "addresses unlocked from time 10") } -// Test CalculateTotalLiquidStaked -func TestCalculateTotalLiquidStaked(t *testing.T) { +// Test RefreshTotalLiquidStaked +func TestRefreshTotalLiquidStaked(t *testing.T) { _, app, ctx := createTestInput() // Set an arbitrary total liquid staked tokens amount that will get overwritten by the refresh diff --git a/x/staking/keeper/migrations.go b/x/staking/keeper/migrations.go index 101ca195b390..996b43373d50 100644 --- a/x/staking/keeper/migrations.go +++ b/x/staking/keeper/migrations.go @@ -3,6 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" v043 "github.com/cosmos/cosmos-sdk/x/staking/legacy/v043" + v3 "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3" ) // Migrator is a struct for handling in-place store migrations. @@ -19,3 +20,8 @@ func NewMigrator(keeper Keeper) Migrator { func (m Migrator) Migrate1to2(ctx sdk.Context) error { return v043.MigrateStore(ctx, m.keeper.storeKey) } + +// Migrate2to3 migrates from version 2 to 3. +func (m Migrator) Migrate2to3(ctx sdk.Context) error { + return v3.MigrateStore(ctx, m.keeper.storeKey, m.keeper.cdc, m.keeper, m.keeper.paramstore) +} diff --git a/x/staking/migrations/v3/migrations_test.go b/x/staking/migrations/v3/migrations_test.go new file mode 100644 index 000000000000..c7e9dc6dc6f5 --- /dev/null +++ b/x/staking/migrations/v3/migrations_test.go @@ -0,0 +1,308 @@ +package v3_test + +import ( + "fmt" + "testing" + "time" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/simapp" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + v3 "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3" + legacytypes "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" +) + +// Helper function to write a validator using the old schema +func setLegacyValidator(store sdk.KVStore, cdc codec.BinaryCodec, validator legacytypes.Validator) { + bz := cdc.MustMarshal(&validator) + store.Set(types.GetValidatorKey(validator.GetOperator()), bz) +} + +// Helper function to write a delegation using the old schema +func setLegacyDelegation(store sdk.KVStore, cdc codec.BinaryCodec, delegation legacytypes.Delegation) { + delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress) + + bz := cdc.MustMarshal(&delegation) + store.Set(types.GetDelegationKey(delegatorAddress, delegation.GetValidatorAddr()), bz) +} + +// Helper function to get unbonding delegation records +func getUBD(store storetypes.KVStore, cdc codec.BinaryCodec, accAddr sdk.AccAddress, valAddr sdk.ValAddress) (ubdRes types.UnbondingDelegation) { + ubdbz := store.Get(types.GetUBDKey(accAddr, valAddr)) + cdc.MustUnmarshal(ubdbz, &ubdRes) + return ubdRes +} + +// createOldStateUnbonding will create the ubd entries with duplicate heights +// 10 duplicate heights and 10 unique ubd with creation height +func createOldUnbondingDelegationRecords(t *testing.T, creationHeight int64, valAddr sdk.ValAddress, accAddr sdk.AccAddress, cdc codec.BinaryCodec, store storetypes.KVStore) error { + unbondBalance := sdk.NewInt(100) + completionTime := time.Now() + ubdEntries := make([]types.UnbondingDelegationEntry, 0, 10) + + for i := int64(0); i < 10; i++ { + ubdEntry := types.UnbondingDelegationEntry{ + CreationHeight: creationHeight, + Balance: unbondBalance, + InitialBalance: unbondBalance, + CompletionTime: completionTime, + } + ubdEntries = append(ubdEntries, ubdEntry) + // creating more entries for testing the creation_heights + ubdEntry.CreationHeight = i + 2 + ubdEntry.CompletionTime = completionTime.Add(time.Minute * 10) + ubdEntries = append(ubdEntries, ubdEntry) + } + + ubd := types.UnbondingDelegation{ + ValidatorAddress: valAddr.String(), + DelegatorAddress: accAddr.String(), + Entries: ubdEntries, + } + + // set the unbond delegation with validator and delegator + bz := types.MustMarshalUBD(cdc, ubd) + key := types.GetUBDKey(accAddr, valAddr) + store.Set(key, bz) + return nil +} + +// Test setting params in the staking module +func TestMigrateParamsStore(t *testing.T) { + cdc := simapp.MakeTestEncodingConfig() + stakingKey := storetypes.NewKVStoreKey(types.ModuleName) + tStakingKey := sdk.NewTransientStoreKey("transient_test") + ctx := testutil.DefaultContext(stakingKey, tStakingKey) + paramstore := paramtypes.NewSubspace(cdc.Marshaler, cdc.Amino, stakingKey, tStakingKey, types.ModuleName) + + // Check there are no LSM params + require.False(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) + require.False(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) + require.False(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) + + // Run migrations + v3.MigrateParamsStore(ctx, paramstore) + + // Make sure the new params are set + require.True(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) + require.True(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) + require.True(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) + + // Confirm default values are set + var validatorBondFactor sdk.Dec + paramstore.Get(ctx, types.KeyValidatorBondFactor, &validatorBondFactor) + require.Equal(t, types.DefaultValidatorBondFactor, validatorBondFactor) + + var globalLiquidStakingCap sdk.Dec + paramstore.Get(ctx, types.KeyGlobalLiquidStakingCap, &globalLiquidStakingCap) + require.Equal(t, types.DefaultGlobalLiquidStakingCap, globalLiquidStakingCap) + + var validatorLiquidStakingCap sdk.Dec + paramstore.Get(ctx, types.KeyValidatorLiquidStakingCap, &validatorLiquidStakingCap) + require.Equal(t, types.DefaultValidatorLiquidStakingCap, validatorLiquidStakingCap) +} + +// Test setting each validator's ValidatorBondShares and LiquidShares to 0 +func TestMigrateValidators(t *testing.T) { + app := simapp.Setup(false) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) + + addresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + pubKeys := simapp.CreateTestPubKeys(10) + + // Write each validator with the old type + oldValidators := []legacytypes.Validator{} + for i := int64(0); i < 10; i++ { + valAddress := sdk.ValAddress(addresses[i]).String() + pkAny, err := codectypes.NewAnyWithValue(pubKeys[i]) + require.NoError(t, err) + + dummyTime := time.Date(2023, 1, 1, 0, 0, int(i), 0, time.UTC) + + description := legacytypes.Description{ + Moniker: fmt.Sprintf("moniker-%d", i), + Identity: fmt.Sprintf("identity-%d", i), + Website: fmt.Sprintf("website-%d", i), + SecurityContact: fmt.Sprintf("security-contact-%d", i), + Details: fmt.Sprintf("details-%d", i), + } + + commission := legacytypes.Commission{ + UpdateTime: dummyTime, + CommissionRates: legacytypes.CommissionRates{ + Rate: sdk.NewDec(i), + MaxRate: sdk.NewDec(i), + MaxChangeRate: sdk.NewDec(i), + }, + } + + validator := legacytypes.Validator{ + OperatorAddress: valAddress, + ConsensusPubkey: pkAny, + Jailed: true, + Status: legacytypes.Bonded, + Tokens: sdk.NewInt(1_000_000), + DelegatorShares: sdk.NewDec(1_000_000), + UnbondingHeight: i, + UnbondingTime: dummyTime, + MinSelfDelegation: sdk.NewInt(1_000), + UnbondingOnHoldRefCount: 1, + UnbondingIds: []uint64{uint64(i)}, + Description: description, + Commission: commission, + } + + oldValidators = append(oldValidators, validator) + setLegacyValidator(store, app.AppCodec(), validator) + } + + // Migrate to the new types which adds ValidatorBondShares and LiquidShares + v3.MigrateValidators(ctx, app.StakingKeeper) + + // check that the validator ValidatorBondShares and LiquidShares were correctly set to 0 + for _, val := range app.StakingKeeper.GetAllValidators(ctx) { + require.Equal(t, sdk.ZeroDec(), val.ValidatorBondShares) + require.Equal(t, sdk.ZeroDec(), val.LiquidShares) + } + + // check that the other validator attributes were unchanged + for _, oldValidator := range oldValidators { + newValidator, found := app.StakingKeeper.GetValidator(ctx, oldValidator.GetOperator()) + require.True(t, found) + + require.Equal(t, oldValidator.ConsensusPubkey, newValidator.ConsensusPubkey, "pub key") + require.Equal(t, oldValidator.Jailed, newValidator.Jailed, "jailed") + require.Equal(t, oldValidator.Status.String(), newValidator.Status.String(), "status") + require.Equal(t, oldValidator.Tokens.Int64(), newValidator.Tokens.Int64(), "tokens") + require.Equal(t, oldValidator.DelegatorShares.TruncateInt64(), newValidator.DelegatorShares.TruncateInt64(), "shares") + + require.Equal(t, oldValidator.UnbondingHeight, newValidator.UnbondingHeight, "unbonding height") + require.Equal(t, oldValidator.UnbondingTime, newValidator.UnbondingTime, "unbonding time") + require.Equal(t, oldValidator.UnbondingOnHoldRefCount, newValidator.UnbondingOnHoldRefCount, "unbonding on hold") + require.Equal(t, oldValidator.UnbondingIds, newValidator.UnbondingIds, "unbonding ids") + require.Equal(t, oldValidator.MinSelfDelegation.String(), newValidator.MinSelfDelegation.String(), "min self delegation") + + oldDescription := oldValidator.Description + newDescription := newValidator.Description + require.Equal(t, oldDescription.Moniker, newDescription.Moniker, "moniker") + require.Equal(t, oldDescription.Identity, newDescription.Identity, "identity") + require.Equal(t, oldDescription.Website, newDescription.Website, "website") + require.Equal(t, oldDescription.SecurityContact, newDescription.SecurityContact, "security contact") + require.Equal(t, oldDescription.Details, newDescription.Details, "details") + + oldCommissionRate := oldValidator.Commission.CommissionRates + newCommissionRate := newValidator.Commission.CommissionRates + require.Equal(t, oldValidator.Commission.UpdateTime, newValidator.Commission.UpdateTime, "commission update time") + require.Equal(t, oldCommissionRate.Rate, newCommissionRate.Rate, "commission rate") + require.Equal(t, oldCommissionRate.MaxRate, newCommissionRate.MaxRate, "commission max rate") + require.Equal(t, oldCommissionRate.MaxChangeRate, newCommissionRate.MaxChangeRate, "commission max rate change") + } +} + +// Test setting each delegation's validator bond to false +func TestMigrateDelegations(t *testing.T) { + app := simapp.Setup(false) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) + + validatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + delegatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + + // Write each delegation with the old type + oldDelegations := []legacytypes.Delegation{} + for i := int64(0); i < 10; i++ { + delegation := legacytypes.Delegation{ + DelegatorAddress: delegatorAddresses[i].String(), + ValidatorAddress: sdk.ValAddress(validatorAddresses[i]).String(), + Shares: sdk.NewDec(i * 1000), + } + + oldDelegations = append(oldDelegations, delegation) + setLegacyDelegation(store, app.AppCodec(), delegation) + } + + // Migrate the new delegations which should add the ValidatorBond field + v3.MigrateDelegations(ctx, app.StakingKeeper) + + // check that the delegation is not a validator bond + for _, delegation := range app.StakingKeeper.GetAllDelegations(ctx) { + require.Equal(t, false, delegation.ValidatorBond) + } + + // check that the other delegation attributes were unchanged + for _, oldDelegation := range oldDelegations { + newDelegation, found := app.StakingKeeper.GetDelegation(ctx, oldDelegation.GetDelegatorAddr(), oldDelegation.GetValidatorAddr()) + require.True(t, found) + + require.Equal(t, oldDelegation.DelegatorAddress, newDelegation.DelegatorAddress, "delegator address") + require.Equal(t, oldDelegation.ValidatorAddress, newDelegation.ValidatorAddress, "validator address") + require.Equal(t, oldDelegation.Shares.TruncateInt64(), newDelegation.Shares.TruncateInt64(), "shares") + } +} + +// Tests unbonding delegation records with the same height are removed and combined into a new record +func TestMigrateUBD(t *testing.T) { + cdc := simapp.MakeTestEncodingConfig().Marshaler + + storeKey := sdk.NewKVStoreKey(legacytypes.ModuleName) + tKey := sdk.NewTransientStoreKey("transient_test") + ctx := testutil.DefaultContext(storeKey, tKey) + store := ctx.KVStore(storeKey) + duplicateCreationHeight := int64(1) + + accAddrs := v3.CreateIncrementalAccounts(1) + accAddr := accAddrs[0] + + valAddrs := v3.ConvertAddrsToValAddrs(accAddrs) + valAddr := valAddrs[0] + + // creating 10 ubdEntries with same height and 10 ubdEntries with different creation height + err := createOldUnbondingDelegationRecords(t, duplicateCreationHeight, valAddr, accAddr, cdc, store) + require.NoError(t, err) + + testCases := []struct { + name string + doMigration bool + }{ + { + name: "without state migration", + doMigration: false, + }, + { + name: "with state migration", + doMigration: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + if tc.doMigration { + require.NoError(t, v3.MigrateUBDEntries(ctx, store, cdc)) + } + + ubd := getUBD(store, cdc, accAddr, valAddr) + if tc.doMigration { + // checking the updated balance for duplicateCreationHeight + for _, ubdEntry := range ubd.Entries { + if ubdEntry.CreationHeight == duplicateCreationHeight { + require.Equal(t, sdk.NewInt(100*10), ubdEntry.Balance) + break + } + } + require.Equal(t, 11, len(ubd.Entries)) + } else { + require.Equal(t, true, true) + require.Equal(t, 20, len(ubd.Entries)) + } + }) + } +} diff --git a/x/staking/migrations/v3/store.go b/x/staking/migrations/v3/store.go new file mode 100644 index 000000000000..e8d1776b3121 --- /dev/null +++ b/x/staking/migrations/v3/store.go @@ -0,0 +1,144 @@ +package v3 + +import ( + "sort" + + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// subspace contains the method needed for migrations of the +// legacy Params subspace +type subspace interface { + GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) + HasKeyTable() bool + WithKeyTable(paramtypes.KeyTable) paramtypes.Subspace + Set(ctx sdk.Context, key []byte, value interface{}) +} + +// keeper contains the staking keeper functions required +// for the migration +type keeper interface { + GetAllDelegations(ctx sdk.Context) []types.Delegation + GetAllValidators(ctx sdk.Context) []types.Validator + SetDelegation(ctx sdk.Context, delegation types.Delegation) + SetValidator(ctx sdk.Context, validator types.Validator) + RefreshTotalLiquidStaked(ctx sdk.Context) error +} + +// Adds the following LSM params: +// - ValidatorBondFactor +// - GlobalLiquidStakingCap +// - ValidatorLiquidStakingCap +func MigrateParamsStore(ctx sdk.Context, paramstore subspace) { + if !paramstore.HasKeyTable() { + paramstore.WithKeyTable(types.ParamKeyTable()) + } + paramstore.Set(ctx, types.KeyValidatorBondFactor, types.DefaultValidatorBondFactor) + paramstore.Set(ctx, types.KeyGlobalLiquidStakingCap, types.DefaultGlobalLiquidStakingCap) + paramstore.Set(ctx, types.KeyValidatorLiquidStakingCap, types.DefaultValidatorLiquidStakingCap) +} + +// Set each validator's ValidatorBondShares and LiquidShares to 0 +func MigrateValidators(ctx sdk.Context, k keeper) { + for _, validator := range k.GetAllValidators(ctx) { + validator.ValidatorBondShares = sdk.ZeroDec() + validator.LiquidShares = sdk.ZeroDec() + k.SetValidator(ctx, validator) + } +} + +// Set each delegation's ValidatorBond field to false +func MigrateDelegations(ctx sdk.Context, k keeper) { + for _, delegation := range k.GetAllDelegations(ctx) { + delegation.ValidatorBond = false + k.SetDelegation(ctx, delegation) + } +} + +// migrateUBDEntries will remove the ubdEntries with same creation_height +// and create a new ubdEntry with updated balance and initial_balance +func MigrateUBDEntries(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec) error { + iterator := sdk.KVStorePrefixIterator(store, types.UnbondingDelegationKey) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + ubd := types.MustUnmarshalUBD(cdc, iterator.Value()) + + entriesAtSameCreationHeight := make(map[int64][]types.UnbondingDelegationEntry) + for _, ubdEntry := range ubd.Entries { + entriesAtSameCreationHeight[ubdEntry.CreationHeight] = append(entriesAtSameCreationHeight[ubdEntry.CreationHeight], ubdEntry) + } + + creationHeights := make([]int64, 0, len(entriesAtSameCreationHeight)) + for k := range entriesAtSameCreationHeight { + creationHeights = append(creationHeights, k) + } + + sort.Slice(creationHeights, func(i, j int) bool { return creationHeights[i] < creationHeights[j] }) + + ubd.Entries = make([]types.UnbondingDelegationEntry, 0, len(creationHeights)) + + for _, h := range creationHeights { + ubdEntry := types.UnbondingDelegationEntry{ + Balance: sdk.ZeroInt(), + InitialBalance: sdk.ZeroInt(), + } + for _, entry := range entriesAtSameCreationHeight[h] { + ubdEntry.Balance = ubdEntry.Balance.Add(entry.Balance) + ubdEntry.InitialBalance = ubdEntry.InitialBalance.Add(entry.InitialBalance) + ubdEntry.CreationHeight = entry.CreationHeight + ubdEntry.CompletionTime = entry.CompletionTime + } + ubd.Entries = append(ubd.Entries, ubdEntry) + } + + // set the new ubd to the store + setUBDToStore(ctx, store, cdc, ubd) + } + return nil +} + +func setUBDToStore(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, ubd types.UnbondingDelegation) { + delegatorAddress := sdk.MustAccAddressFromBech32(ubd.DelegatorAddress) + + bz := types.MustMarshalUBD(cdc, ubd) + + addr, err := sdk.ValAddressFromBech32(ubd.ValidatorAddress) + if err != nil { + panic(err) + } + + key := types.GetUBDKey(delegatorAddress, addr) + + store.Set(key, bz) +} + +// Peforms the in-place store migration for adding LSM support to v0.45.16-ics, including: +// - Adding params ValidatorBondFactor, GlobalLiquidStakingCap, ValidatorLiquidStakingCap +// - Setting each validator's ValidatorBondShares and LiquidShares to 0 +// - Setting each delegation's ValidatorBond field to false +// - Calculating the total liquid staked by summing the delegations from ICA accounts +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec, k keeper, paramstore subspace) error { + store := ctx.KVStore(storeKey) + + ctx.Logger().Info("Staking LSM Migration: Migrating param store") + MigrateParamsStore(ctx, paramstore) + + ctx.Logger().Info("Staking LSM Migration: Migrating validators") + MigrateValidators(ctx, k) + + ctx.Logger().Info("Staking LSM Migration: Migrating delegations") + MigrateDelegations(ctx, k) + + ctx.Logger().Info("Staking LSM Migration: Migrating UBD entries") + if err := MigrateUBDEntries(ctx, store, cdc); err != nil { + return err + } + + ctx.Logger().Info("Staking LSM Migration: Calculating total liquid staked") + return k.RefreshTotalLiquidStaked(ctx) +} diff --git a/x/staking/migrations/v3/test_helpers.go b/x/staking/migrations/v3/test_helpers.go new file mode 100644 index 000000000000..4af123038cbc --- /dev/null +++ b/x/staking/migrations/v3/test_helpers.go @@ -0,0 +1,83 @@ +// This file contains utility testing functions from SDK 47 that are required for the UBD migration unit test +package v3 + +import ( + "bytes" + "encoding/hex" + "fmt" + "strconv" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// CreateIncrementalAccounts is a strategy used by addTestAddrs() in order to generated addresses in ascending order. +func CreateIncrementalAccounts(accNum int) []sdk.AccAddress { + var addresses []sdk.AccAddress + var buffer bytes.Buffer + + // start at 100 so we can make up to 999 test addresses with valid test addresses + for i := 100; i < (accNum + 100); i++ { + numString := strconv.Itoa(i) + buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string + + buffer.WriteString(numString) // adding on final two digits to make addresses unique + res, _ := AccAddressFromHexUnsafe(buffer.String()) + bech := res.String() + addr, _ := CheckHexConversion(buffer.String(), bech) + + addresses = append(addresses, addr) + buffer.Reset() + } + + return addresses +} + +func CheckHexConversion(addr string, bech string) (sdk.AccAddress, error) { + res, err := AccAddressFromHexUnsafe(addr) + if err != nil { + return nil, err + } + bechexpected := res.String() + if bech != bechexpected { + return nil, fmt.Errorf("bech encoding doesn't match reference") + } + + bechres, err := sdk.AccAddressFromBech32(bech) + if err != nil { + return nil, err + } + if !bytes.Equal(bechres, res) { + return nil, err + } + + return res, nil +} + +// ConvertAddrsToValAddrs converts the provided addresses to ValAddress. +func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { + valAddrs := make([]sdk.ValAddress, len(addrs)) + + for i, addr := range addrs { + valAddrs[i] = sdk.ValAddress(addr) + } + + return valAddrs +} + +// AccAddressFromHexUnsafe creates an AccAddress from a HEX-encoded string. +// +// Note, this function is considered unsafe as it may produce an AccAddress from +// otherwise invalid input, such as a transaction hash. Please use +// AccAddressFromBech32. +func AccAddressFromHexUnsafe(address string) (addr sdk.AccAddress, err error) { + bz, err := addressBytesFromHexString(address) + return sdk.AccAddress(bz), err +} + +func addressBytesFromHexString(address string) ([]byte, error) { + if len(address) == 0 { + return nil, fmt.Errorf("empty hex address") + } + + return hex.DecodeString(address) +} diff --git a/x/staking/migrations/v3/types/keys.go b/x/staking/migrations/v3/types/keys.go new file mode 100644 index 000000000000..dce3e808629a --- /dev/null +++ b/x/staking/migrations/v3/types/keys.go @@ -0,0 +1,37 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +const ( + // ModuleName is the name of the staking module + ModuleName = "staking" + + // StoreKey is the string store representation + StoreKey = ModuleName +) + +var ( + ValidatorsKey = []byte{0x21} // prefix for each key to a validator + DelegationKey = []byte{0x31} // key for a delegation + ParamsKey = []byte{0x51} // prefix for parameters for module x/staking +) + +// GetValidatorKey creates the key for the validator with address +// VALUE: staking/Validator +func GetValidatorKey(operatorAddr sdk.ValAddress) []byte { + return append(ValidatorsKey, address.MustLengthPrefix(operatorAddr)...) +} + +// GetDelegationKey creates the key for delegator bond with validator +// VALUE: staking/Delegation +func GetDelegationKey(delAddr sdk.AccAddress, valAddr sdk.ValAddress) []byte { + return append(GetDelegationsKey(delAddr), address.MustLengthPrefix(valAddr)...) +} + +// GetDelegationsKey creates the prefix for a delegator for all validators +func GetDelegationsKey(delAddr sdk.AccAddress) []byte { + return append(DelegationKey, address.MustLengthPrefix(delAddr)...) +} diff --git a/x/staking/migrations/v3/types/staking.go b/x/staking/migrations/v3/types/staking.go new file mode 100644 index 000000000000..4461b8187e08 --- /dev/null +++ b/x/staking/migrations/v3/types/staking.go @@ -0,0 +1,88 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "gopkg.in/yaml.v2" +) + +// String implements the Stringer interface for a Commission object. +func (c Commission) String() string { + out, _ := yaml.Marshal(c) + return string(out) +} + +// String implements the Stringer interface for a CommissionRates object. +func (cr CommissionRates) String() string { + out, _ := yaml.Marshal(cr) + return string(out) +} + +// String implements the Stringer interface for a Validator object. +func (v Validator) String() string { + out, _ := yaml.Marshal(v) + return string(out) +} + +// String returns a human readable string representation of a Delegation. +func (d Delegation) String() string { + out, _ := yaml.Marshal(d) + return string(out) +} + +// String implements the Stringer interface for a Description object. +func (d Description) String() string { + out, _ := yaml.Marshal(d) + return string(out) +} + +// String returns a human readable string representation of the parameters. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} + +// unmarshal the current staking params value from store key or panic +func MustUnmarshalParams(cdc *codec.LegacyAmino, value []byte) Params { + params, err := UnmarshalParams(cdc, value) + if err != nil { + panic(err) + } + + return params +} + +// unmarshal the current staking params value from store key +func UnmarshalParams(cdc *codec.LegacyAmino, value []byte) (params Params, err error) { + err = cdc.Unmarshal(value, ¶ms) + if err != nil { + return + } + + return +} + +func (v Validator) GetOperator() sdk.ValAddress { + if v.OperatorAddress == "" { + return nil + } + addr, err := sdk.ValAddressFromBech32(v.OperatorAddress) + if err != nil { + panic(err) + } + return addr +} + +func (d Delegation) GetDelegatorAddr() sdk.AccAddress { + delAddr := sdk.MustAccAddressFromBech32(d.DelegatorAddress) + + return delAddr +} + +func (d Delegation) GetValidatorAddr() sdk.ValAddress { + addr, err := sdk.ValAddressFromBech32(d.ValidatorAddress) + if err != nil { + panic(err) + } + return addr +} diff --git a/x/staking/migrations/v3/types/staking.pb.go b/x/staking/migrations/v3/types/staking.pb.go new file mode 100644 index 000000000000..9ac7274adca2 --- /dev/null +++ b/x/staking/migrations/v3/types/staking.pb.go @@ -0,0 +1,3445 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/staking/v1beta1/staking.proto + +package types + +import ( + bytes "bytes" + compress_gzip "compress/gzip" + fmt "fmt" + types1 "github.com/cosmos/cosmos-sdk/codec/types" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/gogo/protobuf/gogoproto" + github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/regen-network/cosmos-proto" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + io_ioutil "io/ioutil" + math "math" + math_bits "math/bits" + reflect "reflect" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// BondStatus is the status of a validator. +type BondStatus int32 + +const ( + // UNSPECIFIED defines an invalid validator status. + Unspecified BondStatus = 0 + // UNBONDED defines a validator that is not bonded. + Unbonded BondStatus = 1 + // UNBONDING defines a validator that is unbonding. + Unbonding BondStatus = 2 + // BONDED defines a validator that is bonded. + Bonded BondStatus = 3 +) + +var BondStatus_name = map[int32]string{ + 0: "BOND_STATUS_UNSPECIFIED", + 1: "BOND_STATUS_UNBONDED", + 2: "BOND_STATUS_UNBONDING", + 3: "BOND_STATUS_BONDED", +} + +var BondStatus_value = map[string]int32{ + "BOND_STATUS_UNSPECIFIED": 0, + "BOND_STATUS_UNBONDED": 1, + "BOND_STATUS_UNBONDING": 2, + "BOND_STATUS_BONDED": 3, +} + +func (x BondStatus) String() string { + return proto.EnumName(BondStatus_name, int32(x)) +} + +func (BondStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{0} +} + +// CommissionRates defines the initial commission rates to be used for creating +// a validator. +type CommissionRates struct { + // rate is the commission rate charged to delegators, as a fraction. + Rate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=rate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"rate"` + // max_rate defines the maximum commission rate which validator can ever charge, as a fraction. + MaxRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=max_rate,json=maxRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_rate" yaml:"max_rate"` + // max_change_rate defines the maximum daily increase of the validator commission, as a fraction. + MaxChangeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=max_change_rate,json=maxChangeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_change_rate" yaml:"max_change_rate"` +} + +func (m *CommissionRates) Reset() { *m = CommissionRates{} } +func (*CommissionRates) ProtoMessage() {} +func (*CommissionRates) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{1} +} +func (m *CommissionRates) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CommissionRates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CommissionRates.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CommissionRates) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommissionRates.Merge(m, src) +} +func (m *CommissionRates) XXX_Size() int { + return m.Size() +} +func (m *CommissionRates) XXX_DiscardUnknown() { + xxx_messageInfo_CommissionRates.DiscardUnknown(m) +} + +var xxx_messageInfo_CommissionRates proto.InternalMessageInfo + +// Commission defines commission parameters for a given validator. +type Commission struct { + // commission_rates defines the initial commission rates to be used for creating a validator. + CommissionRates `protobuf:"bytes,1,opt,name=commission_rates,json=commissionRates,proto3,embedded=commission_rates" json:"commission_rates"` + // update_time is the last time the commission rate was changed. + UpdateTime time.Time `protobuf:"bytes,2,opt,name=update_time,json=updateTime,proto3,stdtime" json:"update_time" yaml:"update_time"` +} + +func (m *Commission) Reset() { *m = Commission{} } +func (*Commission) ProtoMessage() {} +func (*Commission) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{2} +} +func (m *Commission) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Commission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Commission.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Commission) XXX_Merge(src proto.Message) { + xxx_messageInfo_Commission.Merge(m, src) +} +func (m *Commission) XXX_Size() int { + return m.Size() +} +func (m *Commission) XXX_DiscardUnknown() { + xxx_messageInfo_Commission.DiscardUnknown(m) +} + +var xxx_messageInfo_Commission proto.InternalMessageInfo + +func (m *Commission) GetUpdateTime() time.Time { + if m != nil { + return m.UpdateTime + } + return time.Time{} +} + +// Description defines a validator description. +type Description struct { + // moniker defines a human-readable name for the validator. + Moniker string `protobuf:"bytes,1,opt,name=moniker,proto3" json:"moniker,omitempty"` + // identity defines an optional identity signature (ex. UPort or Keybase). + Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + // website defines an optional website link. + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + // security_contact defines an optional email for security contact. + SecurityContact string `protobuf:"bytes,4,opt,name=security_contact,json=securityContact,proto3" json:"security_contact,omitempty" yaml:"security_contact"` + // details define other optional details. + Details string `protobuf:"bytes,5,opt,name=details,proto3" json:"details,omitempty"` +} + +func (m *Description) Reset() { *m = Description{} } +func (*Description) ProtoMessage() {} +func (*Description) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{3} +} +func (m *Description) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Description) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Description.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Description) XXX_Merge(src proto.Message) { + xxx_messageInfo_Description.Merge(m, src) +} +func (m *Description) XXX_Size() int { + return m.Size() +} +func (m *Description) XXX_DiscardUnknown() { + xxx_messageInfo_Description.DiscardUnknown(m) +} + +var xxx_messageInfo_Description proto.InternalMessageInfo + +func (m *Description) GetMoniker() string { + if m != nil { + return m.Moniker + } + return "" +} + +func (m *Description) GetIdentity() string { + if m != nil { + return m.Identity + } + return "" +} + +func (m *Description) GetWebsite() string { + if m != nil { + return m.Website + } + return "" +} + +func (m *Description) GetSecurityContact() string { + if m != nil { + return m.SecurityContact + } + return "" +} + +func (m *Description) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +// Validator defines a validator, together with the total amount of the +// Validator's bond shares and their exchange rate to coins. Slashing results in +// a decrease in the exchange rate, allowing correct calculation of future +// undelegations without iterating over delegators. When coins are delegated to +// this validator, the validator is credited with a delegation whose number of +// bond shares is based on the amount of coins delegated divided by the current +// exchange rate. Voting power can be calculated as total bonded shares +// multiplied by exchange rate. +type Validator struct { + // operator_address defines the address of the validator's operator; bech encoded in JSON. + OperatorAddress string `protobuf:"bytes,1,opt,name=operator_address,json=operatorAddress,proto3" json:"operator_address,omitempty" yaml:"operator_address"` + // consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. + ConsensusPubkey *types1.Any `protobuf:"bytes,2,opt,name=consensus_pubkey,json=consensusPubkey,proto3" json:"consensus_pubkey,omitempty" yaml:"consensus_pubkey"` + // jailed defined whether the validator has been jailed from bonded status or not. + Jailed bool `protobuf:"varint,3,opt,name=jailed,proto3" json:"jailed,omitempty"` + // status is the validator status (bonded/unbonding/unbonded). + Status BondStatus `protobuf:"varint,4,opt,name=status,proto3,enum=cosmos.staking.v1beta1.BondStatus" json:"status,omitempty"` + // tokens define the delegated tokens (incl. self-delegation). + Tokens github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=tokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"tokens"` + // delegator_shares defines total shares issued to a validator's delegators. + DelegatorShares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=delegator_shares,json=delegatorShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"delegator_shares" yaml:"delegator_shares"` + // description defines the description terms for the validator. + Description Description `protobuf:"bytes,7,opt,name=description,proto3" json:"description"` + // unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. + UnbondingHeight int64 `protobuf:"varint,8,opt,name=unbonding_height,json=unbondingHeight,proto3" json:"unbonding_height,omitempty" yaml:"unbonding_height"` + // unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. + UnbondingTime time.Time `protobuf:"bytes,9,opt,name=unbonding_time,json=unbondingTime,proto3,stdtime" json:"unbonding_time" yaml:"unbonding_time"` + // commission defines the commission parameters. + Commission Commission `protobuf:"bytes,10,opt,name=commission,proto3" json:"commission"` + // min_self_delegation is the validator's self declared minimum self delegation. + MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation" yaml:"min_self_delegation"` + // strictly positive if this validator's unbonding has been stopped by external modules + UnbondingOnHoldRefCount int64 `protobuf:"varint,12,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"` + // list of unbonding ids, each uniquely identifing an unbonding of this validator + UnbondingIds []uint64 `protobuf:"varint,13,rep,packed,name=unbonding_ids,json=unbondingIds,proto3" json:"unbonding_ids,omitempty"` +} + +func (m *Validator) Reset() { *m = Validator{} } +func (*Validator) ProtoMessage() {} +func (*Validator) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{4} +} +func (m *Validator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Validator.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) +} +func (m *Validator) XXX_Size() int { + return m.Size() +} +func (m *Validator) XXX_DiscardUnknown() { + xxx_messageInfo_Validator.DiscardUnknown(m) +} + +var xxx_messageInfo_Validator proto.InternalMessageInfo + +// Delegation represents the bond with tokens held by an account. It is +// owned by one delegator, and is associated with the voting power of one +// validator. +type Delegation struct { + // delegator_address is the bech32-encoded address of the delegator. + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` + // validator_address is the bech32-encoded address of the validator. + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"` + // shares define the delegation shares received. + Shares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=shares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"shares"` +} + +func (m *Delegation) Reset() { *m = Delegation{} } +func (*Delegation) ProtoMessage() {} +func (*Delegation) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{10} +} +func (m *Delegation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Delegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Delegation.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Delegation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Delegation.Merge(m, src) +} +func (m *Delegation) XXX_Size() int { + return m.Size() +} +func (m *Delegation) XXX_DiscardUnknown() { + xxx_messageInfo_Delegation.DiscardUnknown(m) +} + +var xxx_messageInfo_Delegation proto.InternalMessageInfo + +// Params defines the parameters for the staking module. +type Params struct { + // unbonding_time is the time duration of unbonding. + UnbondingTime time.Duration `protobuf:"bytes,1,opt,name=unbonding_time,json=unbondingTime,proto3,stdduration" json:"unbonding_time" yaml:"unbonding_time"` + // max_validators is the maximum number of validators. + MaxValidators uint32 `protobuf:"varint,2,opt,name=max_validators,json=maxValidators,proto3" json:"max_validators,omitempty" yaml:"max_validators"` + // max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). + MaxEntries uint32 `protobuf:"varint,3,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty" yaml:"max_entries"` + // historical_entries is the number of historical entries to persist. + HistoricalEntries uint32 `protobuf:"varint,4,opt,name=historical_entries,json=historicalEntries,proto3" json:"historical_entries,omitempty" yaml:"historical_entries"` + // bond_denom defines the bondable coin denomination. + BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty" yaml:"bond_denom"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{15} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetUnbondingTime() time.Duration { + if m != nil { + return m.UnbondingTime + } + return 0 +} + +func (m *Params) GetMaxValidators() uint32 { + if m != nil { + return m.MaxValidators + } + return 0 +} + +func (m *Params) GetMaxEntries() uint32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *Params) GetHistoricalEntries() uint32 { + if m != nil { + return m.HistoricalEntries + } + return 0 +} + +func (m *Params) GetBondDenom() string { + if m != nil { + return m.BondDenom + } + return "" +} + +func init() { + proto.RegisterEnum("cosmos.staking.v1beta1.BondStatus.v3", BondStatus_name, BondStatus_value) + proto.RegisterType((*CommissionRates)(nil), "cosmos.staking.v1beta1.CommissionRates.v3") + proto.RegisterType((*Commission)(nil), "cosmos.staking.v1beta1.Commission.v3") + proto.RegisterType((*Description)(nil), "cosmos.staking.v1beta1.Description.v3") + proto.RegisterType((*Validator)(nil), "cosmos.staking.v1beta1.Validator.v3") + proto.RegisterType((*Delegation)(nil), "cosmos.staking.v1beta1.Delegation.v3") + proto.RegisterType((*Params)(nil), "cosmos.staking.v1beta1.Params.v3") +} + +func init() { + proto.RegisterFile("cosmos/staking/v1beta1/staking.proto", fileDescriptor_64c30c6cf92913c9) +} + +var fileDescriptor_64c30c6cf92913c9 = []byte{ + // 2021 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4f, 0x6c, 0x23, 0x57, + 0x19, 0xf7, 0xd8, 0xae, 0xe3, 0x7c, 0x4e, 0xe2, 0xe4, 0x6d, 0x76, 0xd7, 0xf1, 0x2e, 0xb6, 0x77, + 0x5a, 0x95, 0xb0, 0x6a, 0x1d, 0x36, 0xad, 0x8a, 0x88, 0x90, 0x68, 0x1c, 0x3b, 0x8d, 0xd5, 0x6d, + 0x36, 0x8c, 0x9d, 0x54, 0x40, 0xc5, 0x68, 0x3c, 0xf3, 0xe2, 0x0c, 0xb1, 0x67, 0xcc, 0xbc, 0xe7, + 0x6d, 0x2c, 0xf5, 0xc0, 0xb1, 0x84, 0x03, 0xe5, 0xd6, 0x4b, 0xa4, 0x95, 0x7a, 0x42, 0x42, 0xe2, + 0x82, 0xb8, 0x72, 0x2d, 0x70, 0x59, 0x6e, 0x08, 0x21, 0x83, 0x76, 0x2f, 0x88, 0x03, 0xaa, 0x72, + 0x40, 0xdc, 0x40, 0xef, 0xcf, 0xfc, 0xc9, 0x38, 0xd9, 0xdd, 0xac, 0x2a, 0x54, 0x89, 0x5e, 0x76, + 0xfd, 0xbe, 0xf7, 0x7d, 0xbf, 0xef, 0x7d, 0xff, 0xdf, 0x9b, 0xc0, 0x4b, 0xa6, 0x4b, 0xfa, 0x2e, + 0x59, 0x21, 0xd4, 0x38, 0xb4, 0x9d, 0xee, 0xca, 0xfd, 0x3b, 0x1d, 0x4c, 0x8d, 0x3b, 0xfe, 0xba, + 0x3a, 0xf0, 0x5c, 0xea, 0xa2, 0x6b, 0x82, 0xab, 0xea, 0x53, 0x25, 0x57, 0x71, 0xb1, 0xeb, 0x76, + 0x5d, 0xce, 0xb2, 0xc2, 0x7e, 0x09, 0xee, 0xe2, 0x52, 0xd7, 0x75, 0xbb, 0x3d, 0xbc, 0xc2, 0x57, + 0x9d, 0xe1, 0xfe, 0x8a, 0xe1, 0x8c, 0xe4, 0x56, 0x29, 0xbe, 0x65, 0x0d, 0x3d, 0x83, 0xda, 0xae, + 0x23, 0xf7, 0xcb, 0xf1, 0x7d, 0x6a, 0xf7, 0x31, 0xa1, 0x46, 0x7f, 0xe0, 0x63, 0x8b, 0x93, 0xe8, + 0x42, 0xa9, 0x3c, 0x96, 0xc4, 0x96, 0xa6, 0x74, 0x0c, 0x82, 0x03, 0x3b, 0x4c, 0xd7, 0xf6, 0xb1, + 0x6f, 0x52, 0xec, 0x58, 0xd8, 0xeb, 0xdb, 0x0e, 0x5d, 0xa1, 0xa3, 0x01, 0x26, 0xe2, 0x5f, 0xb9, + 0x7b, 0x23, 0xb2, 0x6b, 0x74, 0x4c, 0x3b, 0xba, 0xa9, 0xfe, 0x44, 0x81, 0xb9, 0x2d, 0x9b, 0x50, + 0xd7, 0xb3, 0x4d, 0xa3, 0xd7, 0x74, 0xf6, 0x5d, 0xf4, 0x06, 0x64, 0x0e, 0xb0, 0x61, 0x61, 0xaf, + 0xa0, 0x54, 0x94, 0xe5, 0xdc, 0x6a, 0xa1, 0x1a, 0x02, 0x54, 0x85, 0xec, 0x16, 0xdf, 0xaf, 0xa5, + 0x3f, 0x1d, 0x97, 0x13, 0x9a, 0xe4, 0x46, 0xdf, 0x86, 0xcc, 0x7d, 0xa3, 0x47, 0x30, 0x2d, 0x24, + 0x2b, 0xa9, 0xe5, 0xdc, 0xea, 0xad, 0xea, 0xf9, 0xbe, 0xad, 0xee, 0x19, 0x3d, 0xdb, 0x32, 0xa8, + 0x1b, 0x00, 0x08, 0x31, 0xf5, 0x57, 0x49, 0xc8, 0x6f, 0xb8, 0xfd, 0xbe, 0x4d, 0x88, 0xed, 0x3a, + 0x9a, 0x41, 0x31, 0x41, 0x35, 0x48, 0x7b, 0x06, 0xc5, 0xfc, 0x28, 0xd3, 0xb5, 0x2a, 0xe3, 0xff, + 0xf3, 0xb8, 0xfc, 0x72, 0xd7, 0xa6, 0x07, 0xc3, 0x4e, 0xd5, 0x74, 0xfb, 0xd2, 0x53, 0xf2, 0xbf, + 0x57, 0x89, 0x75, 0x28, 0xed, 0xab, 0x63, 0x53, 0xe3, 0xb2, 0xe8, 0x3d, 0xc8, 0xf6, 0x8d, 0x23, + 0x9d, 0xe3, 0x24, 0x39, 0xce, 0xfa, 0xe5, 0x70, 0x4e, 0xc7, 0xe5, 0xfc, 0xc8, 0xe8, 0xf7, 0xd6, + 0x54, 0x1f, 0x47, 0xd5, 0xa6, 0xfa, 0xc6, 0x11, 0x3b, 0x22, 0x1a, 0x40, 0x9e, 0x51, 0xcd, 0x03, + 0xc3, 0xe9, 0x62, 0xa1, 0x24, 0xc5, 0x95, 0x6c, 0x5d, 0x5a, 0xc9, 0xb5, 0x50, 0x49, 0x04, 0x4e, + 0xd5, 0x66, 0xfb, 0xc6, 0xd1, 0x06, 0x27, 0x30, 0x8d, 0x6b, 0xd9, 0x8f, 0x1f, 0x94, 0x13, 0x7f, + 0x7f, 0x50, 0x56, 0xd4, 0x3f, 0x2a, 0x00, 0xa1, 0xc7, 0xd0, 0x7b, 0x30, 0x6f, 0x06, 0x2b, 0x2e, + 0x4b, 0x64, 0x0c, 0xbf, 0x7a, 0x51, 0x2c, 0x62, 0xfe, 0xae, 0x65, 0xd9, 0xa1, 0x1f, 0x8e, 0xcb, + 0x8a, 0x96, 0x37, 0x63, 0xa1, 0xf8, 0x3e, 0xe4, 0x86, 0x03, 0xcb, 0xa0, 0x58, 0x67, 0xa9, 0xcb, + 0x3d, 0x99, 0x5b, 0x2d, 0x56, 0x45, 0x5e, 0x57, 0xfd, 0xbc, 0xae, 0xb6, 0xfd, 0xbc, 0xae, 0x95, + 0x18, 0xd6, 0xe9, 0xb8, 0x8c, 0x84, 0x59, 0x11, 0x61, 0xf5, 0xa3, 0xbf, 0x96, 0x15, 0x0d, 0x04, + 0x85, 0x09, 0x44, 0x6c, 0xfa, 0x9d, 0x02, 0xb9, 0x3a, 0x26, 0xa6, 0x67, 0x0f, 0x58, 0xf9, 0xa0, + 0x02, 0x4c, 0xf5, 0x5d, 0xc7, 0x3e, 0x94, 0xf9, 0x38, 0xad, 0xf9, 0x4b, 0x54, 0x84, 0xac, 0x6d, + 0x61, 0x87, 0xda, 0x74, 0x24, 0xe2, 0xaa, 0x05, 0x6b, 0x26, 0xf5, 0x3e, 0xee, 0x10, 0xdb, 0x8f, + 0x86, 0xe6, 0x2f, 0xd1, 0x26, 0xcc, 0x13, 0x6c, 0x0e, 0x3d, 0x9b, 0x8e, 0x74, 0xd3, 0x75, 0xa8, + 0x61, 0xd2, 0x42, 0x9a, 0x07, 0xec, 0xc6, 0xe9, 0xb8, 0x7c, 0x5d, 0x9c, 0x35, 0xce, 0xa1, 0x6a, + 0x79, 0x9f, 0xb4, 0x21, 0x28, 0x4c, 0x83, 0x85, 0xa9, 0x61, 0xf7, 0x48, 0xe1, 0x05, 0xa1, 0x41, + 0x2e, 0x23, 0xb6, 0xfc, 0x2c, 0x0b, 0xd3, 0x41, 0xb6, 0x33, 0xcd, 0xee, 0x00, 0x7b, 0xec, 0xb7, + 0x6e, 0x58, 0x96, 0x87, 0x09, 0x91, 0x79, 0x1d, 0xd1, 0x1c, 0xe7, 0x50, 0xb5, 0xbc, 0x4f, 0x5a, + 0x17, 0x14, 0x44, 0x59, 0x98, 0x1d, 0x82, 0x1d, 0x32, 0x24, 0xfa, 0x60, 0xd8, 0x39, 0xc4, 0x23, + 0x19, 0x8d, 0xc5, 0x89, 0x68, 0xac, 0x3b, 0xa3, 0xda, 0x6b, 0x21, 0x7a, 0x5c, 0x4e, 0xfd, 0xfd, + 0xaf, 0x5f, 0x5d, 0x94, 0xa9, 0x61, 0x7a, 0xa3, 0x01, 0x75, 0xab, 0x3b, 0xc3, 0xce, 0xdb, 0x78, + 0xc4, 0xc2, 0x2f, 0x59, 0x77, 0x38, 0x27, 0xba, 0x06, 0x99, 0x1f, 0x1a, 0x76, 0x0f, 0x5b, 0xdc, + 0xa1, 0x59, 0x4d, 0xae, 0xd0, 0x1a, 0x64, 0x08, 0x35, 0xe8, 0x90, 0x70, 0x2f, 0xce, 0xad, 0xaa, + 0x17, 0xa5, 0x5a, 0xcd, 0x75, 0xac, 0x16, 0xe7, 0xd4, 0xa4, 0x04, 0xda, 0x84, 0x0c, 0x75, 0x0f, + 0xb1, 0x23, 0x5d, 0x78, 0xa9, 0xfa, 0x6e, 0x3a, 0x54, 0x93, 0xd2, 0xcc, 0x23, 0x16, 0xee, 0xe1, + 0x2e, 0x77, 0x1c, 0x39, 0x30, 0x3c, 0x4c, 0x0a, 0x19, 0x8e, 0xd8, 0xbc, 0x74, 0x11, 0x4a, 0x4f, + 0xc5, 0xf1, 0x54, 0x2d, 0x1f, 0x90, 0x5a, 0x9c, 0x82, 0xde, 0x86, 0x9c, 0x15, 0x26, 0x6a, 0x61, + 0x8a, 0x87, 0xe0, 0xc5, 0x8b, 0xcc, 0x8f, 0xe4, 0xb4, 0xec, 0x7b, 0x51, 0x69, 0x96, 0x1c, 0x43, + 0xa7, 0xe3, 0x3a, 0x96, 0xed, 0x74, 0xf5, 0x03, 0x6c, 0x77, 0x0f, 0x68, 0x21, 0x5b, 0x51, 0x96, + 0x53, 0xd1, 0xe4, 0x88, 0x73, 0xa8, 0x5a, 0x3e, 0x20, 0x6d, 0x71, 0x0a, 0xb2, 0x60, 0x2e, 0xe4, + 0xe2, 0x85, 0x3a, 0xfd, 0xd4, 0x42, 0xbd, 0x25, 0x0b, 0xf5, 0x6a, 0x5c, 0x4b, 0x58, 0xab, 0xb3, + 0x01, 0x91, 0x89, 0xa1, 0x2d, 0x80, 0xb0, 0x3d, 0x14, 0x80, 0x6b, 0x50, 0x9f, 0xde, 0x63, 0xa4, + 0xe1, 0x11, 0x59, 0xf4, 0x01, 0x5c, 0xe9, 0xdb, 0x8e, 0x4e, 0x70, 0x6f, 0x5f, 0x97, 0x0e, 0x66, + 0x90, 0x39, 0x1e, 0xbd, 0xbb, 0x97, 0xcb, 0x87, 0xd3, 0x71, 0xb9, 0x28, 0x5b, 0xe8, 0x24, 0xa4, + 0xaa, 0x2d, 0xf4, 0x6d, 0xa7, 0x85, 0x7b, 0xfb, 0xf5, 0x80, 0x86, 0xbe, 0x05, 0x37, 0x42, 0x6b, + 0x5d, 0x47, 0x3f, 0x70, 0x7b, 0x96, 0xee, 0xe1, 0x7d, 0xdd, 0x74, 0x87, 0x0e, 0x2d, 0xcc, 0xb0, + 0x00, 0x68, 0xd7, 0x03, 0x96, 0x7b, 0xce, 0x96, 0xdb, 0xb3, 0x34, 0xbc, 0xbf, 0xc1, 0xb6, 0xd1, + 0x8b, 0x10, 0xba, 0x45, 0xb7, 0x2d, 0x52, 0x98, 0xad, 0xa4, 0x96, 0xd3, 0xda, 0x4c, 0x40, 0x6c, + 0x5a, 0x64, 0x6d, 0xe6, 0xc3, 0x07, 0xe5, 0x84, 0xec, 0x08, 0x09, 0xf5, 0x0d, 0x98, 0xd9, 0x33, + 0x7a, 0xb2, 0x92, 0x31, 0x41, 0x37, 0x61, 0xda, 0xf0, 0x17, 0x05, 0xa5, 0x92, 0x5a, 0x9e, 0xd6, + 0x42, 0x82, 0xe8, 0x24, 0x3f, 0xfe, 0x4b, 0x45, 0x51, 0x7f, 0xa9, 0x40, 0xa6, 0xbe, 0xb7, 0x63, + 0xd8, 0x1e, 0x6a, 0xc2, 0x42, 0x98, 0x9c, 0x67, 0xfb, 0xc8, 0xcd, 0xd3, 0x71, 0xb9, 0x10, 0xcf, + 0xdf, 0xa0, 0x91, 0x84, 0x35, 0xe2, 0x77, 0x92, 0x26, 0x2c, 0xdc, 0xf7, 0xdb, 0x53, 0x00, 0x95, + 0x8c, 0x43, 0x4d, 0xb0, 0xa8, 0xda, 0x7c, 0x40, 0x93, 0x50, 0x31, 0x33, 0x1b, 0x30, 0x25, 0x4e, + 0x4b, 0xd0, 0x1a, 0xbc, 0x30, 0x60, 0x3f, 0xb8, 0x75, 0xb9, 0xd5, 0xd2, 0x85, 0xf5, 0xc1, 0xf9, + 0x65, 0x86, 0x08, 0x11, 0xf5, 0xe7, 0x49, 0x80, 0xfa, 0xde, 0x5e, 0xdb, 0xb3, 0x07, 0x3d, 0x4c, + 0x3f, 0x4f, 0xcb, 0xdb, 0x70, 0x35, 0x34, 0x8b, 0x78, 0x66, 0xcc, 0xfa, 0xca, 0xe9, 0xb8, 0x7c, + 0x33, 0x6e, 0x7d, 0x84, 0x4d, 0xd5, 0xae, 0x04, 0xf4, 0x96, 0x67, 0x9e, 0x8b, 0x6a, 0x11, 0x1a, + 0xa0, 0xa6, 0x2e, 0x46, 0x8d, 0xb0, 0x45, 0x51, 0xeb, 0x84, 0x9e, 0xef, 0xda, 0x16, 0xe4, 0x42, + 0x97, 0x10, 0x54, 0x87, 0x2c, 0x95, 0xbf, 0xa5, 0x87, 0xd5, 0x8b, 0x3d, 0xec, 0x8b, 0x49, 0x2f, + 0x07, 0x92, 0xea, 0xbf, 0x15, 0x80, 0x48, 0x59, 0x7c, 0x21, 0x53, 0x8c, 0x4d, 0x0b, 0xd9, 0xdb, + 0x53, 0xcf, 0x75, 0x1b, 0x94, 0xd2, 0x31, 0x7f, 0xfe, 0x34, 0x09, 0x57, 0x76, 0xfd, 0x82, 0xfd, + 0xc2, 0xfb, 0x60, 0x07, 0xa6, 0xb0, 0x43, 0x3d, 0x9b, 0x3b, 0x81, 0x45, 0xfb, 0xeb, 0x17, 0x45, + 0xfb, 0x1c, 0x9b, 0x1a, 0x0e, 0xf5, 0x46, 0x32, 0xf6, 0x3e, 0x4c, 0xcc, 0x1b, 0x9f, 0xa5, 0xa0, + 0x70, 0x91, 0x24, 0xda, 0x80, 0xbc, 0xe9, 0x61, 0x4e, 0xf0, 0x47, 0x94, 0xc2, 0x47, 0x54, 0x31, + 0xbc, 0xbc, 0xc6, 0x18, 0x54, 0x6d, 0xce, 0xa7, 0xc8, 0x01, 0xd5, 0x05, 0x76, 0xb3, 0x64, 0x69, + 0xc7, 0xb8, 0x9e, 0xf1, 0x2a, 0xa9, 0xca, 0x09, 0xe5, 0x2b, 0x39, 0x0b, 0x20, 0x46, 0xd4, 0x5c, + 0x48, 0xe5, 0x33, 0xea, 0x47, 0x90, 0xb7, 0x1d, 0x9b, 0xda, 0x46, 0x4f, 0xef, 0x18, 0x3d, 0xc3, + 0x31, 0x9f, 0xe7, 0x62, 0x2e, 0xa6, 0x8a, 0x54, 0x1b, 0x83, 0x53, 0xb5, 0x39, 0x49, 0xa9, 0x09, + 0x02, 0xda, 0x82, 0x29, 0x5f, 0x55, 0xfa, 0xb9, 0x2e, 0x34, 0xbe, 0x38, 0xba, 0x05, 0x33, 0xd1, + 0xd1, 0xc2, 0xef, 0x47, 0x69, 0x2d, 0x17, 0x99, 0x2c, 0x4f, 0x9b, 0x5d, 0x99, 0x27, 0xce, 0xae, + 0xc8, 0x25, 0xf5, 0x9f, 0x29, 0x58, 0xd0, 0xb0, 0xf5, 0x65, 0xac, 0x2f, 0x17, 0xeb, 0x77, 0x00, + 0x44, 0x3f, 0x61, 0x1d, 0xfc, 0x39, 0xc2, 0xcd, 0x3a, 0xd2, 0xb4, 0x40, 0xa8, 0x13, 0xfa, 0xbf, + 0x0c, 0xf8, 0x38, 0x09, 0x33, 0xd1, 0x80, 0xff, 0x9f, 0xce, 0x55, 0xd4, 0x0c, 0x7b, 0x69, 0x9a, + 0xf7, 0xd2, 0xaf, 0x5d, 0xd4, 0x4b, 0x27, 0xca, 0xe3, 0xc9, 0x4d, 0xf4, 0x5f, 0x49, 0xc8, 0xec, + 0x18, 0x9e, 0xd1, 0x27, 0xc8, 0x9c, 0xb8, 0x8e, 0x8b, 0x07, 0xf9, 0xd2, 0x44, 0x01, 0xd4, 0xe5, + 0xf7, 0xa2, 0xa7, 0xdc, 0xc6, 0x3f, 0x3e, 0xe7, 0x36, 0xfe, 0x26, 0xcc, 0xf5, 0x8d, 0x23, 0x3d, + 0xb0, 0x51, 0x78, 0x7b, 0xb6, 0xb6, 0x14, 0xa2, 0x9c, 0xdd, 0x17, 0x9f, 0x14, 0x82, 0x97, 0x29, + 0x41, 0xdf, 0x80, 0x1c, 0xe3, 0x08, 0x47, 0x0b, 0x13, 0xbf, 0x16, 0xbe, 0xdd, 0x23, 0x9b, 0xaa, + 0x06, 0x7d, 0xe3, 0xa8, 0x21, 0x16, 0xe8, 0x2e, 0xa0, 0x83, 0xe0, 0xf3, 0x91, 0x1e, 0xba, 0x93, + 0xc9, 0x7f, 0xe5, 0x74, 0x5c, 0x5e, 0x12, 0xf2, 0x93, 0x3c, 0xaa, 0xb6, 0x10, 0x12, 0x7d, 0xb4, + 0xd7, 0x01, 0x98, 0x5d, 0xba, 0x85, 0x1d, 0xb7, 0x2f, 0xdf, 0x84, 0x57, 0x4f, 0xc7, 0xe5, 0x05, + 0x81, 0x12, 0xee, 0xa9, 0xda, 0x34, 0x5b, 0xd4, 0xd9, 0xef, 0x48, 0x66, 0x7f, 0xa2, 0x00, 0x0a, + 0x87, 0x96, 0x86, 0xc9, 0x80, 0x3d, 0x62, 0xd9, 0x6b, 0x25, 0xf2, 0xb4, 0x50, 0x9e, 0xfc, 0x5a, + 0x09, 0xe5, 0xfd, 0xd7, 0x4a, 0xa4, 0x52, 0xbe, 0x19, 0x36, 0xf8, 0xa4, 0x8c, 0xa3, 0x84, 0xe9, + 0x18, 0x04, 0x47, 0x5e, 0x3c, 0xb6, 0x2f, 0xed, 0xf3, 0x07, 0xa7, 0x4c, 0xa8, 0x7f, 0x50, 0x60, + 0x69, 0x22, 0xa3, 0x82, 0xc3, 0xfe, 0x00, 0x90, 0x17, 0xd9, 0xe4, 0xfe, 0x1a, 0xc9, 0x43, 0x5f, + 0x3a, 0x41, 0x17, 0xbc, 0x89, 0xc6, 0xfe, 0xb9, 0xcd, 0xa8, 0xb5, 0x34, 0xf7, 0xf9, 0x6f, 0x15, + 0x58, 0x8c, 0xaa, 0x0f, 0x0c, 0xd9, 0x86, 0x99, 0xa8, 0x76, 0x69, 0xc2, 0x4b, 0xcf, 0x62, 0x82, + 0x3c, 0xfd, 0x19, 0x79, 0xf4, 0x9d, 0xb0, 0x5c, 0xc5, 0x07, 0xc6, 0x3b, 0xcf, 0xec, 0x0d, 0xff, + 0x4c, 0xf1, 0xb2, 0x4d, 0xf3, 0x78, 0xfc, 0x47, 0x81, 0xf4, 0x8e, 0xeb, 0xf6, 0x90, 0x0b, 0x0b, + 0x8e, 0x4b, 0x75, 0x96, 0x59, 0xd8, 0xd2, 0xe5, 0x97, 0x09, 0xd1, 0x07, 0x37, 0x2e, 0xe7, 0xa4, + 0x7f, 0x8c, 0xcb, 0x93, 0x50, 0x5a, 0xde, 0x71, 0x69, 0x8d, 0x53, 0xda, 0xe2, 0xbb, 0xc5, 0x07, + 0x30, 0x7b, 0x56, 0x99, 0xe8, 0x92, 0xef, 0x5e, 0x5a, 0xd9, 0x59, 0x98, 0xd3, 0x71, 0x79, 0x31, + 0xac, 0x98, 0x80, 0xac, 0x6a, 0x33, 0x9d, 0x88, 0xf6, 0xb5, 0x2c, 0x8b, 0xdf, 0x67, 0x2c, 0x86, + 0x6d, 0x98, 0x0f, 0x9a, 0xc1, 0x2e, 0xff, 0x28, 0x47, 0xd0, 0x9b, 0x30, 0x25, 0xbe, 0xcf, 0xf9, + 0xef, 0x8a, 0x4a, 0xf4, 0x3b, 0xb0, 0xd1, 0x31, 0xed, 0x6a, 0x4c, 0xc6, 0xf7, 0xae, 0x14, 0xbb, + 0xfd, 0x1b, 0x05, 0x20, 0xfc, 0xe8, 0x83, 0x5e, 0x81, 0xeb, 0xb5, 0x7b, 0xdb, 0x75, 0xbd, 0xd5, + 0x5e, 0x6f, 0xef, 0xb6, 0xf4, 0xdd, 0xed, 0xd6, 0x4e, 0x63, 0xa3, 0xb9, 0xd9, 0x6c, 0xd4, 0xe7, + 0x13, 0xc5, 0xfc, 0xf1, 0x49, 0x25, 0xb7, 0xeb, 0x90, 0x01, 0x36, 0xed, 0x7d, 0x1b, 0x5b, 0xe8, + 0x65, 0x58, 0x3c, 0xcb, 0xcd, 0x56, 0x8d, 0xfa, 0xbc, 0x52, 0x9c, 0x39, 0x3e, 0xa9, 0x64, 0xc5, + 0x1d, 0x15, 0x5b, 0x68, 0x19, 0xae, 0x4e, 0xf2, 0x35, 0xb7, 0xdf, 0x9a, 0x4f, 0x16, 0x67, 0x8f, + 0x4f, 0x2a, 0xd3, 0xc1, 0x65, 0x16, 0xa9, 0x80, 0xa2, 0x9c, 0x12, 0x2f, 0x55, 0x84, 0xe3, 0x93, + 0x4a, 0x46, 0x84, 0xa5, 0x98, 0xfe, 0xf0, 0x93, 0x52, 0xe2, 0xf6, 0x2f, 0x14, 0x98, 0x6b, 0x3a, + 0xfb, 0x9e, 0x61, 0xf2, 0x0b, 0xc6, 0x68, 0x80, 0xd1, 0xeb, 0x70, 0xa3, 0xb9, 0xbd, 0xa9, 0xad, + 0x6f, 0xb4, 0x9b, 0xf7, 0xb6, 0xf5, 0xf6, 0x77, 0x77, 0x1a, 0x31, 0x03, 0xae, 0x1c, 0x9f, 0x54, + 0xf2, 0xa1, 0x50, 0xa3, 0x3f, 0xa0, 0x23, 0xb4, 0x32, 0x29, 0x55, 0xbf, 0xb7, 0x5b, 0xbb, 0xdb, + 0xd0, 0x5b, 0xcd, 0xb7, 0xb6, 0xe7, 0x95, 0xe2, 0xdc, 0xf1, 0x49, 0x05, 0xea, 0xee, 0xb0, 0xd3, + 0xc3, 0x2d, 0xbb, 0xeb, 0xa0, 0xdb, 0x50, 0x98, 0x14, 0x78, 0x77, 0xbb, 0xdd, 0x7c, 0xa7, 0x31, + 0x9f, 0x14, 0x96, 0xd7, 0xdd, 0xf7, 0x1d, 0x36, 0x09, 0xc4, 0x59, 0x6b, 0x9b, 0x9f, 0x3e, 0x2a, + 0x29, 0x0f, 0x1f, 0x95, 0x94, 0xbf, 0x3d, 0x2a, 0x29, 0x1f, 0x3d, 0x2e, 0x25, 0x1e, 0x3e, 0x2e, + 0x25, 0xfe, 0xf4, 0xb8, 0x94, 0xf8, 0xde, 0x2b, 0x4f, 0xcc, 0x9e, 0xa3, 0xe0, 0x0f, 0x23, 0x3c, + 0x8f, 0x3a, 0x19, 0x3e, 0x88, 0x5e, 0xfb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0xe2, 0xd3, + 0xf7, 0x37, 0x19, 0x00, 0x00, +} + +func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { + d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} + var gzipped = []byte{ + // 12543 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x74, 0x1c, 0xd7, + 0x75, 0x18, 0x66, 0x3f, 0x80, 0xdd, 0x8b, 0x05, 0xb0, 0x78, 0x00, 0x49, 0x70, 0x49, 0x01, 0xd0, + 0xe8, 0x8b, 0xa2, 0x24, 0x50, 0xa2, 0x44, 0x4a, 0x04, 0x6d, 0xcb, 0xbb, 0xc0, 0x12, 0x80, 0x84, + 0x2f, 0x0d, 0x40, 0x4a, 0x96, 0x3f, 0x26, 0x83, 0xdd, 0x87, 0xc5, 0x88, 0xbb, 0x33, 0xe3, 0x9d, + 0x59, 0x12, 0x50, 0x92, 0x1e, 0xc5, 0x76, 0x52, 0x9b, 0x39, 0x6d, 0xe2, 0xba, 0xa7, 0x51, 0x9c, + 0xd0, 0x95, 0xe3, 0xb4, 0x4e, 0x9c, 0xb4, 0xf9, 0x72, 0xf3, 0xd1, 0xf6, 0xb4, 0x4e, 0x7b, 0xd2, + 0x24, 0x4e, 0xd3, 0x63, 0xb7, 0x39, 0x6d, 0x9a, 0x93, 0xd2, 0xa9, 0xec, 0xb6, 0xae, 0xeb, 0x26, + 0x8e, 0xea, 0x36, 0xe9, 0xf1, 0x49, 0xd3, 0xf3, 0xbe, 0xe6, 0x6b, 0x77, 0x76, 0x76, 0x21, 0xd2, + 0x4e, 0xea, 0xfe, 0x02, 0xde, 0x9d, 0x7b, 0xef, 0x7b, 0xef, 0xbe, 0xfb, 0xee, 0xbd, 0xef, 0xbe, + 0x8f, 0x85, 0x9f, 0xbb, 0x08, 0xb3, 0x35, 0xd3, 0xac, 0xd5, 0xf1, 0x19, 0xab, 0x69, 0x3a, 0xe6, + 0x4e, 0x6b, 0xf7, 0x4c, 0x15, 0xdb, 0x95, 0xa6, 0x6e, 0x39, 0x66, 0x73, 0x8e, 0xc2, 0xd0, 0x18, + 0xc3, 0x98, 0x13, 0x18, 0xf2, 0x1a, 0x8c, 0x5f, 0xd2, 0xeb, 0x78, 0xd1, 0x45, 0xdc, 0xc2, 0x0e, + 0x7a, 0x0a, 0x52, 0xbb, 0x7a, 0x1d, 0x4f, 0x49, 0xb3, 0xc9, 0x53, 0xc3, 0x67, 0xef, 0x9d, 0x0b, + 0x11, 0xcd, 0x05, 0x29, 0x36, 0x09, 0x58, 0xa1, 0x14, 0xf2, 0x97, 0x52, 0x30, 0xd1, 0xe1, 0x2b, + 0x42, 0x90, 0x32, 0xb4, 0x06, 0xe1, 0x28, 0x9d, 0xca, 0x2a, 0xf4, 0x7f, 0x34, 0x05, 0x43, 0x96, + 0x56, 0xb9, 0xaa, 0xd5, 0xf0, 0x54, 0x82, 0x82, 0x45, 0x11, 0x4d, 0x03, 0x54, 0xb1, 0x85, 0x8d, + 0x2a, 0x36, 0x2a, 0x07, 0x53, 0xc9, 0xd9, 0xe4, 0xa9, 0xac, 0xe2, 0x83, 0xa0, 0x87, 0x60, 0xdc, + 0x6a, 0xed, 0xd4, 0xf5, 0x8a, 0xea, 0x43, 0x83, 0xd9, 0xe4, 0xa9, 0xb4, 0x92, 0x67, 0x1f, 0x16, + 0x3d, 0xe4, 0x07, 0x60, 0xec, 0x3a, 0xd6, 0xae, 0xfa, 0x51, 0x87, 0x29, 0xea, 0x28, 0x01, 0xfb, + 0x10, 0x17, 0x20, 0xd7, 0xc0, 0xb6, 0xad, 0xd5, 0xb0, 0xea, 0x1c, 0x58, 0x78, 0x2a, 0x45, 0x7b, + 0x3f, 0xdb, 0xd6, 0xfb, 0x70, 0xcf, 0x87, 0x39, 0xd5, 0xf6, 0x81, 0x85, 0x51, 0x11, 0xb2, 0xd8, + 0x68, 0x35, 0x18, 0x87, 0x74, 0x84, 0xfc, 0xca, 0x46, 0xab, 0x11, 0xe6, 0x92, 0x21, 0x64, 0x9c, + 0xc5, 0x90, 0x8d, 0x9b, 0xd7, 0xf4, 0x0a, 0x9e, 0x1a, 0xa4, 0x0c, 0x1e, 0x68, 0x63, 0xb0, 0xc5, + 0xbe, 0x87, 0x79, 0x08, 0x3a, 0xb4, 0x00, 0x59, 0xbc, 0xef, 0x60, 0xc3, 0xd6, 0x4d, 0x63, 0x6a, + 0x88, 0x32, 0xb9, 0xaf, 0xc3, 0x28, 0xe2, 0x7a, 0x35, 0xcc, 0xc2, 0xa3, 0x43, 0xe7, 0x61, 0xc8, + 0xb4, 0x1c, 0xdd, 0x34, 0xec, 0xa9, 0xcc, 0xac, 0x74, 0x6a, 0xf8, 0xec, 0xc9, 0x8e, 0x8a, 0xb0, + 0xc1, 0x70, 0x14, 0x81, 0x8c, 0x56, 0x20, 0x6f, 0x9b, 0xad, 0x66, 0x05, 0xab, 0x15, 0xb3, 0x8a, + 0x55, 0xdd, 0xd8, 0x35, 0xa7, 0xb2, 0x94, 0xc1, 0x4c, 0x7b, 0x47, 0x28, 0xe2, 0x82, 0x59, 0xc5, + 0x2b, 0xc6, 0xae, 0xa9, 0x8c, 0xda, 0x81, 0x32, 0x3a, 0x0a, 0x83, 0xf6, 0x81, 0xe1, 0x68, 0xfb, + 0x53, 0x39, 0xaa, 0x21, 0xbc, 0x24, 0xff, 0xca, 0x20, 0x8c, 0xf5, 0xa2, 0x62, 0x17, 0x21, 0xbd, + 0x4b, 0x7a, 0x39, 0x95, 0xe8, 0x47, 0x06, 0x8c, 0x26, 0x28, 0xc4, 0xc1, 0x43, 0x0a, 0xb1, 0x08, + 0xc3, 0x06, 0xb6, 0x1d, 0x5c, 0x65, 0x1a, 0x91, 0xec, 0x51, 0xa7, 0x80, 0x11, 0xb5, 0xab, 0x54, + 0xea, 0x50, 0x2a, 0xf5, 0x02, 0x8c, 0xb9, 0x4d, 0x52, 0x9b, 0x9a, 0x51, 0x13, 0xba, 0x79, 0x26, + 0xae, 0x25, 0x73, 0x65, 0x41, 0xa7, 0x10, 0x32, 0x65, 0x14, 0x07, 0xca, 0x68, 0x11, 0xc0, 0x34, + 0xb0, 0xb9, 0xab, 0x56, 0x71, 0xa5, 0x3e, 0x95, 0x89, 0x90, 0xd2, 0x06, 0x41, 0x69, 0x93, 0x92, + 0xc9, 0xa0, 0x95, 0x3a, 0xba, 0xe0, 0xa9, 0xda, 0x50, 0x84, 0xa6, 0xac, 0xb1, 0x49, 0xd6, 0xa6, + 0x6d, 0x97, 0x61, 0xb4, 0x89, 0x89, 0xde, 0xe3, 0x2a, 0xef, 0x59, 0x96, 0x36, 0x62, 0x2e, 0xb6, + 0x67, 0x0a, 0x27, 0x63, 0x1d, 0x1b, 0x69, 0xfa, 0x8b, 0xe8, 0x1e, 0x70, 0x01, 0x2a, 0x55, 0x2b, + 0xa0, 0x56, 0x28, 0x27, 0x80, 0xeb, 0x5a, 0x03, 0x17, 0x5e, 0x86, 0xd1, 0xa0, 0x78, 0xd0, 0x24, + 0xa4, 0x6d, 0x47, 0x6b, 0x3a, 0x54, 0x0b, 0xd3, 0x0a, 0x2b, 0xa0, 0x3c, 0x24, 0xb1, 0x51, 0xa5, + 0x56, 0x2e, 0xad, 0x90, 0x7f, 0xd1, 0xdb, 0xbd, 0x0e, 0x27, 0x69, 0x87, 0xef, 0x6f, 0x1f, 0xd1, + 0x00, 0xe7, 0x70, 0xbf, 0x0b, 0x4f, 0xc2, 0x48, 0xa0, 0x03, 0xbd, 0x56, 0x2d, 0x7f, 0x17, 0x1c, + 0xe9, 0xc8, 0x1a, 0xbd, 0x00, 0x93, 0x2d, 0x43, 0x37, 0x1c, 0xdc, 0xb4, 0x9a, 0x98, 0x68, 0x2c, + 0xab, 0x6a, 0xea, 0xbf, 0x0c, 0x45, 0xe8, 0xdc, 0x65, 0x3f, 0x36, 0xe3, 0xa2, 0x4c, 0xb4, 0xda, + 0x81, 0xa7, 0xb3, 0x99, 0x2f, 0x0f, 0xe5, 0x5f, 0x79, 0xe5, 0x95, 0x57, 0x12, 0xf2, 0xaf, 0x0e, + 0xc2, 0x64, 0xa7, 0x39, 0xd3, 0x71, 0xfa, 0x1e, 0x85, 0x41, 0xa3, 0xd5, 0xd8, 0xc1, 0x4d, 0x2a, + 0xa4, 0xb4, 0xc2, 0x4b, 0xa8, 0x08, 0xe9, 0xba, 0xb6, 0x83, 0xeb, 0x53, 0xa9, 0x59, 0xe9, 0xd4, + 0xe8, 0xd9, 0x87, 0x7a, 0x9a, 0x95, 0x73, 0xab, 0x84, 0x44, 0x61, 0x94, 0xe8, 0x6d, 0x90, 0xe2, + 0x26, 0x9a, 0x70, 0x38, 0xdd, 0x1b, 0x07, 0x32, 0x97, 0x14, 0x4a, 0x87, 0x4e, 0x40, 0x96, 0xfc, + 0x65, 0xba, 0x31, 0x48, 0xdb, 0x9c, 0x21, 0x00, 0xa2, 0x17, 0xa8, 0x00, 0x19, 0x3a, 0x4d, 0xaa, + 0x58, 0xb8, 0x36, 0xb7, 0x4c, 0x14, 0xab, 0x8a, 0x77, 0xb5, 0x56, 0xdd, 0x51, 0xaf, 0x69, 0xf5, + 0x16, 0xa6, 0x0a, 0x9f, 0x55, 0x72, 0x1c, 0x78, 0x85, 0xc0, 0xd0, 0x0c, 0x0c, 0xb3, 0x59, 0xa5, + 0x1b, 0x55, 0xbc, 0x4f, 0xad, 0x67, 0x5a, 0x61, 0x13, 0x6d, 0x85, 0x40, 0x48, 0xf5, 0x2f, 0xd9, + 0xa6, 0x21, 0x54, 0x93, 0x56, 0x41, 0x00, 0xb4, 0xfa, 0x27, 0xc3, 0x86, 0xfb, 0xae, 0xce, 0xdd, + 0x6b, 0x9b, 0x4b, 0x0f, 0xc0, 0x18, 0xc5, 0x78, 0x9c, 0x0f, 0xbd, 0x56, 0x9f, 0x1a, 0x9f, 0x95, + 0x4e, 0x65, 0x94, 0x51, 0x06, 0xde, 0xe0, 0x50, 0xf9, 0x17, 0x13, 0x90, 0xa2, 0x86, 0x65, 0x0c, + 0x86, 0xb7, 0xdf, 0xb1, 0x59, 0x56, 0x17, 0x37, 0x2e, 0x97, 0x56, 0xcb, 0x79, 0x09, 0x8d, 0x02, + 0x50, 0xc0, 0xa5, 0xd5, 0x8d, 0xe2, 0x76, 0x3e, 0xe1, 0x96, 0x57, 0xd6, 0xb7, 0xcf, 0x3f, 0x91, + 0x4f, 0xba, 0x04, 0x97, 0x19, 0x20, 0xe5, 0x47, 0x78, 0xfc, 0x6c, 0x3e, 0x8d, 0xf2, 0x90, 0x63, + 0x0c, 0x56, 0x5e, 0x28, 0x2f, 0x9e, 0x7f, 0x22, 0x3f, 0x18, 0x84, 0x3c, 0x7e, 0x36, 0x3f, 0x84, + 0x46, 0x20, 0x4b, 0x21, 0xa5, 0x8d, 0x8d, 0xd5, 0x7c, 0xc6, 0xe5, 0xb9, 0xb5, 0xad, 0xac, 0xac, + 0x2f, 0xe5, 0xb3, 0x2e, 0xcf, 0x25, 0x65, 0xe3, 0xf2, 0x66, 0x1e, 0x5c, 0x0e, 0x6b, 0xe5, 0xad, + 0xad, 0xe2, 0x52, 0x39, 0x3f, 0xec, 0x62, 0x94, 0xde, 0xb1, 0x5d, 0xde, 0xca, 0xe7, 0x02, 0xcd, + 0x7a, 0xfc, 0x6c, 0x7e, 0xc4, 0xad, 0xa2, 0xbc, 0x7e, 0x79, 0x2d, 0x3f, 0x8a, 0xc6, 0x61, 0x84, + 0x55, 0x21, 0x1a, 0x31, 0x16, 0x02, 0x9d, 0x7f, 0x22, 0x9f, 0xf7, 0x1a, 0xc2, 0xb8, 0x8c, 0x07, + 0x00, 0xe7, 0x9f, 0xc8, 0x23, 0x79, 0x01, 0xd2, 0x54, 0x0d, 0x11, 0x82, 0xd1, 0xd5, 0x62, 0xa9, + 0xbc, 0xaa, 0x6e, 0x6c, 0x6e, 0xaf, 0x6c, 0xac, 0x17, 0x57, 0xf3, 0x92, 0x07, 0x53, 0xca, 0xcf, + 0x5d, 0x5e, 0x51, 0xca, 0x8b, 0xf9, 0x84, 0x1f, 0xb6, 0x59, 0x2e, 0x6e, 0x97, 0x17, 0xf3, 0x49, + 0xb9, 0x02, 0x93, 0x9d, 0x0c, 0x6a, 0xc7, 0x29, 0xe4, 0xd3, 0x85, 0x44, 0x84, 0x2e, 0x50, 0x5e, + 0x61, 0x5d, 0x90, 0xbf, 0x98, 0x80, 0x89, 0x0e, 0x4e, 0xa5, 0x63, 0x25, 0x4f, 0x43, 0x9a, 0xe9, + 0x32, 0x73, 0xb3, 0x0f, 0x76, 0xf4, 0x4e, 0x54, 0xb3, 0xdb, 0x5c, 0x2d, 0xa5, 0xf3, 0x87, 0x1a, + 0xc9, 0x88, 0x50, 0x83, 0xb0, 0x68, 0x53, 0xd8, 0x77, 0xb7, 0x19, 0x7f, 0xe6, 0x1f, 0xcf, 0xf7, + 0xe2, 0x1f, 0x29, 0xac, 0x3f, 0x27, 0x90, 0xee, 0xe0, 0x04, 0x2e, 0xc2, 0x78, 0x1b, 0xa3, 0x9e, + 0x8d, 0xf1, 0xfb, 0x25, 0x98, 0x8a, 0x12, 0x4e, 0x8c, 0x49, 0x4c, 0x04, 0x4c, 0xe2, 0xc5, 0xb0, + 0x04, 0xef, 0x8e, 0x1e, 0x84, 0xb6, 0xb1, 0xfe, 0xa4, 0x04, 0x47, 0x3b, 0x87, 0x94, 0x1d, 0xdb, + 0xf0, 0x36, 0x18, 0x6c, 0x60, 0x67, 0xcf, 0x14, 0x61, 0xd5, 0xfd, 0x1d, 0x9c, 0x35, 0xf9, 0x1c, + 0x1e, 0x6c, 0x4e, 0xe5, 0xf7, 0xf6, 0xc9, 0xa8, 0xb8, 0x90, 0xb5, 0xa6, 0xad, 0xa5, 0x1f, 0x4a, + 0xc0, 0x91, 0x8e, 0xcc, 0x3b, 0x36, 0xf4, 0x2e, 0x00, 0xdd, 0xb0, 0x5a, 0x0e, 0x0b, 0x9d, 0x98, + 0x25, 0xce, 0x52, 0x08, 0x35, 0x5e, 0xc4, 0xca, 0xb6, 0x1c, 0xf7, 0x7b, 0x92, 0x7e, 0x07, 0x06, + 0xa2, 0x08, 0x4f, 0x79, 0x0d, 0x4d, 0xd1, 0x86, 0x4e, 0x47, 0xf4, 0xb4, 0x4d, 0x31, 0x1f, 0x85, + 0x7c, 0xa5, 0xae, 0x63, 0xc3, 0x51, 0x6d, 0xa7, 0x89, 0xb5, 0x86, 0x6e, 0xd4, 0xa8, 0xab, 0xc9, + 0xcc, 0xa7, 0x77, 0xb5, 0xba, 0x8d, 0x95, 0x31, 0xf6, 0x79, 0x4b, 0x7c, 0x25, 0x14, 0x54, 0x81, + 0x9a, 0x3e, 0x8a, 0xc1, 0x00, 0x05, 0xfb, 0xec, 0x52, 0xc8, 0x1f, 0xce, 0xc2, 0xb0, 0x2f, 0x00, + 0x47, 0x77, 0x43, 0xee, 0x25, 0xed, 0x9a, 0xa6, 0x8a, 0x45, 0x15, 0x93, 0xc4, 0x30, 0x81, 0x6d, + 0xf2, 0x85, 0xd5, 0xa3, 0x30, 0x49, 0x51, 0xcc, 0x96, 0x83, 0x9b, 0x6a, 0xa5, 0xae, 0xd9, 0x36, + 0x15, 0x5a, 0x86, 0xa2, 0x22, 0xf2, 0x6d, 0x83, 0x7c, 0x5a, 0x10, 0x5f, 0xd0, 0x39, 0x98, 0xa0, + 0x14, 0x8d, 0x56, 0xdd, 0xd1, 0xad, 0x3a, 0x56, 0xc9, 0x32, 0xcf, 0xa6, 0x2e, 0xc7, 0x6d, 0xd9, + 0x38, 0xc1, 0x58, 0xe3, 0x08, 0xa4, 0x45, 0x36, 0x5a, 0x84, 0xbb, 0x28, 0x59, 0x0d, 0x1b, 0xb8, + 0xa9, 0x39, 0x58, 0xc5, 0xef, 0x6d, 0x69, 0x75, 0x5b, 0xd5, 0x8c, 0xaa, 0xba, 0xa7, 0xd9, 0x7b, + 0x53, 0x93, 0x84, 0x41, 0x29, 0x31, 0x25, 0x29, 0xc7, 0x09, 0xe2, 0x12, 0xc7, 0x2b, 0x53, 0xb4, + 0xa2, 0x51, 0x5d, 0xd6, 0xec, 0x3d, 0x34, 0x0f, 0x47, 0x29, 0x17, 0xdb, 0x69, 0xea, 0x46, 0x4d, + 0xad, 0xec, 0xe1, 0xca, 0x55, 0xb5, 0xe5, 0xec, 0x3e, 0x35, 0x75, 0xc2, 0x5f, 0x3f, 0x6d, 0xe1, + 0x16, 0xc5, 0x59, 0x20, 0x28, 0x97, 0x9d, 0xdd, 0xa7, 0xd0, 0x16, 0xe4, 0xc8, 0x60, 0x34, 0xf4, + 0x97, 0xb1, 0xba, 0x6b, 0x36, 0xa9, 0x0f, 0x1d, 0xed, 0x60, 0x9a, 0x7c, 0x12, 0x9c, 0xdb, 0xe0, + 0x04, 0x6b, 0x66, 0x15, 0xcf, 0xa7, 0xb7, 0x36, 0xcb, 0xe5, 0x45, 0x65, 0x58, 0x70, 0xb9, 0x64, + 0x36, 0x89, 0x42, 0xd5, 0x4c, 0x57, 0xc0, 0xc3, 0x4c, 0xa1, 0x6a, 0xa6, 0x10, 0xef, 0x39, 0x98, + 0xa8, 0x54, 0x58, 0x9f, 0xf5, 0x8a, 0xca, 0x17, 0x63, 0xf6, 0x54, 0x3e, 0x20, 0xac, 0x4a, 0x65, + 0x89, 0x21, 0x70, 0x1d, 0xb7, 0xd1, 0x05, 0x38, 0xe2, 0x09, 0xcb, 0x4f, 0x38, 0xde, 0xd6, 0xcb, + 0x30, 0xe9, 0x39, 0x98, 0xb0, 0x0e, 0xda, 0x09, 0x51, 0xa0, 0x46, 0xeb, 0x20, 0x4c, 0xf6, 0x24, + 0x4c, 0x5a, 0x7b, 0x56, 0x3b, 0xdd, 0x69, 0x3f, 0x1d, 0xb2, 0xf6, 0xac, 0x30, 0xe1, 0x7d, 0x74, + 0x65, 0xde, 0xc4, 0x15, 0xcd, 0xc1, 0xd5, 0xa9, 0x63, 0x7e, 0x74, 0xdf, 0x07, 0x34, 0x07, 0xf9, + 0x4a, 0x45, 0xc5, 0x86, 0xb6, 0x53, 0xc7, 0xaa, 0xd6, 0xc4, 0x86, 0x66, 0x4f, 0xcd, 0x50, 0xe4, + 0x94, 0xd3, 0x6c, 0x61, 0x65, 0xb4, 0x52, 0x29, 0xd3, 0x8f, 0x45, 0xfa, 0x0d, 0x9d, 0x86, 0x71, + 0x73, 0xe7, 0xa5, 0x0a, 0xd3, 0x48, 0xd5, 0x6a, 0xe2, 0x5d, 0x7d, 0x7f, 0xea, 0x5e, 0x2a, 0xde, + 0x31, 0xf2, 0x81, 0xea, 0xe3, 0x26, 0x05, 0xa3, 0x07, 0x21, 0x5f, 0xb1, 0xf7, 0xb4, 0xa6, 0x45, + 0x4d, 0xb2, 0x6d, 0x69, 0x15, 0x3c, 0x75, 0x1f, 0x43, 0x65, 0xf0, 0x75, 0x01, 0x26, 0x33, 0xc2, + 0xbe, 0xae, 0xef, 0x3a, 0x82, 0xe3, 0x03, 0x6c, 0x46, 0x50, 0x18, 0xe7, 0x76, 0x0a, 0xf2, 0x44, + 0x12, 0x81, 0x8a, 0x4f, 0x51, 0xb4, 0x51, 0x6b, 0xcf, 0xf2, 0xd7, 0x7b, 0x0f, 0x8c, 0x10, 0x4c, + 0xaf, 0xd2, 0x07, 0x59, 0xe0, 0x66, 0xed, 0xf9, 0x6a, 0x7c, 0x02, 0x8e, 0x12, 0xa4, 0x06, 0x76, + 0xb4, 0xaa, 0xe6, 0x68, 0x3e, 0xec, 0x87, 0x29, 0x36, 0x11, 0xfb, 0x1a, 0xff, 0x18, 0x68, 0x67, + 0xb3, 0xb5, 0x73, 0xe0, 0x2a, 0xd6, 0x23, 0xac, 0x9d, 0x04, 0x26, 0x54, 0xeb, 0x8e, 0x05, 0xe7, + 0xf2, 0x3c, 0xe4, 0xfc, 0x7a, 0x8f, 0xb2, 0xc0, 0x34, 0x3f, 0x2f, 0x91, 0x20, 0x68, 0x61, 0x63, + 0x91, 0x84, 0x2f, 0x2f, 0x96, 0xf3, 0x09, 0x12, 0x46, 0xad, 0xae, 0x6c, 0x97, 0x55, 0xe5, 0xf2, + 0xfa, 0xf6, 0xca, 0x5a, 0x39, 0x9f, 0xf4, 0x05, 0xf6, 0xcf, 0xa4, 0x32, 0xf7, 0xe7, 0x1f, 0x90, + 0x3f, 0x9f, 0x80, 0xd1, 0xe0, 0x4a, 0x0d, 0xbd, 0x05, 0x8e, 0x89, 0xb4, 0x8a, 0x8d, 0x1d, 0xf5, + 0xba, 0xde, 0xa4, 0x13, 0xb2, 0xa1, 0x31, 0xe7, 0xe8, 0xea, 0xcf, 0x24, 0xc7, 0xda, 0xc2, 0xce, + 0xf3, 0x7a, 0x93, 0x4c, 0xb7, 0x86, 0xe6, 0xa0, 0x55, 0x98, 0x31, 0x4c, 0xd5, 0x76, 0x34, 0xa3, + 0xaa, 0x35, 0xab, 0xaa, 0x97, 0xd0, 0x52, 0xb5, 0x4a, 0x05, 0xdb, 0xb6, 0xc9, 0x1c, 0xa1, 0xcb, + 0xe5, 0xa4, 0x61, 0x6e, 0x71, 0x64, 0xcf, 0x43, 0x14, 0x39, 0x6a, 0x48, 0x7d, 0x93, 0x51, 0xea, + 0x7b, 0x02, 0xb2, 0x0d, 0xcd, 0x52, 0xb1, 0xe1, 0x34, 0x0f, 0x68, 0x7c, 0x9e, 0x51, 0x32, 0x0d, + 0xcd, 0x2a, 0x93, 0xf2, 0x37, 0x65, 0x99, 0xf4, 0x4c, 0x2a, 0x93, 0xc9, 0x67, 0x9f, 0x49, 0x65, + 0xb2, 0x79, 0x90, 0x5f, 0x4f, 0x42, 0xce, 0x1f, 0xaf, 0x93, 0xe5, 0x4f, 0x85, 0x7a, 0x2c, 0x89, + 0xda, 0xb4, 0x7b, 0xba, 0x46, 0xf7, 0x73, 0x0b, 0xc4, 0x95, 0xcd, 0x0f, 0xb2, 0xe0, 0x58, 0x61, + 0x94, 0x24, 0x8c, 0x20, 0xca, 0x86, 0x59, 0x30, 0x92, 0x51, 0x78, 0x09, 0x2d, 0xc1, 0xe0, 0x4b, + 0x36, 0xe5, 0x3d, 0x48, 0x79, 0xdf, 0xdb, 0x9d, 0xf7, 0x33, 0x5b, 0x94, 0x79, 0xf6, 0x99, 0x2d, + 0x75, 0x7d, 0x43, 0x59, 0x2b, 0xae, 0x2a, 0x9c, 0x1c, 0x1d, 0x87, 0x54, 0x5d, 0x7b, 0xf9, 0x20, + 0xe8, 0xf4, 0x28, 0xa8, 0xd7, 0x41, 0x38, 0x0e, 0xa9, 0xeb, 0x58, 0xbb, 0x1a, 0x74, 0x35, 0x14, + 0x74, 0x07, 0x27, 0xc3, 0x19, 0x48, 0x53, 0x79, 0x21, 0x00, 0x2e, 0xb1, 0xfc, 0x00, 0xca, 0x40, + 0x6a, 0x61, 0x43, 0x21, 0x13, 0x22, 0x0f, 0x39, 0x06, 0x55, 0x37, 0x57, 0xca, 0x0b, 0xe5, 0x7c, + 0x42, 0x3e, 0x07, 0x83, 0x4c, 0x08, 0x64, 0xb2, 0xb8, 0x62, 0xc8, 0x0f, 0xf0, 0x22, 0xe7, 0x21, + 0x89, 0xaf, 0x97, 0xd7, 0x4a, 0x65, 0x25, 0x9f, 0x08, 0x0e, 0x75, 0x2a, 0x9f, 0x96, 0x6d, 0xc8, + 0xf9, 0xe3, 0xf0, 0x6f, 0xce, 0x62, 0xfc, 0x33, 0x12, 0x0c, 0xfb, 0xe2, 0x6a, 0x12, 0x10, 0x69, + 0xf5, 0xba, 0x79, 0x5d, 0xd5, 0xea, 0xba, 0x66, 0x73, 0xd5, 0x00, 0x0a, 0x2a, 0x12, 0x48, 0xaf, + 0x43, 0xf7, 0x4d, 0x9a, 0x22, 0xe9, 0xfc, 0xa0, 0xfc, 0x31, 0x09, 0xf2, 0xe1, 0xc0, 0x36, 0xd4, + 0x4c, 0xe9, 0x5b, 0xd9, 0x4c, 0xf9, 0x47, 0x25, 0x18, 0x0d, 0x46, 0xb3, 0xa1, 0xe6, 0xdd, 0xfd, + 0x2d, 0x6d, 0xde, 0x1f, 0x24, 0x60, 0x24, 0x10, 0xc3, 0xf6, 0xda, 0xba, 0xf7, 0xc2, 0xb8, 0x5e, + 0xc5, 0x0d, 0xcb, 0x74, 0xb0, 0x51, 0x39, 0x50, 0xeb, 0xf8, 0x1a, 0xae, 0x4f, 0xc9, 0xd4, 0x68, + 0x9c, 0xe9, 0x1e, 0x25, 0xcf, 0xad, 0x78, 0x74, 0xab, 0x84, 0x6c, 0x7e, 0x62, 0x65, 0xb1, 0xbc, + 0xb6, 0xb9, 0xb1, 0x5d, 0x5e, 0x5f, 0x78, 0x87, 0x7a, 0x79, 0xfd, 0xd9, 0xf5, 0x8d, 0xe7, 0xd7, + 0x95, 0xbc, 0x1e, 0x42, 0xbb, 0x83, 0xd3, 0x7e, 0x13, 0xf2, 0xe1, 0x46, 0xa1, 0x63, 0xd0, 0xa9, + 0x59, 0xf9, 0x01, 0x34, 0x01, 0x63, 0xeb, 0x1b, 0xea, 0xd6, 0xca, 0x62, 0x59, 0x2d, 0x5f, 0xba, + 0x54, 0x5e, 0xd8, 0xde, 0x62, 0x79, 0x0f, 0x17, 0x7b, 0x3b, 0x30, 0xc1, 0xe5, 0x8f, 0x26, 0x61, + 0xa2, 0x43, 0x4b, 0x50, 0x91, 0xaf, 0x58, 0xd8, 0x22, 0xea, 0x91, 0x5e, 0x5a, 0x3f, 0x47, 0x62, + 0x86, 0x4d, 0xad, 0xe9, 0xf0, 0x05, 0xce, 0x83, 0x40, 0xa4, 0x64, 0x38, 0xfa, 0xae, 0x8e, 0x9b, + 0x3c, 0x9f, 0xc4, 0x96, 0x31, 0x63, 0x1e, 0x9c, 0xa5, 0x94, 0x1e, 0x06, 0x64, 0x99, 0xb6, 0xee, + 0xe8, 0xd7, 0xb0, 0xaa, 0x1b, 0x22, 0xf9, 0x44, 0x96, 0x35, 0x29, 0x25, 0x2f, 0xbe, 0xac, 0x18, + 0x8e, 0x8b, 0x6d, 0xe0, 0x9a, 0x16, 0xc2, 0x26, 0xc6, 0x3c, 0xa9, 0xe4, 0xc5, 0x17, 0x17, 0xfb, + 0x6e, 0xc8, 0x55, 0xcd, 0x16, 0x89, 0xf5, 0x18, 0x1e, 0xf1, 0x1d, 0x92, 0x32, 0xcc, 0x60, 0x2e, + 0x0a, 0x8f, 0xe2, 0xbd, 0xac, 0x57, 0x4e, 0x19, 0x66, 0x30, 0x86, 0xf2, 0x00, 0x8c, 0x69, 0xb5, + 0x5a, 0x93, 0x30, 0x17, 0x8c, 0xd8, 0xba, 0x64, 0xd4, 0x05, 0x53, 0xc4, 0xc2, 0x33, 0x90, 0x11, + 0x72, 0x20, 0xae, 0x9a, 0x48, 0x42, 0xb5, 0xd8, 0x62, 0x3b, 0x71, 0x2a, 0xab, 0x64, 0x0c, 0xf1, + 0xf1, 0x6e, 0xc8, 0xe9, 0xb6, 0xea, 0x25, 0xf1, 0x13, 0xb3, 0x89, 0x53, 0x19, 0x65, 0x58, 0xb7, + 0xdd, 0x04, 0xa8, 0xfc, 0xc9, 0x04, 0x8c, 0x06, 0x37, 0x21, 0xd0, 0x22, 0x64, 0xea, 0x66, 0x45, + 0xa3, 0xaa, 0xc5, 0x76, 0xc0, 0x4e, 0xc5, 0xec, 0x5b, 0xcc, 0xad, 0x72, 0x7c, 0xc5, 0xa5, 0x2c, + 0xfc, 0x2b, 0x09, 0x32, 0x02, 0x8c, 0x8e, 0x42, 0xca, 0xd2, 0x9c, 0x3d, 0xca, 0x2e, 0x5d, 0x4a, + 0xe4, 0x25, 0x85, 0x96, 0x09, 0xdc, 0xb6, 0x34, 0x83, 0xaa, 0x00, 0x87, 0x93, 0x32, 0x19, 0xd7, + 0x3a, 0xd6, 0xaa, 0x74, 0xd1, 0x63, 0x36, 0x1a, 0xd8, 0x70, 0x6c, 0x31, 0xae, 0x1c, 0xbe, 0xc0, + 0xc1, 0xe8, 0x21, 0x18, 0x77, 0x9a, 0x9a, 0x5e, 0x0f, 0xe0, 0xa6, 0x28, 0x6e, 0x5e, 0x7c, 0x70, + 0x91, 0xe7, 0xe1, 0xb8, 0xe0, 0x5b, 0xc5, 0x8e, 0x56, 0xd9, 0xc3, 0x55, 0x8f, 0x68, 0x90, 0x26, + 0x37, 0x8e, 0x71, 0x84, 0x45, 0xfe, 0x5d, 0xd0, 0xca, 0x9f, 0x97, 0x60, 0x5c, 0x2c, 0xd3, 0xaa, + 0xae, 0xb0, 0xd6, 0x00, 0x34, 0xc3, 0x30, 0x1d, 0xbf, 0xb8, 0xda, 0x55, 0xb9, 0x8d, 0x6e, 0xae, + 0xe8, 0x12, 0x29, 0x3e, 0x06, 0x85, 0x06, 0x80, 0xf7, 0x25, 0x52, 0x6c, 0x33, 0x30, 0xcc, 0x77, + 0x98, 0xe8, 0x36, 0x25, 0x5b, 0xd8, 0x03, 0x03, 0x91, 0xf5, 0x1c, 0x9a, 0x84, 0xf4, 0x0e, 0xae, + 0xe9, 0x06, 0xcf, 0x1b, 0xb3, 0x82, 0x48, 0xbf, 0xa4, 0xdc, 0xf4, 0x4b, 0xe9, 0xaf, 0xc0, 0x44, + 0xc5, 0x6c, 0x84, 0x9b, 0x5b, 0xca, 0x87, 0x92, 0x0b, 0xf6, 0xb2, 0xf4, 0xe2, 0x23, 0x1c, 0xa9, + 0x66, 0xd6, 0x35, 0xa3, 0x36, 0x67, 0x36, 0x6b, 0xde, 0x36, 0x2b, 0x89, 0x78, 0x6c, 0xdf, 0x66, + 0xab, 0xb5, 0xf3, 0xa7, 0x92, 0xf4, 0x63, 0x89, 0xe4, 0xd2, 0x66, 0xe9, 0x53, 0x89, 0xc2, 0x12, + 0x23, 0xdc, 0x14, 0xc2, 0x50, 0xf0, 0x6e, 0x1d, 0x57, 0x48, 0x07, 0xe1, 0x2b, 0x0f, 0xc1, 0x64, + 0xcd, 0xac, 0x99, 0x94, 0xd3, 0x19, 0xf2, 0x1f, 0xdf, 0xa7, 0xcd, 0xba, 0xd0, 0x42, 0xec, 0xa6, + 0xee, 0xfc, 0x3a, 0x4c, 0x70, 0x64, 0x95, 0x6e, 0x14, 0xb1, 0x65, 0x0c, 0xea, 0x9a, 0x43, 0x9b, + 0xfa, 0xb9, 0x2f, 0x51, 0xf7, 0xad, 0x8c, 0x73, 0x52, 0xf2, 0x8d, 0xad, 0x74, 0xe6, 0x15, 0x38, + 0x12, 0xe0, 0xc7, 0x26, 0x29, 0x6e, 0xc6, 0x70, 0xfc, 0x35, 0xce, 0x71, 0xc2, 0xc7, 0x71, 0x8b, + 0x93, 0xce, 0x2f, 0xc0, 0x48, 0x3f, 0xbc, 0xfe, 0x05, 0xe7, 0x95, 0xc3, 0x7e, 0x26, 0x4b, 0x30, + 0x46, 0x99, 0x54, 0x5a, 0xb6, 0x63, 0x36, 0xa8, 0x05, 0xec, 0xce, 0xe6, 0xd7, 0xbf, 0xc4, 0x66, + 0xcd, 0x28, 0x21, 0x5b, 0x70, 0xa9, 0xe6, 0xe7, 0x81, 0xee, 0x8d, 0x55, 0x71, 0xa5, 0x1e, 0xc3, + 0xe1, 0x37, 0x78, 0x43, 0x5c, 0xfc, 0xf9, 0x2b, 0x30, 0x49, 0xfe, 0xa7, 0x06, 0xca, 0xdf, 0x92, + 0xf8, 0x84, 0xdb, 0xd4, 0xe7, 0xdf, 0xcf, 0x26, 0xe6, 0x84, 0xcb, 0xc0, 0xd7, 0x26, 0xdf, 0x28, + 0xd6, 0xb0, 0xe3, 0xe0, 0xa6, 0xad, 0x6a, 0xf5, 0x4e, 0xcd, 0xf3, 0x65, 0x2c, 0xa6, 0x7e, 0xf8, + 0xab, 0xc1, 0x51, 0x5c, 0x62, 0x94, 0xc5, 0x7a, 0x7d, 0xfe, 0x32, 0x1c, 0xeb, 0xa0, 0x15, 0x3d, + 0xf0, 0xfc, 0x28, 0xe7, 0x39, 0xd9, 0xa6, 0x19, 0x84, 0xed, 0x26, 0x08, 0xb8, 0x3b, 0x96, 0x3d, + 0xf0, 0xfc, 0x11, 0xce, 0x13, 0x71, 0x5a, 0x31, 0xa4, 0x84, 0xe3, 0x33, 0x30, 0x7e, 0x0d, 0x37, + 0x77, 0x4c, 0x9b, 0x67, 0x89, 0x7a, 0x60, 0xf7, 0xa3, 0x9c, 0xdd, 0x18, 0x27, 0xa4, 0x69, 0x23, + 0xc2, 0xeb, 0x02, 0x64, 0x76, 0xb5, 0x0a, 0xee, 0x81, 0xc5, 0x4d, 0xce, 0x62, 0x88, 0xe0, 0x13, + 0xd2, 0x22, 0xe4, 0x6a, 0x26, 0xf7, 0x51, 0xf1, 0xe4, 0x1f, 0xe3, 0xe4, 0xc3, 0x82, 0x86, 0xb3, + 0xb0, 0x4c, 0xab, 0x55, 0x27, 0x0e, 0x2c, 0x9e, 0xc5, 0xdf, 0x16, 0x2c, 0x04, 0x0d, 0x67, 0xd1, + 0x87, 0x58, 0x5f, 0x13, 0x2c, 0x6c, 0x9f, 0x3c, 0x9f, 0x86, 0x61, 0xd3, 0xa8, 0x1f, 0x98, 0x46, + 0x2f, 0x8d, 0xf8, 0x38, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0xb8, 0x08, 0xd9, 0x5e, 0x07, 0xe2, 0xef, + 0x7c, 0x55, 0x4c, 0x0f, 0x31, 0x02, 0x4b, 0x30, 0x26, 0x0c, 0x94, 0x6e, 0x1a, 0x3d, 0xb0, 0xf8, + 0xbb, 0x9c, 0xc5, 0xa8, 0x8f, 0x8c, 0x77, 0xc3, 0xc1, 0xb6, 0x53, 0xc3, 0xbd, 0x30, 0xf9, 0xa4, + 0xe8, 0x06, 0x27, 0xe1, 0xa2, 0xdc, 0xc1, 0x46, 0x65, 0xaf, 0x37, 0x0e, 0x3f, 0x21, 0x44, 0x29, + 0x68, 0x08, 0x8b, 0x05, 0x18, 0x69, 0x68, 0x4d, 0x7b, 0x4f, 0xab, 0xf7, 0x34, 0x1c, 0x3f, 0xc9, + 0x79, 0xe4, 0x5c, 0x22, 0x2e, 0x91, 0x96, 0xd1, 0x0f, 0x9b, 0x4f, 0x09, 0x89, 0xf8, 0xc8, 0xf8, + 0xd4, 0xb3, 0x1d, 0x9a, 0x52, 0xeb, 0x87, 0xdb, 0x4f, 0x89, 0xa9, 0xc7, 0x68, 0xd7, 0xfc, 0x1c, + 0x2f, 0x42, 0xd6, 0xd6, 0x5f, 0xee, 0x89, 0xcd, 0x4f, 0x8b, 0x91, 0xa6, 0x04, 0x84, 0xf8, 0x1d, + 0x70, 0xbc, 0xa3, 0x9b, 0xe8, 0x81, 0xd9, 0xdf, 0xe3, 0xcc, 0x8e, 0x76, 0x70, 0x15, 0xdc, 0x24, + 0xf4, 0xcb, 0xf2, 0xef, 0x0b, 0x93, 0x80, 0x43, 0xbc, 0x36, 0xc9, 0xaa, 0xc1, 0xd6, 0x76, 0xfb, + 0x93, 0xda, 0xcf, 0x08, 0xa9, 0x31, 0xda, 0x80, 0xd4, 0xb6, 0xe1, 0x28, 0xe7, 0xd8, 0xdf, 0xb8, + 0xfe, 0xac, 0x30, 0xac, 0x8c, 0xfa, 0x72, 0x70, 0x74, 0xdf, 0x09, 0x05, 0x57, 0x9c, 0x22, 0x3c, + 0xb5, 0xd5, 0x86, 0x66, 0xf5, 0xc0, 0xf9, 0xe7, 0x38, 0x67, 0x61, 0xf1, 0xdd, 0xf8, 0xd6, 0x5e, + 0xd3, 0x2c, 0xc2, 0xfc, 0x05, 0x98, 0x12, 0xcc, 0x5b, 0x46, 0x13, 0x57, 0xcc, 0x9a, 0xa1, 0xbf, + 0x8c, 0xab, 0x3d, 0xb0, 0xfe, 0xf9, 0xd0, 0x50, 0x5d, 0xf6, 0x91, 0x13, 0xce, 0x2b, 0x90, 0x77, + 0x63, 0x15, 0x55, 0x6f, 0x58, 0x66, 0xd3, 0x89, 0xe1, 0xf8, 0x0b, 0x62, 0xa4, 0x5c, 0xba, 0x15, + 0x4a, 0x36, 0x5f, 0x06, 0xb6, 0xcf, 0xdc, 0xab, 0x4a, 0x7e, 0x9a, 0x33, 0x1a, 0xf1, 0xa8, 0xb8, + 0xe1, 0xa8, 0x98, 0x0d, 0x4b, 0x6b, 0xf6, 0x62, 0xff, 0xfe, 0x81, 0x30, 0x1c, 0x9c, 0x84, 0x1b, + 0x0e, 0x12, 0xd1, 0x11, 0x6f, 0xdf, 0x03, 0x87, 0x5f, 0x14, 0x86, 0x43, 0xd0, 0x70, 0x16, 0x22, + 0x60, 0xe8, 0x81, 0xc5, 0x2f, 0x09, 0x16, 0x82, 0x86, 0xb0, 0x78, 0xce, 0x73, 0xb4, 0x4d, 0x5c, + 0xd3, 0x6d, 0xa7, 0xc9, 0x82, 0xe2, 0xee, 0xac, 0x7e, 0xf9, 0xab, 0xc1, 0x20, 0x4c, 0xf1, 0x91, + 0x12, 0x4b, 0xc4, 0x93, 0xac, 0x74, 0xcd, 0x14, 0xdf, 0xb0, 0x5f, 0x11, 0x96, 0xc8, 0x47, 0x46, + 0xda, 0xe6, 0x8b, 0x10, 0x89, 0xd8, 0x2b, 0x64, 0xa5, 0xd0, 0x03, 0xbb, 0x7f, 0x18, 0x6a, 0xdc, + 0x96, 0xa0, 0x25, 0x3c, 0x7d, 0xf1, 0x4f, 0xcb, 0xb8, 0x8a, 0x0f, 0x7a, 0xd2, 0xce, 0x7f, 0x14, + 0x8a, 0x7f, 0x2e, 0x33, 0x4a, 0x66, 0x43, 0xc6, 0x42, 0xf1, 0x14, 0x8a, 0x3b, 0x55, 0x34, 0xf5, + 0x3d, 0x5f, 0xe7, 0xfd, 0x0d, 0x86, 0x53, 0xf3, 0xab, 0x44, 0xc9, 0x83, 0x41, 0x4f, 0x3c, 0xb3, + 0xf7, 0x7f, 0xdd, 0xd5, 0xf3, 0x40, 0xcc, 0x33, 0x7f, 0x09, 0x46, 0x02, 0x01, 0x4f, 0x3c, 0xab, + 0x0f, 0x70, 0x56, 0x39, 0x7f, 0xbc, 0x33, 0x7f, 0x0e, 0x52, 0x24, 0x78, 0x89, 0x27, 0xff, 0x5e, + 0x4e, 0x4e, 0xd1, 0xe7, 0xdf, 0x0a, 0x19, 0x11, 0xb4, 0xc4, 0x93, 0x7e, 0x1f, 0x27, 0x75, 0x49, + 0x08, 0xb9, 0x08, 0x58, 0xe2, 0xc9, 0xff, 0xaa, 0x20, 0x17, 0x24, 0x84, 0xbc, 0x77, 0x11, 0x7e, + 0xe6, 0xfb, 0x53, 0xdc, 0xe9, 0x08, 0xd9, 0x5d, 0x84, 0x21, 0x1e, 0xa9, 0xc4, 0x53, 0x7f, 0x88, + 0x57, 0x2e, 0x28, 0xe6, 0x9f, 0x84, 0x74, 0x8f, 0x02, 0xff, 0x6b, 0x9c, 0x94, 0xe1, 0xcf, 0x2f, + 0xc0, 0xb0, 0x2f, 0x3a, 0x89, 0x27, 0xff, 0xeb, 0x9c, 0xdc, 0x4f, 0x45, 0x9a, 0xce, 0xa3, 0x93, + 0x78, 0x06, 0x3f, 0x20, 0x9a, 0xce, 0x29, 0x88, 0xd8, 0x44, 0x60, 0x12, 0x4f, 0xfd, 0x83, 0x42, + 0xea, 0x82, 0x64, 0xfe, 0x69, 0xc8, 0xba, 0xce, 0x26, 0x9e, 0xfe, 0xc3, 0x9c, 0xde, 0xa3, 0x21, + 0x12, 0xf0, 0x39, 0xbb, 0x78, 0x16, 0x7f, 0x43, 0x48, 0xc0, 0x47, 0x45, 0xa6, 0x51, 0x38, 0x80, + 0x89, 0xe7, 0xf4, 0x11, 0x31, 0x8d, 0x42, 0xf1, 0x0b, 0x19, 0x4d, 0x6a, 0xf3, 0xe3, 0x59, 0xfc, + 0x4d, 0x31, 0x9a, 0x14, 0x9f, 0x34, 0x23, 0x1c, 0x11, 0xc4, 0xf3, 0xf8, 0x21, 0xd1, 0x8c, 0x50, + 0x40, 0x30, 0xbf, 0x09, 0xa8, 0x3d, 0x1a, 0x88, 0xe7, 0xf7, 0x2a, 0xe7, 0x37, 0xde, 0x16, 0x0c, + 0xcc, 0x3f, 0x0f, 0x47, 0x3b, 0x47, 0x02, 0xf1, 0x5c, 0x7f, 0xf8, 0xeb, 0xa1, 0xb5, 0x9b, 0x3f, + 0x10, 0x98, 0xdf, 0xf6, 0x5c, 0x8a, 0x3f, 0x0a, 0x88, 0x67, 0xfb, 0xd1, 0xaf, 0x07, 0x0d, 0xb7, + 0x3f, 0x08, 0x98, 0x2f, 0x02, 0x78, 0x0e, 0x38, 0x9e, 0xd7, 0x8f, 0x72, 0x5e, 0x3e, 0x22, 0x32, + 0x35, 0xb8, 0xff, 0x8d, 0xa7, 0xbf, 0x29, 0xa6, 0x06, 0xa7, 0x20, 0x53, 0x43, 0xb8, 0xde, 0x78, + 0xea, 0x8f, 0x89, 0xa9, 0x21, 0x48, 0x88, 0x66, 0xfb, 0xbc, 0x5b, 0x3c, 0x87, 0x8f, 0x0b, 0xcd, + 0xf6, 0x51, 0xcd, 0xaf, 0xc3, 0x78, 0x9b, 0x43, 0x8c, 0x67, 0xf5, 0x63, 0x9c, 0x55, 0x3e, 0xec, + 0x0f, 0xfd, 0xce, 0x8b, 0x3b, 0xc3, 0x78, 0x6e, 0x9f, 0x08, 0x39, 0x2f, 0xee, 0x0b, 0xe7, 0x2f, + 0x42, 0xc6, 0x68, 0xd5, 0xeb, 0x64, 0xf2, 0xa0, 0xee, 0x27, 0x01, 0xa7, 0xfe, 0xeb, 0x37, 0xb8, + 0x74, 0x04, 0xc1, 0xfc, 0x39, 0x48, 0xe3, 0xc6, 0x0e, 0xae, 0xc6, 0x51, 0x7e, 0xe5, 0x1b, 0xc2, + 0x60, 0x12, 0xec, 0xf9, 0xa7, 0x01, 0x58, 0x6a, 0x84, 0x6e, 0x06, 0xc6, 0xd0, 0xfe, 0xb7, 0x6f, + 0xf0, 0xa3, 0x37, 0x1e, 0x89, 0xc7, 0x80, 0x1d, 0xe4, 0xe9, 0xce, 0xe0, 0xab, 0x41, 0x06, 0x74, + 0x44, 0x2e, 0xc0, 0xd0, 0x4b, 0xb6, 0x69, 0x38, 0x5a, 0x2d, 0x8e, 0xfa, 0xbf, 0x73, 0x6a, 0x81, + 0x4f, 0x04, 0xd6, 0x30, 0x9b, 0xd8, 0xd1, 0x6a, 0x76, 0x1c, 0xed, 0x1f, 0x72, 0x5a, 0x97, 0x80, + 0x10, 0x57, 0x34, 0xdb, 0xe9, 0xa5, 0xdf, 0x7f, 0x24, 0x88, 0x05, 0x01, 0x69, 0x34, 0xf9, 0xff, + 0x2a, 0x3e, 0x88, 0xa3, 0xfd, 0x9a, 0x68, 0x34, 0xc7, 0x9f, 0x7f, 0x2b, 0x64, 0xc9, 0xbf, 0xec, + 0x3c, 0x5d, 0x0c, 0xf1, 0x1f, 0x73, 0x62, 0x8f, 0x82, 0xd4, 0x6c, 0x3b, 0x55, 0x47, 0x8f, 0x17, + 0xf6, 0x1b, 0x7c, 0xa4, 0x05, 0xfe, 0x7c, 0x11, 0x86, 0x6d, 0xa7, 0x5a, 0x6d, 0xf1, 0xf8, 0x34, + 0x86, 0xfc, 0x7f, 0x7c, 0xc3, 0x4d, 0x59, 0xb8, 0x34, 0x64, 0xb4, 0xaf, 0x5f, 0x75, 0x2c, 0x93, + 0x6e, 0x78, 0xc4, 0x71, 0xf8, 0x3a, 0xe7, 0xe0, 0x23, 0x99, 0x5f, 0x80, 0x1c, 0xe9, 0x4b, 0x13, + 0x5b, 0x98, 0xee, 0x4e, 0xc5, 0xb0, 0xf8, 0x9f, 0x5c, 0x00, 0x01, 0xa2, 0xd2, 0xbb, 0x7f, 0xe3, + 0xf5, 0x69, 0xe9, 0x73, 0xaf, 0x4f, 0x4b, 0x7f, 0xf0, 0xfa, 0xb4, 0xf4, 0x83, 0x5f, 0x9c, 0x1e, + 0xf8, 0xdc, 0x17, 0xa7, 0x07, 0x7e, 0xf7, 0x8b, 0xd3, 0x03, 0x9d, 0xb3, 0xc4, 0xb0, 0x64, 0x2e, + 0x99, 0x2c, 0x3f, 0xfc, 0xa2, 0x5c, 0xd3, 0x9d, 0xbd, 0xd6, 0xce, 0x5c, 0xc5, 0x6c, 0xd0, 0x34, + 0xae, 0x97, 0xad, 0x75, 0x17, 0x39, 0xf0, 0xbe, 0x24, 0x1c, 0xaf, 0x98, 0x76, 0xc3, 0xb4, 0x55, + 0x96, 0xef, 0x65, 0x05, 0x9e, 0xf1, 0xcd, 0xf9, 0x3f, 0xf5, 0x90, 0xf4, 0x5d, 0x86, 0x51, 0xda, + 0x75, 0x9a, 0xee, 0xa2, 0xda, 0x16, 0x6b, 0x20, 0x7e, 0xf3, 0xdf, 0xa6, 0x69, 0xaf, 0x47, 0x5c, + 0x42, 0xba, 0x7b, 0xbf, 0x0d, 0x93, 0x7a, 0xc3, 0xaa, 0x63, 0x9a, 0xe6, 0x57, 0xdd, 0x6f, 0xf1, + 0xfc, 0x3e, 0xcb, 0xf9, 0x4d, 0x78, 0xe4, 0x2b, 0x82, 0x7a, 0x7e, 0x15, 0xc6, 0xb5, 0x4a, 0x05, + 0x5b, 0x01, 0x96, 0x31, 0xc3, 0x22, 0x1a, 0x98, 0xe7, 0x94, 0x2e, 0xb7, 0xd2, 0xd3, 0x51, 0x43, + 0xf3, 0xe2, 0x7d, 0x3e, 0xc9, 0x37, 0x71, 0x0d, 0x1b, 0x8f, 0x18, 0xd8, 0xb9, 0x6e, 0x36, 0xaf, + 0x72, 0xf1, 0x3e, 0xc2, 0xaa, 0x1a, 0x64, 0x27, 0x98, 0xe1, 0x03, 0x49, 0x98, 0x66, 0x1f, 0xce, + 0xec, 0x68, 0x36, 0x3e, 0x73, 0xed, 0xb1, 0x1d, 0xec, 0x68, 0x8f, 0x9d, 0xa9, 0x98, 0xba, 0xc1, + 0x47, 0x62, 0x82, 0x8f, 0x0b, 0xf9, 0x3e, 0xc7, 0xbf, 0x17, 0x3a, 0xa6, 0xe9, 0xe5, 0x25, 0x48, + 0x2d, 0x98, 0xba, 0x81, 0x26, 0x21, 0x5d, 0xc5, 0x86, 0xd9, 0xe0, 0x67, 0xee, 0x58, 0x01, 0xdd, + 0x03, 0x83, 0x5a, 0xc3, 0x6c, 0x19, 0x0e, 0xdb, 0xa1, 0x28, 0x0d, 0xff, 0xc6, 0xad, 0x99, 0x81, + 0xdf, 0xbb, 0x35, 0x93, 0x5c, 0x31, 0x1c, 0x85, 0x7f, 0x9a, 0x4f, 0x7d, 0xf9, 0xb5, 0x19, 0x49, + 0x7e, 0x06, 0x86, 0x16, 0x71, 0xe5, 0x30, 0xbc, 0x16, 0x71, 0x25, 0xc4, 0xeb, 0x41, 0xc8, 0xac, + 0x18, 0x0e, 0x3b, 0x15, 0x79, 0x17, 0x24, 0x75, 0x83, 0x1d, 0xb4, 0x09, 0xd5, 0x4f, 0xe0, 0x04, + 0x75, 0x11, 0x57, 0x5c, 0xd4, 0x2a, 0xae, 0x84, 0x51, 0x09, 0x7b, 0x02, 0x2f, 0x2d, 0xfe, 0xee, + 0x7f, 0x9c, 0x1e, 0x78, 0xe5, 0xf5, 0xe9, 0x81, 0xc8, 0x91, 0xf0, 0xcf, 0x01, 0x2e, 0x62, 0x3e, + 0x04, 0x76, 0xf5, 0x2a, 0xdb, 0x23, 0x71, 0x87, 0xe1, 0xb7, 0x07, 0x41, 0xe6, 0x38, 0xb6, 0xa3, + 0x5d, 0xd5, 0x8d, 0x9a, 0x3b, 0x12, 0x5a, 0xcb, 0xd9, 0x7b, 0x99, 0x0f, 0xc5, 0x51, 0x3e, 0x14, + 0x1c, 0xa7, 0xfb, 0x68, 0x14, 0xa2, 0x67, 0x57, 0x21, 0x66, 0xcc, 0xe5, 0x7f, 0x99, 0x04, 0xb4, + 0xe5, 0x68, 0x57, 0x71, 0xb1, 0xe5, 0xec, 0x99, 0x4d, 0xfd, 0x65, 0x66, 0xcb, 0x30, 0x40, 0x43, + 0xdb, 0x57, 0x1d, 0xf3, 0x2a, 0x36, 0x6c, 0x2a, 0x9a, 0xe1, 0xb3, 0xc7, 0xe7, 0x3a, 0xe8, 0xc7, + 0x1c, 0x19, 0xba, 0xd2, 0x43, 0x9f, 0xfa, 0xc2, 0xcc, 0x03, 0xf1, 0x52, 0xa0, 0xc8, 0x24, 0xb8, + 0xde, 0xdf, 0xa6, 0x8c, 0xd1, 0x15, 0x60, 0x87, 0x2c, 0xd4, 0xba, 0x6e, 0x3b, 0xfc, 0x9c, 0xf6, + 0xb9, 0xb9, 0xce, 0x7d, 0x9f, 0x6b, 0x6f, 0xe6, 0xdc, 0x15, 0xad, 0xae, 0x57, 0x35, 0xc7, 0x6c, + 0xda, 0xcb, 0x03, 0x4a, 0x96, 0xb2, 0x5a, 0xd5, 0x6d, 0x07, 0x6d, 0x43, 0xb6, 0x8a, 0x8d, 0x03, + 0xc6, 0x36, 0xf9, 0xe6, 0xd8, 0x66, 0x08, 0x27, 0xca, 0xf5, 0x05, 0x40, 0x9a, 0x1f, 0x4f, 0x5c, + 0x4c, 0x62, 0xe7, 0x2b, 0x23, 0xd8, 0x07, 0x38, 0xd3, 0x7b, 0x14, 0xe3, 0x5a, 0x18, 0x54, 0xb8, + 0x1f, 0xc0, 0xab, 0x13, 0x4d, 0xc1, 0x90, 0x56, 0xad, 0x36, 0xb1, 0x6d, 0xd3, 0x0d, 0xc0, 0xac, + 0x22, 0x8a, 0xf3, 0xe3, 0xff, 0xfa, 0xd3, 0x8f, 0x8c, 0x04, 0x38, 0x96, 0x72, 0x00, 0xd7, 0x5c, + 0xd2, 0xd3, 0x1f, 0x93, 0x60, 0xbc, 0xad, 0x46, 0x24, 0xc3, 0x74, 0xf1, 0xf2, 0xf6, 0xf2, 0x86, + 0xb2, 0xf2, 0x62, 0x71, 0x7b, 0x65, 0x63, 0x5d, 0x65, 0x47, 0xfe, 0xd7, 0xb7, 0x36, 0xcb, 0x0b, + 0x2b, 0x97, 0x56, 0xca, 0x8b, 0xf9, 0x01, 0x34, 0x03, 0x27, 0x3a, 0xe0, 0x2c, 0x96, 0x57, 0xcb, + 0x4b, 0xc5, 0xed, 0x72, 0x5e, 0x42, 0x77, 0xc3, 0x5d, 0x1d, 0x99, 0xb8, 0x28, 0x89, 0x08, 0x14, + 0xa5, 0xec, 0xa2, 0x24, 0x4b, 0x97, 0x22, 0x67, 0xd1, 0xc3, 0x5d, 0xf5, 0x67, 0xdf, 0x9d, 0x2e, + 0xc1, 0xf9, 0xf4, 0x3d, 0x09, 0x38, 0x1e, 0x76, 0x19, 0x9a, 0x71, 0x10, 0x71, 0xeb, 0x33, 0xc2, + 0x9a, 0x2d, 0x43, 0xb2, 0x68, 0x1c, 0xa0, 0xe3, 0x2c, 0x9e, 0x56, 0x5b, 0xcd, 0x3a, 0xb7, 0x41, + 0x43, 0xa4, 0x7c, 0xb9, 0x59, 0x27, 0xb6, 0x49, 0x1c, 0xf4, 0x97, 0x4e, 0xe5, 0xf8, 0xe9, 0xfd, + 0xf9, 0xfc, 0xab, 0xaf, 0xcd, 0x0c, 0xfc, 0xec, 0x6b, 0x33, 0x03, 0x5f, 0xfb, 0xf8, 0xcc, 0xc0, + 0x2b, 0xbf, 0x3f, 0x3b, 0x50, 0xba, 0x1a, 0xee, 0xde, 0x67, 0x62, 0xbd, 0x69, 0xa6, 0x68, 0x1c, + 0x50, 0x43, 0xb4, 0x29, 0xbd, 0x98, 0xa6, 0x9d, 0x13, 0x1b, 0xa8, 0xd3, 0xe1, 0x0d, 0xd4, 0xe7, + 0x71, 0xbd, 0xfe, 0xac, 0x61, 0x5e, 0xa7, 0xa3, 0xea, 0xc9, 0xe0, 0x23, 0x09, 0x98, 0x6e, 0x73, + 0x9b, 0x3c, 0xc2, 0x88, 0xba, 0xfe, 0x3a, 0x0f, 0x99, 0x45, 0x11, 0xb8, 0x4c, 0xc1, 0x90, 0x8d, + 0x2b, 0xa6, 0x51, 0x65, 0x33, 0x3d, 0xa9, 0x88, 0x22, 0xe9, 0xb6, 0xa1, 0x19, 0xa6, 0xcd, 0xcf, + 0xdc, 0xb3, 0x42, 0xe9, 0x47, 0xa4, 0xfe, 0xe2, 0x85, 0x11, 0x51, 0x93, 0xe8, 0xe6, 0x63, 0xb1, + 0x5b, 0xca, 0x57, 0x49, 0x2f, 0xdd, 0x4e, 0x04, 0xb6, 0x95, 0x7b, 0x95, 0xca, 0x0f, 0x25, 0x60, + 0x26, 0x2c, 0x15, 0x12, 0xb6, 0xd9, 0x8e, 0xd6, 0xb0, 0xa2, 0xc4, 0x72, 0x11, 0xb2, 0xdb, 0x02, + 0xa7, 0x6f, 0xb9, 0xdc, 0xec, 0x53, 0x2e, 0xa3, 0x6e, 0x55, 0x42, 0x30, 0x67, 0x7b, 0x14, 0x8c, + 0xdb, 0x8f, 0x43, 0x49, 0xe6, 0x53, 0x29, 0xb8, 0x8b, 0x5e, 0xca, 0x6a, 0x36, 0x74, 0xc3, 0x39, + 0x53, 0x69, 0x1e, 0x58, 0x0e, 0x0d, 0xdc, 0xcc, 0x5d, 0x2e, 0x97, 0x71, 0xef, 0xf3, 0x1c, 0xfb, + 0x1c, 0x31, 0x73, 0x76, 0x21, 0xbd, 0x49, 0xe8, 0x88, 0x44, 0x1c, 0xd3, 0xd1, 0xea, 0x5c, 0x52, + 0xac, 0x40, 0xa0, 0xec, 0x22, 0x57, 0x82, 0x41, 0x75, 0x71, 0x87, 0xab, 0x8e, 0xb5, 0x5d, 0x76, + 0x1e, 0x3e, 0x49, 0x27, 0x54, 0x86, 0x00, 0xe8, 0xd1, 0xf7, 0x49, 0x48, 0x6b, 0x2d, 0x76, 0x94, + 0x23, 0x49, 0x66, 0x1a, 0x2d, 0xc8, 0xcf, 0xc2, 0x10, 0xdf, 0x50, 0x46, 0x79, 0x48, 0x5e, 0xc5, + 0x07, 0xb4, 0x9e, 0x9c, 0x42, 0xfe, 0x45, 0x73, 0x90, 0xa6, 0x8d, 0xe7, 0x0e, 0x64, 0x6a, 0xae, + 0xad, 0xf5, 0x73, 0xb4, 0x91, 0x0a, 0x43, 0x93, 0x9f, 0x81, 0xcc, 0xa2, 0xd9, 0xd0, 0x0d, 0x33, + 0xc8, 0x2d, 0xcb, 0xb8, 0xd1, 0x36, 0x5b, 0x2d, 0x1e, 0x6f, 0x28, 0xac, 0x80, 0x8e, 0xc2, 0x20, + 0xbb, 0x1f, 0xc1, 0x8f, 0xa3, 0xf0, 0x92, 0xbc, 0x00, 0x43, 0x94, 0xf7, 0x86, 0x85, 0x10, 0xbf, + 0x59, 0xc7, 0x2f, 0x62, 0xd0, 0xd0, 0x94, 0xb3, 0x4f, 0x78, 0x8d, 0x45, 0x90, 0xaa, 0x6a, 0x8e, + 0xc6, 0xfb, 0x4d, 0xff, 0x97, 0xdf, 0x06, 0x19, 0xce, 0xc4, 0x46, 0x67, 0x21, 0x69, 0x5a, 0x36, + 0x3f, 0x50, 0x52, 0x88, 0xea, 0xca, 0x86, 0x55, 0x4a, 0x91, 0x48, 0x45, 0x21, 0xc8, 0x25, 0x25, + 0xd2, 0xa8, 0x3e, 0xe5, 0x33, 0xaa, 0xbe, 0x21, 0xf7, 0xfd, 0xcb, 0x86, 0xb4, 0x4d, 0x1d, 0x5c, + 0x65, 0xf9, 0x78, 0x02, 0xa6, 0x7d, 0x5f, 0xaf, 0xe1, 0xa6, 0xad, 0x9b, 0x06, 0xf7, 0xe7, 0x4c, + 0x5b, 0x90, 0xaf, 0x91, 0xfc, 0x7b, 0x84, 0xba, 0xbc, 0x15, 0x92, 0x45, 0xcb, 0x42, 0x05, 0xc8, + 0xd0, 0x72, 0xc5, 0x64, 0xfa, 0x92, 0x52, 0xdc, 0x32, 0xf9, 0x66, 0x9b, 0xbb, 0xce, 0x75, 0xad, + 0xe9, 0x5e, 0x21, 0x14, 0x65, 0xf9, 0x02, 0x64, 0x17, 0x4c, 0xc3, 0xc6, 0x86, 0xdd, 0xa2, 0x73, + 0x70, 0xa7, 0x6e, 0x56, 0xae, 0x72, 0x0e, 0xac, 0x40, 0x04, 0xae, 0x59, 0x16, 0xa5, 0x4c, 0x29, + 0xe4, 0x5f, 0x16, 0x1b, 0x96, 0xb6, 0x22, 0x45, 0x74, 0xa1, 0x7f, 0x11, 0xf1, 0x4e, 0xba, 0x32, + 0xfa, 0x33, 0x09, 0x4e, 0xb6, 0x4f, 0xa8, 0xab, 0xf8, 0xc0, 0xee, 0x77, 0x3e, 0xbd, 0x00, 0xd9, + 0x4d, 0x7a, 0x8f, 0xff, 0x59, 0x7c, 0x80, 0x0a, 0x30, 0x84, 0xab, 0x67, 0xcf, 0x9d, 0x7b, 0xec, + 0x02, 0xd3, 0xf6, 0xe5, 0x01, 0x45, 0x00, 0xd0, 0x34, 0x64, 0x6d, 0x5c, 0xb1, 0xce, 0x9e, 0x3b, + 0x7f, 0xf5, 0x31, 0xa6, 0x5e, 0x24, 0x02, 0x72, 0x41, 0xf3, 0x19, 0xd2, 0xeb, 0x2f, 0x7f, 0x7c, + 0x46, 0x2a, 0xa5, 0x21, 0x69, 0xb7, 0x1a, 0x77, 0x54, 0x47, 0x3e, 0x9a, 0x86, 0x59, 0x3f, 0x25, + 0xb5, 0x54, 0x6e, 0x54, 0xc2, 0x65, 0x90, 0xf7, 0xc9, 0x80, 0x62, 0x44, 0x04, 0xb3, 0x5d, 0x25, + 0x29, 0xff, 0xbc, 0x04, 0x39, 0x37, 0x54, 0xda, 0xc2, 0x0e, 0xba, 0xe8, 0x8f, 0x7f, 0xf8, 0xb4, + 0x39, 0x31, 0x17, 0xae, 0xcb, 0x0b, 0xe9, 0x14, 0x1f, 0x3a, 0x7a, 0x92, 0x2a, 0xa2, 0x65, 0xda, + 0xfc, 0x5a, 0x59, 0x0c, 0xa9, 0x8b, 0x8c, 0x1e, 0x06, 0x44, 0x2d, 0x9c, 0x7a, 0xcd, 0x74, 0x74, + 0xa3, 0xa6, 0x5a, 0xe6, 0x75, 0x7e, 0x59, 0x37, 0xa9, 0xe4, 0xe9, 0x97, 0x2b, 0xf4, 0xc3, 0x26, + 0x81, 0x93, 0x46, 0x67, 0x5d, 0x2e, 0xc1, 0xf0, 0x8e, 0x18, 0x01, 0x51, 0x44, 0x17, 0x61, 0xc8, + 0x6a, 0xed, 0xa8, 0xc2, 0x62, 0x0c, 0x9f, 0x3d, 0xd9, 0x69, 0xfe, 0x0b, 0xfd, 0xe0, 0x16, 0x60, + 0xd0, 0x6a, 0xed, 0x10, 0x6d, 0xb9, 0x1b, 0x72, 0x1d, 0x1a, 0x33, 0x7c, 0xcd, 0x6b, 0x07, 0x7d, + 0x3e, 0x82, 0xf7, 0x40, 0xb5, 0x9a, 0xba, 0xd9, 0xd4, 0x9d, 0x03, 0x1a, 0xbf, 0x26, 0x95, 0xbc, + 0xf8, 0xb0, 0xc9, 0xe1, 0xf2, 0x55, 0x18, 0xdb, 0xa2, 0xeb, 0x5b, 0xaf, 0xe5, 0xe7, 0xbc, 0xf6, + 0x49, 0xf1, 0xed, 0x8b, 0x6c, 0x59, 0xa2, 0xad, 0x65, 0xa5, 0xe7, 0x22, 0xb5, 0xf3, 0xc9, 0xfe, + 0xb5, 0x33, 0x18, 0x21, 0xfe, 0xd1, 0xf1, 0xc0, 0xe4, 0x64, 0xca, 0xe9, 0x37, 0x5f, 0xbd, 0x2a, + 0x66, 0x5c, 0x34, 0x51, 0xe8, 0xee, 0x54, 0x0b, 0x31, 0x66, 0xb4, 0x10, 0x3b, 0x85, 0xe4, 0x0b, + 0x30, 0xb2, 0xa9, 0x35, 0x9d, 0x2d, 0xec, 0x2c, 0x63, 0xad, 0x8a, 0x9b, 0x41, 0xaf, 0x3b, 0x22, + 0xbc, 0x2e, 0x82, 0x14, 0x75, 0xad, 0xcc, 0xeb, 0xd0, 0xff, 0xe5, 0x3d, 0x48, 0xd1, 0x93, 0xa1, + 0xae, 0x47, 0xe6, 0x14, 0xcc, 0x23, 0x13, 0x5b, 0x7a, 0xe0, 0x60, 0x5b, 0x84, 0xb7, 0xb4, 0x80, + 0x9e, 0x10, 0x7e, 0x35, 0xd9, 0xdd, 0xaf, 0x72, 0x45, 0xe4, 0xde, 0xb5, 0x0e, 0x43, 0x25, 0x62, + 0x8a, 0x57, 0x16, 0xdd, 0x86, 0x48, 0x5e, 0x43, 0xd0, 0x1a, 0x8c, 0x59, 0x5a, 0xd3, 0xa1, 0x57, + 0x62, 0xf6, 0x68, 0x2f, 0xb8, 0xae, 0xcf, 0xb4, 0xcf, 0xbc, 0x40, 0x67, 0x79, 0x2d, 0x23, 0x96, + 0x1f, 0x28, 0xff, 0xe7, 0x14, 0x0c, 0x72, 0x61, 0xbc, 0x15, 0x86, 0xb8, 0x58, 0xb9, 0x76, 0xde, + 0x35, 0xd7, 0xee, 0x98, 0xe6, 0x5c, 0x07, 0xc2, 0xf9, 0x09, 0x1a, 0x74, 0x3f, 0x64, 0x2a, 0x7b, + 0x9a, 0x6e, 0xa8, 0x7a, 0x55, 0xa4, 0x1a, 0x5e, 0xbf, 0x35, 0x33, 0xb4, 0x40, 0x60, 0x2b, 0x8b, + 0xca, 0x10, 0xfd, 0xb8, 0x52, 0x25, 0x91, 0xc0, 0x1e, 0xd6, 0x6b, 0x7b, 0x0e, 0x9f, 0x61, 0xbc, + 0x84, 0x9e, 0x82, 0x14, 0x51, 0x08, 0x7e, 0x61, 0xb2, 0xd0, 0x96, 0xf0, 0x71, 0x83, 0xbd, 0x52, + 0x86, 0x54, 0xfc, 0x83, 0x5f, 0x98, 0x91, 0x14, 0x4a, 0x81, 0x16, 0x60, 0xa4, 0xae, 0xd9, 0x8e, + 0x4a, 0x3d, 0x18, 0xa9, 0x3e, 0xcd, 0xd7, 0xdb, 0x6d, 0x02, 0xe1, 0x82, 0xe5, 0x4d, 0x1f, 0x26, + 0x54, 0x0c, 0x54, 0x45, 0xa7, 0x20, 0x4f, 0x99, 0x54, 0xcc, 0x46, 0x43, 0x77, 0x58, 0x6c, 0x35, + 0x48, 0xe5, 0x3e, 0x4a, 0xe0, 0x0b, 0x14, 0x4c, 0x23, 0xac, 0x13, 0x90, 0xa5, 0x57, 0xb4, 0x28, + 0x0a, 0x3b, 0x8e, 0x9c, 0x21, 0x00, 0xfa, 0xf1, 0x01, 0x18, 0xf3, 0xec, 0x23, 0x43, 0xc9, 0x30, + 0x2e, 0x1e, 0x98, 0x22, 0x3e, 0x0a, 0x93, 0x06, 0xde, 0xa7, 0x07, 0xa4, 0x03, 0xd8, 0x59, 0x8a, + 0x8d, 0xc8, 0xb7, 0x2b, 0x41, 0x8a, 0xfb, 0x60, 0xb4, 0x22, 0x84, 0xcf, 0x70, 0x81, 0xe2, 0x8e, + 0xb8, 0x50, 0x8a, 0x76, 0x1c, 0x32, 0x9a, 0x65, 0x31, 0x84, 0x61, 0x6e, 0x1f, 0x2d, 0x8b, 0x7e, + 0x3a, 0x0d, 0xe3, 0xb4, 0x8f, 0x4d, 0x6c, 0xb7, 0xea, 0x0e, 0x67, 0x92, 0xa3, 0x38, 0x63, 0xe4, + 0x83, 0xc2, 0xe0, 0x14, 0xf7, 0x1e, 0x18, 0xc1, 0xd7, 0xf4, 0x2a, 0x36, 0x2a, 0x98, 0xe1, 0x8d, + 0x50, 0xbc, 0x9c, 0x00, 0x52, 0xa4, 0x07, 0xc1, 0xb5, 0x7b, 0xaa, 0xb0, 0xc9, 0xa3, 0x8c, 0x9f, + 0x80, 0x17, 0x19, 0x58, 0x9e, 0x82, 0xd4, 0xa2, 0xe6, 0x68, 0x24, 0xc0, 0x70, 0xf6, 0x99, 0xa3, + 0xc9, 0x29, 0xe4, 0x5f, 0xf9, 0xcb, 0x09, 0x48, 0x5d, 0x31, 0x1d, 0x8c, 0x1e, 0xf7, 0x05, 0x80, + 0xa3, 0x9d, 0xf4, 0x79, 0x4b, 0xaf, 0x19, 0xb8, 0xba, 0x66, 0xd7, 0x7c, 0xef, 0x29, 0x78, 0xea, + 0x94, 0x08, 0xa8, 0xd3, 0x24, 0xa4, 0x9b, 0x66, 0xcb, 0xa8, 0x8a, 0x93, 0xbc, 0xb4, 0x80, 0xca, + 0x90, 0x71, 0xb5, 0x24, 0x15, 0xa7, 0x25, 0x63, 0x44, 0x4b, 0x88, 0x0e, 0x73, 0x80, 0x32, 0xb4, + 0xc3, 0x95, 0xa5, 0x04, 0x59, 0xd7, 0x78, 0x71, 0x6d, 0xeb, 0x4d, 0x61, 0x3d, 0x32, 0xe2, 0x4c, + 0xdc, 0xb1, 0x77, 0x85, 0xc7, 0x34, 0x2e, 0xef, 0x7e, 0xe0, 0xd2, 0x0b, 0xa8, 0x15, 0x7f, 0xdb, + 0x61, 0x88, 0xf6, 0xcb, 0x53, 0x2b, 0xf6, 0xbe, 0xc3, 0x49, 0xc8, 0xda, 0x7a, 0xcd, 0xd0, 0x9c, + 0x56, 0x13, 0x73, 0xcd, 0xf3, 0x00, 0xf2, 0x67, 0x24, 0x18, 0x64, 0x9a, 0xec, 0x93, 0x9b, 0xd4, + 0x59, 0x6e, 0x89, 0x28, 0xb9, 0x25, 0x0f, 0x2f, 0xb7, 0x22, 0x80, 0xdb, 0x18, 0x9b, 0x5f, 0xb9, + 0xef, 0x10, 0x31, 0xb0, 0x26, 0x6e, 0xe9, 0x35, 0x3e, 0x51, 0x7d, 0x44, 0xf2, 0x7f, 0x90, 0x48, + 0x10, 0xcb, 0xbf, 0xa3, 0x22, 0x8c, 0x88, 0x76, 0xa9, 0xbb, 0x75, 0xad, 0xc6, 0x75, 0xe7, 0xae, + 0xc8, 0xc6, 0x5d, 0xaa, 0x6b, 0x35, 0x65, 0x98, 0xb7, 0x87, 0x14, 0x3a, 0x8f, 0x43, 0x22, 0x62, + 0x1c, 0x02, 0x03, 0x9f, 0x3c, 0xdc, 0xc0, 0x07, 0x86, 0x28, 0x15, 0x1e, 0xa2, 0x5f, 0x48, 0xd0, + 0xc5, 0x8c, 0x65, 0xda, 0x5a, 0xfd, 0x9b, 0x31, 0x23, 0x4e, 0x40, 0xd6, 0x32, 0xeb, 0x2a, 0xfb, + 0xc2, 0x4e, 0xb8, 0x67, 0x2c, 0xb3, 0xae, 0xb4, 0x0d, 0x7b, 0xfa, 0x36, 0x4d, 0x97, 0xc1, 0xdb, + 0x20, 0xb5, 0xa1, 0xb0, 0xd4, 0x9a, 0x90, 0x63, 0xa2, 0xe0, 0xbe, 0xec, 0x51, 0x22, 0x03, 0xea, + 0x1c, 0xa5, 0x76, 0xdf, 0xcb, 0x9a, 0xcd, 0x30, 0x15, 0x8e, 0x47, 0x28, 0x98, 0xe9, 0xef, 0xb4, + 0x0a, 0xf6, 0xab, 0xa5, 0xc2, 0xf1, 0xe4, 0xbf, 0x25, 0x01, 0xac, 0x12, 0xc9, 0xd2, 0xfe, 0x12, + 0x2f, 0x64, 0xd3, 0x26, 0xa8, 0x81, 0x9a, 0xa7, 0xa3, 0x06, 0x8d, 0xd7, 0x9f, 0xb3, 0xfd, 0xed, + 0x5e, 0x80, 0x11, 0x4f, 0x19, 0x6d, 0x2c, 0x1a, 0x33, 0xdd, 0x25, 0xaa, 0xde, 0xc2, 0x8e, 0x92, + 0xbb, 0xe6, 0x2b, 0xc9, 0xff, 0x4c, 0x82, 0x2c, 0x6d, 0xd3, 0x1a, 0x76, 0xb4, 0xc0, 0x18, 0x4a, + 0x87, 0x1f, 0xc3, 0xbb, 0x00, 0x18, 0x1b, 0x5b, 0x7f, 0x19, 0x73, 0xcd, 0xca, 0x52, 0xc8, 0x96, + 0xfe, 0x32, 0x46, 0xe7, 0x5d, 0x81, 0x27, 0xbb, 0x0b, 0x5c, 0x44, 0xdd, 0x5c, 0xec, 0xc7, 0x60, + 0x88, 0x3e, 0x51, 0xb5, 0x6f, 0xf3, 0x40, 0x7a, 0xd0, 0x68, 0x35, 0xb6, 0xf7, 0x6d, 0xf9, 0x25, + 0x18, 0xda, 0xde, 0x67, 0xb9, 0x91, 0x13, 0x90, 0x6d, 0x9a, 0x26, 0xf7, 0xc9, 0x2c, 0x16, 0xca, + 0x10, 0x00, 0x75, 0x41, 0x22, 0x1f, 0x90, 0xf0, 0xf2, 0x01, 0x5e, 0x42, 0x23, 0xd9, 0x53, 0x42, + 0xe3, 0xf4, 0xbf, 0x93, 0x60, 0xd8, 0x67, 0x1f, 0xd0, 0x63, 0x70, 0xa4, 0xb4, 0xba, 0xb1, 0xf0, + 0xac, 0xba, 0xb2, 0xa8, 0x5e, 0x5a, 0x2d, 0x2e, 0x79, 0x77, 0xb8, 0x0a, 0x47, 0x6f, 0xdc, 0x9c, + 0x45, 0x3e, 0xdc, 0xcb, 0x06, 0xcd, 0x28, 0xa1, 0x33, 0x30, 0x19, 0x24, 0x29, 0x96, 0xb6, 0xca, + 0xeb, 0xdb, 0x79, 0xa9, 0x70, 0xe4, 0xc6, 0xcd, 0xd9, 0x71, 0x1f, 0x45, 0x71, 0xc7, 0xc6, 0x86, + 0xd3, 0x4e, 0xb0, 0xb0, 0xb1, 0xb6, 0xb6, 0xb2, 0x9d, 0x4f, 0xb4, 0x11, 0x70, 0x83, 0xfd, 0x20, + 0x8c, 0x07, 0x09, 0xd6, 0x57, 0x56, 0xf3, 0xc9, 0x02, 0xba, 0x71, 0x73, 0x76, 0xd4, 0x87, 0xbd, + 0xae, 0xd7, 0x0b, 0x99, 0x0f, 0x7e, 0x62, 0x7a, 0xe0, 0x27, 0x7e, 0x7c, 0x5a, 0x22, 0x3d, 0x1b, + 0x09, 0xd8, 0x08, 0xf4, 0x30, 0x1c, 0xdb, 0x5a, 0x59, 0x5a, 0x2f, 0x2f, 0xaa, 0x6b, 0x5b, 0x4b, + 0x22, 0x07, 0x2d, 0x7a, 0x37, 0x76, 0xe3, 0xe6, 0xec, 0x30, 0xef, 0x52, 0x14, 0xf6, 0xa6, 0x52, + 0xbe, 0xb2, 0xb1, 0x5d, 0xce, 0x4b, 0x0c, 0x7b, 0xb3, 0x89, 0xaf, 0x99, 0x0e, 0x7b, 0xc3, 0xee, + 0x51, 0x38, 0xde, 0x01, 0xdb, 0xed, 0xd8, 0xf8, 0x8d, 0x9b, 0xb3, 0x23, 0x9b, 0x4d, 0xcc, 0xe6, + 0x0f, 0xa5, 0x98, 0x83, 0xa9, 0x76, 0x8a, 0x8d, 0xcd, 0x8d, 0xad, 0xe2, 0x6a, 0x7e, 0xb6, 0x90, + 0xbf, 0x71, 0x73, 0x36, 0x27, 0x8c, 0x21, 0x4d, 0xf4, 0xbb, 0x3d, 0xbb, 0x93, 0x2b, 0x9e, 0xdf, + 0x1e, 0x0a, 0xe4, 0xf7, 0xd8, 0x5a, 0xc2, 0xd2, 0x9a, 0x5a, 0xa3, 0xdf, 0x25, 0x4f, 0x4c, 0x5a, + 0x59, 0x7e, 0x35, 0x01, 0x63, 0x6e, 0x40, 0xbd, 0x49, 0x6b, 0x40, 0x17, 0xfc, 0x79, 0x99, 0xe1, + 0x48, 0x57, 0xc6, 0xb0, 0xc5, 0xd2, 0x81, 0x25, 0x6f, 0x4a, 0x90, 0x11, 0xe1, 0x19, 0x37, 0x1c, + 0xb3, 0xed, 0xd4, 0x65, 0x8e, 0x11, 0x60, 0xe0, 0xd2, 0xa1, 0x32, 0x64, 0x5d, 0x63, 0xe2, 0xbe, + 0x08, 0x13, 0x6d, 0x7d, 0x02, 0x5c, 0x3c, 0x4a, 0xf4, 0xb4, 0xb7, 0x98, 0x48, 0x45, 0x2d, 0x4f, + 0xae, 0x30, 0x84, 0x00, 0x0b, 0x41, 0x25, 0x63, 0x3e, 0x25, 0xb9, 0x54, 0xe8, 0xcd, 0xfa, 0x7d, + 0x95, 0xad, 0xb2, 0x58, 0xc4, 0x92, 0x69, 0x68, 0xfb, 0x25, 0xba, 0xd0, 0x3a, 0x06, 0x43, 0xe4, + 0x63, 0x8d, 0x5f, 0x3d, 0x4e, 0x2a, 0x83, 0x0d, 0x6d, 0x7f, 0x49, 0xb3, 0xd1, 0x2c, 0xe4, 0x88, + 0x07, 0x51, 0x75, 0xd3, 0xd1, 0xd4, 0x86, 0xcd, 0x57, 0x1c, 0x40, 0x60, 0x2b, 0xa6, 0xa3, 0xad, + 0xd9, 0xf2, 0x4f, 0x4a, 0x30, 0x1a, 0x94, 0x08, 0x7a, 0x08, 0x10, 0xe1, 0xa6, 0xd5, 0xb0, 0x4a, + 0x4c, 0x13, 0x15, 0xad, 0xa8, 0x73, 0xac, 0xa1, 0xed, 0x17, 0x6b, 0x78, 0xbd, 0xd5, 0xa0, 0x8d, + 0xb3, 0xd1, 0x1a, 0xe4, 0x05, 0xb2, 0x18, 0x5b, 0x2e, 0xfa, 0xe3, 0xed, 0xef, 0xc8, 0x71, 0x04, + 0xe6, 0xe0, 0x5e, 0x25, 0x0e, 0x6e, 0x94, 0xf1, 0x73, 0xb7, 0x12, 0x02, 0xdd, 0x4c, 0x06, 0xbb, + 0x29, 0x3f, 0x0d, 0x63, 0x21, 0xb9, 0x23, 0x19, 0x46, 0x78, 0x46, 0x81, 0x6e, 0xa6, 0x89, 0x0d, + 0xaf, 0x61, 0x96, 0x39, 0xa0, 0x69, 0xeb, 0xf9, 0xcc, 0x2f, 0xbf, 0x36, 0x23, 0xd1, 0x0d, 0xde, + 0x79, 0x18, 0x09, 0xc8, 0x9c, 0xde, 0xdb, 0xb6, 0x2c, 0xd5, 0xbf, 0xec, 0x4b, 0x29, 0xa0, 0x59, + 0x16, 0x47, 0xf3, 0xd1, 0xbe, 0x08, 0x39, 0x62, 0x6f, 0x71, 0x95, 0x93, 0xde, 0x0f, 0x63, 0xcc, + 0x1f, 0x84, 0x87, 0x85, 0x05, 0x64, 0x6b, 0x62, 0x6c, 0x64, 0x11, 0xa1, 0x05, 0x47, 0x68, 0x58, + 0x60, 0x2d, 0x69, 0x76, 0xe9, 0xf2, 0x4f, 0xbc, 0x3e, 0x2d, 0xdd, 0xb9, 0xf9, 0x7c, 0x73, 0x19, + 0x4e, 0xf8, 0x3e, 0x6a, 0x3b, 0x15, 0x3d, 0x90, 0xc0, 0x18, 0xf3, 0x69, 0x26, 0xf9, 0x18, 0x97, + 0x88, 0xe8, 0x9a, 0x0e, 0xe9, 0x9e, 0x7f, 0x2b, 0x74, 0x37, 0x2c, 0xf1, 0x39, 0x92, 0xce, 0x69, + 0xcf, 0x0f, 0x67, 0x60, 0x48, 0xc1, 0xef, 0x6d, 0x61, 0xdb, 0x41, 0x67, 0x21, 0x85, 0x2b, 0x7b, + 0x66, 0xa7, 0x0c, 0x13, 0xe9, 0xdc, 0x1c, 0xc7, 0x2b, 0x57, 0xf6, 0xcc, 0xe5, 0x01, 0x85, 0xe2, + 0xa2, 0x73, 0x90, 0xde, 0xad, 0xb7, 0x78, 0xca, 0x23, 0x64, 0x73, 0xfc, 0x44, 0x97, 0x08, 0xd2, + 0xf2, 0x80, 0xc2, 0xb0, 0x49, 0x55, 0xf4, 0x91, 0xce, 0x64, 0xf7, 0xaa, 0x56, 0x8c, 0x5d, 0x5a, + 0x15, 0xc1, 0x45, 0x25, 0x00, 0x1b, 0x3b, 0xe2, 0x06, 0x76, 0xaa, 0xdd, 0xc0, 0xf8, 0x29, 0xb7, + 0xb0, 0xc3, 0x8e, 0x78, 0xb0, 0xe4, 0x2c, 0x2f, 0x10, 0x1e, 0xba, 0xa1, 0x3b, 0x2a, 0x4d, 0x29, + 0xf0, 0xc0, 0xf4, 0xee, 0xe8, 0xda, 0x75, 0x87, 0x26, 0x21, 0x08, 0x0f, 0x5d, 0x14, 0x48, 0x97, + 0xdf, 0xdb, 0xc2, 0xcd, 0x03, 0x1e, 0x8f, 0x46, 0x76, 0xf9, 0x39, 0x82, 0x44, 0xba, 0x4c, 0xb1, + 0x51, 0x19, 0x86, 0xe9, 0x9d, 0x50, 0x66, 0x16, 0xf8, 0xa3, 0x93, 0x72, 0x14, 0x71, 0x89, 0xa0, + 0x52, 0x4b, 0xb1, 0x3c, 0xa0, 0xc0, 0x8e, 0x5b, 0x42, 0x6f, 0x81, 0x0c, 0x7b, 0x94, 0xc8, 0xd9, + 0xe7, 0x4f, 0xed, 0xcd, 0x44, 0xf1, 0xa0, 0x2f, 0x13, 0x6d, 0xef, 0x2f, 0x0f, 0x28, 0x43, 0x15, + 0xf6, 0x2f, 0xe9, 0x7f, 0x15, 0xd7, 0xf5, 0x6b, 0xb8, 0x49, 0xe8, 0xb3, 0xdd, 0xfb, 0xbf, 0xc8, + 0x30, 0x29, 0x87, 0x6c, 0x55, 0x14, 0xd0, 0xd3, 0x90, 0xc5, 0x46, 0x95, 0x77, 0x03, 0xda, 0x9d, + 0x45, 0x40, 0x57, 0x8c, 0xaa, 0xe8, 0x44, 0x06, 0xf3, 0xff, 0xd1, 0x53, 0x6e, 0xc0, 0x3c, 0xdc, + 0x1e, 0xa3, 0x06, 0x3a, 0xc0, 0x52, 0x27, 0x03, 0x22, 0x70, 0x46, 0xeb, 0x30, 0x5a, 0xd7, 0x6d, + 0x47, 0xb5, 0x0d, 0xcd, 0xb2, 0xf7, 0x4c, 0xc7, 0xa6, 0x39, 0x88, 0xe1, 0xb3, 0xf7, 0x45, 0x71, + 0x58, 0xd5, 0x6d, 0x67, 0x4b, 0x20, 0x2f, 0x0f, 0x28, 0x23, 0x75, 0x3f, 0x80, 0xf0, 0x33, 0x77, + 0x77, 0x71, 0xd3, 0x65, 0x48, 0x73, 0x15, 0x5d, 0xf8, 0x6d, 0x10, 0x6c, 0x41, 0x4f, 0xf8, 0x99, + 0x7e, 0x00, 0x7a, 0x27, 0x4c, 0xd4, 0x4d, 0xad, 0xea, 0xb2, 0x53, 0x2b, 0x7b, 0x2d, 0xe3, 0x2a, + 0x4d, 0x6c, 0x0c, 0x9f, 0x7d, 0x30, 0xb2, 0x91, 0xa6, 0x56, 0x15, 0x2c, 0x16, 0x08, 0xc1, 0xf2, + 0x80, 0x32, 0x5e, 0x0f, 0x03, 0xd1, 0x7b, 0x60, 0x52, 0xb3, 0xac, 0xfa, 0x41, 0x98, 0xfb, 0x18, + 0xe5, 0x7e, 0x3a, 0x8a, 0x7b, 0x91, 0xd0, 0x84, 0xd9, 0x23, 0xad, 0x0d, 0x5a, 0x1a, 0xe2, 0x3b, + 0xed, 0xf2, 0x03, 0x30, 0xec, 0x9b, 0xea, 0x68, 0x0a, 0x86, 0xf8, 0xb9, 0x53, 0xb1, 0x37, 0xcf, + 0x8b, 0xf2, 0x28, 0xe4, 0xfc, 0xd3, 0x5b, 0x6e, 0xb8, 0x84, 0xf4, 0xa2, 0xf6, 0x54, 0x30, 0x2d, + 0x98, 0xf5, 0x32, 0x7e, 0xf7, 0x08, 0xd3, 0x2e, 0xbe, 0xb3, 0x5d, 0xa3, 0x1c, 0x05, 0x72, 0x0f, + 0x42, 0x5c, 0x8c, 0x75, 0xd6, 0x73, 0x31, 0x49, 0xe6, 0x62, 0xac, 0xb3, 0xc2, 0xc5, 0xc8, 0xf3, + 0x90, 0x0f, 0xcf, 0xf6, 0xce, 0xbb, 0x8a, 0xde, 0x01, 0x82, 0x2c, 0x3f, 0x40, 0x20, 0xff, 0x56, + 0xc2, 0x25, 0x76, 0xa7, 0xb9, 0x9b, 0x48, 0x94, 0xfa, 0x4e, 0x24, 0x1e, 0x0f, 0xa7, 0x30, 0xbd, + 0xac, 0xe5, 0xb3, 0x90, 0xf7, 0x92, 0x6f, 0xcc, 0x64, 0x73, 0xb3, 0xd7, 0x3e, 0x6b, 0x42, 0x11, + 0x9d, 0x32, 0x56, 0x09, 0x85, 0x78, 0x97, 0x02, 0x7b, 0x2e, 0xe2, 0xb9, 0xe8, 0x30, 0x1b, 0xd7, + 0xd7, 0x5f, 0xb6, 0xaa, 0x9a, 0x83, 0x45, 0x2e, 0xc4, 0xb7, 0xfd, 0x72, 0x3f, 0x8c, 0x11, 0xf7, + 0x6d, 0x3b, 0x9a, 0x83, 0xb9, 0x0f, 0x4e, 0xb3, 0x94, 0xa0, 0x66, 0x59, 0x5b, 0x04, 0xca, 0x7c, + 0xf0, 0x7d, 0x30, 0x4a, 0x0c, 0x9f, 0xae, 0xd5, 0x55, 0x9e, 0x19, 0x18, 0x64, 0xae, 0x9a, 0x43, + 0x97, 0x29, 0x50, 0xae, 0xba, 0x8a, 0x40, 0x8d, 0x9e, 0xbb, 0xb4, 0x92, 0x7c, 0x4b, 0x2b, 0xc4, + 0x6f, 0xd6, 0x33, 0xf1, 0x88, 0xc7, 0x08, 0x3a, 0x67, 0x74, 0x27, 0xe9, 0x32, 0xec, 0x1a, 0x4b, + 0x72, 0x64, 0x14, 0x56, 0x90, 0x3f, 0x90, 0x80, 0xf1, 0x36, 0xf3, 0xd8, 0x31, 0xd5, 0xed, 0xad, + 0x29, 0x13, 0x7d, 0xad, 0x29, 0x37, 0x82, 0xa9, 0x5c, 0x9f, 0x8b, 0x6a, 0x37, 0xb2, 0xab, 0x6e, + 0x6e, 0x97, 0x28, 0x3b, 0x67, 0xe4, 0xcb, 0xf8, 0xd2, 0x29, 0xa0, 0xc0, 0xe4, 0xce, 0xc1, 0xcb, + 0x9a, 0xe1, 0xe8, 0x06, 0x56, 0xdb, 0x46, 0xee, 0x78, 0x1b, 0x53, 0x11, 0x50, 0x72, 0x76, 0x13, + 0x2e, 0xb1, 0x97, 0xd1, 0x95, 0x15, 0x18, 0x0d, 0x1a, 0x78, 0x34, 0x0a, 0x09, 0x67, 0x9f, 0x0b, + 0x20, 0xe1, 0xec, 0xa3, 0x47, 0x79, 0xf2, 0x27, 0x41, 0x93, 0x3f, 0xed, 0xde, 0x95, 0xd3, 0x79, + 0x99, 0x1f, 0x59, 0x76, 0x67, 0x83, 0x6b, 0xf4, 0xc3, 0x5c, 0xe5, 0x07, 0x61, 0x2c, 0x64, 0xd5, + 0xa3, 0x52, 0x81, 0xf2, 0x18, 0x8c, 0x04, 0x4c, 0xb8, 0x7c, 0x14, 0x26, 0x3b, 0x59, 0x64, 0x79, + 0xcf, 0x85, 0x07, 0x2c, 0x2b, 0x3a, 0x07, 0x19, 0xd7, 0x24, 0x77, 0x48, 0x3d, 0xd0, 0x5e, 0x08, + 0x64, 0xc5, 0x45, 0x0d, 0x64, 0xb0, 0x13, 0x81, 0x0c, 0xb6, 0xfc, 0x1d, 0x30, 0x15, 0x65, 0x6e, + 0x43, 0xdd, 0x48, 0xb9, 0x6a, 0x78, 0x14, 0x06, 0xf9, 0xb3, 0x61, 0x09, 0xba, 0x67, 0xc3, 0x4b, + 0x44, 0x3d, 0x99, 0xe9, 0x4d, 0xb2, 0xad, 0x1c, 0x5a, 0x90, 0x55, 0x38, 0x1e, 0x69, 0x72, 0xa3, + 0x77, 0x7f, 0x18, 0x23, 0xbe, 0xfb, 0x53, 0x11, 0xcd, 0xb1, 0x69, 0x5f, 0xc5, 0x89, 0x07, 0x56, + 0x92, 0xff, 0x53, 0x06, 0x32, 0x0a, 0xb6, 0x2d, 0x62, 0x13, 0x50, 0x09, 0xb2, 0x78, 0xbf, 0x82, + 0x2d, 0xc7, 0xdb, 0x75, 0xe9, 0x14, 0x4c, 0x30, 0xec, 0xb2, 0xc0, 0x24, 0x9e, 0xdc, 0x25, 0x43, + 0x8f, 0xf3, 0x80, 0x2f, 0x3a, 0x76, 0xe3, 0xe4, 0xfe, 0x88, 0xef, 0xbc, 0x88, 0xf8, 0x92, 0x91, + 0xce, 0x9b, 0x51, 0x85, 0x42, 0xbe, 0xc7, 0x79, 0xc8, 0x97, 0x8a, 0xa9, 0x2c, 0x10, 0xf3, 0x2d, + 0x04, 0x62, 0xbe, 0x74, 0x4c, 0x37, 0x23, 0x82, 0xbe, 0x85, 0x40, 0xd0, 0x37, 0x18, 0xc3, 0x24, + 0x22, 0xea, 0x3b, 0x2f, 0xa2, 0xbe, 0xa1, 0x98, 0x6e, 0x87, 0xc2, 0xbe, 0x4b, 0xc1, 0xb0, 0x8f, + 0x85, 0x6c, 0xf7, 0x44, 0x52, 0x47, 0xc6, 0x7d, 0x6f, 0xf5, 0xc5, 0x7d, 0xd9, 0xc8, 0xa0, 0x8b, + 0x31, 0xe9, 0x10, 0xf8, 0x2d, 0x04, 0x02, 0x3f, 0x88, 0x91, 0x41, 0x44, 0xe4, 0xf7, 0x76, 0x7f, + 0xe4, 0x37, 0x1c, 0x19, 0x3c, 0x72, 0xa5, 0xe9, 0x14, 0xfa, 0x5d, 0x70, 0x43, 0xbf, 0x5c, 0x64, + 0xec, 0xca, 0xfb, 0x10, 0x8e, 0xfd, 0x36, 0xda, 0x62, 0xbf, 0x11, 0xfe, 0x8c, 0x79, 0x14, 0x8b, + 0x98, 0xe0, 0x6f, 0xa3, 0x2d, 0xf8, 0x1b, 0x8d, 0x61, 0x18, 0x13, 0xfd, 0xbd, 0xab, 0x73, 0xf4, + 0x17, 0x1d, 0x9f, 0xf1, 0x66, 0xf6, 0x16, 0xfe, 0xa9, 0x11, 0xe1, 0x5f, 0x9e, 0xb2, 0x7f, 0x28, + 0x92, 0x7d, 0xff, 0xf1, 0xdf, 0x83, 0xc4, 0xcd, 0x86, 0x0c, 0x07, 0x31, 0x55, 0xb8, 0xd9, 0x34, + 0x9b, 0xe2, 0x8c, 0x38, 0x2d, 0xc8, 0xa7, 0x88, 0xe3, 0xf7, 0x8c, 0x44, 0x97, 0x58, 0x91, 0xba, + 0x04, 0x9f, 0x61, 0x90, 0x7f, 0x59, 0xf2, 0x68, 0xa9, 0xaf, 0xf4, 0x07, 0x0d, 0x59, 0x1e, 0x34, + 0xf8, 0x42, 0xc8, 0x44, 0x30, 0x84, 0x0c, 0x25, 0x20, 0x92, 0xe1, 0x04, 0x84, 0xbb, 0x65, 0xc9, + 0x02, 0x4d, 0x6e, 0xdf, 0x59, 0xa6, 0x78, 0xcc, 0xdd, 0xbe, 0x65, 0xf1, 0x0b, 0x7a, 0x04, 0x26, + 0x7c, 0xb8, 0xae, 0x0b, 0x61, 0x21, 0x51, 0xde, 0xc5, 0x2e, 0x72, 0x5f, 0xb2, 0xe6, 0x09, 0xc8, + 0x8b, 0x3c, 0x11, 0xa4, 0x2a, 0x66, 0x15, 0x73, 0x03, 0x4f, 0xff, 0x27, 0xd1, 0x68, 0xdd, 0xac, + 0x71, 0x33, 0x4e, 0xfe, 0x25, 0x58, 0xae, 0x15, 0xcc, 0x32, 0x23, 0x27, 0xff, 0x73, 0xc9, 0xe3, + 0xe7, 0x05, 0xa3, 0x9d, 0xe2, 0x46, 0xe9, 0xf6, 0xc4, 0x8d, 0x89, 0x43, 0xc7, 0x8d, 0x7e, 0x07, + 0x9b, 0x0c, 0x3a, 0xd8, 0x3f, 0x91, 0xbc, 0x11, 0x76, 0xa3, 0xc0, 0xc3, 0x49, 0xc4, 0xf3, 0x96, + 0x69, 0xff, 0xe9, 0x45, 0x1e, 0xdb, 0x0f, 0x7a, 0x47, 0xfa, 0xdc, 0xd8, 0x7e, 0xc8, 0x77, 0x38, + 0x18, 0x3d, 0x05, 0x59, 0x9a, 0x74, 0x51, 0x4d, 0x4b, 0x3c, 0x47, 0x7f, 0x22, 0xfa, 0x38, 0x9f, + 0x4d, 0x0f, 0x17, 0xb1, 0x23, 0x80, 0x5e, 0x20, 0x90, 0x0d, 0xc4, 0xa3, 0x27, 0x21, 0x4b, 0x5a, + 0xcf, 0x9e, 0x55, 0x05, 0x7e, 0x91, 0x49, 0x00, 0xe4, 0xf7, 0x00, 0x6a, 0x37, 0xdf, 0x68, 0x19, + 0x06, 0xf1, 0x35, 0xfa, 0xca, 0x15, 0x3b, 0x1a, 0x75, 0xb4, 0x43, 0xb0, 0x87, 0x0d, 0xa7, 0x34, + 0x45, 0x84, 0xfc, 0x95, 0x5b, 0x33, 0x79, 0x86, 0xfd, 0xb0, 0xd9, 0xd0, 0x1d, 0xdc, 0xb0, 0x9c, + 0x03, 0x85, 0xd3, 0xcb, 0xbf, 0x9f, 0x20, 0x91, 0x57, 0xc0, 0xb4, 0x77, 0x94, 0x6d, 0xa7, 0x0d, + 0x8d, 0xde, 0xe4, 0x3d, 0x0d, 0x50, 0xd3, 0x6c, 0xf5, 0xba, 0x66, 0x38, 0xb8, 0xca, 0x85, 0xee, + 0x83, 0xa0, 0x02, 0x64, 0x48, 0xa9, 0x65, 0xe3, 0x2a, 0x5f, 0x00, 0xb8, 0x65, 0x5f, 0x3f, 0x87, + 0xde, 0x5c, 0x3f, 0x83, 0x52, 0xce, 0x84, 0xa4, 0xec, 0x8b, 0x8a, 0xb2, 0xfe, 0xa8, 0x88, 0x1d, + 0x69, 0xe4, 0x27, 0xaa, 0x80, 0xb5, 0x4d, 0x94, 0xc9, 0x3a, 0xb3, 0x81, 0x1b, 0x96, 0x69, 0xd6, + 0x55, 0x66, 0xbc, 0xd8, 0xfb, 0xc9, 0x39, 0x0e, 0x2c, 0x53, 0x1b, 0xf6, 0xbd, 0x09, 0x6f, 0xfa, + 0x79, 0xd1, 0xef, 0xb7, 0x9d, 0x80, 0xe5, 0xef, 0xa7, 0x4b, 0xe2, 0xa0, 0xf3, 0x46, 0x5b, 0xfe, + 0x3d, 0xee, 0x16, 0x35, 0x0b, 0x42, 0xa1, 0x7b, 0xb5, 0x1f, 0xde, 0x5e, 0x38, 0x03, 0xdb, 0xe8, + 0x05, 0x38, 0x16, 0x32, 0x6d, 0x2e, 0xeb, 0x44, 0x8f, 0x16, 0xee, 0x48, 0xd0, 0xc2, 0x09, 0xce, + 0x9e, 0xac, 0x92, 0x6f, 0x72, 0xd2, 0xad, 0x90, 0x55, 0x96, 0x3f, 0x14, 0xe9, 0x38, 0xfa, 0xf4, + 0xb9, 0x7e, 0x87, 0x2c, 0xfc, 0x03, 0xeb, 0xd8, 0x1c, 0x03, 0xf2, 0xd5, 0xf1, 0x26, 0x1c, 0xe9, + 0x18, 0x92, 0xa0, 0x27, 0x21, 0xeb, 0x45, 0x33, 0x52, 0xc4, 0x92, 0xd0, 0x5d, 0xe6, 0x78, 0xb8, + 0xf2, 0x3f, 0x91, 0x3c, 0x96, 0xc1, 0x85, 0x53, 0x19, 0x06, 0xd9, 0x19, 0x1d, 0xbe, 0xf3, 0xff, + 0x48, 0x6f, 0xc1, 0xcc, 0x1c, 0x3b, 0xc0, 0xa3, 0x70, 0x62, 0xf9, 0x3d, 0x30, 0xc8, 0x20, 0x68, + 0x18, 0x86, 0xbc, 0x77, 0x28, 0x01, 0x06, 0x8b, 0x0b, 0x0b, 0xe5, 0xcd, 0xed, 0xbc, 0x84, 0xb2, + 0x90, 0x2e, 0x96, 0x36, 0x94, 0xed, 0x7c, 0x82, 0x80, 0x95, 0xf2, 0x33, 0xe5, 0x85, 0xed, 0x7c, + 0x12, 0x8d, 0xc3, 0x08, 0xfb, 0x5f, 0xbd, 0xb4, 0xa1, 0xac, 0x15, 0xb7, 0xf3, 0x29, 0x1f, 0x68, + 0xab, 0xbc, 0xbe, 0x58, 0x56, 0xf2, 0x69, 0xf9, 0x31, 0xb2, 0x56, 0x8a, 0x08, 0x7f, 0xbc, 0x55, + 0x91, 0xe4, 0x5b, 0x15, 0xc9, 0xaf, 0x26, 0xa0, 0x10, 0x1d, 0xd3, 0xa0, 0x67, 0x42, 0x1d, 0x3f, + 0xdb, 0x47, 0x40, 0x14, 0xea, 0x3d, 0xba, 0x0f, 0x46, 0x9b, 0x78, 0x17, 0x3b, 0x95, 0x3d, 0x16, + 0x63, 0x31, 0x8f, 0x39, 0xa2, 0x8c, 0x70, 0x28, 0x25, 0xb2, 0x19, 0xda, 0x4b, 0xb8, 0xe2, 0xa8, + 0xcc, 0x14, 0xd9, 0xfc, 0x77, 0xc3, 0x46, 0x18, 0x74, 0x8b, 0x01, 0xe5, 0xef, 0xe8, 0x4b, 0x96, + 0x59, 0x48, 0x2b, 0xe5, 0x6d, 0xe5, 0x1d, 0xf9, 0x24, 0x42, 0x30, 0x4a, 0xff, 0x55, 0xb7, 0xd6, + 0x8b, 0x9b, 0x5b, 0xcb, 0x1b, 0x44, 0x96, 0x13, 0x30, 0x26, 0x64, 0x29, 0x80, 0x69, 0xf9, 0xcf, + 0xa5, 0xf6, 0xcd, 0xc0, 0xb3, 0xc1, 0xcd, 0xc0, 0xf6, 0x24, 0x80, 0x6f, 0x8f, 0x4c, 0xec, 0x02, + 0xbe, 0xa5, 0xff, 0x5d, 0x40, 0xdf, 0xfe, 0xdf, 0xd3, 0x87, 0xd9, 0xff, 0xf3, 0xef, 0xfc, 0x5d, + 0xe8, 0x77, 0xe7, 0xcf, 0xdb, 0xf3, 0x5b, 0xb8, 0x0d, 0x7b, 0x7e, 0xf2, 0xbb, 0x61, 0x34, 0x98, + 0xd4, 0xf1, 0x0e, 0xbe, 0x48, 0xfe, 0x83, 0x2f, 0xe7, 0x20, 0x7d, 0xcd, 0x64, 0xc6, 0xaa, 0xf3, + 0x94, 0xbd, 0x62, 0x3a, 0xd8, 0x97, 0x14, 0x62, 0xd8, 0xf2, 0xcb, 0x90, 0xa6, 0xc6, 0xa7, 0xe3, + 0x75, 0x85, 0x77, 0x03, 0x68, 0x8e, 0xd3, 0xd4, 0x77, 0x5a, 0x1e, 0xe3, 0x99, 0xce, 0xc6, 0xab, + 0x28, 0xf0, 0x4a, 0x27, 0xb9, 0x15, 0x9b, 0xf4, 0x48, 0x7d, 0x96, 0xcc, 0xc7, 0x50, 0x5e, 0x87, + 0xd1, 0x20, 0x6d, 0x87, 0xcb, 0x1c, 0x1d, 0x6f, 0x5a, 0x79, 0xa1, 0x18, 0xbf, 0x6c, 0x4f, 0x0b, + 0xf2, 0x0d, 0x09, 0x32, 0xdb, 0xfb, 0x5c, 0xad, 0xbb, 0x1c, 0x08, 0xf3, 0xee, 0xa0, 0xb8, 0x39, + 0x0f, 0x96, 0x56, 0x4a, 0xba, 0xc9, 0xaa, 0xb7, 0xbb, 0x13, 0x37, 0xd5, 0xeb, 0xaa, 0x54, 0x64, + 0xed, 0xb8, 0xb1, 0xba, 0xd8, 0xdb, 0x19, 0xef, 0x49, 0x48, 0xfb, 0xcf, 0x67, 0xb3, 0x82, 0x5c, + 0xf5, 0x6d, 0x8d, 0x32, 0x2f, 0xe2, 0x3f, 0x0c, 0x2e, 0xf5, 0x7d, 0x18, 0xdc, 0xad, 0x25, 0xe1, + 0xaf, 0xe5, 0x1a, 0x64, 0x84, 0x52, 0xa0, 0xb7, 0xf9, 0xe7, 0x89, 0x48, 0x35, 0x47, 0xba, 0xd2, + 0xf6, 0x0d, 0xf2, 0xd3, 0x30, 0xce, 0x8f, 0x0b, 0x79, 0x6b, 0x16, 0xfe, 0x70, 0xf6, 0x18, 0xfb, + 0xb0, 0x2a, 0x16, 0x2c, 0xf2, 0x9f, 0x49, 0x90, 0x11, 0x13, 0x16, 0x3d, 0x16, 0x38, 0x13, 0x76, + 0x57, 0x64, 0xf2, 0xd1, 0x77, 0x22, 0x2c, 0xd0, 0xd6, 0x44, 0xff, 0x6d, 0xbd, 0xfd, 0x47, 0x76, + 0x3b, 0x9f, 0xff, 0x4f, 0x47, 0x9c, 0xff, 0x7f, 0x9f, 0x04, 0x19, 0xd7, 0x37, 0xf6, 0x9b, 0xe6, + 0x3b, 0x0a, 0x83, 0xdc, 0xfc, 0xb3, 0x3c, 0x1f, 0x2f, 0xb9, 0x19, 0xe7, 0x94, 0x2f, 0xe3, 0x5c, + 0x80, 0x8c, 0xf8, 0x05, 0x06, 0xbe, 0x6c, 0x74, 0xcb, 0xa7, 0x2f, 0xc0, 0xb0, 0x2f, 0xe3, 0x4a, + 0x66, 0xde, 0x7a, 0xf9, 0xf9, 0xfc, 0x40, 0x61, 0xe8, 0xc6, 0xcd, 0xd9, 0xe4, 0x3a, 0xbe, 0x4e, + 0x74, 0x56, 0x29, 0x2f, 0x2c, 0x97, 0x17, 0x9e, 0xcd, 0x4b, 0x85, 0xe1, 0x1b, 0x37, 0x67, 0x87, + 0x14, 0x4c, 0x13, 0x37, 0xa7, 0x97, 0x21, 0xe7, 0x1f, 0x95, 0xa0, 0x07, 0x41, 0x30, 0xba, 0x78, + 0x79, 0x73, 0x75, 0x65, 0xa1, 0xb8, 0x5d, 0x56, 0xd9, 0xc9, 0x1a, 0x74, 0x0c, 0x26, 0x56, 0x57, + 0x96, 0x96, 0xb7, 0xd5, 0x85, 0xd5, 0x95, 0xf2, 0xfa, 0xb6, 0x5a, 0xdc, 0xde, 0x2e, 0x2e, 0x3c, + 0x9b, 0x4f, 0x9c, 0x7d, 0x3f, 0xc0, 0x58, 0xb1, 0xb4, 0xb0, 0x42, 0xbc, 0x9f, 0xce, 0xdf, 0x08, + 0x5e, 0x80, 0x14, 0x5d, 0xb5, 0x77, 0xdd, 0xea, 0x2d, 0x74, 0xcf, 0x0b, 0xa2, 0x4b, 0x90, 0xa6, + 0x0b, 0x7a, 0xd4, 0x7d, 0xef, 0xb7, 0x10, 0x93, 0x28, 0x24, 0x8d, 0xa1, 0xd3, 0xa3, 0xeb, 0x66, + 0x70, 0xa1, 0x7b, 0xde, 0x10, 0x29, 0x90, 0xf5, 0x56, 0xe4, 0xf1, 0x9b, 0xc3, 0x85, 0x1e, 0x72, + 0x89, 0x84, 0xa7, 0xb7, 0x2c, 0x88, 0xdf, 0x2c, 0x2d, 0xf4, 0x60, 0xc0, 0xd0, 0x2a, 0x0c, 0x89, + 0x95, 0x5c, 0xdc, 0xf6, 0x6d, 0x21, 0x36, 0xcf, 0x47, 0x86, 0x80, 0xad, 0xb8, 0xbb, 0xef, 0x45, + 0x17, 0x62, 0x92, 0x96, 0x68, 0xc5, 0x3d, 0xe3, 0x1b, 0xb3, 0x25, 0x5b, 0x88, 0xcb, 0xdb, 0x11, + 0xa1, 0x79, 0xa9, 0x8c, 0xf8, 0x1d, 0xf6, 0x42, 0x0f, 0xf9, 0x58, 0x74, 0x19, 0xc0, 0xb7, 0xbe, + 0xee, 0x61, 0xeb, 0xbc, 0xd0, 0x4b, 0x9e, 0x15, 0x6d, 0x40, 0xc6, 0x5d, 0xee, 0xc4, 0x6e, 0x64, + 0x17, 0xe2, 0x13, 0x9e, 0xe8, 0x3d, 0x30, 0x12, 0x8c, 0xf3, 0x7b, 0xdb, 0x9e, 0x2e, 0xf4, 0x98, + 0xc9, 0x24, 0xfc, 0x83, 0x41, 0x7f, 0x6f, 0xdb, 0xd5, 0x85, 0x1e, 0x13, 0x9b, 0xe8, 0x25, 0x18, + 0x6f, 0x0f, 0xca, 0x7b, 0xdf, 0xbd, 0x2e, 0xf4, 0x91, 0xea, 0x44, 0x0d, 0x40, 0x1d, 0x82, 0xf9, + 0x3e, 0x36, 0xb3, 0x0b, 0xfd, 0x64, 0x3e, 0x4b, 0xe5, 0xc8, 0xb3, 0x42, 0x0f, 0xc5, 0x9e, 0x15, + 0xf2, 0x4e, 0xff, 0xb8, 0xe7, 0x83, 0x7e, 0xe9, 0x2c, 0xdc, 0x1b, 0xf1, 0xa6, 0x84, 0x78, 0x8d, + 0xe0, 0x50, 0xaf, 0x4a, 0x44, 0xde, 0xab, 0x8f, 0x3b, 0x17, 0x18, 0x7f, 0x0c, 0xe8, 0xf0, 0x2f, + 0x56, 0xc4, 0x9c, 0x5e, 0xea, 0x76, 0x50, 0x4a, 0xfe, 0x90, 0x04, 0xa3, 0xcb, 0xba, 0xed, 0x98, + 0x4d, 0xbd, 0xa2, 0xd5, 0xa9, 0xa9, 0x3e, 0xdf, 0xeb, 0x41, 0xeb, 0xd0, 0x1e, 0xed, 0xd3, 0x30, + 0x78, 0x4d, 0xab, 0xb3, 0x13, 0xce, 0x49, 0xba, 0xc6, 0x88, 0x78, 0xff, 0x21, 0x1c, 0x96, 0x70, + 0x32, 0xf9, 0x67, 0xe8, 0xd1, 0xc9, 0x46, 0x43, 0xb7, 0xd9, 0xef, 0x91, 0x92, 0x35, 0x41, 0x09, + 0x52, 0x4d, 0xcd, 0xe1, 0x21, 0x79, 0x69, 0x8e, 0x3f, 0x45, 0x72, 0x7f, 0x0f, 0x0f, 0x6b, 0x2c, + 0xe2, 0x8a, 0x42, 0x69, 0xd1, 0xbb, 0x80, 0xac, 0x31, 0x54, 0xca, 0x87, 0x5d, 0x63, 0x2a, 0xf6, + 0xc7, 0xe7, 0x8d, 0x5b, 0x33, 0x63, 0x07, 0x5a, 0xa3, 0x3e, 0x2f, 0x0b, 0x3e, 0xb2, 0x42, 0x96, + 0x2a, 0xa4, 0x89, 0xc8, 0x82, 0x31, 0x02, 0xad, 0xec, 0x69, 0x46, 0x0d, 0xb3, 0x4a, 0x68, 0xce, + 0xa9, 0xb4, 0xdc, 0x77, 0x25, 0x47, 0xbd, 0x4a, 0x7c, 0xec, 0x64, 0x65, 0xa4, 0xa1, 0xed, 0x2f, + 0x50, 0x00, 0xa9, 0x71, 0x3e, 0xf3, 0xea, 0x6b, 0x33, 0x03, 0xf4, 0x04, 0xdf, 0xe7, 0x25, 0x00, + 0x4f, 0x62, 0xe8, 0x5d, 0x90, 0xaf, 0xb8, 0x25, 0x4a, 0x2b, 0x32, 0xd3, 0x0f, 0x44, 0x8d, 0x45, + 0x48, 0xde, 0x2c, 0xaa, 0xfb, 0xdc, 0xad, 0x19, 0x49, 0x19, 0xab, 0x84, 0x86, 0xe2, 0x9d, 0x30, + 0xcc, 0x92, 0x41, 0x2a, 0x8d, 0x10, 0x13, 0xb1, 0x11, 0xe2, 0x34, 0xe1, 0xf5, 0xc6, 0xad, 0x19, + 0xc4, 0xba, 0xe5, 0x23, 0x96, 0x69, 0xdc, 0x08, 0x0c, 0x42, 0x08, 0x7c, 0x7d, 0xfa, 0x4d, 0x09, + 0x86, 0x17, 0x7d, 0x0f, 0x2c, 0x4e, 0xc1, 0x50, 0xc3, 0x34, 0xf4, 0xab, 0xb8, 0xe9, 0xee, 0x5c, + 0xb0, 0x22, 0x09, 0xed, 0xd8, 0x2f, 0x5b, 0x38, 0x07, 0xe2, 0x5e, 0xb4, 0x28, 0x13, 0xaa, 0xeb, + 0x78, 0xc7, 0xd6, 0xc5, 0x68, 0x28, 0xa2, 0x88, 0x2e, 0x41, 0xde, 0xc6, 0x95, 0x56, 0x53, 0x77, + 0x0e, 0xd4, 0x8a, 0x69, 0x38, 0x5a, 0x85, 0x2d, 0x70, 0xb2, 0xa5, 0x13, 0x6f, 0xdc, 0x9a, 0x39, + 0xc6, 0xda, 0x1a, 0xc6, 0x90, 0x95, 0x31, 0x01, 0x5a, 0x60, 0x10, 0x52, 0x43, 0x15, 0x3b, 0x9a, + 0x5e, 0x67, 0x27, 0x34, 0xb2, 0x8a, 0x28, 0xfa, 0xfa, 0xf2, 0x03, 0x19, 0xff, 0x0a, 0xe8, 0x12, + 0xe4, 0x4d, 0x0b, 0x37, 0x03, 0xb7, 0x52, 0xa4, 0x70, 0xcd, 0x61, 0x0c, 0x59, 0x19, 0x13, 0x20, + 0x71, 0x63, 0xc5, 0x09, 0x6c, 0x40, 0xb4, 0x76, 0xbc, 0xcb, 0xb1, 0x93, 0x6d, 0xa3, 0x51, 0x34, + 0x0e, 0x4a, 0x8f, 0x7b, 0xdc, 0xc3, 0x74, 0xf2, 0x67, 0x3f, 0xfd, 0xc8, 0x24, 0x57, 0x0d, 0x6f, + 0xfd, 0xf4, 0x2c, 0x3e, 0xf0, 0xef, 0x54, 0x50, 0x4c, 0x12, 0x74, 0xbf, 0xa4, 0xe9, 0x75, 0xf1, + 0x5b, 0x3f, 0x0a, 0x2f, 0xa1, 0x79, 0x18, 0xb4, 0x1d, 0xcd, 0x69, 0xd9, 0xfc, 0xd9, 0x17, 0x39, + 0x4a, 0xd5, 0x4a, 0xa6, 0x51, 0xdd, 0xa2, 0x98, 0x0a, 0xa7, 0x40, 0x97, 0x60, 0x90, 0xbf, 0xa7, + 0x93, 0xee, 0x7b, 0x7e, 0xd3, 0x87, 0x93, 0x18, 0x35, 0x91, 0x48, 0x15, 0xd7, 0x71, 0x8d, 0xdd, + 0xb1, 0xd8, 0xd3, 0x9a, 0x98, 0xdd, 0xbb, 0xca, 0x96, 0x56, 0xfa, 0x9e, 0x84, 0x5c, 0x52, 0x61, + 0x7e, 0xb2, 0x32, 0xe6, 0x82, 0xb6, 0x28, 0x04, 0x3d, 0x1b, 0x78, 0x09, 0x94, 0xef, 0x3f, 0xdf, + 0x13, 0xd5, 0x7d, 0x9f, 0x4e, 0x8b, 0xcb, 0x8a, 0xfe, 0x77, 0x44, 0x2f, 0x41, 0xbe, 0x65, 0xec, + 0x98, 0x06, 0xfd, 0x41, 0x0e, 0xbe, 0x1a, 0xca, 0x90, 0xc5, 0x93, 0x5f, 0x39, 0xc2, 0x18, 0xb2, + 0x32, 0xe6, 0x82, 0xf8, 0x8e, 0x59, 0x15, 0x46, 0x3d, 0x2c, 0x3a, 0x51, 0xb3, 0xb1, 0x13, 0xf5, + 0x6e, 0x3e, 0x51, 0x8f, 0x84, 0x6b, 0xf1, 0xe6, 0xea, 0x88, 0x0b, 0x24, 0x64, 0x68, 0x19, 0xc0, + 0x33, 0x0f, 0xee, 0xae, 0x75, 0xac, 0x8d, 0x11, 0x1b, 0x57, 0x1e, 0x2d, 0xfa, 0x2e, 0x98, 0x68, + 0xe8, 0x86, 0x6a, 0xe3, 0xfa, 0xae, 0xca, 0x05, 0x4c, 0x58, 0xd2, 0xfd, 0x80, 0xd2, 0x6a, 0x7f, + 0xfa, 0xf0, 0xc6, 0xad, 0x99, 0x02, 0x37, 0xa1, 0xed, 0x2c, 0x65, 0x65, 0xbc, 0xa1, 0x1b, 0x5b, + 0xb8, 0xbe, 0xbb, 0xe8, 0xc2, 0xd0, 0x5b, 0xe0, 0x84, 0xd7, 0x5b, 0xd3, 0x50, 0xf7, 0xcc, 0x7a, + 0x55, 0x6d, 0xe2, 0x5d, 0xb5, 0x42, 0xdf, 0xd7, 0xca, 0xd1, 0xd5, 0xeb, 0x31, 0x17, 0x65, 0xc3, + 0x58, 0x36, 0xeb, 0x55, 0x05, 0xef, 0x2e, 0x90, 0xcf, 0xe8, 0x1e, 0xf0, 0xc4, 0xa2, 0xea, 0x55, + 0x7b, 0x6a, 0x64, 0x36, 0x79, 0x2a, 0xa5, 0xe4, 0x5c, 0xe0, 0x4a, 0xd5, 0x9e, 0xcf, 0x7d, 0xf0, + 0xb5, 0x99, 0x01, 0x6e, 0x11, 0x06, 0xe4, 0xf3, 0xf4, 0xae, 0x3e, 0x9f, 0xc9, 0x98, 0x66, 0xfe, + 0x35, 0x51, 0xe0, 0x27, 0xbd, 0x3d, 0x00, 0xb3, 0x24, 0xaf, 0xfc, 0xfe, 0xac, 0x24, 0xff, 0xb4, + 0x04, 0x83, 0x8b, 0x57, 0x36, 0x35, 0xbd, 0x89, 0x56, 0x60, 0xdc, 0x53, 0xce, 0xa0, 0x1d, 0x39, + 0xf9, 0xc6, 0xad, 0x99, 0xa9, 0xb0, 0xfe, 0xba, 0x86, 0xc4, 0x9b, 0x23, 0xc2, 0x92, 0xac, 0x44, + 0x5d, 0x94, 0x0b, 0xb0, 0x6a, 0x43, 0x91, 0xdb, 0xaf, 0xd1, 0x85, 0xba, 0x59, 0x86, 0x21, 0xd6, + 0x5a, 0x1b, 0xcd, 0x43, 0xda, 0x22, 0xff, 0xf0, 0x3c, 0xfa, 0x74, 0xe4, 0xfc, 0xa0, 0xf8, 0xee, + 0xc5, 0x69, 0x42, 0x22, 0x7f, 0x38, 0x01, 0xb0, 0x78, 0xe5, 0xca, 0x76, 0x53, 0xb7, 0xea, 0xd8, + 0xb9, 0x9d, 0x3d, 0xdf, 0x86, 0x23, 0xbe, 0x5b, 0x59, 0xcd, 0x4a, 0xa8, 0xf7, 0xb3, 0x6f, 0xdc, + 0x9a, 0x39, 0x19, 0xee, 0xbd, 0x0f, 0x4d, 0x56, 0x26, 0xbc, 0xfb, 0x59, 0xcd, 0x4a, 0x47, 0xae, + 0x55, 0xdb, 0x71, 0xb9, 0x26, 0xa3, 0xb9, 0xfa, 0xd0, 0xfc, 0x5c, 0x17, 0x6d, 0xa7, 0xb3, 0x68, + 0xb7, 0x60, 0xd8, 0x13, 0x89, 0x8d, 0x16, 0x21, 0xe3, 0xf0, 0xff, 0xb9, 0x84, 0xe5, 0x68, 0x09, + 0x0b, 0x32, 0x71, 0x45, 0x44, 0x50, 0xca, 0x7f, 0x2a, 0x01, 0xf8, 0xa6, 0xc5, 0x5f, 0x48, 0x15, + 0x23, 0xde, 0x82, 0xdb, 0xf6, 0xe4, 0xa1, 0xa2, 0x41, 0x4e, 0x1d, 0x92, 0xe7, 0xf7, 0x27, 0x60, + 0xe2, 0xb2, 0x98, 0xb0, 0x7f, 0xe1, 0x65, 0xb0, 0x09, 0x43, 0xd8, 0x70, 0x9a, 0x3a, 0x16, 0x1b, + 0x69, 0x8f, 0x46, 0x8d, 0x76, 0x87, 0x3e, 0xd1, 0x1f, 0xad, 0x14, 0xb7, 0x72, 0x38, 0x9b, 0x90, + 0x34, 0xbe, 0x96, 0x84, 0xa9, 0x28, 0x4a, 0xb4, 0x00, 0x63, 0x95, 0x26, 0x66, 0x0f, 0xbd, 0xf9, + 0x13, 0xcb, 0xa5, 0x82, 0x17, 0xbc, 0x86, 0x10, 0x64, 0x65, 0x54, 0x40, 0xb8, 0x83, 0xaa, 0x01, + 0x89, 0x2c, 0x89, 0xda, 0xd1, 0xf7, 0xe2, 0x7a, 0x0b, 0x25, 0x65, 0xee, 0xa1, 0x44, 0x25, 0x41, + 0x06, 0xcc, 0x45, 0x8d, 0x7a, 0x50, 0xea, 0xa3, 0xde, 0x0b, 0x63, 0xe2, 0x88, 0xec, 0x8e, 0x56, + 0xd7, 0x8c, 0xca, 0x61, 0x02, 0x73, 0xe6, 0x55, 0x78, 0xb5, 0x21, 0x76, 0xb2, 0x22, 0xce, 0xe0, + 0x96, 0x18, 0x00, 0x2d, 0xc3, 0x90, 0xa8, 0x2a, 0x75, 0xa8, 0x80, 0x46, 0x90, 0xa3, 0xbb, 0x21, + 0xe7, 0x77, 0x2d, 0x34, 0x3e, 0x4a, 0x29, 0xc3, 0x3e, 0xcf, 0x12, 0xe7, 0xbb, 0x06, 0xbb, 0xfa, + 0x2e, 0x5f, 0x90, 0xfa, 0x87, 0x49, 0x18, 0x57, 0x70, 0xf5, 0xff, 0x8f, 0x75, 0x7f, 0x63, 0xbd, + 0x06, 0xc0, 0xec, 0x09, 0xb1, 0xe0, 0x87, 0x18, 0x6e, 0x62, 0x91, 0xb2, 0x8c, 0xc3, 0xa2, 0xed, + 0x7c, 0x33, 0x07, 0xfc, 0x56, 0x02, 0x72, 0xfe, 0x01, 0xff, 0x36, 0xf5, 0xab, 0x68, 0xc5, 0xb3, + 0xa5, 0xec, 0xd8, 0x77, 0xe4, 0x8b, 0x95, 0x6d, 0xd3, 0xa3, 0xbb, 0x11, 0xfd, 0x5f, 0x09, 0x18, + 0xe4, 0x1b, 0x9e, 0x95, 0xb6, 0x70, 0x5c, 0x8a, 0xbb, 0x4a, 0xd8, 0x3d, 0x1a, 0x7f, 0xb5, 0x43, + 0x34, 0xfe, 0x76, 0x18, 0x6d, 0x68, 0xfb, 0x6a, 0xe0, 0x20, 0x99, 0x74, 0x6a, 0xa4, 0x74, 0xdc, + 0xe3, 0x12, 0xfc, 0xce, 0x52, 0x0a, 0x57, 0xfc, 0xaf, 0x3e, 0x0d, 0x13, 0x0c, 0xcf, 0xb5, 0x10, + 0xf2, 0xa3, 0xde, 0xda, 0xdd, 0xf7, 0x51, 0x56, 0xa0, 0xa1, 0xed, 0x97, 0x59, 0x01, 0xad, 0x02, + 0xda, 0x73, 0xd3, 0x47, 0xaa, 0x27, 0x4e, 0x42, 0x7f, 0xd7, 0x1b, 0xb7, 0x66, 0x8e, 0x33, 0xfa, + 0x76, 0x1c, 0x59, 0x19, 0xf7, 0x80, 0x82, 0xdb, 0x13, 0x00, 0xa4, 0x5f, 0x2a, 0x7b, 0xf4, 0x96, + 0xad, 0x09, 0x8f, 0xbc, 0x71, 0x6b, 0x66, 0x9c, 0x71, 0xf1, 0xbe, 0xc9, 0x4a, 0x96, 0x14, 0x16, + 0xc9, 0xff, 0x3e, 0xcd, 0xfe, 0x84, 0x04, 0xc8, 0x73, 0x5a, 0xee, 0x91, 0xec, 0x65, 0x7a, 0xc6, + 0x56, 0x2c, 0x2d, 0xa4, 0xee, 0xab, 0x15, 0x8f, 0x5e, 0xac, 0x56, 0x7c, 0x33, 0xe5, 0x82, 0x67, + 0xe0, 0x13, 0x71, 0x2f, 0xc0, 0x72, 0x15, 0xe1, 0xf8, 0x6e, 0x2b, 0x07, 0xe4, 0xdf, 0x92, 0xe0, + 0x78, 0x9b, 0x46, 0xb9, 0x8d, 0x7d, 0x0f, 0xa0, 0xa6, 0xef, 0x23, 0xff, 0xe5, 0x69, 0x89, 0xdf, + 0x54, 0xea, 0x53, 0x41, 0xc7, 0x9b, 0x6d, 0x86, 0xfd, 0xb6, 0xf9, 0x28, 0xfe, 0xc4, 0xf0, 0x3f, + 0x95, 0x60, 0xd2, 0x5f, 0xbd, 0xdb, 0x91, 0x75, 0xc8, 0xf9, 0x6b, 0xe7, 0x5d, 0xb8, 0xb7, 0x97, + 0x2e, 0xf0, 0xd6, 0x07, 0xe8, 0xd1, 0x73, 0xde, 0x74, 0x65, 0x09, 0xc6, 0xc7, 0x7a, 0x96, 0x86, + 0xbb, 0xb9, 0x10, 0x9a, 0xb6, 0x29, 0x3a, 0x1e, 0x7f, 0x2e, 0x41, 0x6a, 0xd3, 0x34, 0xeb, 0xc8, + 0x84, 0x71, 0xc3, 0x74, 0x54, 0xa2, 0x59, 0xb8, 0xea, 0x7f, 0xe9, 0x37, 0x5b, 0x5a, 0xe8, 0x4f, + 0x48, 0x5f, 0xb9, 0x35, 0xd3, 0xce, 0x4a, 0x19, 0x33, 0x4c, 0xa7, 0x44, 0x21, 0xfc, 0xb1, 0xdf, + 0xef, 0x82, 0x91, 0x60, 0x65, 0xcc, 0x4a, 0x3e, 0xdf, 0x77, 0x65, 0x41, 0x36, 0x6f, 0xdc, 0x9a, + 0x99, 0xf4, 0x66, 0x8c, 0x0b, 0x96, 0x95, 0xdc, 0x8e, 0xaf, 0x76, 0xf6, 0x20, 0xde, 0xd7, 0xc8, + 0x18, 0x6e, 0x43, 0xfe, 0x4a, 0xf8, 0x2c, 0xd8, 0xdb, 0x61, 0xe8, 0x70, 0xc7, 0xca, 0x04, 0xd9, + 0xe9, 0x5f, 0x94, 0x00, 0xbc, 0xa4, 0x0f, 0x7a, 0x18, 0x8e, 0x95, 0x36, 0xd6, 0x17, 0xd5, 0xad, + 0xed, 0xe2, 0xf6, 0xe5, 0xad, 0xe0, 0x5b, 0xbb, 0xe2, 0x99, 0x02, 0xdb, 0xc2, 0x15, 0x7d, 0x57, + 0xc7, 0x55, 0x74, 0x3f, 0x4c, 0x06, 0xb1, 0x49, 0xa9, 0xbc, 0x98, 0x97, 0x0a, 0xb9, 0x1b, 0x37, + 0x67, 0x33, 0x2c, 0x46, 0xc5, 0x55, 0x74, 0x0a, 0x8e, 0xb4, 0xe3, 0xad, 0xac, 0x2f, 0xe5, 0x13, + 0x85, 0x91, 0x1b, 0x37, 0x67, 0xb3, 0x6e, 0x30, 0x8b, 0x64, 0x40, 0x7e, 0x4c, 0xce, 0x2f, 0x59, + 0x80, 0x1b, 0x37, 0x67, 0x07, 0xd9, 0xb0, 0x14, 0x52, 0x1f, 0xfc, 0xc4, 0xf4, 0xc0, 0xe9, 0x9f, + 0x94, 0x60, 0x74, 0xc5, 0xd8, 0x6d, 0x6a, 0x15, 0xf7, 0xbd, 0xe0, 0x27, 0xe0, 0xc4, 0xca, 0xfa, + 0x25, 0xa5, 0xb8, 0x10, 0xf1, 0x58, 0x70, 0x61, 0xe2, 0xc6, 0xcd, 0xd9, 0x31, 0x8f, 0xa8, 0xdc, + 0xb0, 0x9c, 0x03, 0x74, 0xa6, 0x9d, 0x6a, 0x71, 0xe3, 0x72, 0x69, 0xb5, 0xac, 0x6e, 0xad, 0x2c, + 0xad, 0xe7, 0xa5, 0xc2, 0xe8, 0x8d, 0x9b, 0xb3, 0xb0, 0x48, 0x7f, 0x1b, 0x77, 0x4b, 0xaf, 0x19, + 0xe8, 0x34, 0x4c, 0xb5, 0x13, 0x3c, 0xcf, 0x7e, 0x62, 0x3f, 0xc1, 0x7a, 0xbe, 0x68, 0x5e, 0x37, + 0x88, 0x27, 0x60, 0x6d, 0xbd, 0xed, 0xaf, 0x07, 0xff, 0xf1, 0x50, 0xe4, 0xce, 0x49, 0x0d, 0x1b, + 0xd8, 0xd6, 0xed, 0x43, 0xed, 0x9c, 0xf4, 0xb4, 0x1b, 0x23, 0xff, 0x4e, 0x1a, 0x72, 0x4b, 0xac, + 0x16, 0x7a, 0xd7, 0x0d, 0xbd, 0x05, 0x06, 0x03, 0x27, 0xac, 0x23, 0xb3, 0x07, 0x81, 0x17, 0x07, + 0x38, 0x0d, 0xb2, 0xf9, 0xad, 0x31, 0x76, 0x2e, 0xc1, 0x3b, 0xfd, 0x91, 0xeb, 0x2b, 0x2d, 0xc8, + 0xc2, 0x42, 0x9e, 0x81, 0x0b, 0xf3, 0x93, 0xd9, 0xcd, 0xb2, 0x6d, 0x02, 0x61, 0x2f, 0x0a, 0x7e, + 0x40, 0x82, 0x23, 0x14, 0xcb, 0x0b, 0x45, 0x28, 0xa6, 0x58, 0xb0, 0x9d, 0x8e, 0xea, 0xc2, 0xaa, + 0x66, 0x7b, 0xef, 0x83, 0xb1, 0x37, 0x00, 0xef, 0xe5, 0xa1, 0xc0, 0x49, 0x5f, 0xe5, 0x61, 0xb6, + 0xb2, 0x42, 0x8f, 0xc8, 0x07, 0x29, 0x6d, 0xb4, 0xd4, 0xe1, 0x42, 0x62, 0xcf, 0x3b, 0x32, 0xfe, + 0x93, 0xe5, 0xcf, 0xc0, 0xb0, 0x67, 0x4d, 0xed, 0xa9, 0x74, 0x4c, 0x8e, 0x21, 0x6c, 0xc3, 0xfd, + 0xc4, 0xe8, 0xfb, 0x24, 0x38, 0xe2, 0xc5, 0x33, 0x7e, 0xb6, 0x83, 0x94, 0xed, 0x43, 0x7d, 0x2c, + 0x66, 0xc3, 0xc2, 0xe9, 0xc8, 0x57, 0x56, 0x26, 0x5b, 0xed, 0xa4, 0x64, 0x19, 0x3d, 0xe2, 0xf7, + 0x2d, 0xe2, 0x04, 0x6f, 0x3f, 0xce, 0x29, 0xc8, 0x00, 0x15, 0x20, 0x83, 0xf7, 0x2d, 0xb3, 0xe9, + 0xe0, 0x2a, 0xcd, 0xdb, 0x66, 0x14, 0xb7, 0x2c, 0xaf, 0x03, 0x6a, 0x1f, 0xdc, 0xf0, 0x81, 0xa8, + 0x6c, 0x87, 0x03, 0x51, 0xfe, 0xa3, 0x4a, 0xf3, 0x99, 0x0f, 0xf2, 0x00, 0xe2, 0xb6, 0xcf, 0xf9, + 0x2f, 0x24, 0xe0, 0xb4, 0x7f, 0x8b, 0x91, 0x5e, 0x90, 0x72, 0xa7, 0xa8, 0xa5, 0xd5, 0x74, 0xc3, + 0xff, 0x72, 0xf6, 0x71, 0x7f, 0xc8, 0x43, 0x71, 0x85, 0x9c, 0xe4, 0x0f, 0x4a, 0x30, 0xbc, 0xa9, + 0xd5, 0xb0, 0x78, 0xb9, 0xa0, 0xfd, 0x30, 0xdb, 0x51, 0x18, 0x34, 0x77, 0x77, 0xc5, 0x3b, 0x48, + 0x29, 0x85, 0x97, 0x48, 0x9f, 0xeb, 0x7a, 0x43, 0x77, 0xf8, 0x85, 0x11, 0x56, 0x40, 0x33, 0x30, + 0x4c, 0x17, 0x37, 0x6c, 0xca, 0xf1, 0x5b, 0xa7, 0x40, 0x41, 0x74, 0xca, 0x11, 0x21, 0x36, 0xf1, + 0x35, 0xdc, 0xb4, 0xd9, 0x2f, 0x92, 0x67, 0x14, 0x51, 0x94, 0x9f, 0x86, 0x1c, 0x6b, 0x09, 0x0f, + 0x47, 0x8e, 0x43, 0x86, 0xbe, 0xce, 0xe7, 0xb5, 0x67, 0x88, 0x94, 0xf9, 0xd1, 0x30, 0xc6, 0x9f, + 0x35, 0x89, 0x15, 0x4a, 0xa5, 0x48, 0x29, 0x9f, 0x8a, 0xb7, 0x1a, 0x4c, 0x86, 0xae, 0x84, 0x7f, + 0x2d, 0x0d, 0x47, 0xf8, 0x06, 0xb0, 0x66, 0xe9, 0x67, 0xf6, 0x1c, 0x47, 0xbc, 0xb7, 0x0d, 0x7c, + 0x1d, 0xa0, 0x59, 0xba, 0x7c, 0x00, 0xa9, 0x65, 0xc7, 0xb1, 0xd0, 0x69, 0x48, 0x37, 0x5b, 0x75, + 0xd7, 0xf1, 0xba, 0xbb, 0x3a, 0x9a, 0xa5, 0xcf, 0x11, 0x04, 0xa5, 0x55, 0xc7, 0x0a, 0x43, 0x41, + 0x65, 0x98, 0xd9, 0x6d, 0xd5, 0xeb, 0x07, 0x6a, 0x15, 0x57, 0xcc, 0x2a, 0x56, 0x9b, 0xd8, 0xc6, + 0xcd, 0x6b, 0xb8, 0xaa, 0xe2, 0x7d, 0x4b, 0x33, 0xdc, 0x0b, 0x3a, 0x19, 0xe5, 0x24, 0x45, 0x5b, + 0xa4, 0x58, 0x0a, 0x47, 0x2a, 0x0b, 0x1c, 0xf9, 0xf7, 0x12, 0x90, 0x11, 0xac, 0xe9, 0x83, 0xc3, + 0xb8, 0x8e, 0x2b, 0x8e, 0x7b, 0xab, 0xc8, 0x2d, 0x23, 0x04, 0xc9, 0x1a, 0x1f, 0xbc, 0xec, 0xf2, + 0x80, 0x42, 0x0a, 0x04, 0xe6, 0x3e, 0x03, 0x4d, 0x60, 0x56, 0x8b, 0x8c, 0x67, 0xca, 0x32, 0xc5, + 0xc2, 0x78, 0x79, 0x40, 0xa1, 0x25, 0x34, 0x05, 0x83, 0x64, 0xd2, 0x38, 0x6c, 0xb4, 0x08, 0x9c, + 0x97, 0xd1, 0x51, 0x48, 0x5b, 0x9a, 0x53, 0x61, 0x2f, 0x34, 0x92, 0x0f, 0xac, 0x88, 0x9e, 0x84, + 0x41, 0xf6, 0x4b, 0x3e, 0xfc, 0xc2, 0xc8, 0x5d, 0x7e, 0x61, 0xb0, 0x9f, 0x4c, 0x26, 0xed, 0xde, + 0xd4, 0x1c, 0x07, 0x37, 0x0d, 0x7a, 0x2d, 0x8d, 0x02, 0x11, 0x82, 0xd4, 0x8e, 0x59, 0x65, 0xd7, + 0x02, 0xb3, 0x0a, 0xfd, 0x9f, 0x9d, 0x0a, 0x67, 0xfa, 0xa0, 0xd2, 0x8f, 0x39, 0x76, 0xed, 0x40, + 0x00, 0x4b, 0x04, 0xa9, 0x0c, 0x13, 0x5a, 0xb5, 0xaa, 0x13, 0x85, 0x27, 0xeb, 0x7f, 0x9d, 0x1a, + 0x0f, 0x7b, 0x6a, 0xb8, 0xcb, 0x58, 0x20, 0x8f, 0xa0, 0xc4, 0xf1, 0x4b, 0x59, 0x18, 0xb2, 0x58, + 0xa3, 0xe4, 0x8b, 0x30, 0xde, 0xd6, 0x52, 0xd2, 0xbe, 0xab, 0x3a, 0x3f, 0xc1, 0x9a, 0x55, 0xe8, + 0xff, 0x9d, 0xae, 0x62, 0x97, 0xde, 0x17, 0xfd, 0x84, 0xfa, 0xa8, 0xef, 0x09, 0x75, 0xcd, 0xd2, + 0x4b, 0x59, 0xca, 0x9f, 0x3f, 0x9c, 0x5e, 0x6c, 0x7f, 0x38, 0xbd, 0x86, 0x0d, 0xe1, 0x98, 0xc9, + 0x27, 0xcd, 0xd2, 0x6d, 0xaa, 0x8e, 0xde, 0x8f, 0xae, 0xdb, 0x17, 0x7d, 0xff, 0xd3, 0x77, 0xd4, + 0x53, 0x4b, 0xc5, 0xcd, 0x15, 0x57, 0x8f, 0x7f, 0x35, 0x01, 0x27, 0x7d, 0x7a, 0xec, 0x43, 0x6e, + 0x57, 0xe7, 0x42, 0x67, 0x8d, 0xef, 0xe1, 0xf7, 0x6c, 0x9e, 0x85, 0x14, 0xc1, 0x47, 0xd3, 0x1d, + 0x7e, 0x75, 0xc6, 0xd9, 0x33, 0xdd, 0xdf, 0x88, 0xf9, 0xd9, 0xcf, 0xfe, 0x63, 0x39, 0xb8, 0xef, + 0x19, 0x18, 0x15, 0xca, 0xa4, 0xf4, 0x7d, 0xbd, 0xcb, 0x2f, 0xef, 0xfd, 0xde, 0xbc, 0x7d, 0xfb, + 0xc4, 0x18, 0x96, 0xe1, 0x97, 0xce, 0x45, 0xfe, 0xde, 0x09, 0x33, 0xa6, 0xdd, 0xe3, 0xab, 0x3e, + 0x2c, 0x75, 0xd4, 0x73, 0xd2, 0xdd, 0x46, 0xb0, 0xc7, 0x48, 0x6d, 0x1f, 0x8e, 0xd2, 0xa3, 0x69, + 0x5e, 0x0e, 0x41, 0x98, 0xfc, 0xa3, 0xee, 0x7e, 0xb0, 0xc4, 0xaf, 0x03, 0x89, 0xbd, 0x5e, 0xf0, + 0xda, 0xc7, 0x57, 0xcf, 0xf7, 0xcf, 0x45, 0xba, 0x92, 0x39, 0x9f, 0x1b, 0x51, 0x7c, 0x94, 0xf2, + 0x4f, 0x49, 0x70, 0xac, 0xad, 0x6a, 0x6e, 0xe3, 0x97, 0x3a, 0xbc, 0x7c, 0x7d, 0xa8, 0xa0, 0x67, + 0xa9, 0x43, 0x63, 0x1f, 0x88, 0x6d, 0x2c, 0x6b, 0x45, 0xa0, 0xb5, 0x6f, 0x83, 0x23, 0xc1, 0xc6, + 0x0a, 0x31, 0xdd, 0x07, 0xa3, 0xc1, 0x84, 0x3f, 0x17, 0xd7, 0x48, 0x20, 0xe5, 0x2f, 0xab, 0x61, + 0x39, 0xbb, 0x7d, 0x2d, 0xb7, 0x9f, 0x56, 0xee, 0xb9, 0xab, 0x1e, 0xa5, 0xfc, 0x61, 0x09, 0x66, + 0x83, 0x35, 0xf8, 0xe2, 0xa4, 0xfe, 0x1a, 0x7b, 0xdb, 0x86, 0xf8, 0xcb, 0x12, 0xdc, 0xdd, 0xa5, + 0x4d, 0x5c, 0x00, 0x2f, 0xc3, 0xa4, 0x2f, 0x4d, 0x22, 0x4c, 0xb8, 0x18, 0xf6, 0xd3, 0xf1, 0x11, + 0xaa, 0x9b, 0x15, 0x38, 0x41, 0x84, 0xf2, 0xa9, 0x2f, 0xcc, 0x4c, 0xb4, 0x7f, 0xb3, 0x95, 0x89, + 0xf6, 0xd4, 0xc6, 0x6d, 0xd4, 0x8f, 0x8f, 0x4a, 0xf0, 0x60, 0xb0, 0xab, 0x1d, 0x42, 0xdd, 0x6f, + 0xd5, 0x38, 0xfc, 0x7b, 0x09, 0x4e, 0xf7, 0xd2, 0x38, 0x3e, 0x20, 0x3b, 0x30, 0xe1, 0x05, 0xe1, + 0xe1, 0xf1, 0xe8, 0x2b, 0xb4, 0x67, 0x5a, 0x8a, 0x5c, 0x6e, 0x77, 0x40, 0xf0, 0x16, 0x9f, 0x58, + 0xfe, 0x21, 0x77, 0x85, 0x1c, 0x4c, 0x75, 0x0b, 0x21, 0x07, 0x92, 0xdd, 0x1d, 0xc6, 0x22, 0xd1, + 0x61, 0x2c, 0xbc, 0xa8, 0x5d, 0xbe, 0xc6, 0xed, 0x56, 0x87, 0x04, 0xe5, 0x3b, 0x61, 0xa2, 0x83, + 0x2a, 0xf3, 0x59, 0xdd, 0x87, 0x26, 0x2b, 0xa8, 0x5d, 0x59, 0xe5, 0x03, 0x98, 0xa1, 0xf5, 0x76, + 0x10, 0xf4, 0x9d, 0xee, 0x72, 0x83, 0xdb, 0x96, 0x8e, 0x55, 0xf3, 0xbe, 0xaf, 0xc0, 0x20, 0x1b, + 0x67, 0xde, 0xdd, 0x43, 0x28, 0x0a, 0x67, 0x20, 0xff, 0x88, 0xb0, 0x65, 0x8b, 0xa2, 0xd9, 0x9d, + 0xe7, 0x50, 0x2f, 0x7d, 0xbd, 0x4d, 0x73, 0xc8, 0x27, 0x8c, 0xcf, 0x0b, 0xab, 0xd6, 0xb9, 0x75, + 0x5c, 0x1c, 0x95, 0xdb, 0x66, 0xd5, 0xf8, 0x4b, 0x35, 0x77, 0xd4, 0x7c, 0xfd, 0xb8, 0x30, 0x5f, + 0x6e, 0x9f, 0x62, 0xcc, 0xd7, 0xb7, 0x46, 0xf4, 0xae, 0x21, 0x8b, 0x69, 0xe6, 0x5f, 0x46, 0x43, + 0xf6, 0x35, 0x09, 0x8e, 0xd3, 0xbe, 0xf9, 0x73, 0x14, 0xfd, 0x8a, 0xfc, 0x61, 0x40, 0x76, 0xb3, + 0xa2, 0x76, 0x9c, 0xdd, 0x79, 0xbb, 0x59, 0xb9, 0x12, 0xf0, 0x2f, 0x0f, 0x03, 0xaa, 0x06, 0x32, + 0x51, 0x14, 0x9b, 0x9d, 0xb3, 0xcc, 0x57, 0x7d, 0x89, 0x8e, 0x0e, 0xc3, 0x99, 0xba, 0x0d, 0xc3, + 0xf9, 0x39, 0x09, 0x0a, 0x9d, 0xba, 0xcc, 0x87, 0x4f, 0x87, 0xa3, 0x81, 0x1d, 0x94, 0xf0, 0x08, + 0x3e, 0xdc, 0x4b, 0x96, 0x27, 0x34, 0x8d, 0x8e, 0x34, 0xf1, 0x9d, 0x8e, 0x03, 0x66, 0x82, 0x1a, + 0xda, 0x1e, 0x59, 0x7f, 0xcb, 0xa6, 0xcf, 0xa7, 0xdb, 0xec, 0xea, 0x5f, 0x8a, 0xd8, 0x7b, 0x1f, + 0xa6, 0x23, 0x5a, 0x7d, 0xa7, 0xfd, 0xde, 0x5e, 0xe4, 0x60, 0xde, 0xee, 0xf0, 0xfd, 0x09, 0x3e, + 0x13, 0x82, 0x67, 0xf8, 0x7d, 0x6b, 0xb1, 0x8e, 0xcf, 0x80, 0xbd, 0x03, 0x4e, 0x74, 0xa4, 0xe2, + 0x6d, 0x9b, 0x87, 0xd4, 0x9e, 0x6e, 0x8b, 0x07, 0xbe, 0xee, 0x8f, 0x6a, 0x56, 0x88, 0x9a, 0xd2, + 0xc8, 0x08, 0xf2, 0x94, 0xf5, 0xa6, 0x69, 0xd6, 0x79, 0x33, 0xe4, 0x67, 0x61, 0xdc, 0x07, 0xe3, + 0x95, 0x9c, 0x87, 0x94, 0x65, 0xf2, 0x5f, 0xbb, 0x1a, 0x3e, 0x7b, 0x32, 0x32, 0xb1, 0x6f, 0x9a, + 0x75, 0xde, 0x6d, 0x8a, 0x2f, 0x4f, 0x02, 0x62, 0xcc, 0xd8, 0x4d, 0x63, 0x5e, 0xc5, 0x16, 0x4c, + 0x04, 0xa0, 0xbc, 0x92, 0x37, 0xb5, 0x7f, 0x70, 0xf6, 0x2b, 0x47, 0xc4, 0xfd, 0xad, 0x1f, 0x96, + 0x02, 0x3f, 0x47, 0x39, 0x17, 0xc5, 0xa6, 0xf3, 0x9a, 0xb8, 0x70, 0xa6, 0x67, 0x7c, 0x1e, 0xb3, + 0x9d, 0x7e, 0xdf, 0xbf, 0xf9, 0xd2, 0x47, 0x12, 0xf7, 0x22, 0xf9, 0x4c, 0xc4, 0x6a, 0xdc, 0x37, + 0x5f, 0x3e, 0x19, 0xf8, 0x29, 0xa5, 0x47, 0x7a, 0xab, 0x4a, 0xb4, 0x6c, 0xae, 0x57, 0x74, 0xde, + 0xb0, 0x8b, 0xb4, 0x61, 0xe7, 0xd0, 0xe3, 0xf1, 0x0d, 0x3b, 0xf3, 0x9d, 0xc1, 0x49, 0xf3, 0xdd, + 0xe8, 0x77, 0x24, 0x98, 0xec, 0xb4, 0xa4, 0x43, 0x4f, 0xf5, 0xd6, 0x8a, 0xf6, 0x90, 0xa2, 0x70, + 0xe1, 0x10, 0x94, 0xbc, 0x2b, 0x4b, 0xb4, 0x2b, 0x45, 0xf4, 0xf4, 0x21, 0xba, 0x72, 0xc6, 0x9f, + 0xfa, 0xff, 0xdf, 0x12, 0xdc, 0xd5, 0x75, 0x85, 0x84, 0x8a, 0xbd, 0xb5, 0xb2, 0x4b, 0xec, 0x54, + 0x28, 0xbd, 0x19, 0x16, 0xbc, 0xc7, 0xcf, 0xd1, 0x1e, 0x3f, 0x8b, 0x56, 0x0e, 0xd3, 0xe3, 0x8e, + 0xfb, 0x2b, 0xe8, 0xd7, 0x83, 0x07, 0x47, 0xbb, 0xab, 0x53, 0xdb, 0xc2, 0x23, 0x66, 0x62, 0xb4, + 0x07, 0xb5, 0xf2, 0x0b, 0xb4, 0x0b, 0x0a, 0xda, 0x7c, 0x93, 0x83, 0x76, 0xe6, 0x3b, 0x83, 0x86, + 0xff, 0xbb, 0xd1, 0x9f, 0x48, 0x9d, 0xcf, 0x81, 0x3e, 0xd9, 0xb5, 0x89, 0xd1, 0x8b, 0xaa, 0xc2, + 0x53, 0xfd, 0x13, 0xf2, 0x4e, 0x36, 0x68, 0x27, 0x6b, 0x08, 0xdf, 0xee, 0x4e, 0x76, 0x1c, 0x44, + 0xf4, 0x9b, 0x12, 0x4c, 0x76, 0x5a, 0x93, 0xc4, 0x4c, 0xcb, 0x2e, 0x8b, 0xac, 0x98, 0x69, 0xd9, + 0x6d, 0x01, 0x24, 0xbf, 0x85, 0x76, 0xfe, 0x3c, 0x7a, 0x22, 0xaa, 0xf3, 0x5d, 0x47, 0x91, 0xcc, + 0xc5, 0xae, 0x41, 0x7e, 0xcc, 0x5c, 0xec, 0x65, 0x1d, 0x13, 0x33, 0x17, 0x7b, 0x5a, 0x63, 0xc4, + 0xcf, 0x45, 0xb7, 0x67, 0x3d, 0x0e, 0xa3, 0x8d, 0x7e, 0x95, 0x3e, 0xf4, 0xe5, 0x87, 0x3c, 0xd6, + 0xb5, 0xa1, 0x9d, 0x16, 0x0c, 0x85, 0xb3, 0xfd, 0x90, 0xf0, 0xbe, 0xac, 0xd0, 0xbe, 0x2c, 0xa0, + 0xe2, 0x61, 0xfa, 0x12, 0xdc, 0x46, 0xfd, 0x9c, 0x04, 0x13, 0x1d, 0xa2, 0xcc, 0x98, 0x59, 0x18, + 0x1d, 0x34, 0x17, 0x9e, 0xea, 0x9f, 0x90, 0xf7, 0xea, 0x12, 0xed, 0xd5, 0xdb, 0xd1, 0xdb, 0x0e, + 0xd3, 0x2b, 0x9f, 0x7f, 0xbe, 0xe5, 0x1d, 0x4a, 0xf3, 0xd5, 0x83, 0xce, 0xf7, 0xd9, 0x30, 0xd1, + 0xa1, 0x27, 0xfb, 0xa6, 0xe3, 0xfd, 0x79, 0x9e, 0xf6, 0xe7, 0x39, 0xb4, 0xf1, 0xe6, 0xfa, 0xd3, + 0xee, 0xd6, 0x7f, 0xa1, 0xfd, 0x0e, 0x69, 0x77, 0x2d, 0xea, 0x18, 0xac, 0x16, 0x1e, 0xef, 0x8b, + 0x86, 0x77, 0xea, 0x29, 0xda, 0xa9, 0xb3, 0xe8, 0xd1, 0xa8, 0x4e, 0xf9, 0x4e, 0x1e, 0xea, 0xc6, + 0xae, 0x79, 0xe6, 0x3b, 0x59, 0x08, 0xfc, 0xdd, 0xe8, 0x7b, 0xc4, 0xa9, 0xaf, 0x53, 0x5d, 0xeb, + 0xf5, 0xc5, 0xb1, 0x85, 0x07, 0x7b, 0xc0, 0xe4, 0xed, 0xba, 0x97, 0xb6, 0x6b, 0x1a, 0x9d, 0x8c, + 0x6a, 0x17, 0x89, 0x65, 0xd1, 0x87, 0x24, 0xf7, 0xa0, 0xe8, 0xe9, 0xee, 0xbc, 0xfd, 0xc1, 0x6e, + 0xe1, 0xa1, 0x9e, 0x70, 0x79, 0x4b, 0xee, 0xa7, 0x2d, 0x99, 0x45, 0xd3, 0x91, 0x2d, 0x61, 0xa1, + 0xef, 0xed, 0x3e, 0x54, 0xf0, 0x7f, 0x8e, 0xc2, 0x4c, 0x44, 0x8d, 0xce, 0x7e, 0xcc, 0x1e, 0x57, + 0x97, 0x7b, 0xd6, 0x87, 0xfb, 0x39, 0x85, 0x37, 0x73, 0xbb, 0xba, 0xb7, 0x0d, 0xb1, 0xdf, 0x4e, + 0x01, 0x5a, 0xb3, 0x6b, 0x0b, 0x4d, 0xac, 0x39, 0xbe, 0xdf, 0x07, 0x0d, 0xdd, 0x11, 0x94, 0xde, + 0xd4, 0x1d, 0xc1, 0xb5, 0xc0, 0xad, 0xbb, 0x44, 0x7f, 0x37, 0x7b, 0x7b, 0xbe, 0x7a, 0x97, 0xfc, + 0xe6, 0x5c, 0xbd, 0xeb, 0x78, 0xe8, 0x3c, 0x75, 0xfb, 0xee, 0xd7, 0xa4, 0x0f, 0x7b, 0xc7, 0x88, + 0xdf, 0xa8, 0x1d, 0xec, 0x72, 0xa3, 0x76, 0x2a, 0xf2, 0xda, 0x2c, 0xa7, 0xa6, 0x4f, 0x51, 0xb9, + 0x0f, 0x60, 0xf6, 0x70, 0x4c, 0x98, 0xff, 0x7c, 0xbe, 0x97, 0x42, 0x38, 0x09, 0x85, 0x76, 0x75, + 0x72, 0x27, 0xf5, 0x47, 0x92, 0x90, 0x5f, 0xb3, 0x6b, 0xe5, 0xaa, 0xee, 0xdc, 0x21, 0x5d, 0x7b, + 0x3a, 0xfa, 0xce, 0x12, 0x7a, 0xe3, 0xd6, 0xcc, 0x28, 0x93, 0x69, 0x17, 0x49, 0x36, 0x60, 0x2c, + 0x74, 0x19, 0x9d, 0x6b, 0xd6, 0xe2, 0x61, 0xee, 0xc4, 0x87, 0x58, 0xc9, 0xf4, 0x06, 0x88, 0x4f, + 0xbf, 0xd1, 0x7e, 0x67, 0x65, 0x66, 0x0a, 0xb5, 0x7c, 0x07, 0x15, 0xd9, 0x37, 0x66, 0x05, 0x98, + 0x0a, 0x0f, 0x8a, 0x3b, 0x62, 0xaf, 0x4b, 0x30, 0xbc, 0x66, 0x8b, 0x50, 0x10, 0xff, 0x05, 0xbd, + 0x5e, 0xf6, 0x24, 0x0c, 0x6a, 0x0d, 0x7a, 0x9b, 0x24, 0xd9, 0x9b, 0xde, 0x72, 0x74, 0x7e, 0x92, + 0xfa, 0x08, 0x4c, 0xf8, 0xfa, 0xe8, 0xf6, 0xfd, 0xb3, 0x09, 0x6a, 0x1b, 0xe9, 0xd3, 0x2e, 0x6e, + 0x04, 0x89, 0xbf, 0x5d, 0xaf, 0x9d, 0x78, 0x32, 0x4e, 0x1d, 0x46, 0xc6, 0x57, 0xa9, 0x61, 0x08, + 0xc9, 0xd2, 0x4d, 0x78, 0xad, 0xb5, 0xdf, 0xb8, 0xea, 0xe7, 0x47, 0x33, 0x42, 0xf7, 0xaa, 0xe4, + 0x2f, 0x49, 0x30, 0xb2, 0x66, 0xd7, 0x2e, 0x1b, 0xd5, 0xff, 0xa7, 0xf5, 0x76, 0x17, 0x8e, 0x04, + 0x7a, 0x79, 0x87, 0xc4, 0x79, 0xf6, 0xa3, 0x29, 0x48, 0xae, 0xd9, 0x35, 0xf4, 0x5e, 0x18, 0x0b, + 0x07, 0x0a, 0x91, 0xf1, 0x5f, 0xbb, 0x17, 0x88, 0x5e, 0xa3, 0x45, 0x7b, 0x0c, 0x74, 0x15, 0x46, + 0x82, 0xde, 0xe2, 0x54, 0x17, 0x26, 0x01, 0xcc, 0xc2, 0xa3, 0xbd, 0x62, 0xba, 0x95, 0xbd, 0x0b, + 0x32, 0xae, 0xa1, 0xbb, 0xa7, 0x0b, 0xb5, 0x40, 0x8a, 0x8e, 0x68, 0x3b, 0x98, 0x13, 0x22, 0xbd, + 0xb0, 0x29, 0xe9, 0x26, 0xbd, 0x10, 0x6e, 0x57, 0xe9, 0x45, 0x4d, 0xab, 0x1d, 0x00, 0xdf, 0x1c, + 0xb8, 0xaf, 0x0b, 0x07, 0x0f, 0xad, 0xf0, 0x48, 0x4f, 0x68, 0xee, 0x46, 0xd3, 0x6d, 0x0e, 0xc0, + 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x97, 0xcb, 0xb2, 0x05, 0xc2, 0x00, 0x00, + } + r := bytes.NewReader(gzipped) + gzipr, err := compress_gzip.NewReader(r) + if err != nil { + panic(err) + } + ungzipped, err := io_ioutil.ReadAll(gzipr) + if err != nil { + panic(err) + } + if err := github_com_gogo_protobuf_proto.Unmarshal(ungzipped, d); err != nil { + panic(err) + } + return d +} +func (this *CommissionRates) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*CommissionRates) + if !ok { + that2, ok := that.(CommissionRates) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Rate.Equal(that1.Rate) { + return false + } + if !this.MaxRate.Equal(that1.MaxRate) { + return false + } + if !this.MaxChangeRate.Equal(that1.MaxChangeRate) { + return false + } + return true +} +func (this *Commission) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Commission) + if !ok { + that2, ok := that.(Commission) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.CommissionRates.Equal(&that1.CommissionRates) { + return false + } + if !this.UpdateTime.Equal(that1.UpdateTime) { + return false + } + return true +} +func (this *Description) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Description) + if !ok { + that2, ok := that.(Description) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Moniker != that1.Moniker { + return false + } + if this.Identity != that1.Identity { + return false + } + if this.Website != that1.Website { + return false + } + if this.SecurityContact != that1.SecurityContact { + return false + } + if this.Details != that1.Details { + return false + } + return true +} +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.UnbondingTime != that1.UnbondingTime { + return false + } + if this.MaxValidators != that1.MaxValidators { + return false + } + if this.MaxEntries != that1.MaxEntries { + return false + } + if this.HistoricalEntries != that1.HistoricalEntries { + return false + } + if this.BondDenom != that1.BondDenom { + return false + } + return true +} + +func (m *CommissionRates) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CommissionRates) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CommissionRates) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MaxChangeRate.Size() + i -= size + if _, err := m.MaxChangeRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.MaxRate.Size() + i -= size + if _, err := m.MaxRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.Rate.Size() + i -= size + if _, err := m.Rate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Commission) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Commission) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Commission) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintStaking(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x12 + { + size, err := m.CommissionRates.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Description) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Description) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Description) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Details) > 0 { + i -= len(m.Details) + copy(dAtA[i:], m.Details) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Details))) + i-- + dAtA[i] = 0x2a + } + if len(m.SecurityContact) > 0 { + i -= len(m.SecurityContact) + copy(dAtA[i:], m.SecurityContact) + i = encodeVarintStaking(dAtA, i, uint64(len(m.SecurityContact))) + i-- + dAtA[i] = 0x22 + } + if len(m.Website) > 0 { + i -= len(m.Website) + copy(dAtA[i:], m.Website) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Website))) + i-- + dAtA[i] = 0x1a + } + if len(m.Identity) > 0 { + i -= len(m.Identity) + copy(dAtA[i:], m.Identity) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Identity))) + i-- + dAtA[i] = 0x12 + } + if len(m.Moniker) > 0 { + i -= len(m.Moniker) + copy(dAtA[i:], m.Moniker) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Moniker))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Validator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Validator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.UnbondingIds) > 0 { + dAtA5 := make([]byte, len(m.UnbondingIds)*10) + var j4 int + for _, num := range m.UnbondingIds { + for num >= 1<<7 { + dAtA5[j4] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j4++ + } + dAtA5[j4] = uint8(num) + j4++ + } + i -= j4 + copy(dAtA[i:], dAtA5[:j4]) + i = encodeVarintStaking(dAtA, i, uint64(j4)) + i-- + dAtA[i] = 0x6a + } + if m.UnbondingOnHoldRefCount != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.UnbondingOnHoldRefCount)) + i-- + dAtA[i] = 0x60 + } + { + size := m.MinSelfDelegation.Size() + i -= size + if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + { + size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime):]) + if err7 != nil { + return 0, err7 + } + i -= n7 + i = encodeVarintStaking(dAtA, i, uint64(n7)) + i-- + dAtA[i] = 0x4a + if m.UnbondingHeight != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.UnbondingHeight)) + i-- + dAtA[i] = 0x40 + } + { + size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size := m.DelegatorShares.Size() + i -= size + if _, err := m.DelegatorShares.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size := m.Tokens.Size() + i -= size + if _, err := m.Tokens.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.Status != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x20 + } + if m.Jailed { + i-- + if m.Jailed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.ConsensusPubkey != nil { + { + size, err := m.ConsensusPubkey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.OperatorAddress) > 0 { + i -= len(m.OperatorAddress) + copy(dAtA[i:], m.OperatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.OperatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Delegation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Delegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Delegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Shares.Size() + i -= size + if _, err := m.Shares.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.BondDenom) > 0 { + i -= len(m.BondDenom) + copy(dAtA[i:], m.BondDenom) + i = encodeVarintStaking(dAtA, i, uint64(len(m.BondDenom))) + i-- + dAtA[i] = 0x2a + } + if m.HistoricalEntries != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.HistoricalEntries)) + i-- + dAtA[i] = 0x20 + } + if m.MaxEntries != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.MaxEntries)) + i-- + dAtA[i] = 0x18 + } + if m.MaxValidators != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.MaxValidators)) + i-- + dAtA[i] = 0x10 + } + n12, err12 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) + if err12 != nil { + return 0, err12 + } + i -= n12 + i = encodeVarintStaking(dAtA, i, uint64(n12)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintStaking(dAtA []byte, offset int, v uint64) int { + offset -= sovStaking(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} + +func (m *CommissionRates) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Rate.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.MaxRate.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.MaxChangeRate.Size() + n += 1 + l + sovStaking(uint64(l)) + return n +} + +func (m *Commission) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CommissionRates.Size() + n += 1 + l + sovStaking(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime) + n += 1 + l + sovStaking(uint64(l)) + return n +} + +func (m *Description) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Moniker) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Identity) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Website) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.SecurityContact) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Details) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + return n +} + +func (m *Validator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OperatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + if m.ConsensusPubkey != nil { + l = m.ConsensusPubkey.Size() + n += 1 + l + sovStaking(uint64(l)) + } + if m.Jailed { + n += 2 + } + if m.Status != 0 { + n += 1 + sovStaking(uint64(m.Status)) + } + l = m.Tokens.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.DelegatorShares.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.Description.Size() + n += 1 + l + sovStaking(uint64(l)) + if m.UnbondingHeight != 0 { + n += 1 + sovStaking(uint64(m.UnbondingHeight)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime) + n += 1 + l + sovStaking(uint64(l)) + l = m.Commission.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.MinSelfDelegation.Size() + n += 1 + l + sovStaking(uint64(l)) + if m.UnbondingOnHoldRefCount != 0 { + n += 1 + sovStaking(uint64(m.UnbondingOnHoldRefCount)) + } + if len(m.UnbondingIds) > 0 { + l = 0 + for _, e := range m.UnbondingIds { + l += sovStaking(uint64(e)) + } + n += 1 + sovStaking(uint64(l)) + l + } + return n +} + +func (m *Delegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = m.Shares.Size() + n += 1 + l + sovStaking(uint64(l)) + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime) + n += 1 + l + sovStaking(uint64(l)) + if m.MaxValidators != 0 { + n += 1 + sovStaking(uint64(m.MaxValidators)) + } + if m.MaxEntries != 0 { + n += 1 + sovStaking(uint64(m.MaxEntries)) + } + if m.HistoricalEntries != 0 { + n += 1 + sovStaking(uint64(m.HistoricalEntries)) + } + l = len(m.BondDenom) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + return n +} + +func sovStaking(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozStaking(x uint64) (n int) { + return sovStaking(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +func valueToStringStaking(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} + +func (m *CommissionRates) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CommissionRates: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CommissionRates: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Rate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxChangeRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxChangeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Commission) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Commission: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Commission: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommissionRates", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CommissionRates.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UpdateTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Description) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Description: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Description: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Moniker", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Moniker = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Website", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Website = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecurityContact", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecurityContact = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Details = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Validator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OperatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsensusPubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ConsensusPubkey == nil { + m.ConsensusPubkey = &types1.Any{} + } + if err := m.ConsensusPubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Jailed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Jailed = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= BondStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tokens", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Tokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorShares", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DelegatorShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingHeight", wireType) + } + m.UnbondingHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UnbondingTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingOnHoldRefCount", wireType) + } + m.UnbondingOnHoldRefCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingOnHoldRefCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 13: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UnbondingIds = append(m.UnbondingIds, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.UnbondingIds) == 0 { + m.UnbondingIds = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UnbondingIds = append(m.UnbondingIds, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingIds", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Delegation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Delegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Delegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Shares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.UnbondingTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxValidators", wireType) + } + m.MaxValidators = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxValidators |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxEntries", wireType) + } + m.MaxEntries = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxEntries |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HistoricalEntries", wireType) + } + m.HistoricalEntries = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HistoricalEntries |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BondDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BondDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func skipStaking(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowStaking + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowStaking + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowStaking + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthStaking + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupStaking + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthStaking + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthStaking = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowStaking = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupStaking = fmt.Errorf("proto: unexpected end of group") +) \ No newline at end of file diff --git a/x/staking/module.go b/x/staking/module.go index 3892a8aa93ac..80bec1ec3b38 100644 --- a/x/staking/module.go +++ b/x/staking/module.go @@ -141,6 +141,10 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { m := keeper.NewMigrator(am.keeper) cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2) + + if err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate2to3); err != nil { + panic(fmt.Sprintf("failed to migrate x/%s from version 2 to 3: %v", types.ModuleName, err)) + } } // InitGenesis performs genesis initialization for the staking module. It returns @@ -161,7 +165,7 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw } // ConsensusVersion implements AppModule/ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } +func (AppModule) ConsensusVersion() uint64 { return 3 } // BeginBlock returns the begin blocker for the staking module. func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {