From 95a7752e36926a8e74ec94ef447ca7c868a9ff07 Mon Sep 17 00:00:00 2001 From: Samuel Laferriere Date: Thu, 18 Jan 2024 22:05:27 -0500 Subject: [PATCH] updated bindings to use m2-mainnet contracts and fixed all broken dependencies (#91) * updated bindings to use m2-mainnet contracts and fixed all broken dependencies * fix linting error - missing error handling * delete old pubkeycompendium mock * removed all notions of pubkey compendium also added builders for the avsregistry clients * fixed compilation errors and ran go fmt * fixed builder to return structs instead of interfaces * fixed builder avs subscriber bug - was using http instead of ws client * fixed buildall txmgr * fixed bug - slasher no longer points to delegationManager so bindings creation logic was broken * fixed avs registration function * fix QueryExistingRegisteredOperatorPubkeys bug * fix builder bug (was passing coordinator addr instead of apkreg addr) * fix variable name keypair->privatekey * update to updateStakes functions in avsregistry writer * added quorumCount() function to avs reader * added GetOperatorIdsInQuorumsAtCurrentBlock function to avs reader * fix context bug in avs reader * git pulled m2-mainnet for latest operatorStateRetriever changes and updated avs reader * added comments explaining RegisterOperatorWithAVSRegistryCoordinator * added GetOperatorsStakeInQuorumsAtCurrentBlock to avsregistry reader * make mocks to fix tests * remove "deleteme" debug log statement * rename log->transactionLog in log output * added comment explaining why we need to pass EcdsaPrivateKey in RegisterOperatorWithAVSRegistryCoordinator function * remove all yaml names in BuildAllConfig struct - don't see why we would need to read this from config file * remove TODO that was previously fixed * added todo comment to update signFn and txmgr to be able to sign generic messages (not only txs) --- chainio/clients/avsregistry/reader.go | 294 +- chainio/clients/avsregistry/subscriber.go | 58 + chainio/clients/avsregistry/writer.go | 245 +- chainio/clients/builder.go | 148 +- chainio/clients/elcontracts/reader.go | 158 +- chainio/clients/elcontracts/subscriber.go | 44 - chainio/clients/elcontracts/writer.go | 130 +- chainio/gen.go | 2 +- chainio/mocks/avsRegistryContractClient.go | 181 - chainio/mocks/avsRegistryContractsReader.go | 96 +- .../mocks/avsRegistryContractsSubscriber.go | 56 + chainio/mocks/avsRegistryContractsWriter.go | 42 +- chainio/mocks/elContractsReader.go | 46 +- chainio/mocks/elContractsSubscriber.go | 56 - chainio/mocks/elContractsWriter.go | 31 - chainio/utils/bindings.go | 154 +- chainio/utils/utils.go | 15 +- cmd/egnaddrs/main.go | 79 +- cmd/egnaddrs/main_test.go | 11 +- ...s-and-eigenlayer-deployed-anvil-state.json | 1 - ...r-and-registries-deployed-anvil-state.json | 1 + contracts/bindings/BLSApkRegistry/binding.go | 1435 +++++++ .../BLSOperatorStateRetriever/binding.go | 347 -- .../bindings/BLSPubkeyRegistry/binding.go | 1076 ------ .../BLSPublicKeyCompendium/binding.go | 515 --- .../binding.go | 2906 -------------- .../bindings/DelegationManager/binding.go | 768 ++-- contracts/bindings/EigenPod/binding.go | 123 +- contracts/bindings/EigenPodManager/binding.go | 2 +- .../bindings/IBLSSignatureChecker/binding.go | 198 +- contracts/bindings/ISlasher/binding.go | 1568 ++++++++ .../OperatorStateRetriever/binding.go | 348 ++ .../bindings/RegistryCoordinator/binding.go | 3431 +++++++++++++++++ .../bindings/ServiceManagerBase/binding.go | 770 ++++ contracts/bindings/Slasher/binding.go | 2699 ------------- contracts/bindings/StakeRegistry/binding.go | 1074 ++---- contracts/generate-bindings.sh | 9 +- contracts/lib/eigenlayer-middleware | 2 +- crypto/bls/attestation.go | 22 +- crypto/bls/state.go | 2 +- crypto/bn254/utils.go | 29 - metrics/eigenmetrics_example_test.go | 19 +- services/README.md | 8 +- services/avsregistry/avsregistry.go | 4 +- .../avsregistry/avsregistry_chaincaller.go | 25 +- .../avsregistry_chaincaller_test.go | 51 +- services/avsregistry/avsregistry_fake.go | 9 +- services/gen.go | 6 +- services/mocks/avsregistry.go | 6 +- services/mocks/operatorpubkeys.go | 56 + services/mocks/pubkeycompendium.go | 56 - .../operatorpubkeys.go} | 8 +- .../operatorpubkeys_inmemory.go} | 72 +- .../operatorpubkeys_inmemory_test.go} | 40 +- types/abi/BLSApkRegistry.json | 607 +++ types/abi/BLSPublicKeyCompendium.json | 203 - types/abi/abi.go | 4 +- 57 files changed, 10482 insertions(+), 9864 deletions(-) create mode 100644 chainio/clients/avsregistry/subscriber.go delete mode 100644 chainio/clients/elcontracts/subscriber.go delete mode 100644 chainio/mocks/avsRegistryContractClient.go create mode 100644 chainio/mocks/avsRegistryContractsSubscriber.go delete mode 100644 chainio/mocks/elContractsSubscriber.go delete mode 100644 cmd/egnaddrs/test_data/avs-and-eigenlayer-deployed-anvil-state.json create mode 100644 cmd/egnaddrs/test_data/eigenlayer-and-registries-deployed-anvil-state.json create mode 100644 contracts/bindings/BLSApkRegistry/binding.go delete mode 100644 contracts/bindings/BLSOperatorStateRetriever/binding.go delete mode 100644 contracts/bindings/BLSPubkeyRegistry/binding.go delete mode 100644 contracts/bindings/BLSPublicKeyCompendium/binding.go delete mode 100644 contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go create mode 100644 contracts/bindings/ISlasher/binding.go create mode 100644 contracts/bindings/OperatorStateRetriever/binding.go create mode 100644 contracts/bindings/RegistryCoordinator/binding.go create mode 100644 contracts/bindings/ServiceManagerBase/binding.go delete mode 100644 contracts/bindings/Slasher/binding.go create mode 100644 services/mocks/operatorpubkeys.go delete mode 100644 services/mocks/pubkeycompendium.go rename services/{pubkeycompendium/pubkeycompendium.go => operatorpubkeys/operatorpubkeys.go} (64%) rename services/{pubkeycompendium/pubkeycompendium_inmemory.go => operatorpubkeys/operatorpubkeys_inmemory.go} (62%) rename services/{pubkeycompendium/pubkeycompendium_inmemory_test.go => operatorpubkeys/operatorpubkeys_inmemory_test.go} (64%) create mode 100644 types/abi/BLSApkRegistry.json delete mode 100644 types/abi/BLSPublicKeyCompendium.json diff --git a/chainio/clients/avsregistry/reader.go b/chainio/clients/avsregistry/reader.go index ddefbe2e..65c46a6f 100644 --- a/chainio/clients/avsregistry/reader.go +++ b/chainio/clients/avsregistry/reader.go @@ -1,83 +1,177 @@ package avsregistry import ( + "bytes" + "context" "math" "math/big" "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" + "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" "github.com/Layr-Labs/eigensdk-go/types" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" gethcommon "github.com/ethereum/go-ethereum/common" - blsoperatorstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" - blsregistrycoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSRegistryCoordinatorWithIndices" + contractOperatorStateRetriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" + opstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" + regcoord "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator" stakeregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StakeRegistry" + eigenabi "github.com/Layr-Labs/eigensdk-go/types/abi" ) type AvsRegistryReader interface { + GetQuorumCount(opts *bind.CallOpts) (uint8, error) + + GetOperatorsStakeInQuorumsAtCurrentBlock( + opts *bind.CallOpts, + quorumNumbers []byte, + ) ([][]opstateretriever.OperatorStateRetrieverOperator, error) + GetOperatorsStakeInQuorumsAtBlock( opts *bind.CallOpts, quorumNumbers []byte, blockNumber uint32, - ) ([][]blsoperatorstateretriever.BLSOperatorStateRetrieverOperator, error) + ) ([][]opstateretriever.OperatorStateRetrieverOperator, error) - GetOperatorStakeInQuorumsOfOperatorAtCurrentBlock( + GetOperatorAddrsInQuorumsAtCurrentBlock( opts *bind.CallOpts, - operatorId types.OperatorId, - ) (map[types.QuorumNum]types.StakeAmount, error) + quorumNumbers []byte, + ) ([][]common.Address, error) GetOperatorsStakeInQuorumsOfOperatorAtBlock( opts *bind.CallOpts, operatorId types.OperatorId, blockNumber uint32, - ) ([]types.QuorumNum, [][]blsoperatorstateretriever.BLSOperatorStateRetrieverOperator, error) + ) ([]types.QuorumNum, [][]opstateretriever.OperatorStateRetrieverOperator, error) GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock( opts *bind.CallOpts, operatorId types.OperatorId, - ) ([]types.QuorumNum, [][]blsoperatorstateretriever.BLSOperatorStateRetrieverOperator, error) + ) ([]types.QuorumNum, [][]opstateretriever.OperatorStateRetrieverOperator, error) + + GetOperatorStakeInQuorumsOfOperatorAtCurrentBlock( + opts *bind.CallOpts, + operatorId types.OperatorId, + ) (map[types.QuorumNum]types.StakeAmount, error) GetCheckSignaturesIndices( opts *bind.CallOpts, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte, - ) (blsoperatorstateretriever.BLSOperatorStateRetrieverCheckSignaturesIndices, error) + ) (opstateretriever.OperatorStateRetrieverCheckSignaturesIndices, error) GetOperatorId(opts *bind.CallOpts, operatorAddress gethcommon.Address) ([32]byte, error) + GetOperatorFromId(opts *bind.CallOpts, operatorId types.OperatorId) (gethcommon.Address, error) + IsOperatorRegistered(opts *bind.CallOpts, operatorAddress gethcommon.Address) (bool, error) + + QueryExistingRegisteredOperatorPubKeys( + ctx context.Context, + startBlock *big.Int, + stopBlock *big.Int, + ) ([]types.OperatorAddr, []types.OperatorPubkeys, error) } type AvsRegistryChainReader struct { - logger logging.Logger - registryCoordinatorAddr gethcommon.Address - registryCoordinator *blsregistrycoordinator.ContractBLSRegistryCoordinatorWithIndices - blsOperatorStateRetriever *blsoperatorstateretriever.ContractBLSOperatorStateRetriever - stakeRegistry *stakeregistry.ContractStakeRegistry - ethClient eth.EthClient + logger logging.Logger + blsApkRegistryAddr gethcommon.Address + registryCoordinatorAddr gethcommon.Address + registryCoordinator *regcoord.ContractRegistryCoordinator + operatorStateRetriever *opstateretriever.ContractOperatorStateRetriever + stakeRegistry *stakeregistry.ContractStakeRegistry + ethClient eth.EthClient } // forces AvsReader to implement the clients.ReaderInterface interface var _ AvsRegistryReader = (*AvsRegistryChainReader)(nil) -func NewAvsRegistryReader( +func NewAvsRegistryChainReader( registryCoordinatorAddr gethcommon.Address, - registryCoordinator *blsregistrycoordinator.ContractBLSRegistryCoordinatorWithIndices, - blsOperatorStateRetriever *blsoperatorstateretriever.ContractBLSOperatorStateRetriever, + blsApkRegistryAddr gethcommon.Address, + registryCoordinator *regcoord.ContractRegistryCoordinator, + operatorStateRetriever *opstateretriever.ContractOperatorStateRetriever, stakeRegistry *stakeregistry.ContractStakeRegistry, logger logging.Logger, ethClient eth.EthClient, -) (*AvsRegistryChainReader, error) { +) *AvsRegistryChainReader { return &AvsRegistryChainReader{ - registryCoordinatorAddr: registryCoordinatorAddr, - registryCoordinator: registryCoordinator, - blsOperatorStateRetriever: blsOperatorStateRetriever, - stakeRegistry: stakeRegistry, - logger: logger, - ethClient: ethClient, - }, nil + blsApkRegistryAddr: blsApkRegistryAddr, + registryCoordinatorAddr: registryCoordinatorAddr, + registryCoordinator: registryCoordinator, + operatorStateRetriever: operatorStateRetriever, + stakeRegistry: stakeRegistry, + logger: logger, + ethClient: ethClient, + } +} + +func BuildAvsRegistryChainReader( + registryCoordinatorAddr gethcommon.Address, + operatorStateRetrieverAddr gethcommon.Address, + ethClient eth.EthClient, + logger logging.Logger, +) (*AvsRegistryChainReader, error) { + contractRegistryCoordinator, err := regcoord.NewContractRegistryCoordinator(registryCoordinatorAddr, ethClient) + if err != nil { + return nil, err + } + blsApkRegistryAddr, err := contractRegistryCoordinator.BlsApkRegistry(&bind.CallOpts{}) + if err != nil { + return nil, err + } + stakeRegistryAddr, err := contractRegistryCoordinator.StakeRegistry(&bind.CallOpts{}) + if err != nil { + return nil, err + } + contractStakeRegistry, err := stakeregistry.NewContractStakeRegistry(stakeRegistryAddr, ethClient) + if err != nil { + return nil, err + } + contractOperatorStateRetriever, err := contractOperatorStateRetriever.NewContractOperatorStateRetriever( + operatorStateRetrieverAddr, + ethClient, + ) + if err != nil { + return nil, err + } + return NewAvsRegistryChainReader( + registryCoordinatorAddr, + blsApkRegistryAddr, + contractRegistryCoordinator, + contractOperatorStateRetriever, + contractStakeRegistry, + logger, + ethClient, + ), nil +} + +func (r *AvsRegistryChainReader) GetQuorumCount(opts *bind.CallOpts) (uint8, error) { + return r.registryCoordinator.QuorumCount(opts) +} + +func (r *AvsRegistryChainReader) GetOperatorsStakeInQuorumsAtCurrentBlock( + opts *bind.CallOpts, + quorumNumbers []byte, +) ([][]opstateretriever.OperatorStateRetrieverOperator, error) { + if opts.Context == nil { + opts.Context = context.Background() + } + curBlock, err := r.ethClient.BlockNumber(opts.Context) + if err != nil { + r.logger.Error("Failed to get current block number", "err", err) + return nil, err + } + if curBlock > math.MaxUint32 { + r.logger.Error("Current block number is too large to be converted to uint32") + return nil, err + } + return r.GetOperatorsStakeInQuorumsAtBlock(opts, quorumNumbers, uint32(curBlock)) } // the contract stores historical state, so blockNumber should be the block number of the state you want to query @@ -86,8 +180,8 @@ func (r *AvsRegistryChainReader) GetOperatorsStakeInQuorumsAtBlock( opts *bind.CallOpts, quorumNumbers []byte, blockNumber uint32, -) ([][]blsoperatorstateretriever.BLSOperatorStateRetrieverOperator, error) { - operatorStakes, err := r.blsOperatorStateRetriever.GetOperatorState( +) ([][]opstateretriever.OperatorStateRetrieverOperator, error) { + operatorStakes, err := r.operatorStateRetriever.GetOperatorState( opts, r.registryCoordinatorAddr, quorumNumbers, @@ -96,16 +190,53 @@ func (r *AvsRegistryChainReader) GetOperatorsStakeInQuorumsAtBlock( r.logger.Error("Failed to get operators state", "err", err) return nil, err } - return operatorStakes, nil } +func (r *AvsRegistryChainReader) GetOperatorAddrsInQuorumsAtCurrentBlock( + opts *bind.CallOpts, + quorumNumbers []byte, +) ([][]common.Address, error) { + if opts.Context == nil { + opts.Context = context.Background() + } + curBlock, err := r.ethClient.BlockNumber(opts.Context) + if err != nil { + r.logger.Error("Failed to get current block number", "err", err) + return nil, err + } + if curBlock > math.MaxUint32 { + r.logger.Error("Current block number is too large to be converted to uint32") + return nil, err + } + operatorStakes, err := r.operatorStateRetriever.GetOperatorState( + opts, + r.registryCoordinatorAddr, + quorumNumbers, + uint32(curBlock), + ) + if err != nil { + r.logger.Error("Failed to get operators state", "err", err) + return nil, err + } + var quorumOperatorAddrs [][]common.Address + for _, quorum := range operatorStakes { + var operatorAddrs []common.Address + for _, operator := range quorum { + operatorAddrs = append(operatorAddrs, operator.Operator) + } + quorumOperatorAddrs = append(quorumOperatorAddrs, operatorAddrs) + } + return quorumOperatorAddrs, nil + +} + func (r *AvsRegistryChainReader) GetOperatorsStakeInQuorumsOfOperatorAtBlock( opts *bind.CallOpts, operatorId types.OperatorId, blockNumber uint32, -) ([]types.QuorumNum, [][]blsoperatorstateretriever.BLSOperatorStateRetrieverOperator, error) { - quorumBitmap, operatorStakes, err := r.blsOperatorStateRetriever.GetOperatorState0( +) ([]types.QuorumNum, [][]opstateretriever.OperatorStateRetrieverOperator, error) { + quorumBitmap, operatorStakes, err := r.operatorStateRetriever.GetOperatorState0( opts, r.registryCoordinatorAddr, operatorId, @@ -129,7 +260,10 @@ func (r *AvsRegistryChainReader) GetOperatorsStakeInQuorumsOfOperatorAtBlock( func (r *AvsRegistryChainReader) GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock( opts *bind.CallOpts, operatorId types.OperatorId, -) ([]types.QuorumNum, [][]blsoperatorstateretriever.BLSOperatorStateRetrieverOperator, error) { +) ([]types.QuorumNum, [][]opstateretriever.OperatorStateRetrieverOperator, error) { + if opts.Context == nil { + opts.Context = context.Background() + } curBlock, err := r.ethClient.BlockNumber(opts.Context) if err != nil { r.logger.Error("Failed to get current block number", "err", err) @@ -150,7 +284,7 @@ func (r *AvsRegistryChainReader) GetOperatorStakeInQuorumsOfOperatorAtCurrentBlo opts *bind.CallOpts, operatorId types.OperatorId, ) (map[types.QuorumNum]types.StakeAmount, error) { - quorumBitmap, err := r.registryCoordinator.GetCurrentQuorumBitmapByOperatorId(opts, operatorId) + quorumBitmap, err := r.registryCoordinator.GetCurrentQuorumBitmap(opts, operatorId) if err != nil { r.logger.Error("Failed to get operator quorums", "err", err) return nil, err @@ -158,7 +292,7 @@ func (r *AvsRegistryChainReader) GetOperatorStakeInQuorumsOfOperatorAtCurrentBlo quorums := types.BitmapToQuorumIds(quorumBitmap) quorumStakes := make(map[types.QuorumNum]types.StakeAmount) for _, quorum := range quorums { - stake, err := r.stakeRegistry.GetCurrentOperatorStakeForQuorum( + stake, err := r.stakeRegistry.GetCurrentStake( &bind.CallOpts{}, operatorId, quorum, @@ -177,8 +311,8 @@ func (r *AvsRegistryChainReader) GetCheckSignaturesIndices( referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte, -) (blsoperatorstateretriever.BLSOperatorStateRetrieverCheckSignaturesIndices, error) { - checkSignatureIndices, err := r.blsOperatorStateRetriever.GetCheckSignaturesIndices( +) (opstateretriever.OperatorStateRetrieverCheckSignaturesIndices, error) { + checkSignatureIndices, err := r.operatorStateRetriever.GetCheckSignaturesIndices( opts, r.registryCoordinatorAddr, referenceBlockNumber, @@ -187,7 +321,7 @@ func (r *AvsRegistryChainReader) GetCheckSignaturesIndices( ) if err != nil { r.logger.Error("Failed to get check signatures indices", "err", err) - return blsoperatorstateretriever.BLSOperatorStateRetrieverCheckSignaturesIndices{}, err + return opstateretriever.OperatorStateRetrieverCheckSignaturesIndices{}, err } return checkSignatureIndices, nil } @@ -207,6 +341,21 @@ func (r *AvsRegistryChainReader) GetOperatorId( return operatorId, nil } +func (r *AvsRegistryChainReader) GetOperatorFromId( + opts *bind.CallOpts, + operatorId types.OperatorId, +) (gethcommon.Address, error) { + operatorAddress, err := r.registryCoordinator.GetOperatorFromId( + opts, + operatorId, + ) + if err != nil { + r.logger.Error("Failed to get operator address", "err", err) + return gethcommon.Address{}, err + } + return operatorAddress, nil +} + func (r *AvsRegistryChainReader) IsOperatorRegistered( opts *bind.CallOpts, operatorAddress gethcommon.Address, @@ -220,3 +369,74 @@ func (r *AvsRegistryChainReader) IsOperatorRegistered( registeredWithAvs := operatorId != [32]byte{} return registeredWithAvs, nil } + +func (r *AvsRegistryChainReader) QueryExistingRegisteredOperatorPubKeys( + ctx context.Context, + startBlock *big.Int, + stopBlock *big.Int, +) ([]types.OperatorAddr, []types.OperatorPubkeys, error) { + + blsApkRegistryAbi, err := abi.JSON(bytes.NewReader(eigenabi.BLSApkRegistryAbi)) + if err != nil { + r.logger.Error("Error getting Abi", "err", err) + return nil, nil, err + } + + query := ethereum.FilterQuery{ + FromBlock: startBlock, + ToBlock: stopBlock, + Addresses: []gethcommon.Address{ + r.blsApkRegistryAddr, + }, + Topics: [][]gethcommon.Hash{{blsApkRegistryAbi.Events["NewPubkeyRegistration"].ID}}, + } + + logs, err := r.ethClient.FilterLogs(ctx, query) + if err != nil { + r.logger.Error("Error filtering logs", "err", err) + return nil, nil, err + } + r.logger.Info("avsRegistryChainReader.QueryExistingRegisteredOperatorPubKeys", "transactionLogs", logs) + + operatorAddresses := make([]types.OperatorAddr, 0) + operatorPubkeys := make([]types.OperatorPubkeys, 0) + + for _, vLog := range logs { + + // get the operator address + operatorAddr := gethcommon.HexToAddress(vLog.Topics[1].Hex()) + operatorAddresses = append(operatorAddresses, operatorAddr) + + event, err := blsApkRegistryAbi.Unpack("NewPubkeyRegistration", vLog.Data) + if err != nil { + r.logger.Error("Error unpacking event data", "err", err) + return nil, nil, err + } + + G1Pubkey := event[0].(struct { + X *big.Int "json:\"X\"" + Y *big.Int "json:\"Y\"" + }) + + G2Pubkey := event[1].(struct { + X [2]*big.Int "json:\"X\"" + Y [2]*big.Int "json:\"Y\"" + }) + + operatorPubkey := types.OperatorPubkeys{ + G1Pubkey: bls.NewG1Point( + G1Pubkey.X, + G1Pubkey.Y, + ), + G2Pubkey: bls.NewG2Point( + G2Pubkey.X, + G2Pubkey.Y, + ), + } + + operatorPubkeys = append(operatorPubkeys, operatorPubkey) + + } + + return operatorAddresses, operatorPubkeys, nil +} diff --git a/chainio/clients/avsregistry/subscriber.go b/chainio/clients/avsregistry/subscriber.go new file mode 100644 index 00000000..96ec9d33 --- /dev/null +++ b/chainio/clients/avsregistry/subscriber.go @@ -0,0 +1,58 @@ +package avsregistry + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" + + "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" + blsapkreg "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSApkRegistry" + "github.com/Layr-Labs/eigensdk-go/logging" +) + +type AvsRegistrySubscriber interface { + SubscribeToNewPubkeyRegistrations() (chan *blsapkreg.ContractBLSApkRegistryNewPubkeyRegistration, event.Subscription, error) +} + +type AvsRegistryChainSubscriber struct { + logger logging.Logger + blsApkRegistry blsapkreg.ContractBLSApkRegistryFilters +} + +// forces EthSubscriber to implement the chainio.Subscriber interface +var _ AvsRegistrySubscriber = (*AvsRegistryChainSubscriber)(nil) + +func NewAvsRegistryChainSubscriber( + blsApkRegistry blsapkreg.ContractBLSApkRegistryFilters, + logger logging.Logger, +) (*AvsRegistryChainSubscriber, error) { + return &AvsRegistryChainSubscriber{ + logger: logger, + blsApkRegistry: blsApkRegistry, + }, nil +} + +func BuildAvsRegistryChainSubscriber( + blsApkRegistryAddr common.Address, + ethWsClient eth.EthClient, + logger logging.Logger, +) (*AvsRegistryChainSubscriber, error) { + blsapkreg, err := blsapkreg.NewContractBLSApkRegistry(blsApkRegistryAddr, ethWsClient) + if err != nil { + logger.Error("Failed to create BLSApkRegistry contract", "err", err) + return nil, err + } + return NewAvsRegistryChainSubscriber(blsapkreg, logger) +} + +func (s *AvsRegistryChainSubscriber) SubscribeToNewPubkeyRegistrations() (chan *blsapkreg.ContractBLSApkRegistryNewPubkeyRegistration, event.Subscription, error) { + newPubkeyRegistrationChan := make(chan *blsapkreg.ContractBLSApkRegistryNewPubkeyRegistration) + sub, err := s.blsApkRegistry.WatchNewPubkeyRegistration( + &bind.WatchOpts{}, newPubkeyRegistrationChan, nil, + ) + if err != nil { + s.logger.Error("Failed to subscribe to NewPubkeyRegistration events", "err", err) + return nil, nil, err + } + return newPubkeyRegistrationChan, sub, nil +} diff --git a/chainio/clients/avsregistry/writer.go b/chainio/clients/avsregistry/writer.go index c5a65d65..bf30832e 100644 --- a/chainio/clients/avsregistry/writer.go +++ b/chainio/clients/avsregistry/writer.go @@ -2,86 +2,229 @@ package avsregistry import ( "context" + "crypto/ecdsa" "errors" + "math/big" + "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" + "github.com/Layr-Labs/eigensdk-go/chainio/utils" + "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" + "github.com/ethereum/go-ethereum/accounts/abi/bind" gethcommon "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" + gethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" - blsoperatorstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" - blspubkeyregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPubkeyRegistry" - blsregistrycoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSRegistryCoordinatorWithIndices" + blsapkregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSApkRegistry" + opstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" + regcoord "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator" stakeregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StakeRegistry" ) type AvsRegistryWriter interface { + // RegisterOperatorWithAVSRegistryCoordinator is used to register a single operator with the AVS's registry coordinator. + // - operatorEcdsaPrivateKey is the operator's ecdsa private key (used to sign a message to register operator in eigenlayer's delegation manager) + // - operatorToAvsRegistrationSigSalt is a random salt used to prevent replay attacks + // - operatorToAvsRegistrationSigExpiry is the expiry time of the signature RegisterOperatorWithAVSRegistryCoordinator( ctx context.Context, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, + blsKeyPair *bls.KeyPair, quorumNumbers []byte, - pubkey blsregistrycoordinator.BN254G1Point, socket string, - ) (*types.Receipt, error) + ) (*gethtypes.Receipt, error) - UpdateStakes( + // UpdateStakesOfEntireOperatorSetForQuorums is used by avs teams running https://github.com/Layr-Labs/avs-sync + // to updates the stake of their entire operator set. + // Because of high gas costs of this operation, it typically needs to be called for every quorum, or perhaps for a small grouping of quorums + // (highly dependent on number of operators per quorum) + UpdateStakesOfEntireOperatorSetForQuorums( + ctx context.Context, + operatorsPerQuorum [][]gethcommon.Address, + quorumNumbers []byte, + ) (*gethtypes.Receipt, error) + + // UpdateStakesOfOperatorSubsetForAllQuorums is meant to be used by single operators (or teams of operators, possibly running https://github.com/Layr-Labs/avs-sync) + // to update the stake of their own operator(s). This might be needed in the case that they received a lot of new stake delegations, and want this to be reflected + // in the AVS's registry coordinator. + UpdateStakesOfOperatorSubsetForAllQuorums( ctx context.Context, operators []gethcommon.Address, - ) (*types.Receipt, error) + ) (*gethtypes.Receipt, error) DeregisterOperator( ctx context.Context, quorumNumbers []byte, - pubkey blsregistrycoordinator.BN254G1Point, - ) (*types.Receipt, error) + pubkey regcoord.BN254G1Point, + ) (*gethtypes.Receipt, error) } type AvsRegistryChainWriter struct { - registryCoordinator *blsregistrycoordinator.ContractBLSRegistryCoordinatorWithIndices - blsOperatorStateRetriever *blsoperatorstateretriever.ContractBLSOperatorStateRetriever - stakeRegistry *stakeregistry.ContractStakeRegistry - blsPubkeyRegistry *blspubkeyregistry.ContractBLSPubkeyRegistry - logger logging.Logger - ethClient eth.EthClient - txMgr txmgr.TxManager + serviceManagerAddr gethcommon.Address + registryCoordinator *regcoord.ContractRegistryCoordinator + operatorStateRetriever *opstateretriever.ContractOperatorStateRetriever + stakeRegistry *stakeregistry.ContractStakeRegistry + blsApkRegistry *blsapkregistry.ContractBLSApkRegistry + elReader elcontracts.ELReader + logger logging.Logger + ethClient eth.EthClient + txMgr txmgr.TxManager } var _ AvsRegistryWriter = (*AvsRegistryChainWriter)(nil) -func NewAvsRegistryWriter( - registryCoordinator *blsregistrycoordinator.ContractBLSRegistryCoordinatorWithIndices, - blsOperatorStateRetriever *blsoperatorstateretriever.ContractBLSOperatorStateRetriever, +func NewAvsRegistryChainWriter( + serviceManagerAddr gethcommon.Address, + registryCoordinator *regcoord.ContractRegistryCoordinator, + operatorStateRetriever *opstateretriever.ContractOperatorStateRetriever, stakeRegistry *stakeregistry.ContractStakeRegistry, - blsPubkeyRegistry *blspubkeyregistry.ContractBLSPubkeyRegistry, + blsApkRegistry *blsapkregistry.ContractBLSApkRegistry, + elReader elcontracts.ELReader, logger logging.Logger, ethClient eth.EthClient, txMgr txmgr.TxManager, ) (*AvsRegistryChainWriter, error) { return &AvsRegistryChainWriter{ - registryCoordinator: registryCoordinator, - blsOperatorStateRetriever: blsOperatorStateRetriever, - stakeRegistry: stakeRegistry, - blsPubkeyRegistry: blsPubkeyRegistry, - logger: logger, - ethClient: ethClient, - txMgr: txMgr, + serviceManagerAddr: serviceManagerAddr, + registryCoordinator: registryCoordinator, + operatorStateRetriever: operatorStateRetriever, + stakeRegistry: stakeRegistry, + blsApkRegistry: blsApkRegistry, + elReader: elReader, + logger: logger, + ethClient: ethClient, + txMgr: txMgr, }, nil } +func BuildAvsRegistryChainWriter( + registryCoordinatorAddr gethcommon.Address, + operatorStateRetrieverAddr gethcommon.Address, + logger logging.Logger, + ethClient eth.EthClient, + txMgr txmgr.TxManager, +) (*AvsRegistryChainWriter, error) { + registryCoordinator, err := regcoord.NewContractRegistryCoordinator(registryCoordinatorAddr, ethClient) + if err != nil { + return nil, err + } + operatorStateRetriever, err := opstateretriever.NewContractOperatorStateRetriever( + operatorStateRetrieverAddr, + ethClient, + ) + if err != nil { + return nil, err + } + serviceManagerAddr, err := registryCoordinator.ServiceManager(&bind.CallOpts{}) + if err != nil { + return nil, err + } + blsApkRegistryAddr, err := registryCoordinator.BlsApkRegistry(&bind.CallOpts{}) + if err != nil { + return nil, err + } + blsApkRegistry, err := blsapkregistry.NewContractBLSApkRegistry(blsApkRegistryAddr, ethClient) + if err != nil { + return nil, err + } + stakeRegistryAddr, err := registryCoordinator.StakeRegistry(&bind.CallOpts{}) + if err != nil { + return nil, err + } + stakeRegistry, err := stakeregistry.NewContractStakeRegistry(stakeRegistryAddr, ethClient) + if err != nil { + return nil, err + } + delegationManagerAddr, err := stakeRegistry.Delegation(&bind.CallOpts{}) + if err != nil { + return nil, err + } + elReader, err := elcontracts.BuildELChainReader(delegationManagerAddr, ethClient, logger) + if err != nil { + return nil, err + } + return NewAvsRegistryChainWriter( + serviceManagerAddr, + registryCoordinator, + operatorStateRetriever, + stakeRegistry, + blsApkRegistry, + elReader, + logger, + ethClient, + txMgr, + ) +} + +// TODO(samlaf): clean up this function func (w *AvsRegistryChainWriter) RegisterOperatorWithAVSRegistryCoordinator( ctx context.Context, + // we need to pass the private key explicitly and can't use the signer because registering requires signing a message which isn't a transaction + // and the signer can only signs transactions + // see operatorSignature in https://github.com/Layr-Labs/eigenlayer-middleware/blob/m2-mainnet/docs/RegistryCoordinator.md#registeroperator + // TODO(madhur): check to see if we can make the signer and txmgr more flexible so we can use them (and remote signers) to sign non txs + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, + blsKeyPair *bls.KeyPair, quorumNumbers []byte, - pubkey blsregistrycoordinator.BN254G1Point, socket string, -) (*types.Receipt, error) { +) (*gethtypes.Receipt, error) { w.logger.Info("registering operator with the AVS's registry coordinator") + // params to register bls pubkey with bls apk registry + operatorAddr := crypto.PubkeyToAddress(operatorEcdsaPrivateKey.PublicKey) + g1HashedMsgToSign, err := w.registryCoordinator.PubkeyRegistrationMessageHash(&bind.CallOpts{}, operatorAddr) + if err != nil { + return nil, err + } + signedMsg := utils.ConvertToBN254G1Point( + blsKeyPair.SignHashedToCurveMessage(utils.ConvertBn254GethToGnark(g1HashedMsgToSign)).G1Point, + ) + G1pubkeyBN254 := utils.ConvertToBN254G1Point(blsKeyPair.GetPubKeyG1()) + G2pubkeyBN254 := utils.ConvertToBN254G2Point(blsKeyPair.GetPubKeyG2()) + pubkeyRegParams := regcoord.IBLSApkRegistryPubkeyRegistrationParams{ + PubkeyRegistrationSignature: signedMsg, + PubkeyG1: G1pubkeyBN254, + PubkeyG2: G2pubkeyBN254, + } + + // params to register operator in delegation manager's operator-avs mapping + msgToSign, err := w.elReader.CalculateDelegationApprovalDigestHash( + &bind.CallOpts{}, operatorAddr, w.serviceManagerAddr, operatorToAvsRegistrationSigSalt, operatorToAvsRegistrationSigExpiry) + if err != nil { + return nil, err + } + operatorSignature, err := crypto.Sign(msgToSign[:], operatorEcdsaPrivateKey) + if err != nil { + return nil, err + } + // this is annoying, and not sure why its needed, but seems like some historical baggage + // see https://github.com/ethereum/go-ethereum/issues/28757#issuecomment-1874525854 + // and https://twitter.com/pcaversaccio/status/1671488928262529031 + operatorSignature[64] += 27 + operatorSignatureWithSaltAndExpiry := regcoord.ISignatureUtilsSignatureWithSaltAndExpiry{ + Signature: operatorSignature, + Salt: operatorToAvsRegistrationSigSalt, + Expiry: operatorToAvsRegistrationSigExpiry, + } + noSendTxOpts, err := w.txMgr.GetNoSendTxOpts() if err != nil { return nil, err } // TODO: this call will fail if max number of operators are already registered // in that case, need to call churner to kick out another operator. See eigenDA's node/operator.go implementation - tx, err := w.registryCoordinator.RegisterOperatorWithCoordinator1(noSendTxOpts, quorumNumbers, pubkey, socket) + tx, err := w.registryCoordinator.RegisterOperator( + noSendTxOpts, + quorumNumbers, + socket, + pubkeyRegParams, + operatorSignatureWithSaltAndExpiry, + ) if err != nil { return nil, err } @@ -94,16 +237,40 @@ func (w *AvsRegistryChainWriter) RegisterOperatorWithAVSRegistryCoordinator( return receipt, nil } -func (w *AvsRegistryChainWriter) UpdateStakes( +func (w *AvsRegistryChainWriter) UpdateStakesOfEntireOperatorSetForQuorums( + ctx context.Context, + operatorsPerQuorum [][]gethcommon.Address, + quorumNumbers []byte, +) (*gethtypes.Receipt, error) { + w.logger.Info("updating stakes for entire operator set", "quorumNumbers", quorumNumbers) + noSendTxOpts, err := w.txMgr.GetNoSendTxOpts() + if err != nil { + return nil, err + } + tx, err := w.registryCoordinator.UpdateOperatorsForQuorum(noSendTxOpts, operatorsPerQuorum, quorumNumbers) + if err != nil { + return nil, err + } + receipt, err := w.txMgr.Send(ctx, tx) + if err != nil { + return nil, errors.New("failed to send tx with err: " + err.Error()) + } + w.logger.Infof("tx hash: %s", tx.Hash().String()) + w.logger.Info("updated stakes for entire operator set", "quorumNumbers", quorumNumbers) + return receipt, nil + +} + +func (w *AvsRegistryChainWriter) UpdateStakesOfOperatorSubsetForAllQuorums( ctx context.Context, operators []gethcommon.Address, -) (*types.Receipt, error) { - w.logger.Info("updating stakes") +) (*gethtypes.Receipt, error) { + w.logger.Info("updating stakes of operator subset for all quorums", "operators", operators) noSendTxOpts, err := w.txMgr.GetNoSendTxOpts() if err != nil { return nil, err } - tx, err := w.stakeRegistry.UpdateStakes(noSendTxOpts, operators) + tx, err := w.registryCoordinator.UpdateOperators(noSendTxOpts, operators) if err != nil { return nil, err } @@ -112,7 +279,7 @@ func (w *AvsRegistryChainWriter) UpdateStakes( return nil, errors.New("failed to send tx with err: " + err.Error()) } w.logger.Infof("tx hash: %s", tx.Hash().String()) - w.logger.Info("updated stakes") + w.logger.Info("updated stakes of operator subset for all quorums", "operators", operators) return receipt, nil } @@ -120,14 +287,14 @@ func (w *AvsRegistryChainWriter) UpdateStakes( func (w *AvsRegistryChainWriter) DeregisterOperator( ctx context.Context, quorumNumbers []byte, - pubkey blsregistrycoordinator.BN254G1Point, -) (*types.Receipt, error) { + pubkey regcoord.BN254G1Point, +) (*gethtypes.Receipt, error) { w.logger.Info("deregistering operator with the AVS's registry coordinator") noSendTxOpts, err := w.txMgr.GetNoSendTxOpts() if err != nil { return nil, err } - tx, err := w.registryCoordinator.DeregisterOperatorWithCoordinator(noSendTxOpts, quorumNumbers, pubkey) + tx, err := w.registryCoordinator.DeregisterOperator(noSendTxOpts, quorumNumbers) if err != nil { return nil, err } diff --git a/chainio/clients/builder.go b/chainio/clients/builder.go index 47ca9c3b..fabe5e65 100644 --- a/chainio/clients/builder.go +++ b/chainio/clients/builder.go @@ -6,7 +6,6 @@ import ( "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" chainioutils "github.com/Layr-Labs/eigensdk-go/chainio/utils" - blspubkeycompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" "github.com/Layr-Labs/eigensdk-go/logging" "github.com/Layr-Labs/eigensdk-go/metrics" "github.com/Layr-Labs/eigensdk-go/signerv2" @@ -16,12 +15,12 @@ import ( ) type BuildAllConfig struct { - EthHttpUrl string `yaml:"eth_http_url"` - EthWsUrl string `yaml:"eth_ws_url"` - BlsRegistryCoordinatorAddr string `yaml:"bls_registry_coordinator_address"` - BlsOperatorStateRetrieverAddr string `yaml:"bls_operator_state_retriever_address"` - AvsName string `yaml:"avs_name"` - PromMetricsIpPortAddress string `yaml:"prometheus_metrics_ip_port_address"` + EthHttpUrl string + EthWsUrl string + RegistryCoordinatorAddr string + OperatorStateRetrieverAddr string + AvsName string + PromMetricsIpPortAddress string } // TODO: this is confusing right now because clients are not instrumented clients, but @@ -30,18 +29,18 @@ type BuildAllConfig struct { // for non-instrumented clients that doesn't return metrics/reg, and another instrumented-constructor // that returns instrumented clients and the metrics/reg. type Clients struct { - AvsRegistryChainReader avsregistry.AvsRegistryReader - AvsRegistryChainWriter avsregistry.AvsRegistryWriter - ElChainReader elcontracts.ELReader - ElChainSubscriber elcontracts.ELSubscriber - ElChainWriter elcontracts.ELWriter - EthHttpClient *eth.Client - EthWsClient *eth.Client - Metrics *metrics.EigenMetrics // exposes main avs node spec metrics that need to be incremented by avs code and used to start the metrics server - PrometheusRegistry *prometheus.Registry // Used if avs teams need to register avs-specific metrics + AvsRegistryChainReader *avsregistry.AvsRegistryChainReader + AvsRegistryChainSubscriber *avsregistry.AvsRegistryChainSubscriber + AvsRegistryChainWriter *avsregistry.AvsRegistryChainWriter + ElChainReader *elcontracts.ELChainReader + ElChainWriter *elcontracts.ELChainWriter + EthHttpClient *eth.Client + EthWsClient *eth.Client + Metrics *metrics.EigenMetrics // exposes main avs node spec metrics that need to be incremented by avs code and used to start the metrics server + PrometheusRegistry *prometheus.Registry // Used if avs teams need to register avs-specific metrics } -func BuildAll(config BuildAllConfig, signer signerv2.SignerFn, logger logging.Logger) (*Clients, error) { +func BuildAll(config BuildAllConfig, signerAddr gethcommon.Address, signerFn signerv2.SignerFn, logger logging.Logger) (*Clients, error) { config.validate(logger) // Create the metrics server @@ -61,11 +60,10 @@ func BuildAll(config BuildAllConfig, signer signerv2.SignerFn, logger logging.Lo return nil, err } - txMgr := txmgr.NewSimpleTxManager(ethHttpClient, logger, signer, gethcommon.Address{}) + txMgr := txmgr.NewSimpleTxManager(ethHttpClient, logger, signerFn, signerAddr) // creating EL clients: Reader, Writer and Subscriber - elChainReader, elChainWriter, elChainSubscriber, err := config.buildElClients( + elChainReader, elChainWriter, err := config.buildElClients( ethHttpClient, - ethWsClient, txMgr, logger, eigenMetrics, @@ -76,8 +74,10 @@ func BuildAll(config BuildAllConfig, signer signerv2.SignerFn, logger logging.Lo } // creating AVS clients: Reader and Writer - avsRegistryChainReader, avsRegistryChainWriter, err := config.buildAvsClients( + avsRegistryChainReader, avsRegistryChainSubscriber, avsRegistryChainWriter, err := config.buildAvsClients( + elChainReader, ethHttpClient, + ethWsClient, txMgr, logger, ) @@ -87,52 +87,50 @@ func BuildAll(config BuildAllConfig, signer signerv2.SignerFn, logger logging.Lo } return &Clients{ - ElChainReader: elChainReader, - ElChainSubscriber: elChainSubscriber, - ElChainWriter: elChainWriter, - AvsRegistryChainReader: avsRegistryChainReader, - AvsRegistryChainWriter: avsRegistryChainWriter, - EthHttpClient: ethHttpClient, - EthWsClient: ethWsClient, - Metrics: eigenMetrics, - PrometheusRegistry: promReg, + ElChainReader: elChainReader, + ElChainWriter: elChainWriter, + AvsRegistryChainReader: avsRegistryChainReader, + AvsRegistryChainSubscriber: avsRegistryChainSubscriber, + AvsRegistryChainWriter: avsRegistryChainWriter, + EthHttpClient: ethHttpClient, + EthWsClient: ethWsClient, + Metrics: eigenMetrics, + PrometheusRegistry: promReg, }, nil } func (config *BuildAllConfig) buildElClients( ethHttpClient eth.EthClient, - ethWsClient eth.EthClient, txMgr txmgr.TxManager, logger logging.Logger, eigenMetrics *metrics.EigenMetrics, -) (elcontracts.ELReader, elcontracts.ELWriter, elcontracts.ELSubscriber, error) { +) (*elcontracts.ELChainReader, *elcontracts.ELChainWriter, error) { avsRegistryContractBindings, err := chainioutils.NewAVSRegistryContractBindings( - gethcommon.HexToAddress(config.BlsRegistryCoordinatorAddr), - gethcommon.HexToAddress(config.BlsOperatorStateRetrieverAddr), + gethcommon.HexToAddress(config.RegistryCoordinatorAddr), + gethcommon.HexToAddress(config.OperatorStateRetrieverAddr), ethHttpClient, logger, ) if err != nil { logger.Error("Failed to create AVSRegistryContractBindings", "err", err) - return nil, nil, nil, err + return nil, nil, err } - slasherAddr, err := avsRegistryContractBindings.RegistryCoordinator.Slasher(&bind.CallOpts{}) + delegationManagerAddr, err := avsRegistryContractBindings.StakeRegistry.Delegation(&bind.CallOpts{}) if err != nil { logger.Fatal("Failed to fetch Slasher contract", "err", err) } elContractBindings, err := chainioutils.NewEigenlayerContractBindings( - slasherAddr, - avsRegistryContractBindings.BlsPubkeyCompendiumAddr, + delegationManagerAddr, ethHttpClient, logger, ) if err != nil { logger.Error("Failed to create EigenlayerContractBindings", "err", err) - return nil, nil, nil, err + return nil, nil, err } // get the Reader for the EL contracts @@ -140,36 +138,15 @@ func (config *BuildAllConfig) buildElClients( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, - elContractBindings.BlsPubkeyCompendium, - elContractBindings.BlspubkeyCompendiumAddr, logger, ethHttpClient, ) - // get the Subscriber for the EL contracts - contractBlsPubkeyCompendiumWs, err := blspubkeycompendium.NewContractBLSPublicKeyCompendium( - elContractBindings.BlspubkeyCompendiumAddr, - ethWsClient, - ) - if err != nil { - logger.Fatal("Failed to fetch BLSPublicKeyCompendium contract", "err", err) - } - elChainSubscriber, err := elcontracts.NewELChainSubscriber( - contractBlsPubkeyCompendiumWs, - logger, - ) - if err != nil { - logger.Error("Failed to create ELChainSubscriber", "err", err) - return nil, nil, nil, err - } - elChainWriter := elcontracts.NewELChainWriter( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, elContractBindings.StrategyManagerAddr, - elContractBindings.BlsPubkeyCompendium, - elContractBindings.BlspubkeyCompendiumAddr, elChainReader, ethHttpClient, logger, @@ -178,57 +155,70 @@ func (config *BuildAllConfig) buildElClients( ) if err != nil { logger.Error("Failed to create ELChainWriter", "err", err) - return nil, nil, nil, err + return nil, nil, err } - return elChainReader, elChainWriter, elChainSubscriber, nil + return elChainReader, elChainWriter, nil } func (config *BuildAllConfig) buildAvsClients( + elReader elcontracts.ELReader, ethHttpClient eth.EthClient, + ethWsClient eth.EthClient, txMgr txmgr.TxManager, logger logging.Logger, -) (avsregistry.AvsRegistryReader, avsregistry.AvsRegistryWriter, error) { +) (*avsregistry.AvsRegistryChainReader, *avsregistry.AvsRegistryChainSubscriber, *avsregistry.AvsRegistryChainWriter, error) { avsRegistryContractBindings, err := chainioutils.NewAVSRegistryContractBindings( - gethcommon.HexToAddress(config.BlsRegistryCoordinatorAddr), - gethcommon.HexToAddress(config.BlsOperatorStateRetrieverAddr), + gethcommon.HexToAddress(config.RegistryCoordinatorAddr), + gethcommon.HexToAddress(config.OperatorStateRetrieverAddr), ethHttpClient, logger, ) if err != nil { logger.Error("Failed to create AVSRegistryContractBindings", "err", err) - return nil, nil, err + return nil, nil, nil, err } - avsRegistryChainReader, err := avsregistry.NewAvsRegistryReader( + avsRegistryChainReader := avsregistry.NewAvsRegistryChainReader( avsRegistryContractBindings.RegistryCoordinatorAddr, + avsRegistryContractBindings.BlsApkRegistryAddr, avsRegistryContractBindings.RegistryCoordinator, - avsRegistryContractBindings.BlsOperatorStateRetriever, + avsRegistryContractBindings.OperatorStateRetriever, avsRegistryContractBindings.StakeRegistry, logger, ethHttpClient, ) - if err != nil { - logger.Error("Failed to create AVSRegistryChainReader", "err", err) - return nil, nil, err - } - avsRegistryChainWriter, err := avsregistry.NewAvsRegistryWriter( + avsRegistryChainWriter, err := avsregistry.NewAvsRegistryChainWriter( + avsRegistryContractBindings.ServiceManagerAddr, avsRegistryContractBindings.RegistryCoordinator, - avsRegistryContractBindings.BlsOperatorStateRetriever, + avsRegistryContractBindings.OperatorStateRetriever, avsRegistryContractBindings.StakeRegistry, - avsRegistryContractBindings.BlsPubkeyRegistry, + avsRegistryContractBindings.BlsApkRegistry, + elReader, logger, ethHttpClient, txMgr, ) if err != nil { logger.Error("Failed to create AVSRegistryChainWriter", "err", err) - return nil, nil, err + return nil, nil, nil, err + } + + // get the Subscriber for Avs Registry contracts + // note that the subscriber needs a ws connection instead of http + avsRegistrySubscriber, err := avsregistry.BuildAvsRegistryChainSubscriber( + avsRegistryContractBindings.BlsApkRegistryAddr, + ethWsClient, + logger, + ) + if err != nil { + logger.Error("Failed to create ELChainSubscriber", "err", err) + return nil, nil, nil, err } - return avsRegistryChainReader, avsRegistryChainWriter, nil + return avsRegistryChainReader, avsRegistrySubscriber, avsRegistryChainWriter, nil } // Very basic validation that makes sure all fields are nonempty @@ -241,10 +231,10 @@ func (config *BuildAllConfig) validate(logger logging.Logger) { if config.EthWsUrl == "" { logger.Fatalf("BuildAllConfig.validate: Missing eth ws url") } - if config.BlsRegistryCoordinatorAddr == "" { + if config.RegistryCoordinatorAddr == "" { logger.Fatalf("BuildAllConfig.validate: Missing bls registry coordinator address") } - if config.BlsOperatorStateRetrieverAddr == "" { + if config.OperatorStateRetrieverAddr == "" { logger.Fatalf("BuildAllConfig.validate: Missing bls operator state retriever address") } if config.AvsName == "" { diff --git a/chainio/clients/elcontracts/reader.go b/chainio/clients/elcontracts/reader.go index 4aec4b79..b88f2f76 100644 --- a/chainio/clients/elcontracts/reader.go +++ b/chainio/clients/elcontracts/reader.go @@ -1,28 +1,21 @@ package elcontracts import ( - "bytes" - "context" "math/big" - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" chainioutils "github.com/Layr-Labs/eigensdk-go/chainio/utils" - "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" "github.com/Layr-Labs/eigensdk-go/types" - eigenabi "github.com/Layr-Labs/eigensdk-go/types/abi" - blspkcompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" delegationmanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/DelegationManager" erc20 "github.com/Layr-Labs/eigensdk-go/contracts/bindings/IERC20" + slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/ISlasher" strategy "github.com/Layr-Labs/eigensdk-go/contracts/bindings/IStrategy" - slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/Slasher" strategymanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StrategyManager" ) @@ -42,14 +35,6 @@ type ELReader interface { opts *bind.CallOpts, strategyAddr gethcommon.Address, ) (*strategy.ContractIStrategy, erc20.ContractIERC20Methods, gethcommon.Address, error) - QueryExistingRegisteredOperatorPubKeys( - ctx context.Context, startBlock *big.Int, stopBlock *big.Int, - ) ([]types.OperatorAddr, []types.OperatorPubkeys, error) - - GetOperatorPubkeyHash(opts *bind.CallOpts, operator types.Operator) ([32]byte, error) - - GetOperatorAddressFromPubkeyHash(opts *bind.CallOpts, pubkeyHash [32]byte) (gethcommon.Address, error) - ServiceManagerCanSlashOperatorUntilBlock( opts *bind.CallOpts, operatorAddr gethcommon.Address, @@ -63,50 +48,46 @@ type ELReader interface { operatorAddr gethcommon.Address, strategyAddr gethcommon.Address, ) (*big.Int, error) + + CalculateDelegationApprovalDigestHash( + opts *bind.CallOpts, operator gethcommon.Address, avs gethcommon.Address, salt [32]byte, expiry *big.Int, + ) ([32]byte, error) } type ELChainReader struct { - logger logging.Logger - slasher slasher.ContractSlasherCalls - delegationManager delegationmanager.ContractDelegationManagerCalls - strategyManager strategymanager.ContractStrategyManagerCalls - blsPubkeyCompendium blspkcompendium.ContractBLSPublicKeyCompendiumCalls - blsPubKeyCompendiumAddr common.Address - ethClient eth.EthClient + logger logging.Logger + slasher slasher.ContractISlasherCalls + delegationManager delegationmanager.ContractDelegationManagerCalls + strategyManager strategymanager.ContractStrategyManagerCalls + ethClient eth.EthClient } // forces EthReader to implement the chainio.Reader interface var _ ELReader = (*ELChainReader)(nil) func NewELChainReader( - slasher slasher.ContractSlasherCalls, + slasher slasher.ContractISlasherCalls, delegationManager delegationmanager.ContractDelegationManagerCalls, strategyManager strategymanager.ContractStrategyManagerCalls, - blsPubkeyCompendium blspkcompendium.ContractBLSPublicKeyCompendiumCalls, - blsPubKeyCompendiumAddr common.Address, logger logging.Logger, ethClient eth.EthClient, ) *ELChainReader { return &ELChainReader{ - slasher: slasher, - delegationManager: delegationManager, - strategyManager: strategyManager, - blsPubkeyCompendium: blsPubkeyCompendium, - blsPubKeyCompendiumAddr: blsPubKeyCompendiumAddr, - logger: logger, - ethClient: ethClient, + slasher: slasher, + delegationManager: delegationManager, + strategyManager: strategyManager, + logger: logger, + ethClient: ethClient, } } func BuildELChainReader( - slasherAddr gethcommon.Address, - blsPubKeyCompendiumAddr gethcommon.Address, + delegationManagerAddr gethcommon.Address, ethClient eth.EthClient, logger logging.Logger, ) (*ELChainReader, error) { elContractBindings, err := chainioutils.NewEigenlayerContractBindings( - slasherAddr, - blsPubKeyCompendiumAddr, + delegationManagerAddr, ethClient, logger, ) @@ -117,14 +98,11 @@ func BuildELChainReader( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, - elContractBindings.BlsPubkeyCompendium, - blsPubKeyCompendiumAddr, logger, ethClient, ), nil } -// TODO(samlaf): should we just pass the CallOpts directly as argument instead of the context? func (r *ELChainReader) IsOperatorRegistered(opts *bind.CallOpts, operator types.Operator) (bool, error) { isOperator, err := r.delegationManager.IsOperator( opts, @@ -137,28 +115,6 @@ func (r *ELChainReader) IsOperatorRegistered(opts *bind.CallOpts, operator types return isOperator, nil } -func (r *ELChainReader) GetOperatorPubkeyHash(opts *bind.CallOpts, operator types.Operator) ([32]byte, error) { - operatorPubkeyHash, err := r.blsPubkeyCompendium.OperatorToPubkeyHash( - opts, - gethcommon.HexToAddress(operator.Address), - ) - if err != nil { - return [32]byte{}, err - } - - return operatorPubkeyHash, nil -} - -func (r *ELChainReader) GetOperatorAddressFromPubkeyHash( - opts *bind.CallOpts, - pubkeyHash [32]byte, -) (gethcommon.Address, error) { - return r.blsPubkeyCompendium.PubkeyHashToOperator( - opts, - pubkeyHash, - ) -} - func (r *ELChainReader) GetOperatorDetails(opts *bind.CallOpts, operator types.Operator) (types.Operator, error) { operatorDetails, err := r.delegationManager.OperatorDetails( opts, @@ -238,76 +194,6 @@ func (r *ELChainReader) OperatorIsFrozen(opts *bind.CallOpts, operatorAddr gethc return operatorIsFrozen, nil } -func (r *ELChainReader) QueryExistingRegisteredOperatorPubKeys( - ctx context.Context, - startBlock *big.Int, - stopBlock *big.Int, -) ([]types.OperatorAddr, []types.OperatorPubkeys, error) { - - query := ethereum.FilterQuery{ - FromBlock: startBlock, - ToBlock: stopBlock, - Addresses: []gethcommon.Address{ - r.blsPubKeyCompendiumAddr, - }, - } - - logs, err := r.ethClient.FilterLogs(ctx, query) - if err != nil { - r.logger.Error("Error filtering logs", "err", err) - return nil, nil, err - } - r.logger.Info("logs:", "logs", logs) - - pubkeyCompendiumAbi, err := abi.JSON(bytes.NewReader(eigenabi.BLSPublicKeyCompendiumAbi)) - if err != nil { - r.logger.Error("Error getting Abi", "err", err) - return nil, nil, err - } - - operatorAddresses := make([]types.OperatorAddr, 0) - operatorPubkeys := make([]types.OperatorPubkeys, 0) - - for _, vLog := range logs { - - // get the operator address - operatorAddr := gethcommon.HexToAddress(vLog.Topics[1].Hex()) - operatorAddresses = append(operatorAddresses, operatorAddr) - - event, err := pubkeyCompendiumAbi.Unpack("NewPubkeyRegistration", vLog.Data) - if err != nil { - r.logger.Error("Error unpacking event data", "err", err) - return nil, nil, err - } - - G1Pubkey := event[0].(struct { - X *big.Int "json:\"X\"" - Y *big.Int "json:\"Y\"" - }) - - G2Pubkey := event[1].(struct { - X [2]*big.Int "json:\"X\"" - Y [2]*big.Int "json:\"Y\"" - }) - - operatorPubkey := types.OperatorPubkeys{ - G1Pubkey: bls.NewG1Point( - G1Pubkey.X, - G1Pubkey.Y, - ), - G2Pubkey: bls.NewG2Point( - G2Pubkey.X, - G2Pubkey.Y, - ), - } - - operatorPubkeys = append(operatorPubkeys, operatorPubkey) - - } - - return operatorAddresses, operatorPubkeys, nil -} - func (r *ELChainReader) GetOperatorSharesInStrategy( opts *bind.CallOpts, operatorAddr gethcommon.Address, @@ -323,3 +209,11 @@ func (r *ELChainReader) GetOperatorSharesInStrategy( } return operatorSharesInStrategy, nil } + +func (r *ELChainReader) CalculateDelegationApprovalDigestHash( + opts *bind.CallOpts, operator gethcommon.Address, avs gethcommon.Address, salt [32]byte, expiry *big.Int, +) ([32]byte, error) { + return r.delegationManager.CalculateOperatorAVSRegistrationDigestHash( + opts, operator, avs, salt, expiry, + ) +} diff --git a/chainio/clients/elcontracts/subscriber.go b/chainio/clients/elcontracts/subscriber.go deleted file mode 100644 index cc5f6a39..00000000 --- a/chainio/clients/elcontracts/subscriber.go +++ /dev/null @@ -1,44 +0,0 @@ -package elcontracts - -import ( - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/event" - - pubkeycompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" - "github.com/Layr-Labs/eigensdk-go/logging" -) - -type ELSubscriber interface { - SubscribeToNewPubkeyRegistrations() (chan *pubkeycompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration, event.Subscription, error) -} - -type ELChainSubscriber struct { - logger logging.Logger - blsPubkeyCompendium pubkeycompendium.ContractBLSPublicKeyCompendiumFilters -} - -// forces EthSubscriber to implement the chainio.Subscriber interface -var _ ELSubscriber = (*ELChainSubscriber)(nil) - -func NewELChainSubscriber( - blsPubkeyCompendium pubkeycompendium.ContractBLSPublicKeyCompendiumFilters, - logger logging.Logger, -) (*ELChainSubscriber, error) { - - return &ELChainSubscriber{ - logger: logger, - blsPubkeyCompendium: blsPubkeyCompendium, - }, nil -} - -func (s *ELChainSubscriber) SubscribeToNewPubkeyRegistrations() (chan *pubkeycompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration, event.Subscription, error) { - newPubkeyRegistrationChan := make(chan *pubkeycompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration) - sub, err := s.blsPubkeyCompendium.WatchNewPubkeyRegistration( - &bind.WatchOpts{}, newPubkeyRegistrationChan, nil, - ) - if err != nil { - s.logger.Error("Failed to subscribe to NewPubkeyRegistration events", "err", err) - return nil, nil, err - } - return newPubkeyRegistrationChan, sub, nil -} diff --git a/chainio/clients/elcontracts/writer.go b/chainio/clients/elcontracts/writer.go index 7864ce83..1ab73b62 100644 --- a/chainio/clients/elcontracts/writer.go +++ b/chainio/clients/elcontracts/writer.go @@ -11,16 +11,13 @@ import ( gethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" - "github.com/Layr-Labs/eigensdk-go/chainio/utils" chainioutils "github.com/Layr-Labs/eigensdk-go/chainio/utils" - "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" "github.com/Layr-Labs/eigensdk-go/metrics" "github.com/Layr-Labs/eigensdk-go/types" - blspubkeycompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" delegationmanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/DelegationManager" - slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/Slasher" + slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/ISlasher" strategymanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StrategyManager" ) @@ -29,44 +26,32 @@ type ELWriter interface { UpdateOperatorDetails(ctx context.Context, operator types.Operator) (*gethtypes.Receipt, error) - RegisterBLSPublicKey( - ctx context.Context, - blsKeyPair *bls.KeyPair, - operator types.Operator, - ) (*gethtypes.Receipt, error) - // DepositERC20IntoStrategy deposits ERC20 tokens into a strategy contract. DepositERC20IntoStrategy( ctx context.Context, strategyAddr gethcommon.Address, amount *big.Int, ) (*gethtypes.Receipt, error) - - OptOperatorIntoSlashing(ctx context.Context, avsServiceManagerAddr gethcommon.Address) (*gethtypes.Receipt, error) } type ELChainWriter struct { - slasher slasher.ContractSlasherTransacts - delegationManager delegationmanager.ContractDelegationManagerTransacts - strategyManager strategymanager.ContractStrategyManagerTransacts - strategyManagerAddr gethcommon.Address - blsPubkeyCompendium blspubkeycompendium.ContractBLSPublicKeyCompendiumTransacts - blsPubkeyCompendiumAddr gethcommon.Address - elChainReader ELReader - ethClient eth.EthClient - logger logging.Logger - txMgr txmgr.TxManager + slasher slasher.ContractISlasherTransacts + delegationManager delegationmanager.ContractDelegationManagerTransacts + strategyManager strategymanager.ContractStrategyManagerTransacts + strategyManagerAddr gethcommon.Address + elChainReader ELReader + ethClient eth.EthClient + logger logging.Logger + txMgr txmgr.TxManager } var _ ELWriter = (*ELChainWriter)(nil) func NewELChainWriter( - slasher slasher.ContractSlasherTransacts, + slasher slasher.ContractISlasherTransacts, delegationManager delegationmanager.ContractDelegationManagerTransacts, strategyManager strategymanager.ContractStrategyManagerTransacts, strategyManagerAddr gethcommon.Address, - blsPubkeyCompendium blspubkeycompendium.ContractBLSPublicKeyCompendiumTransacts, - blsPubkeyCompendiumAddr gethcommon.Address, elChainReader ELReader, ethClient eth.EthClient, logger logging.Logger, @@ -74,30 +59,26 @@ func NewELChainWriter( txMgr txmgr.TxManager, ) *ELChainWriter { return &ELChainWriter{ - slasher: slasher, - delegationManager: delegationManager, - strategyManager: strategyManager, - strategyManagerAddr: strategyManagerAddr, - blsPubkeyCompendium: blsPubkeyCompendium, - blsPubkeyCompendiumAddr: blsPubkeyCompendiumAddr, - elChainReader: elChainReader, - logger: logger, - ethClient: ethClient, - txMgr: txMgr, + slasher: slasher, + delegationManager: delegationManager, + strategyManager: strategyManager, + strategyManagerAddr: strategyManagerAddr, + elChainReader: elChainReader, + logger: logger, + ethClient: ethClient, + txMgr: txMgr, } } func BuildELChainWriter( - slasherAddr gethcommon.Address, - blsPubKeyCompendiumAddr gethcommon.Address, + delegationManagerAddr gethcommon.Address, ethClient eth.EthClient, logger logging.Logger, eigenMetrics metrics.Metrics, txMgr txmgr.TxManager, ) (*ELChainWriter, error) { elContractBindings, err := chainioutils.NewEigenlayerContractBindings( - slasherAddr, - blsPubKeyCompendiumAddr, + delegationManagerAddr, ethClient, logger, ) @@ -108,8 +89,6 @@ func BuildELChainWriter( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, - elContractBindings.BlsPubkeyCompendium, - blsPubKeyCompendiumAddr, logger, ethClient, ) @@ -118,8 +97,6 @@ func BuildELChainWriter( elContractBindings.DelegationManager, elContractBindings.StrategyManager, elContractBindings.StrategyManagerAddr, - elContractBindings.BlsPubkeyCompendium, - blsPubKeyCompendiumAddr, elChainReader, ethClient, logger, @@ -236,70 +213,3 @@ func (w *ELChainWriter) DepositERC20IntoStrategy( w.logger.Infof("deposited %s into strategy %s", amount.String(), strategyAddr) return receipt, nil } - -// OptOperatorIntoSlashing operator opting into slashing is the w.signer wallet -// this is meant to be called by the operator CLI -func (w *ELChainWriter) OptOperatorIntoSlashing( - ctx context.Context, - avsServiceManagerAddr gethcommon.Address, -) (*gethtypes.Receipt, error) { - noSendTxOpts, err := w.txMgr.GetNoSendTxOpts() - if err != nil { - return nil, err - } - tx, err := w.slasher.OptIntoSlashing(noSendTxOpts, avsServiceManagerAddr) - if err != nil { - return nil, err - } - receipt, err := w.txMgr.Send(ctx, tx) - if err != nil { - return nil, errors.New("failed to send tx with err: " + err.Error()) - } - - w.logger.Infof( - "Operator %s opted into slashing by service manager contract %s \n", - noSendTxOpts.From, - avsServiceManagerAddr, - ) - return receipt, nil -} - -func (w *ELChainWriter) RegisterBLSPublicKey( - ctx context.Context, - blsKeyPair *bls.KeyPair, - operator types.Operator, -) (*gethtypes.Receipt, error) { - w.logger.Infof("Registering BLS Public key to eigenlayer for operator %s", operator.Address) - noSendTxOpts, err := w.txMgr.GetNoSendTxOpts() - if err != nil { - return nil, err - } - chainID, err := w.ethClient.ChainID(ctx) - if err != nil { - return nil, err - } - signedMsgHash := blsKeyPair.MakePubkeyRegistrationData( - gethcommon.HexToAddress(operator.Address), - w.blsPubkeyCompendiumAddr, - chainID, - ) - signedMsgHashBN254 := utils.ConvertToBN254G1Point(signedMsgHash) - G1pubkeyBN254 := utils.ConvertToBN254G1Point(blsKeyPair.GetPubKeyG1()) - G2pubkeyBN254 := utils.ConvertToBN254G2Point(blsKeyPair.GetPubKeyG2()) - tx, err := w.blsPubkeyCompendium.RegisterBLSPublicKey( - noSendTxOpts, - signedMsgHashBN254, - G1pubkeyBN254, - G2pubkeyBN254, - ) - if err != nil { - return nil, err - } - receipt, err := w.txMgr.Send(ctx, tx) - if err != nil { - return nil, errors.New("failed to send tx with err: " + err.Error()) - } - - w.logger.Infof("Operator %s has registered BLS public key to EigenLayer \n", operator.Address) - return receipt, nil -} diff --git a/chainio/gen.go b/chainio/gen.go index ba082ce6..3e7486f7 100644 --- a/chainio/gen.go +++ b/chainio/gen.go @@ -1,9 +1,9 @@ package chainio //go:generate mockgen -destination=./mocks/avsRegistryContractsReader.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry AvsRegistryReader +//go:generate mockgen -destination=./mocks/avsRegistryContractsSubscriber.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry AvsRegistrySubscriber //go:generate mockgen -destination=./mocks/avsRegistryContractsWriter.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry AvsRegistryWriter //go:generate mockgen -destination=./mocks/elContractsReader.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELReader //go:generate mockgen -destination=./mocks/elContractsWriter.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELWriter -//go:generate mockgen -destination=./mocks/elContractsSubscriber.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELSubscriber //go:generate mockgen -destination=./mocks/ethclient.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/eth EthClient //go:generate mockgen -destination=./mocks/eventSubscription.go -package=mocks github.com/ethereum/go-ethereum/event Subscription diff --git a/chainio/mocks/avsRegistryContractClient.go b/chainio/mocks/avsRegistryContractClient.go deleted file mode 100644 index 1d2173dd..00000000 --- a/chainio/mocks/avsRegistryContractClient.go +++ /dev/null @@ -1,181 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients (interfaces: AVSRegistryContractsClient) -// -// Generated by this command: -// -// mockgen -destination=./mocks/avsRegistryContractClient.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients AVSRegistryContractsClient -// -// Package mocks is a generated GoMock package. -package mocks - -import ( - big "math/big" - reflect "reflect" - - contractBLSOperatorStateRetriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" - contractBLSPubkeyRegistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPubkeyRegistry" - contractBLSRegistryCoordinatorWithIndices "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSRegistryCoordinatorWithIndices" - bind "github.com/ethereum/go-ethereum/accounts/abi/bind" - common "github.com/ethereum/go-ethereum/common" - types "github.com/ethereum/go-ethereum/core/types" - gomock "go.uber.org/mock/gomock" -) - -// MockAVSRegistryContractsClient is a mock of AVSRegistryContractsClient interface. -type MockAVSRegistryContractsClient struct { - ctrl *gomock.Controller - recorder *MockAVSRegistryContractsClientMockRecorder -} - -// MockAVSRegistryContractsClientMockRecorder is the mock recorder for MockAVSRegistryContractsClient. -type MockAVSRegistryContractsClientMockRecorder struct { - mock *MockAVSRegistryContractsClient -} - -// NewMockAVSRegistryContractsClient creates a new mock instance. -func NewMockAVSRegistryContractsClient(ctrl *gomock.Controller) *MockAVSRegistryContractsClient { - mock := &MockAVSRegistryContractsClient{ctrl: ctrl} - mock.recorder = &MockAVSRegistryContractsClientMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockAVSRegistryContractsClient) EXPECT() *MockAVSRegistryContractsClientMockRecorder { - return m.recorder -} - -// DeregisterOperator mocks base method. -func (m *MockAVSRegistryContractsClient) DeregisterOperator(arg0 *bind.TransactOpts, arg1 common.Address, arg2 []byte, arg3 contractBLSPubkeyRegistry.BN254G1Point) (*types.Transaction, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeregisterOperator", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(*types.Transaction) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeregisterOperator indicates an expected call of DeregisterOperator. -func (mr *MockAVSRegistryContractsClientMockRecorder) DeregisterOperator(arg0, arg1, arg2, arg3 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeregisterOperator", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).DeregisterOperator), arg0, arg1, arg2, arg3) -} - -// GetCheckSignaturesIndices mocks base method. -func (m *MockAVSRegistryContractsClient) GetCheckSignaturesIndices(arg0 *bind.CallOpts, arg1 uint32, arg2 []byte, arg3 [][32]byte) (contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverCheckSignaturesIndices, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCheckSignaturesIndices", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverCheckSignaturesIndices) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetCheckSignaturesIndices indicates an expected call of GetCheckSignaturesIndices. -func (mr *MockAVSRegistryContractsClientMockRecorder) GetCheckSignaturesIndices(arg0, arg1, arg2, arg3 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCheckSignaturesIndices", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).GetCheckSignaturesIndices), arg0, arg1, arg2, arg3) -} - -// GetCurrentOperatorStakeForQuorum mocks base method. -func (m *MockAVSRegistryContractsClient) GetCurrentOperatorStakeForQuorum(arg0 *bind.CallOpts, arg1 [32]byte, arg2 byte) (*big.Int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCurrentOperatorStakeForQuorum", arg0, arg1, arg2) - ret0, _ := ret[0].(*big.Int) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetCurrentOperatorStakeForQuorum indicates an expected call of GetCurrentOperatorStakeForQuorum. -func (mr *MockAVSRegistryContractsClientMockRecorder) GetCurrentOperatorStakeForQuorum(arg0, arg1, arg2 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentOperatorStakeForQuorum", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).GetCurrentOperatorStakeForQuorum), arg0, arg1, arg2) -} - -// GetOperatorId mocks base method. -func (m *MockAVSRegistryContractsClient) GetOperatorId(arg0 *bind.CallOpts, arg1 common.Address) ([32]byte, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorId", arg0, arg1) - ret0, _ := ret[0].([32]byte) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOperatorId indicates an expected call of GetOperatorId. -func (mr *MockAVSRegistryContractsClientMockRecorder) GetOperatorId(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorId", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).GetOperatorId), arg0, arg1) -} - -// GetOperatorQuorumsAtCurrentBlock mocks base method. -func (m *MockAVSRegistryContractsClient) GetOperatorQuorumsAtCurrentBlock(arg0 *bind.CallOpts, arg1 [32]byte) ([]byte, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorQuorumsAtCurrentBlock", arg0, arg1) - ret0, _ := ret[0].([]byte) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOperatorQuorumsAtCurrentBlock indicates an expected call of GetOperatorQuorumsAtCurrentBlock. -func (mr *MockAVSRegistryContractsClientMockRecorder) GetOperatorQuorumsAtCurrentBlock(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorQuorumsAtCurrentBlock", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).GetOperatorQuorumsAtCurrentBlock), arg0, arg1) -} - -// GetOperatorsStakeInQuorumsAtBlock mocks base method. -func (m *MockAVSRegistryContractsClient) GetOperatorsStakeInQuorumsAtBlock(arg0 *bind.CallOpts, arg1 []byte, arg2 uint32) ([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorsStakeInQuorumsAtBlock", arg0, arg1, arg2) - ret0, _ := ret[0].([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOperatorsStakeInQuorumsAtBlock indicates an expected call of GetOperatorsStakeInQuorumsAtBlock. -func (mr *MockAVSRegistryContractsClientMockRecorder) GetOperatorsStakeInQuorumsAtBlock(arg0, arg1, arg2 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorsStakeInQuorumsAtBlock", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).GetOperatorsStakeInQuorumsAtBlock), arg0, arg1, arg2) -} - -// GetOperatorsStakeInQuorumsOfOperatorAtBlock mocks base method. -func (m *MockAVSRegistryContractsClient) GetOperatorsStakeInQuorumsOfOperatorAtBlock(arg0 *bind.CallOpts, arg1 [32]byte, arg2 uint32) ([]byte, [][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorsStakeInQuorumsOfOperatorAtBlock", arg0, arg1, arg2) - ret0, _ := ret[0].([]byte) - ret1, _ := ret[1].([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// GetOperatorsStakeInQuorumsOfOperatorAtBlock indicates an expected call of GetOperatorsStakeInQuorumsOfOperatorAtBlock. -func (mr *MockAVSRegistryContractsClientMockRecorder) GetOperatorsStakeInQuorumsOfOperatorAtBlock(arg0, arg1, arg2 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorsStakeInQuorumsOfOperatorAtBlock", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).GetOperatorsStakeInQuorumsOfOperatorAtBlock), arg0, arg1, arg2) -} - -// RegisterOperatorWithCoordinator mocks base method. -func (m *MockAVSRegistryContractsClient) RegisterOperatorWithCoordinator(arg0 *bind.TransactOpts, arg1 []byte, arg2 contractBLSRegistryCoordinatorWithIndices.BN254G1Point, arg3 string) (*types.Transaction, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RegisterOperatorWithCoordinator", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(*types.Transaction) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// RegisterOperatorWithCoordinator indicates an expected call of RegisterOperatorWithCoordinator. -func (mr *MockAVSRegistryContractsClientMockRecorder) RegisterOperatorWithCoordinator(arg0, arg1, arg2, arg3 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterOperatorWithCoordinator", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).RegisterOperatorWithCoordinator), arg0, arg1, arg2, arg3) -} - -// UpdateStakes mocks base method. -func (m *MockAVSRegistryContractsClient) UpdateStakes(arg0 *bind.TransactOpts, arg1 []common.Address) (*types.Transaction, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateStakes", arg0, arg1) - ret0, _ := ret[0].(*types.Transaction) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// UpdateStakes indicates an expected call of UpdateStakes. -func (mr *MockAVSRegistryContractsClientMockRecorder) UpdateStakes(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateStakes", reflect.TypeOf((*MockAVSRegistryContractsClient)(nil).UpdateStakes), arg0, arg1) -} diff --git a/chainio/mocks/avsRegistryContractsReader.go b/chainio/mocks/avsRegistryContractsReader.go index fe606e74..5ab1e664 100644 --- a/chainio/mocks/avsRegistryContractsReader.go +++ b/chainio/mocks/avsRegistryContractsReader.go @@ -9,10 +9,12 @@ package mocks import ( + context "context" big "math/big" reflect "reflect" - contractBLSOperatorStateRetriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" + contractOperatorStateRetriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" + types "github.com/Layr-Labs/eigensdk-go/types" bind "github.com/ethereum/go-ethereum/accounts/abi/bind" common "github.com/ethereum/go-ethereum/common" gomock "go.uber.org/mock/gomock" @@ -42,10 +44,10 @@ func (m *MockAvsRegistryReader) EXPECT() *MockAvsRegistryReaderMockRecorder { } // GetCheckSignaturesIndices mocks base method. -func (m *MockAvsRegistryReader) GetCheckSignaturesIndices(arg0 *bind.CallOpts, arg1 uint32, arg2 []byte, arg3 [][32]byte) (contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverCheckSignaturesIndices, error) { +func (m *MockAvsRegistryReader) GetCheckSignaturesIndices(arg0 *bind.CallOpts, arg1 uint32, arg2 []byte, arg3 [][32]byte) (contractOperatorStateRetriever.OperatorStateRetrieverCheckSignaturesIndices, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetCheckSignaturesIndices", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverCheckSignaturesIndices) + ret0, _ := ret[0].(contractOperatorStateRetriever.OperatorStateRetrieverCheckSignaturesIndices) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -56,6 +58,36 @@ func (mr *MockAvsRegistryReaderMockRecorder) GetCheckSignaturesIndices(arg0, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCheckSignaturesIndices", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetCheckSignaturesIndices), arg0, arg1, arg2, arg3) } +// GetOperatorAddrsInQuorumsAtCurrentBlock mocks base method. +func (m *MockAvsRegistryReader) GetOperatorAddrsInQuorumsAtCurrentBlock(arg0 *bind.CallOpts, arg1 []byte) ([][]common.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOperatorAddrsInQuorumsAtCurrentBlock", arg0, arg1) + ret0, _ := ret[0].([][]common.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOperatorAddrsInQuorumsAtCurrentBlock indicates an expected call of GetOperatorAddrsInQuorumsAtCurrentBlock. +func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorAddrsInQuorumsAtCurrentBlock(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorAddrsInQuorumsAtCurrentBlock", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetOperatorAddrsInQuorumsAtCurrentBlock), arg0, arg1) +} + +// GetOperatorFromId mocks base method. +func (m *MockAvsRegistryReader) GetOperatorFromId(arg0 *bind.CallOpts, arg1 [32]byte) (common.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOperatorFromId", arg0, arg1) + ret0, _ := ret[0].(common.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOperatorFromId indicates an expected call of GetOperatorFromId. +func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorFromId(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorFromId", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetOperatorFromId), arg0, arg1) +} + // GetOperatorId mocks base method. func (m *MockAvsRegistryReader) GetOperatorId(arg0 *bind.CallOpts, arg1 common.Address) ([32]byte, error) { m.ctrl.T.Helper() @@ -87,10 +119,10 @@ func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorStakeInQuorumsOfOperator } // GetOperatorsStakeInQuorumsAtBlock mocks base method. -func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsAtBlock(arg0 *bind.CallOpts, arg1 []byte, arg2 uint32) ([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator, error) { +func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsAtBlock(arg0 *bind.CallOpts, arg1 []byte, arg2 uint32) ([][]contractOperatorStateRetriever.OperatorStateRetrieverOperator, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetOperatorsStakeInQuorumsAtBlock", arg0, arg1, arg2) - ret0, _ := ret[0].([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator) + ret0, _ := ret[0].([][]contractOperatorStateRetriever.OperatorStateRetrieverOperator) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -101,12 +133,27 @@ func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorsStakeInQuorumsAtBlock(a return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorsStakeInQuorumsAtBlock", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetOperatorsStakeInQuorumsAtBlock), arg0, arg1, arg2) } +// GetOperatorsStakeInQuorumsAtCurrentBlock mocks base method. +func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsAtCurrentBlock(arg0 *bind.CallOpts, arg1 []byte) ([][]contractOperatorStateRetriever.OperatorStateRetrieverOperator, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOperatorsStakeInQuorumsAtCurrentBlock", arg0, arg1) + ret0, _ := ret[0].([][]contractOperatorStateRetriever.OperatorStateRetrieverOperator) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOperatorsStakeInQuorumsAtCurrentBlock indicates an expected call of GetOperatorsStakeInQuorumsAtCurrentBlock. +func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorsStakeInQuorumsAtCurrentBlock(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorsStakeInQuorumsAtCurrentBlock", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetOperatorsStakeInQuorumsAtCurrentBlock), arg0, arg1) +} + // GetOperatorsStakeInQuorumsOfOperatorAtBlock mocks base method. -func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsOfOperatorAtBlock(arg0 *bind.CallOpts, arg1 [32]byte, arg2 uint32) ([]byte, [][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator, error) { +func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsOfOperatorAtBlock(arg0 *bind.CallOpts, arg1 [32]byte, arg2 uint32) ([]byte, [][]contractOperatorStateRetriever.OperatorStateRetrieverOperator, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetOperatorsStakeInQuorumsOfOperatorAtBlock", arg0, arg1, arg2) ret0, _ := ret[0].([]byte) - ret1, _ := ret[1].([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator) + ret1, _ := ret[1].([][]contractOperatorStateRetriever.OperatorStateRetrieverOperator) ret2, _ := ret[2].(error) return ret0, ret1, ret2 } @@ -118,11 +165,11 @@ func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorsStakeInQuorumsOfOperato } // GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock mocks base method. -func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock(arg0 *bind.CallOpts, arg1 [32]byte) ([]byte, [][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator, error) { +func (m *MockAvsRegistryReader) GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock(arg0 *bind.CallOpts, arg1 [32]byte) ([]byte, [][]contractOperatorStateRetriever.OperatorStateRetrieverOperator, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock", arg0, arg1) ret0, _ := ret[0].([]byte) - ret1, _ := ret[1].([][]contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverOperator) + ret1, _ := ret[1].([][]contractOperatorStateRetriever.OperatorStateRetrieverOperator) ret2, _ := ret[2].(error) return ret0, ret1, ret2 } @@ -133,6 +180,21 @@ func (mr *MockAvsRegistryReaderMockRecorder) GetOperatorsStakeInQuorumsOfOperato return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock), arg0, arg1) } +// GetQuorumCount mocks base method. +func (m *MockAvsRegistryReader) GetQuorumCount(arg0 *bind.CallOpts) (byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetQuorumCount", arg0) + ret0, _ := ret[0].(byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetQuorumCount indicates an expected call of GetQuorumCount. +func (mr *MockAvsRegistryReaderMockRecorder) GetQuorumCount(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetQuorumCount", reflect.TypeOf((*MockAvsRegistryReader)(nil).GetQuorumCount), arg0) +} + // IsOperatorRegistered mocks base method. func (m *MockAvsRegistryReader) IsOperatorRegistered(arg0 *bind.CallOpts, arg1 common.Address) (bool, error) { m.ctrl.T.Helper() @@ -147,3 +209,19 @@ func (mr *MockAvsRegistryReaderMockRecorder) IsOperatorRegistered(arg0, arg1 any mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsOperatorRegistered", reflect.TypeOf((*MockAvsRegistryReader)(nil).IsOperatorRegistered), arg0, arg1) } + +// QueryExistingRegisteredOperatorPubKeys mocks base method. +func (m *MockAvsRegistryReader) QueryExistingRegisteredOperatorPubKeys(arg0 context.Context, arg1, arg2 *big.Int) ([]common.Address, []types.OperatorPubkeys, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryExistingRegisteredOperatorPubKeys", arg0, arg1, arg2) + ret0, _ := ret[0].([]common.Address) + ret1, _ := ret[1].([]types.OperatorPubkeys) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// QueryExistingRegisteredOperatorPubKeys indicates an expected call of QueryExistingRegisteredOperatorPubKeys. +func (mr *MockAvsRegistryReaderMockRecorder) QueryExistingRegisteredOperatorPubKeys(arg0, arg1, arg2 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryExistingRegisteredOperatorPubKeys", reflect.TypeOf((*MockAvsRegistryReader)(nil).QueryExistingRegisteredOperatorPubKeys), arg0, arg1, arg2) +} diff --git a/chainio/mocks/avsRegistryContractsSubscriber.go b/chainio/mocks/avsRegistryContractsSubscriber.go new file mode 100644 index 00000000..d1098925 --- /dev/null +++ b/chainio/mocks/avsRegistryContractsSubscriber.go @@ -0,0 +1,56 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry (interfaces: AvsRegistrySubscriber) +// +// Generated by this command: +// +// mockgen -destination=./mocks/avsRegistryContractsSubscriber.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry AvsRegistrySubscriber +// +// Package mocks is a generated GoMock package. +package mocks + +import ( + reflect "reflect" + + contractBLSApkRegistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSApkRegistry" + event "github.com/ethereum/go-ethereum/event" + gomock "go.uber.org/mock/gomock" +) + +// MockAvsRegistrySubscriber is a mock of AvsRegistrySubscriber interface. +type MockAvsRegistrySubscriber struct { + ctrl *gomock.Controller + recorder *MockAvsRegistrySubscriberMockRecorder +} + +// MockAvsRegistrySubscriberMockRecorder is the mock recorder for MockAvsRegistrySubscriber. +type MockAvsRegistrySubscriberMockRecorder struct { + mock *MockAvsRegistrySubscriber +} + +// NewMockAvsRegistrySubscriber creates a new mock instance. +func NewMockAvsRegistrySubscriber(ctrl *gomock.Controller) *MockAvsRegistrySubscriber { + mock := &MockAvsRegistrySubscriber{ctrl: ctrl} + mock.recorder = &MockAvsRegistrySubscriberMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAvsRegistrySubscriber) EXPECT() *MockAvsRegistrySubscriberMockRecorder { + return m.recorder +} + +// SubscribeToNewPubkeyRegistrations mocks base method. +func (m *MockAvsRegistrySubscriber) SubscribeToNewPubkeyRegistrations() (chan *contractBLSApkRegistry.ContractBLSApkRegistryNewPubkeyRegistration, event.Subscription, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SubscribeToNewPubkeyRegistrations") + ret0, _ := ret[0].(chan *contractBLSApkRegistry.ContractBLSApkRegistryNewPubkeyRegistration) + ret1, _ := ret[1].(event.Subscription) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// SubscribeToNewPubkeyRegistrations indicates an expected call of SubscribeToNewPubkeyRegistrations. +func (mr *MockAvsRegistrySubscriberMockRecorder) SubscribeToNewPubkeyRegistrations() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SubscribeToNewPubkeyRegistrations", reflect.TypeOf((*MockAvsRegistrySubscriber)(nil).SubscribeToNewPubkeyRegistrations)) +} diff --git a/chainio/mocks/avsRegistryContractsWriter.go b/chainio/mocks/avsRegistryContractsWriter.go index aebf364b..a5197598 100644 --- a/chainio/mocks/avsRegistryContractsWriter.go +++ b/chainio/mocks/avsRegistryContractsWriter.go @@ -10,9 +10,12 @@ package mocks import ( context "context" + ecdsa "crypto/ecdsa" + big "math/big" reflect "reflect" - contractBLSRegistryCoordinatorWithIndices "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSRegistryCoordinatorWithIndices" + contractRegistryCoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator" + bls "github.com/Layr-Labs/eigensdk-go/crypto/bls" common "github.com/ethereum/go-ethereum/common" types "github.com/ethereum/go-ethereum/core/types" gomock "go.uber.org/mock/gomock" @@ -42,7 +45,7 @@ func (m *MockAvsRegistryWriter) EXPECT() *MockAvsRegistryWriterMockRecorder { } // DeregisterOperator mocks base method. -func (m *MockAvsRegistryWriter) DeregisterOperator(arg0 context.Context, arg1 []byte, arg2 contractBLSRegistryCoordinatorWithIndices.BN254G1Point) (*types.Receipt, error) { +func (m *MockAvsRegistryWriter) DeregisterOperator(arg0 context.Context, arg1 []byte, arg2 contractRegistryCoordinator.BN254G1Point) (*types.Receipt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DeregisterOperator", arg0, arg1, arg2) ret0, _ := ret[0].(*types.Receipt) @@ -57,31 +60,46 @@ func (mr *MockAvsRegistryWriterMockRecorder) DeregisterOperator(arg0, arg1, arg2 } // RegisterOperatorWithAVSRegistryCoordinator mocks base method. -func (m *MockAvsRegistryWriter) RegisterOperatorWithAVSRegistryCoordinator(arg0 context.Context, arg1 []byte, arg2 contractBLSRegistryCoordinatorWithIndices.BN254G1Point, arg3 string) (*types.Receipt, error) { +func (m *MockAvsRegistryWriter) RegisterOperatorWithAVSRegistryCoordinator(arg0 context.Context, arg1 *ecdsa.PrivateKey, arg2 [32]byte, arg3 *big.Int, arg4 *bls.KeyPair, arg5 []byte, arg6 string) (*types.Receipt, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RegisterOperatorWithAVSRegistryCoordinator", arg0, arg1, arg2, arg3) + ret := m.ctrl.Call(m, "RegisterOperatorWithAVSRegistryCoordinator", arg0, arg1, arg2, arg3, arg4, arg5, arg6) ret0, _ := ret[0].(*types.Receipt) ret1, _ := ret[1].(error) return ret0, ret1 } // RegisterOperatorWithAVSRegistryCoordinator indicates an expected call of RegisterOperatorWithAVSRegistryCoordinator. -func (mr *MockAvsRegistryWriterMockRecorder) RegisterOperatorWithAVSRegistryCoordinator(arg0, arg1, arg2, arg3 any) *gomock.Call { +func (mr *MockAvsRegistryWriterMockRecorder) RegisterOperatorWithAVSRegistryCoordinator(arg0, arg1, arg2, arg3, arg4, arg5, arg6 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterOperatorWithAVSRegistryCoordinator", reflect.TypeOf((*MockAvsRegistryWriter)(nil).RegisterOperatorWithAVSRegistryCoordinator), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterOperatorWithAVSRegistryCoordinator", reflect.TypeOf((*MockAvsRegistryWriter)(nil).RegisterOperatorWithAVSRegistryCoordinator), arg0, arg1, arg2, arg3, arg4, arg5, arg6) } -// UpdateStakes mocks base method. -func (m *MockAvsRegistryWriter) UpdateStakes(arg0 context.Context, arg1 []common.Address) (*types.Receipt, error) { +// UpdateStakesOfEntireOperatorSetForQuorums mocks base method. +func (m *MockAvsRegistryWriter) UpdateStakesOfEntireOperatorSetForQuorums(arg0 context.Context, arg1 [][]common.Address, arg2 []byte) (*types.Receipt, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateStakes", arg0, arg1) + ret := m.ctrl.Call(m, "UpdateStakesOfEntireOperatorSetForQuorums", arg0, arg1, arg2) ret0, _ := ret[0].(*types.Receipt) ret1, _ := ret[1].(error) return ret0, ret1 } -// UpdateStakes indicates an expected call of UpdateStakes. -func (mr *MockAvsRegistryWriterMockRecorder) UpdateStakes(arg0, arg1 any) *gomock.Call { +// UpdateStakesOfEntireOperatorSetForQuorums indicates an expected call of UpdateStakesOfEntireOperatorSetForQuorums. +func (mr *MockAvsRegistryWriterMockRecorder) UpdateStakesOfEntireOperatorSetForQuorums(arg0, arg1, arg2 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateStakes", reflect.TypeOf((*MockAvsRegistryWriter)(nil).UpdateStakes), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateStakesOfEntireOperatorSetForQuorums", reflect.TypeOf((*MockAvsRegistryWriter)(nil).UpdateStakesOfEntireOperatorSetForQuorums), arg0, arg1, arg2) +} + +// UpdateStakesOfOperatorSubsetForAllQuorums mocks base method. +func (m *MockAvsRegistryWriter) UpdateStakesOfOperatorSubsetForAllQuorums(arg0 context.Context, arg1 []common.Address) (*types.Receipt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateStakesOfOperatorSubsetForAllQuorums", arg0, arg1) + ret0, _ := ret[0].(*types.Receipt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateStakesOfOperatorSubsetForAllQuorums indicates an expected call of UpdateStakesOfOperatorSubsetForAllQuorums. +func (mr *MockAvsRegistryWriterMockRecorder) UpdateStakesOfOperatorSubsetForAllQuorums(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateStakesOfOperatorSubsetForAllQuorums", reflect.TypeOf((*MockAvsRegistryWriter)(nil).UpdateStakesOfOperatorSubsetForAllQuorums), arg0, arg1) } diff --git a/chainio/mocks/elContractsReader.go b/chainio/mocks/elContractsReader.go index a9a86496..b8a52690 100644 --- a/chainio/mocks/elContractsReader.go +++ b/chainio/mocks/elContractsReader.go @@ -9,7 +9,6 @@ package mocks import ( - context "context" big "math/big" reflect "reflect" @@ -44,19 +43,19 @@ func (m *MockELReader) EXPECT() *MockELReaderMockRecorder { return m.recorder } -// GetOperatorAddressFromPubkeyHash mocks base method. -func (m *MockELReader) GetOperatorAddressFromPubkeyHash(arg0 *bind.CallOpts, arg1 [32]byte) (common.Address, error) { +// CalculateDelegationApprovalDigestHash mocks base method. +func (m *MockELReader) CalculateDelegationApprovalDigestHash(arg0 *bind.CallOpts, arg1, arg2 common.Address, arg3 [32]byte, arg4 *big.Int) ([32]byte, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorAddressFromPubkeyHash", arg0, arg1) - ret0, _ := ret[0].(common.Address) + ret := m.ctrl.Call(m, "CalculateDelegationApprovalDigestHash", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].([32]byte) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetOperatorAddressFromPubkeyHash indicates an expected call of GetOperatorAddressFromPubkeyHash. -func (mr *MockELReaderMockRecorder) GetOperatorAddressFromPubkeyHash(arg0, arg1 any) *gomock.Call { +// CalculateDelegationApprovalDigestHash indicates an expected call of CalculateDelegationApprovalDigestHash. +func (mr *MockELReaderMockRecorder) CalculateDelegationApprovalDigestHash(arg0, arg1, arg2, arg3, arg4 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorAddressFromPubkeyHash", reflect.TypeOf((*MockELReader)(nil).GetOperatorAddressFromPubkeyHash), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalculateDelegationApprovalDigestHash", reflect.TypeOf((*MockELReader)(nil).CalculateDelegationApprovalDigestHash), arg0, arg1, arg2, arg3, arg4) } // GetOperatorDetails mocks base method. @@ -74,21 +73,6 @@ func (mr *MockELReaderMockRecorder) GetOperatorDetails(arg0, arg1 any) *gomock.C return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorDetails", reflect.TypeOf((*MockELReader)(nil).GetOperatorDetails), arg0, arg1) } -// GetOperatorPubkeyHash mocks base method. -func (m *MockELReader) GetOperatorPubkeyHash(arg0 *bind.CallOpts, arg1 types.Operator) ([32]byte, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorPubkeyHash", arg0, arg1) - ret0, _ := ret[0].([32]byte) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOperatorPubkeyHash indicates an expected call of GetOperatorPubkeyHash. -func (mr *MockELReaderMockRecorder) GetOperatorPubkeyHash(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorPubkeyHash", reflect.TypeOf((*MockELReader)(nil).GetOperatorPubkeyHash), arg0, arg1) -} - // GetOperatorSharesInStrategy mocks base method. func (m *MockELReader) GetOperatorSharesInStrategy(arg0 *bind.CallOpts, arg1, arg2 common.Address) (*big.Int, error) { m.ctrl.T.Helper() @@ -167,22 +151,6 @@ func (mr *MockELReaderMockRecorder) OperatorIsFrozen(arg0, arg1 any) *gomock.Cal return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OperatorIsFrozen", reflect.TypeOf((*MockELReader)(nil).OperatorIsFrozen), arg0, arg1) } -// QueryExistingRegisteredOperatorPubKeys mocks base method. -func (m *MockELReader) QueryExistingRegisteredOperatorPubKeys(arg0 context.Context, arg1, arg2 *big.Int) ([]common.Address, []types.OperatorPubkeys, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "QueryExistingRegisteredOperatorPubKeys", arg0, arg1, arg2) - ret0, _ := ret[0].([]common.Address) - ret1, _ := ret[1].([]types.OperatorPubkeys) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// QueryExistingRegisteredOperatorPubKeys indicates an expected call of QueryExistingRegisteredOperatorPubKeys. -func (mr *MockELReaderMockRecorder) QueryExistingRegisteredOperatorPubKeys(arg0, arg1, arg2 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryExistingRegisteredOperatorPubKeys", reflect.TypeOf((*MockELReader)(nil).QueryExistingRegisteredOperatorPubKeys), arg0, arg1, arg2) -} - // ServiceManagerCanSlashOperatorUntilBlock mocks base method. func (m *MockELReader) ServiceManagerCanSlashOperatorUntilBlock(arg0 *bind.CallOpts, arg1, arg2 common.Address) (uint32, error) { m.ctrl.T.Helper() diff --git a/chainio/mocks/elContractsSubscriber.go b/chainio/mocks/elContractsSubscriber.go deleted file mode 100644 index cb9ddf77..00000000 --- a/chainio/mocks/elContractsSubscriber.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts (interfaces: ELSubscriber) -// -// Generated by this command: -// -// mockgen -destination=./mocks/elContractsSubscriber.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELSubscriber -// -// Package mocks is a generated GoMock package. -package mocks - -import ( - reflect "reflect" - - contractBLSPublicKeyCompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" - event "github.com/ethereum/go-ethereum/event" - gomock "go.uber.org/mock/gomock" -) - -// MockELSubscriber is a mock of ELSubscriber interface. -type MockELSubscriber struct { - ctrl *gomock.Controller - recorder *MockELSubscriberMockRecorder -} - -// MockELSubscriberMockRecorder is the mock recorder for MockELSubscriber. -type MockELSubscriberMockRecorder struct { - mock *MockELSubscriber -} - -// NewMockELSubscriber creates a new mock instance. -func NewMockELSubscriber(ctrl *gomock.Controller) *MockELSubscriber { - mock := &MockELSubscriber{ctrl: ctrl} - mock.recorder = &MockELSubscriberMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockELSubscriber) EXPECT() *MockELSubscriberMockRecorder { - return m.recorder -} - -// SubscribeToNewPubkeyRegistrations mocks base method. -func (m *MockELSubscriber) SubscribeToNewPubkeyRegistrations() (chan *contractBLSPublicKeyCompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration, event.Subscription, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SubscribeToNewPubkeyRegistrations") - ret0, _ := ret[0].(chan *contractBLSPublicKeyCompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration) - ret1, _ := ret[1].(event.Subscription) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// SubscribeToNewPubkeyRegistrations indicates an expected call of SubscribeToNewPubkeyRegistrations. -func (mr *MockELSubscriberMockRecorder) SubscribeToNewPubkeyRegistrations() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SubscribeToNewPubkeyRegistrations", reflect.TypeOf((*MockELSubscriber)(nil).SubscribeToNewPubkeyRegistrations)) -} diff --git a/chainio/mocks/elContractsWriter.go b/chainio/mocks/elContractsWriter.go index 269bdac3..0d20e29e 100644 --- a/chainio/mocks/elContractsWriter.go +++ b/chainio/mocks/elContractsWriter.go @@ -13,7 +13,6 @@ import ( big "math/big" reflect "reflect" - bls "github.com/Layr-Labs/eigensdk-go/crypto/bls" types "github.com/Layr-Labs/eigensdk-go/types" common "github.com/ethereum/go-ethereum/common" types0 "github.com/ethereum/go-ethereum/core/types" @@ -58,21 +57,6 @@ func (mr *MockELWriterMockRecorder) DepositERC20IntoStrategy(arg0, arg1, arg2 an return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DepositERC20IntoStrategy", reflect.TypeOf((*MockELWriter)(nil).DepositERC20IntoStrategy), arg0, arg1, arg2) } -// OptOperatorIntoSlashing mocks base method. -func (m *MockELWriter) OptOperatorIntoSlashing(arg0 context.Context, arg1 common.Address) (*types0.Receipt, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "OptOperatorIntoSlashing", arg0, arg1) - ret0, _ := ret[0].(*types0.Receipt) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// OptOperatorIntoSlashing indicates an expected call of OptOperatorIntoSlashing. -func (mr *MockELWriterMockRecorder) OptOperatorIntoSlashing(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OptOperatorIntoSlashing", reflect.TypeOf((*MockELWriter)(nil).OptOperatorIntoSlashing), arg0, arg1) -} - // RegisterAsOperator mocks base method. func (m *MockELWriter) RegisterAsOperator(arg0 context.Context, arg1 types.Operator) (*types0.Receipt, error) { m.ctrl.T.Helper() @@ -88,21 +72,6 @@ func (mr *MockELWriterMockRecorder) RegisterAsOperator(arg0, arg1 any) *gomock.C return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterAsOperator", reflect.TypeOf((*MockELWriter)(nil).RegisterAsOperator), arg0, arg1) } -// RegisterBLSPublicKey mocks base method. -func (m *MockELWriter) RegisterBLSPublicKey(arg0 context.Context, arg1 *bls.KeyPair, arg2 types.Operator) (*types0.Receipt, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RegisterBLSPublicKey", arg0, arg1, arg2) - ret0, _ := ret[0].(*types0.Receipt) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// RegisterBLSPublicKey indicates an expected call of RegisterBLSPublicKey. -func (mr *MockELWriterMockRecorder) RegisterBLSPublicKey(arg0, arg1, arg2 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterBLSPublicKey", reflect.TypeOf((*MockELWriter)(nil).RegisterBLSPublicKey), arg0, arg1, arg2) -} - // UpdateOperatorDetails mocks base method. func (m *MockELWriter) UpdateOperatorDetails(arg0 context.Context, arg1 types.Operator) (*types0.Receipt, error) { m.ctrl.T.Helper() diff --git a/chainio/utils/bindings.go b/chainio/utils/bindings.go index 39b54d14..a8b4c015 100644 --- a/chainio/utils/bindings.go +++ b/chainio/utils/bindings.go @@ -8,12 +8,12 @@ import ( gethcommon "github.com/ethereum/go-ethereum/common" "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" - blsoperatorstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" - blspubkeyregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPubkeyRegistry" - blspubkeycompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" - blsregistrycoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSRegistryCoordinatorWithIndices" + blsapkregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSApkRegistry" delegationmanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/DelegationManager" - slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/Slasher" + slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/ISlasher" + opstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" + regcoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator" + servicemanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/ServiceManagerBase" stakeregistry "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StakeRegistry" strategymanager "github.com/Layr-Labs/eigensdk-go/contracts/bindings/StrategyManager" ) @@ -21,68 +21,54 @@ import ( // Unclear to me why geth bindings don't store and expose the contract address... // so we also store them here in case the different constructors that use this struct need them type EigenlayerContractBindings struct { - SlasherAddr gethcommon.Address - StrategyManagerAddr gethcommon.Address - DelegationManagerAddr gethcommon.Address - BlspubkeyCompendiumAddr gethcommon.Address - Slasher *slasher.ContractSlasher - DelegationManager *delegationmanager.ContractDelegationManager - StrategyManager *strategymanager.ContractStrategyManager - // TODO: should this really be here? or moved to avs bindings - BlsPubkeyCompendium *blspubkeycompendium.ContractBLSPublicKeyCompendium + SlasherAddr gethcommon.Address + StrategyManagerAddr gethcommon.Address + DelegationManagerAddr gethcommon.Address + Slasher *slasher.ContractISlasher + DelegationManager *delegationmanager.ContractDelegationManager + StrategyManager *strategymanager.ContractStrategyManager } func NewEigenlayerContractBindings( - slasherAddr gethcommon.Address, - blsPubKeyCompendiumAddr gethcommon.Address, + delegationManagerAddr gethcommon.Address, ethclient eth.EthClient, logger logging.Logger, ) (*EigenlayerContractBindings, error) { - contractSlasher, err := slasher.NewContractSlasher(slasherAddr, ethclient) + contractDelegationManager, err := delegationmanager.NewContractDelegationManager(delegationManagerAddr, ethclient) if err != nil { - logger.Error("Failed to fetch Slasher contract", "err", err) + logger.Error("Failed to fetch DelegationManager contract", "err", err) return nil, err } - strategyManagerAddr, err := contractSlasher.StrategyManager(&bind.CallOpts{}) + slasherAddr, err := contractDelegationManager.Slasher(&bind.CallOpts{}) if err != nil { - logger.Error("Failed to fetch StrategyManager address", "err", err) - return nil, err - } - contractStrategyManager, err := strategymanager.NewContractStrategyManager(strategyManagerAddr, ethclient) - if err != nil { - logger.Error("Failed to fetch StrategyManager contract", "err", err) + logger.Error("Failed to fetch Slasher address", "err", err) return nil, err } - delegationManagerAddr, err := contractSlasher.Delegation(&bind.CallOpts{}) + contractSlasher, err := slasher.NewContractISlasher(slasherAddr, ethclient) if err != nil { - logger.Error("Failed to fetch DelegationManager address", "err", err) + logger.Error("Failed to fetch Slasher contract", "err", err) return nil, err } - contractDelegationManager, err := delegationmanager.NewContractDelegationManager(delegationManagerAddr, ethclient) + + strategyManagerAddr, err := contractDelegationManager.StrategyManager(&bind.CallOpts{}) if err != nil { - logger.Error("Failed to fetch DelegationManager contract", "err", err) + logger.Error("Failed to fetch StrategyManager address", "err", err) return nil, err } - - contractBlsCompendium, err := blspubkeycompendium.NewContractBLSPublicKeyCompendium( - blsPubKeyCompendiumAddr, - ethclient, - ) + contractStrategyManager, err := strategymanager.NewContractStrategyManager(strategyManagerAddr, ethclient) if err != nil { - logger.Error("Failed to fetch BLSPublicKeyCompendium contract", "err", err) + logger.Error("Failed to fetch StrategyManager contract", "err", err) return nil, err } return &EigenlayerContractBindings{ - SlasherAddr: slasherAddr, - StrategyManagerAddr: strategyManagerAddr, - DelegationManagerAddr: delegationManagerAddr, - BlspubkeyCompendiumAddr: blsPubKeyCompendiumAddr, - Slasher: contractSlasher, - StrategyManager: contractStrategyManager, - DelegationManager: contractDelegationManager, - BlsPubkeyCompendium: contractBlsCompendium, + SlasherAddr: slasherAddr, + StrategyManagerAddr: strategyManagerAddr, + DelegationManagerAddr: delegationManagerAddr, + Slasher: contractSlasher, + StrategyManager: contractStrategyManager, + DelegationManager: contractDelegationManager, }, nil } @@ -90,27 +76,27 @@ func NewEigenlayerContractBindings( // so we also store them here in case the different constructors that use this struct need them type AvsRegistryContractBindings struct { // contract addresses - RegistryCoordinatorAddr gethcommon.Address - StakeRegistryAddr gethcommon.Address - BlsPubkeyRegistryAddr gethcommon.Address - BlsPubkeyCompendiumAddr gethcommon.Address - OperatorStateRetriever gethcommon.Address + ServiceManagerAddr gethcommon.Address + RegistryCoordinatorAddr gethcommon.Address + StakeRegistryAddr gethcommon.Address + BlsApkRegistryAddr gethcommon.Address + OperatorStateRetrieverAddr gethcommon.Address // contract bindings - RegistryCoordinator *blsregistrycoordinator.ContractBLSRegistryCoordinatorWithIndices - StakeRegistry *stakeregistry.ContractStakeRegistry - BlsPubkeyRegistry *blspubkeyregistry.ContractBLSPubkeyRegistry - BlsPubkeyCompendium *blspubkeycompendium.ContractBLSPublicKeyCompendium - BlsOperatorStateRetriever *blsoperatorstateretriever.ContractBLSOperatorStateRetriever + ServiceManager *servicemanager.ContractServiceManagerBase + RegistryCoordinator *regcoordinator.ContractRegistryCoordinator + StakeRegistry *stakeregistry.ContractStakeRegistry + BlsApkRegistry *blsapkregistry.ContractBLSApkRegistry + OperatorStateRetriever *opstateretriever.ContractOperatorStateRetriever } func NewAVSRegistryContractBindings( - blsRegistryCoordinatorAddr gethcommon.Address, - blsOperatorStateRetrieverAddr gethcommon.Address, + registryCoordinatorAddr gethcommon.Address, + operatorStateRetrieverAddr gethcommon.Address, ethclient eth.EthClient, logger logging.Logger, ) (*AvsRegistryContractBindings, error) { - contractBlsRegistryCoordinator, err := blsregistrycoordinator.NewContractBLSRegistryCoordinatorWithIndices( - blsRegistryCoordinatorAddr, + contractBlsRegistryCoordinator, err := regcoordinator.NewContractRegistryCoordinator( + registryCoordinatorAddr, ethclient, ) if err != nil { @@ -118,50 +104,50 @@ func NewAVSRegistryContractBindings( return nil, err } - stakeregistryAddr, err := contractBlsRegistryCoordinator.StakeRegistry(&bind.CallOpts{}) + serviceManagerAddr, err := contractBlsRegistryCoordinator.ServiceManager(&bind.CallOpts{}) if err != nil { - logger.Error("Failed to fetch StakeRegistry address", "err", err) + logger.Error("Failed to fetch ServiceManager address", "err", err) return nil, err } - contractStakeRegistry, err := stakeregistry.NewContractStakeRegistry( - stakeregistryAddr, + contractServiceManager, err := servicemanager.NewContractServiceManagerBase( + serviceManagerAddr, ethclient, ) if err != nil { - logger.Error("Failed to fetch StakeRegistry contract", "err", err) + logger.Error("Failed to fetch ServiceManager contract", "err", err) return nil, err } - blsPubkeyRegistryAddr, err := contractBlsRegistryCoordinator.BlsPubkeyRegistry(&bind.CallOpts{}) + stakeregistryAddr, err := contractBlsRegistryCoordinator.StakeRegistry(&bind.CallOpts{}) if err != nil { - logger.Error("Failed to fetch BLSPubkeyRegistry address", "err", err) + logger.Error("Failed to fetch StakeRegistry address", "err", err) return nil, err } - contractBlsPubkeyRegistry, err := blspubkeyregistry.NewContractBLSPubkeyRegistry( - blsPubkeyRegistryAddr, + contractStakeRegistry, err := stakeregistry.NewContractStakeRegistry( + stakeregistryAddr, ethclient, ) if err != nil { - logger.Error("Failed to fetch BLSPubkeyRegistry contract", "err", err) + logger.Error("Failed to fetch StakeRegistry contract", "err", err) return nil, err } - blsPubkeyCompendiumAddr, err := contractBlsPubkeyRegistry.PubkeyCompendium(&bind.CallOpts{}) + blsApkRegistryAddr, err := contractBlsRegistryCoordinator.BlsApkRegistry(&bind.CallOpts{}) if err != nil { - logger.Error("Failed to fetch BLSPublicKeyCompendium address", "err", err) + logger.Error("Failed to fetch BLSPubkeyRegistry address", "err", err) return nil, err } - contractBlsPubkeyCompendium, err := blspubkeycompendium.NewContractBLSPublicKeyCompendium( - blsPubkeyCompendiumAddr, + contractBlsApkRegistry, err := blsapkregistry.NewContractBLSApkRegistry( + blsApkRegistryAddr, ethclient, ) if err != nil { - logger.Error("Failed to fetch BLSPublicKeyCompendium contract", "err", err) + logger.Error("Failed to fetch BLSPubkeyRegistry contract", "err", err) return nil, err } - contractBlsOperatorStateRetriever, err := blsoperatorstateretriever.NewContractBLSOperatorStateRetriever( - blsOperatorStateRetrieverAddr, + contractOperatorStateRetriever, err := opstateretriever.NewContractOperatorStateRetriever( + operatorStateRetrieverAddr, ethclient, ) if err != nil { @@ -170,15 +156,15 @@ func NewAVSRegistryContractBindings( } return &AvsRegistryContractBindings{ - RegistryCoordinatorAddr: blsRegistryCoordinatorAddr, - StakeRegistryAddr: stakeregistryAddr, - BlsPubkeyRegistryAddr: blsPubkeyRegistryAddr, - BlsPubkeyCompendiumAddr: blsPubkeyCompendiumAddr, - OperatorStateRetriever: blsOperatorStateRetrieverAddr, - RegistryCoordinator: contractBlsRegistryCoordinator, - StakeRegistry: contractStakeRegistry, - BlsPubkeyRegistry: contractBlsPubkeyRegistry, - BlsPubkeyCompendium: contractBlsPubkeyCompendium, - BlsOperatorStateRetriever: contractBlsOperatorStateRetriever, + ServiceManagerAddr: serviceManagerAddr, + RegistryCoordinatorAddr: registryCoordinatorAddr, + StakeRegistryAddr: stakeregistryAddr, + BlsApkRegistryAddr: blsApkRegistryAddr, + OperatorStateRetrieverAddr: operatorStateRetrieverAddr, + ServiceManager: contractServiceManager, + RegistryCoordinator: contractBlsRegistryCoordinator, + StakeRegistry: contractStakeRegistry, + BlsApkRegistry: contractBlsApkRegistry, + OperatorStateRetriever: contractOperatorStateRetriever, }, nil } diff --git a/chainio/utils/utils.go b/chainio/utils/utils.go index 029c1437..b8d53c24 100644 --- a/chainio/utils/utils.go +++ b/chainio/utils/utils.go @@ -3,25 +3,30 @@ package utils import ( "math/big" - blspubkeycompendium "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" + regcoord "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator" "github.com/Layr-Labs/eigensdk-go/crypto/bls" + "github.com/consensys/gnark-crypto/ecc/bn254" ) // BINDING UTILS - conversion from contract structs to golang structs +func ConvertBn254GethToGnark(input regcoord.BN254G1Point) *bn254.G1Affine { + return bls.NewG1Point(input.X, input.Y).G1Affine +} + // BN254.sol is a library, so bindings for G1 Points and G2 Points are only generated // in every contract that imports that library. Thus the output here will need to be // type casted if G1Point is needed to interface with another contract (eg: BLSPublicKeyCompendium.sol) -func ConvertToBN254G1Point(input *bls.G1Point) blspubkeycompendium.BN254G1Point { - output := blspubkeycompendium.BN254G1Point{ +func ConvertToBN254G1Point(input *bls.G1Point) regcoord.BN254G1Point { + output := regcoord.BN254G1Point{ X: input.X.BigInt(big.NewInt(0)), Y: input.Y.BigInt(big.NewInt(0)), } return output } -func ConvertToBN254G2Point(input *bls.G2Point) blspubkeycompendium.BN254G2Point { - output := blspubkeycompendium.BN254G2Point{ +func ConvertToBN254G2Point(input *bls.G2Point) regcoord.BN254G2Point { + output := regcoord.BN254G2Point{ X: [2]*big.Int{input.X.A1.BigInt(big.NewInt(0)), input.X.A0.BigInt(big.NewInt(0))}, Y: [2]*big.Int{input.Y.A1.BigInt(big.NewInt(0)), input.Y.A0.BigInt(big.NewInt(0))}, } diff --git a/cmd/egnaddrs/main.go b/cmd/egnaddrs/main.go index bb99847b..aeb3dece 100644 --- a/cmd/egnaddrs/main.go +++ b/cmd/egnaddrs/main.go @@ -13,10 +13,9 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/urfave/cli/v2" - blspubkeyreg "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPubkeyRegistry" - blsregistrycoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSRegistryCoordinatorWithIndices" + dm "github.com/Layr-Labs/eigensdk-go/contracts/bindings/DelegationManager" iblssigchecker "github.com/Layr-Labs/eigensdk-go/contracts/bindings/IBLSSignatureChecker" - slasher "github.com/Layr-Labs/eigensdk-go/contracts/bindings/Slasher" + regcoord "github.com/Layr-Labs/eigensdk-go/contracts/bindings/RegistryCoordinator" ) var ( @@ -76,11 +75,11 @@ func printAddrs(c *cli.Context) error { return err } - registryCoordinatorAddr, err := getRegistryCoordinatorAddr(c, client) + registryCoordinatorAddr, serviceManagerAddr, err := getRegCoordAndServiceMngrAddr(c, client) if err != nil { return err } - eigenlayerContractAddrs, err := getEigenlayerContractAddrs(client, registryCoordinatorAddr) + eigenlayerContractAddrs, err := getEigenlayerContractAddrs(client, serviceManagerAddr) if err != nil { return err } @@ -105,12 +104,28 @@ func printAddrs(c *cli.Context) error { return nil } -func getRegistryCoordinatorAddr(c *cli.Context, client *ethclient.Client) (common.Address, error) { +func getRegCoordAndServiceMngrAddr( + c *cli.Context, client *ethclient.Client, +) (regcoordAddr common.Address, servicemanagerAddr common.Address, err error) { + // if registry coordinator addr was passed as argument registryCoordinatorAddrString := c.String(RegistryCoordinatorAddrFlag.Name) if registryCoordinatorAddrString != "" { registryCoordinatorAddr := common.HexToAddress(registryCoordinatorAddrString) - return registryCoordinatorAddr, nil + registryCoordinatorC, err := regcoord.NewContractRegistryCoordinator( + registryCoordinatorAddr, + client, + ) + if err != nil { + return common.Address{}, common.Address{}, err + } + serviceManagerAddr, err := registryCoordinatorC.ServiceManager(&bind.CallOpts{}) + if err != nil { + return common.Address{}, common.Address{}, err + } + return registryCoordinatorAddr, serviceManagerAddr, nil } + + // else service manager addr was passed as argument serviceManagerAddrString := c.String(ServiceManagerAddrFlag.Name) if serviceManagerAddrString != "" { serviceManagerAddr := common.HexToAddress(serviceManagerAddrString) @@ -122,19 +137,22 @@ func getRegistryCoordinatorAddr(c *cli.Context, client *ethclient.Client) (commo // against the BLSPubkeyRegistry). serviceManagerContract, err := iblssigchecker.NewContractIBLSSignatureChecker(serviceManagerAddr, client) if err != nil { - return common.Address{}, err + return common.Address{}, common.Address{}, err } registryCoordinatorAddr, err := serviceManagerContract.RegistryCoordinator(&bind.CallOpts{}) if err != nil { - return common.Address{}, err + return common.Address{}, common.Address{}, err } - return registryCoordinatorAddr, nil + return registryCoordinatorAddr, serviceManagerAddr, nil } - return common.Address{}, errors.New("must provide either --registry-coordinator or --service-manager flag") + // else neither registry coordinator addr nor service manager addr was passed as argument + return common.Address{}, common.Address{}, errors.New( + "must provide either --registry-coordinator or --service-manager flag", + ) } func getAvsContractAddrs(client *ethclient.Client, registryCoordinatorAddr common.Address) (map[string]string, error) { - blsRegistryCoordinatorWithIndicesC, err := blsregistrycoordinator.NewContractBLSRegistryCoordinatorWithIndices( + blsRegistryCoordinatorWithIndicesC, err := regcoord.NewContractRegistryCoordinator( registryCoordinatorAddr, client, ) @@ -149,7 +167,7 @@ func getAvsContractAddrs(client *ethclient.Client, registryCoordinatorAddr commo } // 3 registries - blsPubkeyRegistryAddr, err := blsRegistryCoordinatorWithIndicesC.BlsPubkeyRegistry(&bind.CallOpts{}) + blsPubkeyApkAddr, err := blsRegistryCoordinatorWithIndicesC.BlsApkRegistry(&bind.CallOpts{}) if err != nil { return nil, err } @@ -162,52 +180,41 @@ func getAvsContractAddrs(client *ethclient.Client, registryCoordinatorAddr commo return nil, err } - // pubkey compendium (shared avs contract) - contractBlsPubkeyRegistry, err := blspubkeyreg.NewContractBLSPubkeyRegistry(blsPubkeyRegistryAddr, client) - if err != nil { - return nil, err - } - blsPubKeyCompendiumAddr, err := contractBlsPubkeyRegistry.PubkeyCompendium(&bind.CallOpts{}) - if err != nil { - return nil, err - } - addrsDict := map[string]string{ - "service-manager": serviceManagerAddr.Hex(), - "registry-coordinator": registryCoordinatorAddr.Hex(), - "bls-pubkey-registry": blsPubkeyRegistryAddr.Hex(), - "index-registry": indexRegistryAddr.Hex(), - "stake-registry": stakeRegistryAddr.Hex(), - "bls-pubkey-compendium (shared)": blsPubKeyCompendiumAddr.Hex(), + "service-manager": serviceManagerAddr.Hex(), + "registry-coordinator": registryCoordinatorAddr.Hex(), + "bls-apk-registry": blsPubkeyApkAddr.Hex(), + "index-registry": indexRegistryAddr.Hex(), + "stake-registry": stakeRegistryAddr.Hex(), } return addrsDict, nil } func getEigenlayerContractAddrs( client *ethclient.Client, - registryCoordinatorAddr common.Address, + serviceManagerAddr common.Address, ) (map[string]string, error) { - blsRegistryCoordinatorWithIndicesC, err := blsregistrycoordinator.NewContractBLSRegistryCoordinatorWithIndices( - registryCoordinatorAddr, + serviceManagerC, err := iblssigchecker.NewContractIBLSSignatureChecker( + serviceManagerAddr, client, ) if err != nil { return nil, err } - slasherAddr, err := blsRegistryCoordinatorWithIndicesC.Slasher(&bind.CallOpts{}) + delegationManagerAddr, err := serviceManagerC.Delegation(&bind.CallOpts{}) if err != nil { return nil, err } - slasherC, err := slasher.NewContractSlasher(slasherAddr, client) + delegationManagerC, err := dm.NewContractDelegationManager(delegationManagerAddr, client) if err != nil { return nil, err } - delegationManagerAddr, err := slasherC.Delegation(&bind.CallOpts{}) + slasherAddr, err := delegationManagerC.Slasher(&bind.CallOpts{}) if err != nil { return nil, err } - strategyManagerAddr, err := slasherC.StrategyManager(&bind.CallOpts{}) + strategyManagerAddr, err := delegationManagerC.StrategyManager(&bind.CallOpts{}) if err != nil { return nil, err } diff --git a/cmd/egnaddrs/main_test.go b/cmd/egnaddrs/main_test.go index 0c4abcf8..dc542b44 100644 --- a/cmd/egnaddrs/main_test.go +++ b/cmd/egnaddrs/main_test.go @@ -11,10 +11,11 @@ import ( ) const ( - // TODO: these are currently hardcoded for the contracts deployed in - // test_data/avs-and-eigenlayer-deplyed-anvil-state.json - serviceManagerAddr = "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" - registryCoordinatorAddr = "0x9E545E3C0baAB3E08CdfD552C960A1050f373042" + // just copied this file from an eigencert deployment and hardcoded addrs below + // TODO(samlaf): eventually we should make updating this file automated + anvilStateFileName = "eigenlayer-and-registries-deployed-anvil-state.json" + serviceManagerAddr = "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F" + registryCoordinatorAddr = "0x09635F643e140090A9A8Dcd712eD6285858ceBef" ) func TestEgnAddrsWithServiceManagerFlag(t *testing.T) { @@ -62,7 +63,7 @@ func startAnvilTestContainer() testcontainers.Container { HostPath: filepath.Join( integrationDir, "test_data", - "avs-and-eigenlayer-deployed-anvil-state.json", + anvilStateFileName, ), }, Target: "/root/.anvil/state.json", diff --git a/cmd/egnaddrs/test_data/avs-and-eigenlayer-deployed-anvil-state.json b/cmd/egnaddrs/test_data/avs-and-eigenlayer-deployed-anvil-state.json deleted file mode 100644 index 2748796f..00000000 --- a/cmd/egnaddrs/test_data/avs-and-eigenlayer-deployed-anvil-state.json +++ /dev/null @@ -1 +0,0 @@ -{"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x22bd88888ff5200","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x1e","0x97":"0x0","0x9a":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106102045760003560e01c80639b4e463411610118578063c1de3aef116100a0578063daf12cd41161006f578063daf12cd41461065f578063ea4d3c9b1461067f578063f2fde38b146106b3578063f6848d24146106d3578063fabc1cbc1461070e57600080fd5b8063c1de3aef146105cf578063c2c51c40146105ef578063c3c6b3a91461060f578063d1c64cc91461063f57600080fd5b8063a6a509be116100e7578063a6a509be1461052f578063b134427114610545578063beffbb8914610579578063c052bd6114610599578063c0ccbf10146105b957600080fd5b80639b4e4634146104995780639ba06275146104ac578063a1788484146104e2578063a38406a31461050f57600080fd5b80635ac86ab71161019b57806374cdd7981161016a57806374cdd798146103ea57806384d810621461041e578063886f1195146104335780638da5cb5b146104535780639104c3191461047157600080fd5b80635ac86ab7146103535780635c975abb1461039357806360f4062b146103a8578063715018a6146103d557600080fd5b8063292b7b2b116101d7578063292b7b2b1461029e578063387b1300146102ea57806339b70e381461030a578063595c6a671461033e57600080fd5b80630cf2686d146102095780630e81073c1461022b57806310d67a2f1461025e578063136439dd1461027e575b600080fd5b34801561021557600080fd5b50610229610224366004612371565b61072e565b005b34801561023757600080fd5b5061024b61024636600461239f565b6107ea565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b506102296102793660046123cb565b6109f5565b34801561028a57600080fd5b50610229610299366004612371565b610aa5565b3480156102aa57600080fd5b506102d27f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b6040516001600160a01b039091168152602001610255565b3480156102f657600080fd5b506102296103053660046123e8565b610be4565b34801561031657600080fd5b506102d27f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561034a57600080fd5b50610229610f27565b34801561035f57600080fd5b5061038361036e366004612429565b606654600160ff9092169190911b9081161490565b6040519015158152602001610255565b34801561039f57600080fd5b5060665461024b565b3480156103b457600080fd5b5061024b6103c33660046123cb565b609b6020526000908152604090205481565b3480156103e157600080fd5b50610229610fee565b3480156103f657600080fd5b506102d27f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b34801561042a57600080fd5b50610229611002565b34801561043f57600080fd5b506065546102d2906001600160a01b031681565b34801561045f57600080fd5b506033546001600160a01b03166102d2565b34801561047d57600080fd5b506102d273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102296104a7366004612495565b61108c565b3480156104b857600080fd5b506102d26104c73660046123cb565b6098602052600090815260409020546001600160a01b031681565b3480156104ee57600080fd5b5061024b6104fd3660046123cb565b609c6020526000908152604090205481565b34801561051b57600080fd5b506102d261052a3660046123cb565b611125565b34801561053b57600080fd5b5061024b60995481565b34801561055157600080fd5b506102d27f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b34801561058557600080fd5b5061022961059436600461239f565b6111f7565b3480156105a557600080fd5b506097546102d2906001600160a01b031681565b3480156105c557600080fd5b5061024b609a5481565b3480156105db57600080fd5b506102296105ea3660046123cb565b61148a565b3480156105fb57600080fd5b5061022961060a36600461239f565b61149b565b34801561061b57600080fd5b5061038361062a366004612371565b609d6020526000908152604090205460ff1681565b34801561064b57600080fd5b5061024b61065a366004612509565b61186d565b34801561066b57600080fd5b5061022961067a366004612533565b611978565b34801561068b57600080fd5b506102d27f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b3480156106bf57600080fd5b506102296106ce3660046123cb565b611aab565b3480156106df57600080fd5b506103836106ee3660046123cb565b6001600160a01b0390811660009081526098602052604090205416151590565b34801561071a57600080fd5b50610229610729366004612371565b611b21565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a5919061258e565b6001600160a01b0316336001600160a01b0316146107de5760405162461bcd60e51b81526004016107d5906125ab565b60405180910390fd5b6107e781611c7d565b50565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146108345760405162461bcd60e51b81526004016107d5906125f5565b6001600160a01b0383166108b05760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f206164647265737300000000000060648201526084016107d5565b600082121561091e5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b60648201526084016107d5565b61092c633b9aca0083612669565b1561099f5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e7400000060648201526084016107d5565b6001600160a01b0383166000908152609b6020526040812054906109c38483612693565b6001600160a01b0386166000908152609b6020526040902081905590506109ea8282611cbe565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c919061258e565b6001600160a01b0316336001600160a01b031614610a9c5760405162461bcd60e51b81526004016107d5906125ab565b6107e781611d00565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1191906126d4565b610b2d5760405162461bcd60e51b81526004016107d5906126f6565b60665481811614610ba65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016107d5565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610c2c5760405162461bcd60e51b81526004016107d5906125f5565b6001600160a01b038316610ca65760405162461bcd60e51b815260206004820152604760248201526000805160206131d383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a4016107d5565b6001600160a01b038216610d235760405162461bcd60e51b815260206004820152604a60248201526000805160206131d383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a4016107d5565b6000811215610d925760405162461bcd60e51b815260206004820152604160248201526000805160206131d383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a4016107d5565b610da0633b9aca0082612669565b15610e145760405162461bcd60e51b815260206004820152604a60248201526000805160206131d383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a4016107d5565b6001600160a01b0383166000908152609b602052604081205490811215610eab576000610e408261273e565b905080831115610e74576001600160a01b0385166000908152609b6020526040812055610e6d818461275b565b9250610ea9565b6001600160a01b0385166000908152609b602052604081208054859290610e9c908490612693565b90915550610f2292505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9391906126d4565b610faf5760405162461bcd60e51b81526004016107d5906126f6565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ff6611df7565b6110006000611e51565b565b336000908152609860205260409020546001600160a01b0316156110845760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b60648201526084016107d5565b6107e7611ea3565b336000908152609860205260409020546001600160a01b0316806110b5576110b2611ea3565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906110eb908a908a908a908a908a9060040161279b565b6000604051808303818588803b15801561110457600080fd5b505af1158015611118573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b03808216600090815260986020526040812054909116806109ef576111f0836001600160a01b031660001b60405180610940016040528061090e81526020016128c561090e9139604080516001600160a01b037f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318166020820152808201919091526000606082015260800160408051601f19818403018152908290526111d59291602001612810565b604051602081830303815290604052805190602001206120d7565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9161461123f5760405162461bcd60e51b81526004016107d5906125f5565b6001600160a01b0382166112bb5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20706f60448201527f644f776e65722063616e6e6f74206265207a65726f206164647265737300000060648201526084016107d5565b60008112156113325760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f6172657320616d6f756e74206973206e6567617469766500000000000000000060648201526084016107d5565b611340633b9aca0082612669565b156113b5576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e7460648201526084016107d5565b6001600160a01b0382166000908152609b60205260408120546113d9908390612825565b9050600081121561146a5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a4016107d5565b6001600160a01b039092166000908152609b602052604090209190915550565b611492611df7565b6107e781612133565b6001600160a01b0380831660009081526098602052604090205483911633146115165760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b60648201526084016107d5565b600260c65414156115695760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107d5565b600260c6556001600160a01b0383166116055760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a4016107d5565b611613633b9aca0083612864565b156116ac5760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a4016107d5565b6001600160a01b0383166000908152609b6020526040812054906116d08483612693565b6001600160a01b0386166000908152609b602052604081208290559091506116f88383611cbe565b905080156118605760008112156117c3576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06117578561273e565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156117a657600080fd5b505af11580156117ba573d6000803e3d6000fd5b50505050611860565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b15801561184757600080fd5b505af115801561185b573d6000803e3d6000fd5b505050505b5050600160c65550505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa1580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e89190612878565b9050806109ef5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a4016107d5565b600054610100900460ff16158080156119985750600054600160ff909116105b806119b25750303b1580156119b2575060005460ff166001145b611a155760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107d5565b6000805460ff191660011790558015611a38576000805461ff0019166101001790555b611a4186611c7d565b611a4a85612133565b611a5384611e51565b611a5d838361217d565b8015611aa3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b611ab3611df7565b6001600160a01b038116611b185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d5565b6107e781611e51565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b98919061258e565b6001600160a01b0316336001600160a01b031614611bc85760405162461bcd60e51b81526004016107d5906125ab565b606654198119606654191614611c465760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016107d5565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610bd9565b609a5460408051918252602082018390527f4e65c41a3597bda732ca64980235cf51494171d5853998763fb05db45afaacb3910160405180910390a1609a55565b6000808313611cde5760008213611cd7575060006109ef565b50806109ef565b60008213611cf657611cef8361273e565b90506109ef565b611cef8383612825565b6001600160a01b038116611d8e5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016107d5565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146110005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606654600090819060019081161415611efe5760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e646578206973207061757365640000000000000060448201526064016107d5565b609a54609954611f0f906001612891565b1115611f735760405162461bcd60e51b815260206004820152602d60248201527f456967656e506f644d616e616765722e5f6465706c6f79506f643a20706f642060448201526c1b1a5b5a5d081c995858da1959609a1b60648201526084016107d5565b609960008154611f82906128a9565b9091555060408051610940810190915261090e80825260009161202191839133916128c56020830139604080516001600160a01b037f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318166020820152808201919091526000606082015260800160408051601f198184030181529082905261200d9291602001612810565b604051602081830303815290604052612267565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561206557600080fd5b505af1158015612079573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a391505090565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906111f0565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561219e57506001600160a01b03821615155b6122205760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016107d5565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261226382611d00565b5050565b600080844710156122ba5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016107d5565b82516123085760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016107d5565b8383516020850187f590506001600160a01b0381166123695760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016107d5565b949350505050565b60006020828403121561238357600080fd5b5035919050565b6001600160a01b03811681146107e757600080fd5b600080604083850312156123b257600080fd5b82356123bd8161238a565b946020939093013593505050565b6000602082840312156123dd57600080fd5b81356111f08161238a565b6000806000606084860312156123fd57600080fd5b83356124088161238a565b925060208401356124188161238a565b929592945050506040919091013590565b60006020828403121561243b57600080fd5b813560ff811681146111f057600080fd5b60008083601f84011261245e57600080fd5b50813567ffffffffffffffff81111561247657600080fd5b60208301915083602082850101111561248e57600080fd5b9250929050565b6000806000806000606086880312156124ad57600080fd5b853567ffffffffffffffff808211156124c557600080fd5b6124d189838a0161244c565b909750955060208801359150808211156124ea57600080fd5b506124f78882890161244c565b96999598509660400135949350505050565b60006020828403121561251b57600080fd5b813567ffffffffffffffff811681146111f057600080fd5b600080600080600060a0868803121561254b57600080fd5b85359450602086013561255d8161238a565b9350604086013561256d8161238a565b9250606086013561257d8161238a565b949793965091946080013592915050565b6000602082840312156125a057600080fd5b81516111f08161238a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261267857612678612653565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126b5576126b561267d565b600160ff1b83900384128116156126ce576126ce61267d565b50500190565b6000602082840312156126e657600080fd5b815180151581146111f057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127545761275461267d565b5060000390565b60008282101561276d5761276d61267d565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006127af606083018789612772565b82810360208401526127c2818688612772565b9150508260408301529695505050505050565b6000815160005b818110156127f657602081850181015186830152016127dc565b81811115612805576000828601525b509290920192915050565b600061236961281f83866127d5565b846127d5565b60008083128015600160ff1b8501841216156128435761284361267d565b6001600160ff1b038401831381161561285e5761285e61267d565b50500390565b60008261287357612873612653565b500790565b60006020828403121561288a57600080fd5b5051919050565b600082198211156128a4576128a461267d565b500190565b60006000198214156128bd576128bd61267d565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220fdba244614e85c7d0217ace6943bbcaeeda2f25ab03ed3807c7c4b43c901c2d664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0e801d84fa97b50751dbf25036d067dcf18858bf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c806397faf0211161007157806397faf021146101965780639bfff3e8146101b6578063a454b3be146101be578063a48bb0ac146101d1578063b9717755146101e4578063f3410922146101f757600080fd5b8062bff04d146100b85780630854259f146100e15780630a344038146100f65780636653b53b146101165780636d14a98714610137578063889ae3e514610176575b600080fd5b6100cb6100c63660046112e2565b61020a565b6040516100d8919061132e565b60405180910390f35b6100f46100ef36600461138e565b610445565b005b61010163ffffffff81565b60405163ffffffff90911681526020016100d8565b610129610124366004611480565b61064a565b6040519081526020016100d8565b61015e7f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304281565b6040516001600160a01b0390911681526020016100d8565b6101896101843660046114c3565b61066b565b6040516100d891906114f6565b6101a96101a436600461152e565b61075a565b6040516100d8919061156a565b600154610129565b6101016101cc36600461158b565b6107d8565b6101a96101df3660046114c3565b610a64565b6101016101f23660046115b7565b610adb565b610101610205366004611604565b610d86565b6060336001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f373042161461025d5760405162461bcd60e51b81526004016102549061161f565b60405180910390fd5b60008267ffffffffffffffff81111561027857610278611378565b6040519080825280602002602001820160405280156102a1578160200160208202803683370190505b5060018054808201825560009182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018790559091505b8381101561043a5760008585838181106102f5576102f5611692565b919091013560f81c6000818152600360205260408120549193509091508161031e576000610365565b60ff8316600090815260036020526040902061033b6001846116be565b8154811061034b5761034b611692565b600091825260209091200154600160201b900463ffffffff165b9050610372898483610df4565b6103ed836103818360016116d5565b60408051808201825263ffffffff9283166020808301918252438516835260ff9590951660009081526003865292832080546001810182559084529490922090519301805491518316600160201b0267ffffffffffffffff199092169390921692909217919091179055565b6103f88160016116d5565b85858151811061040a5761040a611692565b602002602001019063ffffffff16908163ffffffff16815250505050508080610432906116fd565b9150506102d9565b5090505b9392505050565b336001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f373042161461048d5760405162461bcd60e51b81526004016102549061161f565b805182146105295760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d4e756d6265727320616e64206f70657261746f724964735460648201527f6f53776170206d757374206265207468652073616d65206c656e677468000000608482015260a401610254565b60005b8281101561064357600084848381811061054857610548611692565b6000898152600260209081526040808320939095013560f81c8083529290529283208054919450915061057d906001906116be565b8154811061058d5761058d611692565b9060005260206000200160000160049054906101000a900463ffffffff1690506105d28783838787815181106105c5576105c5611692565b6020026020010151610ea3565b60ff82166000908152600360205260409020805461062e918491600191906105fb9083906116be565b8154811061060b5761060b611692565b6000918252602090912001546103819190600160201b900463ffffffff16611718565b5050808061063b906116fd565b91505061052c565b5050505050565b6001818154811061065a57600080fd5b600091825260209091200154905081565b606060006106798484611012565b63ffffffff1667ffffffffffffffff81111561069757610697611378565b6040519080825280602002602001820160405280156106c0578160200160208202803683370190505b50905060005b600154811015610750576000600182815481106106e5576106e5611692565b9060005260206000200154905060006106ff8288886111b5565b905063ffffffff808216141561071657505061073e565b81848263ffffffff168151811061072f5761072f611692565b60200260200101818152505050505b80610748816116fd565b9150506106c6565b5090505b92915050565b604080518082018252600080825260208083018290528682526002815283822060ff87168352905291909120805463ffffffff841690811061079e5761079e611692565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b9091041691810191909152949350505050565b60ff83166000908152600360205260408120805482919063ffffffff851690811061080557610805611692565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090851610156108ff5760405162461bcd60e51b815260206004820152607d60248201527f496e64657852656769737472792e676574546f74616c4f70657261746f72734660448201527f6f7251756f72756d4174426c6f636b4e756d6265724279496e6465783a20707260648201527f6f766964656420696e64657820697320746f6f2066617220696e20746865207060848201527f61737420666f722070726f766964656420626c6f636b206e756d62657200000060a482015260c401610254565b60ff851660009081526003602052604090205461091e906001906116be565b8363ffffffff1614610a585760ff851660009081526003602052604081206109478560016116d5565b63ffffffff168154811061095d5761095d611692565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610a565760405162461bcd60e51b815260206004820152607f60248201527f496e64657852656769737472792e676574546f74616c4f70657261746f72734660448201527f6f7251756f72756d4174426c6f636b4e756d6265724279496e6465783a20707260648201527f6f766964656420696e64657820697320746f6f2066617220696e20746865206660848201527f757475726520666f722070726f766964656420626c6f636b206e756d6265720060a482015260c401610254565b505b60200151949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff8416908110610aa257610aa2611692565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b600084815260026020908152604080832060ff871684529091528120805482919063ffffffff8516908110610b1257610b12611692565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b9092048116938301939093529092509085161015610c0c5760405162461bcd60e51b815260206004820152607c60248201527f496e64657852656769737472792e6765744f70657261746f72496e646578466f60448201527f7251756f72756d4174426c6f636b4e756d6265724279496e6465783a2070726f60648201527f766964656420696e64657820697320746f6f2066617220696e2074686520706160848201527f737420666f722070726f766964656420626c6f636b206e756d6265720000000060a482015260c401610254565b600086815260026020908152604080832060ff89168452909152902054610c35906001906116be565b8363ffffffff1614610d7957600086815260026020908152604080832060ff891684529091528120610c688560016116d5565b63ffffffff1681548110610c7e57610c7e611692565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610d775760405162461bcd60e51b815260206004820152607e60248201527f496e64657852656769737472792e6765744f70657261746f72496e646578466f60448201527f7251756f72756d4174426c6f636b4e756d6265724279496e6465783a2070726f60648201527f766964656420696e64657820697320746f6f2066617220696e2074686520667560848201527f7475726520666f722070726f766964656420626c6f636b206e756d626572000060a482015260c401610254565b505b6020015195945050505050565b60ff811660009081526003602052604081205480610da75750600092915050565b60ff83166000908152600360205260409020610dc46001836116be565b81548110610dd457610dd4611692565b600091825260209091200154600160201b900463ffffffff169392505050565b60408051808201825263ffffffff8381166020808401828152438416855260008981526002835286812060ff8a1680835290845287822080546001810182559083529184902087519201805493518716600160201b0267ffffffffffffffff199094169290961691909117919091179093558451928352820152909185917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b600081815260026020908152604080832060ff8716845290915281208054610ecd906001906116be565b81548110610edd57610edd611692565b60009182526020808320919091015460ff87168352600390915260409091208054600160201b90920463ffffffff169250829160019190610f1f9083906116be565b81548110610f2f57610f2f611692565b600091825260209091200154610f529190600160201b900463ffffffff16611718565b63ffffffff1614610ff15760405162461bcd60e51b815260206004820152605e60248201527f496e64657852656769737472792e5f70726f636573734f70657261746f72526560448201527f6d6f76616c3a206f70657261746f724964546f53776170206973206e6f74207460648201527f6865206c617374206f70657261746f7220696e207468652071756f72756d0000608482015260a401610254565b81851461100357611003828585610df4565b610643858563ffffffff610df4565b60ff821660009081526003602052604081205480611034576000915050610754565b60ff84166000908152600360205260408120805490919061105757611057611692565b60009182526020909120015463ffffffff908116908416101561107e576000915050610754565b60005b61108c6001836116be565b8111611170576000816110a06001856116be565b6110aa91906116be565b60ff8716600090815260036020526040812080549293509091839081106110d3576110d3611692565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b9092048116938301939093529092509087161061115b5760ff8716600090815260036020526040902080548390811061113657611136611692565b600091825260209091200154600160201b900463ffffffff1694506107549350505050565b50508080611168906116fd565b915050611081565b5060ff84166000908152600360205260408120805490919061119457611194611692565b600091825260209091200154600160201b900463ffffffff16949350505050565b600083815260026020908152604080832060ff86168452909152812054815b8181101561128a576000816111ea6001856116be565b6111f491906116be565b600088815260026020908152604080832060ff8b1684529091528120805492935090918390811061122757611227611692565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b909204811693830193909352909250908716106112755760200151935061043e92505050565b50508080611282906116fd565b9150506111d4565b5063ffffffff95945050505050565b60008083601f8401126112ab57600080fd5b50813567ffffffffffffffff8111156112c357600080fd5b6020830191508360208285010111156112db57600080fd5b9250929050565b6000806000604084860312156112f757600080fd5b83359250602084013567ffffffffffffffff81111561131557600080fd5b61132186828701611299565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b8181101561136c57835163ffffffff168352928401929184019160010161134a565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080600080606085870312156113a457600080fd5b8435935060208086013567ffffffffffffffff808211156113c457600080fd5b6113d089838a01611299565b909650945060408801359150808211156113e957600080fd5b818801915088601f8301126113fd57600080fd5b81358181111561140f5761140f611378565b8060051b604051601f19603f8301168101818110858211171561143457611434611378565b60405291825284820192508381018501918b83111561145257600080fd5b938501935b8285101561147057843584529385019392850192611457565b989b979a50959850505050505050565b60006020828403121561149257600080fd5b5035919050565b803560ff811681146114aa57600080fd5b919050565b803563ffffffff811681146114aa57600080fd5b600080604083850312156114d657600080fd5b6114df83611499565b91506114ed602084016114af565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561136c57835183529284019291840191600101611512565b60008060006060848603121561154357600080fd5b8335925061155360208501611499565b9150611561604085016114af565b90509250925092565b604081016107548284805163ffffffff908116835260209182015116910152565b6000806000606084860312156115a057600080fd5b6115a984611499565b9250611553602085016114af565b600080600080608085870312156115cd57600080fd5b843593506115dd60208601611499565b92506115eb604086016114af565b91506115f9606086016114af565b905092959194509250565b60006020828403121561161657600080fd5b61043e82611499565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156116d0576116d06116a8565b500390565b600063ffffffff8083168185168083038211156116f4576116f46116a8565b01949350505050565b6000600019821415611711576117116116a8565b5060010190565b600063ffffffff83811690831681811015611735576117356116a8565b03939250505056fea264697066735822122012477df6eb7fdf41aec56d4deddd63f877b6c435dc4c28cce1e8878baea6b23264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xe801d84fa97b50751dbf25036d067dcf18858bf","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc5a5c42992decbae36851359345fe25997f5c42d"}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061016a5760003560e01c80637439841f116100d1578063c49074421161008a578063e251ef5211610064578063e251ef521461053c578063e2c834451461055c578063f28824611461057c578063fe80b087146105b057600080fd5b8063c4907442146104dc578063c4d66de8146104fc578063dda3346c1461051c57600080fd5b80637439841f146103f557806374cdd7981461043957806387e0d2891461046d5780639b4e463414610494578063b725bceb146104a7578063baa7145a146104c757600080fd5b80633474aa16116101235780633474aa16146102f957806334bea20a146103195780633f65cf19146103545780634665bcda146103745780635d3f65b6146103a85780636fcd0e53146103c857600080fd5b80630b18ff66146101c05780630cd4649e146101fd5780631a5057be146102145780631d905d5c146102485780631f60c2bd146102945780633106ab53146102c857600080fd5b366101bb5734603760008282546101819190614750565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101cc57600080fd5b506033546101e0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561020957600080fd5b506102126105d4565b005b34801561022057600080fd5b506101e07f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561025457600080fd5b5061027c7f0000000000000000000000000000000000000000000000000000000737be760081565b6040516001600160401b0390911681526020016101f4565b3480156102a057600080fd5b5061027c7f000000000000000000000000000000000000000000000000000000002cb4178081565b3480156102d457600080fd5b506034546102e990600160401b900460ff1681565b60405190151581526020016101f4565b34801561030557600080fd5b5060345461027c906001600160401b031681565b34801561032557600080fd5b506102e9610334366004614784565b603560209081526000928352604080842090915290825290205460ff1681565b34801561036057600080fd5b5061021261036f366004614813565b61073d565b34801561038057600080fd5b506101e07f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b3480156103b457600080fd5b5060385461027c906001600160401b031681565b3480156103d457600080fd5b506103e86103e33660046148e1565b610c69565b6040516101f49190614932565b34801561040157600080fd5b5061042c6104103660046148e1565b600090815260366020526040902054600160c01b900460ff1690565b6040516101f4919061497a565b34801561044557600080fd5b506101e07f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b34801561047957600080fd5b5060335461027c90600160a01b90046001600160401b031681565b6102126104a23660046149c9565b610d16565b3480156104b357600080fd5b506102126104c2366004614a3c565b610ec3565b3480156104d357600080fd5b50610212611291565b3480156104e857600080fd5b506102126104f7366004614ae4565b6112fc565b34801561050857600080fd5b50610212610517366004614b10565b611482565b34801561052857600080fd5b50610212610537366004614c2a565b61165a565b34801561054857600080fd5b50610212610557366004614cfb565b611783565b34801561056857600080fd5b50610212610577366004614ae4565b611b4e565b34801561058857600080fd5b5061027c7f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105bc57600080fd5b506105c660375481565b6040519081526020016101f4565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190614df6565b156106865760405162461bcd60e51b815260040161067d90614e18565b60405180910390fd5b6033546001600160a01b031633146106b05760405162461bcd60e51b815260040161067d90614e75565b603454600160401b900460ff16156106da5760405162461bcd60e51b815260040161067d90614ebd565b6034805460ff60401b1916600160401b179055603354610702906001600160a01b0316611c88565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b031633146107675760405162461bcd60e51b815260040161067d90614e75565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190614df6565b156108105760405162461bcd60e51b815260040161067d90614e18565b60335489906001600160401b03600160a01b9091048116908216116108475760405162461bcd60e51b815260040161067d90614f0c565b603454600160401b900460ff166108bf5760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b606482015260840161067d565b86851480156108cd57508483145b61095d5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a40161067d565b42610973613f486001600160401b038d16614750565b10156109fc5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a40161067d565b60405163d1c64cc960e01b81526001600160401b038b166004820152610aa5907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190614fa7565b8a35610aa060208d018d614fc0565b611cbc565b6000805b88811015610b4957610b2b8c8c358c8c85818110610ac957610ac9615006565b9050602002016020810190610ade919061501c565b8b8b86818110610af057610af0615006565b9050602002810190610b029190614fc0565b8b8b88818110610b1457610b14615006565b9050602002810190610b269190615043565b611e44565b610b359083614750565b915080610b418161508c565b915050610aa9565b5060008113610bd55760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a206f766572666c6f7720696e20746f74616c416d6f756e74546f4260648201526b6552657374616b656457656960a01b608482015260a40161067d565b60335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f9091169063c2c51c4090604401600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b505050505050505050505050505050565b610c916040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfc57610cfc6148fa565b6002811115610d0d57610d0d6148fa565b90525092915050565b336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f1614610d5e5760405162461bcd60e51b815260040161067d906150a7565b346801bc16d674ec80000014610dea5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a40161067d565b7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa6001600160a01b031663228951186801bc16d674ec8000008787610e2d612285565b8888886040518863ffffffff1660e01b8152600401610e5196959493929190615179565b6000604051808303818588803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb49291906151c8565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f9190614df6565b15610f6c5760405162461bcd60e51b815260040161067d90614e18565b8684148015610f7a57508382145b6110025760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f72496e646963657320616e642070726f6f6673206d757374206260648201526c0ca40e6c2daca40d8cadccee8d609b1b608482015260a40161067d565b42611018613f486001600160401b038c16614750565b101561109a5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e76657269667942616c616e63655570646174653a207370908201527f656369666965642074696d657374616d7020697320746f6f2066617220696e206064820152631c185cdd60e21b608482015260a40161067d565b60405163d1c64cc960e01b81526001600160401b038a16600482015261113e907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112f9190614fa7565b8735610aa060208a018a614fc0565b6000805b888110156111e2576111c48b8b8b8481811061116057611160615006565b9050602002016020810190611175919061501c565b8a358a8a8681811061118957611189615006565b905060200281019061119b91906151dc565b8989878181106111ad576111ad615006565b90506020028101906111bf9190615043565b6122ca565b6111ce90836151fc565b9150806111da8161508c565b915050611142565b506033546001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81169163c2c51c409116611227633b9aca008561523d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b5050505050505050505050505050565b6033546001600160a01b031633146112bb5760405162461bcd60e51b815260040161067d90614e75565b603454600160401b900460ff16156112e55760405162461bcd60e51b815260040161067d90614ebd565b6033546112fa906001600160a01b0316611c88565b565b336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16146113445760405162461bcd60e51b815260040161067d906150a7565b611352633b9aca00826152d8565b156113dc5760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a40161067d565b60006113ec633b9aca00836152ec565b60348054919250829160009061140c9084906001600160401b0316615300565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161146b91815260200190565b60405180910390a261147d838361273f565b505050565b600054610100900460ff16158080156114a25750600054600160ff909116105b806114bc5750303b1580156114bc575060005460ff166001145b61151f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161067d565b6000805460ff191660011790558015611542576000805461ff0019166101001790555b6001600160a01b0382166115b55760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b606482015260840161067d565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611656576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146116845760405162461bcd60e51b815260040161067d90614e75565b815183511461170f5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a40161067d565b60005b835181101561177d5761176b8284838151811061173157611731615006565b602002602001015186848151811061174b5761174b615006565b60200260200101516001600160a01b03166127499092919063ffffffff16565b806117758161508c565b915050611712565b50505050565b604051635ac86ab760e01b81526004808201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa1580156117ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180e9190614df6565b1561182b5760405162461bcd60e51b815260040161067d90614e18565b838614801561183957508588145b801561184457508782145b6118b8576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e677468606482015260840161067d565b60405163d1c64cc960e01b81526001600160401b038c16600482015261195c907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d9190614fa7565b8b35610aa060208e018e614fc0565b604080518082019091526000808252602082015260005b83811015611a5c576000611a178d358d8d8581811061199457611994615006565b90506020028101906119a69190615328565b8c8c868181106119b8576119b8615006565b90506020028101906119ca9190614fc0565b8c8c888181106119dc576119dc615006565b90506020028101906119ee9190615043565b8c8c8a818110611a0057611a00615006565b9050602002810190611a129190615043565b61279b565b80518451919250908490611a2c908390614750565b9052506020808201519084018051611a459083906151fc565b905250819050611a548161508c565b915050611973565b50805115611a8b576033548151611a8b916001600160a01b031690611a8690633b9aca009061533f565b612be2565b602081015115611b405760335460208201516001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81169263c2c51c4092911690611ae190633b9aca009061523d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611b2757600080fd5b505af1158015611b3b573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611b785760405162461bcd60e51b815260040161067d90614e75565b603754811115611c295760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c40161067d565b8060376000828254611c3b919061535e565b90915550506040518181526001600160a01b038316907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a26116568282612be2565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611cb98147612be2565b50565b611cc86003602061533f565b8114611d585760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a40161067d565b611d9d82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915060039050612c70565b61177d5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c40161067d565b600080611e83848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c8892505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611ef257611ef26148fa565b6002811115611f0357611f036148fa565b9052509050600081606001516002811115611f2057611f206148fa565b14611fc95760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c40161067d565b611fd1612285565b611fda90615375565b612016868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cac92505050565b1461209d5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a40161067d565b60006120db868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cc192505050565b90506120eb8a87878b8b8e612cec565b6001606083015264ffffffffff891682526001600160401b038b16604083015261211481612f0d565b6001600160401b03908116602080850191825260008681526036909152604090819020855181549351928701518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606085015185939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156121b6576121b66148fa565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516122519392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b0316612276919061533f565b9b9a5050505050505050505050565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b6000806122db604086013588612fe4565b9050600061231b858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c8892505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561238a5761238a6148fa565b600281111561239b5761239b6148fa565b815250509050896001600160401b031681604001516001600160401b0316106124525760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a40161067d565b60018160600151600281111561246a5761246a6148fa565b146124d25760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b606482015260840161067d565b6124db8a613019565b6001600160401b031661252087878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061310392505050565b6001600160401b0316116125c3576000836001600160401b0316116125c35760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a40161067d565b6125dc8887876125d660208c018c614fc0565b8e612cec565b6125f58860408901356125ef8a80614fc0565b8d61311b565b6020810151600061260585612f0d565b6001600160401b0380821660208087019182528f8316604080890191825260008a8152603690935290912087518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606087015193945086939192839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156126b2576126b26148fa565b0217905550905050816001600160401b0316816001600160401b031614612730576040805164ffffffffff8d1681526001600160401b038e8116602083015283168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a161272d8183613284565b95505b50505050509695505050505050565b611656828261329c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261147d9084906133b5565b60408051808201909152600080825260208201526127c06127bb89615408565b613487565b6033546001600160401b03600160a01b9091048116908216116127f55760405162461bcd60e51b815260040161067d90614f0c565b60006128036127bb8b615408565b90506000612843888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c8892505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612870576128706148fa565b14156129275760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c40161067d565b60008181526035602090815260408083206001600160401b038616845290915290205460ff16156129e65760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a40161067d565b60008181526035602090815260408083206001600160401b03861684529091529020805460ff19166001179055612a1f8c87878e613497565b6000612a5d878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e7f92505050565b9050612a6d8d8a8a8e8e86612cec565b6000612aab888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e9792505050565b9050612ae98a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061310392505050565b6001600160401b0316612b03612afe8f615408565b613eaf565b6001600160401b031610612bbb57603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352612bb093869388938a936001600160a01b03909316928892916060830190600160c01b900460ff166002811115612b9757612b976148fa565b6002811115612ba857612ba86148fa565b905250613ec1565b955050505050612bd5565b603354612bb090839086906001600160a01b0316846140d2565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8539091169063c0db354c9083906044016000604051808303818588803b158015612c5357600080fd5b505af1158015612c67573d6000803e3d6000fd5b50505050505050565b600083612c7e8685856141b0565b1495945050505050565b600081600081518110612c9d57612c9d615006565b60200260200101519050919050565b600081600181518110612c9d57612c9d615006565b6000612ce682600281518110612cd957612cd9615006565b60200260200101516142fc565b92915050565b612cf860036002615628565b8414612d715760405162461bcd60e51b815260206004820152604e602482015260008051602061579483398151915260448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a40161067d565b6005612d7f60286001614750565b612d899190614750565b612d9490602061533f565b8214612e025760405162461bcd60e51b8152602060048201526043602482015260008051602061579483398151915260448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a40161067d565b600064ffffffffff8216612e1860286001614750565b600b901b1790506000612e5d87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061436392505050565b9050612ea385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250859150869050612c70565b612f035760405162461bcd60e51b815260206004820152603d602482015260008051602061579483398151915260448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f66000000606482015260840161067d565b5050505050505050565b60007f000000000000000000000000000000000000000000000000000000002cb417806001600160401b0316826001600160401b031611612f5057506000919050565b6000633b9aca0080612f827f000000000000000000000000000000000000000000000000000000002cb4178086615300565b6001600160401b0316612f9591906152ec565b612f9f919061533f565b9050612fdd7f0000000000000000000000000000000000000000000000000000000737be76006001600160401b0316826001600160401b0316614610565b9392505050565b600080612ff2600484615634565b612ffd906040615658565b64ffffffffff16905061301184821b6142fc565b949350505050565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b031610156130c35760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e65736973000000000000000000606482015260840161067d565b6130cf600c6020615685565b6130f97f000000000000000000000000000000000000000000000000000000006059f46084615300565b612ce691906156ab565b6000612ce682600781518110612cd957612cd9615006565b600561312960266001614750565b6131339190614750565b61313e90602061533f565b82146131ae5760405162461bcd60e51b815260206004820152604460248201819052600080516020615794833981519152908201527f7242616c616e63653a2050726f6f662068617320696e636f7272656374206c656064820152630dccee8d60e31b608482015260a40161067d565b60006131bb6004836156d1565b64ffffffffff169050806131d160266001614750565b600c901b17905061321c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150859050612c70565b61327c5760405162461bcd60e51b815260206004820152603e602482015260008051602061579483398151915260448201527f7242616c616e63653a20496e76616c6964206d65726b6c652070726f6f660000606482015260840161067d565b505050505050565b6000612fdd6001600160401b038084169085166156e9565b804710156132ec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161067d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613339576040519150601f19603f3d011682016040523d82523d6000602084013e61333e565b606091505b505090508061147d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161067d565b600061340a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166146269092919063ffffffff16565b80519091501561147d57808060200190518101906134289190614df6565b61147d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161067d565b6000612ce68261014001516142fc565b6134a2600280615628565b82146135165760405162461bcd60e51b815260206004820152604960248201526000805160206157b483398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a40161067d565b613522600d6002615628565b61353260c0830160a08401615728565b6001600160401b03161061359c5760405162461bcd60e51b815260206004820152603f60248201526000805160206157b483398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c6172676500606482015260840161067d565b6135a860046002615628565b6135b9610100830160e08401615728565b6001600160401b031610613625576040805162461bcd60e51b81526020600482015260248101919091526000805160206157b483398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c61726765606482015260840161067d565b61363160186002615628565b61364160e0830160c08401615728565b6001600160401b0316106136bb5760405162461bcd60e51b815260206004820152604760248201526000805160206157b483398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a40161067d565b6136c6600480614750565b6136d1906001614750565b6136dc90602061533f565b6136e68280614fc0565b90501461375a5760405162461bcd60e51b815260206004820152604860248201526000805160206157b483398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a40161067d565b61376660046003614750565b61377190602061533f565b61377e6040830183614fc0565b9050146137f85760405162461bcd60e51b815260206004820152604e60248201526000805160206157b483398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a40161067d565b6138046003602061533f565b6138116020830183614fc0565b90501461387f5760405162461bcd60e51b815260206004820152604260248201526000805160206157b483398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a40161067d565b61388b6004602061533f565b6138986060830183614fc0565b90501461390b5760405162461bcd60e51b815260206004820152604760248201526000805160206157b483398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a40161067d565b600d61391960186001614750565b613924906005614750565b61392f906001614750565b6139399190614750565b61394490602061533f565b6139516080830183614fc0565b9050146139da5760405162461bcd60e51b815260206004820152605860248201526000805160206157b483398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a40161067d565b60006139ec60c0830160a08401615728565b6001600160401b03166000613a03600d6001614750565b613a1360e0860160c08701615728565b6001600160401b0316901b600d613a2c60186001614750565b613a37906001614750565b613a419190614750565b601b901b1717179050613a9c613a5a6080840184614fc0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250505061010085013584612c70565b613b0f5760405162461bcd60e51b815260206004820152604a60248201526000805160206157b483398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a40161067d565b613b66613b1f6020840184614fc0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610100880135935061012088013592509050612c70565b613bc65760405162461bcd60e51b815260206004820152603d60248201526000805160206157b483398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f66000000606482015260840161067d565b6049613c1e613bd86040850185614fc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061010085013561016086013584612c70565b613c905760405162461bcd60e51b815260206004820152604960248201526000805160206157b483398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a40161067d565b50613ce8613ca16060840184614fc0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608401356101408501356009612c70565b613d565760405162461bcd60e51b8152602060048201526044602482018190526000805160206157b4833981519152908201527f616c3a20496e76616c696420626c6f636b4e756d626572206d65726b6c6520706064820152633937b7b360e11b608482015260a40161067d565b6000613d69610100840160e08501615728565b6001600160401b0316613d7e60046001614750565b600e901b1790506000613dc386868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061436392505050565b9050613e13613dd28580614fc0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608601358385612c70565b612c675760405162461bcd60e51b815260206004820152604360248201526000805160206157b483398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a40161067d565b6000612ce682600181518110612cd957612cd9615006565b6000612ce682600381518110612cd957612cd9615006565b600060206130f98361012001516142fc565b604080518082019091526000808252602082015260007f0000000000000000000000000000000000000000000000000000000737be76006001600160401b0316846001600160401b03161115613f3857507f0000000000000000000000000000000000000000000000000000000737be7600613f3b565b50825b6040805180820190915260008082526020820152613f598286615300565b6001600160401b039081168252603480548492600091613f7b91859116615743565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613fad828560200151613284565b602082810191909152600090850152600260608501819052506000888152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115614064576140646148fa565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906141639084906001600160401b0316615743565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b600083516000141580156141cf5750602084516141cd91906152d8565b155b61425e5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a40161067d565b604080516020808201909252848152905b855181116142f2576142826002856152d8565b6142b5578151600052808601516020526020826040600060026107d05a03fa6142aa57600080fd5b6002840493506142e0565b8086015160005281516020526020826040600060026107d05a03fa6142d957600080fd5b6002840493505b6142eb602082614750565b905061426f565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161437491906152ec565b90506000816001600160401b0381111561439057614390614b2d565b6040519080825280602002602001820160405280156143b9578160200160208202803683370190505b50905060005b828110156144c0576002856143d4838361533f565b815181106143e4576143e4615006565b6020026020010151868360026143fa919061533f565b614405906001614750565b8151811061441557614415615006565b6020026020010151604051602001614437929190918252602082015260400190565b60408051601f19818403018152908290526144519161576e565b602060405180830381855afa15801561446e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906144919190614fa7565b8282815181106144a3576144a3615006565b6020908102919091010152806144b88161508c565b9150506143bf565b506144cc6002836152ec565b91505b81156145ec5760005b828110156145d9576002826144ed838361533f565b815181106144fd576144fd615006565b602002602001015183836002614513919061533f565b61451e906001614750565b8151811061452e5761452e615006565b6020026020010151604051602001614550929190918252602082015260400190565b60408051601f198184030181529082905261456a9161576e565b602060405180830381855afa158015614587573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906145aa9190614fa7565b8282815181106145bc576145bc615006565b6020908102919091010152806145d18161508c565b9150506144d8565b506145e56002836152ec565b91506144cf565b806000815181106145ff576145ff615006565b602002602001015192505050919050565b600081831061461f5781612fdd565b5090919050565b60606130118484600085856001600160a01b0385163b6146885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161067d565b600080866001600160a01b031685876040516146a4919061576e565b60006040518083038185875af1925050503d80600081146146e1576040519150601f19603f3d011682016040523d82523d6000602084013e6146e6565b606091505b50915091506146f6828286614701565b979650505050505050565b60608315614710575081612fdd565b8251156147205782518084602001fd5b8160405162461bcd60e51b815260040161067d9190615780565b634e487b7160e01b600052601160045260246000fd5b600082198211156147635761476361473a565b500190565b80356001600160401b038116811461477f57600080fd5b919050565b6000806040838503121561479757600080fd5b823591506147a760208401614768565b90509250929050565b6000604082840312156147c257600080fd5b50919050565b60008083601f8401126147da57600080fd5b5081356001600160401b038111156147f157600080fd5b6020830191508360208260051b850101111561480c57600080fd5b9250929050565b60008060008060008060008060a0898b03121561482f57600080fd5b61483889614768565b975060208901356001600160401b038082111561485457600080fd5b6148608c838d016147b0565b985060408b013591508082111561487657600080fd5b6148828c838d016147c8565b909850965060608b013591508082111561489b57600080fd5b6148a78c838d016147c8565b909650945060808b01359150808211156148c057600080fd5b506148cd8b828c016147c8565b999c989b5096995094979396929594505050565b6000602082840312156148f357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6003811061492e57634e487b7160e01b600052602160045260246000fd5b9052565b60006080820190506001600160401b038084511683528060208501511660208401528060408501511660408401525060608301516149736060840182614910565b5092915050565b60208101612ce68284614910565b60008083601f84011261499a57600080fd5b5081356001600160401b038111156149b157600080fd5b60208301915083602082850101111561480c57600080fd5b6000806000806000606086880312156149e157600080fd5b85356001600160401b03808211156149f857600080fd5b614a0489838a01614988565b90975095506020880135915080821115614a1d57600080fd5b50614a2a88828901614988565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614a5857600080fd5b614a6189614768565b975060208901356001600160401b0380821115614a7d57600080fd5b614a898c838d016147c8565b909950975060408b0135915080821115614aa257600080fd5b614aae8c838d016147b0565b965060608b013591508082111561489b57600080fd5b6001600160a01b0381168114611cb957600080fd5b803561477f81614ac4565b60008060408385031215614af757600080fd5b8235614b0281614ac4565b946020939093013593505050565b600060208284031215614b2257600080fd5b8135612fdd81614ac4565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614b6657614b66614b2d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b9457614b94614b2d565b604052919050565b60006001600160401b03821115614bb557614bb5614b2d565b5060051b60200190565b600082601f830112614bd057600080fd5b81356020614be5614be083614b9c565b614b6c565b82815260059290921b84018101918181019086841115614c0457600080fd5b8286015b84811015614c1f5780358352918301918301614c08565b509695505050505050565b600080600060608486031215614c3f57600080fd5b83356001600160401b0380821115614c5657600080fd5b818601915086601f830112614c6a57600080fd5b81356020614c7a614be083614b9c565b82815260059290921b8401810191818101908a841115614c9957600080fd5b948201945b83861015614cc0578535614cb181614ac4565b82529482019490820190614c9e565b97505087013592505080821115614cd657600080fd5b50614ce386828701614bbf565b925050614cf260408501614ad9565b90509250925092565b60008060008060008060008060008060c08b8d031215614d1a57600080fd5b614d238b614768565b995060208b01356001600160401b0380821115614d3f57600080fd5b614d4b8e838f016147b0565b9a5060408d0135915080821115614d6157600080fd5b614d6d8e838f016147c8565b909a50985060608d0135915080821115614d8657600080fd5b614d928e838f016147c8565b909850965060808d0135915080821115614dab57600080fd5b614db78e838f016147c8565b909650945060a08d0135915080821115614dd057600080fd5b50614ddd8d828e016147c8565b915080935050809150509295989b9194979a5092959850565b600060208284031215614e0857600080fd5b81518015158114612fdd57600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b600060208284031215614fb957600080fd5b5051919050565b6000808335601e19843603018112614fd757600080fd5b8301803591506001600160401b03821115614ff157600080fd5b60200191503681900382131561480c57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561502e57600080fd5b813564ffffffffff81168114612fdd57600080fd5b6000808335601e1984360301811261505a57600080fd5b8301803591506001600160401b0382111561507457600080fd5b6020019150600581901b360382131561480c57600080fd5b60006000198214156150a0576150a061473a565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561513c578181015183820152602001615124565b8381111561177d5750506000910152565b60008151808452615165816020860160208601615121565b601f01601f19169290920160200192915050565b60808152600061518d60808301888a6150f8565b828103602084015261519f818861514d565b905082810360408401526151b48186886150f8565b915050826060830152979650505050505050565b6020815260006130116020830184866150f8565b60008235605e198336030181126151f257600080fd5b9190910192915050565b600080821280156001600160ff1b038490038513161561521e5761521e61473a565b600160ff1b83900384128116156152375761523761473a565b50500190565b60006001600160ff1b03818413828413808216868404861116156152635761526361473a565b600160ff1b60008712828116878305891216156152825761528261473a565b6000871292508782058712848416161561529e5761529e61473a565b878505871281841616156152b4576152b461473a565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826152e7576152e76152c2565b500690565b6000826152fb576152fb6152c2565b500490565b60006001600160401b03838116908316818110156153205761532061473a565b039392505050565b6000823561017e198336030181126151f257600080fd5b60008160001904831182151516156153595761535961473a565b500290565b6000828210156153705761537061473a565b500390565b805160208083015191908110156147c25760001960209190910360031b1b16919050565b600082601f8301126153aa57600080fd5b81356001600160401b038111156153c3576153c3614b2d565b6153d6601f8201601f1916602001614b6c565b8181528460208386010111156153eb57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561541b57600080fd5b615423614b43565b82356001600160401b038082111561543a57600080fd5b61544636838701615399565b8352602085013591508082111561545c57600080fd5b61546836838701615399565b6020840152604085013591508082111561548157600080fd5b61548d36838701615399565b604084015260608501359150808211156154a657600080fd5b6154b236838701615399565b606084015260808501359150808211156154cb57600080fd5b506154d836828601615399565b6080830152506154ea60a08401614768565b60a08201526154fb60c08401614768565b60c082015261550c60e08401614768565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600181815b8085111561557f5781600019048211156155655761556561473a565b8085161561557257918102915b93841c9390800290615549565b509250929050565b60008261559657506001612ce6565b816155a357506000612ce6565b81600181146155b957600281146155c3576155df565b6001915050612ce6565b60ff8411156155d4576155d461473a565b50506001821b612ce6565b5060208310610133831016604e8410600b8410161715615602575081810a612ce6565b61560c8383615544565b80600019048211156156205761562061473a565b029392505050565b6000612fdd8383615587565b600064ffffffffff8084168061564c5761564c6152c2565b92169190910692915050565b600064ffffffffff8083168185168183048111821515161561567c5761567c61473a565b02949350505050565b60006001600160401b038083168185168183048111821515161561567c5761567c61473a565b60006001600160401b03808416806156c5576156c56152c2565b92169190910492915050565b600064ffffffffff808416806156c5576156c56152c2565b60008083128015600160ff1b8501841216156157075761570761473a565b6001600160ff1b03840183138116156157225761572261473a565b50500390565b60006020828403121561573a57600080fd5b612fdd82614768565b60006001600160401b038083168185168083038211156157655761576561473a565b01949350505050565b600082516151f2818460208701615121565b602081526000612fdd602083018461514d56fe426561636f6e436861696e50726f6f66732e76657269667956616c696461746f426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220250a089a9d82d132551a5c21cef0ddeca55257e52f54a8189aee31305a8d95d264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x322813fd9a801c5507c9de605d63cea4f2ce6c44":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063161a334d146100515780631f5ac1b214610066578063de29fac01461008f578063e8bb9ae6146100bd575b600080fd5b61006461005f366004610d03565b6100fe565b005b610079610074366004610d7c565b61045b565b6040516100869190610dac565b60405180910390f35b6100af61009d366004610d7c565b60006020819052908152604090205481565b604051908152602001610086565b6100e66100cb366004610dc3565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610086565b6000610109836104f6565b33600090815260208190526040902054909150156101ac5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a206f70657261746f7220616c726561647920726560648201526e6769737465726564207075626b657960881b608482015260a4015b60405180910390fd5b6000818152600160205260409020546001600160a01b03161561024a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a207075626c6963206b657920616c7265616479206064820152691c9959da5cdd195c995960b21b608482015260a4016101a3565b60006102553361045b565b8551602080880151875188830151885189850151875186890151604051999a506000997f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001996102ad9990989796959493929101610e05565b6040516020818303038152906040528051906020012060001c6102d09190610e51565b90506103376102e96102e28784610539565b88906105d0565b6102f1610664565b61033161032a85610324604080518082018252600080825260209182015281518083019092526001825260029082015290565b90610539565b86906105d0565b87610724565b6103ec5760405162461bcd60e51b815260206004820152607460248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a2065697468657220746865204731207369676e6160648201527f747572652069732077726f6e672c206f7220473120616e6420473220707269766084820152730c2e8ca40d6caf240c8de40dcdee840dac2e8c6d60631b60a482015260c4016101a3565b3360008181526020818152604080832087905586835260019091529081902080546001600160a01b03191683179055517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba38280419061044b9088908890610e73565b60405180910390a2505050505050565b60408051808201909152600080825260208201526040516bffffffffffffffffffffffff19606084811b8216602084015230901b1660348201524660488201527f456967656e4c617965725f424e3235345f5075626b65795f52656769737472616068820152633a34b7b760e11b60888201526104f090608c0160405160208183030381529060405280519060200120610991565b92915050565b60008160000151826020015160405160200161051c929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152610555610b4b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156105885761058a565bfe5b50806105c85760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016101a3565b505092915050565b60408051808201909152600080825260208201526105ec610b69565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156105885750806105c85760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016101a3565b61066c610b87565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091610753610bac565b60005b600281101561091857600061076c826006610ed9565b905084826002811061078057610780610ead565b60200201515183610792836000610ef8565b600c81106107a2576107a2610ead565b60200201528482600281106107b9576107b9610ead565b602002015160200151838260016107d09190610ef8565b600c81106107e0576107e0610ead565b60200201528382600281106107f7576107f7610ead565b602002015151518361080a836002610ef8565b600c811061081a5761081a610ead565b602002015283826002811061083157610831610ead565b602002015151600160200201518361084a836003610ef8565b600c811061085a5761085a610ead565b602002015283826002811061087157610871610ead565b60200201516020015160006002811061088c5761088c610ead565b60200201518361089d836004610ef8565b600c81106108ad576108ad610ead565b60200201528382600281106108c4576108c4610ead565b6020020151602001516001600281106108df576108df610ead565b6020020151836108f0836005610ef8565b600c811061090057610900610ead565b6020020152508061091081610f10565b915050610756565b50610921610bcb565b60006020826101808560086107d05a03fa90508080156105885750806109815760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016101a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152600080806109c1600080516020610f2c83398151915286610e51565b90505b6109cd81610a21565b9093509150600080516020610f2c833981519152828309831415610a07576040805180820190915290815260208101919091529392505050565b600080516020610f2c8339815191526001820890506109c4565b60008080600080516020610f2c8339815191526003600080516020610f2c83398151915286600080516020610f2c833981519152888909090890506000610a97827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020610f2c833981519152610aa3565b91959194509092505050565b600080610aae610bcb565b610ab6610be9565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015610588575082610b405760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016101a3565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610b9a610c07565b8152602001610ba7610c07565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610c5e57610c5e610c25565b60405290565b600060408284031215610c7657600080fd5b6040516040810181811067ffffffffffffffff82111715610c9957610c99610c25565b604052823581526020928301359281019290925250919050565b600082601f830112610cc457600080fd5b610ccc610c3b565b806040840185811115610cde57600080fd5b845b81811015610cf8578035845260209384019301610ce0565b509095945050505050565b6000806000838503610100811215610d1a57600080fd5b610d248686610c64565b9350610d338660408701610c64565b92506080607f1982011215610d4757600080fd5b50610d50610c3b565b610d5d8660808701610cb3565b8152610d6c8660c08701610cb3565b6020820152809150509250925092565b600060208284031215610d8e57600080fd5b81356001600160a01b0381168114610da557600080fd5b9392505050565b8151815260208083015190820152604081016104f0565b600060208284031215610dd557600080fd5b5035919050565b8060005b6002811015610dff578151845260209384019390910190600101610de0565b50505050565b888152876020820152866040820152856060820152610e276080820186610ddc565b610e3460c0820185610ddc565b610100810192909252610120820152610140019695505050505050565b600082610e6e57634e487b7160e01b600052601260045260246000fd5b500690565b825181526020808401519082015260c08101610e93604083018451610ddc565b6020830151610ea56080840182610ddc565b509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610ef357610ef3610ec3565b500290565b60008219821115610f0b57610f0b610ec3565b500190565b6000600019821415610f2457610f24610ec3565b506001019056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220f643ff5b7660919d910f65efb7ab47a6690af784073ec20513ba666ee2d4dc5864736f6c634300080c0033","storage":{}},"0x36c02da8a0983159322a80ffe9f24b1acff8b570":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80636b532e9e1161010f5780638b00ce7c116100a2578063f5c9899d11610071578063f5c9899d14610507578063f63c5bab1461052d578063f8c8765e14610535578063fabc1cbc1461054857600080fd5b80638b00ce7c146104b25780638da5cb5b146104c2578063cefdc1d4146104d3578063f2fde38b146104f457600080fd5b8063715018a6116100de578063715018a61461047657806372d18e8d1461047e5780637afa1eed1461048c578063886f11951461049f57600080fd5b80636b532e9e146104085780636b92787e1461041b5780636d14a9871461042e5780636efb46361461045557600080fd5b80633563b0d1116101875780635baec9a0116101565780635baec9a0146103a35780635c975abb146103b65780635decc3f5146103be57806368304835146103e157600080fd5b80633563b0d1146103285780634f739f7414610348578063595c6a67146103685780635ac86ab71461037057600080fd5b8063245a7bfc116101c3578063245a7bfc146102885780632cb223d5146102b35780632d89f6fc146102e15780633561deb11461030157600080fd5b806310d67a2f146101f5578063136439dd1461020a578063171f1d5b1461021d5780631ad431891461024c575b600080fd5b610208610203366004613c94565b61055b565b005b610208610218366004613cb8565b610617565b61023061022b366004613e36565b610756565b6040805192151583529015156020830152015b60405180910390f35b6102737f000000000000000000000000000000000000000000000000000000000000001e81565b60405163ffffffff9091168152602001610243565b609b5461029b906001600160a01b031681565b6040516001600160a01b039091168152602001610243565b6102d36102c1366004613ea4565b60996020526000908152604090205481565b604051908152602001610243565b6102d36102ef366004613ea4565b60986020526000908152604090205481565b61029b7f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc981565b61033b610336366004613ec1565b6108e0565b6040516102439190614008565b61035b610356366004614063565b610c59565b6040516102439190614167565b6102086112dd565b61039361037e366004614222565b606654600160ff9092169190911b9081161490565b6040519015158152602001610243565b6102086103b1366004614508565b6113a4565b6066546102d3565b6103936103cc366004613ea4565b609a6020526000908152604090205460ff1681565b61029b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61020861041636600461457c565b611823565b610208610429366004614602565b611ebf565b61029b7f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304281565b61046861046336600461465d565b612060565b60405161024392919061471d565b610208612acc565b60975463ffffffff16610273565b609c5461029b906001600160a01b031681565b60655461029b906001600160a01b031681565b6097546102739063ffffffff1681565b6033546001600160a01b031661029b565b6104e66104e1366004614766565b612ae0565b6040516102439291906147a8565b610208610502366004613c94565b612c72565b7f000000000000000000000000000000000000000000000000000000000000001e610273565b610273606481565b6102086105433660046147c9565b612ce8565b610208610556366004613cb8565b612e39565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d29190614825565b6001600160a01b0316336001600160a01b03161461060b5760405162461bcd60e51b815260040161060290614842565b60405180910390fd5b61061481612f95565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561065f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610683919061488c565b61069f5760405162461bcd60e51b8152600401610602906148ae565b606654818116146107185760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610602565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061079e5761079e6148f6565b60200201518951600160200201518a602001516000600281106107c3576107c36148f6565b60200201518b602001516001600281106107df576107df6148f6565b602090810291909101518c518d83015160405161083c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61085f919061490c565b90506108d2610878610871888461308c565b8690613123565b6108806131b7565b6108c86108b9856108b3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061308c565b6108c28c613277565b90613123565b886201d4c0613307565b909890975095505050505050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610922573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190614825565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac9190614825565b9050600085516001600160401b038111156109c9576109c9613cd1565b6040519080825280602002602001820160405280156109fc57816020015b60608152602001906001900390816109e75790505b50905060005b8651811015610c4e576000878281518110610a1f57610a1f6148f6565b016020015160405163889ae3e560e01b815260f89190911c6004820181905263ffffffff8916602483015291506000906001600160a01b0386169063889ae3e590604401600060405180830381865afa158015610a80573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa8919081019061492e565b905080516001600160401b03811115610ac357610ac3613cd1565b604051908082528060200260200182016040528015610b0857816020015b6040805180820190915260008082526020820152815260200190600190039081610ae15790505b50848481518110610b1b57610b1b6148f6565b602002602001018190525060005b8151811015610c38576000828281518110610b4657610b466148f6565b6020908102919091018101516040805180820182528281529051631b32722560e01b81526004810183905260ff8816602482015263ffffffff8e166044820152919350918201906001600160a01b038b1690631b32722590606401602060405180830381865afa158015610bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be291906149be565b6001600160601b0316815250868681518110610c0057610c006148f6565b60200260200101518381518110610c1957610c196148f6565b6020026020010181905250508080610c30906149fd565b915050610b29565b5050508080610c46906149fd565b915050610a02565b509695505050505050565b610c846040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190614825565b9050610d156040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516385020d4960e01b81526001600160a01b038a16906385020d4990610d45908b9089908990600401614a18565b600060405180830381865afa158015610d62573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8a9190810190614a62565b815260405163e192e9ad60e01b81526001600160a01b0383169063e192e9ad90610dbc908b908b908b90600401614b19565b600060405180830381865afa158015610dd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e019190810190614a62565b6040820152856001600160401b03811115610e1e57610e1e613cd1565b604051908082528060200260200182016040528015610e5157816020015b6060815260200190600190039081610e3c5790505b50606082015260005b60ff81168711156111ee576000856001600160401b03811115610e7f57610e7f613cd1565b604051908082528060200260200182016040528015610ea8578160200160208202803683370190505b5083606001518360ff1681518110610ec257610ec26148f6565b602002602001018190525060005b868110156110ee5760008c6001600160a01b0316633064620d8a8a85818110610efb57610efb6148f6565b905060200201358e88600001518681518110610f1957610f196148f6565b60200260200101516040518463ffffffff1660e01b8152600401610f569392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f979190614b42565b90508a8a8560ff16818110610fae57610fae6148f6565b6001600160c01b03841692013560f81c9190911c6001908116141590506110db57856001600160a01b031663480858668a8a85818110610ff057610ff06148f6565b905060200201358d8d8860ff1681811061100c5761100c6148f6565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110869190614b6b565b85606001518560ff168151811061109f5761109f6148f6565b602002602001015184815181106110b8576110b86148f6565b63ffffffff90921660209283029190910190910152826110d7816149fd565b9350505b50806110e6816149fd565b915050610ed0565b506000816001600160401b0381111561110957611109613cd1565b604051908082528060200260200182016040528015611132578160200160208202803683370190505b50905060005b828110156111b35784606001518460ff1681518110611159576111596148f6565b60200260200101518181518110611172576111726148f6565b602002602001015182828151811061118c5761118c6148f6565b63ffffffff90921660209283029190910190910152806111ab816149fd565b915050611138565b508084606001518460ff16815181106111ce576111ce6148f6565b6020026020010181905250505080806111e690614b88565b915050610e5a565b506000896001600160a01b0316633561deb16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614825565b60405163eda1076360e01b81529091506001600160a01b0382169063eda1076390611286908b908b908e90600401614ba8565b600060405180830381865afa1580156112a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112cb9190810190614a62565b60208301525098975050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611349919061488c565b6113655760405162461bcd60e51b8152600401610602906148ae565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b609b546001600160a01b031633146113fe5760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c65720000006044820152606401610602565b60006114106040850160208601613ea4565b90503660006114226040870187614bd2565b909250905060006114396080880160608901613ea4565b90506098600061144c6020890189613ea4565b63ffffffff1663ffffffff16815260200190815260200160002054876040516020016114789190614c18565b60405160208183030381529060405280519060200120146115015760405162461bcd60e51b815260206004820152603d60248201527f737570706c696564207461736b20646f6573206e6f74206d617463682074686560448201527f206f6e65207265636f7264656420696e2074686520636f6e74726163740000006064820152608401610602565b600060998161151360208a018a613ea4565b63ffffffff1663ffffffff16815260200190815260200160002054146115905760405162461bcd60e51b815260206004820152602c60248201527f41676772656761746f722068617320616c726561647920726573706f6e64656460448201526b20746f20746865207461736b60a01b6064820152608401610602565b6115ba7f000000000000000000000000000000000000000000000000000000000000001e85614cb9565b63ffffffff164363ffffffff16111561162b5760405162461bcd60e51b815260206004820152602d60248201527f41676772656761746f722068617320726573706f6e64656420746f207468652060448201526c7461736b20746f6f206c61746560981b6064820152608401610602565b60008660405160200161163e9190614cff565b6040516020818303038152906040528051906020012090506000806116668387878a8c612060565b9150915060005b85811015611765578460ff168360200151828151811061168f5761168f6148f6565b60200260200101516116a19190614d0d565b6001600160601b03166064846000015183815181106116c2576116c26148f6565b60200260200101516001600160601b03166116dd9190614d3c565b1015611753576040805162461bcd60e51b81526020600482015260248101919091527f5369676e61746f7269657320646f206e6f74206f776e206174206c656173742060448201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d6064820152608401610602565b8061175d816149fd565b91505061166d565b5060408051808201825263ffffffff43168152602080820184905291519091611792918c91849101614d5b565b60405160208183030381529060405280519060200120609960008c60000160208101906117bf9190613ea4565b63ffffffff1663ffffffff168152602001908152602001600020819055507f349c1ee60e4e8972ee9dba642c1774543d5c4136879b7f4caaf04bf81a487a2a8a8260405161180e929190614d5b565b60405180910390a15050505050505050505050565b60006118326020850185613ea4565b63ffffffff81166000908152609960205260409020549091508535906118a45760405162461bcd60e51b815260206004820152602160248201527f5461736b206861736e2774206265656e20726573706f6e64656420746f2079656044820152601d60fa1b6064820152608401610602565b84846040516020016118b7929190614d87565b60408051601f19818403018152918152815160209283012063ffffffff851660009081526099909352912054146119565760405162461bcd60e51b815260206004820152603d60248201527f5461736b20726573706f6e736520646f6573206e6f74206d617463682074686560448201527f206f6e65207265636f7264656420696e2074686520636f6e74726163740000006064820152608401610602565b63ffffffff82166000908152609a602052604090205460ff16156119ee5760405162461bcd60e51b815260206004820152604360248201527f54686520726573706f6e736520746f2074686973207461736b2068617320616c60448201527f7265616479206265656e206368616c6c656e676564207375636365737366756c606482015262363c9760e91b608482015260a401610602565b60646119fd6020860186613ea4565b611a079190614cb9565b63ffffffff164363ffffffff161115611a885760405162461bcd60e51b815260206004820152603760248201527f546865206368616c6c656e676520706572696f6420666f72207468697320746160448201527f736b2068617320616c726561647920657870697265642e0000000000000000006064820152608401610602565b6000611a948280614d3c565b9050602086013581146001811415611ae257604051339063ffffffff8616907ffd3e26beeb5967fc5a57a0446914eabc45b4aa474c67a51b4b5160cac60ddb0590600090a350505050611eb9565b6000611b5a7f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f373042611b1560408c018c614bd2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103369250505060408d0160208e01613ea4565b9050600086516001600160401b03811115611b7757611b77613cd1565b604051908082528060200260200182016040528015611ba0578160200160208202803683370190505b50905060005b8751811015611c0057611bd1888281518110611bc457611bc46148f6565b602002602001015161352b565b828281518110611be357611be36148f6565b602090810291909101015280611bf8816149fd565b915050611ba6565b506000611c1360408c0160208d01613ea4565b82604051602001611c25929190614dbd565b60405160208183030381529060405280519060200120905088602001358114611ccf5760405162461bcd60e51b815260206004820152605060248201527f546865207075626b657973206f66206e6f6e2d7369676e696e67206f7065726160448201527f746f727320737570706c69656420627920746865206368616c6c656e6765722060648201526f30b932903737ba1031b7b93932b1ba1760811b608482015260a401610602565b600088516001600160401b03811115611cea57611cea613cd1565b604051908082528060200260200182016040528015611d13578160200160208202803683370190505b50905060005b8951811015611e67577f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc96001600160a01b031663187548c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da49190614825565b6001600160a01b031663e8bb9ae6858381518110611dc457611dc46148f6565b60200260200101516040518263ffffffff1660e01b8152600401611dea91815260200190565b602060405180830381865afa158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b9190614825565b828281518110611e3d57611e3d6148f6565b6001600160a01b039092166020928302919091019091015280611e5f816149fd565b915050611d19565b5063ffffffff88166000818152609a6020526040808220805460ff19166001179055513392917fc20d1bb0f1623680306b83d4ff4bb99a2beb9d86d97832f3ca40fd13a29df1ec91a350505050505050505b50505050565b609c546001600160a01b03163314611f235760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b6064820152608401610602565b611f5a604051806080016040528060008152602001600063ffffffff16815260200160608152602001600063ffffffff1681525090565b84815263ffffffff438116602080840191909152908516606083015260408051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060408083019190915251611fc0908290602001614e31565b60408051601f1981840301815282825280516020918201206097805463ffffffff9081166000908152609890945293909220555416907f1695b8d06ec800b4615e745cfb5bd00c1f2875615d42925c3b5afa543bb24c4890612023908490614e31565b60405180910390a260975461203f9063ffffffff166001614cb9565b6097805463ffffffff191663ffffffff929092169190911790555050505050565b60408051808201909152606080825260208201526040805180820190915260008082526020820181905290815b8681101561227d577f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc96001600160a01b031663c1af6b248989848181106120d6576120d66148f6565b9050013560f81c60f81b60f81c888860a0015185815181106120fa576120fa6148f6565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015612156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217a9190614e96565b6001600160401b03191661219d86604001518381518110611bc457611bc46148f6565b67ffffffffffffffff1916146122395760405162461bcd60e51b81526020600482015260616024820152600080516020614ff883398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610602565b61226985604001518281518110612252576122526148f6565b60200260200101518361312390919063ffffffff16565b915080612275816149fd565b91505061208d565b506040805180820190915260608082526020820152866001600160401b038111156122aa576122aa613cd1565b6040519080825280602002602001820160405280156122d3578160200160208202803683370190505b506020820152866001600160401b038111156122f1576122f1613cd1565b60405190808252806020026020018201604052801561231a578160200160208202803683370190505b5081526020850151516000906001600160401b0381111561233d5761233d613cd1565b604051908082528060200260200182016040528015612366578160200160208202803683370190505b50905060008660200151516001600160401b0381111561238857612388613cd1565b6040519080825280602002602001820160405280156123b1578160200160208202803683370190505b50905060006123f58b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061356e92505050565b905060005b8860200151518110156126605761242089602001518281518110611bc457611bc46148f6565b848281518110612432576124326148f6565b602090810291909101015280156124ea578361244f600183614ec1565b8151811061245f5761245f6148f6565b602002602001015160001c84828151811061247c5761247c6148f6565b602002602001015160001c116124ea576040805162461bcd60e51b8152602060048201526024810191909152600080516020614ff883398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610602565b7f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f3730426001600160a01b0316633064620d85838151811061252b5761252b6148f6565b60200260200101518c8c60000151858151811061254a5761254a6148f6565b60200260200101516040518463ffffffff1660e01b81526004016125879392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156125a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c89190614b42565b6001600160c01b03168382815181106125e3576125e36148f6565b60200260200101818152505061264c6126456126198486858151811061260b5761260b6148f6565b6020026020010151166136d7565b61263f8c602001518581518110612632576126326148f6565b6020026020010151613708565b906137a3565b8790613123565b955080612658816149fd565b9150506123fa565b505060005b60ff81168a11156129a05760008b8b8360ff16818110612687576126876148f6565b9050013560f81c60f81b60f81c90507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663c8294c56828c8c60c001518660ff16815181106126e0576126e06148f6565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa15801561273c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276091906149be565b85602001518360ff1681518110612779576127796148f6565b6001600160601b03909216602092830291909101820152850151805160ff84169081106127a8576127a86148f6565b602002602001015185600001518360ff16815181106127c9576127c96148f6565b60200260200101906001600160601b031690816001600160601b03168152505060005b8960200151518163ffffffff161015612996576000612832858363ffffffff168151811061281c5761281c6148f6565b60200260200101518460ff161c60019081161490565b15612983577f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663a43cde89848e898663ffffffff1681518110612880576128806148f6565b60200260200101518f60e001518960ff16815181106128a1576128a16148f6565b60200260200101518663ffffffff16815181106128c0576128c06148f6565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294891906149be565b8751805160ff871690811061295f5761295f6148f6565b602002602001018181516129739190614ed8565b6001600160601b03169052506001015b508061298e81614f00565b9150506127ec565b5050600101612665565b50506000806129b98c868a606001518b60800151610756565b9150915081612a2a5760405162461bcd60e51b81526020600482015260436024820152600080516020614ff883398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610602565b80612a8b5760405162461bcd60e51b81526020600482015260396024820152600080516020614ff883398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610602565b505060008782604051602001612aa2929190614dbd565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b612ad4613888565b612ade60006138e2565b565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110612b1b57612b1b6148f6565b60209081029190910101526040516385020d4960e01b81526000906001600160a01b038816906385020d4990612b579088908690600401614f24565b600060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b9c9190810190614a62565b600081518110612bae57612bae6148f6565b6020908102919091010151604051633064620d60e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b03891690633064620d90606401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190614b42565b6001600160c01b031690506000612c5482613934565b905081612c628a838a6108e0565b9550955050505050935093915050565b612c7a613888565b6001600160a01b038116612cdf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610602565b610614816138e2565b600054610100900460ff1615808015612d085750600054600160ff909116105b80612d225750303b158015612d22575060005460ff166001145b612d855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610602565b6000805460ff191660011790558015612da8576000805461ff0019166101001790555b612db3856000613991565b612dbc846138e2565b609b80546001600160a01b038086166001600160a01b031992831617909255609c8054928516929091169190911790558015612e32576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb09190614825565b6001600160a01b0316336001600160a01b031614612ee05760405162461bcd60e51b815260040161060290614842565b606654198119606654191614612f5e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610602565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161074b565b6001600160a01b0381166130235760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610602565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526130a8613ba5565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156130db576130dd565bfe5b508061311b5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610602565b505092915050565b604080518082019091526000808252602082015261313f613bc3565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156130db57508061311b5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610602565b6131bf613be1565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820190915260008082526020820152600080806132a7600080516020614fd88339815191528661490c565b90505b6132b381613a7b565b9093509150600080516020614fd88339815191528283098314156132ed576040805180820190915290815260208101919091529392505050565b600080516020614fd88339815191526001820890506132aa565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613339613c06565b60005b60028110156134fe576000613352826006614d3c565b9050848260028110613366576133666148f6565b60200201515183613378836000614f78565b600c8110613388576133886148f6565b602002015284826002811061339f5761339f6148f6565b602002015160200151838260016133b69190614f78565b600c81106133c6576133c66148f6565b60200201528382600281106133dd576133dd6148f6565b60200201515151836133f0836002614f78565b600c8110613400576134006148f6565b6020020152838260028110613417576134176148f6565b6020020151516001602002015183613430836003614f78565b600c8110613440576134406148f6565b6020020152838260028110613457576134576148f6565b602002015160200151600060028110613472576134726148f6565b602002015183613483836004614f78565b600c8110613493576134936148f6565b60200201528382600281106134aa576134aa6148f6565b6020020151602001516001600281106134c5576134c56148f6565b6020020151836134d6836005614f78565b600c81106134e6576134e66148f6565b602002015250806134f6816149fd565b91505061333c565b50613507613c25565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b600081600001518260200151604051602001613551929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6000610100825111156135e25760405162461bcd60e51b815260206004820152603660248201527f4269746d61705574696c732e62797465734172726179546f4269746d61703a206044820152756279746573417272617920697320746f6f206c6f6e6760501b6064820152608401610602565b81516135f057506000919050565b60008083600081518110613606576136066148f6565b0160200151600160f89190911c81901b92505b84518110156136ce57848181518110613634576136346148f6565b0160200151600160f89190911c1b9150828216156136ba5760405162461bcd60e51b815260206004820152603a60248201527f4269746d61705574696c732e62797465734172726179546f4269746d61703a2060448201527f72657065617420656e74727920696e20627974657341727261790000000000006064820152608401610602565b918117916136c7816149fd565b9050613619565b50909392505050565b6000805b8215613702576136ec600184614ec1565b90921691806136fa81614f90565b9150506136db565b92915050565b6040805180820190915260008082526020820152815115801561372d57506020820151155b1561374b575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614fd8833981519152846020015161377e919061490c565b61379690600080516020614fd8833981519152614ec1565b905292915050565b919050565b60408051808201909152600080825260208201526102008261ffff16106137ff5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610602565b8161ffff1660011415613813575081613702565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff16111561387d57600161ffff871660ff83161c811614156138605761385d8484613123565b93505b61386a8384613123565b92506201fffe600192831b16910161382f565b509195945050505050565b6033546001600160a01b03163314612ade5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610602565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000805b61010081101561398a576001811b91508382161561397a57828160f81b604051602001613968929190614fa8565b60405160208183030381529060405292505b613983816149fd565b905061393a565b5050919050565b6065546001600160a01b03161580156139b257506001600160a01b03821615155b613a345760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610602565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613a7782612f95565b5050565b60008080600080516020614fd88339815191526003600080516020614fd883398151915286600080516020614fd8833981519152888909090890506000613af1827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614fd8833981519152613afd565b91959194509092505050565b600080613b08613c25565b613b10613c43565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156130db575082613b9a5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610602565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613bf4613c61565b8152602001613c01613c61565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461061457600080fd5b600060208284031215613ca657600080fd5b8135613cb181613c7f565b9392505050565b600060208284031215613cca57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613d0957613d09613cd1565b60405290565b60405161010081016001600160401b0381118282101715613d0957613d09613cd1565b604051601f8201601f191681016001600160401b0381118282101715613d5a57613d5a613cd1565b604052919050565b600060408284031215613d7457600080fd5b613d7c613ce7565b9050813581526020820135602082015292915050565b600082601f830112613da357600080fd5b604051604081018181106001600160401b0382111715613dc557613dc5613cd1565b8060405250806040840185811115613ddc57600080fd5b845b8181101561387d578035835260209283019201613dde565b600060808284031215613e0857600080fd5b613e10613ce7565b9050613e1c8383613d92565b8152613e2b8360408401613d92565b602082015292915050565b6000806000806101208587031215613e4d57600080fd5b84359350613e5e8660208701613d62565b9250613e6d8660608701613df6565b9150613e7c8660e08701613d62565b905092959194509250565b63ffffffff8116811461061457600080fd5b803561379e81613e87565b600060208284031215613eb657600080fd5b8135613cb181613e87565b600080600060608486031215613ed657600080fd5b8335613ee181613c7f565b92506020848101356001600160401b0380821115613efe57600080fd5b818701915087601f830112613f1257600080fd5b813581811115613f2457613f24613cd1565b613f36601f8201601f19168501613d32565b91508082528884828501011115613f4c57600080fd5b8084840185840137600084828401015250809450505050613f6f60408501613e99565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015613ffa578385038a52825180518087529087019087870190845b81811015613fe5578351805184528a01516001600160601b03168a84015292890192604090920191600101613fb5565b50509a87019a95505091850191600101613f97565b509298975050505050505050565b602081526000613cb16020830184613f78565b60008083601f84011261402d57600080fd5b5081356001600160401b0381111561404457600080fd5b60208301915083602082850101111561405c57600080fd5b9250929050565b6000806000806000806080878903121561407c57600080fd5b863561408781613c7f565b9550602087013561409781613e87565b945060408701356001600160401b03808211156140b357600080fd5b6140bf8a838b0161401b565b909650945060608901359150808211156140d857600080fd5b818901915089601f8301126140ec57600080fd5b8135818111156140fb57600080fd5b8a60208260051b850101111561411057600080fd5b6020830194508093505050509295509295509295565b600081518084526020808501945080840160005b8381101561415c57815163ffffffff168752958201959082019060010161413a565b509495945050505050565b60006020808352835160808285015261418360a0850182614126565b905081850151601f19808684030160408701526141a08383614126565b925060408701519150808684030160608701526141bd8383614126565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b828110156142145784878303018452614202828751614126565b958801959388019391506001016141e8565b509998505050505050505050565b60006020828403121561423457600080fd5b813560ff81168114613cb157600080fd5b60006080828403121561425757600080fd5b50919050565b60006040828403121561425757600080fd5b60006001600160401b0382111561428857614288613cd1565b5060051b60200190565b600082601f8301126142a357600080fd5b813560206142b86142b38361426f565b613d32565b82815260059290921b840181019181810190868411156142d757600080fd5b8286015b84811015610c4e5780356142ee81613e87565b83529183019183016142db565b600082601f83011261430c57600080fd5b8135602061431c6142b38361426f565b82815260069290921b8401810191818101908684111561433b57600080fd5b8286015b84811015610c4e576143518882613d62565b83529183019160400161433f565b600082601f83011261437057600080fd5b813560206143806142b38361426f565b82815260059290921b8401810191818101908684111561439f57600080fd5b8286015b84811015610c4e5780356001600160401b038111156143c25760008081fd5b6143d08986838b0101614292565b8452509183019183016143a3565b600061018082840312156143f157600080fd5b6143f9613d0f565b905081356001600160401b038082111561441257600080fd5b61441e85838601614292565b8352602084013591508082111561443457600080fd5b614440858386016142fb565b6020840152604084013591508082111561445957600080fd5b614465858386016142fb565b60408401526144778560608601613df6565b60608401526144898560e08601613d62565b60808401526101208401359150808211156144a357600080fd5b6144af85838601614292565b60a08401526101408401359150808211156144c957600080fd5b6144d585838601614292565b60c08401526101608401359150808211156144ef57600080fd5b506144fc8482850161435f565b60e08301525092915050565b60008060006080848603121561451d57600080fd5b83356001600160401b038082111561453457600080fd5b61454087838801614245565b945061454f876020880161425d565b9350606086013591508082111561456557600080fd5b50614572868287016143de565b9150509250925092565b60008060008060c0858703121561459257600080fd5b84356001600160401b03808211156145a957600080fd5b6145b588838901614245565b95506145c4886020890161425d565b94506145d3886060890161425d565b935060a08701359150808211156145e957600080fd5b506145f6878288016142fb565b91505092959194509250565b6000806000806060858703121561461857600080fd5b84359350602085013561462a81613e87565b925060408501356001600160401b0381111561464557600080fd5b6146518782880161401b565b95989497509550505050565b60008060008060006080868803121561467557600080fd5b8535945060208601356001600160401b038082111561469357600080fd5b61469f89838a0161401b565b9096509450604088013591506146b482613e87565b909250606087013590808211156146ca57600080fd5b506146d7888289016143de565b9150509295509295909350565b600081518084526020808501945080840160005b8381101561415c5781516001600160601b0316875295820195908201906001016146f8565b604081526000835160408084015261473860808401826146e4565b90506020850151603f1984830301606085015261475582826146e4565b925050508260208301529392505050565b60008060006060848603121561477b57600080fd5b833561478681613c7f565b925060208401359150604084013561479d81613e87565b809150509250925092565b8281526040602082015260006147c16040830184613f78565b949350505050565b600080600080608085870312156147df57600080fd5b84356147ea81613c7f565b935060208501356147fa81613c7f565b9250604085013561480a81613c7f565b9150606085013561481a81613c7f565b939692955090935050565b60006020828403121561483757600080fd5b8151613cb181613c7f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561489e57600080fd5b81518015158114613cb157600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261492957634e487b7160e01b600052601260045260246000fd5b500690565b6000602080838503121561494157600080fd5b82516001600160401b0381111561495757600080fd5b8301601f8101851361496857600080fd5b80516149766142b38261426f565b81815260059190911b8201830190838101908783111561499557600080fd5b928401925b828410156149b35783518252928401929084019061499a565b979650505050505050565b6000602082840312156149d057600080fd5b81516001600160601b0381168114613cb157600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614a1157614a116149e7565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b03831115614a4557600080fd5b8260051b8085606085013760009201606001918252509392505050565b60006020808385031215614a7557600080fd5b82516001600160401b03811115614a8b57600080fd5b8301601f81018513614a9c57600080fd5b8051614aaa6142b38261426f565b81815260059190911b82018301908381019087831115614ac957600080fd5b928401925b828410156149b3578351614ae181613e87565b82529284019290840190614ace565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614b39604083018486614af0565b95945050505050565b600060208284031215614b5457600080fd5b81516001600160c01b0381168114613cb157600080fd5b600060208284031215614b7d57600080fd5b8151613cb181613e87565b600060ff821660ff811415614b9f57614b9f6149e7565b60010192915050565b604081526000614bbc604083018587614af0565b905063ffffffff83166020830152949350505050565b6000808335601e19843603018112614be957600080fd5b8301803591506001600160401b03821115614c0357600080fd5b60200191503681900382131561405c57600080fd5b602081528135602082015260006020830135614c3381613e87565b63ffffffff81166040840152506040830135601e19843603018112614c5757600080fd5b830180356001600160401b03811115614c6f57600080fd5b803603851315614c7e57600080fd5b60806060850152614c9660a085018260208501614af0565b915050614ca560608501613e99565b63ffffffff81166080850152509392505050565b600063ffffffff808316818516808303821115614cd857614cd86149e7565b01949350505050565b8035614cec81613e87565b63ffffffff168252602090810135910152565b604081016137028284614ce1565b60006001600160601b0380831681851681830481118215151615614d3357614d336149e7565b02949350505050565b6000816000190483118215151615614d5657614d566149e7565b500290565b60808101614d698285614ce1565b63ffffffff8351166040830152602083015160608301529392505050565b60808101614d958285614ce1565b8235614da081613e87565b63ffffffff16604083015260209290920135606090910152919050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614df857815185529382019390820190600101614ddc565b5092979650505050505050565b60005b83811015614e20578181015183820152602001614e08565b83811115611eb95750506000910152565b60208152815160208201526000602083015163ffffffff8082166040850152604085015191506080606085015281518060a0860152614e778160c0870160208601614e05565b60609590950151166080840152505060c0601f909201601f1916010190565b600060208284031215614ea857600080fd5b815167ffffffffffffffff1981168114613cb157600080fd5b600082821015614ed357614ed36149e7565b500390565b60006001600160601b0383811690831681811015614ef857614ef86149e7565b039392505050565b600063ffffffff80831681811415614f1a57614f1a6149e7565b6001019392505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b60008219821115614f8b57614f8b6149e7565b500190565b600061ffff80831681811415614f1a57614f1a6149e7565b60008351614fba818460208801614e05565b6001600160f81b031993909316919092019081526001019291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212200a2f58cf98f9cbeae2914b7d61942a80f46e85031184bce9dbc095b759a7f2be64736f6c634300080c0033","storage":{}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4826533b4897376654bb4d4ad88b7fafd0c98528":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80636d14a987116100715780636d14a987146101ec5780637225057e146102135780637f5eccbb14610261578063c1af6b24146102a2578063eda10763146102cf578063fb81a7be146102ef57600080fd5b806303ce4bad146100b9578063187548c8146100df57806324369b2a1461011e57806332de63081461013357806347b314e81461016f57806363a9451014610182575b600080fd5b6100cc6100c7366004610f4d565b610327565b6040519081526020015b60405180910390f35b6101067f000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c4481565b6040516001600160a01b0390911681526020016100d6565b61013161012c366004610f4d565b6104a1565b005b61015a610141366004611017565b6002602052600090815260409020805460019091015482565b604080519283526020830191909152016100d6565b61010661017d366004611039565b610580565b6101d1610190366004611017565b60408051808201909152600080825260208201525060ff16600090815260026020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016100d6565b6101067f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304281565b610226610221366004611052565b610612565b60408051825167ffffffffffffffff1916815260208084015163ffffffff9081169183019190915292820151909216908201526060016100d6565b61027461026f366004611052565b6106a4565b6040805167ffffffffffffffff19909416845263ffffffff92831660208501529116908201526060016100d6565b6102b56102b036600461107c565b6106ef565b60405167ffffffffffffffff1990911681526020016100d6565b6102e26102dd3660046110c4565b610778565b6040516100d6919061113c565b6103126102fd366004611017565b60ff1660009081526001602052604090205490565b60405163ffffffff90911681526020016100d6565b6000336001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f373042161461037a5760405162461bcd60e51b815260040161037190611186565b60405180910390fd5b6000610385836109d0565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581141561041d5760405162461bcd60e51b815260206004820152603f60248201527f424c535075626b657952656769737472792e72656769737465724f706572617460448201527f6f723a2063616e6e6f74207265676973746572207a65726f207075626b6579006064820152608401610371565b846001600160a01b031661043082610580565b6001600160a01b0316146104565760405162461bcd60e51b8152600401610371906111fd565b6104608484610a13565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246858560405161049192919061125b565b60405180910390a1949350505050565b336001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304216146104e95760405162461bcd60e51b815260040161037190611186565b60006104f4826109d0565b9050836001600160a01b031661050982610580565b6001600160a01b03161461052f5760405162461bcd60e51b8152600401610371906111fd565b6105418361053c84610bd2565b610a13565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba848460405161057292919061125b565b60405180910390a150505050565b60405163745dcd7360e11b8152600481018290526000907f000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c446001600160a01b03169063e8bb9ae690602401602060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c91906112c0565b92915050565b604080516060810182526000808252602080830182905282840182905260ff86168252600190529190912080548390811061064f5761064f6112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905092915050565b600160205281600052604060002081815481106106c057600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60ff83166000908152600160205260408120805482919084908110610716576107166112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905061076f8185610c91565b51949350505050565b606060008367ffffffffffffffff81111561079557610795610eb7565b6040519080825280602002602001820160405280156107be578160200160208202803683370190505b50905060005b848110156109c75760008686838181106107e0576107e06112dd565b919091013560f81c600081815260016020526040902054909250905063ffffffff81161580610849575060ff82166000908152600160205260408120805490919061082d5761082d6112dd565b600091825260209091200154600160c01b900463ffffffff1686105b156108e25760405162461bcd60e51b815260206004820152605e60248201527f424c535075626b657952656769737472792e67657441706b496e64696365734660448201527f6f7251756f72756d734174426c6f636b4e756d6265723a20626c6f636b4e756d60648201527f626572206973206265666f726520746865206669727374207570646174650000608482015260a401610371565b60005b8163ffffffff168163ffffffff1610156109b15760ff83166000908152600160208190526040909120889161091a8486611309565b6109249190611309565b63ffffffff168154811061093a5761093a6112dd565b600091825260209091200154600160c01b900463ffffffff161161099f5760016109648284611309565b61096e9190611309565b858581518110610980576109806112dd565b602002602001019063ffffffff16908163ffffffff16815250506109b1565b806109a98161132e565b9150506108e5565b50505080806109bf90611352565b9150506107c4565b50949350505050565b6000816000015182602001516040516020016109f6929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b604080518082019091526000808252602082015260005b8351811015610bcc576000848281518110610a4757610a476112dd565b0160209081015160f81c600081815260019092526040909120549091508015610ac75760ff821660009081526001602081905260409091204391610a8b908461136d565b81548110610a9b57610a9b6112dd565b90600052602060002001600001601c6101000a81548163ffffffff021916908363ffffffff1602179055505b60ff82166000908152600260209081526040918290208251808401909352805483526001015490820152610afb9086610dde565b60ff8316600090815260026020908152604080832084518155828501516001909101558051606081018252838152918201839052810191909152909450610b41856109d0565b67ffffffffffffffff1916815263ffffffff438116602080840191825260ff90951660009081526001808752604080832080548084018255908452979092208551970180549351958301518516600160e01b026001600160e01b0396909516600160c01b026001600160e01b03199094169790921c9690961791909117929092161790555001610a2a565b50505050565b60408051808201909152600080825260208201528151158015610bf757506020820151155b15610c15575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151610c5a9190611384565b610c84907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761136d565b905292915050565b919050565b816020015163ffffffff168163ffffffff161015610d2a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a20696e646578206064820152691d1bdbc81c9958d95b9d60b21b608482015260a401610371565b604082015163ffffffff161580610d505750816040015163ffffffff168163ffffffff16105b610dda5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a206e6f74206c6160648201526e746573742061706b2075706461746560881b608482015260a401610371565b5050565b6040805180820190915260008082526020820152610dfa610e81565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610e3957610e3b565bfe5b5080610e795760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610371565b505092915050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0381168114610eb457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ef657610ef6610eb7565b604052919050565b600060408284031215610f1057600080fd5b6040516040810181811067ffffffffffffffff82111715610f3357610f33610eb7565b604052823581526020928301359281019290925250919050565b600080600060808486031215610f6257600080fd5b8335610f6d81610e9f565b925060208481013567ffffffffffffffff80821115610f8b57600080fd5b818701915087601f830112610f9f57600080fd5b813581811115610fb157610fb1610eb7565b610fc3601f8201601f19168501610ecd565b91508082528884828501011115610fd957600080fd5b8084840185840137600084828401015250809450505050610ffd8560408601610efe565b90509250925092565b803560ff81168114610c8c57600080fd5b60006020828403121561102957600080fd5b61103282611006565b9392505050565b60006020828403121561104b57600080fd5b5035919050565b6000806040838503121561106557600080fd5b61106e83611006565b946020939093013593505050565b60008060006060848603121561109157600080fd5b61109a84611006565b9250602084013563ffffffff811681146110b357600080fd5b929592945050506040919091013590565b6000806000604084860312156110d957600080fd5b833567ffffffffffffffff808211156110f157600080fd5b818601915086601f83011261110557600080fd5b81358181111561111457600080fd5b87602082850101111561112657600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561117a57835163ffffffff1683529284019291840191600101611158565b50909695505050505050565b60208082526051908201527f424c535075626b657952656769737472792e6f6e6c795265676973747279436f60408201527f6f7264696e61746f723a2063616c6c6572206973206e6f74207468652072656760608201527034b9ba393c9031b7b7b93234b730ba37b960791b608082015260a00190565b602080825260409082018190527f424c535075626b657952656769737472792e72656769737465724f7065726174908201527f6f723a206f70657261746f7220646f6573206e6f74206f776e207075626b6579606082015260800190565b60018060a01b038316815260006020604081840152835180604085015260005b818110156112975785810183015185820160600152820161127b565b818111156112a9576000606083870101525b50601f01601f191692909201606001949350505050565b6000602082840312156112d257600080fd5b815161103281610e9f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611326576113266112f3565b039392505050565b600063ffffffff80831681811415611348576113486112f3565b6001019392505050565b6000600019821415611366576113666112f3565b5060010190565b60008282101561137f5761137f6112f3565b500390565b6000826113a157634e487b7160e01b600052601260045260246000fd5b50069056fea264697066735822122026803d7898bd055bcdf23166318d4c054465239113514c2e701bb48e78ea0ae964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x4a679253410272dd5232b3ff7cf5dbb88f295319":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea26469706673582212200c8f4a0047ca0322c22cf7e6a789abbe36ca3141cd508f864ec741dccdc347f964736f6c634300080c0033","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212200fdbd2e25973eab45d03ab46d4fda931522c5b45bccd7b63ecf3c38942f8913564736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103425760003560e01c80635f966f14116101b8578063b134427111610104578063da8be864116100a2578063f16172b01161007c578063f16172b014610906578063f2fde38b14610919578063f698da251461092c578063fabc1cbc1461093457600080fd5b8063da8be864146108cd578063e3b05f2f146108e0578063eea9064b146108f357600080fd5b8063c5e480db116100de578063c5e480db146107ea578063c94b511114610890578063ca661c04146108a3578063cf80873e146108ac57600080fd5b8063b134427114610772578063b7f06ebe14610799578063bb45fef2146107bc57600080fd5b8063778e55f3116101715780638da5cb5b1161014b5780638da5cb5b146107135780639104c3191461072457806399be81c81461073f578063a17884841461075257600080fd5b8063778e55f3146106c25780637f548071146106ed578063886f11951461070057600080fd5b80635f966f141461062c57806360d7faed1461065857806365da12641461066b57806368304835146106945780636d70f7ae146106a7578063715018a6146106ba57600080fd5b806333404396116102925780634fc40b6111610230578063597b36da1161020a578063597b36da146105db5780635ac86ab7146105ee5780635c975abb146106115780635cfe8d2c1461061957600080fd5b80634fc40b61146105c057806350f73e7c146105ca578063595c6a67146105d357600080fd5b80633e28391d1161026c5780633e28391d1461053c578063433773821461055f5780634665bcda146105865780634d50f9a4146105ad57600080fd5b806333404396146104bb57806339b70e38146104ce5780633cdeb5e01461050d57600080fd5b8063136439dd116102ff5780631bbce091116102d95780631bbce0911461044e57806320606b701461046157806328a573ae1461048857806329c77d4f1461049b57600080fd5b8063136439dd146103ef57806316928365146104025780631794bb3c1461043b57600080fd5b806304a4f979146103475780630b9f487a146103815780630dd8dd02146103945780630f589e59146103b457806310d67a2f146103c9578063132d4967146103dc575b600080fd5b61036e7f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce81565b6040519081526020015b60405180910390f35b61036e61038f3660046143d5565b610947565b6103a76103a2366004614474565b610a09565b60405161037891906144b5565b6103c76103c2366004614552565b610d83565b005b6103c76103d73660046145a5565b610ed3565b6103c76103ea3660046145c9565b610f86565b6103c76103fd36600461460a565b611046565b61036e6104103660046145a5565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103c76104493660046145c9565b611185565b61036e61045c3660046145c9565b6112ae565b61036e7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103c76104963660046145c9565b6112dc565b61036e6104a93660046145a5565b609b6020526000908152604090205481565b6103c76104c9366004614623565b61138c565b6104f57f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b039091168152602001610378565b6104f561051b3660046145a5565b6001600160a01b039081166000908152609960205260409020600101541690565b61054f61054a3660046145a5565b6114c9565b6040519015158152602001610378565b61036e7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6104f57f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6103c76105bb36600461460a565b6114e9565b61036e6213c68081565b61036e609d5481565b6103c76115c0565b61036e6105e9366004614963565b611687565b61054f6105fc36600461499f565b606654600160ff9092169190911b9081161490565b60665461036e565b6103c7610627366004614a15565b6116b7565b6104f561063a3660046145a5565b6001600160a01b039081166000908152609960205260409020541690565b6103c7610666366004614b75565b611962565b6104f56106793660046145a5565b609a602052600090815260409020546001600160a01b031681565b60a0546104f5906001600160a01b031681565b61054f6106b53660046145a5565b6119fd565b6103c7611a1d565b61036e6106d0366004614c04565b609860209081526000928352604080842090915290825290205481565b6103c76106fb366004614ce5565b611a31565b6065546104f5906001600160a01b031681565b6033546001600160a01b03166104f5565b6104f573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103c761074d366004614d75565b611b36565b61036e6107603660046145a5565b609f6020526000908152604090205481565b6104f57f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61054f6107a736600461460a565b609e6020526000908152604090205460ff1681565b61054f6107ca366004614daa565b609c60209081526000928352604080842090915290825290205460ff1681565b61085a6107f83660046145a5565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610378565b61036e61089e366004614dd6565b611c08565b61036e61c4e081565b6108bf6108ba3660046145a5565b611cc1565b604051610378929190614e92565b61036e6108db3660046145a5565b612079565b6103c76108ee3660046145a5565b6123d8565b6103c7610901366004614eb7565b612540565b6103c7610914366004614f0f565b61254c565b6103c76109273660046145a5565b6125dd565b61036e612653565b6103c761094236600461460a565b612691565b604080517f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e09092019092528051910120600090816109c5612653565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610a3e5760405162461bcd60e51b8152600401610a3590614f2b565b60405180910390fd5b6000836001600160401b03811115610a5857610a586146e6565b604051908082528060200260200182016040528015610a81578160200160208202803683370190505b50905060005b84811015610d7a57858582818110610aa157610aa1614f62565b9050602002810190610ab39190614f78565b610ac1906020810190614f98565b9050868683818110610ad557610ad5614f62565b9050602002810190610ae79190614f78565b610af19080614f98565b905014610b665760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610a35565b6000868683818110610b7a57610b7a614f62565b9050602002810190610b8c9190614f78565b610b9d9060608101906040016145a5565b6001600160a01b03161415610c2b5760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a206d7573742070726f766964652076616c6964207769746864726177616c606482015267206164647265737360c01b608482015260a401610a35565b336000818152609a60205260409020546001600160a01b031690610d4a9082898986818110610c5c57610c5c614f62565b9050602002810190610c6e9190614f78565b610c7f9060608101906040016145a5565b8a8a87818110610c9157610c91614f62565b9050602002810190610ca39190614f78565b610cad9080614f98565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150899050818110610cf357610cf3614f62565b9050602002810190610d059190614f78565b610d13906020810190614f98565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127ed92505050565b838381518110610d5c57610d5c614f62565b60209081029190910101525080610d7281614ff7565b915050610a87565b50949350505050565b336000908152609960205260409020546001600160a01b031615610e1d5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610a35565b610e273384612b9d565b604080518082019091526060815260006020820152610e493380836000612e39565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610e829190615012565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610ec5929190615064565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a9190615093565b6001600160a01b0316336001600160a01b031614610f7a5760405162461bcd60e51b8152600401610a35906150b0565b610f83816131f2565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9161480610fe55750336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16145b6110015760405162461bcd60e51b8152600401610a35906150fa565b61100a836114c9565b15611041576001600160a01b038084166000908152609a602052604090205416611036818585856132e9565b61103f81613364565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b29190615157565b6110ce5760405162461bcd60e51b8152600401610a3590615174565b606654818116146111475760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a35565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156111a55750600054600160ff909116105b806111bf5750303b1580156111bf575060005460ff166001145b6112225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a35565b6000805460ff191660011790558015611245576000805461ff0019166101001790555b61124f838361341e565b611257613504565b6097556112638461359b565b801561103f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6001600160a01b0383166000908152609b60205260408120546112d385828686611c08565b95945050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916148061133b5750336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16145b6113575760405162461bcd60e51b8152600401610a35906150fa565b611360836114c9565b15611041576001600160a01b038084166000908152609a602052604090205416611036818585856135ed565b606654600290600490811614156113b55760405162461bcd60e51b8152600401610a3590614f2b565b600260c95414156114085760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a35565b600260c95560005b888110156114b8576114a88a8a8381811061142d5761142d614f62565b905060200281019061143f91906151bc565b89898481811061145157611451614f62565b90506020028101906114639190614f98565b89898681811061147557611475614f62565b9050602002013588888781811061148e5761148e614f62565b90506020020160208101906114a391906151d2565b613668565b6114b181614ff7565b9050611410565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b6114f1613ce2565b61c4e081111561157f5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e7365745769746864726177616c4460448201527f656c6179426c6f636b733a206e65775769746864726177616c44656c6179426c60648201526c0dec6d6e640e8dede40d0d2ced609b1b608482015260a401610a35565b609d5460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a1609d55565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c9190615157565b6116485760405162461bcd60e51b8152600401610a3590615174565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008160405160200161169a9190615263565b604051602081830303815290604052805190602001209050919050565b60005b815181101561195e5760008282815181106116d7576116d7614f62565b602002602001015190506000807f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663cd293f6f846040518263ffffffff1660e01b81526004016117309190615276565b60408051808303816000875af115801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190615325565b915091508115611950576040808401516001600160a01b0381166000908152609f602052918220805491928291906117a983614ff7565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff1681526020018760000151815260200187602001518152509050600061182982611687565b6000818152609e602052604090205490915060ff16156118bf5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610a35565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061190a9083908590615353565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116ba565b5050565b6066546002906004908116141561198b5760405162461bcd60e51b8152600401610a3590614f2b565b600260c95414156119de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a35565b600260c9556119f08686868686613668565b5050600160c95550505050565b6001600160a01b0390811660009081526099602052604090205416151590565b611a25613ce2565b611a2f600061359b565b565b4283602001511015611ab55760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610a35565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611af18783888860200151611c08565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b219088908390613d3c565b611b2d87878686612e39565b50505050505050565b611b3f336119fd565b611bc15760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610a35565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611bfc929190615064565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611c7e612653565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f909116906360f4062b90602401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d55919061536c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa158015611dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ded91908101906153e0565b9150915060008313611e0457909590945092505050565b606080835160001415611ebe576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611e7957611e79614f62565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611ead57611ead614f62565b60200260200101818152505061206c565b8351611ecb9060016154a4565b6001600160401b03811115611ee257611ee26146e6565b604051908082528060200260200182016040528015611f0b578160200160208202803683370190505b50915081516001600160401b03811115611f2757611f276146e6565b604051908082528060200260200182016040528015611f50578160200160208202803683370190505b50905060005b8451811015611fea57848181518110611f7157611f71614f62565b6020026020010151838281518110611f8b57611f8b614f62565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611fbd57611fbd614f62565b6020026020010151828281518110611fd757611fd7614f62565b6020908102919091010152600101611f56565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0826001845161200f91906154bc565b8151811061201f5761201f614f62565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001845161204f91906154bc565b8151811061205f5761205f614f62565b6020026020010181815250505b9097909650945050505050565b606654600090600190600290811614156120a55760405162461bcd60e51b8152600401610a3590614f2b565b6120ae836114c9565b61212e5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610a35565b6001600160a01b038084166000908152609a602052604090205416612152846119fd565b156121c55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610a35565b6001600160a01b0384166122415760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610a35565b336001600160a01b03851614806122605750336001600160a01b038216145b8061228757506001600160a01b038181166000908152609960205260409020600101541633145b6122f95760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610a35565b60008061230586611cc1565b9092509050336001600160a01b0387161461235b57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b03191690556123ce86848185856127ed565b9695505050505050565b6123e0613ce2565b60a0546001600160a01b03161561245f5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e7365745374616b6552656769737460448201527f72793a207374616b65526567697374727920616c7265616479207365740000006064820152608401610a35565b6001600160a01b0381166124ec5760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e7365745374616b6552656769737460448201527f72793a207374616b6552656769737472792063616e6e6f74206265207a65726f606482015267206164647265737360c01b608482015260a401610a35565b60a080546001600160a01b0319166001600160a01b0383169081179091556040519081527fce6d874069bceda1867eca9c60636bbf262e15213041658273d803a2b609a51f9060200160405180910390a150565b61104133848484612e39565b612555336119fd565b6125d35760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610a35565b610f833382612b9d565b6125e5613ce2565b6001600160a01b03811661264a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a35565b610f838161359b565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415612684575060975490565b61268c613504565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127089190615093565b6001600160a01b0316336001600160a01b0316146127385760405162461bcd60e51b8152600401610a35906150b0565b6066541981196066541916146127b65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a35565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161117a565b60006001600160a01b0386166128845760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610a35565b60005b8351811015612a93576001600160a01b038616156128dd576128dd86888684815181106128b6576128b6614f62565b60200260200101518685815181106128d0576128d0614f62565b60200260200101516132e9565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b031684828151811061290d5761290d614f62565b60200260200101516001600160a01b031614156129d6577f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031663beffbb898885848151811061296657612966614f62565b60200260200101516040518363ffffffff1660e01b815260040161299f9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b1580156129b957600080fd5b505af11580156129cd573d6000803e3d6000fd5b50505050612a8b565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612a1857612a18614f62565b6020026020010151868581518110612a3257612a32614f62565b60200260200101516040518463ffffffff1660e01b8152600401612a58939291906154d3565b600060405180830381600087803b158015612a7257600080fd5b505af1158015612a86573d6000803e3d6000fd5b505050505b600101612887565b506001600160a01b03851615612aac57612aac85613364565b6001600160a01b0386166000908152609f60205260408120805491829190612ad383614ff7565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612b3b82611687565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612b899083908590615353565b60405180910390a198975050505050505050565b6000612bac60208301836145a5565b6001600160a01b03161415612c465760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610a35565b6213c680612c5a60608301604084016154f7565b63ffffffff161115612d0f5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610a35565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612d4b90606084019084016154f7565b63ffffffff161015612de15760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610a35565b6001600160a01b03821660009081526099602052604090208190612e058282615534565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611bfc908490615012565b60665460009060019081161415612e625760405162461bcd60e51b8152600401610a3590614f2b565b612e6b856114c9565b15612ee85760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610a35565b612ef1846119fd565b612f715760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610a35565b6001600160a01b03808516600090815260996020526040902060010154168015801590612fa75750336001600160a01b03821614155b8015612fbc5750336001600160a01b03861614155b1561312957428460200151101561303b5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610a35565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156130d55760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610a35565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613116908890889085908890610947565b905061312782828760000151613d3c565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061318888611cc1565b9150915060005b82518110156131de576131d6888a8584815181106131af576131af614f62565b60200260200101518585815181106131c9576131c9614f62565b60200260200101516135ed565b60010161318f565b506131e887613364565b5050505050505050565b6001600160a01b0381166132805760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a35565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133209084906154bc565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610ec5939291906154d3565b60a0546001600160a01b031615610f83576040805160018082528183019092526000916020808301908036833701905050905081816000815181106133ab576133ab614f62565b6001600160a01b03928316602091820292909201015260a05460405163ce977ec360e01b815291169063ce977ec3906133e8908490600401615597565b600060405180830381600087803b15801561340257600080fd5b505af1158015613416573d6000803e3d6000fd5b505050505050565b6065546001600160a01b031615801561343f57506001600160a01b03821615155b6134c15760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a35565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261195e826131f2565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906136249084906154a4565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610ec5939291906154d3565b60006136766105e9876155d8565b6000818152609e602052604090205490915060ff166136eb5760405162461bcd60e51b815260206004820152603e602482015260008051602061568883398151915260448201527f416374696f6e3a20616374696f6e206973206e6f7420696e20717565756500006064820152608401610a35565b609d54439061370060a0890160808a016154f7565b63ffffffff1661371091906154a4565b11156137985760405162461bcd60e51b8152602060048201526057602482015260008051602061568883398151915260448201527f416374696f6e3a207769746864726177616c44656c6179426c6f636b7320706560648201527f72696f6420686173206e6f742079657420706173736564000000000000000000608482015260a401610a35565b6137a860608701604088016145a5565b6001600160a01b0316336001600160a01b0316146138305760405162461bcd60e51b815260206004820152604b602482015260008051602061568883398151915260448201527f416374696f6e3a206f6e6c7920776974686472617765722063616e20636f6d7060648201526a3632ba329030b1ba34b7b760a91b608482015260a401610a35565b81156138a75761384360a0870187614f98565b851490506138a75760405162461bcd60e51b815260206004820152603d602482015260008051602061568883398151915260448201527f416374696f6e3a20696e707574206c656e677468206d69736d617463680000006064820152608401610a35565b6000818152609e60205260409020805460ff19169055811561397d5760005b6138d360a0880188614f98565b90508110156139775761396f6138ec60208901896145a5565b336138fa60a08b018b614f98565b8581811061390a5761390a614f62565b905060200201602081019061391f91906145a5565b61392c60c08c018c614f98565b8681811061393c5761393c614f62565b905060200201358a8a8781811061395557613955614f62565b905060200201602081019061396a91906145a5565b613ef6565b6001016138c6565b50613ca7565b336000908152609a60205260408120546001600160a01b0316905b6139a560a0890189614f98565b9050811015613c9b5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06139d060a08a018a614f98565b838181106139e0576139e0614f62565b90506020020160208101906139f591906145a5565b6001600160a01b03161415613b4e576000613a1360208a018a6145a5565b905060006001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16630e81073c83613a5460c08e018e614f98565b87818110613a6457613a64614f62565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adc919061536c565b6001600160a01b038084166000908152609a6020526040902054919250168015613b4657613b3d8184613b1260a08f018f614f98565b88818110613b2257613b22614f62565b9050602002016020810190613b3791906145a5565b856135ed565b613b4681613364565b505050613c93565b6001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9166350ff722533613b8b60a08c018c614f98565b85818110613b9b57613b9b614f62565b9050602002016020810190613bb091906145a5565b613bbd60c08d018d614f98565b86818110613bcd57613bcd614f62565b905060200201356040518463ffffffff1660e01b8152600401613bf2939291906154d3565b600060405180830381600087803b158015613c0c57600080fd5b505af1158015613c20573d6000803e3d6000fd5b505050506001600160a01b03821615613c9357613c938233613c4560a08c018c614f98565b85818110613c5557613c55614f62565b9050602002016020810190613c6a91906145a5565b613c7760c08d018d614f98565b86818110613c8757613c87614f62565b905060200201356135ed565b600101613998565b50613ca581613364565b505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6033546001600160a01b03163314611a2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a35565b6001600160a01b0383163b15613e5657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90613d7c90869086906004016155ea565b602060405180830381865afa158015613d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dbd9190615647565b6001600160e01b031916146110415760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610a35565b826001600160a01b0316613e6a838361403b565b6001600160a01b0316146110415760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610a35565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac01415613fa15760405162387b1360e81b81526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063387b130090613f6a908890889087906004016154d3565b600060405180830381600087803b158015613f8457600080fd5b505af1158015613f98573d6000803e3d6000fd5b50505050614034565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b15801561401b57600080fd5b505af115801561402f573d6000803e3d6000fd5b505050505b5050505050565b600080600061404a858561405f565b91509150614057816140cf565b509392505050565b6000808251604114156140965760208301516040840151606085015160001a61408a8782858561428a565b945094505050506140c8565b8251604014156140c057602083015160408401516140b5868383614377565b9350935050506140c8565b506000905060025b9250929050565b60008160048111156140e3576140e3615671565b14156140ec5750565b600181600481111561410057614100615671565b141561414e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a35565b600281600481111561416257614162615671565b14156141b05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a35565b60038160048111156141c4576141c4615671565b141561421d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a35565b600481600481111561423157614231615671565b1415610f835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156142c1575060009050600361436e565b8460ff16601b141580156142d957508460ff16601c14155b156142ea575060009050600461436e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561433e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166143675760006001925092505061436e565b9150600090505b94509492505050565b6000806001600160ff1b0383168161439460ff86901c601b6154a4565b90506143a28782888561428a565b935093505050935093915050565b6001600160a01b0381168114610f8357600080fd5b80356143d0816143b0565b919050565b600080600080600060a086880312156143ed57600080fd5b85356143f8816143b0565b94506020860135614408816143b0565b93506040860135614418816143b0565b94979396509394606081013594506080013592915050565b60008083601f84011261444257600080fd5b5081356001600160401b0381111561445957600080fd5b6020830191508360208260051b85010111156140c857600080fd5b6000806020838503121561448757600080fd5b82356001600160401b0381111561449d57600080fd5b6144a985828601614430565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156144ed578351835292840192918401916001016144d1565b50909695505050505050565b60006060828403121561450b57600080fd5b50919050565b60008083601f84011261452357600080fd5b5081356001600160401b0381111561453a57600080fd5b6020830191508360208285010111156140c857600080fd5b60008060006080848603121561456757600080fd5b61457185856144f9565b925060608401356001600160401b0381111561458c57600080fd5b61459886828701614511565b9497909650939450505050565b6000602082840312156145b757600080fd5b81356145c2816143b0565b9392505050565b6000806000606084860312156145de57600080fd5b83356145e9816143b0565b925060208401356145f9816143b0565b929592945050506040919091013590565b60006020828403121561461c57600080fd5b5035919050565b6000806000806000806000806080898b03121561463f57600080fd5b88356001600160401b038082111561465657600080fd5b6146628c838d01614430565b909a50985060208b013591508082111561467b57600080fd5b6146878c838d01614430565b909850965060408b01359150808211156146a057600080fd5b6146ac8c838d01614430565b909650945060608b01359150808211156146c557600080fd5b506146d28b828c01614430565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561471e5761471e6146e6565b60405290565b604080519081016001600160401b038111828210171561471e5761471e6146e6565b60405160c081016001600160401b038111828210171561471e5761471e6146e6565b604051601f8201601f191681016001600160401b0381118282101715614790576147906146e6565b604052919050565b63ffffffff81168114610f8357600080fd5b80356143d081614798565b60006001600160401b038211156147ce576147ce6146e6565b5060051b60200190565b600082601f8301126147e957600080fd5b813560206147fe6147f9836147b5565b614768565b82815260059290921b8401810191818101908684111561481d57600080fd5b8286015b84811015614841578035614834816143b0565b8352918301918301614821565b509695505050505050565b600082601f83011261485d57600080fd5b8135602061486d6147f9836147b5565b82815260059290921b8401810191818101908684111561488c57600080fd5b8286015b848110156148415780358352918301918301614890565b600060e082840312156148b957600080fd5b6148c16146fc565b90506148cc826143c5565b81526148da602083016143c5565b60208201526148eb604083016143c5565b604082015260608201356060820152614906608083016147aa565b608082015260a08201356001600160401b038082111561492557600080fd5b614931858386016147d8565b60a084015260c084013591508082111561494a57600080fd5b506149578482850161484c565b60c08301525092915050565b60006020828403121561497557600080fd5b81356001600160401b0381111561498b57600080fd5b614997848285016148a7565b949350505050565b6000602082840312156149b157600080fd5b813560ff811681146145c257600080fd5b6000604082840312156149d457600080fd5b6149dc614724565b905081356149e9816143b0565b815260208201356bffffffffffffffffffffffff81168114614a0a57600080fd5b602082015292915050565b60006020808385031215614a2857600080fd5b82356001600160401b0380821115614a3f57600080fd5b818501915085601f830112614a5357600080fd5b8135614a616147f9826147b5565b81815260059190911b83018401908481019088831115614a8057600080fd5b8585015b83811015614b5a57803585811115614a9c5760008081fd5b860160e0818c03601f1901811315614ab45760008081fd5b614abc614746565b8983013588811115614ace5760008081fd5b614adc8e8c838701016147d8565b82525060408084013589811115614af35760008081fd5b614b018f8d8388010161484c565b8c840152506060614b138186016143c5565b8284015260809150614b278f8387016149c2565b90830152614b3760c085016147aa565b90820152614b468383016143c5565b60a082015285525050918601918601614a84565b5098975050505050505050565b8015158114610f8357600080fd5b600080600080600060808688031215614b8d57600080fd5b85356001600160401b0380821115614ba457600080fd5b9087019060e0828a031215614bb857600080fd5b90955060208701359080821115614bce57600080fd5b50614bdb88828901614430565b909550935050604086013591506060860135614bf681614b67565b809150509295509295909350565b60008060408385031215614c1757600080fd5b8235614c22816143b0565b91506020830135614c32816143b0565b809150509250929050565b600060408284031215614c4f57600080fd5b614c57614724565b905081356001600160401b0380821115614c7057600080fd5b818401915084601f830112614c8457600080fd5b8135602082821115614c9857614c986146e6565b614caa601f8301601f19168201614768565b92508183528681838601011115614cc057600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a08688031215614cfd57600080fd5b8535614d08816143b0565b94506020860135614d18816143b0565b935060408601356001600160401b0380821115614d3457600080fd5b614d4089838a01614c3d565b94506060880135915080821115614d5657600080fd5b50614d6388828901614c3d565b95989497509295608001359392505050565b60008060208385031215614d8857600080fd5b82356001600160401b03811115614d9e57600080fd5b6144a985828601614511565b60008060408385031215614dbd57600080fd5b8235614dc8816143b0565b946020939093013593505050565b60008060008060808587031215614dec57600080fd5b8435614df7816143b0565b9350602085013592506040850135614e0e816143b0565b9396929550929360600135925050565b600081518084526020808501945080840160005b83811015614e575781516001600160a01b031687529582019590820190600101614e32565b509495945050505050565b600081518084526020808501945080840160005b83811015614e5757815187529582019590820190600101614e76565b604081526000614ea56040830185614e1e565b82810360208401526112d38185614e62565b600080600060608486031215614ecc57600080fd5b8335614ed7816143b0565b925060208401356001600160401b03811115614ef257600080fd5b614efe86828701614c3d565b925050604084013590509250925092565b600060608284031215614f2157600080fd5b6145c283836144f9565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112614f8e57600080fd5b9190910192915050565b6000808335601e19843603018112614faf57600080fd5b8301803591506001600160401b03821115614fc957600080fd5b6020019150600581901b36038213156140c857600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561500b5761500b614fe1565b5060010190565b606081018235615021816143b0565b6001600160a01b03908116835260208401359061503d826143b0565b166020830152604083013561505181614798565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156150a557600080fd5b81516145c2816143b0565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561516957600080fd5b81516145c281614b67565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de19833603018112614f8e57600080fd5b6000602082840312156151e457600080fd5b81356145c281614b67565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261524a60e0850182614e1e565b905060c083015184820360c08601526112d38282614e62565b6020815260006145c260208301846151ef565b602081526000825160e06020840152615293610100840182614e1e565b90506020840151601f198483030160408501526152b08282614e62565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a085015250608084015161530860c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152509392505050565b6000806040838503121561533857600080fd5b825161534381614b67565b6020939093015192949293505050565b82815260406020820152600061499760408301846151ef565b60006020828403121561537e57600080fd5b5051919050565b600082601f83011261539657600080fd5b815160206153a66147f9836147b5565b82815260059290921b840181019181810190868411156153c557600080fd5b8286015b8481101561484157805183529183019183016153c9565b600080604083850312156153f357600080fd5b82516001600160401b038082111561540a57600080fd5b818501915085601f83011261541e57600080fd5b8151602061542e6147f9836147b5565b82815260059290921b8401810191818101908984111561544d57600080fd5b948201945b83861015615474578551615465816143b0565b82529482019490820190615452565b9188015191965090935050508082111561548d57600080fd5b5061549a85828601615385565b9150509250929050565b600082198211156154b7576154b7614fe1565b500190565b6000828210156154ce576154ce614fe1565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561550957600080fd5b81356145c281614798565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561553f816143b0565b6155498183615514565b5060018101602083013561555c816143b0565b6155668183615514565b50604083013561557581614798565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6020808252825182820181905260009190848201906040850190845b818110156144ed5783516001600160a01b0316835292840192918401916001016155b3565b60006155e436836148a7565b92915050565b82815260006020604081840152835180604085015260005b8181101561561e57858101830151858201606001528201615602565b81811115615630576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561565957600080fd5b81516001600160e01b0319811681146145c257600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e636f6d706c657465517565756564a2646970667358221220cdfcc1af5fed5190052ce3d637e549cf07d10070c3b14546ab58e142da57c70d64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x67d269191c92caf3cd7723f116c85e6e9bf55933":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212204a96a80baf00bab2a09f4228456ebbd097405a873d7029b8462396eaa657617564736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x4a679253410272dd5232b3ff7cf5dbb88f295319","0x64":"0xde0b6b3a7640000","0x65":"0x56bc75e2d63100000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xc6e7df5e7b4f2a278906862b61205850344d4e7d","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x84ea74d481ee0a5332c457a4d796187f6ba67feb":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x67d269191c92caf3cd7723f116c85e6e9bf55933","0x66":"0x0","0x9b":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x9c":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x36c02da8a0983159322a80ffe9f24b1acff8b570","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc5a5c42992decbae36851359345fe25997f5c42d"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x0":"0x10001","0x33":"0x0","0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0xde0b6b3a76400007a2088a1bfc9d81c55368ae168c2c02570cb814f","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xf5059a5d33d5853360d16c683c16e67980206f36","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc5a5c42992decbae36851359345fe25997f5c42d"}},"0x860b6912c2d0337ef05bbc89b0c2cb6cbaeab4a5":{"nonce":0,"balance":"0x8ac7230489e80000","code":"0x","storage":{}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea2646970667358221220a22223d3e2a2d861ad54e68b7bc44b4d82a5a12a0bcca5c3404502bb1b430c5c64736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x998abeb3e57409262ae5b751f60747921b33613e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102485760003560e01c8063595c6a671161013b578063ab269b2d116100b8578063d72d8dd61161007c578063d72d8dd614610632578063e65797ad1461063a578063f807d627146106dd578063fabc1cbc146106f0578063fd39105a1461070357600080fd5b8063ab269b2d146105ab578063b1344271146105be578063c66ab9ca146105e5578063c81b1ff4146105f8578063ca0de8821461060b57600080fd5b806368304835116100ff578063683048351461051157806385020d4914610538578063886f1195146105585780639e9923c214610571578063a79323f61461059857600080fd5b8063595c6a67146104bc5780635ac86ab7146104c45780635b0b829f146104e35780635c975abb146104f65780636347c900146104fe57600080fd5b8063296bb064116101c95780633561deb11161018d5780633561deb1146104285780633998fdd31461044f5780634b76b9d514610476578063526ea94e146104895780635865c60c1461049c57600080fd5b8063296bb064146103b157806329d1e0c3146103c45780632cdd1e86146103d75780633064620d146103ea5780633431af251461041557600080fd5b806313542a4e1161021057806313542a4e1461031c578063136439dd146103455780631478851f14610358578063250075761461038b57806328f61b311461039e57600080fd5b80630159f1ce1461024d578063054310e61461029b578063055a62b6146102c65780630cf4b767146102f457806310d67a2f14610309575b600080fd5b61026061025b366004613de5565b61073f565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060015b60405180910390f35b6037546102ae906001600160a01b031681565b6040516001600160a01b039091168152602001610292565b6102e66102d4366004613e07565b60009081526033602052604090205490565b604051908152602001610292565b610307610302366004613f0c565b6107d0565b005b610307610317366004613f65565b6108d1565b6102e661032a366004613f65565b6001600160a01b031660009081526034602052604090205490565b610307610353366004613e07565b610984565b61037b610366366004613e07565b60356020526000908152604090205460ff1681565b6040519015158152602001610292565b610307610399366004614080565b610ac1565b6038546102ae906001600160a01b031681565b6102ae6103bf366004613e07565b6111f1565b6103076103d2366004613f65565b61127d565b6103076103e5366004613f65565b611338565b6103fd6103f8366004614194565b6113f3565b6040516001600160c01b039091168152602001610292565b6103fd610423366004613e07565b6115f4565b6102ae7f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc981565b6102ae7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe6369081565b610307610484366004614254565b6116aa565b610307610497366004614331565b6119d6565b6104af6104aa366004613f65565b611a27565b60405161029291906143d4565b610307611a9b565b61037b6104d2366004614407565b6001805460ff9092161b9081161490565b6103076104f1366004614422565b611b67565b6001546102e6565b6102ae61050c366004613e07565b611c27565b6102ae7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61054b6105463660046144bc565b611c51565b604051610292919061450b565b6000546102ae906201000090046001600160a01b031681565b6102ae7f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e881565b6103076105a6366004614555565b611f8c565b6102e66105b936600461462c565b61201f565b6102ae7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b6103076105f33660046146e0565b612083565b610307610606366004614331565b6120ee565b6102e67fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9281565b6036546102e6565b6106a9610648366004614407565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526032825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff908116918301919091529282015190921690820152606001610292565b6103076106eb366004614764565b612135565b6103076106fe366004613e07565b612169565b610732610711366004613f65565b6001600160a01b031660009081526034602052604090206001015460ff1690565b60405161029291906147e1565b6040805160608101825260008082526020820181905291810191909152600083815260336020526040902080548390811061077c5761077c6147ef565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b60013360009081526034602052604090206001015460ff1660028111156107f9576107f961439c565b146108855760405162461bcd60e51b815260206004820152604b60248201527f424c535265676973747279436f6f7264696e61746f7257697468496e6469636960448201527f65732e757064617465536f636b65743a206f70657261746f72206973206e6f7460648201526a081c9959da5cdd195c995960aa1b608482015260a4015b60405180910390fd5b33600090815260346020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa906108c6908490614861565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109489190614874565b6001600160a01b0316336001600160a01b0316146109785760405162461bcd60e51b815260040161087c90614891565b610981816122c5565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f591906148db565b610a115760405162461bcd60e51b815260040161087c906148fd565b60015481811614610a8a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020016108c6565b600180546000919081161415610ae95760405162461bcd60e51b815260040161087c90614945565b6000610b2e338b8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123ca92505050565b6040805160018082528183019092529192506000919060208083019080368337019050509050610b5d89612a1d565b81600081518110610b7057610b706147ef565b602002602001018181525050610bf381600081518110610b9257610b926147ef565b60200260200101518787808060200260200160405190810160405280939291908181526020016000905b82821015610be857610bd96080830286013681900381019061497c565b81526020019060010190610bbc565b505050505086612a60565b6000805b8b8110156111e25760008d8d83818110610c1357610c136147ef565b919091013560f81c6000818152603260209081526040918290208251606081018452905463ffffffff811680835261ffff600160201b8304811694840194909452600160301b90910490921692810192909252885192945090925090879085908110610c8157610c816147ef565b602002602001015163ffffffff1611610c9b5750506111d0565b8160ff168a8a86818110610cb157610cb16147ef565b610cc79260206080909202019081019150614407565b60ff1614610d605760405162461bcd60e51b81526020600482015260666024820152600080516020614f6a83398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a2071756f72756d4e756d626572206e6f74207468652073616d65206173206084820152651cda59db995960d21b60a482015260c40161087c565b604051630c8f739d60e41b815260ff831660048201526000907f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03169063c8f739d090602401602060405180830381865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190614998565b90506000603460008d8d88818110610e0857610e086147ef565b9050608002016020016020810190610e209190613f65565b6001600160a01b039081168252602082019290925260409081016000908120549151631aad4e3560e21b81526004810183905260ff88166024820152919350917f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1690636ab538d490604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd9190614998565b905060007f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316636ab538d48a600081518110610f1357610f136147ef565b6020026020010151886040518363ffffffff1660e01b8152600401610f4592919091825260ff16602082015260400190565b602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190614998565b602086015190915061271090610fa09061ffff16846149d7565b610faa9190614a06565b6001600160601b0316816001600160601b03161161106a5760405162461bcd60e51b815260206004820152607d6024820152600080516020614f6a83398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a207265676973746572696e67206f70657261746f7220686173206c65737360848201527f207468616e206b69636b424950734f664f70657261746f725374616b6500000060a482015260c40161087c565b6040850151612710906110819061ffff16866149d7565b61108b9190614a06565b6001600160601b0316826001600160601b0316106111445760405162461bcd60e51b81526020600482015260766024820152600080516020614f6a83398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a206f70657261746f7220746f206b69636b20686173206d6f7265207468616084820152756e206b69636b424950534f66546f74616c5374616b6560501b60a482015260c40161087c565b8761114e81614a3a565b9850505050505050506111d088888381811061116c5761116c6147ef565b90506080020160200160208101906111849190613f65565b8e838f611192826001614a55565b9261119f93929190614a6d565b8b8b868181106111b1576111b16147ef565b9050608002016040018036038101906111ca9190614a97565b87612c2d565b806111da81614a3a565b915050610bf7565b50505050505050505050505050565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc96001600160a01b0316906347b314e890602401602060405180830381865afa158015611259573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ca9190614874565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190614874565b6001600160a01b0316336001600160a01b03161461132f5760405162461bcd60e51b815260040161087c90614ab3565b610981816131dd565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614874565b6001600160a01b0316336001600160a01b0316146113ea5760405162461bcd60e51b815260040161087c90614ab3565b61098181613246565b6000838152603360205260408120805482919084908110611416576114166147ef565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156115165760405162461bcd60e51b815260206004820152607f6024820152600080516020614f6a83398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d20616674657220626c6f636b4e756d6265720060a482015260c40161087c565b8363ffffffff16816020015163ffffffff16118061153c5750602081015163ffffffff16155b6115e85760405162461bcd60e51b81526020600482015260806024820152600080516020614f6a83398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d206265666f726520626c6f636b4e756d62657260a482015260c40161087c565b60400151949350505050565b60008181526033602052604081205480158061165057506000838152603360205260409020611624600183614b2f565b81548110611634576116346147ef565b600091825260209091200154600160201b900463ffffffff1615155b1561165e5750600092915050565b6000838152603360205260409020611677600183614b2f565b81548110611687576116876147ef565b600091825260209091200154600160401b90046001600160c01b03169392505050565b600054610100900460ff16158080156116ca5750600054600160ff909116105b806116e45750303b1580156116e4575060005460ff166001145b6117475760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161087c565b6000805460ff19166001179055801561176a576000805461ff0019166101001790555b61177483836132af565b61177d866131dd565b61178685613246565b603680546001808201835560008390527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b891820180546001600160a01b03199081167f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03908116918217909355855480850187558501805483167f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc9851617905585549384019095559190920180549091167f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8909216919091179055845160408051639aa1653d60e01b81529051919291639aa1653d916004808201926020929091908290030181865afa1580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190614b46565b61ffff16146119405760405162461bcd60e51b81526020600482015260466024820152600080516020614f6a83398151915260448201527f733a206f70657261746f722073657420706172616d73206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a40161087c565b60005b84518160ff1610156119875761197581868360ff1681518110611968576119686147ef565b602002602001015161339b565b8061197f81614b63565b915050611943565b5080156119ce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6001805460009190811614156119fe5760405162461bcd60e51b815260040161087c90614945565b600080611a0d84860186614b83565b91509150611a1e3388888585613448565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152603460209081526040918290208251808401909352805483526001810154909183019060ff166002811115611a8157611a8161439c565b6002811115611a9257611a9261439c565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c91906148db565b611b285760405162461bcd60e51b815260040161087c906148fd565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be99190614874565b6001600160a01b0316336001600160a01b031614611c195760405162461bcd60e51b815260040161087c90614ab3565b611c23828261339b565b5050565b60368181548110611c3757600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600082516001600160401b03811115611c6e57611c6e613e20565b604051908082528060200260200182016040528015611c97578160200160208202803683370190505b50905060005b8351811015611f8457600060336000868481518110611cbe57611cbe6147ef565b6020026020010151815260200190815260200160002080549050905060005b8163ffffffff168163ffffffff161015611f6f578663ffffffff1660336000888681518110611d0e57611d0e6147ef565b6020026020010151815260200190815260200160002060018385611d329190614bc7565b611d3c9190614bc7565b63ffffffff1681548110611d5257611d526147ef565b60009182526020909120015463ffffffff1611611f5d5760336000878581518110611d7f57611d7f6147ef565b6020026020010151815260200190815260200160002060018284611da39190614bc7565b611dad9190614bc7565b63ffffffff1681548110611dc357611dc36147ef565b600091825260209091200154600160201b900463ffffffff161580611e5f57508663ffffffff1660336000888681518110611e0057611e006147ef565b6020026020010151815260200190815260200160002060018385611e249190614bc7565b611e2e9190614bc7565b63ffffffff1681548110611e4457611e446147ef565b600091825260209091200154600160201b900463ffffffff16115b611f165760405162461bcd60e51b81526020600482015260826024820152600080516020614f6a83398151915260448201527f732e67657451756f72756d4269746d6170496e646963657342794f706572617460648201527f6f724964734174426c6f636b4e756d6265723a206f70657261746f724964206860848201527f6173206e6f2071756f72756d4269746d61707320617420626c6f636b4e756d6260a48201526132b960f11b60c482015260e40161087c565b6001611f228284614bc7565b611f2c9190614bc7565b848481518110611f3e57611f3e6147ef565b602002602001019063ffffffff16908163ffffffff1681525050611f6f565b80611f6781614bec565b915050611cdd565b50508080611f7c90614a3a565b915050611c9d565b509392505050565b6038546001600160a01b0316331461200b5760405162461bcd60e51b81526020600482015260486024820152600080516020614f6a83398151915260448201527f732e6f6e6c79456a6563746f723a2063616c6c6572206973206e6f74207468656064820152671032b532b1ba37b960c11b608482015260a40161087c565b6120188585858585612c2d565b5050505050565b60006120787fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d928686868660405160200161205d959493929190614c10565b6040516020818303038152906040528051906020012061355f565b90505b949350505050565b6001805460009190811614156120ab5760405162461bcd60e51b815260040161087c90614945565b6119ce3387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061344892505050565b60018054600290811614156121155760405162461bcd60e51b815260040161087c90614945565b60008061212484860186614ca4565b91509150611a1e3388888585612c2d565b600180546002908116141561215c5760405162461bcd60e51b815260040161087c90614945565b6120183386868686612c2d565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e09190614874565b6001600160a01b0316336001600160a01b0316146122105760405162461bcd60e51b815260040161087c90614891565b60015419811960015419161461228e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108c6565b6001600160a01b0381166123535760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161087c565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060600061240d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ad92505050565b90506001600160c01b038111156124a25760405162461bcd60e51b815260206004820152606b6024820152600080516020614f6a8339815191526044820152600080516020614f4a83398151915260648201527f6f723a2071756f72756d4269746d61702065786365656473206f66206d61782060848201526a6269746d61702073697a6560a81b60a482015260c40161087c565b806125175760405162461bcd60e51b815260206004820152605c6024820152600080516020614f6a8339815191526044820152600080516020614f4a83398151915260648201527f6f723a2071756f72756d4269746d61702063616e6e6f74206265203000000000608482015260a40161087c565b6040516303ce4bad60e01b81526000906001600160a01b037f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc916906303ce4bad9061256c908b908b908b908b90600401614d05565b6020604051808303816000875af115801561258b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125af9190614d42565b604051632550477760e01b81529091506001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1690632550477790612604908b9085908c908c90600401614d5b565b600060405180830381600087803b15801561261e57600080fd5b505af1158015612632573d6000803e3d6000fd5b505060405162bff04d60e01b8152600092506001600160a01b037f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e816915062bff04d906126879085908c908c90600401614d8d565b6000604051808303816000875af11580156126a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126ce9190810190614da7565b600083815260336020526040902054909150801580159061272e57506000838152603360205260409020612703600183614b2f565b81548110612713576127136147ef565b600091825260209091200154600160201b900463ffffffff16155b1561288557600083815260336020526040812061274c600184614b2f565b8154811061275c5761275c6147ef565b6000918252602090912001546001600160c01b03600160401b9091048181169250861616156128295760405162461bcd60e51b81526020600482015260856024820152600080516020614f6a8339815191526044820152600080516020614f4a83398151915260648201527f6f723a206f70657261746f7220616c726561647920726567697374657265642060848201527f666f7220736f6d652071756f72756d73206265696e672072656769737465726560a48201526432103337b960d91b60c482015260e40161087c565b6000848152603360205260409020948117944390612848600185614b2f565b81548110612858576128586147ef565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff160217905550505b6000838152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038b8116848701908152855460018082018855968a52888a2095519501805493519151909216600160401b026001600160401b03918516600160201b0267ffffffffffffffff19909416959094169490941791909117929092161790556001600160a01b038e168452603490925290912081015460ff16600281111561293d5761293d61439c565b146129d657604080518082018252848152600160208083018281526001600160a01b038f166000908152603490925293902082518155925183820180549394939192909160ff1916908360028111156129985761299861439c565b0217905550506040518491506001600160a01b038c16907fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b827fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051612a069190614861565b60405180910390a250925050505b95945050505050565b600081600001518260200151604051602001612a43929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60208082015160009081526035909152604090205460ff1615612b255760405162461bcd60e51b81526020600482015260776024820152600080516020614f6a83398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f7665722073616c7420616c7265616479207573656400000000000000000060a482015260c40161087c565b4281604001511015612bd95760405162461bcd60e51b81526020600482015260776024820152600080516020614f6a83398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f766572207369676e6174757265206578706972656400000000000000000060a482015260c40161087c565b6020808201805160009081526035909252604091829020805460ff19166001179055603754905191830151612c28926001600160a01b0390921691612c21918791879161201f565b835161373a565b505050565b60016001600160a01b03861660009081526034602052604090206001015460ff166002811115612c5f57612c5f61439c565b14612ce65760405162461bcd60e51b81526020600482015260606024820152600080516020614f6a83398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f742072656769737465726564608482015260a40161087c565b6001600160a01b038516600090815260346020526040902054612d0883612a1d565b8114612da45760405162461bcd60e51b815260206004820152606b6024820152600080516020614f6a83398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72496420646f6573206e6f74206d617463682060848201526a0e0eac4d6caf240d0c2e6d60ab1b60a482015260c40161087c565b6000612de586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ad92505050565b60008381526033602052604081205491925090612e0490600190614b2f565b60008481526033602052604081208054929350909183908110612e2957612e296147ef565b6000918252602082200154600160401b90049384166001600160c01b0390811694169150612e56846138f4565b9050805160001415612f0a5760405162461bcd60e51b81526020600482015260806024820152600080516020614f6a83398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f74207265676973746572656460848201527f20666f7220616e79206f66207468652070726f76696465642071756f72756d7360a482015260c40161087c565b60405163121b4d9560e11b81526001600160c01b0383168514906001600160a01b037f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc916906324369b2a90612f67908e9086908d90600401614e40565b600060405180830381600087803b158015612f8157600080fd5b505af1158015612f95573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16925063bd29b8cd9150612fe79089908690600401614e7c565b600060405180830381600087803b15801561300157600080fd5b505af1158015613015573d6000803e3d6000fd5b5050604051630854259f60e01b81526001600160a01b037f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169250630854259f915061306990899086908c90600401614e95565b600060405180830381600087803b15801561308357600080fd5b505af1158015613097573d6000803e3d6000fd5b50505060008781526033602052604090208054439250869081106130bd576130bd6147ef565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff16021790555080613181576000868152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038c198b168116958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556131d0565b6001600160a01b038b16600081815260346020526040808220600101805460ff19166002179055518892917f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e491a35b5050505050505050505050565b603754604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1603780546001600160a01b0319166001600160a01b0392909216919091179055565b603854604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1603880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546201000090046001600160a01b03161580156132d657506001600160a01b03821615155b6133585760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611c23826122c5565b60ff8216600081815260326020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b600061345786868686866123ca565b905060005b8151811015611a1e576032600087878481811061347b5761347b6147ef565b919091013560f81c825250602081019190915260400160002054825163ffffffff909116908390839081106134b2576134b26147ef565b602002602001015163ffffffff16111561354d5760405162461bcd60e51b815260206004820152606e6024820152600080516020614f6a8339815191526044820152600080516020614f4a83398151915260648201527f6f72416e644e6f4f76657266696c6c656451756f72756d733a2071756f72756d60848201526d081a5cc81bdd995c999a5b1b195960921b60a482015260c40161087c565b8061355781614a3a565b91505061345c565b60006107ca61356c613951565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000610100825111156136365760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161087c565b815161364457506000919050565b6000808360008151811061365a5761365a6147ef565b0160200151600160f89190911c81901b92505b845181101561373157848181518110613688576136886147ef565b0160200151600160f89190911c1b915082821161371d5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161087c565b9181179161372a81614a3a565b905061366d565b50909392505050565b6001600160a01b0383163b1561385457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061377a9086908690600401614e7c565b602060405180830381865afa158015613797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bb9190614ef0565b6001600160e01b03191614612c285760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161087c565b826001600160a01b03166138688383613a78565b6001600160a01b031614612c285760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161087c565b60606000805b61010081101561394a576001811b91508382161561393a57828160f81b604051602001613928929190614f1a565b60405160208183030381529060405292505b61394381614a3a565b90506138fa565b5050919050565b6000306001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e161480156139aa57507f0000000000000000000000000000000000000000000000000000000000007a6946145b156139d457507f4722b021648aeef9ce065bae7f04ff27be0ea604ef6f437aca779598df5e127f90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000613a878585613a94565b91509150611f8481613b04565b600080825160411415613acb5760208301516040840151606085015160001a613abf87828585613cbf565b94509450505050613afd565b825160401415613af55760208301516040840151613aea868383613dac565b935093505050613afd565b506000905060025b9250929050565b6000816004811115613b1857613b1861439c565b1415613b215750565b6001816004811115613b3557613b3561439c565b1415613b835760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087c565b6002816004811115613b9757613b9761439c565b1415613be55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087c565b6003816004811115613bf957613bf961439c565b1415613c525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087c565b6004816004811115613c6657613c6661439c565b14156109815760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161087c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613cf65750600090506003613da3565b8460ff16601b14158015613d0e57508460ff16601c14155b15613d1f5750600090506004613da3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613d73573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d9c57600060019250925050613da3565b9150600090505b94509492505050565b6000806001600160ff1b03831681613dc960ff86901c601b614a55565b9050613dd787828885613cbf565b935093505050935093915050565b60008060408385031215613df857600080fd5b50508035926020909101359150565b600060208284031215613e1957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613e5857613e58613e20565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613e8657613e86613e20565b604052919050565b60006001600160401b03831115613ea757613ea7613e20565b613eba601f8401601f1916602001613e5e565b9050828152838383011115613ece57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613ef657600080fd5b613f0583833560208501613e8e565b9392505050565b600060208284031215613f1e57600080fd5b81356001600160401b03811115613f3457600080fd5b61207b84828501613ee5565b6001600160a01b038116811461098157600080fd5b8035613f6081613f40565b919050565b600060208284031215613f7757600080fd5b8135613f0581613f40565b60008083601f840112613f9457600080fd5b5081356001600160401b03811115613fab57600080fd5b602083019150836020828501011115613afd57600080fd5b600060408284031215613fd557600080fd5b604051604081018181106001600160401b0382111715613ff757613ff7613e20565b604052823581526020928301359281019290925250919050565b60006060828403121561402357600080fd5b61402b613e36565b905081356001600160401b0381111561404357600080fd5b8201601f8101841361405457600080fd5b61406384823560208401613e8e565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060c0898b03121561409c57600080fd5b88356001600160401b03808211156140b357600080fd5b6140bf8c838d01613f82565b909a5098508891506140d48c60208d01613fc3565b975060608b01359150808211156140ea57600080fd5b6140f68c838d01613f82565b909750955060808b013591508082111561410f57600080fd5b818b0191508b601f83011261412357600080fd5b81358181111561413257600080fd5b8c60208260071b850101111561414757600080fd5b6020830195508094505060a08b013591508082111561416557600080fd5b506141728b828c01614011565b9150509295985092959890939650565b63ffffffff8116811461098157600080fd5b6000806000606084860312156141a957600080fd5b8335925060208401356141bb81614182565b929592945050506040919091013590565b60006001600160401b038211156141e5576141e5613e20565b5060051b60200190565b61ffff8116811461098157600080fd5b60006060828403121561421157600080fd5b614219613e36565b9050813561422681614182565b81526020820135614236816141ef565b60208201526040820135614249816141ef565b604082015292915050565b600080600080600060a0868803121561426c57600080fd5b853561427781613f40565b945060208681013561428881613f40565b945060408701356001600160401b038111156142a357600080fd5b8701601f810189136142b457600080fd5b80356142c76142c2826141cc565b613e5e565b8181526060918202830184019184820191908c8411156142e657600080fd5b938501935b8385101561430c576142fd8d866141ff565b835293840193918501916142eb565b81985061431a818d01613f55565b9a9d999c50979a6080013598975050505050505050565b6000806000806040858703121561434757600080fd5b84356001600160401b038082111561435e57600080fd5b61436a88838901613f82565b9096509450602087013591508082111561438357600080fd5b5061439087828801613f82565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b600381106143d057634e487b7160e01b600052602160045260246000fd5b9052565b8151815260208083015160408301916143ef908401826143b2565b5092915050565b803560ff81168114613f6057600080fd5b60006020828403121561441957600080fd5b613f05826143f6565b6000806080838503121561443557600080fd5b61443e836143f6565b915061444d84602085016141ff565b90509250929050565b600082601f83011261446757600080fd5b813560206144776142c2836141cc565b82815260059290921b8401810191818101908684111561449657600080fd5b8286015b848110156144b1578035835291830191830161449a565b509695505050505050565b600080604083850312156144cf57600080fd5b82356144da81614182565b915060208301356001600160401b038111156144f557600080fd5b61450185828601614456565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561454957835163ffffffff1683529284019291840191600101614527565b50909695505050505050565b600080600080600060a0868803121561456d57600080fd5b853561457881613f40565b945060208601356001600160401b038082111561459457600080fd5b6145a089838a01613f82565b90965094508491506145b58960408a01613fc3565b935060808801359150808211156145cb57600080fd5b506145d888828901614456565b9150509295509295909350565b6000608082840312156145f757600080fd5b6145ff613e36565b905061460a826143f6565b8152602082013561461a81613f40565b60208201526142498360408401613fc3565b600080600080608080868803121561464357600080fd5b853594506020808701356001600160401b0381111561466157600080fd5b8701601f8101891361467257600080fd5b80356146806142c2826141cc565b81815260079190911b8201830190838101908b83111561469f57600080fd5b928401925b828410156146c5576146b68c856145e5565b825292850192908401906146a4565b989b989a505050506040870135966060013595945050505050565b6000806000806000608086880312156146f857600080fd5b85356001600160401b038082111561470f57600080fd5b61471b89838a01613f82565b90975095508591506147308960208a01613fc3565b9450606088013591508082111561474657600080fd5b5061475388828901613f82565b969995985093965092949392505050565b6000806000806080858703121561477a57600080fd5b84356001600160401b038082111561479157600080fd5b61479d88838901613f82565b90965094508491506147b28860208901613fc3565b935060608701359150808211156147c857600080fd5b506147d587828801614456565b91505092959194509250565b602081016107ca82846143b2565b634e487b7160e01b600052603260045260246000fd5b60005b83811015614820578181015183820152602001614808565b8381111561482f576000848401525b50505050565b6000815180845261484d816020860160208601614805565b601f01601f19169290920160200192915050565b602081526000613f056020830184614835565b60006020828403121561488657600080fd5b8151613f0581613f40565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156148ed57600080fd5b81518015158114613f0557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60006080828403121561498e57600080fd5b613f0583836145e5565b6000602082840312156149aa57600080fd5b81516001600160601b0381168114613f0557600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818516818304811182151516156149fd576149fd6149c1565b02949350505050565b60006001600160601b0380841680614a2e57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b6000600019821415614a4e57614a4e6149c1565b5060010190565b60008219821115614a6857614a686149c1565b500190565b60008085851115614a7d57600080fd5b83861115614a8a57600080fd5b5050820193919092039150565b600060408284031215614aa957600080fd5b613f058383613fc3565b6020808252606290820152600080516020614f6a83398151915260408201527f732e6f6e6c79536572766963654d616e616765724f776e65723a2063616c6c6560608201527f72206973206e6f74207468652073657276696365206d616e61676572206f776e60808201526132b960f11b60a082015260c00190565b600082821015614b4157614b416149c1565b500390565b600060208284031215614b5857600080fd5b8151613f05816141ef565b600060ff821660ff811415614b7a57614b7a6149c1565b60010192915050565b60008060608385031215614b9657600080fd5b614ba08484613fc3565b915060408301356001600160401b03811115614bbb57600080fd5b61450185828601613ee5565b600063ffffffff83811690831681811015614be457614be46149c1565b039392505050565b600063ffffffff80831681811415614c0657614c066149c1565b6001019392505050565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b81811015614c8b578551805160ff168452858101516001600160a01b031686850152840151614c778585018280518252602090810151910152565b509484019460809290920191600101614c3c565b5050606086019790975250505050608001529392505050565b60008060608385031215614cb757600080fd5b614cc18484613fc3565b915060408301356001600160401b038111156144f557600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385168152608060208201819052600090614d2a9083018587614cdc565b83516040840152602084015160608401529050612a14565b600060208284031215614d5457600080fd5b5051919050565b60018060a01b0385168152836020820152606060408201526000614d83606083018486614cdc565b9695505050505050565b838152604060208201526000612078604083018486614cdc565b60006020808385031215614dba57600080fd5b82516001600160401b03811115614dd057600080fd5b8301601f81018513614de157600080fd5b8051614def6142c2826141cc565b81815260059190911b82018301908381019087831115614e0e57600080fd5b928401925b82841015614e35578351614e2681614182565b82529284019290840190614e13565b979650505050505050565b6001600160a01b0384168152608060208201819052600090614e6490830185614835565b8351604084015260208401516060840152905061207b565b82815260406020820152600061207b6040830184614835565b83815260006020606081840152614eaf6060840186614835565b838103604085015284518082528286019183019060005b81811015614ee257835183529284019291840191600101614ec6565b509098975050505050505050565b600060208284031215614f0257600080fd5b81516001600160e01b031981168114613f0557600080fd5b60008351614f2c818460208801614805565b6001600160f81b031993909316919092019081526001019291505056fe732e5f72656769737465724f70657261746f7257697468436f6f7264696e6174424c535265676973747279436f6f7264696e61746f7257697468496e64696365a2646970667358221220a2b65377cbc1c10f488fb544dc0e6934b220942ad626cd9e8d527cb67cb929d064736f6c634300080c0033","storage":{}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cb578063e5db06c014610404578063eb990c5914610424578063ecb7cb1b14610444578063f2fde38b14610471578063fabc1cbc1461049157600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ab57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196b565b6104b1565b005b34801561017e57600080fd5b5061017061018d36600461198f565b61056d565b34801561019e57600080fd5b506101b26101ad36600461196b565b6106ac565b6040516101bf91906119c6565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196b565b6108a7565b3480156101f457600080fd5b5061021c7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f36600461198f565b6109ed565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109fe565b34801561029957600080fd5b506102bd6102a8366004611a13565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac5565b34801561030357600080fd5b506102bd610312366004611a36565b610ad9565b34801561032357600080fd5b50610337610332366004611a36565b610b5c565b6040516101bf9190611a62565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a70565b610bdc565b3480156103a157600080fd5b5061026a61c4e081565b3480156103b757600080fd5b506101706103c636600461198f565b610e9c565b3480156103d757600080fd5b5061026a6103e636600461196b565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041057600080fd5b5061017061041f366004611a36565b610f30565b34801561043057600080fd5b5061017061043f366004611aa9565b610fc5565b34801561045057600080fd5b5061046461045f36600461196b565b6110ed565b6040516101bf9190611aef565b34801561047d57600080fd5b5061017061048c36600461196b565b6111a7565b34801561049d57600080fd5b506101706104ac36600461198f565b61121d565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105289190611b45565b6001600160a01b0316336001600160a01b0316146105615760405162461bcd60e51b815260040161055890611b62565b60405180910390fd5b61056a81611379565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190611bac565b6105f55760405162461bcd60e51b815260040161055890611bce565b6098548181161461066e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610558565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106d98383611c2c565b90508060005b82811015610785576001600160a01b038716600090815260ca6020526040812060010161070c8388611c43565b8154811061071c5761071c611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076291611c43565b4310156107725781925050610785565b508061077d81611c71565b9150506106df565b508060008167ffffffffffffffff8111156107a2576107a2611c8c565b6040519080825280602002602001820160405280156107e757816020015b60408051808201909152600080825260208201528152602001906001900390816107c05790505b509050811561089c5760005b8281101561089a576001600160a01b038916600090815260ca602052604090206001016108208289611c43565b8154811061083057610830611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087c5761087c611c5b565b6020026020010181905250808061089290611c71565b9150506107f3565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d48383611c2c565b905060008167ffffffffffffffff8111156108f1576108f1611c8c565b60405190808252806020026020018201604052801561093657816020015b604080518082019091526000808252602082015281526020019060019003908161090f5790505b50905060005b828110156109e3576001600160a01b038716600090815260ca602052604090206001016109698287611c43565b8154811061097957610979611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c5576109c5611c5b565b602002602001018190525080806109db90611c71565b91505061093c565b5095945050505050565b6109f5611470565b61056a816114ca565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6a9190611bac565b610a865760405162461bcd60e51b815260040161055890611bce565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610acd611470565b610ad76000611591565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b53575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2c57610b2c611c5b565b600091825260209091200154610b4f9190600160e01b900463ffffffff16611c43565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9d57610b9d611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063a38406a390602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190611b45565b6001600160a01b031614610ce65760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610558565b60985460009060019081161415610d0f5760405162461bcd60e51b815260040161055890611ca2565b6001600160a01b038316610da55760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610558565b346001600160e01b03811615610e95576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5691611c2c565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610eef5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610558565b600260655560985460009060019081161415610f1d5760405162461bcd60e51b815260040161055890611ca2565b610f2733836115e3565b50506001606555565b60026065541415610f835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610558565b600260655560985460009060019081161415610fb15760405162461bcd60e51b815260040161055890611ca2565b610fbb83836115e3565b5050600160655550565b600054610100900460ff1615808015610fe55750600054600160ff909116105b80610fff5750303b158015610fff575060005460ff166001145b6110625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610558565b6000805460ff191660011790558015611085576000805461ff0019166101001790555b61108e85611591565b611098848461174e565b6110a1826114ca565b8015610e95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119957600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114d565b505050915250909392505050565b6111af611470565b6001600160a01b0381166112145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610558565b61056a81611591565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112949190611b45565b6001600160a01b0316336001600160a01b0316146112c45760405162461bcd60e51b815260040161055890611b62565b6098541981196098541916146113425760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610558565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a1565b6001600160a01b0381166114075760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610558565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610558565b61c4e08111156115505760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610558565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161c57508161161a8285611c43565b105b156116c9576001600160a01b038616600090815260ca602052604081206001016116468386611c43565b8154811061165657611656611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169c91611c43565b4310156116a957506116c9565b80516116be906001600160e01b031686611c43565b945050600101611605565b6116d38184611c43565b6001600160a01b038716600090815260ca602052604090205583156116fc576116fc8685611838565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb094386856117298487611c43565b604080516001600160a01b039094168452602084019290925290820152606001610e8b565b6097546001600160a01b031615801561176f57506001600160a01b03821615155b6117f15760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610558565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261183482611379565b5050565b804710156118885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610558565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d5576040519150601f19603f3d011682016040523d82523d6000602084013e6118da565b606091505b50509050806119515760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610558565b505050565b6001600160a01b038116811461056a57600080fd5b60006020828403121561197d57600080fd5b813561198881611956565b9392505050565b6000602082840312156119a157600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a06576119f68483516119a8565b92840192908501906001016119e3565b5091979650505050505050565b600060208284031215611a2557600080fd5b813560ff8116811461198857600080fd5b60008060408385031215611a4957600080fd5b8235611a5481611956565b946020939093013593505050565b60408101610b5682846119a8565b60008060408385031215611a8357600080fd5b8235611a8e81611956565b91506020830135611a9e81611956565b809150509250929050565b60008060008060808587031215611abf57600080fd5b8435611aca81611956565b93506020850135611ada81611956565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089a57611b318286516119a8565b938501936001939093019290820190611b1e565b600060208284031215611b5757600080fd5b815161198881611956565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bbe57600080fd5b8151801515811461198857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c3e57611c3e611c16565b500390565b60008219821115611c5657611c56611c16565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8557611c85611c16565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea26469706673582212207b53abbb96e06b03175441e64ced2499614fc0a3f64f5b8b831996e0e25b8d8264736f6c634300080c0033","storage":{}},"0x9d4454b023096f34b160d6b654540c56a1f81688":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101215760003560e01c806368304835116100ad578063886f119511610071578063886f1195146102cc5780638da5cb5b146102df578063b1344271146102e7578063f2fde38b1461030e578063fabc1cbc1461032157600080fd5b8063683048351461022e5780636d14a987146102555780636efb46361461027c578063715018a61461029d57806377ef731d146102a557600080fd5b806338c8ee64116100f457806338c8ee64146101bc578063485cc955146101cf578063595c6a67146101e25780635ac86ab7146101ea5780635c975abb1461021d57600080fd5b806310d67a2f14610126578063136439dd1461013b578063171f1d5b1461014e5780633561deb11461017d575b600080fd5b61013961013436600461226f565b610334565b005b610139610149366004612293565b6103f0565b61016161015c366004612411565b61052f565b6040805192151583529015156020830152015b60405180910390f35b6101a47f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc981565b6040516001600160a01b039091168152602001610174565b6101396101ca36600461226f565b6106b9565b6101396101dd366004612462565b61076a565b610139610889565b61020d6101f836600461249b565b606654600160ff9092169190911b9081161490565b6040519015158152602001610174565b606654604051908152602001610174565b6101a47f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6101a47f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304281565b61028f61028a366004612774565b610950565b604051610174929190612867565b6101396113c9565b6101a47f00000000000000000000000084ea74d481ee0a5332c457a4d796187f6ba67feb81565b6065546101a4906001600160a01b031681565b6101a46113dd565b6101a47f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61013961031c36600461226f565b6113f6565b61013961032f366004612293565b61146c565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ab91906128b0565b6001600160a01b0316336001600160a01b0316146103e45760405162461bcd60e51b81526004016103db906128cd565b60405180910390fd5b6103ed816115c8565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045c9190612917565b6104785760405162461bcd60e51b81526004016103db90612939565b606654818116146104f15760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103db565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061057757610577612981565b60200201518951600160200201518a6020015160006002811061059c5761059c612981565b60200201518b602001516001600281106105b8576105b8612981565b602090810291909101518c518d8301516040516106159a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6106389190612997565b90506106ab61065161064a88846116bf565b8690611756565b6106596117ea565b6106a16106928561068c604080518082018252600080825260209182015281518083019092526001825260029082015290565b906116bf565b61069b8c6118aa565b90611756565b886201d4c061193a565b909890975095505050505050565b336001600160a01b037f00000000000000000000000084ea74d481ee0a5332c457a4d796187f6ba67feb16146103ed5760405162461bcd60e51b815260206004820152604a60248201527f6f6e6c79496e6372656469626c655371756172696e675461736b4d616e61676560448201527f723a206e6f742066726f6d206372656469626c65207371756172696e6720746160648201526939b59036b0b730b3b2b960b11b608482015260a4016103db565b600054610100900460ff161580801561078a5750600054600160ff909116105b806107a45750303b1580156107a4575060005460ff166001145b6108075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103db565b6000805460ff19166001179055801561082a576000805461ff0019166101001790555b610835836000611b5e565b61083e82611c48565b8015610884576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156108d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f59190612917565b6109115760405162461bcd60e51b81526004016103db90612939565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201909152606080825260208201526040805180820190915260008082526020820181905290815b86811015610b7a577f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc96001600160a01b031663c1af6b248989848181106109c6576109c6612981565b9050013560f81c60f81b60f81c888860a0015185815181106109ea576109ea612981565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015610a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6a91906129b9565b6001600160401b031916610a9a86604001518381518110610a8d57610a8d612981565b6020026020010151611c9a565b67ffffffffffffffff191614610b365760405162461bcd60e51b81526020600482015260616024820152600080516020612b8283398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016103db565b610b6685604001518281518110610b4f57610b4f612981565b60200260200101518361175690919063ffffffff16565b915080610b72816129fa565b91505061097d565b506040805180820190915260608082526020820152866001600160401b03811115610ba757610ba76122ac565b604051908082528060200260200182016040528015610bd0578160200160208202803683370190505b506020820152866001600160401b03811115610bee57610bee6122ac565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b5081526020850151516000906001600160401b03811115610c3a57610c3a6122ac565b604051908082528060200260200182016040528015610c63578160200160208202803683370190505b50905060008660200151516001600160401b03811115610c8557610c856122ac565b604051908082528060200260200182016040528015610cae578160200160208202803683370190505b5090506000610cf28b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cdd92505050565b905060005b886020015151811015610f5d57610d1d89602001518281518110610a8d57610a8d612981565b848281518110610d2f57610d2f612981565b60209081029190910101528015610de75783610d4c600183612a15565b81518110610d5c57610d5c612981565b602002602001015160001c848281518110610d7957610d79612981565b602002602001015160001c11610de7576040805162461bcd60e51b8152602060048201526024810191909152600080516020612b8283398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016103db565b7f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f3730426001600160a01b0316633064620d858381518110610e2857610e28612981565b60200260200101518c8c600001518581518110610e4757610e47612981565b60200260200101516040518463ffffffff1660e01b8152600401610e849392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec59190612a2c565b6001600160c01b0316838281518110610ee057610ee0612981565b602002602001018181525050610f49610f42610f1684868581518110610f0857610f08612981565b602002602001015116611e46565b610f3c8c602001518581518110610f2f57610f2f612981565b6020026020010151611e77565b90611f12565b8790611756565b955080610f55816129fa565b915050610cf7565b505060005b60ff81168a111561129d5760008b8b8360ff16818110610f8457610f84612981565b9050013560f81c60f81b60f81c90507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663c8294c56828c8c60c001518660ff1681518110610fdd57610fdd612981565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d9190612a55565b85602001518360ff168151811061107657611076612981565b6001600160601b03909216602092830291909101820152850151805160ff84169081106110a5576110a5612981565b602002602001015185600001518360ff16815181106110c6576110c6612981565b60200260200101906001600160601b031690816001600160601b03168152505060005b8960200151518163ffffffff16101561129357600061112f858363ffffffff168151811061111957611119612981565b60200260200101518460ff161c60019081161490565b15611280577f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663a43cde89848e898663ffffffff168151811061117d5761117d612981565b60200260200101518f60e001518960ff168151811061119e5761119e612981565b60200260200101518663ffffffff16815181106111bd576111bd612981565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112459190612a55565b8751805160ff871690811061125c5761125c612981565b602002602001018181516112709190612a7e565b6001600160601b03169052506001015b508061128b81612aa6565b9150506110e9565b5050600101610f62565b50506000806112b68c868a606001518b6080015161052f565b91509150816113275760405162461bcd60e51b81526020600482015260436024820152600080516020612b8283398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016103db565b806113885760405162461bcd60e51b81526020600482015260396024820152600080516020612b8283398151915260448201527f7265733a207369676e617475726520697320696e76616c69640000000000000060648201526084016103db565b50506000878260405160200161139f929190612aca565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6113d1611ff7565b6113db6000611c48565b565b60006113f16033546001600160a01b031690565b905090565b6113fe611ff7565b6001600160a01b0381166114635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b6103ed81611c48565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e391906128b0565b6001600160a01b0316336001600160a01b0316146115135760405162461bcd60e51b81526004016103db906128cd565b6066541981196066541916146115915760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103db565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610524565b6001600160a01b0381166116565760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103db565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526116db612180565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561170e57611710565bfe5b508061174e5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016103db565b505092915050565b604080518082019091526000808252602082015261177261219e565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561170e57508061174e5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016103db565b6117f26121bc565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820190915260008082526020820152600080806118da600080516020612b6283398151915286612997565b90505b6118e681612056565b9093509150600080516020612b62833981519152828309831415611920576040805180820190915290815260208101919091529392505050565b600080516020612b628339815191526001820890506118dd565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061196c6121e1565b60005b6002811015611b31576000611985826006612b12565b905084826002811061199957611999612981565b602002015151836119ab836000612b31565b600c81106119bb576119bb612981565b60200201528482600281106119d2576119d2612981565b602002015160200151838260016119e99190612b31565b600c81106119f9576119f9612981565b6020020152838260028110611a1057611a10612981565b6020020151515183611a23836002612b31565b600c8110611a3357611a33612981565b6020020152838260028110611a4a57611a4a612981565b6020020151516001602002015183611a63836003612b31565b600c8110611a7357611a73612981565b6020020152838260028110611a8a57611a8a612981565b602002015160200151600060028110611aa557611aa5612981565b602002015183611ab6836004612b31565b600c8110611ac657611ac6612981565b6020020152838260028110611add57611add612981565b602002015160200151600160028110611af857611af8612981565b602002015183611b09836005612b31565b600c8110611b1957611b19612981565b60200201525080611b29816129fa565b91505061196f565b50611b3a612200565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b6065546001600160a01b0316158015611b7f57506001600160a01b03821615155b611c015760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103db565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611c44826115c8565b5050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081600001518260200151604051602001611cc0929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b600061010082511115611d515760405162461bcd60e51b815260206004820152603660248201527f4269746d61705574696c732e62797465734172726179546f4269746d61703a206044820152756279746573417272617920697320746f6f206c6f6e6760501b60648201526084016103db565b8151611d5f57506000919050565b60008083600081518110611d7557611d75612981565b0160200151600160f89190911c81901b92505b8451811015611e3d57848181518110611da357611da3612981565b0160200151600160f89190911c1b915082821615611e295760405162461bcd60e51b815260206004820152603a60248201527f4269746d61705574696c732e62797465734172726179546f4269746d61703a2060448201527f72657065617420656e74727920696e206279746573417272617900000000000060648201526084016103db565b91811791611e36816129fa565b9050611d88565b50909392505050565b6000805b8215611e7157611e5b600184612a15565b9092169180611e6981612b49565b915050611e4a565b92915050565b60408051808201909152600080825260208201528151158015611e9c57506020820151155b15611eba575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020612b628339815191528460200151611eed9190612997565b611f0590600080516020612b62833981519152612a15565b905292915050565b919050565b60408051808201909152600080825260208201526102008261ffff1610611f6e5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016103db565b8161ffff1660011415611f82575081611e71565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161115611fec57600161ffff871660ff83161c81161415611fcf57611fcc8484611756565b93505b611fd98384611756565b92506201fffe600192831b169101611f9e565b509195945050505050565b336120006113dd565b6001600160a01b0316146113db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103db565b60008080600080516020612b628339815191526003600080516020612b6283398151915286600080516020612b628339815191528889090908905060006120cc827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020612b628339815191526120d8565b91959194509092505050565b6000806120e3612200565b6120eb61221e565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561170e5750826121755760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016103db565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806121cf61223c565b81526020016121dc61223c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146103ed57600080fd5b60006020828403121561228157600080fd5b813561228c8161225a565b9392505050565b6000602082840312156122a557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156122e4576122e46122ac565b60405290565b60405161010081016001600160401b03811182821017156122e4576122e46122ac565b604051601f8201601f191681016001600160401b0381118282101715612335576123356122ac565b604052919050565b60006040828403121561234f57600080fd5b6123576122c2565b9050813581526020820135602082015292915050565b600082601f83011261237e57600080fd5b604051604081018181106001600160401b03821117156123a0576123a06122ac565b80604052508060408401858111156123b757600080fd5b845b81811015611fec5780358352602092830192016123b9565b6000608082840312156123e357600080fd5b6123eb6122c2565b90506123f7838361236d565b8152612406836040840161236d565b602082015292915050565b600080600080610120858703121561242857600080fd5b84359350612439866020870161233d565b925061244886606087016123d1565b91506124578660e0870161233d565b905092959194509250565b6000806040838503121561247557600080fd5b82356124808161225a565b915060208301356124908161225a565b809150509250929050565b6000602082840312156124ad57600080fd5b813560ff8116811461228c57600080fd5b803563ffffffff81168114611f0d57600080fd5b60006001600160401b038211156124eb576124eb6122ac565b5060051b60200190565b600082601f83011261250657600080fd5b8135602061251b612516836124d2565b61230d565b82815260059290921b8401810191818101908684111561253a57600080fd5b8286015b8481101561255c5761254f816124be565b835291830191830161253e565b509695505050505050565b600082601f83011261257857600080fd5b81356020612588612516836124d2565b82815260069290921b840181019181810190868411156125a757600080fd5b8286015b8481101561255c576125bd888261233d565b8352918301916040016125ab565b600082601f8301126125dc57600080fd5b813560206125ec612516836124d2565b82815260059290921b8401810191818101908684111561260b57600080fd5b8286015b8481101561255c5780356001600160401b0381111561262e5760008081fd5b61263c8986838b01016124f5565b84525091830191830161260f565b6000610180828403121561265d57600080fd5b6126656122ea565b905081356001600160401b038082111561267e57600080fd5b61268a858386016124f5565b835260208401359150808211156126a057600080fd5b6126ac85838601612567565b602084015260408401359150808211156126c557600080fd5b6126d185838601612567565b60408401526126e385606086016123d1565b60608401526126f58560e0860161233d565b608084015261012084013591508082111561270f57600080fd5b61271b858386016124f5565b60a084015261014084013591508082111561273557600080fd5b612741858386016124f5565b60c084015261016084013591508082111561275b57600080fd5b50612768848285016125cb565b60e08301525092915050565b60008060008060006080868803121561278c57600080fd5b8535945060208601356001600160401b03808211156127aa57600080fd5b818801915088601f8301126127be57600080fd5b8135818111156127cd57600080fd5b8960208285010111156127df57600080fd5b60208301965094506127f3604089016124be565b9350606088013591508082111561280957600080fd5b506128168882890161264a565b9150509295509295909350565b600081518084526020808501945080840160005b8381101561285c5781516001600160601b031687529582019590820190600101612837565b509495945050505050565b60408152600083516040808401526128826080840182612823565b90506020850151603f1984830301606085015261289f8282612823565b925050508260208301529392505050565b6000602082840312156128c257600080fd5b815161228c8161225a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561292957600080fd5b8151801515811461228c57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000826129b457634e487b7160e01b600052601260045260246000fd5b500690565b6000602082840312156129cb57600080fd5b815167ffffffffffffffff198116811461228c57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612a0e57612a0e6129e4565b5060010190565b600082821015612a2757612a276129e4565b500390565b600060208284031215612a3e57600080fd5b81516001600160c01b038116811461228c57600080fd5b600060208284031215612a6757600080fd5b81516001600160601b038116811461228c57600080fd5b60006001600160601b0383811690831681811015612a9e57612a9e6129e4565b039392505050565b600063ffffffff80831681811415612ac057612ac06129e4565b6001019392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015612b0557815185529382019390820190600101612ae9565b5092979650505050505050565b6000816000190483118215151615612b2c57612b2c6129e4565b500290565b60008219821115612b4457612b446129e4565b500190565b600061ffff80831681811415612ac057612ac06129e456fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220c94753e8265de797be2b572bca7b454184545b4a5f6fb715c11d18d5234b397a64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9e545e3c0baab3e08cdfd552c960a1050f373042":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x0":"0x67d269191c92caf3cd7723f116c85e6e9bf559330001","0x1":"0x0","0x36":"0x3","0x37":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x38":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0xbcd6ff29ae71d399fb597d99792fa72d0863bd723b9ab11f79d0b8d8ac5bc8":"0x643a9800002710","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x998abeb3e57409262ae5b751f60747921b33613e","0x4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b8":"0x851356ae760d987e095750cceb3bc6014560891c","0x4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b9":"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9","0x4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81ba":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc5a5c42992decbae36851359345fe25997f5c42d"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea26469706673582212209882247b872d905a05380b42c11d1716ad43e9b19643a0cf588a80c0958bf20d64736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":1,"balance":"0x21d8f19663e28629f78","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80637259a45c1161011a578063d7b7fa13116100ad578063e58398361161007c578063e5839836146105ea578063e921d4fa146105fd578063f2fde38b14610626578063f73b751914610639578063fabc1cbc1461064c57600080fd5b8063d7b7fa13146104b8578063d98128c01461056a578063da16e29b1461057d578063df5cf723146105c357600080fd5b8063886f1195116100e9578063886f1195146104585780638da5cb5b1461046b578063a49db7321461047c578063c747075b146104a557600080fd5b80637259a45c146103ef5780637cf72bba146104025780638105e04314610415578063855fcc4a1461042857600080fd5b806338c8ee64116101925780635c975abb116101615780635c975abb1461037c5780636f0c2f741461038e578063715018a6146103d4578063723e59c7146103dc57600080fd5b806338c8ee64146102ef57806339b70e3814610302578063595c6a67146103415780635ac86ab71461034957600080fd5b80631794bb3c116101ce5780631794bb3c1461024e5780631874e5ae14610261578063282670fc1461028e57806335571676146102c557600080fd5b80630ffabbce1461020057806310d67a2f14610215578063136439dd14610228578063175d32051461023b575b600080fd5b61021361020e3660046126e6565b61065f565b005b61021361022336600461271b565b61078f565b610213610236366004612738565b610842565b6102136102493660046126e6565b610981565b61021361025c366004612751565b610aab565b61027461026f3660046126e6565b610bc9565b60405163ffffffff90911681526020015b60405180910390f35b6102a161029c366004612792565b610c14565b60408051825163ffffffff9081168252602093840151169281019290925201610285565b6102d86102d3366004612792565b610c8b565b604080519215158352602083019190915201610285565b6102136102fd36600461271b565b610cba565b6103297f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b039091168152602001610285565b610213610d88565b61036c6103573660046127be565b606654600160ff9092169190911b9081161490565b6040519015158152602001610285565b6066545b604051908152602001610285565b61027461039c3660046127e1565b6001600160a01b039182166000908152609760209081526040808320939094168252919091522054600160201b900463ffffffff1690565b610213610e4f565b6103806103ea3660046126e6565b610e63565b6102746103fd3660046126e6565b610f73565b61021361041036600461281a565b610fc3565b61036c61042336600461288f565b61100d565b61043b6104363660046127e1565b61116f565b604080519315158452602084019290925290820152606001610285565b606554610329906001600160a01b031681565b6033546001600160a01b0316610329565b61038061048a36600461271b565b6001600160a01b03166000908152609a602052604090205490565b6102136104b33660046128cd565b6111b2565b61053b6104c63660046127e1565b6040805160608082018352600080835260208084018290529284018190526001600160a01b0395861681526097835283812094909516855292815292819020815192830182525463ffffffff8082168452600160201b8204811694840194909452600160401b90049092169181019190915290565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610285565b61036c6105783660046127e1565b611405565b61027461058b3660046127e1565b6001600160a01b039182166000908152609760209081526040808320939094168252919091522054600160401b900463ffffffff1690565b6103297f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61036c6105f836600461271b565b611451565b61038061060b36600461271b565b6001600160a01b031660009081526099602052604090205490565b61021361063436600461271b565b6115c7565b61021361064736600461271b565b61163d565b61021361065a366004612738565b61176c565b6001600160a01b03821660009081526097602090815260408083203384529091529020548290600160201b900463ffffffff908116146106ba5760405162461bcd60e51b81526004016106b19061291a565b60405180910390fd5b6106c58343846118c8565b6106e7336001600160a01b038516600090815260996020526040902090611c5e565b61077f5760405162461bcd60e51b815260206004820152605760248201527f536c61736865722e7265636f72644c6173745374616b65557064617465416e6460448201527f5265766f6b65536c617368696e674162696c6974793a2052656d6f76696e672060648201527f6d6964646c657761726520756e7375636365737366756c000000000000000000608482015260a4016106b1565b61078a833384611cf8565b505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108069190612990565b6001600160a01b0316336001600160a01b0316146108365760405162461bcd60e51b81526004016106b1906129ad565b61083f81611e03565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561088a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ae91906129f7565b6108ca5760405162461bcd60e51b81526004016106b190612a19565b606654818116146109435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106b1565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b606654600190600290811614156109aa5760405162461bcd60e51b81526004016106b190612a61565b6001600160a01b03831660009081526097602090815260408083203384529091529020548390600160201b900463ffffffff908116146109fc5760405162461bcd60e51b81526004016106b19061291a565b610a078443856118c8565b610a29336001600160a01b038616600090815260996020526040902090611efa565b610aa55760405162461bcd60e51b815260206004820152604160248201527f536c61736865722e7265636f726446697273745374616b655570646174653a2060448201527f417070656e64696e67206d6964646c657761726520756e7375636365737366756064820152601b60fa1b608482015260a4016106b1565b50505050565b600054610100900460ff1615808015610acb5750600054600160ff909116105b80610ae55750303b158015610ae5575060005460ff166001145b610b485760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106b1565b6000805460ff191660011790558015610b6b576000805461ff0019166101001790555b610b758383611f08565b610b7e84611fee565b8015610aa5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6001600160a01b0382166000908152609a60205260408120805463ffffffff8416908110610bf957610bf9612a98565b60009182526020909120015463ffffffff1690505b92915050565b60408051808201909152600080825260208201526001600160a01b0383166000908152609a60205260409020805483908110610c5257610c52612a98565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b6001600160a01b03821660009081526099602052604081208190610caf9084612040565b915091509250929050565b60665460029060049081161415610ce35760405162461bcd60e51b81526004016106b190612a61565b610ced8233611405565b610d7a5760405162461bcd60e51b815260206004820152605260248201527f536c61736865722e667265657a654f70657261746f723a206d73672e73656e6460448201527f657220646f6573206e6f742068617665207065726d697373696f6e20746f20736064820152713630b9b4103a3434b99037b832b930ba37b960711b608482015260a4016106b1565b610d84823361204f565b5050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df491906129f7565b610e105760405162461bcd60e51b81526004016106b190612a19565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610e576120c1565b610e616000611fee565b565b6001600160a01b038281166000818152609960209081526040808320838052600190810183528184209084528252808320549383526097825280832094841683529390529182205463ffffffff848116600160401b909204161115610ecc576000915050610c0e565b6001600160a01b0384166000908152609960205260408120610eee908361211b565b9150505b8015801590610f3657506001600160a01b0385811660009081526097602090815260408083209386168352929052205463ffffffff858116600160401b9092041611155b15610f6b576001600160a01b03851660009081526099602052604090209091508190610f62908261211b565b9150610ef29050565b509392505050565b6001600160a01b0382166000908152609a60205260408120805463ffffffff8416908110610fa357610fa3612a98565b600091825260209091200154600160201b900463ffffffff169392505050565b610fcb6120c1565b60005b8181101561078a57611005838383818110610feb57610feb612a98565b9050602002016020810190611000919061271b565b61212a565b600101610fce565b6001600160a01b0383166000908152609a602052604081205461103257506001611168565b6001600160a01b0384166000908152609a6020526040812080548490811061105c5761105c612a98565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b909204811693830193909352909250908516108015906110ba57506001600160a01b038516600090815260996020526040902054155b15611136576001600160a01b0385166000908152609a6020526040902080546110e590600190612ac4565b815481106110f5576110f5612a98565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b909104811691909201819052439091161191506111689050565b806000015163ffffffff168463ffffffff161080156111645750806020015163ffffffff164363ffffffff16115b9150505b9392505050565b6001600160a01b0382166000908152609960205260408120819081906111a49061119f866001600160a01b031690565b612194565b9250925092505b9250925092565b6001600160a01b03841660009081526097602090815260408083203384529091529020548490600160201b900463ffffffff908116146112045760405162461bcd60e51b81526004016106b19061291a565b438463ffffffff16111561128a5760405162461bcd60e51b815260206004820152604160248201527f536c61736865722e7265636f72645374616b655570646174653a2063616e6e6f60448201527f742070726f766964652075706461746520666f722066757475726520626c6f636064820152606b60f81b608482015260a4016106b1565b6112958585856118c8565b6001600160a01b038516600090815260996020526040902054600114611359576112d7336001600160a01b038716600090815260996020526040902090611c5e565b6113495760405162461bcd60e51b815260206004820152603b60248201527f536c61736865722e7265636f72645374616b655570646174653a2052656d6f7660448201527f696e67206d6964646c657761726520756e7375636365737366756c000000000060648201526084016106b1565b6113548585846121e4565b6113fe565b336001600160a01b038616600090815260996020908152604080832083805260019081018352818420908452909152902054146113fe5760405162461bcd60e51b815260206004820152603960248201527f536c61736865722e7265636f72645374616b655570646174653a2043616c6c6560448201527f72206973206e6f7420746865206c69737420656e7472616e740000000000000060648201526084016106b1565b5050505050565b6001600160a01b038281166000908152609760209081526040808320938516835292905290812054600160201b900463ffffffff1643101561144957506001610c0e565b506000610c0e565b6001600160a01b03811660009081526098602052604081205460ff161561147a57506001919050565b604051633e28391d60e01b81526001600160a01b0383811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690633e28391d90602401602060405180830381865afa1580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150491906129f7565b156115ba57604051631976849960e21b81526001600160a01b0383811660048301526000917f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9909116906365da126490602401602060405180830381865afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190612990565b6001600160a01b031660009081526098602052604090205460ff169392505050565b506000919050565b919050565b6115cf6120c1565b6001600160a01b0381166116345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b1565b61083f81611fee565b606654600090600190811614156116665760405162461bcd60e51b81526004016106b190612a61565b6040516336b87bd760e11b81523360048201527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b031690636d70f7ae90602401602060405180830381865afa1580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ee91906129f7565b611762576040805162461bcd60e51b81526020600482015260248101919091527f536c61736865722e6f7074496e746f536c617368696e673a206d73672e73656e60448201527f646572206973206e6f7420612072656769737465726564206f70657261746f7260648201526084016106b1565b610d84338361249b565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190612990565b6001600160a01b0316336001600160a01b0316146118135760405162461bcd60e51b81526004016106b1906129ad565b6066541981196066541916146118915760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106b1565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610976565b6001600160a01b038316600090815260976020908152604080832033845290915290205463ffffffff808416600160401b9092041611156119845760405162461bcd60e51b815260206004820152604a60248201527f536c61736865722e5f7265636f7264557064617465416e64416464546f4d696460448201527f646c657761726554696d65733a2063616e2774207075736820612070726576696064820152696f75732075706461746560b01b608482015260a4016106b1565b6001600160a01b0383166000818152609760209081526040808320338452825280832080546bffffffff00000000000000001916600160401b63ffffffff89160217905580518082018252838152808301849052938352609a9091529020548015611a51576001600160a01b0385166000908152609a60205260409020611a0c600183612ac4565b81548110611a1c57611a1c612a98565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b909104169181019190915291505b60008290506000836020015163ffffffff168563ffffffff161115611a80575063ffffffff8416602082015260015b6001600160a01b038716600090815260996020526040902054611aae575063ffffffff851681526001611b83565b336001600160a01b0388166000908152609960209081526040808320838052600190810183528184209084529091529020541415611b8357600080611b0b336001600160a01b038b1660009081526099602052604090209061211b565b915091508115611b72576001600160a01b03898116600090815260976020908152604080832093851683529290522054600160401b900463ffffffff908116908916811015611b625763ffffffff81168552611b6c565b63ffffffff891685525b50611b7c565b63ffffffff881684525b6001925050505b8015611c55576001600160a01b0387166000818152609a6020908152604082208054600181810183558285528385208851920180549489015163ffffffff908116600160201b0267ffffffffffffffff199096169316929092179390931790559290915290547f1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649918991611c179190612ac4565b8451602080870151604080516001600160a01b0390961686529185019390935263ffffffff9182169084015216606082015260800160405180910390a15b50505050505050565b6000811580611c745750611c728383612506565b155b15611c8157506000610c0e565b600082815260018481016020908152604080842084805290915280832054828452922054611cb3928692909190612582565b60008281526001848101602090815260408084208480529091528083208390558183528220829055845490918591611cec908490612ac4565b90915550919392505050565b63ffffffff8181161415611d825760405162461bcd60e51b8152602060048201526044602482018190527f536c61736865722e5f7265766f6b65536c617368696e674162696c6974793a20908201527f7365727665556e74696c426c6f636b2074696d65206d757374206265206c696d6064820152631a5d195960e21b608482015260a4016106b1565b6001600160a01b03838116600081815260976020908152604080832094871680845294825291829020805467ffffffff000000001916600160201b63ffffffff88169081029190911790915591519182527f9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14910160405180910390a3505050565b6001600160a01b038116611e915760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106b1565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611168838360006125b7565b6065546001600160a01b0316158015611f2957506001600160a01b03821615155b611fab5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106b1565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610d8482611e03565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080610caf848460006125ce565b6001600160a01b03821660009081526098602052604090205460ff16610d84576001600160a01b03808316600081815260986020526040808220805460ff1916600117905551928416927f444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba519190a35050565b6033546001600160a01b03163314610e615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106b1565b600080610caf848460016125ce565b6001600160a01b03811660009081526098602052604090205460ff161561083f576001600160a01b038116600081815260986020526040808220805460ff19169055517fd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d89190a250565b60008060006121a38585612506565b6121b5575060009150819050806111ab565b5050506000818152600183810160209081526040808420848052909152808320548284529220549091906111ab565b6000811561238e576001600160a01b038416600090815260996020526040902061220e9083612506565b612216575060015b8015801561225857506001600160a01b0384811660009081526097602090815260408083209386168352929052205463ffffffff848116600160401b90920416115b15612261575060015b806122d8576001600160a01b0384166000908152609960205260408120819061228a908561211b565b9150915081156122d5576001600160a01b0386811660009081526097602090815260408083209385168352929052205463ffffffff868116600160401b90920416116122d557600192505b50505b80612377576001600160a01b0384166000908152609960205260409020612300908333612617565b6123725760405162461bcd60e51b815260206004820152603c60248201527f536c61736865722e7265636f72645374616b655570646174653a20496e73657260448201527f74696e67206d6964646c657761726520756e7375636365737366756c0000000060648201526084016106b1565b610aa5565b6123818484610e63565b91506123728484846121e4565b6001600160a01b03848116600090815260976020908152604080832060998352818420848052600190810184528285209085528352818420549094168352929052205463ffffffff848116600160401b90920416116123eb575060015b8061248457612412336001600160a01b038616600090815260996020526040902090612626565b6123725760405162461bcd60e51b815260206004820152603e60248201527f536c61736865722e7265636f72645374616b655570646174653a20507265707060448201527f656e64696e67206d6964646c657761726520756e7375636365737366756c000060648201526084016106b1565b61248e8484610e63565b9150610aa58484846121e4565b6001600160a01b03808316600081815260976020908152604080832094861680845294909152808220805467ffffffff00000000191667ffffffff00000000179055517fefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d89190a35050565b6000818152600183016020908152604080832083805290915281205415801561254957506000828152600180850160209081526040808420928452919052902054155b1561257a57600080805260018085016020908152604080842092845291905290205482141561144957506001610c0e565b506001610c0e565b600082815260019094016020818152604080872093158088529382528087208690559486529081528385209115855252912055565b60006125c68460008585612634565b949350505050565b6000806125db8585612506565b6125ea5750600090508061260f565b5050600082815260018401602090815260408083208415158452909152902054801515905b935093915050565b60006125c68484846001612634565b6000611168838360016125b7565b60006126408584612506565b15801561265257506126528585612506565b156126b25760008481526001860160209081526040808320851515845290915290205461268186868686612582565b61268d86858386612582565b60018660000160008282546126a29190612adb565b90915550600192506125c6915050565b506000949350505050565b6001600160a01b038116811461083f57600080fd5b803563ffffffff811681146115c257600080fd5b600080604083850312156126f957600080fd5b8235612704816126bd565b9150612712602084016126d2565b90509250929050565b60006020828403121561272d57600080fd5b8135611168816126bd565b60006020828403121561274a57600080fd5b5035919050565b60008060006060848603121561276657600080fd5b8335612771816126bd565b92506020840135612781816126bd565b929592945050506040919091013590565b600080604083850312156127a557600080fd5b82356127b0816126bd565b946020939093013593505050565b6000602082840312156127d057600080fd5b813560ff8116811461116857600080fd5b600080604083850312156127f457600080fd5b82356127ff816126bd565b9150602083013561280f816126bd565b809150509250929050565b6000806020838503121561282d57600080fd5b823567ffffffffffffffff8082111561284557600080fd5b818501915085601f83011261285957600080fd5b81358181111561286857600080fd5b8660208260051b850101111561287d57600080fd5b60209290920196919550909350505050565b6000806000606084860312156128a457600080fd5b83356128af816126bd565b92506128bd602085016126d2565b9150604084013590509250925092565b600080600080608085870312156128e357600080fd5b84356128ee816126bd565b93506128fc602086016126d2565b925061290a604086016126d2565b9396929550929360600135925050565b60208082526050908201527f536c61736865722e6f6e6c7952656769737465726564466f725365727669636560408201527f3a204f70657261746f7220686173206e6f74206f7074656420696e746f20736c60608201526f30b9b434b73390313c9031b0b63632b960811b608082015260a00190565b6000602082840312156129a257600080fd5b8151611168816126bd565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612a0957600080fd5b8151801515811461116857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612ad657612ad6612aae565b500390565b60008219821115612aee57612aee612aae565b50019056fea2646970667358221220c5efe534d543130a022495783fbd61cd409c461e0ed63e2b662dd8ec88c5716764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x4826533b4897376654bb4d4ad88b7fafd0c98528","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc5a5c42992decbae36851359345fe25997f5c42d"}},"0xa85233c63b9ee964add6f2cffe00fd84eb32338f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610d22565b6100b0565b6040516100669190610e6a565b60405180910390f35b61008261007d366004610ed0565b61042b565b6040516100669190610fd4565b6100a261009d36600461108f565b610ab2565b6040516100669291906110d1565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011691906110f2565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c91906110f2565b90506000855167ffffffffffffffff81111561019a5761019a610cb9565b6040519080825280602002602001820160405280156101cd57816020015b60608152602001906001900390816101b85790505b50905060005b86518110156104205760008782815181106101f0576101f061110f565b016020015160405163889ae3e560e01b815260f89190911c6004820181905263ffffffff8916602483015291506000906001600160a01b0386169063889ae3e590604401600060405180830381865afa158015610251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102799190810190611149565b9050805167ffffffffffffffff81111561029557610295610cb9565b6040519080825280602002602001820160405280156102da57816020015b60408051808201909152600080825260208201528152602001906001900390816102b35790505b508484815181106102ed576102ed61110f565b602002602001018190525060005b815181101561040a5760008282815181106103185761031861110f565b6020908102919091018101516040805180820182528281529051631b32722560e01b81526004810183905260ff8816602482015263ffffffff8e166044820152919350918201906001600160a01b038b1690631b32722590606401602060405180830381865afa158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b491906111df565b6001600160601b03168152508686815181106103d2576103d261110f565b602002602001015183815181106103eb576103eb61110f565b60200260200101819052505080806104029061121e565b9150506102fb565b50505080806104189061121e565b9150506101d3565b509695505050505050565b6104566040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ba91906110f2565b90506104e76040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516385020d4960e01b81526001600160a01b038a16906385020d4990610517908b9089908990600401611239565b600060405180830381865afa158015610534573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055c9190810190611283565b815260405163e192e9ad60e01b81526001600160a01b0383169063e192e9ad9061058e908b908b908b9060040161133b565b600060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d39190810190611283565b60408201528567ffffffffffffffff8111156105f1576105f1610cb9565b60405190808252806020026020018201604052801561062457816020015b606081526020019060019003908161060f5790505b50606082015260005b60ff81168711156109c35760008567ffffffffffffffff81111561065357610653610cb9565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b5083606001518360ff16815181106106965761069661110f565b602002602001018190525060005b868110156108c25760008c6001600160a01b0316633064620d8a8a858181106106cf576106cf61110f565b905060200201358e886000015186815181106106ed576106ed61110f565b60200260200101516040518463ffffffff1660e01b815260040161072a9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611364565b90508a8a8560ff168181106107825761078261110f565b6001600160c01b03841692013560f81c9190911c6001908116141590506108af57856001600160a01b031663480858668a8a858181106107c4576107c461110f565b905060200201358d8d8860ff168181106107e0576107e061110f565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a919061138d565b85606001518560ff16815181106108735761087361110f565b6020026020010151848151811061088c5761088c61110f565b63ffffffff90921660209283029190910190910152826108ab8161121e565b9350505b50806108ba8161121e565b9150506106a4565b5060008167ffffffffffffffff8111156108de576108de610cb9565b604051908082528060200260200182016040528015610907578160200160208202803683370190505b50905060005b828110156109885784606001518460ff168151811061092e5761092e61110f565b602002602001015181815181106109475761094761110f565b60200260200101518282815181106109615761096161110f565b63ffffffff90921660209283029190910190910152806109808161121e565b91505061090d565b508084606001518460ff16815181106109a3576109a361110f565b6020026020010181905250505080806109bb906113aa565b91505061062d565b506000896001600160a01b0316633561deb16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906110f2565b60405163eda1076360e01b81529091506001600160a01b0382169063eda1076390610a5b908b908b908e906004016113ca565b600060405180830381865afa158015610a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa09190810190611283565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610aed57610aed61110f565b60209081029190910101526040516385020d4960e01b81526000906001600160a01b038816906385020d4990610b2990889086906004016113f4565b600060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6e9190810190611283565b600081518110610b8057610b8061110f565b6020908102919091010151604051633064620d60e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b03891690633064620d90606401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190611364565b6001600160c01b031690506000610c2682610c44565b905081610c348a838a6100b0565b9550955050505050935093915050565b60606000805b610100811015610c9a576001811b915083821615610c8a57828160f81b604051602001610c78929190611448565b60405160208183030381529060405292505b610c938161121e565b9050610c4a565b5050919050565b6001600160a01b0381168114610cb657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cf857610cf8610cb9565b604052919050565b63ffffffff81168114610cb657600080fd5b8035610d1d81610d00565b919050565b600080600060608486031215610d3757600080fd5b8335610d4281610ca1565b925060208481013567ffffffffffffffff80821115610d6057600080fd5b818701915087601f830112610d7457600080fd5b813581811115610d8657610d86610cb9565b610d98601f8201601f19168501610ccf565b91508082528884828501011115610dae57600080fd5b8084840185840137600084828401015250809450505050610dd160408501610d12565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015610e5c578385038a52825180518087529087019087870190845b81811015610e47578351805184528a01516001600160601b03168a84015292890192604090920191600101610e17565b50509a87019a95505091850191600101610df9565b509298975050505050505050565b602081526000610e7d6020830184610dda565b9392505050565b60008083601f840112610e9657600080fd5b50813567ffffffffffffffff811115610eae57600080fd5b6020830191508360208260051b8501011115610ec957600080fd5b9250929050565b60008060008060008060808789031215610ee957600080fd5b8635610ef481610ca1565b95506020870135610f0481610d00565b9450604087013567ffffffffffffffff80821115610f2157600080fd5b818901915089601f830112610f3557600080fd5b813581811115610f4457600080fd5b8a6020828501011115610f5657600080fd5b602083019650809550506060890135915080821115610f7457600080fd5b50610f8189828a01610e84565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b83811015610fc957815163ffffffff1687529582019590820190600101610fa7565b509495945050505050565b600060208083528351608082850152610ff060a0850182610f93565b905081850151601f198086840301604087015261100d8383610f93565b9250604087015191508086840301606087015261102a8383610f93565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b82811015611081578487830301845261106f828751610f93565b95880195938801939150600101611055565b509998505050505050505050565b6000806000606084860312156110a457600080fd5b83356110af81610ca1565b92506020840135915060408401356110c681610d00565b809150509250925092565b8281526040602082015260006110ea6040830184610dda565b949350505050565b60006020828403121561110457600080fd5b8151610e7d81610ca1565b634e487b7160e01b600052603260045260246000fd5b600067ffffffffffffffff82111561113f5761113f610cb9565b5060051b60200190565b6000602080838503121561115c57600080fd5b825167ffffffffffffffff81111561117357600080fd5b8301601f8101851361118457600080fd5b805161119761119282611125565b610ccf565b81815260059190911b820183019083810190878311156111b657600080fd5b928401925b828410156111d4578351825292840192908401906111bb565b979650505050505050565b6000602082840312156111f157600080fd5b81516001600160601b0381168114610e7d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561123257611232611208565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561126657600080fd5b8260051b8085606085013760009201606001918252509392505050565b6000602080838503121561129657600080fd5b825167ffffffffffffffff8111156112ad57600080fd5b8301601f810185136112be57600080fd5b80516112cc61119282611125565b81815260059190911b820183019083810190878311156112eb57600080fd5b928401925b828410156111d457835161130381610d00565b825292840192908401906112f0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061135b604083018486611312565b95945050505050565b60006020828403121561137657600080fd5b81516001600160c01b0381168114610e7d57600080fd5b60006020828403121561139f57600080fd5b8151610e7d81610d00565b600060ff821660ff8114156113c1576113c1611208565b60010192915050565b6040815260006113de604083018587611312565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b8181101561143b5784518352938301939183019160010161141f565b5090979650505050505050565b6000835160005b81811015611469576020818701810151858301520161144f565b81811115611478576000828501525b506001600160f81b031993909316919092019081526001019291505056fea2646970667358221220df3718c8d0e8659cc72040db09541a95246df6dc99560e1013fc110a0174f58a64736f6c634300080c0033","storage":{}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102115760003560e01c80638c80d4e511610125578063c6656702116100ad578063df5cf7231161007c578063df5cf7231461054a578063e7a050aa14610571578063f2fde38b14610584578063f698da2514610597578063fabc1cbc1461059f57600080fd5b8063c6656702146104e7578063cbc2bd62146104fa578063cd293f6f1461050d578063cf756fdf1461053757600080fd5b8063b1344271116100f4578063b134427114610464578063b43b514b1461048b578063b5d8b5b81461049e578063c3c6b3a9146104b1578063c608c7f3146104d457600080fd5b80638c80d4e51461040c5780638da5cb5b1461041f57806394f649dd14610430578063967fc0d21461045157600080fd5b80635ac86ab7116101a8578063715018a611610177578063715018a61461037d5780637a7e0d92146103855780637ecebe00146103b0578063886f1195146103d05780638b8aac3c146103e357600080fd5b80635ac86ab71461030c5780635c975abb1461033f5780635de08ff214610347578063663c1de41461035a57600080fd5b80634665bcda116101e45780634665bcda1461028b57806348825e94146102ca57806350ff7225146102f1578063595c6a671461030457600080fd5b806310d67a2f14610216578063136439dd1461022b57806320606b701461023e57806332e89ace14610278575b600080fd5b61022961022436600461289a565b6105b2565b005b6102296102393660046128b7565b61066e565b6102657f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b610265610286366004612950565b6107ad565b6102b27f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6040516001600160a01b03909116815260200161026f565b6102657f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f181565b6102296102ff366004612a2f565b6109f1565b610229610a49565b61032f61031a366004612a70565b609854600160ff9092169190911b9081161490565b604051901515815260200161026f565b609854610265565b610229610355366004612a93565b610b10565b61032f61036836600461289a565b60d16020526000908152604090205460ff1681565b610229610c59565b610265610393366004612b08565b60cd60209081526000928352604080842090915290825290205481565b6102656103be36600461289a565b60ca6020526000908152604090205481565b6097546102b2906001600160a01b031681565b6102656103f136600461289a565b6001600160a01b0316600090815260ce602052604090205490565b61022961041a366004612a2f565b610c6d565b6033546001600160a01b03166102b2565b61044361043e36600461289a565b610cc0565b60405161026f929190612bb5565b60cb546102b2906001600160a01b031681565b6102b27f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b610265610499366004612d5e565b610e40565b6102296104ac366004612a93565b610e8d565b61032f6104bf3660046128b7565b60cf6020526000908152604090205460ff1681565b6102296104e2366004612e34565b610fd1565b6102296104f536600461289a565b611089565b6102b2610508366004612e87565b61109a565b61052061051b366004612d5e565b6110d2565b60408051921515835260208301919091520161026f565b610229610545366004612eb3565b611166565b6102b27f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61026561057f366004612a2f565b61129a565b61022961059236600461289a565b611363565b6102656113d9565b6102296105ad3660046128b7565b611417565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106299190612f04565b6001600160a01b0316336001600160a01b0316146106625760405162461bcd60e51b815260040161065990612f21565b60405180910390fd5b61066b81611573565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106da9190612f6b565b6106f65760405162461bcd60e51b815260040161065990612f8d565b6098548181161461076f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610659565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108045760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610659565b600260655414156108575760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b6002606555428410156108de5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610659565b6001600160a01b03858116600090815260ca602090815260408083205481517f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f1938101939093528c851691830191909152928a1660608201526080810189905260a0810183905260c0810187905260e00160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca909352908220600185019055915061098e6113d9565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506109d188828861166a565b6109dd888c8c8c611824565b60016065559b9a5050505050505050505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610a395760405162461bcd60e51b815260040161065990612fd5565b610a44838383611a45565b505050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab59190612f6b565b610ad15760405162461bcd60e51b815260040161065990612f8d565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60cb546001600160a01b03163314610b3a5760405162461bcd60e51b815260040161065990613033565b8060005b81811015610c535760d16000858584818110610b5c57610b5c61309d565b9050602002016020810190610b71919061289a565b6001600160a01b0316815260208101919091526040016000205460ff16610c4b57600160d16000868685818110610baa57610baa61309d565b9050602002016020810190610bbf919061289a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe848483818110610c1a57610c1a61309d565b9050602002016020810190610c2f919061289a565b6040516001600160a01b03909116815260200160405180910390a15b600101610b3e565b50505050565b610c61611c7f565b610c6b6000611cd9565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610cb55760405162461bcd60e51b815260040161065990612fd5565b610c53838383611d2b565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610cf857610cf86128e0565b604051908082528060200260200182016040528015610d21578160200160208202803683370190505b50905060005b82811015610db2576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610d6657610d6661309d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d9f57610d9f61309d565b6020908102919091010152600101610d27565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610e2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e10575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e709790969591016130b3565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610eb75760405162461bcd60e51b815260040161065990613033565b8060005b81811015610c535760d16000858584818110610ed957610ed961309d565b9050602002016020810190610eee919061289a565b6001600160a01b0316815260208101919091526040016000205460ff1615610fc957600060d16000868685818110610f2857610f2861309d565b9050602002016020810190610f3d919061289a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f9857610f9861309d565b9050602002016020810190610fad919061289a565b6040516001600160a01b03909116815260200160405180910390a15b600101610ebb565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146110195760405162461bcd60e51b815260040161065990612fd5565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b5050505050505050565b611091611c7f565b61066b81611e87565b60ce60205281600052604060002081815481106110b657600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9161461111d5760405162461bcd60e51b815260040161065990612fd5565b600061112884610e40565b600081815260cf60205260408120549192509060ff161561115d5750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff16158080156111865750600054600160ff909116105b806111a05750303b1580156111a0575060005460ff166001145b6112035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610659565b6000805460ff191660011790558015611226576000805461ff0019166101001790555b61122e611ef0565b60c95561123b8383611f87565b61124485611cd9565b61124d84611e87565b8015611293576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6098546000908190600190811614156112f15760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610659565b600260655414156113445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b600260655561135533868686611824565b600160655595945050505050565b61136b611c7f565b6001600160a01b0381166113d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610659565b61066b81611cd9565b60007f0000000000000000000000000000000000000000000000000000000000007a6946141561140a575060c95490565b611412611ef0565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190612f04565b6001600160a01b0316336001600160a01b0316146114be5760405162461bcd60e51b815260040161065990612f21565b60985419811960985419161461153c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610659565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107a2565b6001600160a01b0381166116015760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610659565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561178457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906116aa9086908690600401613184565b602060405180830381865afa1580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb919061319d565b6001600160e01b03191614610a445760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610659565b826001600160a01b03166117988383612071565b6001600160a01b031614610a445760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610659565b6001600160a01b038316600090815260d16020526040812054849060ff166118ca5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610659565b6118df6001600160a01b038516338786612095565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af115801561192e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195291906131c7565b915061195f868684611a45565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b5050604080516001600160a01b038a8116825288811660208301528916818301526060810186905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969350908190036080019150a150949350505050565b6001600160a01b038316611ac15760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610659565b80611b2d5760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610659565b6001600160a01b03808416600090815260cd6020908152604080832093861683529290522054611c3e576001600160a01b038316600090815260ce602090815260409091205410611bff5760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610659565b6001600160a01b03838116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808416600090815260cd6020908152604080832093861683529290529081208054839290611c759084906131f6565b9091555050505050565b6033546001600160a01b03163314610c6b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610659565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611da05760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610659565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e325760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610659565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611e7a57611e7085856120ef565b6001915050611e80565b60009150505b9392505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611fa857506001600160a01b03821615155b61202a5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610659565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261206d82611573565b5050565b600080600061208085856122e1565b9150915061208d81612351565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c5390859061250c565b6001600160a01b038216600090815260ce6020526040812054905b8181101561220a576001600160a01b03848116600090815260ce60205260409020805491851691839081106121415761214161309d565b6000918252602090912001546001600160a01b03161415612202576001600160a01b038416600090815260ce6020526040902080546121829060019061320e565b815481106121925761219261309d565b60009182526020808320909101546001600160a01b03878116845260ce90925260409092208054919092169190839081106121cf576121cf61309d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061220a565b60010161210a565b818114156122925760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610659565b6001600160a01b038416600090815260ce602052604090208054806122b9576122b9613225565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156123185760208301516040840151606085015160001a61230c878285856125de565b9450945050505061234a565b82516040141561234257602083015160408401516123378683836126cb565b93509350505061234a565b506000905060025b9250929050565b60008160048111156123655761236561323b565b141561236e5750565b60018160048111156123825761238261323b565b14156123d05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610659565b60028160048111156123e4576123e461323b565b14156124325760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610659565b60038160048111156124465761244661323b565b141561249f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610659565b60048160048111156124b3576124b361323b565b141561066b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610659565b6000612561826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127049092919063ffffffff16565b805190915015610a44578080602001905181019061257f9190612f6b565b610a445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610659565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561261557506000905060036126c2565b8460ff16601b1415801561262d57508460ff16601c14155b1561263e57506000905060046126c2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612692573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126bb576000600192509250506126c2565b9150600090505b94509492505050565b6000806001600160ff1b038316816126e860ff86901c601b6131f6565b90506126f6878288856125de565b935093505050935093915050565b6060612713848460008561271b565b949350505050565b60608247101561277c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610659565b6001600160a01b0385163b6127d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610659565b600080866001600160a01b031685876040516127ef9190613251565b60006040518083038185875af1925050503d806000811461282c576040519150601f19603f3d011682016040523d82523d6000602084013e612831565b606091505b509150915061284182828661284c565b979650505050505050565b6060831561285b575081611e80565b82511561286b5782518084602001fd5b8160405162461bcd60e51b8152600401610659919061326d565b6001600160a01b038116811461066b57600080fd5b6000602082840312156128ac57600080fd5b8135611e8081612885565b6000602082840312156128c957600080fd5b5035919050565b80356128db81612885565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612919576129196128e0565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612948576129486128e0565b604052919050565b60008060008060008060c0878903121561296957600080fd5b863561297481612885565b955060208781013561298581612885565b955060408801359450606088013561299c81612885565b93506080880135925060a088013567ffffffffffffffff808211156129c057600080fd5b818a0191508a601f8301126129d457600080fd5b8135818111156129e6576129e66128e0565b6129f8601f8201601f1916850161291f565b91508082528b84828501011115612a0e57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b600080600060608486031215612a4457600080fd5b8335612a4f81612885565b92506020840135612a5f81612885565b929592945050506040919091013590565b600060208284031215612a8257600080fd5b813560ff81168114611e8057600080fd5b60008060208385031215612aa657600080fd5b823567ffffffffffffffff80821115612abe57600080fd5b818501915085601f830112612ad257600080fd5b813581811115612ae157600080fd5b8660208260051b8501011115612af657600080fd5b60209290920196919550909350505050565b60008060408385031215612b1b57600080fd5b8235612b2681612885565b91506020830135612b3681612885565b809150509250929050565b600081518084526020808501945080840160005b83811015612b7a5781516001600160a01b031687529582019590820190600101612b55565b509495945050505050565b600081518084526020808501945080840160005b83811015612b7a57815187529582019590820190600101612b99565b604081526000612bc86040830185612b41565b8281036020840152612bda8185612b85565b95945050505050565b600067ffffffffffffffff821115612bfd57612bfd6128e0565b5060051b60200190565b600082601f830112612c1857600080fd5b81356020612c2d612c2883612be3565b61291f565b82815260059290921b84018101918181019086841115612c4c57600080fd5b8286015b84811015612c70578035612c6381612885565b8352918301918301612c50565b509695505050505050565b600082601f830112612c8c57600080fd5b81356020612c9c612c2883612be3565b82815260059290921b84018101918181019086841115612cbb57600080fd5b8286015b84811015612c705780358352918301918301612cbf565b600060408284031215612ce857600080fd5b6040516040810181811067ffffffffffffffff82111715612d0b57612d0b6128e0565b6040529050808235612d1c81612885565b815260208301356bffffffffffffffffffffffff81168114612d3d57600080fd5b6020919091015292915050565b803563ffffffff811681146128db57600080fd5b600060208284031215612d7057600080fd5b813567ffffffffffffffff80821115612d8857600080fd5b9083019060e08286031215612d9c57600080fd5b612da46128f6565b823582811115612db357600080fd5b612dbf87828601612c07565b825250602083013582811115612dd457600080fd5b612de087828601612c7b565b602083015250612df2604084016128d0565b6040820152612e048660608501612cd6565b6060820152612e1560a08401612d4a565b6080820152612e2660c084016128d0565b60a082015295945050505050565b60008060008060808587031215612e4a57600080fd5b8435612e5581612885565b93506020850135612e6581612885565b9250604085013591506060850135612e7c81612885565b939692955090935050565b60008060408385031215612e9a57600080fd5b8235612ea581612885565b946020939093013593505050565b60008060008060808587031215612ec957600080fd5b8435612ed481612885565b93506020850135612ee481612885565b92506040850135612ef481612885565b9396929550929360600135925050565b600060208284031215612f1657600080fd5b8151611e8081612885565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612f7d57600080fd5b81518015158114611e8057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60e0815260006130c660e0830189612b41565b82810360208401526130d88189612b85565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b60005b8381101561314757818101518382015260200161312f565b83811115610c535750506000910152565b6000815180845261317081602086016020860161312c565b601f01601f19169290920160200192915050565b8281526040602082015260006127136040830184613158565b6000602082840312156131af57600080fd5b81516001600160e01b031981168114611e8057600080fd5b6000602082840312156131d957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613209576132096131e0565b500190565b600082821015613220576132206131e0565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161326381846020870161312c565b9190910192915050565b602081526000611e80602083018461315856fea26469706673582212205c39c91e4aaff04af69f6d04917b99d0b39f502fa282507e0d84e68f897c45d664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122007c3990e071012e67e928be8d71cb1c6b5ed96fee92e98c9e70cc231dee7232064736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x67d269191c92caf3cd7723f116c85e6e9bf55933","0x66":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9d4454b023096f34b160d6b654540c56a1f81688","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc5a5c42992decbae36851359345fe25997f5c42d"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220256db6e93a752df3d0dccc3089617e209be80b9bc8901c1caeb7e0311892a77464736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0xc6e7df5e7b4f2a278906862b61205850344d4e7d":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b2565b6103ba565b005b6101a66101b63660046117fc565b61049d565b6101a66101c9366004611819565b610550565b6101a66101dc36600461183b565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611854565b610749565b6101a6610279366004611880565b610969565b61024161028c3660046117fc565b610a37565b6101a6610a4b565b6102b86102a73660046118b9565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461183b565b610b17565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461183b565b610b62565b6102416103263660046117fc565b610b6d565b610333610b7b565b604051610208919061190c565b61024161034e3660046117fc565b610b9b565b6101a661036136600461193f565b610c30565b60645460655460408051928352602083019190915201610208565b61024161038f36600461183b565b610e7d565b6102416103a236600461183b565b610eb6565b6101a66103b536600461183b565b610ec1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611980565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b610446858561101d565b610450838361112a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119ce565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119eb565b61054d816111bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119ce565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119eb565b610601828261101d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a35565b6106925760405162461bcd60e51b815260040161041090611a57565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846112c0565b6032546001600160a01b0385811691161461089c5760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b60335460006108ad6103e883611ab5565b905060006103e86108bc611398565b6108c69190611ab5565b905060006108d48783611acd565b9050806108e18489611ae4565b6108eb9190611b03565b9550856109515760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b61095b8685611ab5565b603355505050505092915050565b600054610100900460ff16158080156109895750600054600160ff909116105b806109a35750303b1580156109a3575060005460ff166001145b6109bf5760405162461bcd60e51b815260040161041090611980565b6000805460ff1916600117905580156109e2576000805461ff0019166101001790555b6109ec838361112a565b8015610a32576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610a456102e783610b9b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190611a35565b610ad85760405162461bcd60e51b815260040161041090611a57565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610b2a9190611ab5565b905060006103e8610b39611398565b610b439190611ab5565b905081610b508583611ae4565b610b5a9190611b03565b949350505050565b6000610a4582610e7d565b6000610a456103a283610b9b565b60606040518060800160405280604d8152602001611b5b604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190611b25565b6001805460029081161415610c835760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610cfb5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b6032546001600160a01b03848116911614610d7e5760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b60335480831115610e0d5760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610e1b6103e883611ab5565b905060006103e8610e2a611398565b610e349190611ab5565b9050600082610e438784611ae4565b610e4d9190611b03565b9050610e598685611acd565b603355603254610e73906001600160a01b0316898361140a565b5050505050505050565b6000806103e8603354610e909190611ab5565b905060006103e8610e9f611398565b610ea99190611ab5565b905080610b508386611ae4565b6000610a4582610b17565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906119ce565b6001600160a01b0316336001600160a01b031614610f685760405162461bcd60e51b8152600401610410906119eb565b600154198119600154191614610fe65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561111f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166111955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b03841617905561060181600061145c565b6001600160a01b0381166112495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561132a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b606554611335611398565b11156106015760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190611b25565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a32908490611548565b6000546201000090046001600160a01b031615801561148357506001600160a01b03821615155b6115055760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826111bb565b600061159d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661161a9092919063ffffffff16565b805190915015610a3257808060200190518101906115bb9190611a35565b610a325760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606116298484600085611633565b90505b9392505050565b6060824710156116945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116eb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516117079190611b3e565b60006040518083038185875af1925050503d8060008114611744576040519150601f19603f3d011682016040523d82523d6000602084013e611749565b606091505b5091509150611759828286611764565b979650505050505050565b6060831561177357508161162c565b8251156117835782518084602001fd5b8160405162461bcd60e51b8152600401610410919061190c565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117c857600080fd5b843593506020850135925060408501356117e18161179d565b915060608501356117f18161179d565b939692955090935050565b60006020828403121561180e57600080fd5b813561162c8161179d565b6000806040838503121561182c57600080fd5b50508035926020909101359150565b60006020828403121561184d57600080fd5b5035919050565b6000806040838503121561186757600080fd5b82356118728161179d565b946020939093013593505050565b6000806040838503121561189357600080fd5b823561189e8161179d565b915060208301356118ae8161179d565b809150509250929050565b6000602082840312156118cb57600080fd5b813560ff8116811461162c57600080fd5b60005b838110156118f75781810151838201526020016118df565b83811115611906576000848401525b50505050565b602081526000825180602084015261192b8160408501602087016118dc565b601f01601f19169190910160400192915050565b60008060006060848603121561195457600080fd5b833561195f8161179d565b9250602084013561196f8161179d565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e057600080fd5b815161162c8161179d565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4757600080fd5b8151801515811461162c57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ac857611ac8611a9f565b500190565b600082821015611adf57611adf611a9f565b500390565b6000816000190483118215151615611afe57611afe611a9f565b500290565b600082611b2057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3757600080fd5b5051919050565b60008251611b508184602087016118dc565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220f3e91484e81b6295a205880b71a56739bd92a560061b728af31944b5f6d96ef064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x610178da211fef7d417bc0e6fed39f05609ad788","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3","0xd74ac9771d8f8f4c2b2f31ff87016e9c930b33235f6963bcab1ecdfc4094bbcb":"0x1"}},"0xe6e340d132b5f46d1e472debcd681b2abc16e57e":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea264697066735822122013ab6c51ac59af5e3ed485384e9201a6bf5ba4cdd3dd5290359ae249212e8fc464736f6c634300080c0033","storage":{}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220f71399fafd06d0e383b21957bcac3bf3986a6a0701bc4c5dc7ee118215f3652364736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":49,"balance":"0x21e174c2b6d80d391ba","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063944472a911610130578063bd29b8cd116100b8578063df5cf7231161007c578063df5cf723146105b7578063e192e9ad146105de578063e25427dd146105fe578063e89c0a0014610611578063eb92199c1461062457600080fd5b8063bd29b8cd14610558578063c8294c561461056b578063c8f739d01461057e578063cd050d9c14610591578063ce977ec3146105a457600080fd5b8063a43cde89116100ff578063a43cde89146104f0578063a673466714610503578063b13442711461050b578063bba549fa14610532578063bc9a40c31461054557600080fd5b8063944472a91461047357806399eed4ee146104935780639aa1653d146104a65780639e8ca620146104cd57600080fd5b806348085866116101b35780636d14a987116101825780636d14a987146103ae5780636e8f03ca146103d55780637c172347146104065780637cc0d75f146104205780637ed9430f1461046057600080fd5b806348085866146103435780635e5a67751461036b5780635f2948ec146103885780636ab538d41461039b57600080fd5b806325504777116101fa57806325504777146102a25780632b3d8816146102b75780632c2a5d2b146102ca5780633998fdd3146102dd57806339b70e381461031c57600080fd5b80631b3272251461022c5780631de680181461025c5780631f9b74e01461026f578063248d657314610282575b600080fd5b61023f61023a366004613189565b610645565b6040516001600160601b0390911681526020015b60405180910390f35b61023f61026a3660046131da565b6106a9565b61023f61027d3660046131da565b6106ea565b610295610290366004613211565b610890565b6040516102539190613244565b6102b56102b03660046132c1565b610929565b005b6102b56102c5366004613360565b610bee565b6102b56102d83660046133b2565b610f80565b6103047f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe6369081565b6040516001600160a01b039091168152602001610253565b6103047f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b610356610351366004613189565b6112b6565b60405163ffffffff9091168152602001610253565b61037a670de0b6b3a764000081565b604051908152602001610253565b6102b56103963660046135f8565b6112cb565b61023f6103a93660046136b7565b6113e0565b6103047f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304281565b61037a6103e33660046136b7565b60009182526101b36020908152604080842060ff93909316845291905290205490565b61040e602081565b60405160ff9091168152602001610253565b61043361042e3660046136e3565b6113fb565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610253565b61023f61046e36600461370d565b611475565b6104866104813660046136b7565b6114a9565b6040516102539190613726565b6102b56104a136600461379e565b611548565b6000546104ba9062010000900461ffff1681565b60405161ffff9091168152602001610253565b61037a6104db3660046137d2565b60ff1660009081526001602052604090205490565b61023f6104fe3660046137ed565b611606565b61040e60c081565b6103047f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b6102b561054036600461382f565b61169c565b6102b5610553366004613872565b611788565b6102b561056636600461389c565b611848565b61023f6105793660046138da565b6119df565b61023f61058c3660046137d2565b611a6e565b61029561059f3660046136b7565b611adf565b6102b56105b2366004613916565b611bc6565b6103047f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b6105f16105ec366004613957565b611ea6565b6040516102539190613990565b61029561060c3660046136e3565b612113565b61037a61061f3660046137d2565b6121ab565b6106376106323660046136e3565b6121cc565b6040516102539291906139ce565b60008381526101b36020908152604080832060ff86168452909152812061066d858585612215565b63ffffffff1681548110610683576106836139f0565b600091825260209091200154600160401b90046001600160601b031690505b9392505050565b60008054839062010000900461ffff1660ff8216106106e35760405162461bcd60e51b81526004016106da90613a06565b60405180910390fd5b5092915050565b60008054839062010000900461ffff1660ff82161061071b5760405162461bcd60e51b81526004016106da90613a06565b60ff84166000908152600160209081526040808320548151808301909252838252918101839052825b828110156108845760ff88166000908152600160205260409020805482908110610770576107706139f0565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b81528b8316600482015260248101919091529194507f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063778e55f390604401602060405180830381865afa158015610816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a9190613a63565b9050801561087b57670de0b6b3a764000083602001516001600160601b0316826108649190613a92565b61086e9190613ab1565b6108789086613ad3565b94505b50600101610744565b50919695505050505050565b60408051606081018252600080825260208083018290528284018290528582526101b3815283822060ff881683529052919091208054839081106108d6576108d66139f0565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b336001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304216146109715760405162461bcd60e51b81526004016106da90613afe565b60005462010000900461ffff16828261098b600182613b70565b81811061099a5761099a6139f0565b9050013560f81c60f81b60f81c60ff1610610a3a5760405162461bcd60e51b815260206004820152605460248201527f5374616b6552656769737472792e5f72656769737465724f70657261746f723a60448201527f2067726561746573742071756f72756d4e756d626572206d757374206265206c606482015273195cdcc81d1a185b881c5d5bdc9d5b50dbdd5b9d60621b608482015260a4016106da565b604080516060810182526000602082018190529181018290524363ffffffff168152905b60ff8116831115610be657600084848360ff16818110610a8057610a806139f0565b919091013560f81c915060009050610a9988888461253c565b9150506001600160601b038116610b3e5760405162461bcd60e51b815260206004820152605c60248201527f5374616b6552656769737472792e5f72656769737465724f70657261746f723a60448201527f204f70657261746f7220646f6573206e6f74206d656574206d696e696d756d2060648201527f7374616b6520726571756972656d656e7420666f722071756f72756d00000000608482015260a4016106da565b600060b38360ff166101008110610b5757610b576139f0565b01549050818115610bbe5760b38460ff166101008110610b7957610b796139f0565b01610b85600184613b70565b81548110610b9557610b956139f0565b600091825260209091200154610bbb90600160401b90046001600160601b031682613ad3565b90505b6001600160601b0381166040870152610bd78487612641565b84600101945050505050610a5e565b505050505050565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190613b87565b6001600160a01b0316336001600160a01b031614610ca05760405162461bcd60e51b81526004016106da90613ba4565b600054839062010000900461ffff1660ff821610610cd05760405162461bcd60e51b81526004016106da90613a06565b8180610d6a5760405162461bcd60e51b815260206004820152605760248201527f566f746557656967686572426173652e72656d6f76655374726174656769657360448201527f436f6e73696465726564416e644d756c7469706c696572733a206e6f20696e6460648201527f6963657320746f2072656d6f76652070726f7669646564000000000000000000608482015260a4016106da565b60005b81811015610be65760ff861660008181526001602052604090207f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f790878785818110610dbb57610dbb6139f0565b9050602002013581548110610dd257610dd26139f0565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a260ff861660008181526001602052604090207f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7590878785818110610e3e57610e3e6139f0565b9050602002013581548110610e5557610e556139f0565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a260ff8616600090815260016020819052604090912080549091610ea791613b70565b81548110610eb757610eb76139f0565b6000918252602080832060ff8a16845260019091526040909220910190868684818110610ee657610ee66139f0565b9050602002013581548110610efd57610efd6139f0565b600091825260208083208454920180546001600160a01b0319166001600160a01b03909316928317815593546001600160601b03600160a01b91829004160290911790925560ff88168152600190915260409020805480610f6057610f60613c20565b600082815260208120820160001990810191909155019055600101610d6d565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190613b87565b6001600160a01b0316336001600160a01b0316146110325760405162461bcd60e51b81526004016106da90613ba4565b600054859062010000900461ffff1660ff8216106110625760405162461bcd60e51b81526004016106da90613a06565b83806110e25760405162461bcd60e51b815260206004820152604360248201527f566f746557656967686572426173652e6d6f646966795374726174656779576560448201527f69676874733a206e6f20737472617465677920696e64696365732070726f766960648201526219195960ea1b608482015260a4016106da565b8281146111575760405162461bcd60e51b815260206004820152603c60248201527f566f746557656967686572426173652e6d6f646966795374726174656779576560448201527f69676874733a20696e707574206c656e677468206d69736d617463680000000060648201526084016106da565b60005b818110156112ac57848482818110611174576111746139f0565b90506020020160208101906111899190613c36565b60ff891660009081526001602052604090208888848181106111ad576111ad6139f0565b90506020020135815481106111c4576111c46139f0565b6000918252602080832090910180546001600160601b0394909416600160a01b026001600160a01b039094169390931790925560ff8a168082526001909252604090207f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a759089898581811061123b5761123b6139f0565b9050602002013581548110611252576112526139f0565b6000918252602090912001546001600160a01b0316878785818110611279576112796139f0565b905060200201602081019061128e9190613c36565b60405161129c9291906139ce565b60405180910390a260010161115a565b5050505050505050565b60006112c3848484612215565b949350505050565b600054610100900460ff16158080156112eb5750600054600160ff909116105b806113055750303b158015611305575060005460ff166001145b6113685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106da565b6000805460ff19166001179055801561138b576000805461ff0019166101001790555b611395838361275b565b80156113db576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000806113ed8484611adf565b604001519150505b92915050565b604080518082019091526000808252602082015260ff83166000908152600160205260409020805483908110611433576114336139f0565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b603381610100811061148657600080fd5b60029182820401919006600c02915054906101000a90046001600160601b031681565b60008281526101b36020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b8282101561153c576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b0316908201528252600190920191016114e3565b50505050905092915050565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190613b87565b6001600160a01b0316336001600160a01b0316146115fa5760405162461bcd60e51b81526004016106da90613ba4565b6116038161289f565b50565b60008281526101b36020908152604080832060ff881684529091528120805482919084908110611638576116386139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b9093049290921690820152905061168f818661299f565b6040015195945050505050565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190613b87565b6001600160a01b0316336001600160a01b03161461174e5760405162461bcd60e51b81526004016106da90613ba4565b600054829062010000900461ffff1660ff82161061177e5760405162461bcd60e51b81526004016106da90613a06565b6113db8383612b20565b7f000000000000000000000000c3e53f4d16ae77db1c982e75a937b9f60fe636906001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a9190613b87565b6001600160a01b0316336001600160a01b03161461183a5760405162461bcd60e51b81526004016106da90613ba4565b6118448282612f52565b5050565b336001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f37304216146118905760405162461bcd60e51b81526004016106da90613afe565b60408051606080820183526000602080840182905283850182905263ffffffff43168085528551938401865290830182905293820181905292815290915b60ff8116841115610be657600085858360ff168181106118f0576118f06139f0565b919091013560f81c915060009050611909888387612fe7565b90508060b38360ff166101008110611923576119236139f0565b01600160b38560ff16610100811061193d5761193d6139f0565b01546119499190613b70565b81548110611959576119596139f0565b60009182526020909120015461197f9190600160401b90046001600160601b0316613c51565b6001600160601b031660408501526119978285612641565b6040805160ff841681526000602082015289917fe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934910160405180910390a250506001016118ce565b60008060b38560ff1661010081106119f9576119f96139f0565b018381548110611a0b57611a0b6139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611a62818561299f565b60400151949350505050565b600060b38260ff166101008110611a8757611a876139f0565b01600160b38460ff166101008110611aa157611aa16139f0565b0154611aad9190613b70565b81548110611abd57611abd6139f0565b600091825260209091200154600160401b90046001600160601b031692915050565b6040805160608082018352600080835260208084018290528385018290528682526101b3815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611b395791506113f59050565b60008581526101b36020908152604080832060ff881684529091529020611b61600184613b70565b81548110611b7157611b716139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015292506113f5915050565b60005b60005462010000900461ffff1660ff821610156113db5760408051606081018252600080825260208201819052918101829052905b83811015611e855760007f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f3730426001600160a01b03166313542a4e878785818110611c4957611c496139f0565b9050602002016020810190611c5e9190613c79565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc69190613a63565b604051633431af2560e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000009e545e3c0baab3e08cdfd552c960a1050f3730421690633431af2590602401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190613c96565b905060016001600160c01b03821660ff87161c81161415611e7b57835163ffffffff16611e175760b38560ff166101008110611d9357611d936139f0565b01600160b38760ff166101008110611dad57611dad6139f0565b0154611db99190613b70565b81548110611dc957611dc96139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015293505b600080611e4b898987818110611e2f57611e2f6139f0565b9050602002016020810190611e449190613c79565b858961253c565b9150915080828760400151611e609190613c51565b611e6a9190613ad3565b6001600160601b0316604087015250505b5050600101611bfe565b50805163ffffffff1615611e9d57611e9d8282612641565b50600101611bc9565b60606000826001600160401b03811115611ec257611ec2613432565b604051908082528060200260200182016040528015611eeb578160200160208202803683370190505b50905060005b8381101561210a576000858583818110611f0d57611f0d6139f0565b919091013560f81c91505063ffffffff871660b3826101008110611f3357611f336139f0565b01600081548110611f4657611f466139f0565b60009182526020909120015463ffffffff1611156120055760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f6573427951756f72756d4e756d626572734174426c6f636b4e756d6265723a2060648201527f71756f72756d20686173206e6f207374616b6520686973746f727920617420626084820152693637b1b5a73ab6b132b960b11b60a482015260c4016106da565b600060b38260ff16610100811061201e5761201e6139f0565b0154905060005b8163ffffffff168163ffffffff1610156120f4578863ffffffff1660b38460ff166101008110612057576120576139f0565b0160016120648486613cbf565b61206e9190613cbf565b63ffffffff1681548110612084576120846139f0565b60009182526020909120015463ffffffff16116120e25760016120a78284613cbf565b6120b19190613cbf565b8585815181106120c3576120c36139f0565b602002602001019063ffffffff16908163ffffffff16815250506120f4565b806120ec81613cdc565b915050612025565b505050808061210290613d00565b915050611ef1565b50949350505050565b604080516060810182526000808252602082018190529181019190915260b38360ff166101008110612147576121476139f0565b018281548110612159576121596139f0565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b600060b38260ff1661010081106121c4576121c46139f0565b015492915050565b600160205281600052604060002081815481106121e857600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60008381526101b36020908152604080832060ff86168452909152812054815b8163ffffffff168163ffffffff16101561246c5760008681526101b36020908152604080832060ff89168452909152902063ffffffff851690600161227a8486613cbf565b6122849190613cbf565b63ffffffff168154811061229a5761229a6139f0565b60009182526020909120015463ffffffff161161245a5760008681526101b36020908152604080832060ff89168452909152902060016122da8385613cbf565b6122e49190613cbf565b63ffffffff16815481106122fa576122fa6139f0565b600091825260209091200154600160201b900463ffffffff161580612386575060008681526101b36020908152604080832060ff89168452909152902063ffffffff851690600161234b8486613cbf565b6123559190613cbf565b63ffffffff168154811061236b5761236b6139f0565b600091825260209091200154600160201b900463ffffffff16115b61243b5760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724964466f7251756f72756d4174426c6f636b4e60648201527f756d6265723a206f70657261746f72496420686173206e6f207374616b652075608482015273383230ba329030ba10313637b1b5a73ab6b132b960611b60a482015260c4016106da565b60016124478284613cbf565b6124519190613cbf565b925050506106a2565b8061246481613cdc565b915050612235565b5060405162461bcd60e51b815260206004820152608c60248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724964466f7251756f72756d4174426c6f636b4e60648201527f756d6265723a206e6f207374616b652075706461746520666f756e6420666f7260848201527f206f70657261746f72496420616e642071756f72756d4e756d6265722061742060a48201526b313637b1b590373ab6b132b960a11b60c482015260e4016106da565b604080516060810182526000602082018190529181018290524363ffffffff168152819061256a84876106ea565b6001600160601b03166040820152603360ff8516610100811061258f5761258f6139f0565b60029182820401919006600c029054906101000a90046001600160601b03166001600160601b031681604001516001600160601b031610156125d357600060408201525b60006125e0868684612fe7565b604080840151815160ff891681526001600160601b03909116602082015291925087917fe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934910160405180910390a26040909101519092509050935093915050565b600060b38360ff16610100811061265a5761265a6139f0565b0154905080156126c4574360b38460ff16610100811061267c5761267c6139f0565b01612688600184613b70565b81548110612698576126986139f0565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff1602179055505b63ffffffff4316825260b360ff841661010081106126e4576126e46139f0565b0180546001810182556000918252602091829020845191018054928501516040909501516001600160601b0316600160401b026bffffffffffffffffffffffff60401b1963ffffffff968716600160201b0267ffffffffffffffff1990951696909316959095179290921716929092179091555050565b600054610100900460ff166127c65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016106da565b805182511461283d5760405162461bcd60e51b815260206004820152603b60248201527f52656769737472792e5f696e697469616c697a653a206d696e696d756d53746160448201527f6b65466f7251756f72756d206c656e677468206d69736d61746368000000000060648201526084016106da565b60005b81518160ff1610156113db5761287281848360ff1681518110612865576128656139f0565b6020026020010151612f52565b612897828260ff168151811061288a5761288a6139f0565b602002602001015161289f565b600101612840565b60005462010000900461ffff1660c0811061293a5760405162461bcd60e51b815260206004820152604f60248201527f566f746557656967686572426173652e5f63726561746551756f72756d3a206e60448201527f756d626572206f662071756f72756d732063616e6e6f7420657863656564204d60648201526e105617d45553d4955357d0d3d55395608a1b608482015260a4016106da565b80612946816001613d1b565b600060026101000a81548161ffff021916908361ffff16021790555061296c8184612b20565b60405160ff8216907f831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b490600090a2505050565b815163ffffffff80831691161115612a455760405162461bcd60e51b815260206004820152606060248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a206f70657261746f725374616b6560648201527f5570646174652069732066726f6d20616674657220626c6f636b4e756d626572608482015260a4016106da565b602082015163ffffffff161580612a6b57508063ffffffff16826020015163ffffffff16115b6118445760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a2074686572652069732061206e6560648201527f776572206f70657261746f725374616b6555706461746520617661696c61626c60848201527332903132b337b93290313637b1b5a73ab6b132b960611b60a482015260c4016106da565b6000815111612b9c5760405162461bcd60e51b815260206004820152604e6024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a206e6f20737472617460648201526d1959da595cc81c1c9bdd9a59195960921b608482015260a4016106da565b805160ff831660009081526001602090815260409091205490612bbf8383613d38565b1115612c475760405162461bcd60e51b815260206004820152605b6024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a20657863656564204d60648201527f41585f5745494748494e475f46554e4354494f4e5f4c454e4754480000000000608482015260a4016106da565b60005b82811015612f4b5760005b612c5f8284613d38565b811015612d5257848281518110612c7857612c786139f0565b6020026020010151600001516001600160a01b0316600160008860ff1660ff1681526020019081526020016000208281548110612cb757612cb76139f0565b6000918252602090912001546001600160a01b03161415612d4a5760405162461bcd60e51b81526020600482015260536024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a2063616e6e6f7420616064820152720c8c840e6c2daca40e6e8e4c2e8cacef24064f606b1b608482015260a4016106da565b600101612c55565b506000848281518110612d6757612d676139f0565b6020026020010151602001516001600160601b031611612e035760405162461bcd60e51b815260206004820152605c6024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a2063616e6e6f74206160648201527f64642073747261746567792077697468207a65726f2077656967687400000000608482015260a4016106da565b60ff851660009081526001602052604090208451859083908110612e2957612e296139f0565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612ea657612ea66139f0565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612f0357612f036139f0565b602002602001015160000151868481518110612f2157612f216139f0565b602002602001015160200151604051612f3b9291906139ce565b60405180910390a2600101612c4a565b5050505050565b8060338360ff166101008110612f6a57612f6a6139f0565b60029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b031602179055508160ff167f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf82604051612fdb91906001600160601b0391909116815260200190565b60405180910390a25050565b60008381526101b36020908152604080832060ff86168452909152812054819080156130ca5760008681526101b36020908152604080832060ff8916845290915290204390613037600184613b70565b81548110613047576130476139f0565b60009182526020808320909101805463ffffffff94909416600160201b0267ffffffff0000000019909416939093179092558781526101b38252604080822060ff891683529092522061309b600183613b70565b815481106130ab576130ab6139f0565b600091825260209091200154600160401b90046001600160601b031691505b5060008581526101b36020908152604080832060ff88168452825280832080546001810182559084529282902086519301805492870151918701516001600160601b0316600160401b026bffffffffffffffffffffffff60401b1963ffffffff938416600160201b0267ffffffffffffffff199095169390951692909217929092179290921691909117905590509392505050565b803560ff8116811461317057600080fd5b919050565b803563ffffffff8116811461317057600080fd5b60008060006060848603121561319e57600080fd5b833592506131ae6020850161315f565b91506131bc60408501613175565b90509250925092565b6001600160a01b038116811461160357600080fd5b600080604083850312156131ed57600080fd5b6131f68361315f565b91506020830135613206816131c5565b809150509250929050565b60008060006060848603121561322657600080fd5b61322f8461315f565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b031690820152606081016113f5565b60008083601f84011261328b57600080fd5b5081356001600160401b038111156132a257600080fd5b6020830191508360208285010111156132ba57600080fd5b9250929050565b600080600080606085870312156132d757600080fd5b84356132e2816131c5565b93506020850135925060408501356001600160401b0381111561330457600080fd5b61331087828801613279565b95989497509550505050565b60008083601f84011261332e57600080fd5b5081356001600160401b0381111561334557600080fd5b6020830191508360208260051b85010111156132ba57600080fd5b60008060006040848603121561337557600080fd5b61337e8461315f565b925060208401356001600160401b0381111561339957600080fd5b6133a58682870161331c565b9497909650939450505050565b6000806000806000606086880312156133ca57600080fd5b6133d38661315f565b945060208601356001600160401b03808211156133ef57600080fd5b6133fb89838a0161331c565b9096509450604088013591508082111561341457600080fd5b506134218882890161331c565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561346a5761346a613432565b60405290565b604051601f8201601f191681016001600160401b038111828210171561349857613498613432565b604052919050565b60006001600160401b038211156134b9576134b9613432565b5060051b60200190565b80356001600160601b038116811461317057600080fd5b600082601f8301126134eb57600080fd5b813560206135006134fb836134a0565b613470565b82815260069290921b8401810191818101908684111561351f57600080fd5b8286015b8481101561356e576040818903121561353c5760008081fd5b613544613448565b813561354f816131c5565b815261355c8286016134c3565b81860152835291830191604001613523565b509695505050505050565b600082601f83011261358a57600080fd5b8135602061359a6134fb836134a0565b82815260059290921b840181019181810190868411156135b957600080fd5b8286015b8481101561356e5780356001600160401b038111156135dc5760008081fd5b6135ea8986838b01016134da565b8452509183019183016135bd565b6000806040838503121561360b57600080fd5b82356001600160401b038082111561362257600080fd5b818501915085601f83011261363657600080fd5b813560206136466134fb836134a0565b82815260059290921b8401810191818101908984111561366557600080fd5b948201945b8386101561368a5761367b866134c3565b8252948201949082019061366a565b965050860135925050808211156136a057600080fd5b506136ad85828601613579565b9150509250929050565b600080604083850312156136ca57600080fd5b823591506136da6020840161315f565b90509250929050565b600080604083850312156136f657600080fd5b6136ff8361315f565b946020939093013593505050565b60006020828403121561371f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156137925761377f83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101613742565b50909695505050505050565b6000602082840312156137b057600080fd5b81356001600160401b038111156137c657600080fd5b6112c3848285016134da565b6000602082840312156137e457600080fd5b6106a28261315f565b6000806000806080858703121561380357600080fd5b61380c8561315f565b935061381a60208601613175565b93969395505050506040820135916060013590565b6000806040838503121561384257600080fd5b61384b8361315f565b915060208301356001600160401b0381111561386657600080fd5b6136ad858286016134da565b6000806040838503121561388557600080fd5b61388e8361315f565b91506136da602084016134c3565b6000806000604084860312156138b157600080fd5b8335925060208401356001600160401b038111156138ce57600080fd5b6133a586828701613279565b6000806000606084860312156138ef57600080fd5b6138f88461315f565b925061390660208501613175565b9150604084013590509250925092565b6000806020838503121561392957600080fd5b82356001600160401b0381111561393f57600080fd5b61394b8582860161331c565b90969095509350505050565b60008060006040848603121561396c57600080fd5b61397584613175565b925060208401356001600160401b038111156138ce57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561379257835163ffffffff16835292840192918401916001016139ac565b6001600160a01b039290921682526001600160601b0316602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6020808252603c908201527f566f746557656967686572426173652e76616c696451756f72756d4e756d626560408201527f723a2071756f72756d4e756d626572206973206e6f742076616c696400000000606082015260800190565b600060208284031215613a7557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613aac57613aac613a7c565b500290565b600082613ace57634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b03808316818516808303821115613af557613af5613a7c565b01949350505050565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b600082821015613b8257613b82613a7c565b500390565b600060208284031215613b9957600080fd5b81516106a2816131c5565b60208082526056908201527f566f746557656967686572426173652e6f6e6c79536572766963654d616e616760408201527f65724f776e65723a2063616c6c6572206973206e6f7420746865206f776e65726060820152751037b3103a34329039b2b93b34b1b2a6b0b730b3b2b960511b608082015260a00190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613c4857600080fd5b6106a2826134c3565b60006001600160601b0383811690831681811015613c7157613c71613a7c565b039392505050565b600060208284031215613c8b57600080fd5b81356106a2816131c5565b600060208284031215613ca857600080fd5b81516001600160c01b03811681146106a257600080fd5b600063ffffffff83811690831681811015613c7157613c71613a7c565b600063ffffffff80831681811415613cf657613cf6613a7c565b6001019392505050565b6000600019821415613d1457613d14613a7c565b5060010190565b600061ffff808316818516808303821115613af557613af5613a7c565b60008219821115613d4b57613d4b613a7c565b50019056fe566f746557656967686572426173652e5f61646453747261746567696573436fa264697066735822122040cbffca83b2c647f2881f166ae1d075d9bba20ed6bb392a8902e7271d9dd1ad64736f6c634300080c0033","storage":{"0x0":"0xff"}}}} \ No newline at end of file diff --git a/cmd/egnaddrs/test_data/eigenlayer-and-registries-deployed-anvil-state.json b/cmd/egnaddrs/test_data/eigenlayer-and-registries-deployed-anvil-state.json new file mode 100644 index 00000000..e8cfdbaa --- /dev/null +++ b/cmd/egnaddrs/test_data/eigenlayer-and-registries-deployed-anvil-state.json @@ -0,0 +1 @@ +{"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x1f115816a163200","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x1e","0x97":"0x0","0x9a":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x09635f643e140090a9a8dcd712ed6285858cebef":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c043d55aae46cecfa459a39000413fd977359bf3661a19b41228c6cedf04ccf964736f6c634300080c0033","storage":{"0x0":"0xa85233c63b9ee964add6f2cffe00fd84eb32338f0001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0xe6e340d132b5f46d1e472debcd681b2abc16e57e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0xc5a5c42992decbae36851359345fe25997f5c42d","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0x67d269191c92caf3cd7723f116c85e6e9bf55933","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80639104c3191161010d578063c0ccbf10116100a0578063daf12cd41161006f578063daf12cd4146105ec578063ea4d3c9b1461060c578063f2fde38b14610640578063f6848d2414610660578063fabc1cbc1461069b57600080fd5b8063c0ccbf1014610576578063c1de3aef1461058c578063c2c51c40146105ac578063d1c64cc9146105cc57600080fd5b8063a6a509be116100dc578063a6a509be146104ec578063b134427114610502578063beffbb8914610536578063c052bd611461055657600080fd5b80639104c3191461045b5780639b4e4634146104835780639ba0627514610496578063a38406a3146104cc57600080fd5b80635ac86ab71161018557806374cdd7981161015457806374cdd798146103d457806384d8106214610408578063886f11951461041d5780638da5cb5b1461043d57600080fd5b80635ac86ab71461033d5780635c975abb1461037d57806360f4062b14610392578063715018a6146103bf57600080fd5b8063292b7b2b116101c1578063292b7b2b14610288578063387b1300146102d457806339b70e38146102f4578063595c6a671461032857600080fd5b80630cf2686d146101f35780630e81073c1461021557806310d67a2f14610248578063136439dd14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e3660046122df565b6106bb565b005b34801561022157600080fd5b5061023561023036600461230d565b610777565b6040519081526020015b60405180910390f35b34801561025457600080fd5b50610213610263366004612339565b610982565b34801561027457600080fd5b506102136102833660046122df565b610a32565b34801561029457600080fd5b506102bc7f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b6040516001600160a01b03909116815260200161023f565b3480156102e057600080fd5b506102136102ef366004612356565b610b71565b34801561030057600080fd5b506102bc7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561033457600080fd5b50610213610eb4565b34801561034957600080fd5b5061036d610358366004612397565b606654600160ff9092169190911b9081161490565b604051901515815260200161023f565b34801561038957600080fd5b50606654610235565b34801561039e57600080fd5b506102356103ad366004612339565b609b6020526000908152604090205481565b3480156103cb57600080fd5b50610213610f7b565b3480156103e057600080fd5b506102bc7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b34801561041457600080fd5b506102bc610f8f565b34801561042957600080fd5b506065546102bc906001600160a01b031681565b34801561044957600080fd5b506033546001600160a01b03166102bc565b34801561046757600080fd5b506102bc73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610213610491366004612403565b611079565b3480156104a257600080fd5b506102bc6104b1366004612339565b6098602052600090815260409020546001600160a01b031681565b3480156104d857600080fd5b506102bc6104e7366004612339565b611168565b3480156104f857600080fd5b5061023560995481565b34801561050e57600080fd5b506102bc7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b34801561054257600080fd5b5061021361055136600461230d565b61123a565b34801561056257600080fd5b506097546102bc906001600160a01b031681565b34801561058257600080fd5b50610235609a5481565b34801561059857600080fd5b506102136105a7366004612339565b611451565b3480156105b857600080fd5b506102136105c736600461230d565b611462565b3480156105d857600080fd5b506102356105e7366004612477565b611834565b3480156105f857600080fd5b506102136106073660046124a1565b61193f565b34801561061857600080fd5b506102bc7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561064c57600080fd5b5061021361065b366004612339565b611a72565b34801561066c57600080fd5b5061036d61067b366004612339565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106a757600080fd5b506102136106b63660046122df565b611ae8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073291906124fc565b6001600160a01b0316336001600160a01b03161461076b5760405162461bcd60e51b815260040161076290612519565b60405180910390fd5b61077481611c44565b50565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146107c15760405162461bcd60e51b815260040161076290612563565b6001600160a01b03831661083d5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610762565b60008212156108ab5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610762565b6108b9633b9aca00836125d7565b1561092c5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610762565b6001600160a01b0383166000908152609b6020526040812054906109508483612601565b6001600160a01b0386166000908152609b6020526040902081905590506109778282611c85565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f991906124fc565b6001600160a01b0316336001600160a01b031614610a295760405162461bcd60e51b815260040161076290612519565b61077481611cc7565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190612642565b610aba5760405162461bcd60e51b815260040161076290612664565b60665481811614610b335760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610762565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610bb95760405162461bcd60e51b815260040161076290612563565b6001600160a01b038316610c335760405162461bcd60e51b8152602060048201526047602482015260008051602061314183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610762565b6001600160a01b038216610cb05760405162461bcd60e51b815260206004820152604a602482015260008051602061314183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610762565b6000811215610d1f5760405162461bcd60e51b8152602060048201526041602482015260008051602061314183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610762565b610d2d633b9aca00826125d7565b15610da15760405162461bcd60e51b815260206004820152604a602482015260008051602061314183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610762565b6001600160a01b0383166000908152609b602052604081205490811215610e38576000610dcd826126ac565b905080831115610e01576001600160a01b0385166000908152609b6020526040812055610dfa81846126c9565b9250610e36565b6001600160a01b0385166000908152609b602052604081208054859290610e29908490612601565b90915550610eaf92505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e9557600080fd5b505af1158015610ea9573d6000803e3d6000fd5b50505050505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f209190612642565b610f3c5760405162461bcd60e51b815260040161076290612664565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610f83611dbe565b610f8d6000611e18565b565b606654600090819060019081161415610fe65760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610762565b336000908152609860205260409020546001600160a01b0316156110685760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610762565b6000611072611e6a565b9250505090565b606654600090600190811614156110ce5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610762565b336000908152609860205260409020546001600160a01b0316806110f7576110f4611e6a565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e463490349061112d908b908b908b908b908b90600401612709565b6000604051808303818588803b15801561114657600080fd5b505af115801561115a573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061097c57611233836001600160a01b031660001b60405180610940016040528061090e815260200161283361090e9139604080516001600160a01b037f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318166020820152808201919091526000606082015260800160408051601f1981840301815290829052611218929160200161277e565b60405160208183030381529060405280519060200120612045565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146112825760405162461bcd60e51b815260040161076290612563565b60008112156112f95760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610762565b611307633b9aca00826125d7565b1561137c576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610762565b6001600160a01b0382166000908152609b60205260408120546113a0908390612793565b905060008112156114315760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610762565b6001600160a01b039092166000908152609b602052604090209190915550565b611459611dbe565b610774816120a1565b6001600160a01b0380831660009081526098602052604090205483911633146114dd5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610762565b600260c95414156115305760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610762565b600260c9556001600160a01b0383166115cc5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610762565b6115da633b9aca00836127d2565b156116735760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610762565b6001600160a01b0383166000908152609b6020526040812054906116978483612601565b6001600160a01b0386166000908152609b602052604081208290559091506116bf8383611c85565b9050801561182757600081121561178a576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061171e856126ac565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561176d57600080fd5b505af1158015611781573d6000803e3d6000fd5b50505050611827565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b15801561180e57600080fd5b505af1158015611822573d6000803e3d6000fd5b505050505b5050600160c95550505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af91906127e6565b90508061097c5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a401610762565b600054610100900460ff161580801561195f5750600054600160ff909116105b806119795750303b158015611979575060005460ff166001145b6119dc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610762565b6000805460ff1916600117905580156119ff576000805461ff0019166101001790555b611a0886611c44565b611a11856120a1565b611a1a84611e18565b611a2483836120eb565b8015611a6a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b611a7a611dbe565b6001600160a01b038116611adf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610762565b61077481611e18565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f91906124fc565b6001600160a01b0316336001600160a01b031614611b8f5760405162461bcd60e51b815260040161076290612519565b606654198119606654191614611c0d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610762565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b66565b609a5460408051918252602082018390527f4e65c41a3597bda732ca64980235cf51494171d5853998763fb05db45afaacb3910160405180910390a1609a55565b6000808313611ca55760008213611c9e5750600061097c565b508061097c565b60008213611cbd57611cb6836126ac565b905061097c565b611cb68383612793565b6001600160a01b038116611d555760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610762565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610f8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610762565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000609a546099546001611e7e91906127ff565b1115611ee25760405162461bcd60e51b815260206004820152602d60248201527f456967656e506f644d616e616765722e5f6465706c6f79506f643a20706f642060448201526c1b1a5b5a5d081c995858da1959609a1b6064820152608401610762565b609960008154611ef190612817565b9091555060408051610940810190915261090e808252600091611f9091839133916128336020830139604080516001600160a01b037f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318166020820152808201919091526000606082015260800160408051601f1981840301815290829052611f7c929160200161277e565b6040516020818303038152906040526121d5565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611fd457600080fd5b505af1158015611fe8573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611233565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561210c57506001600160a01b03821615155b61218e5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610762565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26121d182611cc7565b5050565b600080844710156122285760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610762565b82516122765760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610762565b8383516020850187f590506001600160a01b0381166122d75760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610762565b949350505050565b6000602082840312156122f157600080fd5b5035919050565b6001600160a01b038116811461077457600080fd5b6000806040838503121561232057600080fd5b823561232b816122f8565b946020939093013593505050565b60006020828403121561234b57600080fd5b8135611233816122f8565b60008060006060848603121561236b57600080fd5b8335612376816122f8565b92506020840135612386816122f8565b929592945050506040919091013590565b6000602082840312156123a957600080fd5b813560ff8116811461123357600080fd5b60008083601f8401126123cc57600080fd5b50813567ffffffffffffffff8111156123e457600080fd5b6020830191508360208285010111156123fc57600080fd5b9250929050565b60008060008060006060868803121561241b57600080fd5b853567ffffffffffffffff8082111561243357600080fd5b61243f89838a016123ba565b9097509550602088013591508082111561245857600080fd5b50612465888289016123ba565b96999598509660400135949350505050565b60006020828403121561248957600080fd5b813567ffffffffffffffff8116811461123357600080fd5b600080600080600060a086880312156124b957600080fd5b8535945060208601356124cb816122f8565b935060408601356124db816122f8565b925060608601356124eb816122f8565b949793965091946080013592915050565b60006020828403121561250e57600080fd5b8151611233816122f8565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826125e6576125e66125c1565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b0384900385131615612623576126236125eb565b600160ff1b839003841281161561263c5761263c6125eb565b50500190565b60006020828403121561265457600080fd5b8151801515811461123357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156126c2576126c26125eb565b5060000390565b6000828210156126db576126db6125eb565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061271d6060830187896126e0565b82810360208401526127308186886126e0565b9150508260408301529695505050505050565b6000815160005b81811015612764576020818501810151868301520161274a565b81811115612773576000828601525b509290920192915050565b60006122d761278d8386612743565b84612743565b60008083128015600160ff1b8501841216156127b1576127b16125eb565b6001600160ff1b03840183138116156127cc576127cc6125eb565b50500390565b6000826127e1576127e16125c1565b500790565b6000602082840312156127f857600080fd5b5051919050565b60008219821115612812576128126125eb565b500190565b600060001982141561282b5761282b6125eb565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220543f9ce279848456798b3d87c119b4c7742c70fdf6bb7e22c63123da44aa75d864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614a35565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000077359400081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614a69565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614af8565b610764565b34801561036757600080fd5b506101fb7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b34801561039b57600080fd5b506103af6103aa366004614c07565b610c05565b60405161020f9190614c80565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614c8e565b610c6a565b60405161020f9190614ca7565b34801561041557600080fd5b506103af610424366004614c8e565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614cef565b610d17565b3480156104ba57600080fd5b5061022d6104c9366004614d62565b610ec4565b3480156104da57600080fd5b506103fc6104e9366004614c07565b611293565b3480156104fa57600080fd5b5061022d611386565b34801561050f57600080fd5b5061022d61051e366004614e0a565b6113f1565b34801561052f57600080fd5b5061022d61053e366004614e36565b61162e565b34801561054f57600080fd5b5061022d61055e366004614f50565b611806565b34801561056f57600080fd5b5061022d61057e366004615021565b6119d9565b34801561058f57600080fd5b5061022d61059e366004614e0a565b611da4565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061511c565b156106ad5760405162461bcd60e51b81526004016106a49061513e565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a49061519b565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a4906151e3565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f87565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a49061519b565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061511c565b156108375760405162461bcd60e51b81526004016106a49061513e565b60335489906001600160401b03600160a01b90910481169082161161086e5760405162461bcd60e51b81526004016106a490615232565b603454600160401b900460ff166108e65760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f457508483145b6109845760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099a613f486001600160401b038d16614a35565b1015610a235760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acc907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab891906152cd565b8a35610ac760208d018d6152e6565b611fbb565b6000805b88811015610b7057610b528c8c358c8c85818110610af057610af061532c565b9050602002016020810190610b059190615342565b8b8b86818110610b1757610b1761532c565b9050602002810190610b2991906152e6565b8b8b88818110610b3b57610b3b61532c565b9050602002810190610b4d9190615369565b612149565b610b5c9083614a35565b915080610b68816153b2565b915050610ad0565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f9091169063c2c51c4090604401600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125ee92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c926040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfd57610cfd614c48565b6002811115610d0e57610d0e614c48565b90525092915050565b336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f1614610d5f5760405162461bcd60e51b81526004016106a4906153cd565b346801bc16d674ec80000014610deb5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa6001600160a01b031663228951186801bc16d674ec8000008787610e2e6126e8565b8888886040518863ffffffff1660e01b8152600401610e529695949392919061549f565b6000604051808303818588803b158015610e6b57600080fd5b505af1158015610e7f573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb59291906154ee565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f50919061511c565b15610f6d5760405162461bcd60e51b81526004016106a49061513e565b8684148015610f7b57508382145b6110045760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101a613f486001600160401b038c16614a35565b101561109c5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611140907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906152cd565b8735610ac760208a018a6152e6565b6000805b888110156111e4576111c68b8b8b848181106111625761116261532c565b90506020020160208101906111779190615342565b8a358a8a8681811061118b5761118b61532c565b905060200281019061119d91906152e6565b8a8a888181106111af576111af61532c565b90506020028101906111c19190615369565b61272d565b6111d09083615502565b9150806111dc816153b2565b915050611144565b506033546001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81169163c2c51c409116611229633b9aca0085615543565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561126f57600080fd5b505af1158015611283573d6000803e3d6000fd5b5050505050505050505050505050565b6112bb6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125ee92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136b5761136b614c48565b600281111561137c5761137c614c48565b9052509392505050565b6033546001600160a01b031633146113b05760405162461bcd60e51b81526004016106a49061519b565b603454600160401b900460ff16156113da5760405162461bcd60e51b81526004016106a4906151e3565b6033546113ef906001600160a01b0316611f87565b565b336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16146114395760405162461bcd60e51b81526004016106a4906153cd565b611447633b9aca00826155de565b156114d15760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e1633b9aca00836155f2565b6034549091506001600160401b03908116908216111561159a5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b89084906001600160401b0316615606565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161791815260200190565b60405180910390a26116298383612c0b565b505050565b600054610100900460ff161580801561164e5750600054600160ff909116105b806116685750303b158015611668575060005460ff166001145b6116cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ee576000805461ff0019166101001790555b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611802576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118305760405162461bcd60e51b81526004016106a49061519b565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc919061511c565b156118d95760405162461bcd60e51b81526004016106a49061513e565b82518451146119645760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d2576119c0838583815181106119865761198661532c565b60200260200101518784815181106119a0576119a061532c565b60200260200101516001600160a01b0316612c159092919063ffffffff16565b806119ca816153b2565b915050611967565b5050505050565b604051635ac86ab760e01b81526004808201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061511c565b15611a815760405162461bcd60e51b81526004016106a49061513e565b8386148015611a8f57508588145b8015611a9a57508782145b611b0e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb2907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba391906152cd565b8b35610ac760208e018e6152e6565b604080518082019091526000808252602082015260005b83811015611cb2576000611c6d8d358d8d85818110611bea57611bea61532c565b9050602002810190611bfc919061562e565b8c8c86818110611c0e57611c0e61532c565b9050602002810190611c2091906152e6565b8c8c88818110611c3257611c3261532c565b9050602002810190611c449190615369565b8c8c8a818110611c5657611c5661532c565b9050602002810190611c689190615369565b612c67565b80518451919250908490611c82908390614a35565b9052506020808201519084018051611c9b908390615502565b905250819050611caa816153b2565b915050611bc9565b50805115611ce1576033548151611ce1916001600160a01b031690611cdc90633b9aca009061564f565b6130ae565b602081015115611d965760335460208201516001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81169263c2c51c4092911690611d3790633b9aca0090615543565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dce5760405162461bcd60e51b81526004016106a49061519b565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a919061511c565b15611e775760405162461bcd60e51b81526004016106a49061513e565b603754821115611f285760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3a919061566e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261162983836130ae565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb881476130ae565b50565b611fc76003602061564f565b81146120575760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209c82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506003905061313c565b6121435760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061315492505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f7576121f7614c48565b600281111561220857612208614c48565b905250905060008160600151600281111561222557612225614c48565b146122ce5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d66126e8565b6122df90615685565b61231b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061317892505050565b146123a25760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318d92505050565b90506123f08a87878b8b8e6131b2565b6001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000077359400081169082161115612471576001600160401b037f0000000000000000000000000000000000000000000000000000000773594000166020830152612481565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561251f5761251f614c48565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125ba9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125df919061564f565b9b9a5050505050505050505050565b600081516030146126775760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b60405160029061268e9084906000906020016156a9565b60408051601f19818403018152908290526126a8916156d8565b602060405180830381855afa1580156126c5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6491906152cd565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061276c84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318d92505050565b905060006127ac85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061315492505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561281b5761281b614c48565b600281111561282c5761282c614c48565b8152505090508a6001600160401b031681604001516001600160401b0316106128e35760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b6001816060015160028111156128fb576128fb614c48565b146129635760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b61296c8b613409565b6001600160401b03166129b18787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f392505050565b6001600160401b031611612a54576000836001600160401b031611612a545760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a628987878b8b8f6131b2565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000077359400081169086161115612ac457507f0000000000000000000000000000000000000000000000000000000773594000612ac7565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b6f57612b6f614c48565b0217905550905050816001600160401b0316816001600160401b031614612bfb577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612be69392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612bf8818361350b565b95505b5050505050979650505050505050565b611802828261352a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611629908490613643565b6040805180820190915260008082526020820152612c8c612c8789615759565b613715565b6033546001600160401b03600160a01b909104811690821611612cc15760405162461bcd60e51b81526004016106a490615232565b6000612ccf612c878b615759565b90506000612d0f88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061315492505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d3c57612d3c614c48565b1415612df35760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612eb25760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b60008181526035602090815260408083206001600160401b03861684529091529020805460ff19166001179055612eeb8c87878e613725565b6000612f2987878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061410d92505050565b9050612f398d8a8a8e8e866131b2565b6000612f7788888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061412592505050565b9050612fb58a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f392505050565b6001600160401b0316612fcf612fca8f615759565b61413d565b6001600160401b03161061308757603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261307c93869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561306357613063614c48565b600281111561307457613074614c48565b90525061414f565b9550505050506130a1565b60335461307c90839086906001600160a01b031684614360565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8539091169063c0db354c9083906044016000604051808303818588803b15801561311f57600080fd5b505af1158015613133573d6000803e3d6000fd5b50505050505050565b60008361314a86858561443e565b1495945050505050565b6000816000815181106131695761316961532c565b60200260200101519050919050565b6000816001815181106131695761316961532c565b6000610c64826002815181106131a5576131a561532c565b602002602001015161458a565b6131be60036002615979565b84146132495760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561325760286001614a35565b6132619190614a35565b61326c90602061564f565b82146132ec5760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff821661330260286001614a35565b600b901b17905060006133478787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145f192505050565b905061338d85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925085915086905061313c565b6133ff5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b031610156134b35760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b6134bf600c6020615985565b6134e97f000000000000000000000000000000000000000000000000000000006059f46084615606565b610c6491906159b4565b6000610c64826007815181106131a5576131a561532c565b60006135236001600160401b038084169085166159da565b9392505050565b8047101561357a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146135c7576040519150601f19603f3d011682016040523d82523d6000602084013e6135cc565b606091505b50509050806116295760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613698826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661489e9092919063ffffffff16565b80519091501561162957808060200190518101906136b6919061511c565b6116295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c6482610140015161458a565b613730600280615979565b82146137a45760405162461bcd60e51b81526020600482015260496024820152600080516020615a7383398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b6137b0600d6002615979565b6137c060c0830160a08401615a19565b6001600160401b03161061382a5760405162461bcd60e51b815260206004820152603f6024820152600080516020615a7383398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b61383660046002615979565b613847610100830160e08401615a19565b6001600160401b0316106138b3576040805162461bcd60e51b8152602060048201526024810191909152600080516020615a7383398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b6138bf60186002615979565b6138cf60e0830160c08401615a19565b6001600160401b0316106139495760405162461bcd60e51b81526020600482015260476024820152600080516020615a7383398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b613954600480614a35565b61395f906001614a35565b61396a90602061564f565b61397482806152e6565b9050146139e85760405162461bcd60e51b81526020600482015260486024820152600080516020615a7383398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b6139f460046003614a35565b6139ff90602061564f565b613a0c60408301836152e6565b905014613a865760405162461bcd60e51b815260206004820152604e6024820152600080516020615a7383398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613a926003602061564f565b613a9f60208301836152e6565b905014613b0d5760405162461bcd60e51b81526020600482015260426024820152600080516020615a7383398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613b196004602061564f565b613b2660608301836152e6565b905014613b995760405162461bcd60e51b81526020600482015260476024820152600080516020615a7383398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613ba760186001614a35565b613bb2906005614a35565b613bbd906001614a35565b613bc79190614a35565b613bd290602061564f565b613bdf60808301836152e6565b905014613c685760405162461bcd60e51b81526020600482015260586024820152600080516020615a7383398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613c7a60c0830160a08401615a19565b6001600160401b03166000613c91600d6001614a35565b613ca160e0860160c08701615a19565b6001600160401b0316901b600d613cba60186001614a35565b613cc5906001614a35565b613ccf9190614a35565b601b901b1717179050613d2a613ce860808401846152e6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506101008501358461313c565b613d9d5760405162461bcd60e51b815260206004820152604a6024820152600080516020615a7383398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613df4613dad60208401846152e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525061010088013593506101208801359250905061313c565b613e545760405162461bcd60e51b815260206004820152603d6024820152600080516020615a7383398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613eac613e6660408501856152e6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008501356101608601358461313c565b613f1e5760405162461bcd60e51b81526020600482015260496024820152600080516020615a7383398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b50613f76613f2f60608401846152e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160840135610140850135600961313c565b613fe45760405162461bcd60e51b815260206004820152604460248201819052600080516020615a73833981519152908201527f616c3a20496e76616c696420626c6f636b4e756d626572206d65726b6c6520706064820152633937b7b360e11b608482015260a4016106a4565b6000613ff7610100840160e08501615a19565b6001600160401b031661400c60046001614a35565b600e901b17905060006140518686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145f192505050565b90506140a161406085806152e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160860135838561313c565b6131335760405162461bcd60e51b81526020600482015260436024820152600080516020615a7383398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b6000610c64826001815181106131a5576131a561532c565b6000610c64826003815181106131a5576131a561532c565b600060206134e983610120015161458a565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000007735940006001600160401b0316846001600160401b031611156141c657507f00000000000000000000000000000000000000000000000000000007735940006141c9565b50825b60408051808201909152600080825260208201526141e78286615606565b6001600160401b03908116825260348054849260009161420991859116615a34565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061423b82856020015161350b565b602082810191909152600090850152600260608501819052506000888152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156142f2576142f2614c48565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906143f19084906001600160401b0316615a34565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561445d57506020845161445b91906155de565b155b6144ec5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b85518111614580576145106002856155de565b614543578151600052808601516020526020826040600060026107d05a03fa61453857600080fd5b60028404935061456e565b8086015160005281516020526020826040600060026107d05a03fa61456757600080fd5b6002840493505b614579602082614a35565b90506144fd565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161460291906155f2565b90506000816001600160401b0381111561461e5761461e614e53565b604051908082528060200260200182016040528015614647578160200160208202803683370190505b50905060005b8281101561474e57600285614662838361564f565b815181106146725761467261532c565b602002602001015186836002614688919061564f565b614693906001614a35565b815181106146a3576146a361532c565b60200260200101516040516020016146c5929190918252602082015260400190565b60408051601f19818403018152908290526146df916156d8565b602060405180830381855afa1580156146fc573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061471f91906152cd565b8282815181106147315761473161532c565b602090810291909101015280614746816153b2565b91505061464d565b5061475a6002836155f2565b91505b811561487a5760005b828110156148675760028261477b838361564f565b8151811061478b5761478b61532c565b6020026020010151838360026147a1919061564f565b6147ac906001614a35565b815181106147bc576147bc61532c565b60200260200101516040516020016147de929190918252602082015260400190565b60408051601f19818403018152908290526147f8916156d8565b602060405180830381855afa158015614815573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061483891906152cd565b82828151811061484a5761484a61532c565b60209081029190910101528061485f816153b2565b915050614766565b506148736002836155f2565b915061475d565b8060008151811061488d5761488d61532c565b602002602001015192505050919050565b60606148ad84846000856148b5565b949350505050565b6060824710156149165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b61496d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b0316858760405161498991906156d8565b60006040518083038185875af1925050503d80600081146149c6576040519150601f19603f3d011682016040523d82523d6000602084013e6149cb565b606091505b50915091506149db8282866149e6565b979650505050505050565b606083156149f5575081613523565b825115614a055782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615a5f565b634e487b7160e01b600052601160045260246000fd5b60008219821115614a4857614a48614a1f565b500190565b80356001600160401b0381168114614a6457600080fd5b919050565b60008060408385031215614a7c57600080fd5b82359150614a8c60208401614a4d565b90509250929050565b600060408284031215614aa757600080fd5b50919050565b60008083601f840112614abf57600080fd5b5081356001600160401b03811115614ad657600080fd5b6020830191508360208260051b8501011115614af157600080fd5b9250929050565b60008060008060008060008060a0898b031215614b1457600080fd5b614b1d89614a4d565b975060208901356001600160401b0380821115614b3957600080fd5b614b458c838d01614a95565b985060408b0135915080821115614b5b57600080fd5b614b678c838d01614aad565b909850965060608b0135915080821115614b8057600080fd5b614b8c8c838d01614aad565b909650945060808b0135915080821115614ba557600080fd5b50614bb28b828c01614aad565b999c989b5096995094979396929594505050565b60008083601f840112614bd857600080fd5b5081356001600160401b03811115614bef57600080fd5b602083019150836020828501011115614af157600080fd5b60008060208385031215614c1a57600080fd5b82356001600160401b03811115614c3057600080fd5b614c3c85828601614bc6565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614c7c57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c648284614c5e565b600060208284031215614ca057600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614ce86060840182614c5e565b5092915050565b600080600080600060608688031215614d0757600080fd5b85356001600160401b0380821115614d1e57600080fd5b614d2a89838a01614bc6565b90975095506020880135915080821115614d4357600080fd5b50614d5088828901614bc6565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614d7e57600080fd5b614d8789614a4d565b975060208901356001600160401b0380821115614da357600080fd5b614daf8c838d01614aad565b909950975060408b0135915080821115614dc857600080fd5b614dd48c838d01614a95565b965060608b0135915080821115614b8057600080fd5b6001600160a01b0381168114611fb857600080fd5b8035614a6481614dea565b60008060408385031215614e1d57600080fd5b8235614e2881614dea565b946020939093013593505050565b600060208284031215614e4857600080fd5b813561352381614dea565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614e8c57614e8c614e53565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614eba57614eba614e53565b604052919050565b60006001600160401b03821115614edb57614edb614e53565b5060051b60200190565b600082601f830112614ef657600080fd5b81356020614f0b614f0683614ec2565b614e92565b82815260059290921b84018101918181019086841115614f2a57600080fd5b8286015b84811015614f455780358352918301918301614f2e565b509695505050505050565b600080600060608486031215614f6557600080fd5b83356001600160401b0380821115614f7c57600080fd5b818601915086601f830112614f9057600080fd5b81356020614fa0614f0683614ec2565b82815260059290921b8401810191818101908a841115614fbf57600080fd5b948201945b83861015614fe6578535614fd781614dea565b82529482019490820190614fc4565b97505087013592505080821115614ffc57600080fd5b5061500986828701614ee5565b92505061501860408501614dff565b90509250925092565b60008060008060008060008060008060c08b8d03121561504057600080fd5b6150498b614a4d565b995060208b01356001600160401b038082111561506557600080fd5b6150718e838f01614a95565b9a5060408d013591508082111561508757600080fd5b6150938e838f01614aad565b909a50985060608d01359150808211156150ac57600080fd5b6150b88e838f01614aad565b909850965060808d01359150808211156150d157600080fd5b6150dd8e838f01614aad565b909650945060a08d01359150808211156150f657600080fd5b506151038d828e01614aad565b915080935050809150509295989b9194979a5092959850565b60006020828403121561512e57600080fd5b8151801515811461352357600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b6000602082840312156152df57600080fd5b5051919050565b6000808335601e198436030181126152fd57600080fd5b8301803591506001600160401b0382111561531757600080fd5b602001915036819003821315614af157600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561535457600080fd5b813564ffffffffff8116811461352357600080fd5b6000808335601e1984360301811261538057600080fd5b8301803591506001600160401b0382111561539a57600080fd5b6020019150600581901b3603821315614af157600080fd5b60006000198214156153c6576153c6614a1f565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561546257818101518382015260200161544a565b838111156121435750506000910152565b6000815180845261548b816020860160208601615447565b601f01601f19169290920160200192915050565b6080815260006154b360808301888a61541e565b82810360208401526154c58188615473565b905082810360408401526154da81868861541e565b915050826060830152979650505050505050565b6020815260006148ad60208301848661541e565b600080821280156001600160ff1b038490038513161561552457615524614a1f565b600160ff1b839003841281161561553d5761553d614a1f565b50500190565b60006001600160ff1b038184138284138082168684048611161561556957615569614a1f565b600160ff1b600087128281168783058912161561558857615588614a1f565b600087129250878205871284841616156155a4576155a4614a1f565b878505871281841616156155ba576155ba614a1f565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826155ed576155ed6155c8565b500690565b600082615601576156016155c8565b500490565b60006001600160401b038381169083168181101561562657615626614a1f565b039392505050565b6000823561017e1983360301811261564557600080fd5b9190910192915050565b600081600019048311821515161561566957615669614a1f565b500290565b60008282101561568057615680614a1f565b500390565b80516020808301519190811015614aa75760001960209190910360031b1b16919050565b600083516156bb818460208801615447565b6001600160801b0319939093169190920190815260100192915050565b60008251615645818460208701615447565b600082601f8301126156fb57600080fd5b81356001600160401b0381111561571457615714614e53565b615727601f8201601f1916602001614e92565b81815284602083860101111561573c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561576c57600080fd5b615774614e69565b82356001600160401b038082111561578b57600080fd5b615797368387016156ea565b835260208501359150808211156157ad57600080fd5b6157b9368387016156ea565b602084015260408501359150808211156157d257600080fd5b6157de368387016156ea565b604084015260608501359150808211156157f757600080fd5b615803368387016156ea565b6060840152608085013591508082111561581c57600080fd5b50615829368286016156ea565b60808301525061583b60a08401614a4d565b60a082015261584c60c08401614a4d565b60c082015261585d60e08401614a4d565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600181815b808511156158d05781600019048211156158b6576158b6614a1f565b808516156158c357918102915b93841c939080029061589a565b509250929050565b6000826158e757506001610c64565b816158f457506000610c64565b816001811461590a576002811461591457615930565b6001915050610c64565b60ff84111561592557615925614a1f565b50506001821b610c64565b5060208310610133831016604e8410600b8410161715615953575081810a610c64565b61595d8383615895565b806000190482111561597157615971614a1f565b029392505050565b600061352383836158d8565b60006001600160401b03808316818516818304811182151516156159ab576159ab614a1f565b02949350505050565b60006001600160401b03808416806159ce576159ce6155c8565b92169190910492915050565b60008083128015600160ff1b8501841216156159f8576159f8614a1f565b6001600160ff1b0384018313811615615a1357615a13614a1f565b50500390565b600060208284031215615a2b57600080fd5b61352382614a4d565b60006001600160401b03808316818516808303821115615a5657615a56614a1f565b01949350505050565b602081526000613523602083018461547356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220a70662ddf5cc6c48da2de15b85bdb76166a7de80fea7d4fd1263864700cbbdaf64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x322813fd9a801c5507c9de605d63cea4f2ce6c44":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220d11184ba2dff1961666889222fc0829dee45693f54d9584db1ccb40569d4b7b964736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4a679253410272dd5232b3ff7cf5dbb88f295319":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220602a79ca6a5736eabf3a0957cc0be8065a985c1fefc98e5c0e37d16e0795383a64736f6c634300080c0033","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212200fdbd2e25973eab45d03ab46d4fda931522c5b45bccd7b63ecf3c38942f8913564736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061038e5760003560e01c806365da1264116101de578063b13442711161010f578063d79aceab116100ad578063f16172b01161007c578063f16172b0146109f5578063f2fde38b14610a08578063f698da2514610a1b578063fabc1cbc14610a2357600080fd5b8063d79aceab14610995578063da8be864146109bc578063eb990c59146109cf578063eea9064b146109e257600080fd5b8063c5e480db116100e9578063c5e480db146108b2578063c94b511114610958578063ca661c041461096b578063cf80873e1461097457600080fd5b8063b13442711461083a578063b7f06ebe14610861578063bb45fef21461088457600080fd5b80639104c3191161017c578063a1060c8811610156578063a1060c88146107e1578063a1788484146107f4578063a364f4da14610814578063a98fb3551461082757600080fd5b80639104c319146107a05780639926ee7d146107bb57806399be81c8146107ce57600080fd5b8063778e55f3116101b8578063778e55f31461073e5780637f54807114610769578063886f11951461077c5780638da5cb5b1461078f57600080fd5b806365da1264146106fa5780636d70f7ae14610723578063715018a61461073657600080fd5b806339b70e38116102c357806350f73e7c116102615780635c975abb116102305780635c975abb146106a05780635cfe8d2c146106a85780635f966f14146106bb57806360d7faed146106e757600080fd5b806350f73e7c14610659578063595c6a6714610662578063597b36da1461066a5780635ac86ab71461067d57600080fd5b8063433773821161029d57806343377382146105c65780634665bcda146105ed57806349075da3146106145780634fc40b611461064f57600080fd5b806339b70e38146105455780633cdeb5e0146105845780633e28391d146105b357600080fd5b8063169283651161033057806328a573ae1161030a57806328a573ae146104c157806329c77d4f146104d457806333404396146104f4578063374823b51461050757600080fd5b8063169283651461044e5780631bbce0911461048757806320606b701461049a57600080fd5b80630f589e591161036c5780630f589e591461040057806310d67a2f14610415578063132d496714610428578063136439dd1461043b57600080fd5b806304a4f979146103935780630b9f487a146103cd5780630dd8dd02146103e0575b600080fd5b6103ba7f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce81565b6040519081526020015b60405180910390f35b6103ba6103db36600461496f565b610a36565b6103f36103ee366004614a0e565b610af8565b6040516103c49190614a4f565b61041361040e366004614aec565b610e72565b005b610413610423366004614b3f565b610fc2565b610413610436366004614b63565b611075565b610413610449366004614ba4565b61112c565b6103ba61045c366004614b3f565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103ba610495366004614b63565b61126b565b6103ba7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104136104cf366004614b63565b611299565b6103ba6104e2366004614b3f565b609b6020526000908152604090205481565b610413610502366004614bbd565b611349565b610535610515366004614c80565b60a260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016103c4565b61056c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b0390911681526020016103c4565b61056c610592366004614b3f565b6001600160a01b039081166000908152609960205260409020600101541690565b6105356105c1366004614b3f565b611486565b6103ba7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61056c7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b610642610622366004614cac565b60a160209081526000928352604080842090915290825290205460ff1681565b6040516103c49190614cfb565b6103ba6213c68081565b6103ba609d5481565b6104136114a6565b6103ba610678366004614fa0565b61156d565b61053561068b366004614fdc565b606654600160ff9092169190911b9081161490565b6066546103ba565b6104136106b6366004615052565b61159d565b61056c6106c9366004614b3f565b6001600160a01b039081166000908152609960205260409020541690565b6104136106f53660046151b2565b611848565b61056c610708366004614b3f565b609a602052600090815260409020546001600160a01b031681565b610535610731366004614b3f565b6118e3565b610413611903565b6103ba61074c366004614cac565b609860209081526000928352604080842090915290825290205481565b610413610777366004615301565b611917565b60655461056c906001600160a01b031681565b6033546001600160a01b031661056c565b61056c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104136107c9366004615391565b611a1c565b6104136107dc36600461543c565b611d28565b6103ba6107ef366004615471565b611dfa565b6103ba610802366004614b3f565b609f6020526000908152604090205481565b610413610822366004614b3f565b611eba565b61041361083536600461543c565b612005565b61056c7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61053561086f366004614ba4565b609e6020526000908152604090205460ff1681565b610535610892366004614c80565b609c60209081526000928352604080842090915290825290205460ff1681565b6109226108c0366004614b3f565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff16908201526060016103c4565b6103ba6109663660046154b7565b612040565b6103ba61c4e081565b610987610982366004614b3f565b61209f565b6040516103c4929190615573565b6103ba7ff48bd254e30ce2953d187fdb4ef0cfdddb782ab1da55beebaef67c1f258d256e81565b6103f36109ca366004614b3f565b612457565b6104136109dd366004615471565b61291b565b6104136109f0366004615598565b612a4f565b610413610a033660046155f0565b612a5b565b610413610a16366004614b3f565b612aec565b6103ba612b62565b610413610a31366004614ba4565b612ba0565b604080517f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ab4612b62565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b2d5760405162461bcd60e51b8152600401610b249061560c565b60405180910390fd5b6000836001600160401b03811115610b4757610b47614d23565b604051908082528060200260200182016040528015610b70578160200160208202803683370190505b50905060005b84811015610e6957858582818110610b9057610b90615643565b9050602002810190610ba29190615659565b610bb0906020810190615679565b9050868683818110610bc457610bc4615643565b9050602002810190610bd69190615659565b610be09080615679565b905014610c555760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b24565b6000868683818110610c6957610c69615643565b9050602002810190610c7b9190615659565b610c8c906060810190604001614b3f565b6001600160a01b03161415610d1a5760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a206d7573742070726f766964652076616c6964207769746864726177616c606482015267206164647265737360c01b608482015260a401610b24565b336000818152609a60205260409020546001600160a01b031690610e399082898986818110610d4b57610d4b615643565b9050602002810190610d5d9190615659565b610d6e906060810190604001614b3f565b8a8a87818110610d8057610d80615643565b9050602002810190610d929190615659565b610d9c9080615679565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150899050818110610de257610de2615643565b9050602002810190610df49190615659565b610e02906020810190615679565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cfc92505050565b838381518110610e4b57610e4b615643565b60209081029190910101525080610e61816156d8565b915050610b76565b50949350505050565b336000908152609960205260409020546001600160a01b031615610f0c5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b24565b610f16338461311e565b604080518082019091526060815260006020820152610f3833808360006133ba565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f7191906156f3565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb4929190615745565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110399190615774565b6001600160a01b0316336001600160a01b0316146110695760405162461bcd60e51b8152600401610b2490615791565b6110728161376a565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806110d45750336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16145b6110f05760405162461bcd60e51b8152600401610b24906157db565b6110f983611486565b15611127576001600160a01b038084166000908152609a60205260409020541661112581858585613861565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111989190615838565b6111b45760405162461bcd60e51b8152600401610b2490615855565b6066548181161461122d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b24565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b0383166000908152609b602052604081205461129085828686612040565b95945050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806112f85750336001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16145b6113145760405162461bcd60e51b8152600401610b24906157db565b61131d83611486565b15611127576001600160a01b038084166000908152609a602052604090205416611125818585856138dc565b606654600290600490811614156113725760405162461bcd60e51b8152600401610b249061560c565b600260c95414156113c55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b24565b600260c95560005b88811015611475576114658a8a838181106113ea576113ea615643565b90506020028101906113fc919061589d565b89898481811061140e5761140e615643565b90506020028101906114209190615679565b89898681811061143257611432615643565b9050602002013588888781811061144b5761144b615643565b905060200201602081019061146091906158b3565b613957565b61146e816156d8565b90506113cd565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190615838565b61152e5760405162461bcd60e51b8152600401610b2490615855565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016115809190615944565b604051602081830303815290604052805190602001209050919050565b60005b81518110156118445760008282815181106115bd576115bd615643565b602002602001015190506000807f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663cd293f6f846040518263ffffffff1660e01b81526004016116169190615957565b60408051808303816000875af1158015611634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116589190615a06565b915091508115611836576040808401516001600160a01b0381166000908152609f6020529182208054919282919061168f836156d8565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff1681526020018760000151815260200187602001518152509050600061170f8261156d565b6000818152609e602052604090205490915060ff16156117a55760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b24565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906117f09083908590615a34565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506115a0565b5050565b606654600290600490811614156118715760405162461bcd60e51b8152600401610b249061560c565b600260c95414156118c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b24565b600260c9556118d68686868686613957565b5050600160c95550505050565b6001600160a01b0390811660009081526099602052604090205416151590565b61190b613fbf565b6119156000614019565b565b428360200151101561199b5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b24565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119d78783888860200151612040565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611a07908890839061406b565b611a13878786866133ba565b50505050505050565b60665460039060089081161415611a455760405162461bcd60e51b8152600401610b249061560c565b4282604001511015611ab95760405162461bcd60e51b81526020600482015260436024820152600080516020615d1283398151915260448201527f6f72546f4156533a206f70657261746f72207369676e617475726520657870696064820152621c995960ea1b608482015260a401610b24565b600133600090815260a1602090815260408083206001600160a01b038816845290915290205460ff166001811115611af357611af3614ce5565b1415611b635760405162461bcd60e51b815260206004820152604460248201819052600080516020615d12833981519152908201527f6f72546f4156533a206f70657261746f7220616c726561647920726567697374606482015263195c995960e21b608482015260a401610b24565b6001600160a01b038316600090815260a26020908152604080832085830151845290915290205460ff1615611bee5760405162461bcd60e51b815260206004820152603b6024820152600080516020615d1283398151915260448201527f6f72546f4156533a2073616c7420616c7265616479207370656e7400000000006064820152608401610b24565b611bf7836118e3565b611c725760405162461bcd60e51b81526020600482015260526024820152600080516020615d1283398151915260448201527f6f72546f4156533a206f70657261746f72206e6f742072656769737465726564606482015271081d1bc8115a59d95b93185e595c881e595d60721b608482015260a401610b24565b6000611c88843385602001518660400151611dfa565b9050611c998482856000015161406b565b33600081815260a1602090815260408083206001600160a01b0389168085529083528184208054600160ff19918216811790925560a285528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191611d1a9190614cfb565b60405180910390a350505050565b611d31336118e3565b611db35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b24565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611dee929190615745565b60405180910390a25050565b604080517ff48bd254e30ce2953d187fdb4ef0cfdddb782ab1da55beebaef67c1f258d256e60208201526001600160a01b038087169282019290925290841660608201526080810183905260a08101829052600090819060c0015b6040516020818303038152906040528051906020012090506000611e77612b62565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460039060089081161415611ee35760405162461bcd60e51b8152600401610b249061560c565b600133600090815260a1602090815260408083206001600160a01b038716845290915290205460ff166001811115611f1d57611f1d614ce5565b14611f9e5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e646572656769737465724f706572908201527f61746f7246726f6d4156533a206f70657261746f72206e6f7420726567697374606482015263195c995960e21b608482015260a401610b24565b33600081815260a1602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191611ff99190614cfb565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051611dee929190615745565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b60208201526001600160a01b038087169282019290925290831660608201526080810184905260a08101829052600090819060c001611e55565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f909116906360f4062b90602401602060405180830381865afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121339190615a4d565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa1580156121a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121cb9190810190615ac1565b91509150600083136121e257909590945092505050565b60608083516000141561229c576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260008151811061225757612257615643565b60200260200101906001600160a01b031690816001600160a01b031681525050848160008151811061228b5761228b615643565b60200260200101818152505061244a565b83516122a9906001615b85565b6001600160401b038111156122c0576122c0614d23565b6040519080825280602002602001820160405280156122e9578160200160208202803683370190505b50915081516001600160401b0381111561230557612305614d23565b60405190808252806020026020018201604052801561232e578160200160208202803683370190505b50905060005b84518110156123c85784818151811061234f5761234f615643565b602002602001015183828151811061236957612369615643565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061239b5761239b615643565b60200260200101518282815181106123b5576123b5615643565b6020908102919091010152600101612334565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516123ed9190615b9d565b815181106123fd576123fd615643565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001845161242d9190615b9d565b8151811061243d5761243d615643565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156124835760405162461bcd60e51b8152600401610b249061560c565b61248c83611486565b61250c5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b24565b612515836118e3565b156125885760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b24565b6001600160a01b0383166126045760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b24565b6001600160a01b038084166000818152609a6020526040902054909116903314806126375750336001600160a01b038216145b8061265e57506001600160a01b038181166000908152609960205260409020600101541633145b6126d05760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b24565b6000806126dc8661209f565b9092509050336001600160a01b0387161461273257826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516127b4576040805160008152602081019091529450612912565b81516001600160401b038111156127cd576127cd614d23565b6040519080825280602002602001820160405280156127f6578160200160208202803683370190505b50945060005b82518110156129105760408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833701905050905084838151811061285c5761285c615643565b60200260200101518260008151811061287757612877615643565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106128a9576128a9615643565b6020026020010151816000815181106128c4576128c4615643565b6020026020010181815250506128dd89878b8585612cfc565b8884815181106128ef576128ef615643565b60200260200101818152505050508080612908906156d8565b9150506127fc565b505b50505050919050565b600054610100900460ff161580801561293b5750600054600160ff909116105b806129555750303b158015612955575060005460ff166001145b6129b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b24565b6000805460ff1916600117905580156129db576000805461ff0019166101001790555b6129e58484614225565b6129ed61430b565b6097556129f985614019565b612a02826143a2565b8015612a48576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b611127338484846133ba565b612a64336118e3565b612ae25760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b24565b611072338261311e565b612af4613fbf565b6001600160a01b038116612b595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b24565b61107281614019565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415612b93575060975490565b612b9b61430b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c179190615774565b6001600160a01b0316336001600160a01b031614612c475760405162461bcd60e51b8152600401610b2490615791565b606654198119606654191614612cc55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b24565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001611260565b60006001600160a01b038616612d935760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b24565b8251612e1d5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b24565b60005b835181101561302c576001600160a01b03861615612e7657612e768688868481518110612e4f57612e4f615643565b6020026020010151868581518110612e6957612e69615643565b6020026020010151613861565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ea657612ea6615643565b60200260200101516001600160a01b03161415612f6f577f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b031663beffbb8988858481518110612eff57612eff615643565b60200260200101516040518363ffffffff1660e01b8152600401612f389291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612f5257600080fd5b505af1158015612f66573d6000803e3d6000fd5b50505050613024565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612fb157612fb1615643565b6020026020010151868581518110612fcb57612fcb615643565b60200260200101516040518463ffffffff1660e01b8152600401612ff193929190615bb4565b600060405180830381600087803b15801561300b57600080fd5b505af115801561301f573d6000803e3d6000fd5b505050505b600101612e20565b506001600160a01b0386166000908152609f60205260408120805491829190613054836156d8565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006130bc8261156d565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061310a9083908590615a34565b60405180910390a198975050505050505050565b600061312d6020830183614b3f565b6001600160a01b031614156131c75760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b24565b6213c6806131db6060830160408401615bd8565b63ffffffff1611156132905760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b24565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906132cc9060608401908401615bd8565b63ffffffff1610156133625760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b24565b6001600160a01b038216600090815260996020526040902081906133868282615c15565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611dee9084906156f3565b606654600090600190811614156133e35760405162461bcd60e51b8152600401610b249061560c565b6133ec85611486565b156134695760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b24565b613472846118e3565b6134f25760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b24565b6001600160a01b038085166000908152609960205260409020600101541680158015906135285750336001600160a01b03821614155b801561353d5750336001600160a01b03861614155b156136aa5742846020015110156135bc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b24565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156136565760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b24565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613697908890889085908890610a36565b90506136a88282876000015161406b565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806137098861209f565b9150915060005b825181101561375f57613757888a85848151811061373057613730615643565b602002602001015185858151811061374a5761374a615643565b60200260200101516138dc565b600101613710565b505050505050505050565b6001600160a01b0381166137f85760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b24565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613898908490615b9d565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb493929190615bb4565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613913908490615b85565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb493929190615bb4565b600061396561067887615c78565b6000818152609e602052604090205490915060ff166139da5760405162461bcd60e51b815260206004820152603e6024820152600080516020615d3283398151915260448201527f416374696f6e3a20616374696f6e206973206e6f7420696e20717565756500006064820152608401610b24565b609d5443906139ef60a0890160808a01615bd8565b63ffffffff166139ff9190615b85565b1115613a875760405162461bcd60e51b81526020600482015260576024820152600080516020615d3283398151915260448201527f416374696f6e3a207769746864726177616c44656c6179426c6f636b7320706560648201527f72696f6420686173206e6f742079657420706173736564000000000000000000608482015260a401610b24565b613a976060870160408801614b3f565b6001600160a01b0316336001600160a01b031614613b1f5760405162461bcd60e51b815260206004820152604b6024820152600080516020615d3283398151915260448201527f416374696f6e3a206f6e6c7920776974686472617765722063616e20636f6d7060648201526a3632ba329030b1ba34b7b760a91b608482015260a401610b24565b8115613b9657613b3260a0870187615679565b85149050613b965760405162461bcd60e51b815260206004820152603d6024820152600080516020615d3283398151915260448201527f416374696f6e3a20696e707574206c656e677468206d69736d617463680000006064820152608401610b24565b6000818152609e60205260409020805460ff191690558115613c6c5760005b613bc260a0880188615679565b9050811015613c6657613c5e613bdb6020890189614b3f565b33613be960a08b018b615679565b85818110613bf957613bf9615643565b9050602002016020810190613c0e9190614b3f565b613c1b60c08c018c615679565b86818110613c2b57613c2b615643565b905060200201358a8a87818110613c4457613c44615643565b9050602002016020810190613c599190614b3f565b61449c565b600101613bb5565b50613f84565b336000908152609a60205260408120546001600160a01b0316905b613c9460a0890189615679565b9050811015613f815773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613cbf60a08a018a615679565b83818110613ccf57613ccf615643565b9050602002016020810190613ce49190614b3f565b6001600160a01b03161415613e34576000613d0260208a018a614b3f565b905060006001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16630e81073c83613d4360c08e018e615679565b87818110613d5357613d53615643565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dcb9190615a4d565b6001600160a01b038084166000908152609a6020526040902054919250168015613e2c57613e2c8184613e0160a08f018f615679565b88818110613e1157613e11615643565b9050602002016020810190613e269190614b3f565b856138dc565b505050613f79565b6001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9166350ff722533613e7160a08c018c615679565b85818110613e8157613e81615643565b9050602002016020810190613e969190614b3f565b613ea360c08d018d615679565b86818110613eb357613eb3615643565b905060200201356040518463ffffffff1660e01b8152600401613ed893929190615bb4565b600060405180830381600087803b158015613ef257600080fd5b505af1158015613f06573d6000803e3d6000fd5b505050506001600160a01b03821615613f7957613f798233613f2b60a08c018c615679565b85818110613f3b57613f3b615643565b9050602002016020810190613f509190614b3f565b613f5d60c08d018d615679565b86818110613f6d57613f6d615643565b905060200201356138dc565b600101613c87565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6033546001600160a01b031633146119155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b24565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b1561418557604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906140ab9086908690600401615c8a565b602060405180830381865afa1580156140c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ec9190615ce7565b6001600160e01b031916146111275760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b24565b826001600160a01b031661419983836145d5565b6001600160a01b0316146111275760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b24565b6065546001600160a01b031615801561424657506001600160a01b03821615155b6142c85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b24565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118448261376a565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b61c4e081111561445b5760405162461bcd60e51b815260206004820152607260248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a6557697460448201527f6864726177616c44656c6179426c6f636b733a205f7769746864726177616c4460648201527f656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844608482015271524157414c5f44454c41595f424c4f434b5360701b60a482015260c401610b24565b609d5460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a1609d55565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156145475760405162387b1360e81b81526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063387b13009061451090889088908790600401615bb4565b600060405180830381600087803b15801561452a57600080fd5b505af115801561453e573d6000803e3d6000fd5b50505050612a48565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b1580156145c157600080fd5b505af115801561375f573d6000803e3d6000fd5b60008060006145e485856145f9565b915091506145f181614669565b509392505050565b6000808251604114156146305760208301516040840151606085015160001a61462487828585614824565b94509450505050614662565b82516040141561465a576020830151604084015161464f868383614911565b935093505050614662565b506000905060025b9250929050565b600081600481111561467d5761467d614ce5565b14156146865750565b600181600481111561469a5761469a614ce5565b14156146e85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b24565b60028160048111156146fc576146fc614ce5565b141561474a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b24565b600381600481111561475e5761475e614ce5565b14156147b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b24565b60048160048111156147cb576147cb614ce5565b14156110725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b24565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561485b5750600090506003614908565b8460ff16601b1415801561487357508460ff16601c14155b156148845750600090506004614908565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156148d8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661490157600060019250925050614908565b9150600090505b94509492505050565b6000806001600160ff1b0383168161492e60ff86901c601b615b85565b905061493c87828885614824565b935093505050935093915050565b6001600160a01b038116811461107257600080fd5b803561496a8161494a565b919050565b600080600080600060a0868803121561498757600080fd5b85356149928161494a565b945060208601356149a28161494a565b935060408601356149b28161494a565b94979396509394606081013594506080013592915050565b60008083601f8401126149dc57600080fd5b5081356001600160401b038111156149f357600080fd5b6020830191508360208260051b850101111561466257600080fd5b60008060208385031215614a2157600080fd5b82356001600160401b03811115614a3757600080fd5b614a43858286016149ca565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614a8757835183529284019291840191600101614a6b565b50909695505050505050565b600060608284031215614aa557600080fd5b50919050565b60008083601f840112614abd57600080fd5b5081356001600160401b03811115614ad457600080fd5b60208301915083602082850101111561466257600080fd5b600080600060808486031215614b0157600080fd5b614b0b8585614a93565b925060608401356001600160401b03811115614b2657600080fd5b614b3286828701614aab565b9497909650939450505050565b600060208284031215614b5157600080fd5b8135614b5c8161494a565b9392505050565b600080600060608486031215614b7857600080fd5b8335614b838161494a565b92506020840135614b938161494a565b929592945050506040919091013590565b600060208284031215614bb657600080fd5b5035919050565b6000806000806000806000806080898b031215614bd957600080fd5b88356001600160401b0380821115614bf057600080fd5b614bfc8c838d016149ca565b909a50985060208b0135915080821115614c1557600080fd5b614c218c838d016149ca565b909850965060408b0135915080821115614c3a57600080fd5b614c468c838d016149ca565b909650945060608b0135915080821115614c5f57600080fd5b50614c6c8b828c016149ca565b999c989b5096995094979396929594505050565b60008060408385031215614c9357600080fd5b8235614c9e8161494a565b946020939093013593505050565b60008060408385031215614cbf57600080fd5b8235614cca8161494a565b91506020830135614cda8161494a565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614d1d57634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614d5b57614d5b614d23565b60405290565b604080519081016001600160401b0381118282101715614d5b57614d5b614d23565b60405160c081016001600160401b0381118282101715614d5b57614d5b614d23565b604051601f8201601f191681016001600160401b0381118282101715614dcd57614dcd614d23565b604052919050565b63ffffffff8116811461107257600080fd5b803561496a81614dd5565b60006001600160401b03821115614e0b57614e0b614d23565b5060051b60200190565b600082601f830112614e2657600080fd5b81356020614e3b614e3683614df2565b614da5565b82815260059290921b84018101918181019086841115614e5a57600080fd5b8286015b84811015614e7e578035614e718161494a565b8352918301918301614e5e565b509695505050505050565b600082601f830112614e9a57600080fd5b81356020614eaa614e3683614df2565b82815260059290921b84018101918181019086841115614ec957600080fd5b8286015b84811015614e7e5780358352918301918301614ecd565b600060e08284031215614ef657600080fd5b614efe614d39565b9050614f098261495f565b8152614f176020830161495f565b6020820152614f286040830161495f565b604082015260608201356060820152614f4360808301614de7565b608082015260a08201356001600160401b0380821115614f6257600080fd5b614f6e85838601614e15565b60a084015260c0840135915080821115614f8757600080fd5b50614f9484828501614e89565b60c08301525092915050565b600060208284031215614fb257600080fd5b81356001600160401b03811115614fc857600080fd5b614fd484828501614ee4565b949350505050565b600060208284031215614fee57600080fd5b813560ff81168114614b5c57600080fd5b60006040828403121561501157600080fd5b615019614d61565b905081356150268161494a565b815260208201356bffffffffffffffffffffffff8116811461504757600080fd5b602082015292915050565b6000602080838503121561506557600080fd5b82356001600160401b038082111561507c57600080fd5b818501915085601f83011261509057600080fd5b813561509e614e3682614df2565b81815260059190911b830184019084810190888311156150bd57600080fd5b8585015b83811015615197578035858111156150d95760008081fd5b860160e0818c03601f19018113156150f15760008081fd5b6150f9614d83565b898301358881111561510b5760008081fd5b6151198e8c83870101614e15565b825250604080840135898111156151305760008081fd5b61513e8f8d83880101614e89565b8c84015250606061515081860161495f565b82840152608091506151648f838701614fff565b9083015261517460c08501614de7565b9082015261518383830161495f565b60a0820152855250509186019186016150c1565b5098975050505050505050565b801515811461107257600080fd5b6000806000806000608086880312156151ca57600080fd5b85356001600160401b03808211156151e157600080fd5b9087019060e0828a0312156151f557600080fd5b9095506020870135908082111561520b57600080fd5b50615218888289016149ca565b909550935050604086013591506060860135615233816151a4565b809150509295509295909350565b600082601f83011261525257600080fd5b81356001600160401b0381111561526b5761526b614d23565b61527e601f8201601f1916602001614da5565b81815284602083860101111561529357600080fd5b816020850160208301376000918101602001919091529392505050565b6000604082840312156152c257600080fd5b6152ca614d61565b905081356001600160401b038111156152e257600080fd5b6152ee84828501615241565b8252506020820135602082015292915050565b600080600080600060a0868803121561531957600080fd5b85356153248161494a565b945060208601356153348161494a565b935060408601356001600160401b038082111561535057600080fd5b61535c89838a016152b0565b9450606088013591508082111561537257600080fd5b5061537f888289016152b0565b95989497509295608001359392505050565b600080604083850312156153a457600080fd5b82356153af8161494a565b915060208301356001600160401b03808211156153cb57600080fd5b90840190606082870312156153df57600080fd5b6040516060810181811083821117156153fa576153fa614d23565b60405282358281111561540c57600080fd5b61541888828601615241565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806020838503121561544f57600080fd5b82356001600160401b0381111561546557600080fd5b614a4385828601614aab565b6000806000806080858703121561548757600080fd5b84356154928161494a565b935060208501356154a28161494a565b93969395505050506040820135916060013590565b600080600080608085870312156154cd57600080fd5b84356154d88161494a565b93506020850135925060408501356154ef8161494a565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155385781516001600160a01b031687529582019590820190600101615513565b509495945050505050565b600081518084526020808501945080840160005b8381101561553857815187529582019590820190600101615557565b60408152600061558660408301856154ff565b82810360208401526112908185615543565b6000806000606084860312156155ad57600080fd5b83356155b88161494a565b925060208401356001600160401b038111156155d357600080fd5b6155df868287016152b0565b925050604084013590509250925092565b60006060828403121561560257600080fd5b614b5c8383614a93565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261566f57600080fd5b9190910192915050565b6000808335601e1984360301811261569057600080fd5b8301803591506001600160401b038211156156aa57600080fd5b6020019150600581901b360382131561466257600080fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156156ec576156ec6156c2565b5060010190565b6060810182356157028161494a565b6001600160a01b03908116835260208401359061571e8261494a565b166020830152604083013561573281614dd5565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561578657600080fd5b8151614b5c8161494a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561584a57600080fd5b8151614b5c816151a4565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261566f57600080fd5b6000602082840312156158c557600080fd5b8135614b5c816151a4565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261592b60e08501826154ff565b905060c083015184820360c08601526112908282615543565b602081526000614b5c60208301846158d0565b602081526000825160e060208401526159746101008401826154ff565b90506020840151601f198483030160408501526159918282615543565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a08501525060808401516159e960c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152509392505050565b60008060408385031215615a1957600080fd5b8251615a24816151a4565b6020939093015192949293505050565b828152604060208201526000614fd460408301846158d0565b600060208284031215615a5f57600080fd5b5051919050565b600082601f830112615a7757600080fd5b81516020615a87614e3683614df2565b82815260059290921b84018101918181019086841115615aa657600080fd5b8286015b84811015614e7e5780518352918301918301615aaa565b60008060408385031215615ad457600080fd5b82516001600160401b0380821115615aeb57600080fd5b818501915085601f830112615aff57600080fd5b81516020615b0f614e3683614df2565b82815260059290921b84018101918181019089841115615b2e57600080fd5b948201945b83861015615b55578551615b468161494a565b82529482019490820190615b33565b91880151919650909350505080821115615b6e57600080fd5b50615b7b85828601615a66565b9150509250929050565b60008219821115615b9857615b986156c2565b500190565b600082821015615baf57615baf6156c2565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615bea57600080fd5b8135614b5c81614dd5565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615c208161494a565b615c2a8183615bf5565b50600181016020830135615c3d8161494a565b615c478183615bf5565b506040830135615c5681614dd5565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615c843683614ee4565b92915050565b82815260006020604081840152835180604085015260005b81811015615cbe57858101830151858201606001528201615ca2565b81811115615cd0576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615cf957600080fd5b81516001600160e01b031981168114614b5c57600080fdfe44656c65676174696f6e4d616e616765722e72656769737465724f706572617444656c65676174696f6e4d616e616765722e636f6d706c657465517565756564a26469706673582212206a81cf1e3f4da9c1111581c8df74dfd0a545ece3552675f7c9396674b435d7ab64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x67d269191c92caf3cd7723f116c85e6e9bf55933":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c043d55aae46cecfa459a39000413fd977359bf3661a19b41228c6cedf04ccf964736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636efb463611610104578063b1344271116100a2578063df5cf72311610071578063df5cf7231461048b578063e481af9d146104b2578063f2fde38b146104ba578063fabc1cbc146104cd57600080fd5b8063b134427114610414578063b98d09081461043b578063c417cd3e14610448578063cdb967981461045b57600080fd5b8063886f1195116100de578063886f1195146103ca5780638da5cb5b146103dd5780639926ee7d146103ee578063a364f4da1461040157600080fd5b80636efb46361461038e578063715018a6146103af578063750521f5146103b757600080fd5b8063485cc9551161017c5780635c975abb1161014b5780635c975abb146103085780635df459461461031957806368304835146103405780636d14a9871461036757600080fd5b8063485cc955146102a7578063595c6a67146102ba57806359cc4438146102c25780635ac86ab7146102d557600080fd5b806322cff50f116101b857806322cff50f14610236578063245a7bfc1461024957806333cfb7b714610274578063416c7e5e1461029457600080fd5b806310d67a2f146101df578063136439dd146101f4578063171f1d5b14610207575b600080fd5b6101f26101ed366004613a31565b6104e0565b005b6101f2610202366004613a4e565b61059c565b61021a610215366004613bda565b6106db565b6040805192151583529015156020830152015b60405180910390f35b6101f2610244366004613c43565b610865565b60985461025c906001600160a01b031681565b6040516001600160a01b03909116815260200161022d565b610287610282366004613a31565b610b27565b60405161022d9190613c87565b6101f26102a2366004613ce2565b610ff6565b6101f26102b5366004613cff565b61116b565b6101f261129a565b6101f26102d0366004613d38565b611361565b6102f86102e3366004613d81565b606654600160ff9092169190911b9081161490565b604051901515815260200161022d565b60665460405190815260200161022d565b61025c7f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d81565b61025c7f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e81565b61025c7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef81565b6103a161039c366004614054565b6113cb565b60405161022d929190614147565b6101f2612278565b6101f26103c53660046141e7565b61228c565b60655461025c906001600160a01b031681565b6033546001600160a01b031661025c565b6101f26103fc36600461425e565b612315565b6101f261040f366004613a31565b6123e1565b61025c7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b6000546102f89060ff1681565b6101f2610456366004614309565b612477565b61047e610469366004613a4e565b60976020526000908152604090205460ff1681565b60405161022d9190614353565b61025c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610287612702565b6101f26104c8366004613a31565b612acb565b6101f26104db366004613a4e565b612b41565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610533573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610557919061437b565b6001600160a01b0316336001600160a01b0316146105905760405162461bcd60e51b815260040161058790614398565b60405180910390fd5b61059981612c9d565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906143e2565b6106245760405162461bcd60e51b8152600401610587906143ff565b6066548181161461069d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610587565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061072357610723614447565b60200201518951600160200201518a6020015160006002811061074857610748614447565b60200201518b6020015160016002811061076457610764614447565b602090810291909101518c518d8301516040516107c19a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6107e4919061445d565b90506108576107fd6107f68884612d94565b8690612e2b565b610805612ebf565b61084d61083e85610838604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612d94565b6108478c612f7f565b90612e2b565b886201d4c061300f565b909890975095505050505050565b600082604051602001610878919061485d565b60408051601f198184030181528282528051602091820120908301819052908201849052915060009060600160408051601f1981840301815291905280516020909101209050600260008281526097602052604090205460ff1660048111156108e3576108e361433d565b1461090157604051633197a8d960e01b815260040160405180910390fd5b60006109106060860186614925565b61091990614945565b9050600061092a6060870187614925565b610938906020810190613a31565b6001600160a01b0316636efb46368360200151846040015185608001518660a001516040518563ffffffff1660e01b81526004016109799493929190614b60565b600060405180830381865afa158015610996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109be9190810190614cd5565b50905060005b826060015151811015610b1e57826060015181815181106109e7576109e7614447565b602001015160f81c60f81b60f81c60ff1682602001518281518110610a0e57610a0e614447565b6020026020010151610a209190614d87565b6001600160601b0316606483600001518381518110610a4157610a41614447565b60200260200101516001600160601b0316610a5c9190614db6565b1015610b0c576000848152609760205260409020805460ff19166004179055610a886060880188614925565b610a999060a0810190608001614dd5565b63ffffffff16610aac6060890189614925565b60200135610abd60608a018a614925565b610acb906020810190613a31565b6001600160a01b03167fd7cb12b0b969d5b7540f06fa188457e205cde4a8ec99010f1fb72c594e3c9a7d8a604051610b03919061485d565b60405180910390a45b80610b1681614df0565b9150506109c4565b50505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16906313542a4e90602401602060405180830381865afa158015610b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb79190614e0b565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef169063871ef04990602401602060405180830381865afa158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190614e24565b90506001600160c01b0381161580610ce057507f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190614e4d565b60ff16155b15610cfc57505060408051600081526020810190915292915050565b6000610d10826001600160c01b0316613233565b90506000805b8251811015610de6577f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b0316633ca5a5f5848381518110610d6057610d60614447565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190614e0b565b610dd29083614e6a565b915080610dde81614df0565b915050610d16565b506000816001600160401b03811115610e0157610e01613a67565b604051908082528060200260200182016040528015610e2a578160200160208202803683370190505b5090506000805b8451811015610fe9576000858281518110610e4e57610e4e614447565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e1690633ca5a5f590602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190614e0b565b905060005b81811015610fd3576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b03169063adc804da906044016040805180830381865afa158015610f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f859190614e82565b60000151868681518110610f9b57610f9b614447565b6001600160a01b039092166020928302919091019091015284610fbd81614df0565b9550508080610fcb90614df0565b915050610eec565b5050508080610fe190614df0565b915050610e31565b5090979650505050505050565b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611078919061437b565b6001600160a01b0316336001600160a01b0316146111245760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610587565b6000805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60005462010000900460ff16158080156111905750600054600161010090910460ff16105b806111b05750303b1580156111b0575060005460ff610100909104166001145b6112135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610587565b6000805461ff001916610100179055801561123a576000805462ff00001916620100001790555b611245836000613290565b61124e8261337a565b8015611295576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130691906143e2565b6113225760405162461bcd60e51b8152600401610587906143ff565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61137160a0820160808301614dd5565b63ffffffff16602082018035906113889084613a31565b6001600160a01b03167f40de0463e8722a3182aa6a35c5a0da9f36e5a3ad4d3f4c39fd301908875629e1846040516113c09190614ec1565b60405180910390a450565b604080518082018252606080825260208201529082015151600090851480156113f8575060a08301515185145b8015611408575060c08301515185145b8015611418575060e08301515185145b6114825760405162461bcd60e51b8152602060048201526041602482015260008051602061517a83398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b825151602084015151146114fa5760405162461bcd60e51b81526020600482015260446024820181905260008051602061517a833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610587565b4363ffffffff168463ffffffff16111561156a5760405162461bcd60e51b815260206004820152603c602482015260008051602061517a83398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610587565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b038111156115ab576115ab613a67565b6040519080825280602002602001820160405280156115d4578160200160208202803683370190505b506020820152866001600160401b038111156115f2576115f2613a67565b60405190808252806020026020018201604052801561161b578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561164f5761164f613a67565b604051908082528060200260200182016040528015611678578160200160208202803683370190505b5081526020860151516001600160401b0381111561169857611698613a67565b6040519080825280602002602001820160405280156116c1578160200160208202803683370190505b50816020018190525060006117938a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef169350639aa1653d925060048083019260209291908290030181865afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e9190614e4d565b6133cc565b905060005b876020015151811015611a2e576117dd886020015182815181106117be576117be614447565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106117f3576117f3614447565b602090810291909101015280156118b3576020830151611814600183614ed4565b8151811061182457611824614447565b602002602001015160001c8360200151828151811061184557611845614447565b602002602001015160001c116118b3576040805162461bcd60e51b815260206004820152602481019190915260008051602061517a83398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610587565b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b03166304ec6351846020015183815181106118f8576118f8614447565b60200260200101518b8b60000151858151811061191757611917614447565b60200260200101516040518463ffffffff1660e01b81526004016119549392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190614e24565b6001600160c01b0316836000015182815181106119b4576119b4614447565b602002602001018181525050611a1a6107f66119ee84866000015185815181106119e0576119e0614447565b602002602001015116613487565b8a602001518481518110611a0457611a04614447565b60200260200101516134b290919063ffffffff16565b945080611a2681614df0565b915050611798565b5050611a3983613596565b925060007f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b03166350f73e7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abf9190614e0b565b6000805491925060ff909116905b8a811015612147578115611c29578963ffffffff16837f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b031663249a0c428f8f86818110611b2457611b24614447565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b889190614e0b565b611b929190614e6a565b1015611c295760405162461bcd60e51b8152602060048201526066602482015260008051602061517a83398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610587565b7f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d6001600160a01b03166368bccaac8d8d84818110611c6a57611c6a614447565b9050013560f81c60f81b60f81c8c8c60a001518581518110611c8e57611c8e614447565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190614eeb565b6001600160401b031916611d318a6040015183815181106117be576117be614447565b67ffffffffffffffff191614611dcd5760405162461bcd60e51b8152602060048201526061602482015260008051602061517a83398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610587565b611dfd89604001518281518110611de657611de6614447565b602002602001015187612e2b90919063ffffffff16565b95507f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b031663c8294c568d8d84818110611e4057611e40614447565b9050013560f81c60f81b60f81c8c8c60c001518581518110611e6457611e64614447565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190614f16565b85602001518281518110611efa57611efa614447565b6001600160601b03909216602092830291909101820152850151805182908110611f2657611f26614447565b602002602001015185600001518281518110611f4457611f44614447565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561213257611fbc86600001518281518110611f8e57611f8e614447565b60200260200101518f8f86818110611fa857611fa8614447565b600192013560f81c9290921c811614919050565b15612120577f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b031663f2be94ae8f8f8681811061200257612002614447565b9050013560f81c60f81b60f81c8e8960200151858151811061202657612026614447565b60200260200101518f60e00151888151811061204457612044614447565b6020026020010151878151811061205d5761205d614447565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e59190614f16565b87518051859081106120f9576120f9614447565b6020026020010181815161210d9190614f31565b6001600160601b03169052506001909101905b8061212a81614df0565b915050611f68565b5050808061213f90614df0565b915050611acd565b5050506000806121618c868a606001518b608001516106db565b91509150816121d25760405162461bcd60e51b8152602060048201526043602482015260008051602061517a83398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610587565b806122335760405162461bcd60e51b8152602060048201526039602482015260008051602061517a83398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610587565b5050600087826020015160405160200161224e929190614f59565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b612280613631565b61228a600061337a565b565b612294613631565b60405163a98fb35560e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063a98fb355906122e0908490600401614fa1565b600060405180830381600087803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b5050505050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef161461235d5760405162461bcd60e51b815260040161058790614fb4565b604051639926ee7d60e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690639926ee7d906123ab908590859060040161502c565b600060405180830381600087803b1580156123c557600080fd5b505af11580156123d9573d6000803e3d6000fd5b505050505050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146124295760405162461bcd60e51b815260040161058790614fb4565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063a364f4da906024016122e0565b6098546001600160a01b031633146124a2576040516312cf973160e01b815260040160405180910390fd5b6000816040516020016124b5919061485d565b60408051601f198184030181529190528051602090910120905060008061254c6124e26060860186614925565b6124f260a0870160808801614dd5565b604051602001612503929190615077565b60405160208183030381529060405280519060200120858060200190612529919061509f565b61253960a0890160808a01614dd5565b61254389806150e5565b61039c906150fc565b9150915060005b612560604086018661509f565b905081101561262b57612576604086018661509f565b8281811061258657612586614447565b9050013560f81c60f81b60f81c60ff16836020015182815181106125ac576125ac614447565b60200260200101516125be9190614d87565b6001600160601b03166064846000015183815181106125df576125df614447565b60200260200101516001600160601b03166125fa9190614db6565b10156126195760405163370bb44d60e11b815260040160405180910390fd5b8061262381614df0565b915050612553565b506040805160208082018690528183018490528251808303840181526060928301845280519082012060008181526097909252929020805460ff1916600217905561267890860186614925565b6126899060a0810190608001614dd5565b63ffffffff1661269c6060870187614925565b602001356126ad6060880188614925565b6126bb906020810190613a31565b6001600160a01b03167f495fe1747548dde7b9bdd86afd33c668a6f477df4979b04690be071c2520fa0d886040516126f3919061485d565b60405180910390a45050505050565b606060007f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127889190614e4d565b60ff169050806127a657505060408051600081526020810190915290565b6000805b8281101561285b57604051633ca5a5f560e01b815260ff821660048201527f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283d9190614e0b565b6128479083614e6a565b91508061285381614df0565b9150506127aa565b506000816001600160401b0381111561287657612876613a67565b60405190808252806020026020018201604052801561289f578160200160208202803683370190505b5090506000805b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129289190614e4d565b60ff16811015612ac157604051633ca5a5f560e01b815260ff821660048201526000907f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b031690633ca5a5f590602401602060405180830381865afa15801561299c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c09190614e0b565b905060005b81811015612aac576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b03169063adc804da906044016040805180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e9190614e82565b60000151858581518110612a7457612a74614447565b6001600160a01b039092166020928302919091019091015283612a9681614df0565b9450508080612aa490614df0565b9150506129c5565b50508080612ab990614df0565b9150506128a6565b5090949350505050565b612ad3613631565b6001600160a01b038116612b385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b6105998161337a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb8919061437b565b6001600160a01b0316336001600160a01b031614612be85760405162461bcd60e51b815260040161058790614398565b606654198119606654191614612c665760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610587565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106d0565b6001600160a01b038116612d2b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610587565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820190915260008082526020820152612db0613942565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015612de357612de5565bfe5b5080612e235760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610587565b505092915050565b6040805180820190915260008082526020820152612e47613960565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015612de3575080612e235760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610587565b612ec761397e565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612faf60008051602061515a8339815191528661445d565b90505b612fbb8161368b565b909350915060008051602061515a833981519152828309831415612ff5576040805180820190915290815260208101919091529392505050565b60008051602061515a833981519152600182089050612fb2565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906130416139a3565b60005b600281101561320657600061305a826006614db6565b905084826002811061306e5761306e614447565b60200201515183613080836000614e6a565b600c811061309057613090614447565b60200201528482600281106130a7576130a7614447565b602002015160200151838260016130be9190614e6a565b600c81106130ce576130ce614447565b60200201528382600281106130e5576130e5614447565b60200201515151836130f8836002614e6a565b600c811061310857613108614447565b602002015283826002811061311f5761311f614447565b6020020151516001602002015183613138836003614e6a565b600c811061314857613148614447565b602002015283826002811061315f5761315f614447565b60200201516020015160006002811061317a5761317a614447565b60200201518361318b836004614e6a565b600c811061319b5761319b614447565b60200201528382600281106131b2576131b2614447565b6020020151602001516001600281106131cd576131cd614447565b6020020151836131de836005614e6a565b600c81106131ee576131ee614447565b602002015250806131fe81614df0565b915050613044565b5061320f6139c2565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000805b610100811015613289576001811b91508382161561327957828160f81b604051602001613267929190615108565b60405160208183030381529060405292505b61328281614df0565b9050613239565b5050919050565b6065546001600160a01b03161580156132b157506001600160a01b03821615155b6133335760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610587565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261337682612c9d565b5050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806133d88461370d565b9050801561347e578260ff1684600186516133f39190614ed4565b8151811061340357613403614447565b016020015160f81c1061347e5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610587565b90505b92915050565b6000805b82156134815761349c600184614ed4565b90921691806134aa81615137565b91505061348b565b60408051808201909152600080825260208201526102008261ffff161061350e5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610587565b8161ffff1660011415613522575081613481565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061358b57600161ffff871660ff83161c8116141561356e5761356b8484612e2b565b93505b6135788384612e2b565b92506201fffe600192831b16910161353e565b509195945050505050565b604080518082019091526000808252602082015281511580156135bb57506020820151155b156135d9575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061515a833981519152846020015161360c919061445d565b6136249060008051602061515a833981519152614ed4565b905292915050565b919050565b6033546001600160a01b0316331461228a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610587565b6000808060008051602061515a833981519152600360008051602061515a8339815191528660008051602061515a833981519152888909090890506000613701827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061515a83398151915261389a565b91959194509092505050565b6000610100825111156137965760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610587565b81516137a457506000919050565b600080836000815181106137ba576137ba614447565b0160200151600160f89190911c81901b92505b8451811015613891578481815181106137e8576137e8614447565b0160200151600160f89190911c1b915082821161387d5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610587565b9181179161388a81614df0565b90506137cd565b50909392505050565b6000806138a56139c2565b6138ad6139e0565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015612de35750826139375760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610587565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806139916139fe565b815260200161399e6139fe565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461059957600080fd5b600060208284031215613a4357600080fd5b813561347e81613a1c565b600060208284031215613a6057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9f57613a9f613a67565b60405290565b60405161010081016001600160401b0381118282101715613a9f57613a9f613a67565b60405160c081016001600160401b0381118282101715613a9f57613a9f613a67565b604051601f8201601f191681016001600160401b0381118282101715613b1257613b12613a67565b604052919050565b600060408284031215613b2c57600080fd5b613b34613a7d565b9050813581526020820135602082015292915050565b600082601f830112613b5b57600080fd5b613b63613a7d565b806040840185811115613b7557600080fd5b845b81811015613b8f578035845260209384019301613b77565b509095945050505050565b600060808284031215613bac57600080fd5b613bb4613a7d565b9050613bc08383613b4a565b8152613bcf8360408401613b4a565b602082015292915050565b6000806000806101208587031215613bf157600080fd5b84359350613c028660208701613b1a565b9250613c118660608701613b9a565b9150613c208660e08701613b1a565b905092959194509250565b600060a08284031215613c3d57600080fd5b50919050565b60008060408385031215613c5657600080fd5b82356001600160401b03811115613c6c57600080fd5b613c7885828601613c2b565b95602094909401359450505050565b6020808252825182820181905260009190848201906040850190845b81811015613cc85783516001600160a01b031683529284019291840191600101613ca3565b50909695505050505050565b801515811461059957600080fd5b600060208284031215613cf457600080fd5b813561347e81613cd4565b60008060408385031215613d1257600080fd5b8235613d1d81613a1c565b91506020830135613d2d81613a1c565b809150509250929050565b600060208284031215613d4a57600080fd5b81356001600160401b03811115613d6057600080fd5b820160c0818503121561347e57600080fd5b60ff8116811461059957600080fd5b600060208284031215613d9357600080fd5b813561347e81613d72565b803563ffffffff8116811461362c57600080fd5b60006001600160401b03821115613dcb57613dcb613a67565b5060051b60200190565b600082601f830112613de657600080fd5b81356020613dfb613df683613db2565b613aea565b82815260059290921b84018101918181019086841115613e1a57600080fd5b8286015b84811015613e3c57613e2f81613d9e565b8352918301918301613e1e565b509695505050505050565b600082601f830112613e5857600080fd5b81356020613e68613df683613db2565b82815260069290921b84018101918181019086841115613e8757600080fd5b8286015b84811015613e3c57613e9d8882613b1a565b835291830191604001613e8b565b600082601f830112613ebc57600080fd5b81356020613ecc613df683613db2565b82815260059290921b84018101918181019086841115613eeb57600080fd5b8286015b84811015613e3c5780356001600160401b03811115613f0e5760008081fd5b613f1c8986838b0101613dd5565b845250918301918301613eef565b60006101808284031215613f3d57600080fd5b613f45613aa5565b905081356001600160401b0380821115613f5e57600080fd5b613f6a85838601613dd5565b83526020840135915080821115613f8057600080fd5b613f8c85838601613e47565b60208401526040840135915080821115613fa557600080fd5b613fb185838601613e47565b6040840152613fc38560608601613b9a565b6060840152613fd58560e08601613b1a565b6080840152610120840135915080821115613fef57600080fd5b613ffb85838601613dd5565b60a084015261014084013591508082111561401557600080fd5b61402185838601613dd5565b60c084015261016084013591508082111561403b57600080fd5b5061404884828501613eab565b60e08301525092915050565b60008060008060006080868803121561406c57600080fd5b8535945060208601356001600160401b038082111561408a57600080fd5b818801915088601f83011261409e57600080fd5b8135818111156140ad57600080fd5b8960208285010111156140bf57600080fd5b60208301965094506140d360408901613d9e565b935060608801359150808211156140e957600080fd5b506140f688828901613f2a565b9150509295509295909350565b600081518084526020808501945080840160005b8381101561413c5781516001600160601b031687529582019590820190600101614117565b509495945050505050565b60408152600083516040808401526141626080840182614103565b90506020850151603f1984830301606085015261417f8282614103565b925050508260208301529392505050565b60006001600160401b038311156141a9576141a9613a67565b6141bc601f8401601f1916602001613aea565b90508281528383830111156141d057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156141f957600080fd5b81356001600160401b0381111561420f57600080fd5b8201601f8101841361422057600080fd5b61422f84823560208401614190565b949350505050565b600082601f83011261424857600080fd5b61425783833560208501614190565b9392505050565b6000806040838503121561427157600080fd5b823561427c81613a1c565b915060208301356001600160401b038082111561429857600080fd5b90840190606082870312156142ac57600080fd5b6040516060810181811083821117156142c7576142c7613a67565b6040528235828111156142d957600080fd5b6142e588828601614237565b82525060208301356020820152604083013560408201528093505050509250929050565b60006020828403121561431b57600080fd5b81356001600160401b0381111561433157600080fd5b61422f84828501613c2b565b634e487b7160e01b600052602160045260246000fd5b602081016005831061437557634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561438d57600080fd5b815161347e81613a1c565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156143f457600080fd5b815161347e81613cd4565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261447a57634e487b7160e01b600052601260045260246000fd5b500690565b6000823561017e1983360301811261449657600080fd5b90910192915050565b6000808335601e198436030181126144b657600080fd5b83016020810192503590506001600160401b038111156144d557600080fd5b8060051b36038313156144e757600080fd5b9250929050565b8183526000602080850194508260005b8581101561413c5763ffffffff61451483613d9e565b16875295820195908201906001016144fe565b6000808335601e1984360301811261453e57600080fd5b83016020810192503590506001600160401b0381111561455d57600080fd5b8060061b36038313156144e757600080fd5b81835260208301925060008160005b848110156145a65781358652602080830135908701526040958601959091019060010161457e565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015614620578284038952614601828861449f565b61460c8682846144ee565b9a87019a95505050908401906001016145ea565b5091979650505050505050565b600061018061463c838461449f565b82865261464c83870182846144ee565b9250505061465d6020840184614527565b858303602087015261467083828461456f565b925050506146816040840184614527565b858303604087015261469483828461456f565b925050506146a860608501606085016145b0565b6146c260e0850160e0850180358252602090810135910152565b6101206146d18185018561449f565b868403838801526146e38482846144ee565b93505050506101406146f78185018561449f565b868403838801526147098482846144ee565b935050505061016061471d8185018561449f565b8684038388015261472f8482846145d0565b979650505050505050565b6000808335601e1984360301811261475157600080fd5b83016020810192503590506001600160401b0381111561477057600080fd5b8036038313156144e757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803561362c81613a1c565b600081356147c081613a1c565b6001600160a01b03168352602082810135908401526147e2604083018361473a565b60c060408601526147f760c08601828461477f565b915050614807606084018461473a565b858303606087015261481a83828461477f565b9250505063ffffffff61482f60808501613d9e565b16608085015261484260a084018461447f565b84820360a0860152614854828261462d565b95945050505050565b60208152600061486d838461447f565b60a0602084015261488160c084018261462d565b9050614890602085018561473a565b601f19808685030160408701526148a884838561477f565b93506148b7604088018861473a565b93509150808685030160608701526148d084848461477f565b93506060870135925060be198736030183126148eb57600080fd5b85840301608086015250614901828287016147b3565b91505063ffffffff61491560808601613d9e565b1660a08401528091505092915050565b6000823560be1983360301811261493b57600080fd5b9190910192915050565b600060c0823603121561495757600080fd5b61495f613ac8565b614968836147a8565b81526020830135602082015260408301356001600160401b038082111561498e57600080fd5b61499a36838701614237565b604084015260608501359150808211156149b357600080fd5b6149bf36838701614237565b60608401526149d060808601613d9e565b608084015260a08501359150808211156149e957600080fd5b506149f636828601613f2a565b60a08301525092915050565b60005b83811015614a1d578181015183820152602001614a05565b83811115614a2c576000848401525b50505050565b60008151808452614a4a816020860160208601614a02565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561413c57815163ffffffff1687529582019590820190600101614a72565b600081518084526020808501945080840160005b8381101561413c57614ac587835180518252602090810151910152565b6040969096019590820190600101614aa8565b8060005b6002811015614a2c578151845260209384019390910190600101614adc565b614b06828251614ad8565b60208101516112956040840182614ad8565b600081518084526020808501808196508360051b8101915082860160005b85811015614620578284038952614b4e848351614a5e565b98850198935090840190600101614b36565b848152608060208201526000614b796080830186614a32565b63ffffffff8516604084015282810360608401526101808451818352614ba182840182614a5e565b91505060208501518282036020840152614bbb8282614a94565b91505060408501518282036040840152614bd58282614a94565b9150506060850151614bea6060840182614afb565b506080850151805160e08401526020015161010083015260a0850151828203610120840152614c198282614a5e565b91505060c0850151828203610140840152614c348282614a5e565b91505060e0850151828203610160840152614c4f8282614b18565b9998505050505050505050565b80516001600160601b038116811461362c57600080fd5b600082601f830112614c8457600080fd5b81516020614c94613df683613db2565b82815260059290921b84018101918181019086841115614cb357600080fd5b8286015b84811015613e3c57614cc881614c5c565b8352918301918301614cb7565b60008060408385031215614ce857600080fd5b82516001600160401b0380821115614cff57600080fd5b9084019060408287031215614d1357600080fd5b614d1b613a7d565b825182811115614d2a57600080fd5b614d3688828601614c73565b825250602083015182811115614d4b57600080fd5b614d5788828601614c73565b602083015250809450505050602083015190509250929050565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b0380831681851681830481118215151615614dad57614dad614d71565b02949350505050565b6000816000190483118215151615614dd057614dd0614d71565b500290565b600060208284031215614de757600080fd5b61425782613d9e565b6000600019821415614e0457614e04614d71565b5060010190565b600060208284031215614e1d57600080fd5b5051919050565b600060208284031215614e3657600080fd5b81516001600160c01b038116811461347e57600080fd5b600060208284031215614e5f57600080fd5b815161347e81613d72565b60008219821115614e7d57614e7d614d71565b500190565b600060408284031215614e9457600080fd5b614e9c613a7d565b8251614ea781613a1c565b8152614eb560208401614c5c565b60208201529392505050565b60208152600061425760208301846147b3565b600082821015614ee657614ee6614d71565b500390565b600060208284031215614efd57600080fd5b815167ffffffffffffffff198116811461347e57600080fd5b600060208284031215614f2857600080fd5b61425782614c5c565b60006001600160601b0383811690831681811015614f5157614f51614d71565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614f9457815185529382019390820190600101614f78565b5092979650505050505050565b6020815260006142576020830184614a32565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b60018060a01b038316815260406020820152600082516060604084015261505660a0840182614a32565b90506020840151606084015260408401516080840152809150509392505050565b60408152600061508a60408301856147b3565b905063ffffffff831660208301529392505050565b6000808335601e198436030181126150b657600080fd5b8301803591506001600160401b038211156150d057600080fd5b6020019150368190038213156144e757600080fd5b6000823561017e1983360301811261493b57600080fd5b60006134813683613f2a565b6000835161511a818460208801614a02565b6001600160f81b0319939093169190920190815260010192915050565b600061ffff8083168181141561514f5761514f614d71565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122083ac032d1818dc5109f02d0d232356c7fe32ec99ff1276978172140b4aa8c5fc64736f6c634300080c0033","storage":{"0x0":"0x1","0x98":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c043d55aae46cecfa459a39000413fd977359bf3661a19b41228c6cedf04ccf964736f6c634300080c0033","storage":{"0x0":"0x100","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xa85233c63b9ee964add6f2cffe00fd84eb32338f","0x66":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44"}},"0x84ea74d481ee0a5332c457a4d796187f6ba67feb":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806381c0750211610104578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae14610509578063f851e1981461051c578063fa28c6271461052f578063ff694a771461054257600080fd5b8063c8294c5614610494578063d5eccc05146104a7578063dd9846b9146104ba578063df5cf723146104e257600080fd5b8063b6904b78116100de578063b6904b7814610448578063bc9a40c31461045b578063bd29b8cd1461046e578063c601527d1461048157600080fd5b806381c07502146103c8578063ac6bfb03146103e8578063adc804da1461040857600080fd5b80634bd26e091161017c57806366acfefe1161014b57806366acfefe146103315780636d14a9871461035c5780637c1723471461039b5780637ed9430f146103b557600080fd5b80634bd26e09146102cb5780635401ed27146102fc5780635e5a67751461030f5780635f1f2d771461031e57600080fd5b806320b66298116101b857806320b662981461025157806325504777146102665780632cd95940146102875780633ca5a5f5146102a757600080fd5b80630491b41c146101df57806308732461146102055780631f9b74e014610226575b600080fd5b6101f26101ed366004612bd0565b610555565b6040519081526020015b60405180910390f35b610218610213366004612beb565b610576565b6040516101fc929190612c15565b610239610234366004612c4f565b6105c0565b6040516001600160601b0390911681526020016101fc565b61026461025f366004612cca565b610607565b005b610279610274366004612d8b565b610927565b6040516101fc929190612e2a565b61029a610295366004612e4f565b610be9565b6040516101fc9190612e7b565b6101f26102b5366004612bd0565b60ff166000908152610181602052604090205490565b6101f26102d9366004612e4f565b60009182526101806020908152604080842060ff93909316845291905290205490565b61023961030a366004612e4f565b610c89565b6101f2670de0b6b3a764000081565b61026461032c366004612f84565b610ca2565b61034461033f366004612d8b565b610fdc565b6040516001600160c01b0390911681526020016101fc565b6103837f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef81565b6040516001600160a01b0390911681526020016101fc565b6103a3602081565b60405160ff90911681526020016101fc565b6102396103c336600461302c565b61112d565b6103db6103d6366004613059565b611161565b6040516101fc91906130ab565b6103fb6103f63660046130e9565b6113ab565b6040516101fc919061311c565b61041b610416366004612beb565b611444565b6040805182516001600160a01b031681526020928301516001600160601b031692810192909252016101fc565b6103fb610456366004612beb565b6114bf565b610264610469366004613168565b611557565b61026461047c366004613192565b61163e565b61026461048f36600461325e565b611762565b6102396104a23660046132ab565b611844565b6102396104b5366004612bd0565b6118c7565b6104cd6104c83660046132e7565b611938565b60405163ffffffff90911681526020016101fc565b6103837f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610239610517366004613323565b61194d565b6103fb61052a366004612e4f565b6119e3565b61023961053d3660046132e7565b611aca565b610264610550366004613365565b611b2c565b600060808260ff16610100811061056e5761056e6133c2565b015492915050565b610181602052816000526040600020818154811061059357600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b6000826105cc81611c9e565b6105f15760405162461bcd60e51b81526004016105e8906133d8565b60405180910390fd5b60006105fd8585611cc1565b5095945050505050565b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106899190613429565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b81526004016105e890613446565b846106c381611c9e565b6106df5760405162461bcd60e51b81526004016105e8906133d8565b8380610755576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f766964656460648201526084016105e8565b8281146107ca5760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d617463680000000000000060648201526084016105e8565b60ff8716600090815261018160205260408120905b8281101561091c578585828181106107f9576107f96133c2565b905060200201602081019061080e91906134c2565b82898984818110610821576108216133c2565b9050602002013581548110610838576108386133c2565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108a1576108a16133c2565b90506020020135815481106108b8576108b86133c2565b6000918252602090912001546001600160a01b03168888858181106108df576108df6133c2565b90506020020160208101906108f491906134c2565b604051610902929190612c15565b60405180910390a280610914816134f3565b9150506107df565b505050505050505050565b606080336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146109725760405162461bcd60e51b81526004016105e89061350e565b6000836001600160401b0381111561098c5761098c612ef3565b6040519080825280602002602001820160405280156109b5578160200160208202803683370190505b5090506000846001600160401b038111156109d2576109d2612ef3565b6040519080825280602002602001820160405280156109fb578160200160208202803683370190505b50905060005b85811015610bdb576000878783818110610a1d57610a1d6133c2565b919091013560f81c9150610a32905081611c9e565b610a9c5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b60648201526084016105e8565b600080610aa9838d611cc1565b9150915080610b465760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a4016105e8565b6000610b538c8585611ea7565b905082878681518110610b6857610b686133c2565b60200260200101906001600160601b031690816001600160601b031681525050610b92848261212b565b868681518110610ba457610ba46133c2565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610bd3906134f3565b915050610a01565b509097909650945050505050565b60008281526101806020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610c7c576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c23565b5050505090505b92915050565b600080610c9684846119e3565b60400151949350505050565b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d249190613429565b6001600160a01b0316336001600160a01b031614610d545760405162461bcd60e51b81526004016105e890613446565b81610d5e81611c9e565b610d7a5760405162461bcd60e51b81526004016105e8906133d8565b815180610def5760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f766964656400000060648201526084016105e8565b60ff8416600090815261018160205260408120905b82811015610fd4578560ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f783878481518110610e4457610e446133c2565b602002602001015181548110610e5c57610e5c6133c2565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28560ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7583878481518110610eba57610eba6133c2565b602002602001015181548110610ed257610ed26133c2565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a281548290610f1290600190613580565b81548110610f2257610f226133c2565b9060005260206000200182868381518110610f3f57610f3f6133c2565b602002602001015181548110610f5757610f576133c2565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558154829080610faa57610faa613597565b60008281526020812082016000199081019190915501905580610fcc816134f3565b915050610e04565b505050505050565b6000336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146110265760405162461bcd60e51b81526004016105e89061350e565b6000805b838110156105fd576000858583818110611046576110466133c2565b919091013560f81c915061105b905081611c9e565b6110cd5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f74206578697374000000000000000060648201526084016105e8565b6000806110da838b611cc1565b91509150806110fc5760009150600160ff84161b6001600160c01b0386161794505b60006111098a8585611ea7565b9050611115848261212b565b50505050508080611125906134f3565b91505061102a565b600081610100811061113e57600080fd5b60029182820401919006600c02915054906101000a90046001600160601b031681565b60606000826001600160401b0381111561117d5761117d612ef3565b6040519080825280602002602001820160405280156111a6578160200160208202803683370190505b50905060005b838110156113a05760008585838181106111c8576111c86133c2565b919091013560f81c91505063ffffffff871660808261010081106111ee576111ee6133c2565b01600081548110611201576112016133c2565b60009182526020909120015463ffffffff1611156112ad5760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a4016105e8565b600060808260ff1661010081106112c6576112c66133c2565b0154905060005b8181101561138a578863ffffffff1660808460ff1661010081106112f3576112f36133c2565b0160016113008486613580565b61130a9190613580565b8154811061131a5761131a6133c2565b60009182526020909120015463ffffffff161161137857600161133d8284613580565b6113479190613580565b858581518110611359576113596133c2565b602002602001019063ffffffff16908163ffffffff168152505061138a565b80611382816134f3565b9150506112cd565b5050508080611398906134f3565b9150506111ac565b5090505b9392505050565b6040805160608101825260008082526020808301829052828401829052858252610180815283822060ff881683529052919091208054839081106113f1576113f16133c2565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff831660009081526101816020526040902080548390811061147d5761147d6133c2565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602082018190529181019190915260808360ff1661010081106114f3576114f36133c2565b018281548110611505576115056133c2565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d99190613429565b6001600160a01b0316336001600160a01b0316146116095760405162461bcd60e51b81526004016105e890613446565b8161161381611c9e565b61162f5760405162461bcd60e51b81526004016105e8906133d8565b61163983836122cc565b505050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146116865760405162461bcd60e51b81526004016105e89061350e565b60005b8181101561175c5760008383838181106116a5576116a56133c2565b919091013560f81c91506116ba905081611c9e565b61172c5760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f7420657869737400000000000000000060648201526084016105e8565b600061173a86836000611ea7565b9050611746828261212b565b5050508080611754906134f3565b915050611689565b50505050565b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190613429565b6001600160a01b0316336001600160a01b0316146118145760405162461bcd60e51b81526004016105e890613446565b8161181e81611c9e565b61183a5760405162461bcd60e51b81526004016105e8906133d8565b6116398383612361565b60008060808560ff16610100811061185e5761185e6133c2565b018381548110611870576118706133c2565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610c968185612748565b600060808260ff1661010081106118e0576118e06133c2565b01600160808460ff1661010081106118fa576118fa6133c2565b01546119069190613580565b81548110611916576119166133c2565b600091825260209091200154600160401b90046001600160601b031692915050565b60006119458484846128d3565b949350505050565b60008281526101806020908152604080832060ff88168452909152812080548291908490811061197f5761197f6133c2565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015290506119d68186612748565b6040015195945050505050565b604080516060808201835260008083526020808401829052838501829052868252610180815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611a3d579150610c839050565b60008581526101806020908152604080832060ff881684529091529020611a65600184613580565b81548110611a7557611a756133c2565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610c83915050565b60008381526101806020908152604080832060ff861684529091528120611af28585856128d3565b63ffffffff1681548110611b0857611b086133c2565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef1614611b745760405162461bcd60e51b81526004016105e89061350e565b611b7d83611c9e565b15611be85760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b60648201526084016105e8565b611bf28382612361565b611bfc83836122cc565b60808360ff166101008110611c1357611c136133c2565b6040805160608101825263ffffffff4381168252600060208084018281529484018281529690950180546001810182559082529490209151919093018054925194516001600160601b0316600160401b02600160401b600160a01b0319958516600160201b0267ffffffffffffffff1990941692909416919091179190911792909216179055505050565b600060808260ff166101008110611cb757611cb76133c2565b0154151592915050565b600080600080611ce18660ff166000908152610181602052604090205490565b604080518082019091526000808252602082015290915060005b82811015611e465760ff8816600090815261018160205260409020805482908110611d2857611d286133c2565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b81528b8316600482015260248101919091529194507f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063778e55f390604401602060405180830381865afa158015611dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df291906135ad565b90508015611e3357670de0b6b3a764000083602001516001600160601b031682611e1c91906135c6565b611e2691906135e5565b611e309086613607565b94505b5080611e3e816134f3565b915050611cfb565b506000808860ff166101008110611e5f57611e5f6133c2565b60029182820401919006600c029054906101000a90046001600160601b03166001600160601b0316846001600160601b031610159050838195509550505050505b9250929050565b60008381526101806020908152604080832060ff86168452909152812054819080611f6d5760008681526101806020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556120d1565b60008681526101806020908152604080832060ff891684529091528120611f95600184613580565b81548110611fa557611fa56133c2565b600091825260209091200180546001600160601b03600160401b909104811694509091508516831415611fde57600093505050506113a4565b80544363ffffffff90811691161415612018578054600160401b600160a01b031916600160401b6001600160601b038716021781556120cf565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a81526101806020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26121218285612b74565b9695505050505050565b60008060808460ff166101008110612145576121456133c2565b015490506000608060ff86166101008110612162576121626133c2565b0161216e600184613580565b8154811061217e5761217e6133c2565b90600052602060002001905083600014156121ad5754600160401b90046001600160601b03169150610c839050565b80546000906121cc90600160401b90046001600160601b031686612b8c565b82549091504363ffffffff90811691161415612209578154600160401b600160a01b031916600160401b6001600160601b038316021782556122c3565b815467ffffffff000000001916600160201b4363ffffffff1602178255608060ff8716610100811061223d5761223d6133c2565b6040805160608101825263ffffffff4381168252600060208084018281526001600160601b03808a16968601968752979096018054600181018255908352912092519201805494519351909516600160401b02600160401b600160a01b0319938216600160201b0267ffffffffffffffff19909516929091169190911792909217161790555b95945050505050565b8060008360ff1661010081106122e4576122e46133c2565b60029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b031602179055508160ff167f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf8260405161235591906001600160601b0391909116815260200190565b60405180910390a25050565b60008151116123c65760405162461bcd60e51b815260206004820152603860248201526000805160206136cf83398151915260448201527f3a206e6f20737472617465676965732070726f7669646564000000000000000060648201526084016105e8565b805160ff831660009081526101816020908152604090912054906123ea8383613632565b111561245a5760405162461bcd60e51b815260206004820152604560248201526000805160206136cf83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a4016105e8565b60005b828110156127415760005b6124728284613632565b8110156125545784828151811061248b5761248b6133c2565b6020026020010151600001516001600160a01b031661018160008860ff1660ff16815260200190815260200160002082815481106124cb576124cb6133c2565b6000918252602090912001546001600160a01b031614156125425760405162461bcd60e51b815260206004820152603d60248201526000805160206136cf83398151915260448201527f3a2063616e6e6f74206164642073616d6520737472617465677920327800000060648201526084016105e8565b8061254c816134f3565b915050612468565b506000848281518110612569576125696133c2565b6020026020010151602001516001600160601b0316116125ee5760405162461bcd60e51b815260206004820152604660248201526000805160206136cf83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a4016105e8565b60ff85166000908152610181602052604090208451859083908110612615576126156133c2565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612692576126926133c2565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a758583815181106126ef576126ef6133c2565b60200260200101516000015186848151811061270d5761270d6133c2565b602002602001015160200151604051612727929190612c15565b60405180910390a280612739816134f3565b91505061245d565b5050505050565b816000015163ffffffff168163ffffffff1610156127f45760405162461bcd60e51b815260206004820152606060248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a206f70657261746f725374616b6560648201527f5570646174652069732066726f6d20616674657220626c6f636b4e756d626572608482015260a4016105e8565b602082015163ffffffff16158061281a5750816020015163ffffffff168163ffffffff16105b6128cf5760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a2074686572652069732061206e6560648201527f776572206f70657261746f725374616b6555706461746520617661696c61626c60848201527332903132b337b93290313637b1b5a73ab6b132b960611b60a482015260c4016105e8565b5050565b60008381526101806020908152604080832060ff86168452909152812054815b81811015612aaf5760008681526101806020908152604080832060ff89168452909152902063ffffffff851690600161292c8486613580565b6129369190613580565b81548110612946576129466133c2565b60009182526020909120015463ffffffff1611612a9d5760008681526101806020908152604080832060ff89168452909152812060016129868486613580565b6129909190613580565b815481106129a0576129a06133c2565b600091825260209091200154600160201b900463ffffffff1690508015806129d357508463ffffffff168163ffffffff16115b612a7d5760405162461bcd60e51b815260206004820152606960248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206f70657260648201527f61746f72496420686173206e6f207374616b652075706461746520617420626c60848201526837b1b5a73ab6b132b960b91b60a482015260c4016105e8565b6001612a898385613580565b612a939190613580565b93505050506113a4565b80612aa7816134f3565b9150506128f3565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e4016105e8565b60006113a46001600160601b0380851690841661364a565b600080821215612bb057612b9f82613689565b612ba990846136a6565b9050610c83565b612ba98284613607565b803560ff81168114612bcb57600080fd5b919050565b600060208284031215612be257600080fd5b6113a482612bba565b60008060408385031215612bfe57600080fd5b612c0783612bba565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612c4c57600080fd5b50565b60008060408385031215612c6257600080fd5b612c6b83612bba565b91506020830135612c7b81612c37565b809150509250929050565b60008083601f840112612c9857600080fd5b5081356001600160401b03811115612caf57600080fd5b6020830191508360208260051b8501011115611ea057600080fd5b600080600080600060608688031215612ce257600080fd5b612ceb86612bba565b945060208601356001600160401b0380821115612d0757600080fd5b612d1389838a01612c86565b90965094506040880135915080821115612d2c57600080fd5b50612d3988828901612c86565b969995985093965092949392505050565b60008083601f840112612d5c57600080fd5b5081356001600160401b03811115612d7357600080fd5b602083019150836020828501011115611ea057600080fd5b60008060008060608587031215612da157600080fd5b8435612dac81612c37565b93506020850135925060408501356001600160401b03811115612dce57600080fd5b612dda87828801612d4a565b95989497509550505050565b600081518084526020808501945080840160005b83811015612e1f5781516001600160601b031687529582019590820190600101612dfa565b509495945050505050565b604081526000612e3d6040830185612de6565b82810360208401526122c38185612de6565b60008060408385031215612e6257600080fd5b82359150612e7260208401612bba565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ee757612ed483855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612e97565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612f2b57612f2b612ef3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612f5957612f59612ef3565b604052919050565b60006001600160401b03821115612f7a57612f7a612ef3565b5060051b60200190565b60008060408385031215612f9757600080fd5b612fa083612bba565b91506020808401356001600160401b03811115612fbc57600080fd5b8401601f81018613612fcd57600080fd5b8035612fe0612fdb82612f61565b612f31565b81815260059190911b82018301908381019088831115612fff57600080fd5b928401925b8284101561301d57833582529284019290840190613004565b80955050505050509250929050565b60006020828403121561303e57600080fd5b5035919050565b803563ffffffff81168114612bcb57600080fd5b60008060006040848603121561306e57600080fd5b61307784613045565b925060208401356001600160401b0381111561309257600080fd5b61309e86828701612d4a565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612ee757835163ffffffff16835292840192918401916001016130c7565b6000806000606084860312156130fe57600080fd5b61310784612bba565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610c83565b80356001600160601b0381168114612bcb57600080fd5b6000806040838503121561317b57600080fd5b61318483612bba565b9150612e7260208401613151565b6000806000604084860312156131a757600080fd5b8335925060208401356001600160401b0381111561309257600080fd5b600082601f8301126131d557600080fd5b813560206131e5612fdb83612f61565b82815260069290921b8401810191818101908684111561320457600080fd5b8286015b8481101561325357604081890312156132215760008081fd5b613229612f09565b813561323481612c37565b8152613241828601613151565b81860152835291830191604001613208565b509695505050505050565b6000806040838503121561327157600080fd5b61327a83612bba565b915060208301356001600160401b0381111561329557600080fd5b6132a1858286016131c4565b9150509250929050565b6000806000606084860312156132c057600080fd5b6132c984612bba565b92506132d760208501613045565b9150604084013590509250925092565b6000806000606084860312156132fc57600080fd5b8335925061330c60208501612bba565b915061331a60408501613045565b90509250925092565b6000806000806080858703121561333957600080fd5b61334285612bba565b935061335060208601613045565b93969395505050506040820135916060013590565b60008060006060848603121561337a57600080fd5b61338384612bba565b925061339160208501613151565b915060408401356001600160401b038111156133ac57600080fd5b6133b8868287016131c4565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561343b57600080fd5b81516113a481612c37565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b6000602082840312156134d457600080fd5b6113a482613151565b634e487b7160e01b600052601160045260246000fd5b6000600019821415613507576135076134dd565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b600082821015613592576135926134dd565b500390565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156135bf57600080fd5b5051919050565b60008160001904831182151516156135e0576135e06134dd565b500290565b60008261360257634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b03808316818516808303821115613629576136296134dd565b01949350505050565b60008219821115613645576136456134dd565b500190565b60008083128015600160ff1b850184121615613668576136686134dd565b6001600160ff1b0384018313811615613683576136836134dd565b50500390565b6000600160ff1b82141561369f5761369f6134dd565b5060000390565b60006001600160601b03838116908316818110156136c6576136c66134dd565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a2646970667358221220598f691f2c719bcd2129ba627b71945231ac880f07b1eb0f052870b11fb7f30464736f6c634300080c0033","storage":{}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611905565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611905565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611938565b61045b565b005b6101ca6101b5366004611938565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c3565b6105b4565b61021b610200366004611a69565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611938565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a82565b6102a261029d366004611a99565b610652565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac3565b6106e5565b60405167ffffffffffffffff199091168152602001610152565b61021b7f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef81565b61034461033f366004611a99565b610880565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611905565b6108cb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611938565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0b565b610998565b6103f26103ed366004611b68565b610dec565b6040516101529190611be0565b61018461040d366004611905565b60016020526000908152604090205481565b61021b61042d366004611a69565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c3565b611037565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146104ac5760405162461bcd60e51b81526004016104a390611c2a565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146105fc5760405162461bcd60e51b81526004016104a390611c2a565b6000610607836108cb565b50905061061482826110d0565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f50052468383604051610645929190611c9e565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff86168252600490529190912080548390811061068f5761068f611d03565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061070c5761070c611d03565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107d35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806107f95750806040015163ffffffff168463ffffffff16105b6108775760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b6004602052816000526040600020818154811061089c57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b03821660008181526003602090815260408083208151808301835281548152600191820154818501529484529091528120549091908061098e5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146109e25760405162461bcd60e51b81526004016104a390611c2a565b6000610a106109f936869003860160408701611d19565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610a98576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f6283398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b225760405162461bcd60e51b81526020600482015260476024820152600080516020611f6283398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610ba65760405162461bcd60e51b81526020600482015260426024820152600080516020611f6283398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610bff918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d4b565b6040516020818303038152906040528051906020012060001c610c229190611d96565b9050610cbc610c5b610c4683610c40368a90038a0160408b01611d19565b9061131b565b610c5536899003890189611d19565b906113b2565b610c63611446565b610ca5610c9685610c40604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c55368a90038a018a611d19565b610cb7368a90038a0160808b01611e08565b611506565b610d575760405162461bcd60e51b815260206004820152606c6024820152600080516020611f6283398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610ddb9160808a0190611e65565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e0957610e09611953565b604051908082528060200260200182016040528015610e32578160200160208202803683370190505b50905060005b8481101561102e576000868683818110610e5457610e54611d03565b919091013560f81c600081815260046020526040902054909250905063ffffffff81161580610ebd575060ff821660009081526004602052604081208054909190610ea157610ea1611d03565b600091825260209091200154600160c01b900463ffffffff1686105b15610f4a5760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b60005b8163ffffffff168163ffffffff1610156110185760ff8316600090815260046020526040902087906001610f818486611eaf565b610f8b9190611eaf565b63ffffffff1681548110610fa157610fa1611d03565b600091825260209091200154600160c01b900463ffffffff1611611006576001610fcb8284611eaf565b610fd59190611eaf565b858581518110610fe757610fe7611d03565b602002602001019063ffffffff16908163ffffffff1681525050611018565b8061101081611ed4565b915050610f4d565b505050808061102690611ef8565b915050610e38565b50949350505050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef161461107f5760405162461bcd60e51b81526004016104a390611c2a565b600061108a836108cb565b50905061109f8261109a83611773565b6110d0565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba8383604051610645929190611c9e565b604080518082019091526000808252602082015260005b835181101561131557600084828151811061110457611104611d03565b0160209081015160f81c60008181526004909252604090912054909150806111945760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c890866113b2565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112119085611f13565b8154811061122157611221611d03565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112625780546001600160c01b031916604083901c1781556112fe565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130d90611ef8565b9150506110e7565b50505050565b6040805180820190915260008082526020820152611337611832565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561136a5761136c565bfe5b50806113aa5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113ce611850565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561136a5750806113aa5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144e61186e565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611535611893565b60005b60028110156116fa57600061154e826006611f2a565b905084826002811061156257611562611d03565b60200201515183611574836000611f49565b600c811061158457611584611d03565b602002015284826002811061159b5761159b611d03565b602002015160200151838260016115b29190611f49565b600c81106115c2576115c2611d03565b60200201528382600281106115d9576115d9611d03565b60200201515151836115ec836002611f49565b600c81106115fc576115fc611d03565b602002015283826002811061161357611613611d03565b602002015151600160200201518361162c836003611f49565b600c811061163c5761163c611d03565b602002015283826002811061165357611653611d03565b60200201516020015160006002811061166e5761166e611d03565b60200201518361167f836004611f49565b600c811061168f5761168f611d03565b60200201528382600281106116a6576116a6611d03565b6020020151602001516001600281106116c1576116c1611d03565b6020020151836116d2836005611f49565b600c81106116e2576116e2611d03565b602002015250806116f281611ef8565b915050611538565b506117036118b2565b60006020826101808560086107d05a03fa905080801561136a5750806117635760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179857506020820151155b156117b6575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fb9190611d96565b611825907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611f13565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118816118d0565b815260200161188e6118d0565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182d57600080fd5b60006020828403121561191757600080fd5b611920826118ee565b9392505050565b803560ff8116811461182d57600080fd5b60006020828403121561194a57600080fd5b61192082611927565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198c5761198c611953565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119bb576119bb611953565b604052919050565b600080604083850312156119d657600080fd5b6119df836118ee565b915060208084013567ffffffffffffffff808211156119fd57600080fd5b818601915086601f830112611a1157600080fd5b813581811115611a2357611a23611953565b611a35601f8201601f19168501611992565b91508082528784828501011115611a4b57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7b57600080fd5b5035919050565b8151815260208083015190820152604081016106df565b60008060408385031215611aac57600080fd5b611ab583611927565b946020939093013593505050565b600080600060608486031215611ad857600080fd5b611ae184611927565b9250602084013563ffffffff81168114611afa57600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2257600080fd5b611b2b856118ee565b9350610100601f1982011215611b4057600080fd5b602085019250604061011f1982011215611b5957600080fd5b50610120840190509250925092565b600080600060408486031215611b7d57600080fd5b833567ffffffffffffffff80821115611b9557600080fd5b818601915086601f830112611ba957600080fd5b813581811115611bb857600080fd5b876020828501011115611bca57600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1e57835163ffffffff1683529284019291840191600101611bfc565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038316815260006020604081840152835180604085015260005b81811015611cda57858101830151858201606001528201611cbe565b81811115611cec576000606083870101525b50601f01601f191692909201606001949350505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d2b57600080fd5b611d33611969565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db357634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dc957600080fd5b611dd1611969565b806040840185811115611de357600080fd5b845b81811015611dfd578035845260209384019301611de5565b509095945050505050565b600060808284031215611e1a57600080fd5b6040516040810181811067ffffffffffffffff82111715611e3d57611e3d611953565b604052611e4a8484611db8565b8152611e598460408501611db8565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611ecc57611ecc611e99565b039392505050565b600063ffffffff80831681811415611eee57611eee611e99565b6001019392505050565b6000600019821415611f0c57611f0c611e99565b5060010190565b600082821015611f2557611f25611e99565b500390565b6000816000190483118215151615611f4457611f44611e99565b500290565b60008219821115611f5c57611f5c611e99565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a2646970667358221220e5ee585bec8dbc2c21614f32f50e71edfdfaf7380b609080ac989d4e48836efb64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x860b6912c2d0337ef05bbc89b0c2cb6cbaeab4a5":{"nonce":0,"balance":"0x8ac7230489e80000","code":"0x","storage":{}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea2646970667358221220a22223d3e2a2d861ad54e68b7bc44b4d82a5a12a0bcca5c3404502bb1b430c5c64736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610f6f565b610268565b6040516100d89190610feb565b60405180910390f35b6100f46100ef36600461105f565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004611092565b610410565b005b6100f46101383660046110ad565b610534565b6101647f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004611092565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c136600461105f565b610601565b6040516100d891906110f0565b61018f6101e136600461105f565b61076b565b6101286101f4366004610f6f565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611128565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004611092565b6108f0565b6060336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146102bb5760405162461bcd60e51b81526004016102b290611152565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d66111c5565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf576000858583818110610321576103216111db565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b2906111f1565b60006103658361090f565b905061037c898461037760018561125c565b610a08565b8085858151811061038f5761038f6111db565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b790611281565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef16146104585760405162461bcd60e51b81526004016102b290611152565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff80881685529252909120805490918416908110610581576105816111db565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff811115610632576106326111c5565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610cf0565b82828151811061068c5761068c6111db565b6020026020010181815250506000801b8282815181106106ae576106ae6111db565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a81611281565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a96111db565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef161461082a5760405162461bcd60e51b81526004016102b290611152565b60005b818110156108ea576000838383818110610849576108496111db565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b2906111f1565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610de0565b905060006108be8583610e1a565b90508089146108d2576108d2818685610a08565b505050505080806108e290611281565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff16600161129c565b9050610948848383610e44565b60ff841660009081526002602052604081209061096660018461125c565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f60018461125c565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610ee4565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac36001836112c4565b81548110610ad357610ad36111db565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a6001836112c4565b81548110610b1a57610b1a6111db565b90600052602060002001915050919050565b60ff821660009081526003602052604081205480610bb4576040805162461bcd60e51b81526020600482015260248101919091527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646f6573206e6f7420657869737460648201526084016102b2565b60005b81811015610c6357600081610bcd6001856112c4565b610bd791906112c4565b60ff871660009081526003602052604081208054929350909183908110610c0057610c006111db565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090871610610c4e5760200151935061040a92505050565b50508080610c5b90611281565b915050610bb7565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054815b81811015610dd457600081610d2c6001856112c4565b610d3691906112c4565b60ff8816600090815260026020908152604080832063ffffffff8b16845290915281208054929350909183908110610d7057610d706111db565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090871610610dbf576020015193506103c392505050565b50508080610dcc90611281565b915050610d16565b50600095945050505050565b600080610dec83610aea565b8054909150600090610e0d90600190600160201b900463ffffffff1661125c565b90506103c3848383610e44565b600080610e278484610a92565b6001810154909150610e3c8585846000610ee4565b949350505050565b81544363ffffffff90811691161415610e7b57815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610f0357600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610f8457600080fd5b83359250602084013567ffffffffffffffff80821115610fa357600080fd5b818601915086601f830112610fb757600080fd5b813581811115610fc657600080fd5b876020828501011115610fd857600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561102957835163ffffffff1683529284019291840191600101611007565b50909695505050505050565b803560ff8116811461104657600080fd5b919050565b803563ffffffff8116811461104657600080fd5b6000806040838503121561107257600080fd5b61107b83611035565b91506110896020840161104b565b90509250929050565b6000602082840312156110a457600080fd5b6103c382611035565b6000806000606084860312156110c257600080fd5b6110cb84611035565b92506110d96020850161104b565b91506110e76040850161104b565b90509250925092565b6020808252825182820181905260009190848201906040850190845b818110156110295783518352928401929184019160010161110c565b6000806040838503121561113b57600080fd5b61114483611035565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561127957611279611246565b039392505050565b600060001982141561129557611295611246565b5060010190565b600063ffffffff8083168185168083038211156112bb576112bb611246565b01949350505050565b6000828210156112d6576112d6611246565b50039056fea2646970667358221220f89bdf345cb9944e470ce67d1bee2f3a5851458ee353881e42bceb30a30a981a64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cb578063e5db06c014610404578063eb990c5914610424578063ecb7cb1b14610444578063f2fde38b14610471578063fabc1cbc1461049157600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ab57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196b565b6104b1565b005b34801561017e57600080fd5b5061017061018d36600461198f565b61056d565b34801561019e57600080fd5b506101b26101ad36600461196b565b6106ac565b6040516101bf91906119c6565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196b565b6108a7565b3480156101f457600080fd5b5061021c7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f36600461198f565b6109ed565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109fe565b34801561029957600080fd5b506102bd6102a8366004611a13565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac5565b34801561030357600080fd5b506102bd610312366004611a36565b610ad9565b34801561032357600080fd5b50610337610332366004611a36565b610b5c565b6040516101bf9190611a62565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a70565b610bdc565b3480156103a157600080fd5b5061026a61c4e081565b3480156103b757600080fd5b506101706103c636600461198f565b610e9c565b3480156103d757600080fd5b5061026a6103e636600461196b565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041057600080fd5b5061017061041f366004611a36565b610f30565b34801561043057600080fd5b5061017061043f366004611aa9565b610fc5565b34801561045057600080fd5b5061046461045f36600461196b565b6110ed565b6040516101bf9190611aef565b34801561047d57600080fd5b5061017061048c36600461196b565b6111a7565b34801561049d57600080fd5b506101706104ac36600461198f565b61121d565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105289190611b45565b6001600160a01b0316336001600160a01b0316146105615760405162461bcd60e51b815260040161055890611b62565b60405180910390fd5b61056a81611379565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190611bac565b6105f55760405162461bcd60e51b815260040161055890611bce565b6098548181161461066e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610558565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106d98383611c2c565b90508060005b82811015610785576001600160a01b038716600090815260ca6020526040812060010161070c8388611c43565b8154811061071c5761071c611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076291611c43565b4310156107725781925050610785565b508061077d81611c71565b9150506106df565b508060008167ffffffffffffffff8111156107a2576107a2611c8c565b6040519080825280602002602001820160405280156107e757816020015b60408051808201909152600080825260208201528152602001906001900390816107c05790505b509050811561089c5760005b8281101561089a576001600160a01b038916600090815260ca602052604090206001016108208289611c43565b8154811061083057610830611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087c5761087c611c5b565b6020026020010181905250808061089290611c71565b9150506107f3565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d48383611c2c565b905060008167ffffffffffffffff8111156108f1576108f1611c8c565b60405190808252806020026020018201604052801561093657816020015b604080518082019091526000808252602082015281526020019060019003908161090f5790505b50905060005b828110156109e3576001600160a01b038716600090815260ca602052604090206001016109698287611c43565b8154811061097957610979611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c5576109c5611c5b565b602002602001018190525080806109db90611c71565b91505061093c565b5095945050505050565b6109f5611470565b61056a816114ca565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6a9190611bac565b610a865760405162461bcd60e51b815260040161055890611bce565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610acd611470565b610ad76000611591565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b53575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2c57610b2c611c5b565b600091825260209091200154610b4f9190600160e01b900463ffffffff16611c43565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9d57610b9d611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063a38406a390602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190611b45565b6001600160a01b031614610ce65760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610558565b60985460009060019081161415610d0f5760405162461bcd60e51b815260040161055890611ca2565b6001600160a01b038316610da55760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610558565b346001600160e01b03811615610e95576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5691611c2c565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610eef5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610558565b600260655560985460009060019081161415610f1d5760405162461bcd60e51b815260040161055890611ca2565b610f2733836115e3565b50506001606555565b60026065541415610f835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610558565b600260655560985460009060019081161415610fb15760405162461bcd60e51b815260040161055890611ca2565b610fbb83836115e3565b5050600160655550565b600054610100900460ff1615808015610fe55750600054600160ff909116105b80610fff5750303b158015610fff575060005460ff166001145b6110625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610558565b6000805460ff191660011790558015611085576000805461ff0019166101001790555b61108e85611591565b611098848461174e565b6110a1826114ca565b8015610e95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119957600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114d565b505050915250909392505050565b6111af611470565b6001600160a01b0381166112145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610558565b61056a81611591565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112949190611b45565b6001600160a01b0316336001600160a01b0316146112c45760405162461bcd60e51b815260040161055890611b62565b6098541981196098541916146113425760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610558565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a1565b6001600160a01b0381166114075760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610558565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610558565b61c4e08111156115505760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610558565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161c57508161161a8285611c43565b105b156116c9576001600160a01b038616600090815260ca602052604081206001016116468386611c43565b8154811061165657611656611c5b565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169c91611c43565b4310156116a957506116c9565b80516116be906001600160e01b031686611c43565b945050600101611605565b6116d38184611c43565b6001600160a01b038716600090815260ca602052604090205583156116fc576116fc8685611838565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb094386856117298487611c43565b604080516001600160a01b039094168452602084019290925290820152606001610e8b565b6097546001600160a01b031615801561176f57506001600160a01b03821615155b6117f15760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610558565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261183482611379565b5050565b804710156118885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610558565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d5576040519150601f19603f3d011682016040523d82523d6000602084013e6118da565b606091505b50509050806119515760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610558565b505050565b6001600160a01b038116811461056a57600080fd5b60006020828403121561197d57600080fd5b813561198881611956565b9392505050565b6000602082840312156119a157600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a06576119f68483516119a8565b92840192908501906001016119e3565b5091979650505050505050565b600060208284031215611a2557600080fd5b813560ff8116811461198857600080fd5b60008060408385031215611a4957600080fd5b8235611a5481611956565b946020939093013593505050565b60408101610b5682846119a8565b60008060408385031215611a8357600080fd5b8235611a8e81611956565b91506020830135611a9e81611956565b809150509250929050565b60008060008060808587031215611abf57600080fd5b8435611aca81611956565b93506020850135611ada81611956565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089a57611b318286516119a8565b938501936001939093019290820190611b1e565b600060208284031215611b5757600080fd5b815161198881611956565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bbe57600080fd5b8151801515811461198857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c3e57611c3e611c16565b500390565b60008219821115611c5657611c56611c16565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8557611c85611c16565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220974bfb720499b56252b27ea3937b9115de548a0dbf1088884cefaa0333c9e23f64736f6c634300080c0033","storage":{}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea26469706673582212209882247b872d905a05380b42c11d1716ad43e9b19643a0cf588a80c0958bf20d64736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":1,"balance":"0x21d8f196566fe7e63b8","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220f0fb0dbe9401a6132d4f8201707595a4adbf43511b70c6ae5d4d839d365297af64736f6c634300080c0033","storage":{}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102945760003560e01c80635df4594611610167578063a50857bf116100ce578063dd8283f311610087578063dd8283f3146106f5578063e65797ad14610708578063f2fde38b146107ab578063f8581191146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b8063a50857bf1461066d578063c391425e14610680578063ca0de882146106a0578063ca4f2d97146106c7578063d72d8dd6146106da578063d75b4c88146106e257600080fd5b8063886f119511610120578063886f1195146105cc5780638da5cb5b146105e55780639aa1653d146105ed5780639b5d177b1461060c5780639e9923c21461061f5780639feab8591461064657600080fd5b80635df459461461053d5780636347c9001461056457806368304835146105775780636e3b17db1461059e578063715018a6146105b1578063871ef049146105b957600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104c85780635865c60c146104db578063595c6a67146104fb5780635ac86ab7146105035780635b0b829f146105225780635c975abb1461053557600080fd5b806328f61b3114610435578063296bb0641461044857806329d1e0c31461045b5780632cdd1e861461046e5780633998fdd3146104815780633c2a7f4c146104a857600080fd5b806310d67a2f1161025d57806310d67a2f1461034a57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c421461041557600080fd5b8062cf2ab51461029957806303fd3492146102ae57806304ec6351146102e1578063054310e61461030c5780630cf4b76714610337575b600080fd5b6102ac6102a7366004614a5c565b610820565b005b6102ce6102bc366004614a9d565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102f46102ef366004614ac8565b610936565b6040516001600160c01b0390911681526020016102d8565b609d5461031f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d8565b6102ac610345366004614be7565b610b2c565b6102ac610358366004614c5c565b610c14565b6102ce61036b366004614c5c565b6001600160a01b031660009081526099602052604090205490565b6102ac610394366004614a9d565b610cc7565b6103bc6103a7366004614a9d565b609a6020526000908152604090205460ff1681565b60405190151581526020016102d8565b6103df6103da366004614c79565b610e04565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102d8565b6102ce610423366004614cac565b609b6020526000908152604090205481565b609e5461031f906001600160a01b031681565b61031f610456366004614a9d565b610e95565b6102ac610469366004614c5c565b610f21565b6102ac61047c366004614c5c565b610f32565b61031f7f0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f81565b6104bb6104b6366004614c5c565b610f43565b6040516102d89190614cc7565b6102ac6104d6366004614d1f565b610fc2565b6104ee6104e9366004614c5c565b61154c565b6040516102d89190614dc2565b6102ac6115c0565b6103bc610511366004614cac565b6001805460ff9092161b9081161490565b6102ac610530366004614e47565b61168c565b6001546102ce565b61031f7f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d81565b61031f610572366004614a9d565b611723565b61031f7f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e81565b6102ac6105ac366004614e7b565b61174d565b6102ac61180d565b6102f46105c7366004614a9d565b611821565b60005461031f906201000090046001600160a01b031681565b61031f61182c565b6096546105fa9060ff1681565b60405160ff90911681526020016102d8565b6102ac61061a366004614f9b565b611845565b61031f7f00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf5593381565b6102ce7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102ac61067b366004615094565b611b7c565b61069361068e36600461515f565b611d00565b6040516102d89190615209565b6102ce7ff843b3116d574f43e69f8dda5d93ebf11dccc4a465983f9453058005cd6b34a081565b6102ac6106d5366004615253565b611fae565b609c546102ce565b6102ac6106f0366004615339565b612015565b6102ac6107033660046154ec565b612028565b610777610716366004614cac565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff9081169183019190915292820151909216908201526060016102d8565b6102ac6107b9366004614c5c565b61232c565b6102ce6107cc366004615600565b6123a2565b6102ac6107df366004614a9d565b6123e9565b6108136107f2366004614c5c565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102d891906156b5565b600154600290600490811614156108525760405162461bcd60e51b8152600401610849906156c3565b60405180910390fd5b60005b82811015610930576000848483818110610871576108716156fa565b90506020020160208101906108869190614c5c565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156108d1576108d1614d8a565b60028111156108e2576108e2614d8a565b905250805190915060006108f582612545565b9050600061090b826001600160c01b03166125ae565b905061091885858361260b565b5050505050808061092890615726565b915050610855565b50505050565b6000838152609860205260408120805482919084908110610959576109596156fa565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610a535760405162461bcd60e51b815260206004820152606560248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c401610849565b602081015163ffffffff161580610a795750806020015163ffffffff168463ffffffff16105b610b205760405162461bcd60e51b815260206004820152606660248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c401610849565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610b5557610b55614d8a565b14610bc85760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f742072656769737465726564000000006064820152608401610849565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c09908490615799565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b91906157ac565b6001600160a01b0316336001600160a01b031614610cbb5760405162461bcd60e51b8152600401610849906157c9565b610cc4816126f8565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d389190615813565b610d545760405162461bcd60e51b815260040161084990615835565b60015481811614610dcd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c09565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e4157610e416156fa565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d6001600160a01b0316906347b314e890602401602060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f91906157ac565b610f296127fd565b610cc48161285c565b610f3a6127fd565b610cc4816128c5565b6040805180820190915260008082526020820152610e8f610fbd7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610fa29291909182526001600160a01b0316602082015260400190565b6040516020818303038152906040528051906020012061292e565b61297c565b60015460029060049081161415610feb5760405162461bcd60e51b8152600401610849906156c3565b600061103384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612a0c9050565b905061103e81612ac5565b6110ae5760405162461bcd60e51b81526020600482015260476024820152600080516020615ecc83398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a401610849565b84831461111d5760405162461bcd60e51b81526020600482015260436024820152600080516020615ecc83398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610849565b60005b8381101561154357600085858381811061113c5761113c6156fa565b919091013560f81c9150369050600089898581811061115d5761115d6156fa565b905060200281019061116f919061587d565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf559336001600160a01b03169063f341092290602401602060405180830381865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906158c6565b63ffffffff16811461129b5760405162461bcd60e51b81526020600482015260656024820152600080516020615ecc83398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c401610849565b6000805b828110156114e25760008484838181106112bb576112bb6156fa565b90506020020160208101906112d09190614c5c565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561131b5761131b614d8a565b600281111561132c5761132c614d8a565b9052508051909150600061133f82612545565b905060016001600160c01b03821660ff8b161c8116146113c35760405162461bcd60e51b815260206004820152604460248201819052600080516020615ecc833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a401610849565b856001600160a01b0316846001600160a01b03161161146e5760405162461bcd60e51b81526020600482015260676024820152600080516020615ecc83398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c401610849565b506114cc83838f8f8d908e600161148591906158e3565b92611492939291906158fb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260b92505050565b509092506114db905081615726565b905061129f565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061153c90615726565b9050611120565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff1660028111156115a6576115a6614d8a565b60028111156115b7576115b7614d8a565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116319190615813565b61164d5760405162461bcd60e51b815260040161084990615835565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6116946127fd565b609654829060ff908116908216106117145760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d45786973747360448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610849565b61171e8383612af8565b505050565b609c818154811061173357600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f720000000000006064820152608401610849565b61171e8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ba592505050565b6118156127fd565b61181f6000613055565b565b6000610e8f82612545565b60006118406064546001600160a01b031690565b905090565b60018054600091908116141561186d5760405162461bcd60e51b8152600401610849906156c3565b8389146118f05760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610849565b60006118fc33886130a7565b905061195b818787808060200260200160405190810160405280939291908181526020016000905b828210156119505761194160408302860136819003810190615925565b81526020019060010190611924565b5050505050866131d8565b60006119a233838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613362915050565b905060005b8b811015611b6d576000609760008f8f858181106119c7576119c76156fa565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110611a3457611a346156fa565b602002602001015163ffffffff161115611b5a57611ad58e8e84818110611a5d57611a5d6156fa565b9050013560f81c60f81b60f81c84604001518481518110611a8057611a806156fa565b60200260200101513386602001518681518110611a9f57611a9f6156fa565b60200260200101518d8d88818110611ab957611ab96156fa565b905060400201803603810190611acf9190615925565b866138f6565b611b5a898984818110611aea57611aea6156fa565b9050604002016020016020810190611b029190614c5c565b8f8f8590866001611b1391906158e3565b92611b20939291906158fb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ba592505050565b5080611b6581615726565b9150506119a7565b50505050505050505050505050565b600180546000919081161415611ba45760405162461bcd60e51b8152600401610849906156c3565b6000611bb033856130a7565b90506000611bf933838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613362915050565b51905060005b88811015611cf45760008a8a83818110611c1b57611c1b6156fa565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110611c5157611c516156fa565b602002602001015163ffffffff161115611ce15760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a401610849565b5080611cec81615726565b915050611bff565b50505050505050505050565b6060600082516001600160401b03811115611d1d57611d1d614b00565b604051908082528060200260200182016040528015611d46578160200160208202803683370190505b50905060005b8351811015611fa657600060986000868481518110611d6d57611d6d6156fa565b6020026020010151815260200190815260200160002080549050905060005b81811015611f91578663ffffffff1660986000888681518110611db157611db16156fa565b6020026020010151815260200190815260200160002060018385611dd59190615941565b611ddf9190615941565b81548110611def57611def6156fa565b60009182526020909120015463ffffffff1611611f7f57600060986000888681518110611e1e57611e1e6156fa565b6020026020010151815260200190815260200160002060018385611e429190615941565b611e4c9190615941565b81548110611e5c57611e5c6156fa565b600091825260209091200154600160201b900463ffffffff169050801580611e8f57508763ffffffff168163ffffffff16115b611f375760405162461bcd60e51b815260206004820152606760248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d6170496e64696365734174426c6f636b4e756d6265723a206f70657261746f60648201527f72496420686173206e6f2071756f72756d4269746d61707320617420626c6f6360848201526635a73ab6b132b960c91b60a482015260c401610849565b6001611f438385615941565b611f4d9190615941565b858581518110611f5f57611f5f6156fa565b602002602001019063ffffffff16908163ffffffff168152505050611f91565b80611f8981615726565b915050611d8c565b50508080611f9e90615726565b915050611d4c565b509392505050565b6001805460029081161415611fd55760405162461bcd60e51b8152600401610849906156c3565b61171e3384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ba592505050565b61201d6127fd565b61171e838383613bcb565b600054610100900460ff16158080156120485750600054600160ff909116105b806120625750303b158015612062575060005460ff166001145b6120c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610849565b6000805460ff1916600117905580156120e8576000805461ff0019166101001790555b825184511480156120fa575081518351145b6121645760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610849565b61216d89613055565b6121778686613de2565b6121808861285c565b612189876128c5565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e81166001600160a01b03199283161790925585548085018755850180547f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d841690831617905585549384019095559190920180547f00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf5593390921691909316179091555b84518110156122da576122c8858281518110612287576122876156fa565b60200260200101518583815181106122a1576122a16156fa565b60200260200101518584815181106122bb576122bb6156fa565b6020026020010151613bcb565b806122d281615726565b915050612269565b508015612321576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6123346127fd565b6001600160a01b0381166123995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610849565b610cc481613055565b60006123e07ff843b3116d574f43e69f8dda5d93ebf11dccc4a465983f9453058005cd6b34a086868686604051602001610fa2959493929190615958565b95945050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246091906157ac565b6001600160a01b0316336001600160a01b0316146124905760405162461bcd60e51b8152600401610849906157c9565b60015419811960015419161461250e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c09565b600081815260986020526040812054806125625750600092915050565b600083815260986020526040902061257b600183615941565b8154811061258b5761258b6156fa565b600091825260209091200154600160401b90046001600160c01b03169392505050565b60606000805b610100811015612604576001811b9150838216156125f457828160f81b6040516020016125e29291906159ce565b60405160208183030381529060405292505b6125fd81615726565b90506125b4565b5050919050565b60018260200151600281111561262357612623614d8a565b1461262d57505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e16906366acfefe90612682908890869088906004016159fd565b6020604051808303816000875af11580156126a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c59190615a24565b90506001600160c01b038116156126f1576126f1856126ec836001600160c01b03166125ae565b612ba5565b5050505050565b6001600160a01b0381166127865760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610849565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b3361280661182c565b6001600160a01b03161461181f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610849565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8f61293b613ed2565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806129ac600080516020615f0c83398151915286615a63565b90505b6129b881613ff9565b9093509150600080516020615f0c8339815191528283098314156129f2576040805180820190915290815260208101919091529392505050565b600080516020615f0c8339815191526001820890506129af565b600080612a188461407b565b90508015612abe578260ff168460018651612a339190615941565b81518110612a4357612a436156fa565b016020015160f81c10612abe5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610849565b9392505050565b6096546000908190612adf9060019060ff1681901b615941565b9050612abe6001600160c01b0384811690831681161490565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff166002811115612bd957612bd9614d8a565b14612c465760405162461bcd60e51b81526020600482015260436024820152600080516020615f2c83398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a401610849565b609654600090612c5a90859060ff16612a0c565b90506000612c6783612545565b90506001600160c01b038216612cd35760405162461bcd60e51b815260206004820152603b6024820152600080516020615f2c83398151915260448201527f70657261746f723a206269746d61702063616e6e6f74206265203000000000006064820152608401610849565b612cdc82612ac5565b612d475760405162461bcd60e51b81526020600482015260426024820152600080516020615f2c83398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a401610849565b612d5e6001600160c01b0383811690831681161490565b612de45760405162461bcd60e51b81526020600482015260596024820152600080516020615f2c83398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527f72656420666f72207370656369666965642071756f72756d7300000000000000608482015260a401610849565b6001600160c01b0382811619821616612dfd8482614208565b6001600160c01b038116612ecc5760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f169063a364f4da90602401600060405180830381600087803b158015612e7d57600080fd5b505af1158015612e91573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d169063f4e24fe590612f1a908a908a90600401615a77565b600060405180830381600087803b158015612f3457600080fd5b505af1158015612f48573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e16925063bd29b8cd9150612f9a9087908a90600401615a9b565b600060405180830381600087803b158015612fb457600080fd5b505af1158015612fc8573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf5593316925063bd29b8cd915061301a9087908a90600401615a9b565b600060405180830381600087803b15801561303457600080fd5b505af1158015613048573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d909116906313542a4e90602401602060405180830381865afa158015613112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131369190615ab4565b905080610e8f577f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d6001600160a01b031663bf79ce58848461317787610f43565b6040518463ffffffff1660e01b815260040161319593929190615acd565b6020604051808303816000875af11580156131b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abe9190615ab4565b6020808201516000908152609a909152604090205460ff161561327e5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a401610849565b42816040015110156133135760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a401610849565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161171e926001600160a01b039092169161335b91879187916123a2565b83516143c8565b61338660405180606001604052806060815260200160608152602001606081525090565b60006133ce86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612a0c9050565b905060006133db88612545565b90506001600160c01b0382166134595760405162461bcd60e51b815260206004820152603960248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206269746d61702063616e6e6f742062652030000000000000006064820152608401610849565b61346282612ac5565b6134d6576040805162461bcd60e51b81526020600482015260248101919091527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f742065786973746064820152608401610849565b8082166001600160c01b03161561358c5760405162461bcd60e51b815260206004820152606860248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c401610849565b6001600160c01b03818116908316176135a58982614208565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516135d59190615799565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561360f5761360f614d8a565b14613728576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561366a5761366a614d8a565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f169150639926ee7d906136bf908d908990600401615b4c565b600060405180830381600087803b1580156136d957600080fd5b505af11580156136ed573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d1690633fb2795290613778908d908c908c90600401615bc0565b600060405180830381600087803b15801561379257600080fd5b505af11580156137a6573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e169250632550477791506137fc908d908d908d908d90600401615be5565b6000604051808303816000875af115801561381b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138439190810190615c7b565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933169062bff04d906138a0908c908c908c90600401615cde565b6000604051808303816000875af11580156138bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138e79190810190615cf8565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156139765760405162461bcd60e51b81526020600482015260356024820152600080516020615eec83398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b6064820152608401610849565b8760ff16846000015160ff16146139f35760405162461bcd60e51b81526020600482015260476024820152600080516020615eec83398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a401610849565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e6001600160a01b031690635401ed2790604401602060405180830381865afa158015613a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a889190615d91565b9050613a948185614582565b6001600160601b0316866001600160601b031611613b275760405162461bcd60e51b81526020600482015260566024820152600080516020615eec83398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a401610849565b613b3188856145a6565b6001600160601b0316816001600160601b0316106123215760405162461bcd60e51b815260206004820152605c6024820152600080516020615eec83398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a401610849565b60965460ff1660c08110613c3f5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b6064820152608401610849565b613c4a816001615dae565b6096805460ff191660ff9290921691909117905580613c698186612af8565b60405160016296b58960e01b031981526001600160a01b037f000000000000000000000000e6e340d132b5f46d1e472debcd681b2abc16e57e169063ff694a7790613cbc90849088908890600401615dd3565b600060405180830381600087803b158015613cd657600080fd5b505af1158015613cea573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf559336001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613d5257600080fd5b505af1158015613d66573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d6001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613dce57600080fd5b505af1158015612321573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015613e0957506001600160a01b03821615155b613e8b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613ece826126f8565b5050565b6000306001600160a01b037f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc916148015613f2b57507f0000000000000000000000000000000000000000000000000000000000007a6946145b15613f5557507f8b6249bbf6344cc00d8cb0fb4b9470510bcba3b374b21867e92c719ebf12e89c90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615f0c8339815191526003600080516020615f0c83398151915286600080516020615f0c83398151915288890909089050600061406f827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f0c8339815191526145c0565b91959194509092505050565b6000610100825111156141045760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610849565b815161411257506000919050565b60008083600081518110614128576141286156fa565b0160200151600160f89190911c81901b92505b84518110156141ff57848181518110614156576141566156fa565b0160200151600160f89190911c1b91508282116141eb5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610849565b918117916141f881615726565b905061413b565b50909392505050565b600082815260986020526040902054806142ad576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b60008381526098602052604081206142c6600184615941565b815481106142d6576142d66156fa565b600091825260209091200180549091504363ffffffff9081169116141561431a5780546001600160401b0316600160401b6001600160c01b03851602178155610930565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b156144e257604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144089086908690600401615a9b565b602060405180830381865afa158015614425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144499190615e4c565b6001600160e01b0319161461171e5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610849565b826001600160a01b03166144f6838361466f565b6001600160a01b03161461171e5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610849565b60208101516000906127109061459c9061ffff1685615e76565b612abe9190615ea5565b60408101516000906127109061459c9061ffff1685615e76565b6000806145cb6149dc565b6145d36149fa565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561461457614616565bfe5b50826146645760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610849565b505195945050505050565b600080600061467e858561468b565b91509150611fa6816146fb565b6000808251604114156146c25760208301516040840151606085015160001a6146b6878285856148b6565b945094505050506146f4565b8251604014156146ec57602083015160408401516146e18683836149a3565b9350935050506146f4565b506000905060025b9250929050565b600081600481111561470f5761470f614d8a565b14156147185750565b600181600481111561472c5761472c614d8a565b141561477a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610849565b600281600481111561478e5761478e614d8a565b14156147dc5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610849565b60038160048111156147f0576147f0614d8a565b14156148495760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610849565b600481600481111561485d5761485d614d8a565b1415610cc45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610849565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148ed575060009050600361499a565b8460ff16601b1415801561490557508460ff16601c14155b15614916575060009050600461499a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561496a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166149935760006001925092505061499a565b9150600090505b94509492505050565b6000806001600160ff1b038316816149c060ff86901c601b6158e3565b90506149ce878288856148b6565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f840112614a2a57600080fd5b5081356001600160401b03811115614a4157600080fd5b6020830191508360208260051b85010111156146f457600080fd5b60008060208385031215614a6f57600080fd5b82356001600160401b03811115614a8557600080fd5b614a9185828601614a18565b90969095509350505050565b600060208284031215614aaf57600080fd5b5035919050565b63ffffffff81168114610cc457600080fd5b600080600060608486031215614add57600080fd5b833592506020840135614aef81614ab6565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614b3857614b38614b00565b60405290565b604080519081016001600160401b0381118282101715614b3857614b38614b00565b604051601f8201601f191681016001600160401b0381118282101715614b8857614b88614b00565b604052919050565b60006001600160401b03831115614ba957614ba9614b00565b614bbc601f8401601f1916602001614b60565b9050828152838383011115614bd057600080fd5b828260208301376000602084830101529392505050565b600060208284031215614bf957600080fd5b81356001600160401b03811115614c0f57600080fd5b8201601f81018413614c2057600080fd5b614c2f84823560208401614b90565b949350505050565b6001600160a01b0381168114610cc457600080fd5b8035614c5781614c37565b919050565b600060208284031215614c6e57600080fd5b8135612abe81614c37565b60008060408385031215614c8c57600080fd5b50508035926020909101359150565b803560ff81168114614c5757600080fd5b600060208284031215614cbe57600080fd5b612abe82614c9b565b815181526020808301519082015260408101610e8f565b60008083601f840112614cf057600080fd5b5081356001600160401b03811115614d0757600080fd5b6020830191508360208285010111156146f457600080fd5b60008060008060408587031215614d3557600080fd5b84356001600160401b0380821115614d4c57600080fd5b614d5888838901614a18565b90965094506020870135915080821115614d7157600080fd5b50614d7e87828801614cde565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614dbe57634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614ddd90840182614da0565b5092915050565b803561ffff81168114614c5757600080fd5b600060608284031215614e0857600080fd5b614e10614b16565b90508135614e1d81614ab6565b8152614e2b60208301614de4565b6020820152614e3c60408301614de4565b604082015292915050565b60008060808385031215614e5a57600080fd5b614e6383614c9b565b9150614e728460208501614df6565b90509250929050565b600080600060408486031215614e9057600080fd5b8335614e9b81614c37565b925060208401356001600160401b03811115614eb657600080fd5b614ec286828701614cde565b9497909650939450505050565b60006101008284031215614ee257600080fd5b50919050565b60008083601f840112614efa57600080fd5b5081356001600160401b03811115614f1157600080fd5b6020830191508360208260061b85010111156146f457600080fd5b600060608284031215614f3e57600080fd5b614f46614b16565b905081356001600160401b03811115614f5e57600080fd5b8201601f81018413614f6f57600080fd5b614f7e84823560208401614b90565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614fba57600080fd5b89356001600160401b0380821115614fd157600080fd5b614fdd8d838e01614cde565b909b50995060208c0135915080821115614ff657600080fd5b6150028d838e01614cde565b90995097508791506150178d60408e01614ecf565b96506101408c013591508082111561502e57600080fd5b61503a8d838e01614ee8565b90965094506101608c013591508082111561505457600080fd5b6150608d838e01614f2c565b93506101808c013591508082111561507757600080fd5b506150848c828d01614f2c565b9150509295985092959850929598565b60008060008060008061016087890312156150ae57600080fd5b86356001600160401b03808211156150c557600080fd5b6150d18a838b01614cde565b909850965060208901359150808211156150ea57600080fd5b6150f68a838b01614cde565b909650945084915061510b8a60408b01614ecf565b935061014089013591508082111561512257600080fd5b5061512f89828a01614f2c565b9150509295509295509295565b60006001600160401b0382111561515557615155614b00565b5060051b60200190565b6000806040838503121561517257600080fd5b823561517d81614ab6565b91506020838101356001600160401b0381111561519957600080fd5b8401601f810186136151aa57600080fd5b80356151bd6151b88261513c565b614b60565b81815260059190911b820183019083810190888311156151dc57600080fd5b928401925b828410156151fa578335825292840192908401906151e1565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561524757835163ffffffff1683529284019291840191600101615225565b50909695505050505050565b6000806020838503121561526657600080fd5b82356001600160401b0381111561527c57600080fd5b614a9185828601614cde565b6001600160601b0381168114610cc457600080fd5b600082601f8301126152ae57600080fd5b813560206152be6151b88361513c565b82815260069290921b840181019181810190868411156152dd57600080fd5b8286015b8481101561532e57604081890312156152fa5760008081fd5b615302614b3e565b813561530d81614c37565b81528185013561531c81615288565b818601528352918301916040016152e1565b509695505050505050565b600080600060a0848603121561534e57600080fd5b6153588585614df6565b9250606084013561536881615288565b915060808401356001600160401b0381111561538357600080fd5b61538f8682870161529d565b9150509250925092565b600082601f8301126153aa57600080fd5b813560206153ba6151b88361513c565b828152606092830285018201928282019190878511156153d957600080fd5b8387015b858110156153fc576153ef8982614df6565b84529284019281016153dd565b5090979650505050505050565b600082601f83011261541a57600080fd5b8135602061542a6151b88361513c565b82815260059290921b8401810191818101908684111561544957600080fd5b8286015b8481101561532e57803561546081615288565b835291830191830161544d565b600082601f83011261547e57600080fd5b8135602061548e6151b88361513c565b82815260059290921b840181019181810190868411156154ad57600080fd5b8286015b8481101561532e5780356001600160401b038111156154d05760008081fd5b6154de8986838b010161529d565b8452509183019183016154b1565b600080600080600080600080610100898b03121561550957600080fd5b61551289614c4c565b975061552060208a01614c4c565b965061552e60408a01614c4c565b955061553c60608a01614c4c565b94506080890135935060a08901356001600160401b038082111561555f57600080fd5b61556b8c838d01615399565b945060c08b013591508082111561558157600080fd5b61558d8c838d01615409565b935060e08b01359150808211156155a357600080fd5b506155b08b828c0161546d565b9150509295985092959890939650565b6000604082840312156155d257600080fd5b6155da614b3e565b90506155e582614c9b565b815260208201356155f581614c37565b602082015292915050565b6000806000806080858703121561561657600080fd5b843593506020808601356001600160401b0381111561563457600080fd5b8601601f8101881361564557600080fd5b80356156536151b88261513c565b81815260069190911b8201830190838101908a83111561567257600080fd5b928401925b8284101561569b576156898b856155c0565b82528482019150604084019350615677565b979a97995050505060408601359560600135949350505050565b60208101610e8f8284614da0565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561573a5761573a615710565b5060010190565b60005b8381101561575c578181015183820152602001615744565b838111156109305750506000910152565b60008151808452615785816020860160208601615741565b601f01601f19169290920160200192915050565b602081526000612abe602083018461576d565b6000602082840312156157be57600080fd5b8151612abe81614c37565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561582557600080fd5b81518015158114612abe57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e1984360301811261589457600080fd5b8301803591506001600160401b038211156158ae57600080fd5b6020019150600581901b36038213156146f457600080fd5b6000602082840312156158d857600080fd5b8151612abe81614ab6565b600082198211156158f6576158f6615710565b500190565b6000808585111561590b57600080fd5b8386111561591857600080fd5b5050820193919092039150565b60006040828403121561593757600080fd5b612abe83836155c0565b60008282101561595357615953615710565b500390565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b818110156159b5578551805160ff1684528501516001600160a01b0316858401529484019491830191600101615984565b5050606086019790975250505050608001529392505050565b600083516159e0818460208801615741565b6001600160f81b0319939093169190920190815260010192915050565b60018060a01b03841681528260208201526060604082015260006123e0606083018461576d565b600060208284031215615a3657600080fd5b81516001600160c01b0381168114612abe57600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615a7257615a72615a4d565b500690565b6001600160a01b0383168152604060208201819052600090614c2f9083018461576d565b828152604060208201526000614c2f604083018461576d565b600060208284031215615ac657600080fd5b5051919050565b6001600160a01b03841681526101608101615af5602083018580358252602090810135910152565b615b0f606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615b7660a084018261576d565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906123e09083018486615b97565b60018060a01b0385168152836020820152606060408201526000615c0d606083018486615b97565b9695505050505050565b600082601f830112615c2857600080fd5b81516020615c386151b88361513c565b82815260059290921b84018101918181019086841115615c5757600080fd5b8286015b8481101561532e578051615c6e81615288565b8352918301918301615c5b565b60008060408385031215615c8e57600080fd5b82516001600160401b0380821115615ca557600080fd5b615cb186838701615c17565b93506020850151915080821115615cc757600080fd5b50615cd485828601615c17565b9150509250929050565b8381526040602082015260006123e0604083018486615b97565b60006020808385031215615d0b57600080fd5b82516001600160401b03811115615d2157600080fd5b8301601f81018513615d3257600080fd5b8051615d406151b88261513c565b81815260059190911b82018301908381019087831115615d5f57600080fd5b928401925b82841015615d86578351615d7781614ab6565b82529284019290840190615d64565b979650505050505050565b600060208284031215615da357600080fd5b8151612abe81615288565b600060ff821660ff84168060ff03821115615dcb57615dcb615710565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615e3c57865180516001600160a01b031684528601518516868401529585019591830191600101615e0c565b50909a9950505050505050505050565b600060208284031215615e5e57600080fd5b81516001600160e01b031981168114612abe57600080fd5b60006001600160601b0380831681851681830481118215151615615e9c57615e9c615710565b02949350505050565b60006001600160601b0380841680615ebf57615ebf615a4d565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c696461746543687530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724fa2646970667358221220dda4089bedaa401d1e4227e18539d36bbc40d8ca9f28f80693a5f89bfe584e4464736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa85233c63b9ee964add6f2cffe00fd84eb32338f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220ca7a73ad747f85e67612044277d95c8e915fed4d2f199f1b37f1883f3601582264736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102115760003560e01c80638c80d4e511610125578063c6656702116100ad578063df5cf7231161007c578063df5cf7231461054a578063e7a050aa14610571578063f2fde38b14610584578063f698da2514610597578063fabc1cbc1461059f57600080fd5b8063c6656702146104e7578063cbc2bd62146104fa578063cd293f6f1461050d578063cf756fdf1461053757600080fd5b8063b1344271116100f4578063b134427114610464578063b43b514b1461048b578063b5d8b5b81461049e578063c3c6b3a9146104b1578063c608c7f3146104d457600080fd5b80638c80d4e51461040c5780638da5cb5b1461041f57806394f649dd14610430578063967fc0d21461045157600080fd5b80635ac86ab7116101a8578063715018a611610177578063715018a61461037d5780637a7e0d92146103855780637ecebe00146103b0578063886f1195146103d05780638b8aac3c146103e357600080fd5b80635ac86ab71461030c5780635c975abb1461033f5780635de08ff214610347578063663c1de41461035a57600080fd5b80634665bcda116101e45780634665bcda1461028b57806348825e94146102ca57806350ff7225146102f1578063595c6a671461030457600080fd5b806310d67a2f14610216578063136439dd1461022b57806320606b701461023e57806332e89ace14610278575b600080fd5b61022961022436600461289a565b6105b2565b005b6102296102393660046128b7565b61066e565b6102657f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b610265610286366004612950565b6107ad565b6102b27f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6040516001600160a01b03909116815260200161026f565b6102657f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f181565b6102296102ff366004612a2f565b6109f1565b610229610a49565b61032f61031a366004612a70565b609854600160ff9092169190911b9081161490565b604051901515815260200161026f565b609854610265565b610229610355366004612a93565b610b10565b61032f61036836600461289a565b60d16020526000908152604090205460ff1681565b610229610c59565b610265610393366004612b08565b60cd60209081526000928352604080842090915290825290205481565b6102656103be36600461289a565b60ca6020526000908152604090205481565b6097546102b2906001600160a01b031681565b6102656103f136600461289a565b6001600160a01b0316600090815260ce602052604090205490565b61022961041a366004612a2f565b610c6d565b6033546001600160a01b03166102b2565b61044361043e36600461289a565b610cc0565b60405161026f929190612bb5565b60cb546102b2906001600160a01b031681565b6102b27f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b610265610499366004612d5e565b610e40565b6102296104ac366004612a93565b610e8d565b61032f6104bf3660046128b7565b60cf6020526000908152604090205460ff1681565b6102296104e2366004612e34565b610fd1565b6102296104f536600461289a565b611089565b6102b2610508366004612e87565b61109a565b61052061051b366004612d5e565b6110d2565b60408051921515835260208301919091520161026f565b610229610545366004612eb3565b611166565b6102b27f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61026561057f366004612a2f565b61129a565b61022961059236600461289a565b611363565b6102656113d9565b6102296105ad3660046128b7565b611417565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106299190612f04565b6001600160a01b0316336001600160a01b0316146106625760405162461bcd60e51b815260040161065990612f21565b60405180910390fd5b61066b81611573565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106da9190612f6b565b6106f65760405162461bcd60e51b815260040161065990612f8d565b6098548181161461076f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610659565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108045760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610659565b600260655414156108575760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b6002606555428410156108de5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610659565b6001600160a01b03858116600090815260ca602090815260408083205481517f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f1938101939093528c851691830191909152928a1660608201526080810189905260a0810183905260c0810187905260e00160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca909352908220600185019055915061098e6113d9565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506109d188828861166a565b6109dd888c8c8c611824565b60016065559b9a5050505050505050505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610a395760405162461bcd60e51b815260040161065990612fd5565b610a44838383611a45565b505050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab59190612f6b565b610ad15760405162461bcd60e51b815260040161065990612f8d565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60cb546001600160a01b03163314610b3a5760405162461bcd60e51b815260040161065990613033565b8060005b81811015610c535760d16000858584818110610b5c57610b5c61309d565b9050602002016020810190610b71919061289a565b6001600160a01b0316815260208101919091526040016000205460ff16610c4b57600160d16000868685818110610baa57610baa61309d565b9050602002016020810190610bbf919061289a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe848483818110610c1a57610c1a61309d565b9050602002016020810190610c2f919061289a565b6040516001600160a01b03909116815260200160405180910390a15b600101610b3e565b50505050565b610c61611c7f565b610c6b6000611cd9565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610cb55760405162461bcd60e51b815260040161065990612fd5565b610c53838383611d2b565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610cf857610cf86128e0565b604051908082528060200260200182016040528015610d21578160200160208202803683370190505b50905060005b82811015610db2576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610d6657610d6661309d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d9f57610d9f61309d565b6020908102919091010152600101610d27565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610e2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e10575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e709790969591016130b3565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610eb75760405162461bcd60e51b815260040161065990613033565b8060005b81811015610c535760d16000858584818110610ed957610ed961309d565b9050602002016020810190610eee919061289a565b6001600160a01b0316815260208101919091526040016000205460ff1615610fc957600060d16000868685818110610f2857610f2861309d565b9050602002016020810190610f3d919061289a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f9857610f9861309d565b9050602002016020810190610fad919061289a565b6040516001600160a01b03909116815260200160405180910390a15b600101610ebb565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146110195760405162461bcd60e51b815260040161065990612fd5565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b5050505050505050565b611091611c7f565b61066b81611e87565b60ce60205281600052604060002081815481106110b657600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9161461111d5760405162461bcd60e51b815260040161065990612fd5565b600061112884610e40565b600081815260cf60205260408120549192509060ff161561115d5750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff16158080156111865750600054600160ff909116105b806111a05750303b1580156111a0575060005460ff166001145b6112035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610659565b6000805460ff191660011790558015611226576000805461ff0019166101001790555b61122e611ef0565b60c95561123b8383611f87565b61124485611cd9565b61124d84611e87565b8015611293576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6098546000908190600190811614156112f15760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610659565b600260655414156113445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b600260655561135533868686611824565b600160655595945050505050565b61136b611c7f565b6001600160a01b0381166113d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610659565b61066b81611cd9565b60007f0000000000000000000000000000000000000000000000000000000000007a6946141561140a575060c95490565b611412611ef0565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190612f04565b6001600160a01b0316336001600160a01b0316146114be5760405162461bcd60e51b815260040161065990612f21565b60985419811960985419161461153c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610659565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107a2565b6001600160a01b0381166116015760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610659565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561178457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906116aa9086908690600401613184565b602060405180830381865afa1580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb919061319d565b6001600160e01b03191614610a445760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610659565b826001600160a01b03166117988383612071565b6001600160a01b031614610a445760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610659565b6001600160a01b038316600090815260d16020526040812054849060ff166118ca5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610659565b6118df6001600160a01b038516338786612095565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af115801561192e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195291906131c7565b915061195f868684611a45565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b5050604080516001600160a01b038a8116825288811660208301528916818301526060810186905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969350908190036080019150a150949350505050565b6001600160a01b038316611ac15760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610659565b80611b2d5760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610659565b6001600160a01b03808416600090815260cd6020908152604080832093861683529290522054611c3e576001600160a01b038316600090815260ce602090815260409091205410611bff5760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610659565b6001600160a01b03838116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808416600090815260cd6020908152604080832093861683529290529081208054839290611c759084906131f6565b9091555050505050565b6033546001600160a01b03163314610c6b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610659565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611da05760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610659565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e325760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610659565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611e7a57611e7085856120ef565b6001915050611e80565b60009150505b9392505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611fa857506001600160a01b03821615155b61202a5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610659565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261206d82611573565b5050565b600080600061208085856122e1565b9150915061208d81612351565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c5390859061250c565b6001600160a01b038216600090815260ce6020526040812054905b8181101561220a576001600160a01b03848116600090815260ce60205260409020805491851691839081106121415761214161309d565b6000918252602090912001546001600160a01b03161415612202576001600160a01b038416600090815260ce6020526040902080546121829060019061320e565b815481106121925761219261309d565b60009182526020808320909101546001600160a01b03878116845260ce90925260409092208054919092169190839081106121cf576121cf61309d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061220a565b60010161210a565b818114156122925760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610659565b6001600160a01b038416600090815260ce602052604090208054806122b9576122b9613225565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156123185760208301516040840151606085015160001a61230c878285856125de565b9450945050505061234a565b82516040141561234257602083015160408401516123378683836126cb565b93509350505061234a565b506000905060025b9250929050565b60008160048111156123655761236561323b565b141561236e5750565b60018160048111156123825761238261323b565b14156123d05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610659565b60028160048111156123e4576123e461323b565b14156124325760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610659565b60038160048111156124465761244661323b565b141561249f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610659565b60048160048111156124b3576124b361323b565b141561066b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610659565b6000612561826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127049092919063ffffffff16565b805190915015610a44578080602001905181019061257f9190612f6b565b610a445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610659565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561261557506000905060036126c2565b8460ff16601b1415801561262d57508460ff16601c14155b1561263e57506000905060046126c2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612692573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126bb576000600192509250506126c2565b9150600090505b94509492505050565b6000806001600160ff1b038316816126e860ff86901c601b6131f6565b90506126f6878288856125de565b935093505050935093915050565b6060612713848460008561271b565b949350505050565b60608247101561277c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610659565b6001600160a01b0385163b6127d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610659565b600080866001600160a01b031685876040516127ef9190613251565b60006040518083038185875af1925050503d806000811461282c576040519150601f19603f3d011682016040523d82523d6000602084013e612831565b606091505b509150915061284182828661284c565b979650505050505050565b6060831561285b575081611e80565b82511561286b5782518084602001fd5b8160405162461bcd60e51b8152600401610659919061326d565b6001600160a01b038116811461066b57600080fd5b6000602082840312156128ac57600080fd5b8135611e8081612885565b6000602082840312156128c957600080fd5b5035919050565b80356128db81612885565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612919576129196128e0565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612948576129486128e0565b604052919050565b60008060008060008060c0878903121561296957600080fd5b863561297481612885565b955060208781013561298581612885565b955060408801359450606088013561299c81612885565b93506080880135925060a088013567ffffffffffffffff808211156129c057600080fd5b818a0191508a601f8301126129d457600080fd5b8135818111156129e6576129e66128e0565b6129f8601f8201601f1916850161291f565b91508082528b84828501011115612a0e57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b600080600060608486031215612a4457600080fd5b8335612a4f81612885565b92506020840135612a5f81612885565b929592945050506040919091013590565b600060208284031215612a8257600080fd5b813560ff81168114611e8057600080fd5b60008060208385031215612aa657600080fd5b823567ffffffffffffffff80821115612abe57600080fd5b818501915085601f830112612ad257600080fd5b813581811115612ae157600080fd5b8660208260051b8501011115612af657600080fd5b60209290920196919550909350505050565b60008060408385031215612b1b57600080fd5b8235612b2681612885565b91506020830135612b3681612885565b809150509250929050565b600081518084526020808501945080840160005b83811015612b7a5781516001600160a01b031687529582019590820190600101612b55565b509495945050505050565b600081518084526020808501945080840160005b83811015612b7a57815187529582019590820190600101612b99565b604081526000612bc86040830185612b41565b8281036020840152612bda8185612b85565b95945050505050565b600067ffffffffffffffff821115612bfd57612bfd6128e0565b5060051b60200190565b600082601f830112612c1857600080fd5b81356020612c2d612c2883612be3565b61291f565b82815260059290921b84018101918181019086841115612c4c57600080fd5b8286015b84811015612c70578035612c6381612885565b8352918301918301612c50565b509695505050505050565b600082601f830112612c8c57600080fd5b81356020612c9c612c2883612be3565b82815260059290921b84018101918181019086841115612cbb57600080fd5b8286015b84811015612c705780358352918301918301612cbf565b600060408284031215612ce857600080fd5b6040516040810181811067ffffffffffffffff82111715612d0b57612d0b6128e0565b6040529050808235612d1c81612885565b815260208301356bffffffffffffffffffffffff81168114612d3d57600080fd5b6020919091015292915050565b803563ffffffff811681146128db57600080fd5b600060208284031215612d7057600080fd5b813567ffffffffffffffff80821115612d8857600080fd5b9083019060e08286031215612d9c57600080fd5b612da46128f6565b823582811115612db357600080fd5b612dbf87828601612c07565b825250602083013582811115612dd457600080fd5b612de087828601612c7b565b602083015250612df2604084016128d0565b6040820152612e048660608501612cd6565b6060820152612e1560a08401612d4a565b6080820152612e2660c084016128d0565b60a082015295945050505050565b60008060008060808587031215612e4a57600080fd5b8435612e5581612885565b93506020850135612e6581612885565b9250604085013591506060850135612e7c81612885565b939692955090935050565b60008060408385031215612e9a57600080fd5b8235612ea581612885565b946020939093013593505050565b60008060008060808587031215612ec957600080fd5b8435612ed481612885565b93506020850135612ee481612885565b92506040850135612ef481612885565b9396929550929360600135925050565b600060208284031215612f1657600080fd5b8151611e8081612885565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612f7d57600080fd5b81518015158114611e8057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60e0815260006130c660e0830189612b41565b82810360208401526130d88189612b85565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b60005b8381101561314757818101518382015260200161312f565b83811115610c535750506000910152565b6000815180845261317081602086016020860161312c565b601f01601f19169290920160200192915050565b8281526040602082015260006127136040830184613158565b6000602082840312156131af57600080fd5b81516001600160e01b031981168114611e8057600080fd5b6000602082840312156131d957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613209576132096131e0565b500190565b600082821015613220576132206131e0565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161326381846020870161312c565b9190910192915050565b602081526000611e80602083018461315856fea2646970667358221220c56189ec727d108892fe316fda0640a975c27d8b087d6f78a4efbb1e4a58677064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610d22565b6100b0565b6040516100669190610e6a565b60405180910390f35b61008261007d366004610ed0565b61042b565b6040516100669190610fd4565b6100a261009d36600461108f565b610ab2565b6040516100669291906110d1565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011691906110f2565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c91906110f2565b90506000855167ffffffffffffffff81111561019a5761019a610cb9565b6040519080825280602002602001820160405280156101cd57816020015b60608152602001906001900390816101b85790505b50905060005b86518110156104205760008782815181106101f0576101f061110f565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8916602483015291506000906001600160a01b03861690638902624590604401600060405180830381865afa158015610251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102799190810190611149565b9050805167ffffffffffffffff81111561029557610295610cb9565b6040519080825280602002602001820160405280156102da57816020015b60408051808201909152600080825260208201528152602001906001900390816102b35790505b508484815181106102ed576102ed61110f565b602002602001018190525060005b815181101561040a5760008282815181106103185761031861110f565b602090810291909101810151604080518082018252828152905163fa28c62760e01b81526004810183905260ff8816602482015263ffffffff8e166044820152919350918201906001600160a01b038b169063fa28c62790606401602060405180830381865afa158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b491906111df565b6001600160601b03168152508686815181106103d2576103d261110f565b602002602001015183815181106103eb576103eb61110f565b60200260200101819052505080806104029061121e565b9150506102fb565b50505080806104189061121e565b9150506101d3565b509695505050505050565b6104566040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ba91906110f2565b90506104e76040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e90610517908b9089908990600401611239565b600060405180830381865afa158015610534573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055c9190810190611283565b81526040516340e03a8160e11b81526001600160a01b038316906381c075029061058e908b908b908b9060040161133b565b600060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d39190810190611283565b60408201528567ffffffffffffffff8111156105f1576105f1610cb9565b60405190808252806020026020018201604052801561062457816020015b606081526020019060019003908161060f5790505b50606082015260005b60ff81168711156109c35760008567ffffffffffffffff81111561065357610653610cb9565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b5083606001518360ff16815181106106965761069661110f565b602002602001018190525060005b868110156108c25760008c6001600160a01b03166304ec63518a8a858181106106cf576106cf61110f565b905060200201358e886000015186815181106106ed576106ed61110f565b60200260200101516040518463ffffffff1660e01b815260040161072a9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611364565b90508a8a8560ff168181106107825761078261110f565b6001600160c01b03841692013560f81c9190911c6001908116141590506108af57856001600160a01b031663dd9846b98a8a858181106107c4576107c461110f565b905060200201358d8d8860ff168181106107e0576107e061110f565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a919061138d565b85606001518560ff16815181106108735761087361110f565b6020026020010151848151811061088c5761088c61110f565b63ffffffff90921660209283029190910190910152826108ab8161121e565b9350505b50806108ba8161121e565b9150506106a4565b5060008167ffffffffffffffff8111156108de576108de610cb9565b604051908082528060200260200182016040528015610907578160200160208202803683370190505b50905060005b828110156109885784606001518460ff168151811061092e5761092e61110f565b602002602001015181815181106109475761094761110f565b60200260200101518282815181106109615761096161110f565b63ffffffff90921660209283029190910190910152806109808161121e565b91505061090d565b508084606001518460ff16815181106109a3576109a361110f565b6020026020010181905250505080806109bb906113aa565b91505061062d565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906110f2565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610a5b908b908b908e906004016113ca565b600060405180830381865afa158015610a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa09190810190611283565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610aed57610aed61110f565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e90610b2990889086906004016113f4565b600060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6e9190810190611283565b600081518110610b8057610b8061110f565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190611364565b6001600160c01b031690506000610c2682610c44565b905081610c348a838a6100b0565b9550955050505050935093915050565b60606000805b610100811015610c9a576001811b915083821615610c8a57828160f81b604051602001610c78929190611448565b60405160208183030381529060405292505b610c938161121e565b9050610c4a565b5050919050565b6001600160a01b0381168114610cb657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cf857610cf8610cb9565b604052919050565b63ffffffff81168114610cb657600080fd5b8035610d1d81610d00565b919050565b600080600060608486031215610d3757600080fd5b8335610d4281610ca1565b925060208481013567ffffffffffffffff80821115610d6057600080fd5b818701915087601f830112610d7457600080fd5b813581811115610d8657610d86610cb9565b610d98601f8201601f19168501610ccf565b91508082528884828501011115610dae57600080fd5b8084840185840137600084828401015250809450505050610dd160408501610d12565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015610e5c578385038a52825180518087529087019087870190845b81811015610e47578351805184528a01516001600160601b03168a84015292890192604090920191600101610e17565b50509a87019a95505091850191600101610df9565b509298975050505050505050565b602081526000610e7d6020830184610dda565b9392505050565b60008083601f840112610e9657600080fd5b50813567ffffffffffffffff811115610eae57600080fd5b6020830191508360208260051b8501011115610ec957600080fd5b9250929050565b60008060008060008060808789031215610ee957600080fd5b8635610ef481610ca1565b95506020870135610f0481610d00565b9450604087013567ffffffffffffffff80821115610f2157600080fd5b818901915089601f830112610f3557600080fd5b813581811115610f4457600080fd5b8a6020828501011115610f5657600080fd5b602083019650809550506060890135915080821115610f7457600080fd5b50610f8189828a01610e84565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b83811015610fc957815163ffffffff1687529582019590820190600101610fa7565b509495945050505050565b600060208083528351608082850152610ff060a0850182610f93565b905081850151601f198086840301604087015261100d8383610f93565b9250604087015191508086840301606087015261102a8383610f93565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b82811015611081578487830301845261106f828751610f93565b95880195938801939150600101611055565b509998505050505050505050565b6000806000606084860312156110a457600080fd5b83356110af81610ca1565b92506020840135915060408401356110c681610d00565b809150509250925092565b8281526040602082015260006110ea6040830184610dda565b949350505050565b60006020828403121561110457600080fd5b8151610e7d81610ca1565b634e487b7160e01b600052603260045260246000fd5b600067ffffffffffffffff82111561113f5761113f610cb9565b5060051b60200190565b6000602080838503121561115c57600080fd5b825167ffffffffffffffff81111561117357600080fd5b8301601f8101851361118457600080fd5b805161119761119282611125565b610ccf565b81815260059190911b820183019083810190878311156111b657600080fd5b928401925b828410156111d4578351825292840192908401906111bb565b979650505050505050565b6000602082840312156111f157600080fd5b81516001600160601b0381168114610e7d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561123257611232611208565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561126657600080fd5b8260051b8085606085013760009201606001918252509392505050565b6000602080838503121561129657600080fd5b825167ffffffffffffffff8111156112ad57600080fd5b8301601f810185136112be57600080fd5b80516112cc61119282611125565b81815260059190911b820183019083810190878311156112eb57600080fd5b928401925b828410156111d457835161130381610d00565b825292840192908401906112f0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061135b604083018486611312565b95945050505050565b60006020828403121561137657600080fd5b81516001600160c01b0381168114610e7d57600080fd5b60006020828403121561139f57600080fd5b8151610e7d81610d00565b600060ff821660ff8114156113c1576113c1611208565b60010192915050565b6040815260006113de604083018587611312565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b8181101561143b5784518352938301939183019160010161141f565b5090979650505050505050565b6000835160005b81811015611469576020818701810151858301520161144f565b81811115611478576000828501525b506001600160f81b031993909316919092019081526001019291505056fea2646970667358221220ec7613472dbd506d1cb83a89438aee1ebaf9bd41432975dd15607b61ffe1a2eb64736f6c634300080c0033","storage":{}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c043d55aae46cecfa459a39000413fd977359bf3661a19b41228c6cedf04ccf964736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x851356ae760d987e095750cceb3bc6014560891c","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44"}},"0xc6e7df5e7b4f2a278906862b61205850344d4e7d":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b2565b6103ba565b005b6101a66101b63660046117fc565b61049d565b6101a66101c9366004611819565b610550565b6101a66101dc36600461183b565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611854565b610749565b6101a6610279366004611880565b610969565b61024161028c3660046117fc565b610a37565b6101a6610a4b565b6102b86102a73660046118b9565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461183b565b610b17565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461183b565b610b62565b6102416103263660046117fc565b610b6d565b610333610b7b565b604051610208919061190c565b61024161034e3660046117fc565b610b9b565b6101a661036136600461193f565b610c30565b60645460655460408051928352602083019190915201610208565b61024161038f36600461183b565b610e7d565b6102416103a236600461183b565b610eb6565b6101a66103b536600461183b565b610ec1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611980565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b610446858561101d565b610450838361112a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119ce565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119eb565b61054d816111bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119ce565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119eb565b610601828261101d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a35565b6106925760405162461bcd60e51b815260040161041090611a57565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846112c0565b6032546001600160a01b0385811691161461089c5760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b60335460006108ad6103e883611ab5565b905060006103e86108bc611398565b6108c69190611ab5565b905060006108d48783611acd565b9050806108e18489611ae4565b6108eb9190611b03565b9550856109515760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b61095b8685611ab5565b603355505050505092915050565b600054610100900460ff16158080156109895750600054600160ff909116105b806109a35750303b1580156109a3575060005460ff166001145b6109bf5760405162461bcd60e51b815260040161041090611980565b6000805460ff1916600117905580156109e2576000805461ff0019166101001790555b6109ec838361112a565b8015610a32576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610a456102e783610b9b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190611a35565b610ad85760405162461bcd60e51b815260040161041090611a57565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610b2a9190611ab5565b905060006103e8610b39611398565b610b439190611ab5565b905081610b508583611ae4565b610b5a9190611b03565b949350505050565b6000610a4582610e7d565b6000610a456103a283610b9b565b60606040518060800160405280604d8152602001611b5b604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190611b25565b6001805460029081161415610c835760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610cfb5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b6032546001600160a01b03848116911614610d7e5760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b60335480831115610e0d5760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610e1b6103e883611ab5565b905060006103e8610e2a611398565b610e349190611ab5565b9050600082610e438784611ae4565b610e4d9190611b03565b9050610e598685611acd565b603355603254610e73906001600160a01b0316898361140a565b5050505050505050565b6000806103e8603354610e909190611ab5565b905060006103e8610e9f611398565b610ea99190611ab5565b905080610b508386611ae4565b6000610a4582610b17565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906119ce565b6001600160a01b0316336001600160a01b031614610f685760405162461bcd60e51b8152600401610410906119eb565b600154198119600154191614610fe65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561111f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166111955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b03841617905561060181600061145c565b6001600160a01b0381166112495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561132a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b606554611335611398565b11156106015760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190611b25565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a32908490611548565b6000546201000090046001600160a01b031615801561148357506001600160a01b03821615155b6115055760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826111bb565b600061159d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661161a9092919063ffffffff16565b805190915015610a3257808060200190518101906115bb9190611a35565b610a325760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606116298484600085611633565b90505b9392505050565b6060824710156116945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116eb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516117079190611b3e565b60006040518083038185875af1925050503d8060008114611744576040519150601f19603f3d011682016040523d82523d6000602084013e611749565b606091505b5091509150611759828286611764565b979650505050505050565b6060831561177357508161162c565b8251156117835782518084602001fd5b8160405162461bcd60e51b8152600401610410919061190c565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117c857600080fd5b843593506020850135925060408501356117e18161179d565b915060608501356117f18161179d565b939692955090935050565b60006020828403121561180e57600080fd5b813561162c8161179d565b6000806040838503121561182c57600080fd5b50508035926020909101359150565b60006020828403121561184d57600080fd5b5035919050565b6000806040838503121561186757600080fd5b82356118728161179d565b946020939093013593505050565b6000806040838503121561189357600080fd5b823561189e8161179d565b915060208301356118ae8161179d565b809150509250929050565b6000602082840312156118cb57600080fd5b813560ff8116811461162c57600080fd5b60005b838110156118f75781810151838201526020016118df565b83811115611906576000848401525b50505050565b602081526000825180602084015261192b8160408501602087016118dc565b601f01601f19169190910160400192915050565b60008060006060848603121561195457600080fd5b833561195f8161179d565b9250602084013561196f8161179d565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e057600080fd5b815161162c8161179d565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4757600080fd5b8151801515811461162c57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ac857611ac8611a9f565b500190565b600082821015611adf57611adf611a9f565b500390565b6000816000190483118215151615611afe57611afe611a9f565b500290565b600082611b2057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3757600080fd5b5051919050565b60008251611b508184602087016118dc565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a264697066735822122034593a0699459364f9a894977ab2a32440eec074a8626722acd4cd4064c0abf864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x9d":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x610178da211fef7d417bc0e6fed39f05609ad788","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bceca38d0e447b38e612e8ea5bb02b1e1fcac6609b19aa0fd3fd43aa4b97bf1b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe6e340d132b5f46d1e472debcd681b2abc16e57e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c043d55aae46cecfa459a39000413fd977359bf3661a19b41228c6cedf04ccf964736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x84ea74d481ee0a5332c457a4d796187f6ba67feb","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220f71399fafd06d0e383b21957bcac3bf3986a6a0701bc4c5dc7ee118215f3652364736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":42,"balance":"0x21e1785d16cf71d07f0","code":"0x","storage":{}}}} \ No newline at end of file diff --git a/contracts/bindings/BLSApkRegistry/binding.go b/contracts/bindings/BLSApkRegistry/binding.go new file mode 100644 index 00000000..4f68adf9 --- /dev/null +++ b/contracts/bindings/BLSApkRegistry/binding.go @@ -0,0 +1,1435 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractBLSApkRegistry + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// IBLSApkRegistryApkUpdate is an auto generated low-level Go binding around an user-defined struct. +type IBLSApkRegistryApkUpdate struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +} + +// IBLSApkRegistryPubkeyRegistrationParams is an auto generated low-level Go binding around an user-defined struct. +type IBLSApkRegistryPubkeyRegistrationParams struct { + PubkeyRegistrationSignature BN254G1Point + PubkeyG1 BN254G1Point + PubkeyG2 BN254G2Point +} + +// ContractBLSApkRegistryMetaData contains all meta data concerning the ContractBLSApkRegistry contract. +var ContractBLSApkRegistryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"apkHistory\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentApk\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApk\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkHashAtBlockNumberAndIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkHistoryLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.ApkUpdate\",\"components\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromPubkeyHash\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorId\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredPubkey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorToPubkey\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorToPubkeyHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyHashToOperator\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerBLSPublicKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"pubkeyRegistrationMessageHash\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewPubkeyRegistration\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b506040516200213738038062002137833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611fb7620001806000396000818161030f01528181610466015281816105bf015281816109a501526110420152611fb76000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611905565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611905565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611938565b61045b565b005b6101ca6101b5366004611938565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c3565b6105b4565b61021b610200366004611a69565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611938565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a82565b6102a261029d366004611a99565b610652565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac3565b6106e5565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61034461033f366004611a99565b610880565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611905565b6108cb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611938565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0b565b610998565b6103f26103ed366004611b68565b610dec565b6040516101529190611be0565b61018461040d366004611905565b60016020526000908152604090205481565b61021b61042d366004611a69565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c3565b611037565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ac5760405162461bcd60e51b81526004016104a390611c2a565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fc5760405162461bcd60e51b81526004016104a390611c2a565b6000610607836108cb565b50905061061482826110d0565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f50052468383604051610645929190611c9e565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff86168252600490529190912080548390811061068f5761068f611d03565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061070c5761070c611d03565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107d35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806107f95750806040015163ffffffff168463ffffffff16105b6108775760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b6004602052816000526040600020818154811061089c57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b03821660008181526003602090815260408083208151808301835281548152600191820154818501529484529091528120549091908061098e5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109e25760405162461bcd60e51b81526004016104a390611c2a565b6000610a106109f936869003860160408701611d19565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610a98576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f6283398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b225760405162461bcd60e51b81526020600482015260476024820152600080516020611f6283398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610ba65760405162461bcd60e51b81526020600482015260426024820152600080516020611f6283398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610bff918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d4b565b6040516020818303038152906040528051906020012060001c610c229190611d96565b9050610cbc610c5b610c4683610c40368a90038a0160408b01611d19565b9061131b565b610c5536899003890189611d19565b906113b2565b610c63611446565b610ca5610c9685610c40604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c55368a90038a018a611d19565b610cb7368a90038a0160808b01611e08565b611506565b610d575760405162461bcd60e51b815260206004820152606c6024820152600080516020611f6283398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610ddb9160808a0190611e65565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e0957610e09611953565b604051908082528060200260200182016040528015610e32578160200160208202803683370190505b50905060005b8481101561102e576000868683818110610e5457610e54611d03565b919091013560f81c600081815260046020526040902054909250905063ffffffff81161580610ebd575060ff821660009081526004602052604081208054909190610ea157610ea1611d03565b600091825260209091200154600160c01b900463ffffffff1686105b15610f4a5760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b60005b8163ffffffff168163ffffffff1610156110185760ff8316600090815260046020526040902087906001610f818486611eaf565b610f8b9190611eaf565b63ffffffff1681548110610fa157610fa1611d03565b600091825260209091200154600160c01b900463ffffffff1611611006576001610fcb8284611eaf565b610fd59190611eaf565b858581518110610fe757610fe7611d03565b602002602001019063ffffffff16908163ffffffff1681525050611018565b8061101081611ed4565b915050610f4d565b505050808061102690611ef8565b915050610e38565b50949350505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461107f5760405162461bcd60e51b81526004016104a390611c2a565b600061108a836108cb565b50905061109f8261109a83611773565b6110d0565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba8383604051610645929190611c9e565b604080518082019091526000808252602082015260005b835181101561131557600084828151811061110457611104611d03565b0160209081015160f81c60008181526004909252604090912054909150806111945760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c890866113b2565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112119085611f13565b8154811061122157611221611d03565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112625780546001600160c01b031916604083901c1781556112fe565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130d90611ef8565b9150506110e7565b50505050565b6040805180820190915260008082526020820152611337611832565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561136a5761136c565bfe5b50806113aa5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113ce611850565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561136a5750806113aa5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144e61186e565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611535611893565b60005b60028110156116fa57600061154e826006611f2a565b905084826002811061156257611562611d03565b60200201515183611574836000611f49565b600c811061158457611584611d03565b602002015284826002811061159b5761159b611d03565b602002015160200151838260016115b29190611f49565b600c81106115c2576115c2611d03565b60200201528382600281106115d9576115d9611d03565b60200201515151836115ec836002611f49565b600c81106115fc576115fc611d03565b602002015283826002811061161357611613611d03565b602002015151600160200201518361162c836003611f49565b600c811061163c5761163c611d03565b602002015283826002811061165357611653611d03565b60200201516020015160006002811061166e5761166e611d03565b60200201518361167f836004611f49565b600c811061168f5761168f611d03565b60200201528382600281106116a6576116a6611d03565b6020020151602001516001600281106116c1576116c1611d03565b6020020151836116d2836005611f49565b600c81106116e2576116e2611d03565b602002015250806116f281611ef8565b915050611538565b506117036118b2565b60006020826101808560086107d05a03fa905080801561136a5750806117635760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179857506020820151155b156117b6575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fb9190611d96565b611825907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611f13565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118816118d0565b815260200161188e6118d0565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182d57600080fd5b60006020828403121561191757600080fd5b611920826118ee565b9392505050565b803560ff8116811461182d57600080fd5b60006020828403121561194a57600080fd5b61192082611927565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198c5761198c611953565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119bb576119bb611953565b604052919050565b600080604083850312156119d657600080fd5b6119df836118ee565b915060208084013567ffffffffffffffff808211156119fd57600080fd5b818601915086601f830112611a1157600080fd5b813581811115611a2357611a23611953565b611a35601f8201601f19168501611992565b91508082528784828501011115611a4b57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7b57600080fd5b5035919050565b8151815260208083015190820152604081016106df565b60008060408385031215611aac57600080fd5b611ab583611927565b946020939093013593505050565b600080600060608486031215611ad857600080fd5b611ae184611927565b9250602084013563ffffffff81168114611afa57600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2257600080fd5b611b2b856118ee565b9350610100601f1982011215611b4057600080fd5b602085019250604061011f1982011215611b5957600080fd5b50610120840190509250925092565b600080600060408486031215611b7d57600080fd5b833567ffffffffffffffff80821115611b9557600080fd5b818601915086601f830112611ba957600080fd5b813581811115611bb857600080fd5b876020828501011115611bca57600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1e57835163ffffffff1683529284019291840191600101611bfc565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038316815260006020604081840152835180604085015260005b81811015611cda57858101830151858201606001528201611cbe565b81811115611cec576000606083870101525b50601f01601f191692909201606001949350505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d2b57600080fd5b611d33611969565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db357634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dc957600080fd5b611dd1611969565b806040840185811115611de357600080fd5b845b81811015611dfd578035845260209384019301611de5565b509095945050505050565b600060808284031215611e1a57600080fd5b6040516040810181811067ffffffffffffffff82111715611e3d57611e3d611953565b604052611e4a8484611db8565b8152611e598460408501611db8565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611ecc57611ecc611e99565b039392505050565b600063ffffffff80831681811415611eee57611eee611e99565b6001019392505050565b6000600019821415611f0c57611f0c611e99565b5060010190565b600082821015611f2557611f25611e99565b500390565b6000816000190483118215151615611f4457611f44611e99565b500290565b60008219821115611f5c57611f5c611e99565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a264697066735822122071c74ffc7d8293ba4fb9d589c2376e4573d94ac072817e7d5cf749062945ab3c64736f6c634300080c0033", +} + +// ContractBLSApkRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractBLSApkRegistryMetaData.ABI instead. +var ContractBLSApkRegistryABI = ContractBLSApkRegistryMetaData.ABI + +// ContractBLSApkRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractBLSApkRegistryMetaData.Bin instead. +var ContractBLSApkRegistryBin = ContractBLSApkRegistryMetaData.Bin + +// DeployContractBLSApkRegistry deploys a new Ethereum contract, binding an instance of ContractBLSApkRegistry to it. +func DeployContractBLSApkRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address) (common.Address, *types.Transaction, *ContractBLSApkRegistry, error) { + parsed, err := ContractBLSApkRegistryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBLSApkRegistryBin), backend, _registryCoordinator) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractBLSApkRegistry{ContractBLSApkRegistryCaller: ContractBLSApkRegistryCaller{contract: contract}, ContractBLSApkRegistryTransactor: ContractBLSApkRegistryTransactor{contract: contract}, ContractBLSApkRegistryFilterer: ContractBLSApkRegistryFilterer{contract: contract}}, nil +} + +// ContractBLSApkRegistryMethods is an auto generated interface around an Ethereum contract. +type ContractBLSApkRegistryMethods interface { + ContractBLSApkRegistryCalls + ContractBLSApkRegistryTransacts + ContractBLSApkRegistryFilters +} + +// ContractBLSApkRegistryCalls is an auto generated interface that defines the call methods available for an Ethereum contract. +type ContractBLSApkRegistryCalls interface { + ApkHistory(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 + }, error) + + CurrentApk(opts *bind.CallOpts, arg0 uint8) (struct { + X *big.Int + Y *big.Int + }, error) + + GetApk(opts *bind.CallOpts, quorumNumber uint8) (BN254G1Point, error) + + GetApkHashAtBlockNumberAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) + + GetApkHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (uint32, error) + + GetApkIndicesAtBlockNumber(opts *bind.CallOpts, quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) + + GetApkUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) + + GetOperatorFromPubkeyHash(opts *bind.CallOpts, pubkeyHash [32]byte) (common.Address, error) + + GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) + + GetRegisteredPubkey(opts *bind.CallOpts, operator common.Address) (BN254G1Point, [32]byte, error) + + OperatorToPubkey(opts *bind.CallOpts, arg0 common.Address) (struct { + X *big.Int + Y *big.Int + }, error) + + OperatorToPubkeyHash(opts *bind.CallOpts, arg0 common.Address) ([32]byte, error) + + PubkeyHashToOperator(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) + + RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) +} + +// ContractBLSApkRegistryTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. +type ContractBLSApkRegistryTransacts interface { + DeregisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) + + InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8) (*types.Transaction, error) + + RegisterBLSPublicKey(opts *bind.TransactOpts, operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) + + RegisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) +} + +// ContractBLSApkRegistryFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. +type ContractBLSApkRegistryFilters interface { + FilterInitialized(opts *bind.FilterOpts) (*ContractBLSApkRegistryInitializedIterator, error) + WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryInitialized) (event.Subscription, error) + ParseInitialized(log types.Log) (*ContractBLSApkRegistryInitialized, error) + + FilterNewPubkeyRegistration(opts *bind.FilterOpts, operator []common.Address) (*ContractBLSApkRegistryNewPubkeyRegistrationIterator, error) + WatchNewPubkeyRegistration(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryNewPubkeyRegistration, operator []common.Address) (event.Subscription, error) + ParseNewPubkeyRegistration(log types.Log) (*ContractBLSApkRegistryNewPubkeyRegistration, error) + + FilterOperatorAddedToQuorums(opts *bind.FilterOpts) (*ContractBLSApkRegistryOperatorAddedToQuorumsIterator, error) + WatchOperatorAddedToQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryOperatorAddedToQuorums) (event.Subscription, error) + ParseOperatorAddedToQuorums(log types.Log) (*ContractBLSApkRegistryOperatorAddedToQuorums, error) + + FilterOperatorRemovedFromQuorums(opts *bind.FilterOpts) (*ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator, error) + WatchOperatorRemovedFromQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryOperatorRemovedFromQuorums) (event.Subscription, error) + ParseOperatorRemovedFromQuorums(log types.Log) (*ContractBLSApkRegistryOperatorRemovedFromQuorums, error) +} + +// ContractBLSApkRegistry is an auto generated Go binding around an Ethereum contract. +type ContractBLSApkRegistry struct { + ContractBLSApkRegistryCaller // Read-only binding to the contract + ContractBLSApkRegistryTransactor // Write-only binding to the contract + ContractBLSApkRegistryFilterer // Log filterer for contract events +} + +// ContractBLSApkRegistry implements the ContractBLSApkRegistryMethods interface. +var _ ContractBLSApkRegistryMethods = (*ContractBLSApkRegistry)(nil) + +// ContractBLSApkRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractBLSApkRegistryCaller implements the ContractBLSApkRegistryCalls interface. +var _ ContractBLSApkRegistryCalls = (*ContractBLSApkRegistryCaller)(nil) + +// ContractBLSApkRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractBLSApkRegistryTransactor implements the ContractBLSApkRegistryTransacts interface. +var _ ContractBLSApkRegistryTransacts = (*ContractBLSApkRegistryTransactor)(nil) + +// ContractBLSApkRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractBLSApkRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractBLSApkRegistryFilterer implements the ContractBLSApkRegistryFilters interface. +var _ ContractBLSApkRegistryFilters = (*ContractBLSApkRegistryFilterer)(nil) + +// ContractBLSApkRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractBLSApkRegistrySession struct { + Contract *ContractBLSApkRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractBLSApkRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractBLSApkRegistryCallerSession struct { + Contract *ContractBLSApkRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractBLSApkRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractBLSApkRegistryTransactorSession struct { + Contract *ContractBLSApkRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractBLSApkRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractBLSApkRegistryRaw struct { + Contract *ContractBLSApkRegistry // Generic contract binding to access the raw methods on +} + +// ContractBLSApkRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryCallerRaw struct { + Contract *ContractBLSApkRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractBLSApkRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryTransactorRaw struct { + Contract *ContractBLSApkRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractBLSApkRegistry creates a new instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistry(address common.Address, backend bind.ContractBackend) (*ContractBLSApkRegistry, error) { + contract, err := bindContractBLSApkRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistry{ContractBLSApkRegistryCaller: ContractBLSApkRegistryCaller{contract: contract}, ContractBLSApkRegistryTransactor: ContractBLSApkRegistryTransactor{contract: contract}, ContractBLSApkRegistryFilterer: ContractBLSApkRegistryFilterer{contract: contract}}, nil +} + +// NewContractBLSApkRegistryCaller creates a new read-only instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistryCaller(address common.Address, caller bind.ContractCaller) (*ContractBLSApkRegistryCaller, error) { + contract, err := bindContractBLSApkRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryCaller{contract: contract}, nil +} + +// NewContractBLSApkRegistryTransactor creates a new write-only instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractBLSApkRegistryTransactor, error) { + contract, err := bindContractBLSApkRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryTransactor{contract: contract}, nil +} + +// NewContractBLSApkRegistryFilterer creates a new log filterer instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractBLSApkRegistryFilterer, error) { + contract, err := bindContractBLSApkRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryFilterer{contract: contract}, nil +} + +// bindContractBLSApkRegistry binds a generic wrapper to an already deployed contract. +func bindContractBLSApkRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractBLSApkRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractBLSApkRegistry.Contract.ContractBLSApkRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.ContractBLSApkRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.ContractBLSApkRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractBLSApkRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.contract.Transact(opts, method, params...) +} + +// ApkHistory is a free data retrieval call binding the contract method 0x7916cea6. +// +// Solidity: function apkHistory(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) ApkHistory(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +}, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "apkHistory", arg0, arg1) + + outstruct := new(struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.ApkHash = *abi.ConvertType(out[0], new([24]byte)).(*[24]byte) + outstruct.UpdateBlockNumber = *abi.ConvertType(out[1], new(uint32)).(*uint32) + outstruct.NextUpdateBlockNumber = *abi.ConvertType(out[2], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// ApkHistory is a free data retrieval call binding the contract method 0x7916cea6. +// +// Solidity: function apkHistory(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) ApkHistory(arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +}, error) { + return _ContractBLSApkRegistry.Contract.ApkHistory(&_ContractBLSApkRegistry.CallOpts, arg0, arg1) +} + +// ApkHistory is a free data retrieval call binding the contract method 0x7916cea6. +// +// Solidity: function apkHistory(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) ApkHistory(arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +}, error) { + return _ContractBLSApkRegistry.Contract.ApkHistory(&_ContractBLSApkRegistry.CallOpts, arg0, arg1) +} + +// CurrentApk is a free data retrieval call binding the contract method 0xa3db80e2. +// +// Solidity: function currentApk(uint8 ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) CurrentApk(opts *bind.CallOpts, arg0 uint8) (struct { + X *big.Int + Y *big.Int +}, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "currentApk", arg0) + + outstruct := new(struct { + X *big.Int + Y *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.X = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Y = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// CurrentApk is a free data retrieval call binding the contract method 0xa3db80e2. +// +// Solidity: function currentApk(uint8 ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) CurrentApk(arg0 uint8) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.CurrentApk(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// CurrentApk is a free data retrieval call binding the contract method 0xa3db80e2. +// +// Solidity: function currentApk(uint8 ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) CurrentApk(arg0 uint8) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.CurrentApk(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// GetApk is a free data retrieval call binding the contract method 0x5f61a884. +// +// Solidity: function getApk(uint8 quorumNumber) view returns((uint256,uint256)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApk(opts *bind.CallOpts, quorumNumber uint8) (BN254G1Point, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApk", quorumNumber) + + if err != nil { + return *new(BN254G1Point), err + } + + out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) + + return out0, err + +} + +// GetApk is a free data retrieval call binding the contract method 0x5f61a884. +// +// Solidity: function getApk(uint8 quorumNumber) view returns((uint256,uint256)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApk(quorumNumber uint8) (BN254G1Point, error) { + return _ContractBLSApkRegistry.Contract.GetApk(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApk is a free data retrieval call binding the contract method 0x5f61a884. +// +// Solidity: function getApk(uint8 quorumNumber) view returns((uint256,uint256)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApk(quorumNumber uint8) (BN254G1Point, error) { + return _ContractBLSApkRegistry.Contract.GetApk(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApkHashAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0x68bccaac. +// +// Solidity: function getApkHashAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkHashAtBlockNumberAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkHashAtBlockNumberAndIndex", quorumNumber, blockNumber, index) + + if err != nil { + return *new([24]byte), err + } + + out0 := *abi.ConvertType(out[0], new([24]byte)).(*[24]byte) + + return out0, err + +} + +// GetApkHashAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0x68bccaac. +// +// Solidity: function getApkHashAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkHashAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { + return _ContractBLSApkRegistry.Contract.GetApkHashAtBlockNumberAndIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, blockNumber, index) +} + +// GetApkHashAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0x68bccaac. +// +// Solidity: function getApkHashAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkHashAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { + return _ContractBLSApkRegistry.Contract.GetApkHashAtBlockNumberAndIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, blockNumber, index) +} + +// GetApkHistoryLength is a free data retrieval call binding the contract method 0x377ed99d. +// +// Solidity: function getApkHistoryLength(uint8 quorumNumber) view returns(uint32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (uint32, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkHistoryLength", quorumNumber) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetApkHistoryLength is a free data retrieval call binding the contract method 0x377ed99d. +// +// Solidity: function getApkHistoryLength(uint8 quorumNumber) view returns(uint32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkHistoryLength(quorumNumber uint8) (uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkHistoryLength(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApkHistoryLength is a free data retrieval call binding the contract method 0x377ed99d. +// +// Solidity: function getApkHistoryLength(uint8 quorumNumber) view returns(uint32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkHistoryLength(quorumNumber uint8) (uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkHistoryLength(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApkIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xd5254a8c. +// +// Solidity: function getApkIndicesAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkIndicesAtBlockNumber(opts *bind.CallOpts, quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkIndicesAtBlockNumber", quorumNumbers, blockNumber) + + if err != nil { + return *new([]uint32), err + } + + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + + return out0, err + +} + +// GetApkIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xd5254a8c. +// +// Solidity: function getApkIndicesAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkIndicesAtBlockNumber(quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkIndicesAtBlockNumber(&_ContractBLSApkRegistry.CallOpts, quorumNumbers, blockNumber) +} + +// GetApkIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xd5254a8c. +// +// Solidity: function getApkIndicesAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkIndicesAtBlockNumber(quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkIndicesAtBlockNumber(&_ContractBLSApkRegistry.CallOpts, quorumNumbers, blockNumber) +} + +// GetApkUpdateAtIndex is a free data retrieval call binding the contract method 0x605747d5. +// +// Solidity: function getApkUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkUpdateAtIndex", quorumNumber, index) + + if err != nil { + return *new(IBLSApkRegistryApkUpdate), err + } + + out0 := *abi.ConvertType(out[0], new(IBLSApkRegistryApkUpdate)).(*IBLSApkRegistryApkUpdate) + + return out0, err + +} + +// GetApkUpdateAtIndex is a free data retrieval call binding the contract method 0x605747d5. +// +// Solidity: function getApkUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkUpdateAtIndex(quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) { + return _ContractBLSApkRegistry.Contract.GetApkUpdateAtIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, index) +} + +// GetApkUpdateAtIndex is a free data retrieval call binding the contract method 0x605747d5. +// +// Solidity: function getApkUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkUpdateAtIndex(quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) { + return _ContractBLSApkRegistry.Contract.GetApkUpdateAtIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, index) +} + +// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. +// +// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetOperatorFromPubkeyHash(opts *bind.CallOpts, pubkeyHash [32]byte) (common.Address, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getOperatorFromPubkeyHash", pubkeyHash) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. +// +// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetOperatorFromPubkeyHash(pubkeyHash [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorFromPubkeyHash(&_ContractBLSApkRegistry.CallOpts, pubkeyHash) +} + +// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. +// +// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetOperatorFromPubkeyHash(pubkeyHash [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorFromPubkeyHash(&_ContractBLSApkRegistry.CallOpts, pubkeyHash) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getOperatorId", operator) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorId(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorId(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// GetRegisteredPubkey is a free data retrieval call binding the contract method 0x7ff81a87. +// +// Solidity: function getRegisteredPubkey(address operator) view returns((uint256,uint256), bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetRegisteredPubkey(opts *bind.CallOpts, operator common.Address) (BN254G1Point, [32]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getRegisteredPubkey", operator) + + if err != nil { + return *new(BN254G1Point), *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) + out1 := *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + + return out0, out1, err + +} + +// GetRegisteredPubkey is a free data retrieval call binding the contract method 0x7ff81a87. +// +// Solidity: function getRegisteredPubkey(address operator) view returns((uint256,uint256), bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetRegisteredPubkey(operator common.Address) (BN254G1Point, [32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetRegisteredPubkey(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// GetRegisteredPubkey is a free data retrieval call binding the contract method 0x7ff81a87. +// +// Solidity: function getRegisteredPubkey(address operator) view returns((uint256,uint256), bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetRegisteredPubkey(operator common.Address) (BN254G1Point, [32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetRegisteredPubkey(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// OperatorToPubkey is a free data retrieval call binding the contract method 0x00a1f4cb. +// +// Solidity: function operatorToPubkey(address ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) OperatorToPubkey(opts *bind.CallOpts, arg0 common.Address) (struct { + X *big.Int + Y *big.Int +}, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "operatorToPubkey", arg0) + + outstruct := new(struct { + X *big.Int + Y *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.X = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Y = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// OperatorToPubkey is a free data retrieval call binding the contract method 0x00a1f4cb. +// +// Solidity: function operatorToPubkey(address ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) OperatorToPubkey(arg0 common.Address) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkey(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// OperatorToPubkey is a free data retrieval call binding the contract method 0x00a1f4cb. +// +// Solidity: function operatorToPubkey(address ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) OperatorToPubkey(arg0 common.Address) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkey(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. +// +// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) OperatorToPubkeyHash(opts *bind.CallOpts, arg0 common.Address) ([32]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "operatorToPubkeyHash", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. +// +// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) OperatorToPubkeyHash(arg0 common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkeyHash(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. +// +// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) OperatorToPubkeyHash(arg0 common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkeyHash(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. +// +// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) PubkeyHashToOperator(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "pubkeyHashToOperator", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. +// +// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) PubkeyHashToOperator(arg0 [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.PubkeyHashToOperator(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. +// +// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) PubkeyHashToOperator(arg0 [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.PubkeyHashToOperator(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. +// +// Solidity: function registryCoordinator() view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "registryCoordinator") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. +// +// Solidity: function registryCoordinator() view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) RegistryCoordinator() (common.Address, error) { + return _ContractBLSApkRegistry.Contract.RegistryCoordinator(&_ContractBLSApkRegistry.CallOpts) +} + +// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. +// +// Solidity: function registryCoordinator() view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) RegistryCoordinator() (common.Address, error) { + return _ContractBLSApkRegistry.Contract.RegistryCoordinator(&_ContractBLSApkRegistry.CallOpts) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xf4e24fe5. +// +// Solidity: function deregisterOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) DeregisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "deregisterOperator", operator, quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xf4e24fe5. +// +// Solidity: function deregisterOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) DeregisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.DeregisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xf4e24fe5. +// +// Solidity: function deregisterOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) DeregisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.DeregisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "initializeQuorum", quorumNumber) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) InitializeQuorum(quorumNumber uint8) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.InitializeQuorum(&_ContractBLSApkRegistry.TransactOpts, quorumNumber) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) InitializeQuorum(quorumNumber uint8) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.InitializeQuorum(&_ContractBLSApkRegistry.TransactOpts, quorumNumber) +} + +// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0xbf79ce58. +// +// Solidity: function registerBLSPublicKey(address operator, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint256,uint256) pubkeyRegistrationMessageHash) returns(bytes32 operatorId) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) RegisterBLSPublicKey(opts *bind.TransactOpts, operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "registerBLSPublicKey", operator, params, pubkeyRegistrationMessageHash) +} + +// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0xbf79ce58. +// +// Solidity: function registerBLSPublicKey(address operator, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint256,uint256) pubkeyRegistrationMessageHash) returns(bytes32 operatorId) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) RegisterBLSPublicKey(operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterBLSPublicKey(&_ContractBLSApkRegistry.TransactOpts, operator, params, pubkeyRegistrationMessageHash) +} + +// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0xbf79ce58. +// +// Solidity: function registerBLSPublicKey(address operator, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint256,uint256) pubkeyRegistrationMessageHash) returns(bytes32 operatorId) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) RegisterBLSPublicKey(operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterBLSPublicKey(&_ContractBLSApkRegistry.TransactOpts, operator, params, pubkeyRegistrationMessageHash) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0x3fb27952. +// +// Solidity: function registerOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) RegisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "registerOperator", operator, quorumNumbers) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0x3fb27952. +// +// Solidity: function registerOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) RegisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0x3fb27952. +// +// Solidity: function registerOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) RegisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// ContractBLSApkRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryInitializedIterator struct { + Event *ContractBLSApkRegistryInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryInitialized represents a Initialized event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractBLSApkRegistryInitializedIterator, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryInitializedIterator{contract: _ContractBLSApkRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryInitialized) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseInitialized(log types.Log) (*ContractBLSApkRegistryInitialized, error) { + event := new(ContractBLSApkRegistryInitialized) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractBLSApkRegistryNewPubkeyRegistrationIterator is returned from FilterNewPubkeyRegistration and is used to iterate over the raw logs and unpacked data for NewPubkeyRegistration events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryNewPubkeyRegistrationIterator struct { + Event *ContractBLSApkRegistryNewPubkeyRegistration // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryNewPubkeyRegistrationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryNewPubkeyRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryNewPubkeyRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryNewPubkeyRegistration represents a NewPubkeyRegistration event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryNewPubkeyRegistration struct { + Operator common.Address + PubkeyG1 BN254G1Point + PubkeyG2 BN254G2Point + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewPubkeyRegistration is a free log retrieval operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. +// +// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterNewPubkeyRegistration(opts *bind.FilterOpts, operator []common.Address) (*ContractBLSApkRegistryNewPubkeyRegistrationIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "NewPubkeyRegistration", operatorRule) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryNewPubkeyRegistrationIterator{contract: _ContractBLSApkRegistry.contract, event: "NewPubkeyRegistration", logs: logs, sub: sub}, nil +} + +// WatchNewPubkeyRegistration is a free log subscription operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. +// +// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchNewPubkeyRegistration(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryNewPubkeyRegistration, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "NewPubkeyRegistration", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "NewPubkeyRegistration", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNewPubkeyRegistration is a log parse operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. +// +// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseNewPubkeyRegistration(log types.Log) (*ContractBLSApkRegistryNewPubkeyRegistration, error) { + event := new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "NewPubkeyRegistration", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractBLSApkRegistryOperatorAddedToQuorumsIterator is returned from FilterOperatorAddedToQuorums and is used to iterate over the raw logs and unpacked data for OperatorAddedToQuorums events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorAddedToQuorumsIterator struct { + Event *ContractBLSApkRegistryOperatorAddedToQuorums // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryOperatorAddedToQuorumsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryOperatorAddedToQuorumsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryOperatorAddedToQuorumsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryOperatorAddedToQuorums represents a OperatorAddedToQuorums event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorAddedToQuorums struct { + Operator common.Address + QuorumNumbers []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAddedToQuorums is a free log retrieval operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. +// +// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterOperatorAddedToQuorums(opts *bind.FilterOpts) (*ContractBLSApkRegistryOperatorAddedToQuorumsIterator, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "OperatorAddedToQuorums") + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryOperatorAddedToQuorumsIterator{contract: _ContractBLSApkRegistry.contract, event: "OperatorAddedToQuorums", logs: logs, sub: sub}, nil +} + +// WatchOperatorAddedToQuorums is a free log subscription operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. +// +// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchOperatorAddedToQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryOperatorAddedToQuorums) (event.Subscription, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "OperatorAddedToQuorums") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorAddedToQuorums", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorAddedToQuorums is a log parse operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. +// +// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseOperatorAddedToQuorums(log types.Log) (*ContractBLSApkRegistryOperatorAddedToQuorums, error) { + event := new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorAddedToQuorums", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator is returned from FilterOperatorRemovedFromQuorums and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromQuorums events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator struct { + Event *ContractBLSApkRegistryOperatorRemovedFromQuorums // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryOperatorRemovedFromQuorums represents a OperatorRemovedFromQuorums event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorRemovedFromQuorums struct { + Operator common.Address + QuorumNumbers []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRemovedFromQuorums is a free log retrieval operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. +// +// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterOperatorRemovedFromQuorums(opts *bind.FilterOpts) (*ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "OperatorRemovedFromQuorums") + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator{contract: _ContractBLSApkRegistry.contract, event: "OperatorRemovedFromQuorums", logs: logs, sub: sub}, nil +} + +// WatchOperatorRemovedFromQuorums is a free log subscription operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. +// +// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchOperatorRemovedFromQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryOperatorRemovedFromQuorums) (event.Subscription, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "OperatorRemovedFromQuorums") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorRemovedFromQuorums", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRemovedFromQuorums is a log parse operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. +// +// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseOperatorRemovedFromQuorums(log types.Log) (*ContractBLSApkRegistryOperatorRemovedFromQuorums, error) { + event := new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorRemovedFromQuorums", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/BLSOperatorStateRetriever/binding.go b/contracts/bindings/BLSOperatorStateRetriever/binding.go deleted file mode 100644 index 0eb5ac3f..00000000 --- a/contracts/bindings/BLSOperatorStateRetriever/binding.go +++ /dev/null @@ -1,347 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contractBLSOperatorStateRetriever - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// BLSOperatorStateRetrieverCheckSignaturesIndices is an auto generated low-level Go binding around an user-defined struct. -type BLSOperatorStateRetrieverCheckSignaturesIndices struct { - NonSignerQuorumBitmapIndices []uint32 - QuorumApkIndices []uint32 - TotalStakeIndices []uint32 - NonSignerStakeIndices [][]uint32 -} - -// BLSOperatorStateRetrieverOperator is an auto generated low-level Go binding around an user-defined struct. -type BLSOperatorStateRetrieverOperator struct { - OperatorId [32]byte - Stake *big.Int -} - -// ContractBLSOperatorStateRetrieverMetaData contains all meta data concerning the ContractBLSOperatorStateRetriever contract. -var ContractBLSOperatorStateRetrieverMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"nonSignerOperatorIds\",\"type\":\"bytes32[]\"}],\"name\":\"getCheckSignaturesIndices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"structBLSOperatorStateRetriever.CheckSignaturesIndices\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getOperatorState\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structBLSOperatorStateRetriever.Operator[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getOperatorState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structBLSOperatorStateRetriever.Operator[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506114cc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610d22565b6100b0565b6040516100669190610e6a565b60405180910390f35b61008261007d366004610ed0565b61042b565b6040516100669190610fd4565b6100a261009d36600461108f565b610ab2565b6040516100669291906110d1565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011691906110f2565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c91906110f2565b90506000855167ffffffffffffffff81111561019a5761019a610cb9565b6040519080825280602002602001820160405280156101cd57816020015b60608152602001906001900390816101b85790505b50905060005b86518110156104205760008782815181106101f0576101f061110f565b016020015160405163889ae3e560e01b815260f89190911c6004820181905263ffffffff8916602483015291506000906001600160a01b0386169063889ae3e590604401600060405180830381865afa158015610251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102799190810190611149565b9050805167ffffffffffffffff81111561029557610295610cb9565b6040519080825280602002602001820160405280156102da57816020015b60408051808201909152600080825260208201528152602001906001900390816102b35790505b508484815181106102ed576102ed61110f565b602002602001018190525060005b815181101561040a5760008282815181106103185761031861110f565b6020908102919091018101516040805180820182528281529051631b32722560e01b81526004810183905260ff8816602482015263ffffffff8e166044820152919350918201906001600160a01b038b1690631b32722590606401602060405180830381865afa158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b491906111df565b6001600160601b03168152508686815181106103d2576103d261110f565b602002602001015183815181106103eb576103eb61110f565b60200260200101819052505080806104029061121e565b9150506102fb565b50505080806104189061121e565b9150506101d3565b509695505050505050565b6104566040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ba91906110f2565b90506104e76040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516385020d4960e01b81526001600160a01b038a16906385020d4990610517908b9089908990600401611239565b600060405180830381865afa158015610534573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055c9190810190611283565b815260405163e192e9ad60e01b81526001600160a01b0383169063e192e9ad9061058e908b908b908b9060040161133b565b600060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d39190810190611283565b60408201528567ffffffffffffffff8111156105f1576105f1610cb9565b60405190808252806020026020018201604052801561062457816020015b606081526020019060019003908161060f5790505b50606082015260005b60ff81168711156109c35760008567ffffffffffffffff81111561065357610653610cb9565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b5083606001518360ff16815181106106965761069661110f565b602002602001018190525060005b868110156108c25760008c6001600160a01b0316633064620d8a8a858181106106cf576106cf61110f565b905060200201358e886000015186815181106106ed576106ed61110f565b60200260200101516040518463ffffffff1660e01b815260040161072a9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611364565b90508a8a8560ff168181106107825761078261110f565b6001600160c01b03841692013560f81c9190911c6001908116141590506108af57856001600160a01b031663480858668a8a858181106107c4576107c461110f565b905060200201358d8d8860ff168181106107e0576107e061110f565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a919061138d565b85606001518560ff16815181106108735761087361110f565b6020026020010151848151811061088c5761088c61110f565b63ffffffff90921660209283029190910190910152826108ab8161121e565b9350505b50806108ba8161121e565b9150506106a4565b5060008167ffffffffffffffff8111156108de576108de610cb9565b604051908082528060200260200182016040528015610907578160200160208202803683370190505b50905060005b828110156109885784606001518460ff168151811061092e5761092e61110f565b602002602001015181815181106109475761094761110f565b60200260200101518282815181106109615761096161110f565b63ffffffff90921660209283029190910190910152806109808161121e565b91505061090d565b508084606001518460ff16815181106109a3576109a361110f565b6020026020010181905250505080806109bb906113aa565b91505061062d565b506000896001600160a01b0316633561deb16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906110f2565b60405163eda1076360e01b81529091506001600160a01b0382169063eda1076390610a5b908b908b908e906004016113ca565b600060405180830381865afa158015610a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa09190810190611283565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610aed57610aed61110f565b60209081029190910101526040516385020d4960e01b81526000906001600160a01b038816906385020d4990610b2990889086906004016113f4565b600060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6e9190810190611283565b600081518110610b8057610b8061110f565b6020908102919091010151604051633064620d60e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b03891690633064620d90606401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190611364565b6001600160c01b031690506000610c2682610c44565b905081610c348a838a6100b0565b9550955050505050935093915050565b60606000805b610100811015610c9a576001811b915083821615610c8a57828160f81b604051602001610c78929190611448565b60405160208183030381529060405292505b610c938161121e565b9050610c4a565b5050919050565b6001600160a01b0381168114610cb657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cf857610cf8610cb9565b604052919050565b63ffffffff81168114610cb657600080fd5b8035610d1d81610d00565b919050565b600080600060608486031215610d3757600080fd5b8335610d4281610ca1565b925060208481013567ffffffffffffffff80821115610d6057600080fd5b818701915087601f830112610d7457600080fd5b813581811115610d8657610d86610cb9565b610d98601f8201601f19168501610ccf565b91508082528884828501011115610dae57600080fd5b8084840185840137600084828401015250809450505050610dd160408501610d12565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015610e5c578385038a52825180518087529087019087870190845b81811015610e47578351805184528a01516001600160601b03168a84015292890192604090920191600101610e17565b50509a87019a95505091850191600101610df9565b509298975050505050505050565b602081526000610e7d6020830184610dda565b9392505050565b60008083601f840112610e9657600080fd5b50813567ffffffffffffffff811115610eae57600080fd5b6020830191508360208260051b8501011115610ec957600080fd5b9250929050565b60008060008060008060808789031215610ee957600080fd5b8635610ef481610ca1565b95506020870135610f0481610d00565b9450604087013567ffffffffffffffff80821115610f2157600080fd5b818901915089601f830112610f3557600080fd5b813581811115610f4457600080fd5b8a6020828501011115610f5657600080fd5b602083019650809550506060890135915080821115610f7457600080fd5b50610f8189828a01610e84565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b83811015610fc957815163ffffffff1687529582019590820190600101610fa7565b509495945050505050565b600060208083528351608082850152610ff060a0850182610f93565b905081850151601f198086840301604087015261100d8383610f93565b9250604087015191508086840301606087015261102a8383610f93565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b82811015611081578487830301845261106f828751610f93565b95880195938801939150600101611055565b509998505050505050505050565b6000806000606084860312156110a457600080fd5b83356110af81610ca1565b92506020840135915060408401356110c681610d00565b809150509250925092565b8281526040602082015260006110ea6040830184610dda565b949350505050565b60006020828403121561110457600080fd5b8151610e7d81610ca1565b634e487b7160e01b600052603260045260246000fd5b600067ffffffffffffffff82111561113f5761113f610cb9565b5060051b60200190565b6000602080838503121561115c57600080fd5b825167ffffffffffffffff81111561117357600080fd5b8301601f8101851361118457600080fd5b805161119761119282611125565b610ccf565b81815260059190911b820183019083810190878311156111b657600080fd5b928401925b828410156111d4578351825292840192908401906111bb565b979650505050505050565b6000602082840312156111f157600080fd5b81516001600160601b0381168114610e7d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561123257611232611208565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561126657600080fd5b8260051b8085606085013760009201606001918252509392505050565b6000602080838503121561129657600080fd5b825167ffffffffffffffff8111156112ad57600080fd5b8301601f810185136112be57600080fd5b80516112cc61119282611125565b81815260059190911b820183019083810190878311156112eb57600080fd5b928401925b828410156111d457835161130381610d00565b825292840192908401906112f0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061135b604083018486611312565b95945050505050565b60006020828403121561137657600080fd5b81516001600160c01b0381168114610e7d57600080fd5b60006020828403121561139f57600080fd5b8151610e7d81610d00565b600060ff821660ff8114156113c1576113c1611208565b60010192915050565b6040815260006113de604083018587611312565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b8181101561143b5784518352938301939183019160010161141f565b5090979650505050505050565b6000835160005b81811015611469576020818701810151858301520161144f565b81811115611478576000828501525b506001600160f81b031993909316919092019081526001019291505056fea26469706673582212200a6176a52797422df6f5125a4dcb11c859430335fb2181eddffe5254741193a564736f6c634300080c0033", -} - -// ContractBLSOperatorStateRetrieverABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractBLSOperatorStateRetrieverMetaData.ABI instead. -var ContractBLSOperatorStateRetrieverABI = ContractBLSOperatorStateRetrieverMetaData.ABI - -// ContractBLSOperatorStateRetrieverBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ContractBLSOperatorStateRetrieverMetaData.Bin instead. -var ContractBLSOperatorStateRetrieverBin = ContractBLSOperatorStateRetrieverMetaData.Bin - -// DeployContractBLSOperatorStateRetriever deploys a new Ethereum contract, binding an instance of ContractBLSOperatorStateRetriever to it. -func DeployContractBLSOperatorStateRetriever(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ContractBLSOperatorStateRetriever, error) { - parsed, err := ContractBLSOperatorStateRetrieverMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBLSOperatorStateRetrieverBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ContractBLSOperatorStateRetriever{ContractBLSOperatorStateRetrieverCaller: ContractBLSOperatorStateRetrieverCaller{contract: contract}, ContractBLSOperatorStateRetrieverTransactor: ContractBLSOperatorStateRetrieverTransactor{contract: contract}, ContractBLSOperatorStateRetrieverFilterer: ContractBLSOperatorStateRetrieverFilterer{contract: contract}}, nil -} - -// ContractBLSOperatorStateRetrieverMethods is an auto generated interface around an Ethereum contract. -type ContractBLSOperatorStateRetrieverMethods interface { - ContractBLSOperatorStateRetrieverCalls - ContractBLSOperatorStateRetrieverTransacts - ContractBLSOperatorStateRetrieverFilters -} - -// ContractBLSOperatorStateRetrieverCalls is an auto generated interface that defines the call methods available for an Ethereum contract. -type ContractBLSOperatorStateRetrieverCalls interface { - GetCheckSignaturesIndices(opts *bind.CallOpts, registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (BLSOperatorStateRetrieverCheckSignaturesIndices, error) - - GetOperatorState(opts *bind.CallOpts, registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]BLSOperatorStateRetrieverOperator, error) - - GetOperatorState0(opts *bind.CallOpts, registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]BLSOperatorStateRetrieverOperator, error) -} - -// ContractBLSOperatorStateRetrieverTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. -type ContractBLSOperatorStateRetrieverTransacts interface { -} - -// ContractBLSOperatorStateRetrieverFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. -type ContractBLSOperatorStateRetrieverFilters interface { -} - -// ContractBLSOperatorStateRetriever is an auto generated Go binding around an Ethereum contract. -type ContractBLSOperatorStateRetriever struct { - ContractBLSOperatorStateRetrieverCaller // Read-only binding to the contract - ContractBLSOperatorStateRetrieverTransactor // Write-only binding to the contract - ContractBLSOperatorStateRetrieverFilterer // Log filterer for contract events -} - -// ContractBLSOperatorStateRetriever implements the ContractBLSOperatorStateRetrieverMethods interface. -var _ ContractBLSOperatorStateRetrieverMethods = (*ContractBLSOperatorStateRetriever)(nil) - -// ContractBLSOperatorStateRetrieverCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractBLSOperatorStateRetrieverCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSOperatorStateRetrieverCaller implements the ContractBLSOperatorStateRetrieverCalls interface. -var _ ContractBLSOperatorStateRetrieverCalls = (*ContractBLSOperatorStateRetrieverCaller)(nil) - -// ContractBLSOperatorStateRetrieverTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractBLSOperatorStateRetrieverTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSOperatorStateRetrieverTransactor implements the ContractBLSOperatorStateRetrieverTransacts interface. -var _ ContractBLSOperatorStateRetrieverTransacts = (*ContractBLSOperatorStateRetrieverTransactor)(nil) - -// ContractBLSOperatorStateRetrieverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractBLSOperatorStateRetrieverFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSOperatorStateRetrieverFilterer implements the ContractBLSOperatorStateRetrieverFilters interface. -var _ ContractBLSOperatorStateRetrieverFilters = (*ContractBLSOperatorStateRetrieverFilterer)(nil) - -// ContractBLSOperatorStateRetrieverSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ContractBLSOperatorStateRetrieverSession struct { - Contract *ContractBLSOperatorStateRetriever // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSOperatorStateRetrieverCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ContractBLSOperatorStateRetrieverCallerSession struct { - Contract *ContractBLSOperatorStateRetrieverCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ContractBLSOperatorStateRetrieverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ContractBLSOperatorStateRetrieverTransactorSession struct { - Contract *ContractBLSOperatorStateRetrieverTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSOperatorStateRetrieverRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractBLSOperatorStateRetrieverRaw struct { - Contract *ContractBLSOperatorStateRetriever // Generic contract binding to access the raw methods on -} - -// ContractBLSOperatorStateRetrieverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractBLSOperatorStateRetrieverCallerRaw struct { - Contract *ContractBLSOperatorStateRetrieverCaller // Generic read-only contract binding to access the raw methods on -} - -// ContractBLSOperatorStateRetrieverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractBLSOperatorStateRetrieverTransactorRaw struct { - Contract *ContractBLSOperatorStateRetrieverTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewContractBLSOperatorStateRetriever creates a new instance of ContractBLSOperatorStateRetriever, bound to a specific deployed contract. -func NewContractBLSOperatorStateRetriever(address common.Address, backend bind.ContractBackend) (*ContractBLSOperatorStateRetriever, error) { - contract, err := bindContractBLSOperatorStateRetriever(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ContractBLSOperatorStateRetriever{ContractBLSOperatorStateRetrieverCaller: ContractBLSOperatorStateRetrieverCaller{contract: contract}, ContractBLSOperatorStateRetrieverTransactor: ContractBLSOperatorStateRetrieverTransactor{contract: contract}, ContractBLSOperatorStateRetrieverFilterer: ContractBLSOperatorStateRetrieverFilterer{contract: contract}}, nil -} - -// NewContractBLSOperatorStateRetrieverCaller creates a new read-only instance of ContractBLSOperatorStateRetriever, bound to a specific deployed contract. -func NewContractBLSOperatorStateRetrieverCaller(address common.Address, caller bind.ContractCaller) (*ContractBLSOperatorStateRetrieverCaller, error) { - contract, err := bindContractBLSOperatorStateRetriever(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ContractBLSOperatorStateRetrieverCaller{contract: contract}, nil -} - -// NewContractBLSOperatorStateRetrieverTransactor creates a new write-only instance of ContractBLSOperatorStateRetriever, bound to a specific deployed contract. -func NewContractBLSOperatorStateRetrieverTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractBLSOperatorStateRetrieverTransactor, error) { - contract, err := bindContractBLSOperatorStateRetriever(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ContractBLSOperatorStateRetrieverTransactor{contract: contract}, nil -} - -// NewContractBLSOperatorStateRetrieverFilterer creates a new log filterer instance of ContractBLSOperatorStateRetriever, bound to a specific deployed contract. -func NewContractBLSOperatorStateRetrieverFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractBLSOperatorStateRetrieverFilterer, error) { - contract, err := bindContractBLSOperatorStateRetriever(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ContractBLSOperatorStateRetrieverFilterer{contract: contract}, nil -} - -// bindContractBLSOperatorStateRetriever binds a generic wrapper to an already deployed contract. -func bindContractBLSOperatorStateRetriever(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractBLSOperatorStateRetrieverMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSOperatorStateRetriever.Contract.ContractBLSOperatorStateRetrieverCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSOperatorStateRetriever.Contract.ContractBLSOperatorStateRetrieverTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSOperatorStateRetriever.Contract.ContractBLSOperatorStateRetrieverTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSOperatorStateRetriever.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSOperatorStateRetriever.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSOperatorStateRetriever.Contract.contract.Transact(opts, method, params...) -} - -// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. -// -// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCaller) GetCheckSignaturesIndices(opts *bind.CallOpts, registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (BLSOperatorStateRetrieverCheckSignaturesIndices, error) { - var out []interface{} - err := _ContractBLSOperatorStateRetriever.contract.Call(opts, &out, "getCheckSignaturesIndices", registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) - - if err != nil { - return *new(BLSOperatorStateRetrieverCheckSignaturesIndices), err - } - - out0 := *abi.ConvertType(out[0], new(BLSOperatorStateRetrieverCheckSignaturesIndices)).(*BLSOperatorStateRetrieverCheckSignaturesIndices) - - return out0, err - -} - -// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. -// -// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverSession) GetCheckSignaturesIndices(registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (BLSOperatorStateRetrieverCheckSignaturesIndices, error) { - return _ContractBLSOperatorStateRetriever.Contract.GetCheckSignaturesIndices(&_ContractBLSOperatorStateRetriever.CallOpts, registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) -} - -// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. -// -// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCallerSession) GetCheckSignaturesIndices(registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (BLSOperatorStateRetrieverCheckSignaturesIndices, error) { - return _ContractBLSOperatorStateRetriever.Contract.GetCheckSignaturesIndices(&_ContractBLSOperatorStateRetriever.CallOpts, registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) -} - -// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. -// -// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((bytes32,uint96)[][]) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCaller) GetOperatorState(opts *bind.CallOpts, registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]BLSOperatorStateRetrieverOperator, error) { - var out []interface{} - err := _ContractBLSOperatorStateRetriever.contract.Call(opts, &out, "getOperatorState", registryCoordinator, quorumNumbers, blockNumber) - - if err != nil { - return *new([][]BLSOperatorStateRetrieverOperator), err - } - - out0 := *abi.ConvertType(out[0], new([][]BLSOperatorStateRetrieverOperator)).(*[][]BLSOperatorStateRetrieverOperator) - - return out0, err - -} - -// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. -// -// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((bytes32,uint96)[][]) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverSession) GetOperatorState(registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]BLSOperatorStateRetrieverOperator, error) { - return _ContractBLSOperatorStateRetriever.Contract.GetOperatorState(&_ContractBLSOperatorStateRetriever.CallOpts, registryCoordinator, quorumNumbers, blockNumber) -} - -// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. -// -// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((bytes32,uint96)[][]) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCallerSession) GetOperatorState(registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]BLSOperatorStateRetrieverOperator, error) { - return _ContractBLSOperatorStateRetriever.Contract.GetOperatorState(&_ContractBLSOperatorStateRetriever.CallOpts, registryCoordinator, quorumNumbers, blockNumber) -} - -// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. -// -// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (bytes32,uint96)[][]) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCaller) GetOperatorState0(opts *bind.CallOpts, registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]BLSOperatorStateRetrieverOperator, error) { - var out []interface{} - err := _ContractBLSOperatorStateRetriever.contract.Call(opts, &out, "getOperatorState0", registryCoordinator, operatorId, blockNumber) - - if err != nil { - return *new(*big.Int), *new([][]BLSOperatorStateRetrieverOperator), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - out1 := *abi.ConvertType(out[1], new([][]BLSOperatorStateRetrieverOperator)).(*[][]BLSOperatorStateRetrieverOperator) - - return out0, out1, err - -} - -// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. -// -// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (bytes32,uint96)[][]) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverSession) GetOperatorState0(registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]BLSOperatorStateRetrieverOperator, error) { - return _ContractBLSOperatorStateRetriever.Contract.GetOperatorState0(&_ContractBLSOperatorStateRetriever.CallOpts, registryCoordinator, operatorId, blockNumber) -} - -// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. -// -// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (bytes32,uint96)[][]) -func (_ContractBLSOperatorStateRetriever *ContractBLSOperatorStateRetrieverCallerSession) GetOperatorState0(registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]BLSOperatorStateRetrieverOperator, error) { - return _ContractBLSOperatorStateRetriever.Contract.GetOperatorState0(&_ContractBLSOperatorStateRetriever.CallOpts, registryCoordinator, operatorId, blockNumber) -} diff --git a/contracts/bindings/BLSPubkeyRegistry/binding.go b/contracts/bindings/BLSPubkeyRegistry/binding.go deleted file mode 100644 index 8cf4d895..00000000 --- a/contracts/bindings/BLSPubkeyRegistry/binding.go +++ /dev/null @@ -1,1076 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contractBLSPubkeyRegistry - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. -type BN254G1Point struct { - X *big.Int - Y *big.Int -} - -// IBLSPubkeyRegistryApkUpdate is an auto generated low-level Go binding around an user-defined struct. -type IBLSPubkeyRegistryApkUpdate struct { - ApkHash [24]byte - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 -} - -// ContractBLSPubkeyRegistryMetaData contains all meta data concerning the ContractBLSPubkeyRegistry contract. -var ContractBLSPubkeyRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"_registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contractIBLSPublicKeyCompendium\",\"name\":\"_pubkeyCompendium\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"OperatorAddedToQuorums\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"OperatorRemovedFromQuorums\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"deregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getApkForQuorum\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getApkHashForQuorumAtBlockNumberFromIndex\",\"outputs\":[{\"internalType\":\"bytes24\",\"name\":\"\",\"type\":\"bytes24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getApkIndicesForQuorumsAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getApkUpdateForQuorumByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes24\",\"name\":\"apkHash\",\"type\":\"bytes24\"},{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIBLSPubkeyRegistry.ApkUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"getOperatorFromPubkeyHash\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getQuorumApkHistoryLength\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pubkeyCompendium\",\"outputs\":[{\"internalType\":\"contractIBLSPublicKeyCompendium\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"quorumApk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"quorumApkUpdates\",\"outputs\":[{\"internalType\":\"bytes24\",\"name\":\"apkHash\",\"type\":\"bytes24\"},{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"registerOperator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b506040516200158d3803806200158d833981016040819052620000349162000138565b6001600160a01b03808316608052811660a0528181620000536200005d565b5050505062000177565b600054610100900460ff1615620000ca5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013557600080fd5b50565b600080604083850312156200014c57600080fd5b825162000159816200011f565b60208401519092506200016c816200011f565b809150509250929050565b60805160a0516113dc620001b16000396000818160e401526105990152600081816101f10152818161033401526104ac01526113dc6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636d14a987116100715780636d14a987146101ec5780637225057e146102135780637f5eccbb14610261578063c1af6b24146102a2578063eda10763146102cf578063fb81a7be146102ef57600080fd5b806303ce4bad146100b9578063187548c8146100df57806324369b2a1461011e57806332de63081461013357806347b314e81461016f57806363a9451014610182575b600080fd5b6100cc6100c7366004610f4d565b610327565b6040519081526020015b60405180910390f35b6101067f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d6565b61013161012c366004610f4d565b6104a1565b005b61015a610141366004611017565b6002602052600090815260409020805460019091015482565b604080519283526020830191909152016100d6565b61010661017d366004611039565b610580565b6101d1610190366004611017565b60408051808201909152600080825260208201525060ff16600090815260026020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016100d6565b6101067f000000000000000000000000000000000000000000000000000000000000000081565b610226610221366004611052565b610612565b60408051825167ffffffffffffffff1916815260208084015163ffffffff9081169183019190915292820151909216908201526060016100d6565b61027461026f366004611052565b6106a4565b6040805167ffffffffffffffff19909416845263ffffffff92831660208501529116908201526060016100d6565b6102b56102b036600461107c565b6106ef565b60405167ffffffffffffffff1990911681526020016100d6565b6102e26102dd3660046110c4565b610778565b6040516100d6919061113c565b6103126102fd366004611017565b60ff1660009081526001602052604090205490565b60405163ffffffff90911681526020016100d6565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037a5760405162461bcd60e51b815260040161037190611186565b60405180910390fd5b6000610385836109d0565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581141561041d5760405162461bcd60e51b815260206004820152603f60248201527f424c535075626b657952656769737472792e72656769737465724f706572617460448201527f6f723a2063616e6e6f74207265676973746572207a65726f207075626b6579006064820152608401610371565b846001600160a01b031661043082610580565b6001600160a01b0316146104565760405162461bcd60e51b8152600401610371906111fd565b6104608484610a13565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246858560405161049192919061125b565b60405180910390a1949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e95760405162461bcd60e51b815260040161037190611186565b60006104f4826109d0565b9050836001600160a01b031661050982610580565b6001600160a01b03161461052f5760405162461bcd60e51b8152600401610371906111fd565b6105418361053c84610bd2565b610a13565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba848460405161057292919061125b565b60405180910390a150505050565b60405163745dcd7360e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8bb9ae690602401602060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c91906112c0565b92915050565b604080516060810182526000808252602080830182905282840182905260ff86168252600190529190912080548390811061064f5761064f6112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905092915050565b600160205281600052604060002081815481106106c057600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60ff83166000908152600160205260408120805482919084908110610716576107166112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905061076f8185610c91565b51949350505050565b606060008367ffffffffffffffff81111561079557610795610eb7565b6040519080825280602002602001820160405280156107be578160200160208202803683370190505b50905060005b848110156109c75760008686838181106107e0576107e06112dd565b919091013560f81c600081815260016020526040902054909250905063ffffffff81161580610849575060ff82166000908152600160205260408120805490919061082d5761082d6112dd565b600091825260209091200154600160c01b900463ffffffff1686105b156108e25760405162461bcd60e51b815260206004820152605e60248201527f424c535075626b657952656769737472792e67657441706b496e64696365734660448201527f6f7251756f72756d734174426c6f636b4e756d6265723a20626c6f636b4e756d60648201527f626572206973206265666f726520746865206669727374207570646174650000608482015260a401610371565b60005b8163ffffffff168163ffffffff1610156109b15760ff83166000908152600160208190526040909120889161091a8486611309565b6109249190611309565b63ffffffff168154811061093a5761093a6112dd565b600091825260209091200154600160c01b900463ffffffff161161099f5760016109648284611309565b61096e9190611309565b858581518110610980576109806112dd565b602002602001019063ffffffff16908163ffffffff16815250506109b1565b806109a98161132e565b9150506108e5565b50505080806109bf90611352565b9150506107c4565b50949350505050565b6000816000015182602001516040516020016109f6929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b604080518082019091526000808252602082015260005b8351811015610bcc576000848281518110610a4757610a476112dd565b0160209081015160f81c600081815260019092526040909120549091508015610ac75760ff821660009081526001602081905260409091204391610a8b908461136d565b81548110610a9b57610a9b6112dd565b90600052602060002001600001601c6101000a81548163ffffffff021916908363ffffffff1602179055505b60ff82166000908152600260209081526040918290208251808401909352805483526001015490820152610afb9086610dde565b60ff8316600090815260026020908152604080832084518155828501516001909101558051606081018252838152918201839052810191909152909450610b41856109d0565b67ffffffffffffffff1916815263ffffffff438116602080840191825260ff90951660009081526001808752604080832080548084018255908452979092208551970180549351958301518516600160e01b026001600160e01b0396909516600160c01b026001600160e01b03199094169790921c9690961791909117929092161790555001610a2a565b50505050565b60408051808201909152600080825260208201528151158015610bf757506020820151155b15610c15575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151610c5a9190611384565b610c84907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761136d565b905292915050565b919050565b816020015163ffffffff168163ffffffff161015610d2a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a20696e646578206064820152691d1bdbc81c9958d95b9d60b21b608482015260a401610371565b604082015163ffffffff161580610d505750816040015163ffffffff168163ffffffff16105b610dda5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a206e6f74206c6160648201526e746573742061706b2075706461746560881b608482015260a401610371565b5050565b6040805180820190915260008082526020820152610dfa610e81565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610e3957610e3b565bfe5b5080610e795760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610371565b505092915050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0381168114610eb457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ef657610ef6610eb7565b604052919050565b600060408284031215610f1057600080fd5b6040516040810181811067ffffffffffffffff82111715610f3357610f33610eb7565b604052823581526020928301359281019290925250919050565b600080600060808486031215610f6257600080fd5b8335610f6d81610e9f565b925060208481013567ffffffffffffffff80821115610f8b57600080fd5b818701915087601f830112610f9f57600080fd5b813581811115610fb157610fb1610eb7565b610fc3601f8201601f19168501610ecd565b91508082528884828501011115610fd957600080fd5b8084840185840137600084828401015250809450505050610ffd8560408601610efe565b90509250925092565b803560ff81168114610c8c57600080fd5b60006020828403121561102957600080fd5b61103282611006565b9392505050565b60006020828403121561104b57600080fd5b5035919050565b6000806040838503121561106557600080fd5b61106e83611006565b946020939093013593505050565b60008060006060848603121561109157600080fd5b61109a84611006565b9250602084013563ffffffff811681146110b357600080fd5b929592945050506040919091013590565b6000806000604084860312156110d957600080fd5b833567ffffffffffffffff808211156110f157600080fd5b818601915086601f83011261110557600080fd5b81358181111561111457600080fd5b87602082850101111561112657600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561117a57835163ffffffff1683529284019291840191600101611158565b50909695505050505050565b60208082526051908201527f424c535075626b657952656769737472792e6f6e6c795265676973747279436f60408201527f6f7264696e61746f723a2063616c6c6572206973206e6f74207468652072656760608201527034b9ba393c9031b7b7b93234b730ba37b960791b608082015260a00190565b602080825260409082018190527f424c535075626b657952656769737472792e72656769737465724f7065726174908201527f6f723a206f70657261746f7220646f6573206e6f74206f776e207075626b6579606082015260800190565b60018060a01b038316815260006020604081840152835180604085015260005b818110156112975785810183015185820160600152820161127b565b818111156112a9576000606083870101525b50601f01601f191692909201606001949350505050565b6000602082840312156112d257600080fd5b815161103281610e9f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611326576113266112f3565b039392505050565b600063ffffffff80831681811415611348576113486112f3565b6001019392505050565b6000600019821415611366576113666112f3565b5060010190565b60008282101561137f5761137f6112f3565b500390565b6000826113a157634e487b7160e01b600052601260045260246000fd5b50069056fea2646970667358221220b5fbe08233c3d21babeced5fb8296aaa00110e88951fe5315f5f164c5f10610264736f6c634300080c0033", -} - -// ContractBLSPubkeyRegistryABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractBLSPubkeyRegistryMetaData.ABI instead. -var ContractBLSPubkeyRegistryABI = ContractBLSPubkeyRegistryMetaData.ABI - -// ContractBLSPubkeyRegistryBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ContractBLSPubkeyRegistryMetaData.Bin instead. -var ContractBLSPubkeyRegistryBin = ContractBLSPubkeyRegistryMetaData.Bin - -// DeployContractBLSPubkeyRegistry deploys a new Ethereum contract, binding an instance of ContractBLSPubkeyRegistry to it. -func DeployContractBLSPubkeyRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address, _pubkeyCompendium common.Address) (common.Address, *types.Transaction, *ContractBLSPubkeyRegistry, error) { - parsed, err := ContractBLSPubkeyRegistryMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBLSPubkeyRegistryBin), backend, _registryCoordinator, _pubkeyCompendium) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ContractBLSPubkeyRegistry{ContractBLSPubkeyRegistryCaller: ContractBLSPubkeyRegistryCaller{contract: contract}, ContractBLSPubkeyRegistryTransactor: ContractBLSPubkeyRegistryTransactor{contract: contract}, ContractBLSPubkeyRegistryFilterer: ContractBLSPubkeyRegistryFilterer{contract: contract}}, nil -} - -// ContractBLSPubkeyRegistryMethods is an auto generated interface around an Ethereum contract. -type ContractBLSPubkeyRegistryMethods interface { - ContractBLSPubkeyRegistryCalls - ContractBLSPubkeyRegistryTransacts - ContractBLSPubkeyRegistryFilters -} - -// ContractBLSPubkeyRegistryCalls is an auto generated interface that defines the call methods available for an Ethereum contract. -type ContractBLSPubkeyRegistryCalls interface { - GetApkForQuorum(opts *bind.CallOpts, quorumNumber uint8) (BN254G1Point, error) - - GetApkHashForQuorumAtBlockNumberFromIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) - - GetApkIndicesForQuorumsAtBlockNumber(opts *bind.CallOpts, quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) - - GetApkUpdateForQuorumByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IBLSPubkeyRegistryApkUpdate, error) - - GetOperatorFromPubkeyHash(opts *bind.CallOpts, pubkeyHash [32]byte) (common.Address, error) - - GetQuorumApkHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (uint32, error) - - PubkeyCompendium(opts *bind.CallOpts) (common.Address, error) - - QuorumApk(opts *bind.CallOpts, arg0 uint8) (struct { - X *big.Int - Y *big.Int - }, error) - - QuorumApkUpdates(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { - ApkHash [24]byte - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 - }, error) - - RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) -} - -// ContractBLSPubkeyRegistryTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. -type ContractBLSPubkeyRegistryTransacts interface { - DeregisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) - - RegisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) -} - -// ContractBLSPubkeyRegistryFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. -type ContractBLSPubkeyRegistryFilters interface { - FilterInitialized(opts *bind.FilterOpts) (*ContractBLSPubkeyRegistryInitializedIterator, error) - WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSPubkeyRegistryInitialized) (event.Subscription, error) - ParseInitialized(log types.Log) (*ContractBLSPubkeyRegistryInitialized, error) - - FilterOperatorAddedToQuorums(opts *bind.FilterOpts) (*ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator, error) - WatchOperatorAddedToQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSPubkeyRegistryOperatorAddedToQuorums) (event.Subscription, error) - ParseOperatorAddedToQuorums(log types.Log) (*ContractBLSPubkeyRegistryOperatorAddedToQuorums, error) - - FilterOperatorRemovedFromQuorums(opts *bind.FilterOpts) (*ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator, error) - WatchOperatorRemovedFromQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSPubkeyRegistryOperatorRemovedFromQuorums) (event.Subscription, error) - ParseOperatorRemovedFromQuorums(log types.Log) (*ContractBLSPubkeyRegistryOperatorRemovedFromQuorums, error) -} - -// ContractBLSPubkeyRegistry is an auto generated Go binding around an Ethereum contract. -type ContractBLSPubkeyRegistry struct { - ContractBLSPubkeyRegistryCaller // Read-only binding to the contract - ContractBLSPubkeyRegistryTransactor // Write-only binding to the contract - ContractBLSPubkeyRegistryFilterer // Log filterer for contract events -} - -// ContractBLSPubkeyRegistry implements the ContractBLSPubkeyRegistryMethods interface. -var _ ContractBLSPubkeyRegistryMethods = (*ContractBLSPubkeyRegistry)(nil) - -// ContractBLSPubkeyRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractBLSPubkeyRegistryCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSPubkeyRegistryCaller implements the ContractBLSPubkeyRegistryCalls interface. -var _ ContractBLSPubkeyRegistryCalls = (*ContractBLSPubkeyRegistryCaller)(nil) - -// ContractBLSPubkeyRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractBLSPubkeyRegistryTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSPubkeyRegistryTransactor implements the ContractBLSPubkeyRegistryTransacts interface. -var _ ContractBLSPubkeyRegistryTransacts = (*ContractBLSPubkeyRegistryTransactor)(nil) - -// ContractBLSPubkeyRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractBLSPubkeyRegistryFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSPubkeyRegistryFilterer implements the ContractBLSPubkeyRegistryFilters interface. -var _ ContractBLSPubkeyRegistryFilters = (*ContractBLSPubkeyRegistryFilterer)(nil) - -// ContractBLSPubkeyRegistrySession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ContractBLSPubkeyRegistrySession struct { - Contract *ContractBLSPubkeyRegistry // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSPubkeyRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ContractBLSPubkeyRegistryCallerSession struct { - Contract *ContractBLSPubkeyRegistryCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ContractBLSPubkeyRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ContractBLSPubkeyRegistryTransactorSession struct { - Contract *ContractBLSPubkeyRegistryTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSPubkeyRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractBLSPubkeyRegistryRaw struct { - Contract *ContractBLSPubkeyRegistry // Generic contract binding to access the raw methods on -} - -// ContractBLSPubkeyRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractBLSPubkeyRegistryCallerRaw struct { - Contract *ContractBLSPubkeyRegistryCaller // Generic read-only contract binding to access the raw methods on -} - -// ContractBLSPubkeyRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractBLSPubkeyRegistryTransactorRaw struct { - Contract *ContractBLSPubkeyRegistryTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewContractBLSPubkeyRegistry creates a new instance of ContractBLSPubkeyRegistry, bound to a specific deployed contract. -func NewContractBLSPubkeyRegistry(address common.Address, backend bind.ContractBackend) (*ContractBLSPubkeyRegistry, error) { - contract, err := bindContractBLSPubkeyRegistry(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistry{ContractBLSPubkeyRegistryCaller: ContractBLSPubkeyRegistryCaller{contract: contract}, ContractBLSPubkeyRegistryTransactor: ContractBLSPubkeyRegistryTransactor{contract: contract}, ContractBLSPubkeyRegistryFilterer: ContractBLSPubkeyRegistryFilterer{contract: contract}}, nil -} - -// NewContractBLSPubkeyRegistryCaller creates a new read-only instance of ContractBLSPubkeyRegistry, bound to a specific deployed contract. -func NewContractBLSPubkeyRegistryCaller(address common.Address, caller bind.ContractCaller) (*ContractBLSPubkeyRegistryCaller, error) { - contract, err := bindContractBLSPubkeyRegistry(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistryCaller{contract: contract}, nil -} - -// NewContractBLSPubkeyRegistryTransactor creates a new write-only instance of ContractBLSPubkeyRegistry, bound to a specific deployed contract. -func NewContractBLSPubkeyRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractBLSPubkeyRegistryTransactor, error) { - contract, err := bindContractBLSPubkeyRegistry(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistryTransactor{contract: contract}, nil -} - -// NewContractBLSPubkeyRegistryFilterer creates a new log filterer instance of ContractBLSPubkeyRegistry, bound to a specific deployed contract. -func NewContractBLSPubkeyRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractBLSPubkeyRegistryFilterer, error) { - contract, err := bindContractBLSPubkeyRegistry(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistryFilterer{contract: contract}, nil -} - -// bindContractBLSPubkeyRegistry binds a generic wrapper to an already deployed contract. -func bindContractBLSPubkeyRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractBLSPubkeyRegistryMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSPubkeyRegistry.Contract.ContractBLSPubkeyRegistryCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.ContractBLSPubkeyRegistryTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.ContractBLSPubkeyRegistryTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSPubkeyRegistry.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.contract.Transact(opts, method, params...) -} - -// GetApkForQuorum is a free data retrieval call binding the contract method 0x63a94510. -// -// Solidity: function getApkForQuorum(uint8 quorumNumber) view returns((uint256,uint256)) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) GetApkForQuorum(opts *bind.CallOpts, quorumNumber uint8) (BN254G1Point, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "getApkForQuorum", quorumNumber) - - if err != nil { - return *new(BN254G1Point), err - } - - out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) - - return out0, err - -} - -// GetApkForQuorum is a free data retrieval call binding the contract method 0x63a94510. -// -// Solidity: function getApkForQuorum(uint8 quorumNumber) view returns((uint256,uint256)) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) GetApkForQuorum(quorumNumber uint8) (BN254G1Point, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkForQuorum(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber) -} - -// GetApkForQuorum is a free data retrieval call binding the contract method 0x63a94510. -// -// Solidity: function getApkForQuorum(uint8 quorumNumber) view returns((uint256,uint256)) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) GetApkForQuorum(quorumNumber uint8) (BN254G1Point, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkForQuorum(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber) -} - -// GetApkHashForQuorumAtBlockNumberFromIndex is a free data retrieval call binding the contract method 0xc1af6b24. -// -// Solidity: function getApkHashForQuorumAtBlockNumberFromIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) GetApkHashForQuorumAtBlockNumberFromIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "getApkHashForQuorumAtBlockNumberFromIndex", quorumNumber, blockNumber, index) - - if err != nil { - return *new([24]byte), err - } - - out0 := *abi.ConvertType(out[0], new([24]byte)).(*[24]byte) - - return out0, err - -} - -// GetApkHashForQuorumAtBlockNumberFromIndex is a free data retrieval call binding the contract method 0xc1af6b24. -// -// Solidity: function getApkHashForQuorumAtBlockNumberFromIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) GetApkHashForQuorumAtBlockNumberFromIndex(quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkHashForQuorumAtBlockNumberFromIndex(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber, blockNumber, index) -} - -// GetApkHashForQuorumAtBlockNumberFromIndex is a free data retrieval call binding the contract method 0xc1af6b24. -// -// Solidity: function getApkHashForQuorumAtBlockNumberFromIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) GetApkHashForQuorumAtBlockNumberFromIndex(quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkHashForQuorumAtBlockNumberFromIndex(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber, blockNumber, index) -} - -// GetApkIndicesForQuorumsAtBlockNumber is a free data retrieval call binding the contract method 0xeda10763. -// -// Solidity: function getApkIndicesForQuorumsAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) GetApkIndicesForQuorumsAtBlockNumber(opts *bind.CallOpts, quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "getApkIndicesForQuorumsAtBlockNumber", quorumNumbers, blockNumber) - - if err != nil { - return *new([]uint32), err - } - - out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) - - return out0, err - -} - -// GetApkIndicesForQuorumsAtBlockNumber is a free data retrieval call binding the contract method 0xeda10763. -// -// Solidity: function getApkIndicesForQuorumsAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) GetApkIndicesForQuorumsAtBlockNumber(quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkIndicesForQuorumsAtBlockNumber(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumbers, blockNumber) -} - -// GetApkIndicesForQuorumsAtBlockNumber is a free data retrieval call binding the contract method 0xeda10763. -// -// Solidity: function getApkIndicesForQuorumsAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) GetApkIndicesForQuorumsAtBlockNumber(quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkIndicesForQuorumsAtBlockNumber(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumbers, blockNumber) -} - -// GetApkUpdateForQuorumByIndex is a free data retrieval call binding the contract method 0x7225057e. -// -// Solidity: function getApkUpdateForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) GetApkUpdateForQuorumByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IBLSPubkeyRegistryApkUpdate, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "getApkUpdateForQuorumByIndex", quorumNumber, index) - - if err != nil { - return *new(IBLSPubkeyRegistryApkUpdate), err - } - - out0 := *abi.ConvertType(out[0], new(IBLSPubkeyRegistryApkUpdate)).(*IBLSPubkeyRegistryApkUpdate) - - return out0, err - -} - -// GetApkUpdateForQuorumByIndex is a free data retrieval call binding the contract method 0x7225057e. -// -// Solidity: function getApkUpdateForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) GetApkUpdateForQuorumByIndex(quorumNumber uint8, index *big.Int) (IBLSPubkeyRegistryApkUpdate, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkUpdateForQuorumByIndex(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber, index) -} - -// GetApkUpdateForQuorumByIndex is a free data retrieval call binding the contract method 0x7225057e. -// -// Solidity: function getApkUpdateForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) GetApkUpdateForQuorumByIndex(quorumNumber uint8, index *big.Int) (IBLSPubkeyRegistryApkUpdate, error) { - return _ContractBLSPubkeyRegistry.Contract.GetApkUpdateForQuorumByIndex(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber, index) -} - -// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. -// -// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) GetOperatorFromPubkeyHash(opts *bind.CallOpts, pubkeyHash [32]byte) (common.Address, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "getOperatorFromPubkeyHash", pubkeyHash) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. -// -// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) GetOperatorFromPubkeyHash(pubkeyHash [32]byte) (common.Address, error) { - return _ContractBLSPubkeyRegistry.Contract.GetOperatorFromPubkeyHash(&_ContractBLSPubkeyRegistry.CallOpts, pubkeyHash) -} - -// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. -// -// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) GetOperatorFromPubkeyHash(pubkeyHash [32]byte) (common.Address, error) { - return _ContractBLSPubkeyRegistry.Contract.GetOperatorFromPubkeyHash(&_ContractBLSPubkeyRegistry.CallOpts, pubkeyHash) -} - -// GetQuorumApkHistoryLength is a free data retrieval call binding the contract method 0xfb81a7be. -// -// Solidity: function getQuorumApkHistoryLength(uint8 quorumNumber) view returns(uint32) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) GetQuorumApkHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (uint32, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "getQuorumApkHistoryLength", quorumNumber) - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// GetQuorumApkHistoryLength is a free data retrieval call binding the contract method 0xfb81a7be. -// -// Solidity: function getQuorumApkHistoryLength(uint8 quorumNumber) view returns(uint32) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) GetQuorumApkHistoryLength(quorumNumber uint8) (uint32, error) { - return _ContractBLSPubkeyRegistry.Contract.GetQuorumApkHistoryLength(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber) -} - -// GetQuorumApkHistoryLength is a free data retrieval call binding the contract method 0xfb81a7be. -// -// Solidity: function getQuorumApkHistoryLength(uint8 quorumNumber) view returns(uint32) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) GetQuorumApkHistoryLength(quorumNumber uint8) (uint32, error) { - return _ContractBLSPubkeyRegistry.Contract.GetQuorumApkHistoryLength(&_ContractBLSPubkeyRegistry.CallOpts, quorumNumber) -} - -// PubkeyCompendium is a free data retrieval call binding the contract method 0x187548c8. -// -// Solidity: function pubkeyCompendium() view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) PubkeyCompendium(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "pubkeyCompendium") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PubkeyCompendium is a free data retrieval call binding the contract method 0x187548c8. -// -// Solidity: function pubkeyCompendium() view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) PubkeyCompendium() (common.Address, error) { - return _ContractBLSPubkeyRegistry.Contract.PubkeyCompendium(&_ContractBLSPubkeyRegistry.CallOpts) -} - -// PubkeyCompendium is a free data retrieval call binding the contract method 0x187548c8. -// -// Solidity: function pubkeyCompendium() view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) PubkeyCompendium() (common.Address, error) { - return _ContractBLSPubkeyRegistry.Contract.PubkeyCompendium(&_ContractBLSPubkeyRegistry.CallOpts) -} - -// QuorumApk is a free data retrieval call binding the contract method 0x32de6308. -// -// Solidity: function quorumApk(uint8 ) view returns(uint256 X, uint256 Y) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) QuorumApk(opts *bind.CallOpts, arg0 uint8) (struct { - X *big.Int - Y *big.Int -}, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "quorumApk", arg0) - - outstruct := new(struct { - X *big.Int - Y *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.X = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.Y = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// QuorumApk is a free data retrieval call binding the contract method 0x32de6308. -// -// Solidity: function quorumApk(uint8 ) view returns(uint256 X, uint256 Y) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) QuorumApk(arg0 uint8) (struct { - X *big.Int - Y *big.Int -}, error) { - return _ContractBLSPubkeyRegistry.Contract.QuorumApk(&_ContractBLSPubkeyRegistry.CallOpts, arg0) -} - -// QuorumApk is a free data retrieval call binding the contract method 0x32de6308. -// -// Solidity: function quorumApk(uint8 ) view returns(uint256 X, uint256 Y) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) QuorumApk(arg0 uint8) (struct { - X *big.Int - Y *big.Int -}, error) { - return _ContractBLSPubkeyRegistry.Contract.QuorumApk(&_ContractBLSPubkeyRegistry.CallOpts, arg0) -} - -// QuorumApkUpdates is a free data retrieval call binding the contract method 0x7f5eccbb. -// -// Solidity: function quorumApkUpdates(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) QuorumApkUpdates(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { - ApkHash [24]byte - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 -}, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "quorumApkUpdates", arg0, arg1) - - outstruct := new(struct { - ApkHash [24]byte - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 - }) - if err != nil { - return *outstruct, err - } - - outstruct.ApkHash = *abi.ConvertType(out[0], new([24]byte)).(*[24]byte) - outstruct.UpdateBlockNumber = *abi.ConvertType(out[1], new(uint32)).(*uint32) - outstruct.NextUpdateBlockNumber = *abi.ConvertType(out[2], new(uint32)).(*uint32) - - return *outstruct, err - -} - -// QuorumApkUpdates is a free data retrieval call binding the contract method 0x7f5eccbb. -// -// Solidity: function quorumApkUpdates(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) QuorumApkUpdates(arg0 uint8, arg1 *big.Int) (struct { - ApkHash [24]byte - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 -}, error) { - return _ContractBLSPubkeyRegistry.Contract.QuorumApkUpdates(&_ContractBLSPubkeyRegistry.CallOpts, arg0, arg1) -} - -// QuorumApkUpdates is a free data retrieval call binding the contract method 0x7f5eccbb. -// -// Solidity: function quorumApkUpdates(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) QuorumApkUpdates(arg0 uint8, arg1 *big.Int) (struct { - ApkHash [24]byte - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 -}, error) { - return _ContractBLSPubkeyRegistry.Contract.QuorumApkUpdates(&_ContractBLSPubkeyRegistry.CallOpts, arg0, arg1) -} - -// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. -// -// Solidity: function registryCoordinator() view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCaller) RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSPubkeyRegistry.contract.Call(opts, &out, "registryCoordinator") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. -// -// Solidity: function registryCoordinator() view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) RegistryCoordinator() (common.Address, error) { - return _ContractBLSPubkeyRegistry.Contract.RegistryCoordinator(&_ContractBLSPubkeyRegistry.CallOpts) -} - -// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. -// -// Solidity: function registryCoordinator() view returns(address) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryCallerSession) RegistryCoordinator() (common.Address, error) { - return _ContractBLSPubkeyRegistry.Contract.RegistryCoordinator(&_ContractBLSPubkeyRegistry.CallOpts) -} - -// DeregisterOperator is a paid mutator transaction binding the contract method 0x24369b2a. -// -// Solidity: function deregisterOperator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryTransactor) DeregisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.contract.Transact(opts, "deregisterOperator", operator, quorumNumbers, pubkey) -} - -// DeregisterOperator is a paid mutator transaction binding the contract method 0x24369b2a. -// -// Solidity: function deregisterOperator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) DeregisterOperator(operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.DeregisterOperator(&_ContractBLSPubkeyRegistry.TransactOpts, operator, quorumNumbers, pubkey) -} - -// DeregisterOperator is a paid mutator transaction binding the contract method 0x24369b2a. -// -// Solidity: function deregisterOperator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryTransactorSession) DeregisterOperator(operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.DeregisterOperator(&_ContractBLSPubkeyRegistry.TransactOpts, operator, quorumNumbers, pubkey) -} - -// RegisterOperator is a paid mutator transaction binding the contract method 0x03ce4bad. -// -// Solidity: function registerOperator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns(bytes32) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryTransactor) RegisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.contract.Transact(opts, "registerOperator", operator, quorumNumbers, pubkey) -} - -// RegisterOperator is a paid mutator transaction binding the contract method 0x03ce4bad. -// -// Solidity: function registerOperator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns(bytes32) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistrySession) RegisterOperator(operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.RegisterOperator(&_ContractBLSPubkeyRegistry.TransactOpts, operator, quorumNumbers, pubkey) -} - -// RegisterOperator is a paid mutator transaction binding the contract method 0x03ce4bad. -// -// Solidity: function registerOperator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns(bytes32) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryTransactorSession) RegisterOperator(operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSPubkeyRegistry.Contract.RegisterOperator(&_ContractBLSPubkeyRegistry.TransactOpts, operator, quorumNumbers, pubkey) -} - -// ContractBLSPubkeyRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractBLSPubkeyRegistry contract. -type ContractBLSPubkeyRegistryInitializedIterator struct { - Event *ContractBLSPubkeyRegistryInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSPubkeyRegistryInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSPubkeyRegistryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSPubkeyRegistryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSPubkeyRegistryInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSPubkeyRegistryInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSPubkeyRegistryInitialized represents a Initialized event raised by the ContractBLSPubkeyRegistry contract. -type ContractBLSPubkeyRegistryInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractBLSPubkeyRegistryInitializedIterator, error) { - - logs, sub, err := _ContractBLSPubkeyRegistry.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistryInitializedIterator{contract: _ContractBLSPubkeyRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSPubkeyRegistryInitialized) (event.Subscription, error) { - - logs, sub, err := _ContractBLSPubkeyRegistry.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSPubkeyRegistryInitialized) - if err := _ContractBLSPubkeyRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) ParseInitialized(log types.Log) (*ContractBLSPubkeyRegistryInitialized, error) { - event := new(ContractBLSPubkeyRegistryInitialized) - if err := _ContractBLSPubkeyRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator is returned from FilterOperatorAddedToQuorums and is used to iterate over the raw logs and unpacked data for OperatorAddedToQuorums events raised by the ContractBLSPubkeyRegistry contract. -type ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator struct { - Event *ContractBLSPubkeyRegistryOperatorAddedToQuorums // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSPubkeyRegistryOperatorAddedToQuorums) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSPubkeyRegistryOperatorAddedToQuorums) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSPubkeyRegistryOperatorAddedToQuorums represents a OperatorAddedToQuorums event raised by the ContractBLSPubkeyRegistry contract. -type ContractBLSPubkeyRegistryOperatorAddedToQuorums struct { - Operator common.Address - QuorumNumbers []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorAddedToQuorums is a free log retrieval operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. -// -// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) FilterOperatorAddedToQuorums(opts *bind.FilterOpts) (*ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator, error) { - - logs, sub, err := _ContractBLSPubkeyRegistry.contract.FilterLogs(opts, "OperatorAddedToQuorums") - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator{contract: _ContractBLSPubkeyRegistry.contract, event: "OperatorAddedToQuorums", logs: logs, sub: sub}, nil -} - -// WatchOperatorAddedToQuorums is a free log subscription operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. -// -// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) WatchOperatorAddedToQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSPubkeyRegistryOperatorAddedToQuorums) (event.Subscription, error) { - - logs, sub, err := _ContractBLSPubkeyRegistry.contract.WatchLogs(opts, "OperatorAddedToQuorums") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSPubkeyRegistryOperatorAddedToQuorums) - if err := _ContractBLSPubkeyRegistry.contract.UnpackLog(event, "OperatorAddedToQuorums", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorAddedToQuorums is a log parse operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. -// -// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) ParseOperatorAddedToQuorums(log types.Log) (*ContractBLSPubkeyRegistryOperatorAddedToQuorums, error) { - event := new(ContractBLSPubkeyRegistryOperatorAddedToQuorums) - if err := _ContractBLSPubkeyRegistry.contract.UnpackLog(event, "OperatorAddedToQuorums", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator is returned from FilterOperatorRemovedFromQuorums and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromQuorums events raised by the ContractBLSPubkeyRegistry contract. -type ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator struct { - Event *ContractBLSPubkeyRegistryOperatorRemovedFromQuorums // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSPubkeyRegistryOperatorRemovedFromQuorums) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSPubkeyRegistryOperatorRemovedFromQuorums) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSPubkeyRegistryOperatorRemovedFromQuorums represents a OperatorRemovedFromQuorums event raised by the ContractBLSPubkeyRegistry contract. -type ContractBLSPubkeyRegistryOperatorRemovedFromQuorums struct { - Operator common.Address - QuorumNumbers []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorRemovedFromQuorums is a free log retrieval operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. -// -// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) FilterOperatorRemovedFromQuorums(opts *bind.FilterOpts) (*ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator, error) { - - logs, sub, err := _ContractBLSPubkeyRegistry.contract.FilterLogs(opts, "OperatorRemovedFromQuorums") - if err != nil { - return nil, err - } - return &ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator{contract: _ContractBLSPubkeyRegistry.contract, event: "OperatorRemovedFromQuorums", logs: logs, sub: sub}, nil -} - -// WatchOperatorRemovedFromQuorums is a free log subscription operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. -// -// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) WatchOperatorRemovedFromQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSPubkeyRegistryOperatorRemovedFromQuorums) (event.Subscription, error) { - - logs, sub, err := _ContractBLSPubkeyRegistry.contract.WatchLogs(opts, "OperatorRemovedFromQuorums") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSPubkeyRegistryOperatorRemovedFromQuorums) - if err := _ContractBLSPubkeyRegistry.contract.UnpackLog(event, "OperatorRemovedFromQuorums", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorRemovedFromQuorums is a log parse operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. -// -// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) -func (_ContractBLSPubkeyRegistry *ContractBLSPubkeyRegistryFilterer) ParseOperatorRemovedFromQuorums(log types.Log) (*ContractBLSPubkeyRegistryOperatorRemovedFromQuorums, error) { - event := new(ContractBLSPubkeyRegistryOperatorRemovedFromQuorums) - if err := _ContractBLSPubkeyRegistry.contract.UnpackLog(event, "OperatorRemovedFromQuorums", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/bindings/BLSPublicKeyCompendium/binding.go b/contracts/bindings/BLSPublicKeyCompendium/binding.go deleted file mode 100644 index fdd149f2..00000000 --- a/contracts/bindings/BLSPublicKeyCompendium/binding.go +++ /dev/null @@ -1,515 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contractBLSPublicKeyCompendium - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. -type BN254G1Point struct { - X *big.Int - Y *big.Int -} - -// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. -type BN254G2Point struct { - X [2]*big.Int - Y [2]*big.Int -} - -// ContractBLSPublicKeyCompendiumMetaData contains all meta data concerning the ContractBLSPublicKeyCompendium contract. -var ContractBLSPublicKeyCompendiumMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkeyG1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"indexed\":false,\"internalType\":\"structBN254.G2Point\",\"name\":\"pubkeyG2\",\"type\":\"tuple\"}],\"name\":\"NewPubkeyRegistration\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorToPubkeyHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pubkeyHashToOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"signedMessageHash\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkeyG1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"pubkeyG2\",\"type\":\"tuple\"}],\"name\":\"registerBLSPublicKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6", -} - -// ContractBLSPublicKeyCompendiumABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractBLSPublicKeyCompendiumMetaData.ABI instead. -var ContractBLSPublicKeyCompendiumABI = ContractBLSPublicKeyCompendiumMetaData.ABI - -// ContractBLSPublicKeyCompendiumBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ContractBLSPublicKeyCompendiumMetaData.Bin instead. -var ContractBLSPublicKeyCompendiumBin = ContractBLSPublicKeyCompendiumMetaData.Bin - -// DeployContractBLSPublicKeyCompendium deploys a new Ethereum contract, binding an instance of ContractBLSPublicKeyCompendium to it. -func DeployContractBLSPublicKeyCompendium(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ContractBLSPublicKeyCompendium, error) { - parsed, err := ContractBLSPublicKeyCompendiumMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBLSPublicKeyCompendiumBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ContractBLSPublicKeyCompendium{ContractBLSPublicKeyCompendiumCaller: ContractBLSPublicKeyCompendiumCaller{contract: contract}, ContractBLSPublicKeyCompendiumTransactor: ContractBLSPublicKeyCompendiumTransactor{contract: contract}, ContractBLSPublicKeyCompendiumFilterer: ContractBLSPublicKeyCompendiumFilterer{contract: contract}}, nil -} - -// ContractBLSPublicKeyCompendiumMethods is an auto generated interface around an Ethereum contract. -type ContractBLSPublicKeyCompendiumMethods interface { - ContractBLSPublicKeyCompendiumCalls - ContractBLSPublicKeyCompendiumTransacts - ContractBLSPublicKeyCompendiumFilters -} - -// ContractBLSPublicKeyCompendiumCalls is an auto generated interface that defines the call methods available for an Ethereum contract. -type ContractBLSPublicKeyCompendiumCalls interface { - GetMessageHash(opts *bind.CallOpts, operator common.Address) (BN254G1Point, error) - - OperatorToPubkeyHash(opts *bind.CallOpts, arg0 common.Address) ([32]byte, error) - - PubkeyHashToOperator(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) -} - -// ContractBLSPublicKeyCompendiumTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. -type ContractBLSPublicKeyCompendiumTransacts interface { - RegisterBLSPublicKey(opts *bind.TransactOpts, signedMessageHash BN254G1Point, pubkeyG1 BN254G1Point, pubkeyG2 BN254G2Point) (*types.Transaction, error) -} - -// ContractBLSPublicKeyCompendiumFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. -type ContractBLSPublicKeyCompendiumFilters interface { - FilterNewPubkeyRegistration(opts *bind.FilterOpts, operator []common.Address) (*ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator, error) - WatchNewPubkeyRegistration(opts *bind.WatchOpts, sink chan<- *ContractBLSPublicKeyCompendiumNewPubkeyRegistration, operator []common.Address) (event.Subscription, error) - ParseNewPubkeyRegistration(log types.Log) (*ContractBLSPublicKeyCompendiumNewPubkeyRegistration, error) -} - -// ContractBLSPublicKeyCompendium is an auto generated Go binding around an Ethereum contract. -type ContractBLSPublicKeyCompendium struct { - ContractBLSPublicKeyCompendiumCaller // Read-only binding to the contract - ContractBLSPublicKeyCompendiumTransactor // Write-only binding to the contract - ContractBLSPublicKeyCompendiumFilterer // Log filterer for contract events -} - -// ContractBLSPublicKeyCompendium implements the ContractBLSPublicKeyCompendiumMethods interface. -var _ ContractBLSPublicKeyCompendiumMethods = (*ContractBLSPublicKeyCompendium)(nil) - -// ContractBLSPublicKeyCompendiumCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractBLSPublicKeyCompendiumCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSPublicKeyCompendiumCaller implements the ContractBLSPublicKeyCompendiumCalls interface. -var _ ContractBLSPublicKeyCompendiumCalls = (*ContractBLSPublicKeyCompendiumCaller)(nil) - -// ContractBLSPublicKeyCompendiumTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractBLSPublicKeyCompendiumTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSPublicKeyCompendiumTransactor implements the ContractBLSPublicKeyCompendiumTransacts interface. -var _ ContractBLSPublicKeyCompendiumTransacts = (*ContractBLSPublicKeyCompendiumTransactor)(nil) - -// ContractBLSPublicKeyCompendiumFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractBLSPublicKeyCompendiumFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSPublicKeyCompendiumFilterer implements the ContractBLSPublicKeyCompendiumFilters interface. -var _ ContractBLSPublicKeyCompendiumFilters = (*ContractBLSPublicKeyCompendiumFilterer)(nil) - -// ContractBLSPublicKeyCompendiumSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ContractBLSPublicKeyCompendiumSession struct { - Contract *ContractBLSPublicKeyCompendium // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSPublicKeyCompendiumCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ContractBLSPublicKeyCompendiumCallerSession struct { - Contract *ContractBLSPublicKeyCompendiumCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ContractBLSPublicKeyCompendiumTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ContractBLSPublicKeyCompendiumTransactorSession struct { - Contract *ContractBLSPublicKeyCompendiumTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSPublicKeyCompendiumRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractBLSPublicKeyCompendiumRaw struct { - Contract *ContractBLSPublicKeyCompendium // Generic contract binding to access the raw methods on -} - -// ContractBLSPublicKeyCompendiumCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractBLSPublicKeyCompendiumCallerRaw struct { - Contract *ContractBLSPublicKeyCompendiumCaller // Generic read-only contract binding to access the raw methods on -} - -// ContractBLSPublicKeyCompendiumTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractBLSPublicKeyCompendiumTransactorRaw struct { - Contract *ContractBLSPublicKeyCompendiumTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewContractBLSPublicKeyCompendium creates a new instance of ContractBLSPublicKeyCompendium, bound to a specific deployed contract. -func NewContractBLSPublicKeyCompendium(address common.Address, backend bind.ContractBackend) (*ContractBLSPublicKeyCompendium, error) { - contract, err := bindContractBLSPublicKeyCompendium(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ContractBLSPublicKeyCompendium{ContractBLSPublicKeyCompendiumCaller: ContractBLSPublicKeyCompendiumCaller{contract: contract}, ContractBLSPublicKeyCompendiumTransactor: ContractBLSPublicKeyCompendiumTransactor{contract: contract}, ContractBLSPublicKeyCompendiumFilterer: ContractBLSPublicKeyCompendiumFilterer{contract: contract}}, nil -} - -// NewContractBLSPublicKeyCompendiumCaller creates a new read-only instance of ContractBLSPublicKeyCompendium, bound to a specific deployed contract. -func NewContractBLSPublicKeyCompendiumCaller(address common.Address, caller bind.ContractCaller) (*ContractBLSPublicKeyCompendiumCaller, error) { - contract, err := bindContractBLSPublicKeyCompendium(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ContractBLSPublicKeyCompendiumCaller{contract: contract}, nil -} - -// NewContractBLSPublicKeyCompendiumTransactor creates a new write-only instance of ContractBLSPublicKeyCompendium, bound to a specific deployed contract. -func NewContractBLSPublicKeyCompendiumTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractBLSPublicKeyCompendiumTransactor, error) { - contract, err := bindContractBLSPublicKeyCompendium(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ContractBLSPublicKeyCompendiumTransactor{contract: contract}, nil -} - -// NewContractBLSPublicKeyCompendiumFilterer creates a new log filterer instance of ContractBLSPublicKeyCompendium, bound to a specific deployed contract. -func NewContractBLSPublicKeyCompendiumFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractBLSPublicKeyCompendiumFilterer, error) { - contract, err := bindContractBLSPublicKeyCompendium(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ContractBLSPublicKeyCompendiumFilterer{contract: contract}, nil -} - -// bindContractBLSPublicKeyCompendium binds a generic wrapper to an already deployed contract. -func bindContractBLSPublicKeyCompendium(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractBLSPublicKeyCompendiumMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSPublicKeyCompendium.Contract.ContractBLSPublicKeyCompendiumCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.Contract.ContractBLSPublicKeyCompendiumTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.Contract.ContractBLSPublicKeyCompendiumTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSPublicKeyCompendium.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.Contract.contract.Transact(opts, method, params...) -} - -// GetMessageHash is a free data retrieval call binding the contract method 0x1f5ac1b2. -// -// Solidity: function getMessageHash(address operator) view returns((uint256,uint256)) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCaller) GetMessageHash(opts *bind.CallOpts, operator common.Address) (BN254G1Point, error) { - var out []interface{} - err := _ContractBLSPublicKeyCompendium.contract.Call(opts, &out, "getMessageHash", operator) - - if err != nil { - return *new(BN254G1Point), err - } - - out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) - - return out0, err - -} - -// GetMessageHash is a free data retrieval call binding the contract method 0x1f5ac1b2. -// -// Solidity: function getMessageHash(address operator) view returns((uint256,uint256)) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumSession) GetMessageHash(operator common.Address) (BN254G1Point, error) { - return _ContractBLSPublicKeyCompendium.Contract.GetMessageHash(&_ContractBLSPublicKeyCompendium.CallOpts, operator) -} - -// GetMessageHash is a free data retrieval call binding the contract method 0x1f5ac1b2. -// -// Solidity: function getMessageHash(address operator) view returns((uint256,uint256)) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCallerSession) GetMessageHash(operator common.Address) (BN254G1Point, error) { - return _ContractBLSPublicKeyCompendium.Contract.GetMessageHash(&_ContractBLSPublicKeyCompendium.CallOpts, operator) -} - -// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. -// -// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCaller) OperatorToPubkeyHash(opts *bind.CallOpts, arg0 common.Address) ([32]byte, error) { - var out []interface{} - err := _ContractBLSPublicKeyCompendium.contract.Call(opts, &out, "operatorToPubkeyHash", arg0) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. -// -// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumSession) OperatorToPubkeyHash(arg0 common.Address) ([32]byte, error) { - return _ContractBLSPublicKeyCompendium.Contract.OperatorToPubkeyHash(&_ContractBLSPublicKeyCompendium.CallOpts, arg0) -} - -// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. -// -// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCallerSession) OperatorToPubkeyHash(arg0 common.Address) ([32]byte, error) { - return _ContractBLSPublicKeyCompendium.Contract.OperatorToPubkeyHash(&_ContractBLSPublicKeyCompendium.CallOpts, arg0) -} - -// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. -// -// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCaller) PubkeyHashToOperator(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) { - var out []interface{} - err := _ContractBLSPublicKeyCompendium.contract.Call(opts, &out, "pubkeyHashToOperator", arg0) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. -// -// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumSession) PubkeyHashToOperator(arg0 [32]byte) (common.Address, error) { - return _ContractBLSPublicKeyCompendium.Contract.PubkeyHashToOperator(&_ContractBLSPublicKeyCompendium.CallOpts, arg0) -} - -// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. -// -// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumCallerSession) PubkeyHashToOperator(arg0 [32]byte) (common.Address, error) { - return _ContractBLSPublicKeyCompendium.Contract.PubkeyHashToOperator(&_ContractBLSPublicKeyCompendium.CallOpts, arg0) -} - -// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0x161a334d. -// -// Solidity: function registerBLSPublicKey((uint256,uint256) signedMessageHash, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) returns() -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumTransactor) RegisterBLSPublicKey(opts *bind.TransactOpts, signedMessageHash BN254G1Point, pubkeyG1 BN254G1Point, pubkeyG2 BN254G2Point) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.contract.Transact(opts, "registerBLSPublicKey", signedMessageHash, pubkeyG1, pubkeyG2) -} - -// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0x161a334d. -// -// Solidity: function registerBLSPublicKey((uint256,uint256) signedMessageHash, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) returns() -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumSession) RegisterBLSPublicKey(signedMessageHash BN254G1Point, pubkeyG1 BN254G1Point, pubkeyG2 BN254G2Point) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.Contract.RegisterBLSPublicKey(&_ContractBLSPublicKeyCompendium.TransactOpts, signedMessageHash, pubkeyG1, pubkeyG2) -} - -// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0x161a334d. -// -// Solidity: function registerBLSPublicKey((uint256,uint256) signedMessageHash, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) returns() -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumTransactorSession) RegisterBLSPublicKey(signedMessageHash BN254G1Point, pubkeyG1 BN254G1Point, pubkeyG2 BN254G2Point) (*types.Transaction, error) { - return _ContractBLSPublicKeyCompendium.Contract.RegisterBLSPublicKey(&_ContractBLSPublicKeyCompendium.TransactOpts, signedMessageHash, pubkeyG1, pubkeyG2) -} - -// ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator is returned from FilterNewPubkeyRegistration and is used to iterate over the raw logs and unpacked data for NewPubkeyRegistration events raised by the ContractBLSPublicKeyCompendium contract. -type ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator struct { - Event *ContractBLSPublicKeyCompendiumNewPubkeyRegistration // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSPublicKeyCompendiumNewPubkeyRegistration) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSPublicKeyCompendiumNewPubkeyRegistration) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSPublicKeyCompendiumNewPubkeyRegistration represents a NewPubkeyRegistration event raised by the ContractBLSPublicKeyCompendium contract. -type ContractBLSPublicKeyCompendiumNewPubkeyRegistration struct { - Operator common.Address - PubkeyG1 BN254G1Point - PubkeyG2 BN254G2Point - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNewPubkeyRegistration is a free log retrieval operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. -// -// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumFilterer) FilterNewPubkeyRegistration(opts *bind.FilterOpts, operator []common.Address) (*ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _ContractBLSPublicKeyCompendium.contract.FilterLogs(opts, "NewPubkeyRegistration", operatorRule) - if err != nil { - return nil, err - } - return &ContractBLSPublicKeyCompendiumNewPubkeyRegistrationIterator{contract: _ContractBLSPublicKeyCompendium.contract, event: "NewPubkeyRegistration", logs: logs, sub: sub}, nil -} - -// WatchNewPubkeyRegistration is a free log subscription operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. -// -// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumFilterer) WatchNewPubkeyRegistration(opts *bind.WatchOpts, sink chan<- *ContractBLSPublicKeyCompendiumNewPubkeyRegistration, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _ContractBLSPublicKeyCompendium.contract.WatchLogs(opts, "NewPubkeyRegistration", operatorRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSPublicKeyCompendiumNewPubkeyRegistration) - if err := _ContractBLSPublicKeyCompendium.contract.UnpackLog(event, "NewPubkeyRegistration", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseNewPubkeyRegistration is a log parse operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. -// -// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) -func (_ContractBLSPublicKeyCompendium *ContractBLSPublicKeyCompendiumFilterer) ParseNewPubkeyRegistration(log types.Log) (*ContractBLSPublicKeyCompendiumNewPubkeyRegistration, error) { - event := new(ContractBLSPublicKeyCompendiumNewPubkeyRegistration) - if err := _ContractBLSPublicKeyCompendium.contract.UnpackLog(event, "NewPubkeyRegistration", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go b/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go deleted file mode 100644 index 2bf0aa83..00000000 --- a/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go +++ /dev/null @@ -1,2906 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contractBLSRegistryCoordinatorWithIndices - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. -type BN254G1Point struct { - X *big.Int - Y *big.Int -} - -// IBLSRegistryCoordinatorWithIndicesOperatorKickParam is an auto generated low-level Go binding around an user-defined struct. -type IBLSRegistryCoordinatorWithIndicesOperatorKickParam struct { - QuorumNumber uint8 - Operator common.Address - Pubkey BN254G1Point -} - -// IBLSRegistryCoordinatorWithIndicesOperatorSetParam is an auto generated low-level Go binding around an user-defined struct. -type IBLSRegistryCoordinatorWithIndicesOperatorSetParam struct { - MaxOperatorCount uint32 - KickBIPsOfOperatorStake uint16 - KickBIPsOfTotalStake uint16 -} - -// IRegistryCoordinatorOperator is an auto generated low-level Go binding around an user-defined struct. -type IRegistryCoordinatorOperator struct { - OperatorId [32]byte - Status uint8 -} - -// IRegistryCoordinatorQuorumBitmapUpdate is an auto generated low-level Go binding around an user-defined struct. -type IRegistryCoordinatorQuorumBitmapUpdate struct { - UpdateBlockNumber uint32 - NextUpdateBlockNumber uint32 - QuorumBitmap *big.Int -} - -// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. -type ISignatureUtilsSignatureWithSaltAndExpiry struct { - Signature []byte - Salt [32]byte - Expiry *big.Int -} - -// ContractBLSRegistryCoordinatorWithIndicesMetaData contains all meta data concerning the ContractBLSRegistryCoordinatorWithIndices contract. -var ContractBLSRegistryCoordinatorWithIndicesMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"_slasher\",\"type\":\"address\"},{\"internalType\":\"contractIServiceManager\",\"name\":\"_serviceManager\",\"type\":\"address\"},{\"internalType\":\"contractIStakeRegistry\",\"name\":\"_stakeRegistry\",\"type\":\"address\"},{\"internalType\":\"contractIBLSPubkeyRegistry\",\"name\":\"_blsPubkeyRegistry\",\"type\":\"address\"},{\"internalType\":\"contractIIndexRegistry\",\"name\":\"_indexRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevChurnApprover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newChurnApprover\",\"type\":\"address\"}],\"name\":\"ChurnApproverUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevEjector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newEjector\",\"type\":\"address\"}],\"name\":\"EjectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"OperatorDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"OperatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"name\":\"operatorSetParams\",\"type\":\"tuple\"}],\"name\":\"OperatorSetParamsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"}],\"name\":\"OperatorSocketUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsPubkeyRegistry\",\"outputs\":[{\"internalType\":\"contractIBLSPubkeyRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"registeringOperatorId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorKickParam[]\",\"name\":\"operatorKickParams\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateOperatorChurnApprovalDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"churnApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"deregisterOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"deregistrationData\",\"type\":\"bytes\"}],\"name\":\"deregisterOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"ejectOperatorFromCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ejector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"getCurrentQuorumBitmapByOperatorId\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"\",\"type\":\"uint192\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structIRegistryCoordinator.Operator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"getOperatorFromId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getOperatorSetParams\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorStatus\",\"outputs\":[{\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getQuorumBitmapByOperatorIdAtBlockNumberByIndex\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"\",\"type\":\"uint192\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"operatorIds\",\"type\":\"bytes32[]\"}],\"name\":\"getQuorumBitmapIndicesByOperatorIdsAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getQuorumBitmapUpdateByOperatorIdByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint192\",\"name\":\"quorumBitmap\",\"type\":\"uint192\"}],\"internalType\":\"structIRegistryCoordinator.QuorumBitmapUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"getQuorumBitmapUpdateByOperatorIdLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"indexRegistry\",\"outputs\":[{\"internalType\":\"contractIIndexRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_churnApprover\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ejector\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam[]\",\"name\":\"_operatorSetParams\",\"type\":\"tuple[]\"},{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initialPausedStatus\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isChurnApproverSaltUsed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numRegistries\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorKickParam[]\",\"name\":\"operatorKickParams\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"signatureWithSaltAndExpiry\",\"type\":\"tuple\"}],\"name\":\"registerOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"registrationData\",\"type\":\"bytes\"}],\"name\":\"registerOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"}],\"name\":\"registerOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"registries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"serviceManager\",\"outputs\":[{\"internalType\":\"contractIServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_churnApprover\",\"type\":\"address\"}],\"name\":\"setChurnApprover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ejector\",\"type\":\"address\"}],\"name\":\"setEjector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"name\":\"operatorSetParam\",\"type\":\"tuple\"}],\"name\":\"setOperatorSetParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contractIStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"}],\"name\":\"updateSocket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101e06040523480156200001257600080fd5b50604051620051bf380380620051bf833981016040819052620000359162000183565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f720000000000000000000060208083019182528351808501909452600684526576302e302e3160d01b908401528151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200012d8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b0394851661014052928416610160529083166101a052821661018052166101c05262000203565b6001600160a01b03811681146200018057600080fd5b50565b600080600080600060a086880312156200019c57600080fd5b8551620001a9816200016a565b6020870151909550620001bc816200016a565b6040870151909450620001cf816200016a565b6060870151909350620001e2816200016a565b6080870151909250620001f5816200016a565b809150509295509295909350565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614ec5620002fa600039600081816105890152818161187801528181612646015261302601526000818161052901528181610d7b01528181610e6201528181610ed301528181611802015281816125c10152612fa601526000818161042d0152818161120901528181611841015281816125290152612f260152600081816104540152818161127e015281816113390152611ba1015260006105c3015260006139d001526000613a1f015260006139fa015260006139530152600061397d015260006139a70152614ec56000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80635865c60c1161013b578063ab269b2d116100b8578063ca0de8821161007c578063ca0de8821461061e578063d72d8dd614610645578063e65797ad1461064d578063fabc1cbc146106f0578063fd39105a1461070357600080fd5b8063ab269b2d146105ab578063b1344271146105be578063b8347acc146105e5578063c66ab9ca146105f8578063c81b1ff41461060b57600080fd5b80636347c900116100ff5780636347c90014610511578063683048351461052457806385020d491461054b578063886f11951461056b5780639e9923c21461058457600080fd5b80635865c60c146104af578063595c6a67146104cf5780635ac86ab7146104d75780635b0b829f146104f65780635c975abb1461050957600080fd5b8063296bb064116101c95780633561deb11161018d5780633561deb1146104285780633998fdd31461044f578063455a43fc146104765780634b76b9d514610489578063526ea94e1461049c57600080fd5b8063296bb064146103b157806329d1e0c3146103c45780632cdd1e86146103d75780633064620d146103ea5780633431af251461041557600080fd5b806313542a4e1161021057806313542a4e1461031c578063136439dd146103455780631478851f14610358578063250075761461038b57806328f61b311461039e57600080fd5b80630159f1ce1461024d578063054310e61461029b578063055a62b6146102c65780630cf4b767146102f457806310d67a2f14610309575b600080fd5b61026061025b366004613dda565b61073f565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060015b60405180910390f35b6037546102ae906001600160a01b031681565b6040516001600160a01b039091168152602001610292565b6102e66102d4366004613dfc565b60009081526033602052604090205490565b604051908152602001610292565b610307610302366004613f01565b6107d0565b005b610307610317366004613f5a565b6108d1565b6102e661032a366004613f5a565b6001600160a01b031660009081526034602052604090205490565b610307610353366004613dfc565b610984565b61037b610366366004613dfc565b60356020526000908152604090205460ff1681565b6040519015158152602001610292565b610307610399366004614075565b610ac1565b6038546102ae906001600160a01b031681565b6102ae6103bf366004613dfc565b6111f0565b6103076103d2366004613f5a565b61127c565b6103076103e5366004613f5a565b611337565b6103fd6103f8366004614189565b6113f2565b6040516001600160c01b039091168152602001610292565b6103fd610423366004613dfc565b6115f3565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6103076104843660046141c1565b6116a9565b61030761049736600461429d565b6116e2565b6103076104aa36600461437a565b611a0e565b6104c26104bd366004613f5a565b611a5f565b604051610292919061441d565b610307611ad3565b61037b6104e5366004614450565b6001805460ff9092161b9081161490565b61030761050436600461446b565b611b9f565b6001546102e6565b6102ae61051f366004613dfc565b611c5f565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61055e61055936600461449f565b611c89565b6040516102929190614544565b6000546102ae906201000090046001600160a01b031681565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102e66105b93660046145d5565b611fc4565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6103076105f3366004614689565b612028565b6103076106063660046146f0565b6120b3565b61030761061936600461437a565b61211e565b6102e67fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9281565b6036546102e6565b6106bc61065b366004614450565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526032825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff908116918301919091529282015190921690820152606001610292565b6103076106fe366004613dfc565b612161565b610732610711366004613f5a565b6001600160a01b031660009081526034602052604090206001015460ff1690565b6040516102929190614774565b6040805160608101825260008082526020820181905291810191909152600083815260336020526040902080548390811061077c5761077c614782565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b60013360009081526034602052604090206001015460ff1660028111156107f9576107f96143e5565b146108855760405162461bcd60e51b815260206004820152604b60248201527f424c535265676973747279436f6f7264696e61746f7257697468496e6469636960448201527f65732e757064617465536f636b65743a206f70657261746f72206973206e6f7460648201526a081c9959da5cdd195c995960aa1b608482015260a4015b60405180910390fd5b33600090815260346020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa906108c69084906147f0565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109489190614803565b6001600160a01b0316336001600160a01b0316146109785760405162461bcd60e51b815260040161087c90614820565b610981816122bd565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f5919061486a565b610a115760405162461bcd60e51b815260040161087c9061488c565b60015481811614610a8a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020016108c6565b600180546000919081161415610ae95760405162461bcd60e51b815260040161087c906148d4565b6000610b2e338b8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123c292505050565b6040805160018082528183019092529192506000919060208083019080368337019050509050610b5d89612a15565b81600081518110610b7057610b70614782565b602002602001018181525050610bf381600081518110610b9257610b92614782565b60200260200101518787808060200260200160405190810160405280939291908181526020016000905b82821015610be857610bd96080830286013681900381019061490b565b81526020019060010190610bbc565b505050505086612a58565b6000805b8b8110156111e15760008d8d83818110610c1357610c13614782565b919091013560f81c6000818152603260209081526040918290208251606081018452905463ffffffff811680835261ffff600160201b8304811694840194909452600160301b90910490921692810192909252885192945090925090879085908110610c8157610c81614782565b602002602001015163ffffffff1611610c9b5750506111cf565b8160ff168a8a86818110610cb157610cb1614782565b610cc79260206080909202019081019150614450565b60ff1614610d605760405162461bcd60e51b81526020600482015260666024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a2071756f72756d4e756d626572206e6f74207468652073616d65206173206084820152651cda59db995960d21b60a482015260c40161087c565b604051630c8f739d60e41b815260ff831660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c8f739d090602401602060405180830381865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190614927565b90506000603460008d8d88818110610e0857610e08614782565b9050608002016020016020810190610e209190613f5a565b6001600160a01b039081168252602082019290925260409081016000908120549151631aad4e3560e21b81526004810183905260ff88166024820152919350917f00000000000000000000000000000000000000000000000000000000000000001690636ab538d490604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd9190614927565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ab538d48a600081518110610f1357610f13614782565b6020026020010151886040518363ffffffff1660e01b8152600401610f4592919091825260ff16602082015260400190565b602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190614927565b602086015190915061271090610fa09061ffff1684614966565b610faa9190614995565b6001600160601b0316816001600160601b03161161106a5760405162461bcd60e51b815260206004820152607d6024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a207265676973746572696e67206f70657261746f7220686173206c65737360848201527f207468616e206b69636b424950734f664f70657261746f725374616b6500000060a482015260c40161087c565b6040850151612710906110819061ffff1686614966565b61108b9190614995565b6001600160601b0316826001600160601b0316106111445760405162461bcd60e51b81526020600482015260766024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a206f70657261746f7220746f206b69636b20686173206d6f7265207468616084820152756e206b69636b424950534f66546f74616c5374616b6560501b60a482015260c40161087c565b8761114e816149c9565b9850505050505050506111cf88888381811061116c5761116c614782565b90506080020160200160208101906111849190613f5a565b8e838f6111928260016149e4565b9261119f939291906149fc565b8b8b868181106111b1576111b1614782565b9050608002016040018036038101906111ca9190614a26565b612c25565b806111d9816149c9565b915050610bf7565b50505050505050505050505050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ca9190614803565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190614803565b6001600160a01b0316336001600160a01b03161461132e5760405162461bcd60e51b815260040161087c90614a42565b610981816131d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190614803565b6001600160a01b0316336001600160a01b0316146113e95760405162461bcd60e51b815260040161087c90614a42565b6109818161323b565b600083815260336020526040812080548291908490811061141557611415614782565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156115155760405162461bcd60e51b815260206004820152607f6024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d20616674657220626c6f636b4e756d6265720060a482015260c40161087c565b8363ffffffff16816020015163ffffffff16118061153b5750602081015163ffffffff16155b6115e75760405162461bcd60e51b81526020600482015260806024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d206265666f726520626c6f636b4e756d62657260a482015260c40161087c565b60400151949350505050565b60008181526033602052604081205480158061164f57506000838152603360205260409020611623600183614abe565b8154811061163357611633614782565b600091825260209091200154600160201b900463ffffffff1615155b1561165d5750600092915050565b6000838152603360205260409020611676600183614abe565b8154811061168657611686614782565b600091825260209091200154600160401b90046001600160c01b03169392505050565b60018054600290811614156116d05760405162461bcd60e51b815260040161087c906148d4565b6116dc33858585612c25565b50505050565b600054610100900460ff16158080156117025750600054600160ff909116105b8061171c5750303b15801561171c575060005460ff166001145b61177f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161087c565b6000805460ff1916600117905580156117a2576000805461ff0019166101001790555b6117ac83836132a4565b6117b5866131d2565b6117be8561323b565b603680546001808201835560008390527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b891820180546001600160a01b03199081167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116918217909355855480850187558501805483167f0000000000000000000000000000000000000000000000000000000000000000851617905585549384019095559190920180549091167f0000000000000000000000000000000000000000000000000000000000000000909216919091179055845160408051639aa1653d60e01b81529051919291639aa1653d916004808201926020929091908290030181865afa1580156118e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119049190614ad5565b61ffff16146119785760405162461bcd60e51b81526020600482015260466024820152600080516020614e7083398151915260448201527f733a206f70657261746f722073657420706172616d73206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a40161087c565b60005b84518160ff1610156119bf576119ad81868360ff16815181106119a0576119a0614782565b6020026020010151613390565b806119b781614af2565b91505061197b565b508015611a06576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600180546000919081161415611a365760405162461bcd60e51b815260040161087c906148d4565b600080611a4584860186614b12565b91509150611a56338888858561343d565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152603460209081526040918290208251808401909352805483526001810154909183019060ff166002811115611ab957611ab96143e5565b6002811115611aca57611aca6143e5565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061486a565b611b605760405162461bcd60e51b815260040161087c9061488c565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c219190614803565b6001600160a01b0316336001600160a01b031614611c515760405162461bcd60e51b815260040161087c90614a42565b611c5b8282613390565b5050565b60368181548110611c6f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600082516001600160401b03811115611ca657611ca6613e15565b604051908082528060200260200182016040528015611ccf578160200160208202803683370190505b50905060005b8351811015611fbc57600060336000868481518110611cf657611cf6614782565b6020026020010151815260200190815260200160002080549050905060005b8163ffffffff168163ffffffff161015611fa7578663ffffffff1660336000888681518110611d4657611d46614782565b6020026020010151815260200190815260200160002060018385611d6a9190614b60565b611d749190614b60565b63ffffffff1681548110611d8a57611d8a614782565b60009182526020909120015463ffffffff1611611f955760336000878581518110611db757611db7614782565b6020026020010151815260200190815260200160002060018284611ddb9190614b60565b611de59190614b60565b63ffffffff1681548110611dfb57611dfb614782565b600091825260209091200154600160201b900463ffffffff161580611e9757508663ffffffff1660336000888681518110611e3857611e38614782565b6020026020010151815260200190815260200160002060018385611e5c9190614b60565b611e669190614b60565b63ffffffff1681548110611e7c57611e7c614782565b600091825260209091200154600160201b900463ffffffff16115b611f4e5760405162461bcd60e51b81526020600482015260826024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d6170496e646963657342794f706572617460648201527f6f724964734174426c6f636b4e756d6265723a206f70657261746f724964206860848201527f6173206e6f2071756f72756d4269746d61707320617420626c6f636b4e756d6260a48201526132b960f11b60c482015260e40161087c565b6001611f5a8284614b60565b611f649190614b60565b848481518110611f7657611f76614782565b602002602001019063ffffffff16908163ffffffff1681525050611fa7565b80611f9f81614b85565b915050611d15565b50508080611fb4906149c9565b915050611cd5565b509392505050565b600061201d7fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9286868686604051602001612002959493929190614ba9565b60405160208183030381529060405280519060200120613554565b90505b949350505050565b6038546001600160a01b031633146120a75760405162461bcd60e51b81526020600482015260486024820152600080516020614e7083398151915260448201527f732e6f6e6c79456a6563746f723a2063616c6c6572206973206e6f74207468656064820152671032b532b1ba37b960c11b608482015260a40161087c565b6116dc84848484612c25565b6001805460009190811614156120db5760405162461bcd60e51b815260040161087c906148d4565b611a063387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061343d92505050565b60018054600290811614156121455760405162461bcd60e51b815260040161087c906148d4565b600061215383850185614a26565b9050611a0633878784612c25565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d89190614803565b6001600160a01b0316336001600160a01b0316146122085760405162461bcd60e51b815260040161087c90614820565b6001541981196001541916146122865760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108c6565b6001600160a01b03811661234b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161087c565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060600061240586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135a292505050565b90506001600160c01b0381111561249a5760405162461bcd60e51b815260206004820152606b6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a2071756f72756d4269746d61702065786365656473206f66206d61782060848201526a6269746d61702073697a6560a81b60a482015260c40161087c565b8061250f5760405162461bcd60e51b815260206004820152605c6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a2071756f72756d4269746d61702063616e6e6f74206265203000000000608482015260a40161087c565b6040516303ce4bad60e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906303ce4bad90612564908b908b908b908b90600401614c66565b6020604051808303816000875af1158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ca3565b604051632550477760e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325504777906125fc908b9085908c908c90600401614cbc565b600060405180830381600087803b15801561261657600080fd5b505af115801561262a573d6000803e3d6000fd5b505060405162bff04d60e01b8152600092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062bff04d9061267f9085908c908c90600401614cee565b6000604051808303816000875af115801561269e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126c69190810190614d08565b6000838152603360205260409020549091508015801590612726575060008381526033602052604090206126fb600183614abe565b8154811061270b5761270b614782565b600091825260209091200154600160201b900463ffffffff16155b1561287d576000838152603360205260408120612744600184614abe565b8154811061275457612754614782565b6000918252602090912001546001600160c01b03600160401b9091048181169250861616156128215760405162461bcd60e51b81526020600482015260856024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a206f70657261746f7220616c726561647920726567697374657265642060848201527f666f7220736f6d652071756f72756d73206265696e672072656769737465726560a48201526432103337b960d91b60c482015260e40161087c565b6000848152603360205260409020948117944390612840600185614abe565b8154811061285057612850614782565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff160217905550505b6000838152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038b8116848701908152855460018082018855968a52888a2095519501805493519151909216600160401b026001600160401b03918516600160201b0267ffffffffffffffff19909416959094169490941791909117929092161790556001600160a01b038e168452603490925290912081015460ff166002811115612935576129356143e5565b146129ce57604080518082018252848152600160208083018281526001600160a01b038f166000908152603490925293902082518155925183820180549394939192909160ff191690836002811115612990576129906143e5565b0217905550506040518491506001600160a01b038c16907fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b827fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516129fe91906147f0565b60405180910390a250925050505b95945050505050565b600081600001518260200151604051602001612a3b929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60208082015160009081526035909152604090205460ff1615612b1d5760405162461bcd60e51b81526020600482015260776024820152600080516020614e7083398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f7665722073616c7420616c7265616479207573656400000000000000000060a482015260c40161087c565b4281604001511015612bd15760405162461bcd60e51b81526020600482015260776024820152600080516020614e7083398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f766572207369676e6174757265206578706972656400000000000000000060a482015260c40161087c565b6020808201805160009081526035909252604091829020805460ff19166001179055603754905191830151612c20926001600160a01b0390921691612c199187918791611fc4565b835161372f565b505050565b60016001600160a01b03851660009081526034602052604090206001015460ff166002811115612c5757612c576143e5565b14612cde5760405162461bcd60e51b81526020600482015260606024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f742072656769737465726564608482015260a40161087c565b6001600160a01b038416600090815260346020526040902054612d0082612a15565b8114612d9c5760405162461bcd60e51b815260206004820152606b6024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72496420646f6573206e6f74206d617463682060848201526a0e0eac4d6caf240d0c2e6d60ab1b60a482015260c40161087c565b6000612ddd85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135a292505050565b60008381526033602052604081205491925090612dfc90600190614abe565b60008481526033602052604081208054929350909183908110612e2157612e21614782565b6000918252602082200154600160401b90049384166001600160c01b0390811694169150612e4e846138e9565b9050805160001415612f025760405162461bcd60e51b81526020600482015260806024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f74207265676973746572656460848201527f20666f7220616e79206f66207468652070726f76696465642071756f72756d7360a482015260c40161087c565b60405163121b4d9560e11b81526001600160c01b0383168514906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906324369b2a90612f5f908d9086908c90600401614da1565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612fdf9089908690600401614ddd565b600060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061305f9089908690600401614ddd565b600060405180830381600087803b15801561307957600080fd5b505af115801561308d573d6000803e3d6000fd5b50505060008781526033602052604090208054439250869081106130b3576130b3614782565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff16021790555080613177576000868152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038c198b168116958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556131c6565b6001600160a01b038a16600081815260346020526040808220600101805460ff19166002179055518892917f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e491a35b50505050505050505050565b603754604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1603780546001600160a01b0319166001600160a01b0392909216919091179055565b603854604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1603880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546201000090046001600160a01b03161580156132cb57506001600160a01b03821615155b61334d5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611c5b826122bd565b60ff8216600081815260326020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b600061344c86868686866123c2565b905060005b8151811015611a56576032600087878481811061347057613470614782565b919091013560f81c825250602081019190915260400160002054825163ffffffff909116908390839081106134a7576134a7614782565b602002602001015163ffffffff1611156135425760405162461bcd60e51b815260206004820152606e6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f72416e644e6f4f76657266696c6c656451756f72756d733a2071756f72756d60848201526d081a5cc81bdd995c999a5b1b195960921b60a482015260c40161087c565b8061354c816149c9565b915050613451565b60006107ca613561613946565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60006101008251111561362b5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161087c565b815161363957506000919050565b6000808360008151811061364f5761364f614782565b0160200151600160f89190911c81901b92505b84518110156137265784818151811061367d5761367d614782565b0160200151600160f89190911c1b91508282116137125760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161087c565b9181179161371f816149c9565b9050613662565b50909392505050565b6001600160a01b0383163b1561384957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061376f9086908690600401614ddd565b602060405180830381865afa15801561378c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b09190614df6565b6001600160e01b03191614612c205760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161087c565b826001600160a01b031661385d8383613a6d565b6001600160a01b031614612c205760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161087c565b60606000805b61010081101561393f576001811b91508382161561392f57828160f81b60405160200161391d929190614e20565b60405160208183030381529060405292505b613938816149c9565b90506138ef565b5050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561399f57507f000000000000000000000000000000000000000000000000000000000000000046145b156139c957507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000613a7c8585613a89565b91509150611fbc81613af9565b600080825160411415613ac05760208301516040840151606085015160001a613ab487828585613cb4565b94509450505050613af2565b825160401415613aea5760208301516040840151613adf868383613da1565b935093505050613af2565b506000905060025b9250929050565b6000816004811115613b0d57613b0d6143e5565b1415613b165750565b6001816004811115613b2a57613b2a6143e5565b1415613b785760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087c565b6002816004811115613b8c57613b8c6143e5565b1415613bda5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087c565b6003816004811115613bee57613bee6143e5565b1415613c475760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087c565b6004816004811115613c5b57613c5b6143e5565b14156109815760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161087c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613ceb5750600090506003613d98565b8460ff16601b14158015613d0357508460ff16601c14155b15613d145750600090506004613d98565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613d68573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d9157600060019250925050613d98565b9150600090505b94509492505050565b6000806001600160ff1b03831681613dbe60ff86901c601b6149e4565b9050613dcc87828885613cb4565b935093505050935093915050565b60008060408385031215613ded57600080fd5b50508035926020909101359150565b600060208284031215613e0e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613e4d57613e4d613e15565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613e7b57613e7b613e15565b604052919050565b60006001600160401b03831115613e9c57613e9c613e15565b613eaf601f8401601f1916602001613e53565b9050828152838383011115613ec357600080fd5b828260208301376000602084830101529392505050565b600082601f830112613eeb57600080fd5b613efa83833560208501613e83565b9392505050565b600060208284031215613f1357600080fd5b81356001600160401b03811115613f2957600080fd5b61202084828501613eda565b6001600160a01b038116811461098157600080fd5b8035613f5581613f35565b919050565b600060208284031215613f6c57600080fd5b8135613efa81613f35565b60008083601f840112613f8957600080fd5b5081356001600160401b03811115613fa057600080fd5b602083019150836020828501011115613af257600080fd5b600060408284031215613fca57600080fd5b604051604081018181106001600160401b0382111715613fec57613fec613e15565b604052823581526020928301359281019290925250919050565b60006060828403121561401857600080fd5b614020613e2b565b905081356001600160401b0381111561403857600080fd5b8201601f8101841361404957600080fd5b61405884823560208401613e83565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060c0898b03121561409157600080fd5b88356001600160401b03808211156140a857600080fd5b6140b48c838d01613f77565b909a5098508891506140c98c60208d01613fb8565b975060608b01359150808211156140df57600080fd5b6140eb8c838d01613f77565b909750955060808b013591508082111561410457600080fd5b818b0191508b601f83011261411857600080fd5b81358181111561412757600080fd5b8c60208260071b850101111561413c57600080fd5b6020830195508094505060a08b013591508082111561415a57600080fd5b506141678b828c01614006565b9150509295985092959890939650565b63ffffffff8116811461098157600080fd5b60008060006060848603121561419e57600080fd5b8335925060208401356141b081614177565b929592945050506040919091013590565b6000806000606084860312156141d657600080fd5b83356001600160401b038111156141ec57600080fd5b6141f886828701613f77565b909450925061420c90508560208601613fb8565b90509250925092565b60006001600160401b0382111561422e5761422e613e15565b5060051b60200190565b61ffff8116811461098157600080fd5b60006060828403121561425a57600080fd5b614262613e2b565b9050813561426f81614177565b8152602082013561427f81614238565b6020820152604082013561429281614238565b604082015292915050565b600080600080600060a086880312156142b557600080fd5b85356142c081613f35565b94506020868101356142d181613f35565b945060408701356001600160401b038111156142ec57600080fd5b8701601f810189136142fd57600080fd5b803561431061430b82614215565b613e53565b8181526060918202830184019184820191908c84111561432f57600080fd5b938501935b83851015614355576143468d86614248565b83529384019391850191614334565b819850614363818d01613f4a565b9a9d999c50979a6080013598975050505050505050565b6000806000806040858703121561439057600080fd5b84356001600160401b03808211156143a757600080fd5b6143b388838901613f77565b909650945060208701359150808211156143cc57600080fd5b506143d987828801613f77565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061441957634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614438908401826143fb565b5092915050565b803560ff81168114613f5557600080fd5b60006020828403121561446257600080fd5b613efa8261443f565b6000806080838503121561447e57600080fd5b6144878361443f565b91506144968460208501614248565b90509250929050565b600080604083850312156144b257600080fd5b82356144bd81614177565b91506020838101356001600160401b038111156144d957600080fd5b8401601f810186136144ea57600080fd5b80356144f861430b82614215565b81815260059190911b8201830190838101908883111561451757600080fd5b928401925b828410156145355783358252928401929084019061451c565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561458257835163ffffffff1683529284019291840191600101614560565b50909695505050505050565b6000608082840312156145a057600080fd5b6145a8613e2b565b90506145b38261443f565b815260208201356145c381613f35565b60208201526142928360408401613fb8565b60008060008060808086880312156145ec57600080fd5b853594506020808701356001600160401b0381111561460a57600080fd5b8701601f8101891361461b57600080fd5b803561462961430b82614215565b81815260079190911b8201830190838101908b83111561464857600080fd5b928401925b8284101561466e5761465f8c8561458e565b8252928501929084019061464d565b989b989a505050506040870135966060013595945050505050565b6000806000806080858703121561469f57600080fd5b84356146aa81613f35565b935060208501356001600160401b038111156146c557600080fd5b6146d187828801613f77565b90945092506146e590508660408701613fb8565b905092959194509250565b60008060008060006080868803121561470857600080fd5b85356001600160401b038082111561471f57600080fd5b61472b89838a01613f77565b90975095508591506147408960208a01613fb8565b9450606088013591508082111561475657600080fd5b5061476388828901613f77565b969995985093965092949392505050565b602081016107ca82846143fb565b634e487b7160e01b600052603260045260246000fd5b60005b838110156147b357818101518382015260200161479b565b838111156116dc5750506000910152565b600081518084526147dc816020860160208601614798565b601f01601f19169290920160200192915050565b602081526000613efa60208301846147c4565b60006020828403121561481557600080fd5b8151613efa81613f35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561487c57600080fd5b81518015158114613efa57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60006080828403121561491d57600080fd5b613efa838361458e565b60006020828403121561493957600080fd5b81516001600160601b0381168114613efa57600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038083168185168183048111821515161561498c5761498c614950565b02949350505050565b60006001600160601b03808416806149bd57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006000198214156149dd576149dd614950565b5060010190565b600082198211156149f7576149f7614950565b500190565b60008085851115614a0c57600080fd5b83861115614a1957600080fd5b5050820193919092039150565b600060408284031215614a3857600080fd5b613efa8383613fb8565b6020808252606290820152600080516020614e7083398151915260408201527f732e6f6e6c79536572766963654d616e616765724f776e65723a2063616c6c6560608201527f72206973206e6f74207468652073657276696365206d616e61676572206f776e60808201526132b960f11b60a082015260c00190565b600082821015614ad057614ad0614950565b500390565b600060208284031215614ae757600080fd5b8151613efa81614238565b600060ff821660ff811415614b0957614b09614950565b60010192915050565b60008060608385031215614b2557600080fd5b614b2f8484613fb8565b915060408301356001600160401b03811115614b4a57600080fd5b614b5685828601613eda565b9150509250929050565b600063ffffffff83811690831681811015614b7d57614b7d614950565b039392505050565b600063ffffffff80831681811415614b9f57614b9f614950565b6001019392505050565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b81811015614c24578551805160ff168452858101516001600160a01b031686850152840151614c108585018280518252602090810151910152565b509484019460809290920191600101614bd5565b5050606086019790975250505050608001529392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385168152608060208201819052600090614c8b9083018587614c3d565b83516040840152602084015160608401529050612a0c565b600060208284031215614cb557600080fd5b5051919050565b60018060a01b0385168152836020820152606060408201526000614ce4606083018486614c3d565b9695505050505050565b83815260406020820152600061201d604083018486614c3d565b60006020808385031215614d1b57600080fd5b82516001600160401b03811115614d3157600080fd5b8301601f81018513614d4257600080fd5b8051614d5061430b82614215565b81815260059190911b82018301908381019087831115614d6f57600080fd5b928401925b82841015614d96578351614d8781614177565b82529284019290840190614d74565b979650505050505050565b6001600160a01b0384168152608060208201819052600090614dc5908301856147c4565b83516040840152602084015160608401529050612020565b82815260406020820152600061202060408301846147c4565b600060208284031215614e0857600080fd5b81516001600160e01b031981168114613efa57600080fd5b60008351614e32818460208801614798565b6001600160f81b031993909316919092019081526001019291505056fe732e5f72656769737465724f70657261746f7257697468436f6f7264696e6174424c535265676973747279436f6f7264696e61746f7257697468496e64696365a2646970667358221220bdc86887305ca2b37c44bbaf1bdd8bea2ac5359799e47269e839aa350bc710ac64736f6c634300080c0033", -} - -// ContractBLSRegistryCoordinatorWithIndicesABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractBLSRegistryCoordinatorWithIndicesMetaData.ABI instead. -var ContractBLSRegistryCoordinatorWithIndicesABI = ContractBLSRegistryCoordinatorWithIndicesMetaData.ABI - -// ContractBLSRegistryCoordinatorWithIndicesBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ContractBLSRegistryCoordinatorWithIndicesMetaData.Bin instead. -var ContractBLSRegistryCoordinatorWithIndicesBin = ContractBLSRegistryCoordinatorWithIndicesMetaData.Bin - -// DeployContractBLSRegistryCoordinatorWithIndices deploys a new Ethereum contract, binding an instance of ContractBLSRegistryCoordinatorWithIndices to it. -func DeployContractBLSRegistryCoordinatorWithIndices(auth *bind.TransactOpts, backend bind.ContractBackend, _slasher common.Address, _serviceManager common.Address, _stakeRegistry common.Address, _blsPubkeyRegistry common.Address, _indexRegistry common.Address) (common.Address, *types.Transaction, *ContractBLSRegistryCoordinatorWithIndices, error) { - parsed, err := ContractBLSRegistryCoordinatorWithIndicesMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBLSRegistryCoordinatorWithIndicesBin), backend, _slasher, _serviceManager, _stakeRegistry, _blsPubkeyRegistry, _indexRegistry) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ContractBLSRegistryCoordinatorWithIndices{ContractBLSRegistryCoordinatorWithIndicesCaller: ContractBLSRegistryCoordinatorWithIndicesCaller{contract: contract}, ContractBLSRegistryCoordinatorWithIndicesTransactor: ContractBLSRegistryCoordinatorWithIndicesTransactor{contract: contract}, ContractBLSRegistryCoordinatorWithIndicesFilterer: ContractBLSRegistryCoordinatorWithIndicesFilterer{contract: contract}}, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesMethods is an auto generated interface around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesMethods interface { - ContractBLSRegistryCoordinatorWithIndicesCalls - ContractBLSRegistryCoordinatorWithIndicesTransacts - ContractBLSRegistryCoordinatorWithIndicesFilters -} - -// ContractBLSRegistryCoordinatorWithIndicesCalls is an auto generated interface that defines the call methods available for an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesCalls interface { - OPERATORCHURNAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) - - BlsPubkeyRegistry(opts *bind.CallOpts) (common.Address, error) - - CalculateOperatorChurnApprovalDigestHash(opts *bind.CallOpts, registeringOperatorId [32]byte, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) - - ChurnApprover(opts *bind.CallOpts) (common.Address, error) - - Ejector(opts *bind.CallOpts) (common.Address, error) - - GetCurrentQuorumBitmapByOperatorId(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) - - GetOperator(opts *bind.CallOpts, operator common.Address) (IRegistryCoordinatorOperator, error) - - GetOperatorFromId(opts *bind.CallOpts, operatorId [32]byte) (common.Address, error) - - GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) - - GetOperatorSetParams(opts *bind.CallOpts, quorumNumber uint8) (IBLSRegistryCoordinatorWithIndicesOperatorSetParam, error) - - GetOperatorStatus(opts *bind.CallOpts, operator common.Address) (uint8, error) - - GetQuorumBitmapByOperatorIdAtBlockNumberByIndex(opts *bind.CallOpts, operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) - - GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) - - GetQuorumBitmapUpdateByOperatorIdByIndex(opts *bind.CallOpts, operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) - - GetQuorumBitmapUpdateByOperatorIdLength(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) - - IndexRegistry(opts *bind.CallOpts) (common.Address, error) - - IsChurnApproverSaltUsed(opts *bind.CallOpts, arg0 [32]byte) (bool, error) - - NumRegistries(opts *bind.CallOpts) (*big.Int, error) - - Paused(opts *bind.CallOpts, index uint8) (bool, error) - - Paused0(opts *bind.CallOpts) (*big.Int, error) - - PauserRegistry(opts *bind.CallOpts) (common.Address, error) - - Registries(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) - - ServiceManager(opts *bind.CallOpts) (common.Address, error) - - Slasher(opts *bind.CallOpts) (common.Address, error) - - StakeRegistry(opts *bind.CallOpts) (common.Address, error) -} - -// ContractBLSRegistryCoordinatorWithIndicesTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesTransacts interface { - DeregisterOperatorWithCoordinator(opts *bind.TransactOpts, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) - - DeregisterOperatorWithCoordinator0(opts *bind.TransactOpts, quorumNumbers []byte, deregistrationData []byte) (*types.Transaction, error) - - EjectOperatorFromCoordinator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) - - Initialize(opts *bind.TransactOpts, _churnApprover common.Address, _ejector common.Address, _operatorSetParams []IBLSRegistryCoordinatorWithIndicesOperatorSetParam, _pauserRegistry common.Address, _initialPausedStatus *big.Int) (*types.Transaction, error) - - Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) - - PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) - - RegisterOperatorWithCoordinator(opts *bind.TransactOpts, quorumNumbers []byte, pubkey BN254G1Point, socket string, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, signatureWithSaltAndExpiry ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) - - RegisterOperatorWithCoordinator0(opts *bind.TransactOpts, quorumNumbers []byte, registrationData []byte) (*types.Transaction, error) - - RegisterOperatorWithCoordinator1(opts *bind.TransactOpts, quorumNumbers []byte, pubkey BN254G1Point, socket string) (*types.Transaction, error) - - SetChurnApprover(opts *bind.TransactOpts, _churnApprover common.Address) (*types.Transaction, error) - - SetEjector(opts *bind.TransactOpts, _ejector common.Address) (*types.Transaction, error) - - SetOperatorSetParams(opts *bind.TransactOpts, quorumNumber uint8, operatorSetParam IBLSRegistryCoordinatorWithIndicesOperatorSetParam) (*types.Transaction, error) - - SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) - - Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) - - UpdateSocket(opts *bind.TransactOpts, socket string) (*types.Transaction, error) -} - -// ContractBLSRegistryCoordinatorWithIndicesFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesFilters interface { - FilterChurnApproverUpdated(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator, error) - WatchChurnApproverUpdated(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated) (event.Subscription, error) - ParseChurnApproverUpdated(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated, error) - - FilterEjectorUpdated(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator, error) - WatchEjectorUpdated(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated) (event.Subscription, error) - ParseEjectorUpdated(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated, error) - - FilterInitialized(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesInitializedIterator, error) - WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesInitialized) (event.Subscription, error) - ParseInitialized(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesInitialized, error) - - FilterOperatorDeregistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator, error) - WatchOperatorDeregistered(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) - ParseOperatorDeregistered(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered, error) - - FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator, error) - WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) - ParseOperatorRegistered(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered, error) - - FilterOperatorSetParamsUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator, error) - WatchOperatorSetParamsUpdated(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated, quorumNumber []uint8) (event.Subscription, error) - ParseOperatorSetParamsUpdated(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated, error) - - FilterOperatorSocketUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator, error) - WatchOperatorSocketUpdate(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate, operatorId [][32]byte) (event.Subscription, error) - ParseOperatorSocketUpdate(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate, error) - - FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractBLSRegistryCoordinatorWithIndicesPausedIterator, error) - WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesPaused, account []common.Address) (event.Subscription, error) - ParsePaused(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesPaused, error) - - FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator, error) - WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet) (event.Subscription, error) - ParsePauserRegistrySet(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet, error) - - FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator, error) - WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesUnpaused, account []common.Address) (event.Subscription, error) - ParseUnpaused(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesUnpaused, error) -} - -// ContractBLSRegistryCoordinatorWithIndices is an auto generated Go binding around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndices struct { - ContractBLSRegistryCoordinatorWithIndicesCaller // Read-only binding to the contract - ContractBLSRegistryCoordinatorWithIndicesTransactor // Write-only binding to the contract - ContractBLSRegistryCoordinatorWithIndicesFilterer // Log filterer for contract events -} - -// ContractBLSRegistryCoordinatorWithIndices implements the ContractBLSRegistryCoordinatorWithIndicesMethods interface. -var _ ContractBLSRegistryCoordinatorWithIndicesMethods = (*ContractBLSRegistryCoordinatorWithIndices)(nil) - -// ContractBLSRegistryCoordinatorWithIndicesCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSRegistryCoordinatorWithIndicesCaller implements the ContractBLSRegistryCoordinatorWithIndicesCalls interface. -var _ ContractBLSRegistryCoordinatorWithIndicesCalls = (*ContractBLSRegistryCoordinatorWithIndicesCaller)(nil) - -// ContractBLSRegistryCoordinatorWithIndicesTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSRegistryCoordinatorWithIndicesTransactor implements the ContractBLSRegistryCoordinatorWithIndicesTransacts interface. -var _ ContractBLSRegistryCoordinatorWithIndicesTransacts = (*ContractBLSRegistryCoordinatorWithIndicesTransactor)(nil) - -// ContractBLSRegistryCoordinatorWithIndicesFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractBLSRegistryCoordinatorWithIndicesFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractBLSRegistryCoordinatorWithIndicesFilterer implements the ContractBLSRegistryCoordinatorWithIndicesFilters interface. -var _ ContractBLSRegistryCoordinatorWithIndicesFilters = (*ContractBLSRegistryCoordinatorWithIndicesFilterer)(nil) - -// ContractBLSRegistryCoordinatorWithIndicesSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ContractBLSRegistryCoordinatorWithIndicesSession struct { - Contract *ContractBLSRegistryCoordinatorWithIndices // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSRegistryCoordinatorWithIndicesCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ContractBLSRegistryCoordinatorWithIndicesCallerSession struct { - Contract *ContractBLSRegistryCoordinatorWithIndicesCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ContractBLSRegistryCoordinatorWithIndicesTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ContractBLSRegistryCoordinatorWithIndicesTransactorSession struct { - Contract *ContractBLSRegistryCoordinatorWithIndicesTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractBLSRegistryCoordinatorWithIndicesRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesRaw struct { - Contract *ContractBLSRegistryCoordinatorWithIndices // Generic contract binding to access the raw methods on -} - -// ContractBLSRegistryCoordinatorWithIndicesCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesCallerRaw struct { - Contract *ContractBLSRegistryCoordinatorWithIndicesCaller // Generic read-only contract binding to access the raw methods on -} - -// ContractBLSRegistryCoordinatorWithIndicesTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractBLSRegistryCoordinatorWithIndicesTransactorRaw struct { - Contract *ContractBLSRegistryCoordinatorWithIndicesTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewContractBLSRegistryCoordinatorWithIndices creates a new instance of ContractBLSRegistryCoordinatorWithIndices, bound to a specific deployed contract. -func NewContractBLSRegistryCoordinatorWithIndices(address common.Address, backend bind.ContractBackend) (*ContractBLSRegistryCoordinatorWithIndices, error) { - contract, err := bindContractBLSRegistryCoordinatorWithIndices(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndices{ContractBLSRegistryCoordinatorWithIndicesCaller: ContractBLSRegistryCoordinatorWithIndicesCaller{contract: contract}, ContractBLSRegistryCoordinatorWithIndicesTransactor: ContractBLSRegistryCoordinatorWithIndicesTransactor{contract: contract}, ContractBLSRegistryCoordinatorWithIndicesFilterer: ContractBLSRegistryCoordinatorWithIndicesFilterer{contract: contract}}, nil -} - -// NewContractBLSRegistryCoordinatorWithIndicesCaller creates a new read-only instance of ContractBLSRegistryCoordinatorWithIndices, bound to a specific deployed contract. -func NewContractBLSRegistryCoordinatorWithIndicesCaller(address common.Address, caller bind.ContractCaller) (*ContractBLSRegistryCoordinatorWithIndicesCaller, error) { - contract, err := bindContractBLSRegistryCoordinatorWithIndices(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesCaller{contract: contract}, nil -} - -// NewContractBLSRegistryCoordinatorWithIndicesTransactor creates a new write-only instance of ContractBLSRegistryCoordinatorWithIndices, bound to a specific deployed contract. -func NewContractBLSRegistryCoordinatorWithIndicesTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractBLSRegistryCoordinatorWithIndicesTransactor, error) { - contract, err := bindContractBLSRegistryCoordinatorWithIndices(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesTransactor{contract: contract}, nil -} - -// NewContractBLSRegistryCoordinatorWithIndicesFilterer creates a new log filterer instance of ContractBLSRegistryCoordinatorWithIndices, bound to a specific deployed contract. -func NewContractBLSRegistryCoordinatorWithIndicesFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractBLSRegistryCoordinatorWithIndicesFilterer, error) { - contract, err := bindContractBLSRegistryCoordinatorWithIndices(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesFilterer{contract: contract}, nil -} - -// bindContractBLSRegistryCoordinatorWithIndices binds a generic wrapper to an already deployed contract. -func bindContractBLSRegistryCoordinatorWithIndices(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractBLSRegistryCoordinatorWithIndicesMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ContractBLSRegistryCoordinatorWithIndicesCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ContractBLSRegistryCoordinatorWithIndicesTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ContractBLSRegistryCoordinatorWithIndicesTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.contract.Transact(opts, method, params...) -} - -// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. -// -// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) OPERATORCHURNAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "OPERATOR_CHURN_APPROVAL_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. -// -// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) OPERATORCHURNAPPROVALTYPEHASH() ([32]byte, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.OPERATORCHURNAPPROVALTYPEHASH(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. -// -// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) OPERATORCHURNAPPROVALTYPEHASH() ([32]byte, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.OPERATORCHURNAPPROVALTYPEHASH(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. -// -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) BlsPubkeyRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "blsPubkeyRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. -// -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) BlsPubkeyRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.BlsPubkeyRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. -// -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) BlsPubkeyRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.BlsPubkeyRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0xab269b2d. -// -// Solidity: function calculateOperatorChurnApprovalDigestHash(bytes32 registeringOperatorId, (uint8,address,(uint256,uint256))[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) CalculateOperatorChurnApprovalDigestHash(opts *bind.CallOpts, registeringOperatorId [32]byte, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "calculateOperatorChurnApprovalDigestHash", registeringOperatorId, operatorKickParams, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0xab269b2d. -// -// Solidity: function calculateOperatorChurnApprovalDigestHash(bytes32 registeringOperatorId, (uint8,address,(uint256,uint256))[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) CalculateOperatorChurnApprovalDigestHash(registeringOperatorId [32]byte, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.CalculateOperatorChurnApprovalDigestHash(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, registeringOperatorId, operatorKickParams, salt, expiry) -} - -// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0xab269b2d. -// -// Solidity: function calculateOperatorChurnApprovalDigestHash(bytes32 registeringOperatorId, (uint8,address,(uint256,uint256))[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) CalculateOperatorChurnApprovalDigestHash(registeringOperatorId [32]byte, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.CalculateOperatorChurnApprovalDigestHash(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, registeringOperatorId, operatorKickParams, salt, expiry) -} - -// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. -// -// Solidity: function churnApprover() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) ChurnApprover(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "churnApprover") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. -// -// Solidity: function churnApprover() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) ChurnApprover() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ChurnApprover(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. -// -// Solidity: function churnApprover() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) ChurnApprover() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ChurnApprover(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Ejector is a free data retrieval call binding the contract method 0x28f61b31. -// -// Solidity: function ejector() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) Ejector(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "ejector") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Ejector is a free data retrieval call binding the contract method 0x28f61b31. -// -// Solidity: function ejector() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Ejector() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Ejector(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Ejector is a free data retrieval call binding the contract method 0x28f61b31. -// -// Solidity: function ejector() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) Ejector() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Ejector(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// GetCurrentQuorumBitmapByOperatorId is a free data retrieval call binding the contract method 0x3431af25. -// -// Solidity: function getCurrentQuorumBitmapByOperatorId(bytes32 operatorId) view returns(uint192) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetCurrentQuorumBitmapByOperatorId(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getCurrentQuorumBitmapByOperatorId", operatorId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetCurrentQuorumBitmapByOperatorId is a free data retrieval call binding the contract method 0x3431af25. -// -// Solidity: function getCurrentQuorumBitmapByOperatorId(bytes32 operatorId) view returns(uint192) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetCurrentQuorumBitmapByOperatorId(operatorId [32]byte) (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetCurrentQuorumBitmapByOperatorId(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId) -} - -// GetCurrentQuorumBitmapByOperatorId is a free data retrieval call binding the contract method 0x3431af25. -// -// Solidity: function getCurrentQuorumBitmapByOperatorId(bytes32 operatorId) view returns(uint192) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetCurrentQuorumBitmapByOperatorId(operatorId [32]byte) (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetCurrentQuorumBitmapByOperatorId(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId) -} - -// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. -// -// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetOperator(opts *bind.CallOpts, operator common.Address) (IRegistryCoordinatorOperator, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getOperator", operator) - - if err != nil { - return *new(IRegistryCoordinatorOperator), err - } - - out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorOperator)).(*IRegistryCoordinatorOperator) - - return out0, err - -} - -// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. -// -// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetOperator(operator common.Address) (IRegistryCoordinatorOperator, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperator(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operator) -} - -// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. -// -// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetOperator(operator common.Address) (IRegistryCoordinatorOperator, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperator(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operator) -} - -// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. -// -// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetOperatorFromId(opts *bind.CallOpts, operatorId [32]byte) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getOperatorFromId", operatorId) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. -// -// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetOperatorFromId(operatorId [32]byte) (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorFromId(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId) -} - -// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. -// -// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetOperatorFromId(operatorId [32]byte) (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorFromId(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId) -} - -// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. -// -// Solidity: function getOperatorId(address operator) view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getOperatorId", operator) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. -// -// Solidity: function getOperatorId(address operator) view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetOperatorId(operator common.Address) ([32]byte, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorId(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operator) -} - -// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. -// -// Solidity: function getOperatorId(address operator) view returns(bytes32) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetOperatorId(operator common.Address) ([32]byte, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorId(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operator) -} - -// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. -// -// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetOperatorSetParams(opts *bind.CallOpts, quorumNumber uint8) (IBLSRegistryCoordinatorWithIndicesOperatorSetParam, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getOperatorSetParams", quorumNumber) - - if err != nil { - return *new(IBLSRegistryCoordinatorWithIndicesOperatorSetParam), err - } - - out0 := *abi.ConvertType(out[0], new(IBLSRegistryCoordinatorWithIndicesOperatorSetParam)).(*IBLSRegistryCoordinatorWithIndicesOperatorSetParam) - - return out0, err - -} - -// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. -// -// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetOperatorSetParams(quorumNumber uint8) (IBLSRegistryCoordinatorWithIndicesOperatorSetParam, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorSetParams(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, quorumNumber) -} - -// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. -// -// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetOperatorSetParams(quorumNumber uint8) (IBLSRegistryCoordinatorWithIndicesOperatorSetParam, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorSetParams(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, quorumNumber) -} - -// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. -// -// Solidity: function getOperatorStatus(address operator) view returns(uint8) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetOperatorStatus(opts *bind.CallOpts, operator common.Address) (uint8, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getOperatorStatus", operator) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. -// -// Solidity: function getOperatorStatus(address operator) view returns(uint8) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetOperatorStatus(operator common.Address) (uint8, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorStatus(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operator) -} - -// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. -// -// Solidity: function getOperatorStatus(address operator) view returns(uint8) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetOperatorStatus(operator common.Address) (uint8, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetOperatorStatus(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operator) -} - -// GetQuorumBitmapByOperatorIdAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x3064620d. -// -// Solidity: function getQuorumBitmapByOperatorIdAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetQuorumBitmapByOperatorIdAtBlockNumberByIndex(opts *bind.CallOpts, operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getQuorumBitmapByOperatorIdAtBlockNumberByIndex", operatorId, blockNumber, index) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetQuorumBitmapByOperatorIdAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x3064620d. -// -// Solidity: function getQuorumBitmapByOperatorIdAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetQuorumBitmapByOperatorIdAtBlockNumberByIndex(operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapByOperatorIdAtBlockNumberByIndex(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId, blockNumber, index) -} - -// GetQuorumBitmapByOperatorIdAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x3064620d. -// -// Solidity: function getQuorumBitmapByOperatorIdAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetQuorumBitmapByOperatorIdAtBlockNumberByIndex(operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapByOperatorIdAtBlockNumberByIndex(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId, blockNumber, index) -} - -// GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber is a free data retrieval call binding the contract method 0x85020d49. -// -// Solidity: function getQuorumBitmapIndicesByOperatorIdsAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getQuorumBitmapIndicesByOperatorIdsAtBlockNumber", blockNumber, operatorIds) - - if err != nil { - return *new([]uint32), err - } - - out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) - - return out0, err - -} - -// GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber is a free data retrieval call binding the contract method 0x85020d49. -// -// Solidity: function getQuorumBitmapIndicesByOperatorIdsAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber(blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, blockNumber, operatorIds) -} - -// GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber is a free data retrieval call binding the contract method 0x85020d49. -// -// Solidity: function getQuorumBitmapIndicesByOperatorIdsAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber(blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapIndicesByOperatorIdsAtBlockNumber(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, blockNumber, operatorIds) -} - -// GetQuorumBitmapUpdateByOperatorIdByIndex is a free data retrieval call binding the contract method 0x0159f1ce. -// -// Solidity: function getQuorumBitmapUpdateByOperatorIdByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetQuorumBitmapUpdateByOperatorIdByIndex(opts *bind.CallOpts, operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getQuorumBitmapUpdateByOperatorIdByIndex", operatorId, index) - - if err != nil { - return *new(IRegistryCoordinatorQuorumBitmapUpdate), err - } - - out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorQuorumBitmapUpdate)).(*IRegistryCoordinatorQuorumBitmapUpdate) - - return out0, err - -} - -// GetQuorumBitmapUpdateByOperatorIdByIndex is a free data retrieval call binding the contract method 0x0159f1ce. -// -// Solidity: function getQuorumBitmapUpdateByOperatorIdByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetQuorumBitmapUpdateByOperatorIdByIndex(operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapUpdateByOperatorIdByIndex(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId, index) -} - -// GetQuorumBitmapUpdateByOperatorIdByIndex is a free data retrieval call binding the contract method 0x0159f1ce. -// -// Solidity: function getQuorumBitmapUpdateByOperatorIdByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetQuorumBitmapUpdateByOperatorIdByIndex(operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapUpdateByOperatorIdByIndex(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId, index) -} - -// GetQuorumBitmapUpdateByOperatorIdLength is a free data retrieval call binding the contract method 0x055a62b6. -// -// Solidity: function getQuorumBitmapUpdateByOperatorIdLength(bytes32 operatorId) view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) GetQuorumBitmapUpdateByOperatorIdLength(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "getQuorumBitmapUpdateByOperatorIdLength", operatorId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetQuorumBitmapUpdateByOperatorIdLength is a free data retrieval call binding the contract method 0x055a62b6. -// -// Solidity: function getQuorumBitmapUpdateByOperatorIdLength(bytes32 operatorId) view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) GetQuorumBitmapUpdateByOperatorIdLength(operatorId [32]byte) (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapUpdateByOperatorIdLength(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId) -} - -// GetQuorumBitmapUpdateByOperatorIdLength is a free data retrieval call binding the contract method 0x055a62b6. -// -// Solidity: function getQuorumBitmapUpdateByOperatorIdLength(bytes32 operatorId) view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) GetQuorumBitmapUpdateByOperatorIdLength(operatorId [32]byte) (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.GetQuorumBitmapUpdateByOperatorIdLength(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, operatorId) -} - -// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. -// -// Solidity: function indexRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) IndexRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "indexRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. -// -// Solidity: function indexRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) IndexRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.IndexRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. -// -// Solidity: function indexRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) IndexRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.IndexRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. -// -// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) IsChurnApproverSaltUsed(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "isChurnApproverSaltUsed", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. -// -// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) IsChurnApproverSaltUsed(arg0 [32]byte) (bool, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.IsChurnApproverSaltUsed(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, arg0) -} - -// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. -// -// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) IsChurnApproverSaltUsed(arg0 [32]byte) (bool, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.IsChurnApproverSaltUsed(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, arg0) -} - -// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. -// -// Solidity: function numRegistries() view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) NumRegistries(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "numRegistries") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. -// -// Solidity: function numRegistries() view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) NumRegistries() (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.NumRegistries(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. -// -// Solidity: function numRegistries() view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) NumRegistries() (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.NumRegistries(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "paused", index) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Paused(index uint8) (bool, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Paused(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, index) -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) Paused(index uint8) (bool, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Paused(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, index) -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "paused0") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Paused0() (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Paused0(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) Paused0() (*big.Int, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Paused0(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "pauserRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) PauserRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.PauserRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) PauserRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.PauserRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Registries is a free data retrieval call binding the contract method 0x6347c900. -// -// Solidity: function registries(uint256 ) view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) Registries(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "registries", arg0) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Registries is a free data retrieval call binding the contract method 0x6347c900. -// -// Solidity: function registries(uint256 ) view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Registries(arg0 *big.Int) (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Registries(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, arg0) -} - -// Registries is a free data retrieval call binding the contract method 0x6347c900. -// -// Solidity: function registries(uint256 ) view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) Registries(arg0 *big.Int) (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Registries(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts, arg0) -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) ServiceManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "serviceManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) ServiceManager() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ServiceManager(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) ServiceManager() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.ServiceManager(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "slasher") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Slasher() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Slasher(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) Slasher() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Slasher(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. -// -// Solidity: function stakeRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCaller) StakeRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractBLSRegistryCoordinatorWithIndices.contract.Call(opts, &out, "stakeRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. -// -// Solidity: function stakeRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) StakeRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.StakeRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. -// -// Solidity: function stakeRegistry() view returns(address) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesCallerSession) StakeRegistry() (common.Address, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.StakeRegistry(&_ContractBLSRegistryCoordinatorWithIndices.CallOpts) -} - -// DeregisterOperatorWithCoordinator is a paid mutator transaction binding the contract method 0x455a43fc. -// -// Solidity: function deregisterOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) DeregisterOperatorWithCoordinator(opts *bind.TransactOpts, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "deregisterOperatorWithCoordinator", quorumNumbers, pubkey) -} - -// DeregisterOperatorWithCoordinator is a paid mutator transaction binding the contract method 0x455a43fc. -// -// Solidity: function deregisterOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) DeregisterOperatorWithCoordinator(quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.DeregisterOperatorWithCoordinator(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, pubkey) -} - -// DeregisterOperatorWithCoordinator is a paid mutator transaction binding the contract method 0x455a43fc. -// -// Solidity: function deregisterOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) DeregisterOperatorWithCoordinator(quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.DeregisterOperatorWithCoordinator(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, pubkey) -} - -// DeregisterOperatorWithCoordinator0 is a paid mutator transaction binding the contract method 0xc81b1ff4. -// -// Solidity: function deregisterOperatorWithCoordinator(bytes quorumNumbers, bytes deregistrationData) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) DeregisterOperatorWithCoordinator0(opts *bind.TransactOpts, quorumNumbers []byte, deregistrationData []byte) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "deregisterOperatorWithCoordinator0", quorumNumbers, deregistrationData) -} - -// DeregisterOperatorWithCoordinator0 is a paid mutator transaction binding the contract method 0xc81b1ff4. -// -// Solidity: function deregisterOperatorWithCoordinator(bytes quorumNumbers, bytes deregistrationData) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) DeregisterOperatorWithCoordinator0(quorumNumbers []byte, deregistrationData []byte) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.DeregisterOperatorWithCoordinator0(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, deregistrationData) -} - -// DeregisterOperatorWithCoordinator0 is a paid mutator transaction binding the contract method 0xc81b1ff4. -// -// Solidity: function deregisterOperatorWithCoordinator(bytes quorumNumbers, bytes deregistrationData) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) DeregisterOperatorWithCoordinator0(quorumNumbers []byte, deregistrationData []byte) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.DeregisterOperatorWithCoordinator0(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, deregistrationData) -} - -// EjectOperatorFromCoordinator is a paid mutator transaction binding the contract method 0xb8347acc. -// -// Solidity: function ejectOperatorFromCoordinator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) EjectOperatorFromCoordinator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "ejectOperatorFromCoordinator", operator, quorumNumbers, pubkey) -} - -// EjectOperatorFromCoordinator is a paid mutator transaction binding the contract method 0xb8347acc. -// -// Solidity: function ejectOperatorFromCoordinator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) EjectOperatorFromCoordinator(operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.EjectOperatorFromCoordinator(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, operator, quorumNumbers, pubkey) -} - -// EjectOperatorFromCoordinator is a paid mutator transaction binding the contract method 0xb8347acc. -// -// Solidity: function ejectOperatorFromCoordinator(address operator, bytes quorumNumbers, (uint256,uint256) pubkey) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) EjectOperatorFromCoordinator(operator common.Address, quorumNumbers []byte, pubkey BN254G1Point) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.EjectOperatorFromCoordinator(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, operator, quorumNumbers, pubkey) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4b76b9d5. -// -// Solidity: function initialize(address _churnApprover, address _ejector, (uint32,uint16,uint16)[] _operatorSetParams, address _pauserRegistry, uint256 _initialPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) Initialize(opts *bind.TransactOpts, _churnApprover common.Address, _ejector common.Address, _operatorSetParams []IBLSRegistryCoordinatorWithIndicesOperatorSetParam, _pauserRegistry common.Address, _initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "initialize", _churnApprover, _ejector, _operatorSetParams, _pauserRegistry, _initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4b76b9d5. -// -// Solidity: function initialize(address _churnApprover, address _ejector, (uint32,uint16,uint16)[] _operatorSetParams, address _pauserRegistry, uint256 _initialPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Initialize(_churnApprover common.Address, _ejector common.Address, _operatorSetParams []IBLSRegistryCoordinatorWithIndicesOperatorSetParam, _pauserRegistry common.Address, _initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Initialize(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, _churnApprover, _ejector, _operatorSetParams, _pauserRegistry, _initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4b76b9d5. -// -// Solidity: function initialize(address _churnApprover, address _ejector, (uint32,uint16,uint16)[] _operatorSetParams, address _pauserRegistry, uint256 _initialPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) Initialize(_churnApprover common.Address, _ejector common.Address, _operatorSetParams []IBLSRegistryCoordinatorWithIndicesOperatorSetParam, _pauserRegistry common.Address, _initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Initialize(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, _churnApprover, _ejector, _operatorSetParams, _pauserRegistry, _initialPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "pause", newPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Pause(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, newPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Pause(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, newPausedStatus) -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "pauseAll") -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) PauseAll() (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.PauseAll(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts) -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) PauseAll() (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.PauseAll(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts) -} - -// RegisterOperatorWithCoordinator is a paid mutator transaction binding the contract method 0x25007576. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey, string socket, (uint8,address,(uint256,uint256))[] operatorKickParams, (bytes,bytes32,uint256) signatureWithSaltAndExpiry) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) RegisterOperatorWithCoordinator(opts *bind.TransactOpts, quorumNumbers []byte, pubkey BN254G1Point, socket string, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, signatureWithSaltAndExpiry ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "registerOperatorWithCoordinator", quorumNumbers, pubkey, socket, operatorKickParams, signatureWithSaltAndExpiry) -} - -// RegisterOperatorWithCoordinator is a paid mutator transaction binding the contract method 0x25007576. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey, string socket, (uint8,address,(uint256,uint256))[] operatorKickParams, (bytes,bytes32,uint256) signatureWithSaltAndExpiry) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) RegisterOperatorWithCoordinator(quorumNumbers []byte, pubkey BN254G1Point, socket string, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, signatureWithSaltAndExpiry ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.RegisterOperatorWithCoordinator(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, pubkey, socket, operatorKickParams, signatureWithSaltAndExpiry) -} - -// RegisterOperatorWithCoordinator is a paid mutator transaction binding the contract method 0x25007576. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey, string socket, (uint8,address,(uint256,uint256))[] operatorKickParams, (bytes,bytes32,uint256) signatureWithSaltAndExpiry) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) RegisterOperatorWithCoordinator(quorumNumbers []byte, pubkey BN254G1Point, socket string, operatorKickParams []IBLSRegistryCoordinatorWithIndicesOperatorKickParam, signatureWithSaltAndExpiry ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.RegisterOperatorWithCoordinator(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, pubkey, socket, operatorKickParams, signatureWithSaltAndExpiry) -} - -// RegisterOperatorWithCoordinator0 is a paid mutator transaction binding the contract method 0x526ea94e. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, bytes registrationData) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) RegisterOperatorWithCoordinator0(opts *bind.TransactOpts, quorumNumbers []byte, registrationData []byte) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "registerOperatorWithCoordinator0", quorumNumbers, registrationData) -} - -// RegisterOperatorWithCoordinator0 is a paid mutator transaction binding the contract method 0x526ea94e. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, bytes registrationData) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) RegisterOperatorWithCoordinator0(quorumNumbers []byte, registrationData []byte) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.RegisterOperatorWithCoordinator0(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, registrationData) -} - -// RegisterOperatorWithCoordinator0 is a paid mutator transaction binding the contract method 0x526ea94e. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, bytes registrationData) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) RegisterOperatorWithCoordinator0(quorumNumbers []byte, registrationData []byte) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.RegisterOperatorWithCoordinator0(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, registrationData) -} - -// RegisterOperatorWithCoordinator1 is a paid mutator transaction binding the contract method 0xc66ab9ca. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey, string socket) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) RegisterOperatorWithCoordinator1(opts *bind.TransactOpts, quorumNumbers []byte, pubkey BN254G1Point, socket string) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "registerOperatorWithCoordinator1", quorumNumbers, pubkey, socket) -} - -// RegisterOperatorWithCoordinator1 is a paid mutator transaction binding the contract method 0xc66ab9ca. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey, string socket) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) RegisterOperatorWithCoordinator1(quorumNumbers []byte, pubkey BN254G1Point, socket string) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.RegisterOperatorWithCoordinator1(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, pubkey, socket) -} - -// RegisterOperatorWithCoordinator1 is a paid mutator transaction binding the contract method 0xc66ab9ca. -// -// Solidity: function registerOperatorWithCoordinator(bytes quorumNumbers, (uint256,uint256) pubkey, string socket) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) RegisterOperatorWithCoordinator1(quorumNumbers []byte, pubkey BN254G1Point, socket string) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.RegisterOperatorWithCoordinator1(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumbers, pubkey, socket) -} - -// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. -// -// Solidity: function setChurnApprover(address _churnApprover) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) SetChurnApprover(opts *bind.TransactOpts, _churnApprover common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "setChurnApprover", _churnApprover) -} - -// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. -// -// Solidity: function setChurnApprover(address _churnApprover) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) SetChurnApprover(_churnApprover common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetChurnApprover(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, _churnApprover) -} - -// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. -// -// Solidity: function setChurnApprover(address _churnApprover) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) SetChurnApprover(_churnApprover common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetChurnApprover(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, _churnApprover) -} - -// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. -// -// Solidity: function setEjector(address _ejector) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) SetEjector(opts *bind.TransactOpts, _ejector common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "setEjector", _ejector) -} - -// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. -// -// Solidity: function setEjector(address _ejector) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) SetEjector(_ejector common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetEjector(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, _ejector) -} - -// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. -// -// Solidity: function setEjector(address _ejector) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) SetEjector(_ejector common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetEjector(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, _ejector) -} - -// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. -// -// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParam) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) SetOperatorSetParams(opts *bind.TransactOpts, quorumNumber uint8, operatorSetParam IBLSRegistryCoordinatorWithIndicesOperatorSetParam) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "setOperatorSetParams", quorumNumber, operatorSetParam) -} - -// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. -// -// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParam) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) SetOperatorSetParams(quorumNumber uint8, operatorSetParam IBLSRegistryCoordinatorWithIndicesOperatorSetParam) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetOperatorSetParams(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumber, operatorSetParam) -} - -// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. -// -// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParam) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) SetOperatorSetParams(quorumNumber uint8, operatorSetParam IBLSRegistryCoordinatorWithIndicesOperatorSetParam) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetOperatorSetParams(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, quorumNumber, operatorSetParam) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetPauserRegistry(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, newPauserRegistry) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.SetPauserRegistry(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, newPauserRegistry) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "unpause", newPausedStatus) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Unpause(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, newPausedStatus) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.Unpause(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, newPausedStatus) -} - -// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. -// -// Solidity: function updateSocket(string socket) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactor) UpdateSocket(opts *bind.TransactOpts, socket string) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.contract.Transact(opts, "updateSocket", socket) -} - -// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. -// -// Solidity: function updateSocket(string socket) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesSession) UpdateSocket(socket string) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.UpdateSocket(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, socket) -} - -// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. -// -// Solidity: function updateSocket(string socket) returns() -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesTransactorSession) UpdateSocket(socket string) (*types.Transaction, error) { - return _ContractBLSRegistryCoordinatorWithIndices.Contract.UpdateSocket(&_ContractBLSRegistryCoordinatorWithIndices.TransactOpts, socket) -} - -// ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator is returned from FilterChurnApproverUpdated and is used to iterate over the raw logs and unpacked data for ChurnApproverUpdated events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated represents a ChurnApproverUpdated event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated struct { - PrevChurnApprover common.Address - NewChurnApprover common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterChurnApproverUpdated is a free log retrieval operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. -// -// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterChurnApproverUpdated(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "ChurnApproverUpdated") - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdatedIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "ChurnApproverUpdated", logs: logs, sub: sub}, nil -} - -// WatchChurnApproverUpdated is a free log subscription operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. -// -// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchChurnApproverUpdated(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated) (event.Subscription, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "ChurnApproverUpdated") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "ChurnApproverUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseChurnApproverUpdated is a log parse operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. -// -// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseChurnApproverUpdated(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesChurnApproverUpdated) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "ChurnApproverUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator is returned from FilterEjectorUpdated and is used to iterate over the raw logs and unpacked data for EjectorUpdated events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated represents a EjectorUpdated event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated struct { - PrevEjector common.Address - NewEjector common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterEjectorUpdated is a free log retrieval operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. -// -// Solidity: event EjectorUpdated(address prevEjector, address newEjector) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterEjectorUpdated(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "EjectorUpdated") - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesEjectorUpdatedIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "EjectorUpdated", logs: logs, sub: sub}, nil -} - -// WatchEjectorUpdated is a free log subscription operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. -// -// Solidity: event EjectorUpdated(address prevEjector, address newEjector) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchEjectorUpdated(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated) (event.Subscription, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "EjectorUpdated") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "EjectorUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseEjectorUpdated is a log parse operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. -// -// Solidity: event EjectorUpdated(address prevEjector, address newEjector) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseEjectorUpdated(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesEjectorUpdated) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "EjectorUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesInitializedIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesInitialized represents a Initialized event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesInitializedIterator, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesInitializedIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesInitialized) (event.Subscription, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesInitialized) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseInitialized(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesInitialized, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesInitialized) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator is returned from FilterOperatorDeregistered and is used to iterate over the raw logs and unpacked data for OperatorDeregistered events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered represents a OperatorDeregistered event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered struct { - Operator common.Address - OperatorId [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorDeregistered is a free log retrieval operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. -// -// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterOperatorDeregistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "OperatorDeregistered", operatorRule, operatorIdRule) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesOperatorDeregisteredIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "OperatorDeregistered", logs: logs, sub: sub}, nil -} - -// WatchOperatorDeregistered is a free log subscription operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. -// -// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchOperatorDeregistered(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "OperatorDeregistered", operatorRule, operatorIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorDeregistered is a log parse operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. -// -// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseOperatorDeregistered(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorDeregistered) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered represents a OperatorRegistered event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered struct { - Operator common.Address - OperatorId [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. -// -// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "OperatorRegistered", operatorRule, operatorIdRule) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesOperatorRegisteredIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil -} - -// WatchOperatorRegistered is a free log subscription operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. -// -// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "OperatorRegistered", operatorRule, operatorIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorRegistered is a log parse operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. -// -// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseOperatorRegistered(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorRegistered) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator is returned from FilterOperatorSetParamsUpdated and is used to iterate over the raw logs and unpacked data for OperatorSetParamsUpdated events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated represents a OperatorSetParamsUpdated event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated struct { - QuorumNumber uint8 - OperatorSetParams IBLSRegistryCoordinatorWithIndicesOperatorSetParam - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSetParamsUpdated is a free log retrieval operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. -// -// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterOperatorSetParamsUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator, error) { - - var quorumNumberRule []interface{} - for _, quorumNumberItem := range quorumNumber { - quorumNumberRule = append(quorumNumberRule, quorumNumberItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "OperatorSetParamsUpdated", quorumNumberRule) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdatedIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "OperatorSetParamsUpdated", logs: logs, sub: sub}, nil -} - -// WatchOperatorSetParamsUpdated is a free log subscription operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. -// -// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchOperatorSetParamsUpdated(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated, quorumNumber []uint8) (event.Subscription, error) { - - var quorumNumberRule []interface{} - for _, quorumNumberItem := range quorumNumber { - quorumNumberRule = append(quorumNumberRule, quorumNumberItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "OperatorSetParamsUpdated", quorumNumberRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorSetParamsUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorSetParamsUpdated is a log parse operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. -// -// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseOperatorSetParamsUpdated(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorSetParamsUpdated) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorSetParamsUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator is returned from FilterOperatorSocketUpdate and is used to iterate over the raw logs and unpacked data for OperatorSocketUpdate events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate represents a OperatorSocketUpdate event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate struct { - OperatorId [32]byte - Socket string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSocketUpdate is a free log retrieval operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. -// -// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterOperatorSocketUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator, error) { - - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "OperatorSocketUpdate", operatorIdRule) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdateIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "OperatorSocketUpdate", logs: logs, sub: sub}, nil -} - -// WatchOperatorSocketUpdate is a free log subscription operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. -// -// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchOperatorSocketUpdate(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate, operatorId [][32]byte) (event.Subscription, error) { - - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "OperatorSocketUpdate", operatorIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorSocketUpdate is a log parse operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. -// -// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseOperatorSocketUpdate(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesPausedIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesPaused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesPausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesPaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesPaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesPaused represents a Paused event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesPaused struct { - Account common.Address - NewPausedStatus *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractBLSRegistryCoordinatorWithIndicesPausedIterator, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "Paused", accountRule) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesPausedIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesPaused, account []common.Address) (event.Subscription, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "Paused", accountRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesPaused) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "Paused", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParsePaused(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesPaused, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesPaused) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet represents a PauserRegistrySet event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet struct { - PauserRegistry common.Address - NewPauserRegistry common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. -// -// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "PauserRegistrySet") - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySetIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil -} - -// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. -// -// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet) (event.Subscription, error) { - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "PauserRegistrySet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. -// -// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParsePauserRegistrySet(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesPauserRegistrySet) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator struct { - Event *ContractBLSRegistryCoordinatorWithIndicesUnpaused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesUnpaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractBLSRegistryCoordinatorWithIndicesUnpaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractBLSRegistryCoordinatorWithIndicesUnpaused represents a Unpaused event raised by the ContractBLSRegistryCoordinatorWithIndices contract. -type ContractBLSRegistryCoordinatorWithIndicesUnpaused struct { - Account common.Address - NewPausedStatus *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. -// -// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.FilterLogs(opts, "Unpaused", accountRule) - if err != nil { - return nil, err - } - return &ContractBLSRegistryCoordinatorWithIndicesUnpausedIterator{contract: _ContractBLSRegistryCoordinatorWithIndices.contract, event: "Unpaused", logs: logs, sub: sub}, nil -} - -// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. -// -// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractBLSRegistryCoordinatorWithIndicesUnpaused, account []common.Address) (event.Subscription, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractBLSRegistryCoordinatorWithIndices.contract.WatchLogs(opts, "Unpaused", accountRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractBLSRegistryCoordinatorWithIndicesUnpaused) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "Unpaused", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. -// -// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) -func (_ContractBLSRegistryCoordinatorWithIndices *ContractBLSRegistryCoordinatorWithIndicesFilterer) ParseUnpaused(log types.Log) (*ContractBLSRegistryCoordinatorWithIndicesUnpaused, error) { - event := new(ContractBLSRegistryCoordinatorWithIndicesUnpaused) - if err := _ContractBLSRegistryCoordinatorWithIndices.contract.UnpackLog(event, "Unpaused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/bindings/DelegationManager/binding.go b/contracts/bindings/DelegationManager/binding.go index dc318957..193e7a92 100644 --- a/contracts/bindings/DelegationManager/binding.go +++ b/contracts/bindings/DelegationManager/binding.go @@ -60,6 +60,13 @@ type ISignatureUtilsSignatureWithExpiry struct { Expiry *big.Int } +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + // IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { Strategies []common.Address @@ -78,8 +85,8 @@ type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { // ContractDelegationManagerMetaData contains all meta data concerning the ContractDelegationManager contract. var ContractDelegationManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractISlasher\",\"name\":\"_slasher\",\"type\":\"address\"},{\"internalType\":\"contractIEigenPodManager\",\"name\":\"_eigenPodManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"newOperatorDetails\",\"type\":\"tuple\"}],\"name\":\"OperatorDetailsModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"OperatorMetadataURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"operatorDetails\",\"type\":\"tuple\"}],\"name\":\"OperatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"OperatorSharesDecreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"OperatorSharesIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIStakeRegistryStub\",\"name\":\"stakeRegistry\",\"type\":\"address\"}],\"name\":\"StakeRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"StakerDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"StakerForceUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"StakerUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"WithdrawalCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"WithdrawalDelayBlocksSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newWithdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"WithdrawalMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"indexed\":false,\"internalType\":\"structIDelegationManager.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"}],\"name\":\"WithdrawalQueued\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKER_DELEGATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beaconChainETHStrategy\",\"outputs\":[{\"internalType\":\"contractIStrategy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateCurrentStakerDelegationDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegationApprover\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"approverSalt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateDelegationApprovalDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_stakerNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateStakerDelegationDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"internalType\":\"structIDelegationManager.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"}],\"name\":\"calculateWithdrawalRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"internalType\":\"structIDelegationManager.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAsTokens\",\"type\":\"bool\"}],\"name\":\"completeQueuedWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"internalType\":\"structIDelegationManager.Withdrawal[]\",\"name\":\"withdrawals\",\"type\":\"tuple[]\"},{\"internalType\":\"contractIERC20[][]\",\"name\":\"tokens\",\"type\":\"address[][]\"},{\"internalType\":\"uint256[]\",\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"receiveAsTokens\",\"type\":\"bool[]\"}],\"name\":\"completeQueuedWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"cumulativeWithdrawalsQueued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"decreaseDelegatedShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"approverSalt\",\"type\":\"bytes32\"}],\"name\":\"delegateTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"approverSalt\",\"type\":\"bytes32\"}],\"name\":\"delegateToBySignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegatedTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"delegationApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"delegationApproverSaltIsSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"earningsReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenPodManager\",\"outputs\":[{\"internalType\":\"contractIEigenPodManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getDelegatableShares\",\"outputs\":[{\"internalType\":\"contractIStrategy[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"increaseDelegatedShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialPausedStatus\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isDelegated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"nonce\",\"type\":\"uint96\"}],\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"delegatedAddress\",\"type\":\"address\"}],\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"name\":\"withdrawalsToMigrate\",\"type\":\"tuple[]\"}],\"name\":\"migrateQueuedWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"newOperatorDetails\",\"type\":\"tuple\"}],\"name\":\"modifyOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"operatorDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contractIStrategy\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"}],\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\"}],\"name\":\"queueWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"registerAsOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStakeRegistryStub\",\"name\":\"_stakeRegistry\",\"type\":\"address\"}],\"name\":\"setStakeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newWithdrawalDelayBlocks\",\"type\":\"uint256\"}],\"name\":\"setWithdrawalDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contractIStakeRegistryStub\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakerNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"stakerOptOutWindowBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"updateOperatorMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawalDelayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200599f3803806200599f833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e05161577662000229600039600061266c01526000818161058b01528181610fc30152818161131901528181611ce8015281816129c501528181613ac00152613fd0015260006107770152600081816104d301528181610f91015281816112e7015281816116e601528181611d7c01528181612a7701528181613bf7015261407601526157766000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c80635f966f14116101b8578063b134427111610104578063da8be864116100a2578063f16172b01161007c578063f16172b014610906578063f2fde38b14610919578063f698da251461092c578063fabc1cbc1461093457600080fd5b8063da8be864146108cd578063e3b05f2f146108e0578063eea9064b146108f357600080fd5b8063c5e480db116100de578063c5e480db146107ea578063c94b511114610890578063ca661c04146108a3578063cf80873e146108ac57600080fd5b8063b134427114610772578063b7f06ebe14610799578063bb45fef2146107bc57600080fd5b8063778e55f3116101715780638da5cb5b1161014b5780638da5cb5b146107135780639104c3191461072457806399be81c81461073f578063a17884841461075257600080fd5b8063778e55f3146106c25780637f548071146106ed578063886f11951461070057600080fd5b80635f966f141461062c57806360d7faed1461065857806365da12641461066b57806368304835146106945780636d70f7ae146106a7578063715018a6146106ba57600080fd5b806333404396116102925780634fc40b6111610230578063597b36da1161020a578063597b36da146105db5780635ac86ab7146105ee5780635c975abb146106115780635cfe8d2c1461061957600080fd5b80634fc40b61146105c057806350f73e7c146105ca578063595c6a67146105d357600080fd5b80633e28391d1161026c5780633e28391d1461053c578063433773821461055f5780634665bcda146105865780634d50f9a4146105ad57600080fd5b806333404396146104bb57806339b70e38146104ce5780633cdeb5e01461050d57600080fd5b8063136439dd116102ff5780631bbce091116102d95780631bbce0911461044e57806320606b701461046157806328a573ae1461048857806329c77d4f1461049b57600080fd5b8063136439dd146103ef57806316928365146104025780631794bb3c1461043b57600080fd5b806304a4f979146103475780630b9f487a146103815780630dd8dd02146103945780630f589e59146103b457806310d67a2f146103c9578063132d4967146103dc575b600080fd5b61036e7f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce81565b6040519081526020015b60405180910390f35b61036e61038f366004614474565b610947565b6103a76103a2366004614513565b610a09565b6040516103789190614554565b6103c76103c23660046145eb565b610d83565b005b6103c76103d736600461463e565b610ed3565b6103c76103ea366004614662565b610f86565b6103c76103fd3660046146a3565b611046565b61036e61041036600461463e565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103c7610449366004614662565b611185565b61036e61045c366004614662565b6112ae565b61036e7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103c7610496366004614662565b6112dc565b61036e6104a936600461463e565b609b6020526000908152604090205481565b6103c76104c93660046146bc565b61138c565b6104f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610378565b6104f561051b36600461463e565b6001600160a01b039081166000908152609960205260409020600101541690565b61054f61054a36600461463e565b6114c9565b6040519015158152602001610378565b61036e7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6104f57f000000000000000000000000000000000000000000000000000000000000000081565b6103c76105bb3660046146a3565b6114e9565b61036e6213c68081565b61036e609d5481565b6103c76115c0565b61036e6105e93660046149fc565b611687565b61054f6105fc366004614a38565b606654600160ff9092169190911b9081161490565b60665461036e565b6103c7610627366004614aae565b6116b7565b6104f561063a36600461463e565b6001600160a01b039081166000908152609960205260409020541690565b6103c7610666366004614c0e565b611962565b6104f561067936600461463e565b609a602052600090815260409020546001600160a01b031681565b60a0546104f5906001600160a01b031681565b61054f6106b536600461463e565b6119fd565b6103c7611a1d565b61036e6106d0366004614c9d565b609860209081526000928352604080842090915290825290205481565b6103c76106fb366004614d7e565b611a31565b6065546104f5906001600160a01b031681565b6033546001600160a01b03166104f5565b6104f573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103c761074d366004614e0e565b611b36565b61036e61076036600461463e565b609f6020526000908152604090205481565b6104f57f000000000000000000000000000000000000000000000000000000000000000081565b61054f6107a73660046146a3565b609e6020526000908152604090205460ff1681565b61054f6107ca366004614e43565b609c60209081526000928352604080842090915290825290205460ff1681565b61085a6107f836600461463e565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610378565b61036e61089e366004614e6f565b611c08565b61036e61c4e081565b6108bf6108ba36600461463e565b611cc1565b604051610378929190614f2b565b61036e6108db36600461463e565b612079565b6103c76108ee36600461463e565b6123ed565b6103c7610901366004614f50565b612555565b6103c7610914366004614fa8565b612561565b6103c761092736600461463e565b6125f2565b61036e612668565b6103c76109423660046146a3565b6126a6565b604080517f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e09092019092528051910120600090816109c5612668565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610a3e5760405162461bcd60e51b8152600401610a3590614fc4565b60405180910390fd5b6000836001600160401b03811115610a5857610a5861477f565b604051908082528060200260200182016040528015610a81578160200160208202803683370190505b50905060005b84811015610d7a57858582818110610aa157610aa1614ffb565b9050602002810190610ab39190615011565b610ac1906020810190615031565b9050868683818110610ad557610ad5614ffb565b9050602002810190610ae79190615011565b610af19080615031565b905014610b665760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610a35565b6000868683818110610b7a57610b7a614ffb565b9050602002810190610b8c9190615011565b610b9d90606081019060400161463e565b6001600160a01b03161415610c2b5760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a206d7573742070726f766964652076616c6964207769746864726177616c606482015267206164647265737360c01b608482015260a401610a35565b336000818152609a60205260409020546001600160a01b031690610d4a9082898986818110610c5c57610c5c614ffb565b9050602002810190610c6e9190615011565b610c7f90606081019060400161463e565b8a8a87818110610c9157610c91614ffb565b9050602002810190610ca39190615011565b610cad9080615031565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150899050818110610cf357610cf3614ffb565b9050602002810190610d059190615011565b610d13906020810190615031565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061280292505050565b838381518110610d5c57610d5c614ffb565b60209081029190910101525080610d7281615090565b915050610a87565b50949350505050565b336000908152609960205260409020546001600160a01b031615610e1d5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610a35565b610e273384612c3c565b604080518082019091526060815260006020820152610e493380836000612ed8565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610e8291906150ab565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610ec59291906150fd565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061512c565b6001600160a01b0316336001600160a01b031614610f7a5760405162461bcd60e51b8152600401610a3590615149565b610f8381613291565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610fe55750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6110015760405162461bcd60e51b8152600401610a3590615193565b61100a836114c9565b15611041576001600160a01b038084166000908152609a60205260409020541661103681858585613388565b61103f81613403565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b291906151f0565b6110ce5760405162461bcd60e51b8152600401610a359061520d565b606654818116146111475760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a35565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156111a55750600054600160ff909116105b806111bf5750303b1580156111bf575060005460ff166001145b6112225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a35565b6000805460ff191660011790558015611245576000805461ff0019166101001790555b61124f83836134bd565b6112576135a3565b6097556112638461363a565b801561103f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6001600160a01b0383166000908152609b60205260408120546112d385828686611c08565b95945050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061133b5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113575760405162461bcd60e51b8152600401610a3590615193565b611360836114c9565b15611041576001600160a01b038084166000908152609a6020526040902054166110368185858561368c565b606654600290600490811614156113b55760405162461bcd60e51b8152600401610a3590614fc4565b600260c95414156114085760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a35565b600260c95560005b888110156114b8576114a88a8a8381811061142d5761142d614ffb565b905060200281019061143f9190615255565b89898481811061145157611451614ffb565b90506020028101906114639190615031565b89898681811061147557611475614ffb565b9050602002013588888781811061148e5761148e614ffb565b90506020020160208101906114a3919061526b565b613707565b6114b181615090565b9050611410565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b6114f1613d81565b61c4e081111561157f5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e7365745769746864726177616c4460448201527f656c6179426c6f636b733a206e65775769746864726177616c44656c6179426c60648201526c0dec6d6e640e8dede40d0d2ced609b1b608482015260a401610a35565b609d5460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a1609d55565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c91906151f0565b6116485760405162461bcd60e51b8152600401610a359061520d565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008160405160200161169a91906152fc565b604051602081830303815290604052805190602001209050919050565b60005b815181101561195e5760008282815181106116d7576116d7614ffb565b602002602001015190506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd293f6f846040518263ffffffff1660e01b8152600401611730919061530f565b60408051808303816000875af115801561174e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177291906153be565b915091508115611950576040808401516001600160a01b0381166000908152609f602052918220805491928291906117a983615090565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff1681526020018760000151815260200187602001518152509050600061182982611687565b6000818152609e602052604090205490915060ff16156118bf5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610a35565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061190a90839085906153ec565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116ba565b5050565b6066546002906004908116141561198b5760405162461bcd60e51b8152600401610a3590614fc4565b600260c95414156119de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a35565b600260c9556119f08686868686613707565b5050600160c95550505050565b6001600160a01b0390811660009081526099602052604090205416151590565b611a25613d81565b611a2f600061363a565b565b4283602001511015611ab55760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610a35565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611af18783888860200151611c08565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b219088908390613ddb565b611b2d87878686612ed8565b50505050505050565b611b3f336119fd565b611bc15760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610a35565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611bfc9291906150fd565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611c7e612668565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190615405565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ded9190810190615479565b9150915060008313611e0457909590945092505050565b606080835160001415611ebe576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611e7957611e79614ffb565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611ead57611ead614ffb565b60200260200101818152505061206c565b8351611ecb90600161553d565b6001600160401b03811115611ee257611ee261477f565b604051908082528060200260200182016040528015611f0b578160200160208202803683370190505b50915081516001600160401b03811115611f2757611f2761477f565b604051908082528060200260200182016040528015611f50578160200160208202803683370190505b50905060005b8451811015611fea57848181518110611f7157611f71614ffb565b6020026020010151838281518110611f8b57611f8b614ffb565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611fbd57611fbd614ffb565b6020026020010151828281518110611fd757611fd7614ffb565b6020908102919091010152600101611f56565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0826001845161200f9190615555565b8151811061201f5761201f614ffb565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001845161204f9190615555565b8151811061205f5761205f614ffb565b6020026020010181815250505b9097909650945050505050565b606654600090600190600290811614156120a55760405162461bcd60e51b8152600401610a3590614fc4565b6120ae836114c9565b61212e5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610a35565b6001600160a01b038084166000908152609a602052604090205416612152846119fd565b156121c55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610a35565b6001600160a01b0384166122415760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610a35565b336001600160a01b03851614806122605750336001600160a01b038216145b8061228757506001600160a01b038181166000908152609960205260409020600101541633145b6122f95760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610a35565b60008061230586611cc1565b9092509050336001600160a01b0387161461235b57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516123d45750600093506123e7915050565b6123e18684888585612802565b94505050505b50919050565b6123f5613d81565b60a0546001600160a01b0316156124745760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e7365745374616b6552656769737460448201527f72793a207374616b65526567697374727920616c7265616479207365740000006064820152608401610a35565b6001600160a01b0381166125015760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e7365745374616b6552656769737460448201527f72793a207374616b6552656769737472792063616e6e6f74206265207a65726f606482015267206164647265737360c01b608482015260a401610a35565b60a080546001600160a01b0319166001600160a01b0383169081179091556040519081527fce6d874069bceda1867eca9c60636bbf262e15213041658273d803a2b609a51f9060200160405180910390a150565b61104133848484612ed8565b61256a336119fd565b6125e85760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610a35565b610f833382612c3c565b6125fa613d81565b6001600160a01b03811661265f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a35565b610f838161363a565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612699575060975490565b6126a16135a3565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d919061512c565b6001600160a01b0316336001600160a01b03161461274d5760405162461bcd60e51b8152600401610a3590615149565b6066541981196066541916146127cb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a35565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161117a565b60006001600160a01b0386166128995760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610a35565b82516129235760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610a35565b60005b8351811015612b32576001600160a01b0386161561297c5761297c868886848151811061295557612955614ffb565b602002602001015186858151811061296f5761296f614ffb565b6020026020010151613388565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129ac576129ac614ffb565b60200260200101516001600160a01b03161415612a75577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a0557612a05614ffb565b60200260200101516040518363ffffffff1660e01b8152600401612a3e9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a5857600080fd5b505af1158015612a6c573d6000803e3d6000fd5b50505050612b2a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612ab757612ab7614ffb565b6020026020010151868581518110612ad157612ad1614ffb565b60200260200101516040518463ffffffff1660e01b8152600401612af79392919061556c565b600060405180830381600087803b158015612b1157600080fd5b505af1158015612b25573d6000803e3d6000fd5b505050505b600101612926565b506001600160a01b03851615612b4b57612b4b85613403565b6001600160a01b0386166000908152609f60205260408120805491829190612b7283615090565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612bda82611687565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612c2890839085906153ec565b60405180910390a198975050505050505050565b6000612c4b602083018361463e565b6001600160a01b03161415612ce55760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610a35565b6213c680612cf96060830160408401615590565b63ffffffff161115612dae5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610a35565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612dea9060608401908401615590565b63ffffffff161015612e805760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610a35565b6001600160a01b03821660009081526099602052604090208190612ea482826155cd565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611bfc9084906150ab565b60665460009060019081161415612f015760405162461bcd60e51b8152600401610a3590614fc4565b612f0a856114c9565b15612f875760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610a35565b612f90846119fd565b6130105760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610a35565b6001600160a01b038085166000908152609960205260409020600101541680158015906130465750336001600160a01b03821614155b801561305b5750336001600160a01b03861614155b156131c85742846020015110156130da5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610a35565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156131745760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610a35565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516131b5908890889085908890610947565b90506131c682828760000151613ddb565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061322788611cc1565b9150915060005b825181101561327d57613275888a85848151811061324e5761324e614ffb565b602002602001015185858151811061326857613268614ffb565b602002602001015161368c565b60010161322e565b5061328787613403565b5050505050505050565b6001600160a01b03811661331f5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a35565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133bf908490615555565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610ec59392919061556c565b60a0546001600160a01b031615610f835760408051600180825281830190925260009160208083019080368337019050509050818160008151811061344a5761344a614ffb565b6001600160a01b03928316602091820292909201015260a05460405163ce977ec360e01b815291169063ce977ec390613487908490600401615630565b600060405180830381600087803b1580156134a157600080fd5b505af11580156134b5573d6000803e3d6000fd5b505050505050565b6065546001600160a01b03161580156134de57506001600160a01b03821615155b6135605760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a35565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261195e82613291565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906136c390849061553d565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610ec59392919061556c565b60006137156105e987615671565b6000818152609e602052604090205490915060ff1661378a5760405162461bcd60e51b815260206004820152603e602482015260008051602061572183398151915260448201527f416374696f6e3a20616374696f6e206973206e6f7420696e20717565756500006064820152608401610a35565b609d54439061379f60a0890160808a01615590565b63ffffffff166137af919061553d565b11156138375760405162461bcd60e51b8152602060048201526057602482015260008051602061572183398151915260448201527f416374696f6e3a207769746864726177616c44656c6179426c6f636b7320706560648201527f72696f6420686173206e6f742079657420706173736564000000000000000000608482015260a401610a35565b613847606087016040880161463e565b6001600160a01b0316336001600160a01b0316146138cf5760405162461bcd60e51b815260206004820152604b602482015260008051602061572183398151915260448201527f416374696f6e3a206f6e6c7920776974686472617765722063616e20636f6d7060648201526a3632ba329030b1ba34b7b760a91b608482015260a401610a35565b8115613946576138e260a0870187615031565b851490506139465760405162461bcd60e51b815260206004820152603d602482015260008051602061572183398151915260448201527f416374696f6e3a20696e707574206c656e677468206d69736d617463680000006064820152608401610a35565b6000818152609e60205260409020805460ff191690558115613a1c5760005b61397260a0880188615031565b9050811015613a1657613a0e61398b602089018961463e565b3361399960a08b018b615031565b858181106139a9576139a9614ffb565b90506020020160208101906139be919061463e565b6139cb60c08c018c615031565b868181106139db576139db614ffb565b905060200201358a8a878181106139f4576139f4614ffb565b9050602002016020810190613a09919061463e565b613f95565b600101613965565b50613d46565b336000908152609a60205260408120546001600160a01b0316905b613a4460a0890189615031565b9050811015613d3a5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613a6f60a08a018a615031565b83818110613a7f57613a7f614ffb565b9050602002016020810190613a94919061463e565b6001600160a01b03161415613bed576000613ab260208a018a61463e565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613af360c08e018e615031565b87818110613b0357613b03614ffb565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7b9190615405565b6001600160a01b038084166000908152609a6020526040902054919250168015613be557613bdc8184613bb160a08f018f615031565b88818110613bc157613bc1614ffb565b9050602002016020810190613bd6919061463e565b8561368c565b613be581613403565b505050613d32565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166350ff722533613c2a60a08c018c615031565b85818110613c3a57613c3a614ffb565b9050602002016020810190613c4f919061463e565b613c5c60c08d018d615031565b86818110613c6c57613c6c614ffb565b905060200201356040518463ffffffff1660e01b8152600401613c919392919061556c565b600060405180830381600087803b158015613cab57600080fd5b505af1158015613cbf573d6000803e3d6000fd5b505050506001600160a01b03821615613d3257613d328233613ce460a08c018c615031565b85818110613cf457613cf4614ffb565b9050602002016020810190613d09919061463e565b613d1660c08d018d615031565b86818110613d2657613d26614ffb565b9050602002013561368c565b600101613a37565b50613d4481613403565b505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6033546001600160a01b03163314611a2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a35565b6001600160a01b0383163b15613ef557604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90613e1b9086908690600401615683565b602060405180830381865afa158015613e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5c91906156e0565b6001600160e01b031916146110415760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610a35565b826001600160a01b0316613f0983836140da565b6001600160a01b0316146110415760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610a35565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156140405760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906140099088908890879060040161556c565b600060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b505050506140d3565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156140ba57600080fd5b505af11580156140ce573d6000803e3d6000fd5b505050505b5050505050565b60008060006140e985856140fe565b915091506140f68161416e565b509392505050565b6000808251604114156141355760208301516040840151606085015160001a61412987828585614329565b94509450505050614167565b82516040141561415f5760208301516040840151614154868383614416565b935093505050614167565b506000905060025b9250929050565b60008160048111156141825761418261570a565b141561418b5750565b600181600481111561419f5761419f61570a565b14156141ed5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a35565b60028160048111156142015761420161570a565b141561424f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a35565b60038160048111156142635761426361570a565b14156142bc5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a35565b60048160048111156142d0576142d061570a565b1415610f835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a35565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614360575060009050600361440d565b8460ff16601b1415801561437857508460ff16601c14155b15614389575060009050600461440d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156143dd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166144065760006001925092505061440d565b9150600090505b94509492505050565b6000806001600160ff1b0383168161443360ff86901c601b61553d565b905061444187828885614329565b935093505050935093915050565b6001600160a01b0381168114610f8357600080fd5b803561446f8161444f565b919050565b600080600080600060a0868803121561448c57600080fd5b85356144978161444f565b945060208601356144a78161444f565b935060408601356144b78161444f565b94979396509394606081013594506080013592915050565b60008083601f8401126144e157600080fd5b5081356001600160401b038111156144f857600080fd5b6020830191508360208260051b850101111561416757600080fd5b6000806020838503121561452657600080fd5b82356001600160401b0381111561453c57600080fd5b614548858286016144cf565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561458c57835183529284019291840191600101614570565b50909695505050505050565b6000606082840312156123e757600080fd5b60008083601f8401126145bc57600080fd5b5081356001600160401b038111156145d357600080fd5b60208301915083602082850101111561416757600080fd5b60008060006080848603121561460057600080fd5b61460a8585614598565b925060608401356001600160401b0381111561462557600080fd5b614631868287016145aa565b9497909650939450505050565b60006020828403121561465057600080fd5b813561465b8161444f565b9392505050565b60008060006060848603121561467757600080fd5b83356146828161444f565b925060208401356146928161444f565b929592945050506040919091013590565b6000602082840312156146b557600080fd5b5035919050565b6000806000806000806000806080898b0312156146d857600080fd5b88356001600160401b03808211156146ef57600080fd5b6146fb8c838d016144cf565b909a50985060208b013591508082111561471457600080fd5b6147208c838d016144cf565b909850965060408b013591508082111561473957600080fd5b6147458c838d016144cf565b909650945060608b013591508082111561475e57600080fd5b5061476b8b828c016144cf565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156147b7576147b761477f565b60405290565b604080519081016001600160401b03811182821017156147b7576147b761477f565b60405160c081016001600160401b03811182821017156147b7576147b761477f565b604051601f8201601f191681016001600160401b03811182821017156148295761482961477f565b604052919050565b63ffffffff81168114610f8357600080fd5b803561446f81614831565b60006001600160401b038211156148675761486761477f565b5060051b60200190565b600082601f83011261488257600080fd5b813560206148976148928361484e565b614801565b82815260059290921b840181019181810190868411156148b657600080fd5b8286015b848110156148da5780356148cd8161444f565b83529183019183016148ba565b509695505050505050565b600082601f8301126148f657600080fd5b813560206149066148928361484e565b82815260059290921b8401810191818101908684111561492557600080fd5b8286015b848110156148da5780358352918301918301614929565b600060e0828403121561495257600080fd5b61495a614795565b905061496582614464565b815261497360208301614464565b602082015261498460408301614464565b60408201526060820135606082015261499f60808301614843565b608082015260a08201356001600160401b03808211156149be57600080fd5b6149ca85838601614871565b60a084015260c08401359150808211156149e357600080fd5b506149f0848285016148e5565b60c08301525092915050565b600060208284031215614a0e57600080fd5b81356001600160401b03811115614a2457600080fd5b614a3084828501614940565b949350505050565b600060208284031215614a4a57600080fd5b813560ff8116811461465b57600080fd5b600060408284031215614a6d57600080fd5b614a756147bd565b90508135614a828161444f565b815260208201356bffffffffffffffffffffffff81168114614aa357600080fd5b602082015292915050565b60006020808385031215614ac157600080fd5b82356001600160401b0380821115614ad857600080fd5b818501915085601f830112614aec57600080fd5b8135614afa6148928261484e565b81815260059190911b83018401908481019088831115614b1957600080fd5b8585015b83811015614bf357803585811115614b355760008081fd5b860160e0818c03601f1901811315614b4d5760008081fd5b614b556147df565b8983013588811115614b675760008081fd5b614b758e8c83870101614871565b82525060408084013589811115614b8c5760008081fd5b614b9a8f8d838801016148e5565b8c840152506060614bac818601614464565b8284015260809150614bc08f838701614a5b565b90830152614bd060c08501614843565b90820152614bdf838301614464565b60a082015285525050918601918601614b1d565b5098975050505050505050565b8015158114610f8357600080fd5b600080600080600060808688031215614c2657600080fd5b85356001600160401b0380821115614c3d57600080fd5b9087019060e0828a031215614c5157600080fd5b90955060208701359080821115614c6757600080fd5b50614c74888289016144cf565b909550935050604086013591506060860135614c8f81614c00565b809150509295509295909350565b60008060408385031215614cb057600080fd5b8235614cbb8161444f565b91506020830135614ccb8161444f565b809150509250929050565b600060408284031215614ce857600080fd5b614cf06147bd565b905081356001600160401b0380821115614d0957600080fd5b818401915084601f830112614d1d57600080fd5b8135602082821115614d3157614d3161477f565b614d43601f8301601f19168201614801565b92508183528681838601011115614d5957600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a08688031215614d9657600080fd5b8535614da18161444f565b94506020860135614db18161444f565b935060408601356001600160401b0380821115614dcd57600080fd5b614dd989838a01614cd6565b94506060880135915080821115614def57600080fd5b50614dfc88828901614cd6565b95989497509295608001359392505050565b60008060208385031215614e2157600080fd5b82356001600160401b03811115614e3757600080fd5b614548858286016145aa565b60008060408385031215614e5657600080fd5b8235614e618161444f565b946020939093013593505050565b60008060008060808587031215614e8557600080fd5b8435614e908161444f565b9350602085013592506040850135614ea78161444f565b9396929550929360600135925050565b600081518084526020808501945080840160005b83811015614ef05781516001600160a01b031687529582019590820190600101614ecb565b509495945050505050565b600081518084526020808501945080840160005b83811015614ef057815187529582019590820190600101614f0f565b604081526000614f3e6040830185614eb7565b82810360208401526112d38185614efb565b600080600060608486031215614f6557600080fd5b8335614f708161444f565b925060208401356001600160401b03811115614f8b57600080fd5b614f9786828701614cd6565b925050604084013590509250925092565b600060608284031215614fba57600080fd5b61465b8383614598565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261502757600080fd5b9190910192915050565b6000808335601e1984360301811261504857600080fd5b8301803591506001600160401b0382111561506257600080fd5b6020019150600581901b360382131561416757600080fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156150a4576150a461507a565b5060010190565b6060810182356150ba8161444f565b6001600160a01b0390811683526020840135906150d68261444f565b16602083015260408301356150ea81614831565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561513e57600080fd5b815161465b8161444f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561520257600080fd5b815161465b81614c00565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261502757600080fd5b60006020828403121561527d57600080fd5b813561465b81614c00565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a08501526152e360e0850182614eb7565b905060c083015184820360c08601526112d38282614efb565b60208152600061465b6020830184615288565b602081526000825160e0602084015261532c610100840182614eb7565b90506020840151601f198483030160408501526153498282614efb565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a08501525060808401516153a160c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152509392505050565b600080604083850312156153d157600080fd5b82516153dc81614c00565b6020939093015192949293505050565b828152604060208201526000614a306040830184615288565b60006020828403121561541757600080fd5b5051919050565b600082601f83011261542f57600080fd5b8151602061543f6148928361484e565b82815260059290921b8401810191818101908684111561545e57600080fd5b8286015b848110156148da5780518352918301918301615462565b6000806040838503121561548c57600080fd5b82516001600160401b03808211156154a357600080fd5b818501915085601f8301126154b757600080fd5b815160206154c76148928361484e565b82815260059290921b840181019181810190898411156154e657600080fd5b948201945b8386101561550d5785516154fe8161444f565b825294820194908201906154eb565b9188015191965090935050508082111561552657600080fd5b506155338582860161541e565b9150509250929050565b600082198211156155505761555061507a565b500190565b6000828210156155675761556761507a565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156155a257600080fd5b813561465b81614831565b80546001600160a01b0319166001600160a01b0392909216919091179055565b81356155d88161444f565b6155e281836155ad565b506001810160208301356155f58161444f565b6155ff81836155ad565b50604083013561560e81614831565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6020808252825182820181905260009190848201906040850190845b8181101561458c5783516001600160a01b03168352928401929184019160010161564c565b600061567d3683614940565b92915050565b82815260006020604081840152835180604085015260005b818110156156b75785810183015185820160600152820161569b565b818111156156c9576000606083870101525b50601f01601f191692909201606001949350505050565b6000602082840312156156f257600080fd5b81516001600160e01b03198116811461465b57600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e636f6d706c657465517565756564a26469706673582212205ea0131cf5b5fb99da1fff7b870c94af10f99c971aedbf34ac1853af7e1af52464736f6c634300080c0033", + ABI: "[{\"inputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractISlasher\",\"name\":\"_slasher\",\"type\":\"address\"},{\"internalType\":\"contractIEigenPodManager\",\"name\":\"_eigenPodManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"avs\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"AVSMetadataURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"avs\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enumIDelegationManager.OperatorAVSRegistrationStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"newOperatorDetails\",\"type\":\"tuple\"}],\"name\":\"OperatorDetailsModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"OperatorMetadataURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"operatorDetails\",\"type\":\"tuple\"}],\"name\":\"OperatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"OperatorSharesDecreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"OperatorSharesIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"StakerDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"StakerForceUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"StakerUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"WithdrawalCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"WithdrawalDelayBlocksSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newWithdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"WithdrawalMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"indexed\":false,\"internalType\":\"structIDelegationManager.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"}],\"name\":\"WithdrawalQueued\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKER_DELEGATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"avsOperatorStatus\",\"outputs\":[{\"internalType\":\"enumIDelegationManager.OperatorAVSRegistrationStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beaconChainETHStrategy\",\"outputs\":[{\"internalType\":\"contractIStrategy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateCurrentStakerDelegationDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegationApprover\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"approverSalt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateDelegationApprovalDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"avs\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_stakerNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateStakerDelegationDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"internalType\":\"structIDelegationManager.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"}],\"name\":\"calculateWithdrawalRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"internalType\":\"structIDelegationManager.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAsTokens\",\"type\":\"bool\"}],\"name\":\"completeQueuedWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatedTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startBlock\",\"type\":\"uint32\"},{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"}],\"internalType\":\"structIDelegationManager.Withdrawal[]\",\"name\":\"withdrawals\",\"type\":\"tuple[]\"},{\"internalType\":\"contractIERC20[][]\",\"name\":\"tokens\",\"type\":\"address[][]\"},{\"internalType\":\"uint256[]\",\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"receiveAsTokens\",\"type\":\"bool[]\"}],\"name\":\"completeQueuedWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"cumulativeWithdrawalsQueued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"decreaseDelegatedShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"approverSalt\",\"type\":\"bytes32\"}],\"name\":\"delegateTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"approverSalt\",\"type\":\"bytes32\"}],\"name\":\"delegateToBySignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegatedTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"delegationApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"delegationApproverSaltIsSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"earningsReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenPodManager\",\"outputs\":[{\"internalType\":\"contractIEigenPodManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getDelegatableShares\",\"outputs\":[{\"internalType\":\"contractIStrategy[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"increaseDelegatedShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialPausedStatus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_withdrawalDelayBlocks\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isDelegated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"nonce\",\"type\":\"uint96\"}],\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"delegatedAddress\",\"type\":\"address\"}],\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"name\":\"withdrawalsToMigrate\",\"type\":\"tuple[]\"}],\"name\":\"migrateQueuedWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"newOperatorDetails\",\"type\":\"tuple\"}],\"name\":\"modifyOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"operatorDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"operatorSaltIsSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contractIStrategy\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIStrategy[]\",\"name\":\"strategies\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"}],\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\"}],\"name\":\"queueWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"earningsReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegationApprover\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\"}],\"internalType\":\"structIDelegationManager.OperatorDetails\",\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"registerAsOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakerNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"stakerOptOutWindowBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"metadataURI\",\"type\":\"string\"}],\"name\":\"updateOperatorMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawalDelayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162005fb038038062005fb0833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615d87620002296000396000612b660152600081816105f2015281816110b2015281816112d6015281816120c601528181612ebf01528181613d1001526144d70152600061083f01526000818161054a01528181611080015281816112a4015281816115cc0152818161215a01528181612f7101528181613e3e015261457d0152615d876000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c806365da1264116101de578063b13442711161010f578063d79aceab116100ad578063f16172b01161007c578063f16172b0146109f5578063f2fde38b14610a08578063f698da2514610a1b578063fabc1cbc14610a2357600080fd5b8063d79aceab14610995578063da8be864146109bc578063eb990c59146109cf578063eea9064b146109e257600080fd5b8063c5e480db116100e9578063c5e480db146108b2578063c94b511114610958578063ca661c041461096b578063cf80873e1461097457600080fd5b8063b13442711461083a578063b7f06ebe14610861578063bb45fef21461088457600080fd5b80639104c3191161017c578063a1060c8811610156578063a1060c88146107e1578063a1788484146107f4578063a364f4da14610814578063a98fb3551461082757600080fd5b80639104c319146107a05780639926ee7d146107bb57806399be81c8146107ce57600080fd5b8063778e55f3116101b8578063778e55f31461073e5780637f54807114610769578063886f11951461077c5780638da5cb5b1461078f57600080fd5b806365da1264146106fa5780636d70f7ae14610723578063715018a61461073657600080fd5b806339b70e38116102c357806350f73e7c116102615780635c975abb116102305780635c975abb146106a05780635cfe8d2c146106a85780635f966f14146106bb57806360d7faed146106e757600080fd5b806350f73e7c14610659578063595c6a6714610662578063597b36da1461066a5780635ac86ab71461067d57600080fd5b8063433773821161029d57806343377382146105c65780634665bcda146105ed57806349075da3146106145780634fc40b611461064f57600080fd5b806339b70e38146105455780633cdeb5e0146105845780633e28391d146105b357600080fd5b8063169283651161033057806328a573ae1161030a57806328a573ae146104c157806329c77d4f146104d457806333404396146104f4578063374823b51461050757600080fd5b8063169283651461044e5780631bbce0911461048757806320606b701461049a57600080fd5b80630f589e591161036c5780630f589e591461040057806310d67a2f14610415578063132d496714610428578063136439dd1461043b57600080fd5b806304a4f979146103935780630b9f487a146103cd5780630dd8dd02146103e0575b600080fd5b6103ba7f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce81565b6040519081526020015b60405180910390f35b6103ba6103db36600461496f565b610a36565b6103f36103ee366004614a0e565b610af8565b6040516103c49190614a4f565b61041361040e366004614aec565b610e72565b005b610413610423366004614b3f565b610fc2565b610413610436366004614b63565b611075565b610413610449366004614ba4565b61112c565b6103ba61045c366004614b3f565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103ba610495366004614b63565b61126b565b6103ba7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104136104cf366004614b63565b611299565b6103ba6104e2366004614b3f565b609b6020526000908152604090205481565b610413610502366004614bbd565b611349565b610535610515366004614c80565b60a260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016103c4565b61056c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103c4565b61056c610592366004614b3f565b6001600160a01b039081166000908152609960205260409020600101541690565b6105356105c1366004614b3f565b611486565b6103ba7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61056c7f000000000000000000000000000000000000000000000000000000000000000081565b610642610622366004614cac565b60a160209081526000928352604080842090915290825290205460ff1681565b6040516103c49190614cfb565b6103ba6213c68081565b6103ba609d5481565b6104136114a6565b6103ba610678366004614fa0565b61156d565b61053561068b366004614fdc565b606654600160ff9092169190911b9081161490565b6066546103ba565b6104136106b6366004615052565b61159d565b61056c6106c9366004614b3f565b6001600160a01b039081166000908152609960205260409020541690565b6104136106f53660046151b2565b611848565b61056c610708366004614b3f565b609a602052600090815260409020546001600160a01b031681565b610535610731366004614b3f565b6118e3565b610413611903565b6103ba61074c366004614cac565b609860209081526000928352604080842090915290825290205481565b610413610777366004615301565b611917565b60655461056c906001600160a01b031681565b6033546001600160a01b031661056c565b61056c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104136107c9366004615391565b611a1c565b6104136107dc36600461543c565b611d28565b6103ba6107ef366004615471565b611dfa565b6103ba610802366004614b3f565b609f6020526000908152604090205481565b610413610822366004614b3f565b611eba565b61041361083536600461543c565b612005565b61056c7f000000000000000000000000000000000000000000000000000000000000000081565b61053561086f366004614ba4565b609e6020526000908152604090205460ff1681565b610535610892366004614c80565b609c60209081526000928352604080842090915290825290205460ff1681565b6109226108c0366004614b3f565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff16908201526060016103c4565b6103ba6109663660046154b7565b612040565b6103ba61c4e081565b610987610982366004614b3f565b61209f565b6040516103c4929190615573565b6103ba7ff48bd254e30ce2953d187fdb4ef0cfdddb782ab1da55beebaef67c1f258d256e81565b6103f36109ca366004614b3f565b612457565b6104136109dd366004615471565b61291b565b6104136109f0366004615598565b612a4f565b610413610a033660046155f0565b612a5b565b610413610a16366004614b3f565b612aec565b6103ba612b62565b610413610a31366004614ba4565b612ba0565b604080517f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ab4612b62565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b2d5760405162461bcd60e51b8152600401610b249061560c565b60405180910390fd5b6000836001600160401b03811115610b4757610b47614d23565b604051908082528060200260200182016040528015610b70578160200160208202803683370190505b50905060005b84811015610e6957858582818110610b9057610b90615643565b9050602002810190610ba29190615659565b610bb0906020810190615679565b9050868683818110610bc457610bc4615643565b9050602002810190610bd69190615659565b610be09080615679565b905014610c555760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b24565b6000868683818110610c6957610c69615643565b9050602002810190610c7b9190615659565b610c8c906060810190604001614b3f565b6001600160a01b03161415610d1a5760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a206d7573742070726f766964652076616c6964207769746864726177616c606482015267206164647265737360c01b608482015260a401610b24565b336000818152609a60205260409020546001600160a01b031690610e399082898986818110610d4b57610d4b615643565b9050602002810190610d5d9190615659565b610d6e906060810190604001614b3f565b8a8a87818110610d8057610d80615643565b9050602002810190610d929190615659565b610d9c9080615679565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150899050818110610de257610de2615643565b9050602002810190610df49190615659565b610e02906020810190615679565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cfc92505050565b838381518110610e4b57610e4b615643565b60209081029190910101525080610e61816156d8565b915050610b76565b50949350505050565b336000908152609960205260409020546001600160a01b031615610f0c5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b24565b610f16338461311e565b604080518082019091526060815260006020820152610f3833808360006133ba565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f7191906156f3565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb4929190615745565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110399190615774565b6001600160a01b0316336001600160a01b0316146110695760405162461bcd60e51b8152600401610b2490615791565b6110728161376a565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d45750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6110f05760405162461bcd60e51b8152600401610b24906157db565b6110f983611486565b15611127576001600160a01b038084166000908152609a60205260409020541661112581858585613861565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111989190615838565b6111b45760405162461bcd60e51b8152600401610b2490615855565b6066548181161461122d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b24565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b0383166000908152609b602052604081205461129085828686612040565b95945050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112f85750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113145760405162461bcd60e51b8152600401610b24906157db565b61131d83611486565b15611127576001600160a01b038084166000908152609a602052604090205416611125818585856138dc565b606654600290600490811614156113725760405162461bcd60e51b8152600401610b249061560c565b600260c95414156113c55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b24565b600260c95560005b88811015611475576114658a8a838181106113ea576113ea615643565b90506020028101906113fc919061589d565b89898481811061140e5761140e615643565b90506020028101906114209190615679565b89898681811061143257611432615643565b9050602002013588888781811061144b5761144b615643565b905060200201602081019061146091906158b3565b613957565b61146e816156d8565b90506113cd565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190615838565b61152e5760405162461bcd60e51b8152600401610b2490615855565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016115809190615944565b604051602081830303815290604052805190602001209050919050565b60005b81518110156118445760008282815181106115bd576115bd615643565b602002602001015190506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd293f6f846040518263ffffffff1660e01b81526004016116169190615957565b60408051808303816000875af1158015611634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116589190615a06565b915091508115611836576040808401516001600160a01b0381166000908152609f6020529182208054919282919061168f836156d8565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff1681526020018760000151815260200187602001518152509050600061170f8261156d565b6000818152609e602052604090205490915060ff16156117a55760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b24565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906117f09083908590615a34565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506115a0565b5050565b606654600290600490811614156118715760405162461bcd60e51b8152600401610b249061560c565b600260c95414156118c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b24565b600260c9556118d68686868686613957565b5050600160c95550505050565b6001600160a01b0390811660009081526099602052604090205416151590565b61190b613fbf565b6119156000614019565b565b428360200151101561199b5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b24565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119d78783888860200151612040565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611a07908890839061406b565b611a13878786866133ba565b50505050505050565b60665460039060089081161415611a455760405162461bcd60e51b8152600401610b249061560c565b4282604001511015611ab95760405162461bcd60e51b81526020600482015260436024820152600080516020615d1283398151915260448201527f6f72546f4156533a206f70657261746f72207369676e617475726520657870696064820152621c995960ea1b608482015260a401610b24565b600133600090815260a1602090815260408083206001600160a01b038816845290915290205460ff166001811115611af357611af3614ce5565b1415611b635760405162461bcd60e51b815260206004820152604460248201819052600080516020615d12833981519152908201527f6f72546f4156533a206f70657261746f7220616c726561647920726567697374606482015263195c995960e21b608482015260a401610b24565b6001600160a01b038316600090815260a26020908152604080832085830151845290915290205460ff1615611bee5760405162461bcd60e51b815260206004820152603b6024820152600080516020615d1283398151915260448201527f6f72546f4156533a2073616c7420616c7265616479207370656e7400000000006064820152608401610b24565b611bf7836118e3565b611c725760405162461bcd60e51b81526020600482015260526024820152600080516020615d1283398151915260448201527f6f72546f4156533a206f70657261746f72206e6f742072656769737465726564606482015271081d1bc8115a59d95b93185e595c881e595d60721b608482015260a401610b24565b6000611c88843385602001518660400151611dfa565b9050611c998482856000015161406b565b33600081815260a1602090815260408083206001600160a01b0389168085529083528184208054600160ff19918216811790925560a285528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191611d1a9190614cfb565b60405180910390a350505050565b611d31336118e3565b611db35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b24565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611dee929190615745565b60405180910390a25050565b604080517ff48bd254e30ce2953d187fdb4ef0cfdddb782ab1da55beebaef67c1f258d256e60208201526001600160a01b038087169282019290925290841660608201526080810183905260a08101829052600090819060c0015b6040516020818303038152906040528051906020012090506000611e77612b62565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460039060089081161415611ee35760405162461bcd60e51b8152600401610b249061560c565b600133600090815260a1602090815260408083206001600160a01b038716845290915290205460ff166001811115611f1d57611f1d614ce5565b14611f9e5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e646572656769737465724f706572908201527f61746f7246726f6d4156533a206f70657261746f72206e6f7420726567697374606482015263195c995960e21b608482015260a401610b24565b33600081815260a1602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191611ff99190614cfb565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051611dee929190615745565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b60208201526001600160a01b038087169282019290925290831660608201526080810184905260a08101829052600090819060c001611e55565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121339190615a4d565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa1580156121a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121cb9190810190615ac1565b91509150600083136121e257909590945092505050565b60608083516000141561229c576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260008151811061225757612257615643565b60200260200101906001600160a01b031690816001600160a01b031681525050848160008151811061228b5761228b615643565b60200260200101818152505061244a565b83516122a9906001615b85565b6001600160401b038111156122c0576122c0614d23565b6040519080825280602002602001820160405280156122e9578160200160208202803683370190505b50915081516001600160401b0381111561230557612305614d23565b60405190808252806020026020018201604052801561232e578160200160208202803683370190505b50905060005b84518110156123c85784818151811061234f5761234f615643565b602002602001015183828151811061236957612369615643565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061239b5761239b615643565b60200260200101518282815181106123b5576123b5615643565b6020908102919091010152600101612334565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516123ed9190615b9d565b815181106123fd576123fd615643565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001845161242d9190615b9d565b8151811061243d5761243d615643565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156124835760405162461bcd60e51b8152600401610b249061560c565b61248c83611486565b61250c5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b24565b612515836118e3565b156125885760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b24565b6001600160a01b0383166126045760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b24565b6001600160a01b038084166000818152609a6020526040902054909116903314806126375750336001600160a01b038216145b8061265e57506001600160a01b038181166000908152609960205260409020600101541633145b6126d05760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b24565b6000806126dc8661209f565b9092509050336001600160a01b0387161461273257826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516127b4576040805160008152602081019091529450612912565b81516001600160401b038111156127cd576127cd614d23565b6040519080825280602002602001820160405280156127f6578160200160208202803683370190505b50945060005b82518110156129105760408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833701905050905084838151811061285c5761285c615643565b60200260200101518260008151811061287757612877615643565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106128a9576128a9615643565b6020026020010151816000815181106128c4576128c4615643565b6020026020010181815250506128dd89878b8585612cfc565b8884815181106128ef576128ef615643565b60200260200101818152505050508080612908906156d8565b9150506127fc565b505b50505050919050565b600054610100900460ff161580801561293b5750600054600160ff909116105b806129555750303b158015612955575060005460ff166001145b6129b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b24565b6000805460ff1916600117905580156129db576000805461ff0019166101001790555b6129e58484614225565b6129ed61430b565b6097556129f985614019565b612a02826143a2565b8015612a48576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b611127338484846133ba565b612a64336118e3565b612ae25760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b24565b611072338261311e565b612af4613fbf565b6001600160a01b038116612b595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b24565b61107281614019565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612b93575060975490565b612b9b61430b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c179190615774565b6001600160a01b0316336001600160a01b031614612c475760405162461bcd60e51b8152600401610b2490615791565b606654198119606654191614612cc55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b24565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001611260565b60006001600160a01b038616612d935760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b24565b8251612e1d5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b24565b60005b835181101561302c576001600160a01b03861615612e7657612e768688868481518110612e4f57612e4f615643565b6020026020010151868581518110612e6957612e69615643565b6020026020010151613861565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ea657612ea6615643565b60200260200101516001600160a01b03161415612f6f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612eff57612eff615643565b60200260200101516040518363ffffffff1660e01b8152600401612f389291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612f5257600080fd5b505af1158015612f66573d6000803e3d6000fd5b50505050613024565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612fb157612fb1615643565b6020026020010151868581518110612fcb57612fcb615643565b60200260200101516040518463ffffffff1660e01b8152600401612ff193929190615bb4565b600060405180830381600087803b15801561300b57600080fd5b505af115801561301f573d6000803e3d6000fd5b505050505b600101612e20565b506001600160a01b0386166000908152609f60205260408120805491829190613054836156d8565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006130bc8261156d565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061310a9083908590615a34565b60405180910390a198975050505050505050565b600061312d6020830183614b3f565b6001600160a01b031614156131c75760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b24565b6213c6806131db6060830160408401615bd8565b63ffffffff1611156132905760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b24565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906132cc9060608401908401615bd8565b63ffffffff1610156133625760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b24565b6001600160a01b038216600090815260996020526040902081906133868282615c15565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611dee9084906156f3565b606654600090600190811614156133e35760405162461bcd60e51b8152600401610b249061560c565b6133ec85611486565b156134695760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b24565b613472846118e3565b6134f25760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b24565b6001600160a01b038085166000908152609960205260409020600101541680158015906135285750336001600160a01b03821614155b801561353d5750336001600160a01b03861614155b156136aa5742846020015110156135bc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b24565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156136565760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b24565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613697908890889085908890610a36565b90506136a88282876000015161406b565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806137098861209f565b9150915060005b825181101561375f57613757888a85848151811061373057613730615643565b602002602001015185858151811061374a5761374a615643565b60200260200101516138dc565b600101613710565b505050505050505050565b6001600160a01b0381166137f85760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b24565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613898908490615b9d565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb493929190615bb4565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613913908490615b85565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb493929190615bb4565b600061396561067887615c78565b6000818152609e602052604090205490915060ff166139da5760405162461bcd60e51b815260206004820152603e6024820152600080516020615d3283398151915260448201527f416374696f6e3a20616374696f6e206973206e6f7420696e20717565756500006064820152608401610b24565b609d5443906139ef60a0890160808a01615bd8565b63ffffffff166139ff9190615b85565b1115613a875760405162461bcd60e51b81526020600482015260576024820152600080516020615d3283398151915260448201527f416374696f6e3a207769746864726177616c44656c6179426c6f636b7320706560648201527f72696f6420686173206e6f742079657420706173736564000000000000000000608482015260a401610b24565b613a976060870160408801614b3f565b6001600160a01b0316336001600160a01b031614613b1f5760405162461bcd60e51b815260206004820152604b6024820152600080516020615d3283398151915260448201527f416374696f6e3a206f6e6c7920776974686472617765722063616e20636f6d7060648201526a3632ba329030b1ba34b7b760a91b608482015260a401610b24565b8115613b9657613b3260a0870187615679565b85149050613b965760405162461bcd60e51b815260206004820152603d6024820152600080516020615d3283398151915260448201527f416374696f6e3a20696e707574206c656e677468206d69736d617463680000006064820152608401610b24565b6000818152609e60205260409020805460ff191690558115613c6c5760005b613bc260a0880188615679565b9050811015613c6657613c5e613bdb6020890189614b3f565b33613be960a08b018b615679565b85818110613bf957613bf9615643565b9050602002016020810190613c0e9190614b3f565b613c1b60c08c018c615679565b86818110613c2b57613c2b615643565b905060200201358a8a87818110613c4457613c44615643565b9050602002016020810190613c599190614b3f565b61449c565b600101613bb5565b50613f84565b336000908152609a60205260408120546001600160a01b0316905b613c9460a0890189615679565b9050811015613f815773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613cbf60a08a018a615679565b83818110613ccf57613ccf615643565b9050602002016020810190613ce49190614b3f565b6001600160a01b03161415613e34576000613d0260208a018a614b3f565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613d4360c08e018e615679565b87818110613d5357613d53615643565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dcb9190615a4d565b6001600160a01b038084166000908152609a6020526040902054919250168015613e2c57613e2c8184613e0160a08f018f615679565b88818110613e1157613e11615643565b9050602002016020810190613e269190614b3f565b856138dc565b505050613f79565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166350ff722533613e7160a08c018c615679565b85818110613e8157613e81615643565b9050602002016020810190613e969190614b3f565b613ea360c08d018d615679565b86818110613eb357613eb3615643565b905060200201356040518463ffffffff1660e01b8152600401613ed893929190615bb4565b600060405180830381600087803b158015613ef257600080fd5b505af1158015613f06573d6000803e3d6000fd5b505050506001600160a01b03821615613f7957613f798233613f2b60a08c018c615679565b85818110613f3b57613f3b615643565b9050602002016020810190613f509190614b3f565b613f5d60c08d018d615679565b86818110613f6d57613f6d615643565b905060200201356138dc565b600101613c87565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6033546001600160a01b031633146119155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b24565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b1561418557604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906140ab9086908690600401615c8a565b602060405180830381865afa1580156140c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ec9190615ce7565b6001600160e01b031916146111275760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b24565b826001600160a01b031661419983836145d5565b6001600160a01b0316146111275760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b24565b6065546001600160a01b031615801561424657506001600160a01b03821615155b6142c85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b24565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118448261376a565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b61c4e081111561445b5760405162461bcd60e51b815260206004820152607260248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a6557697460448201527f6864726177616c44656c6179426c6f636b733a205f7769746864726177616c4460648201527f656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844608482015271524157414c5f44454c41595f424c4f434b5360701b60a482015260c401610b24565b609d5460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a1609d55565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156145475760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b13009061451090889088908790600401615bb4565b600060405180830381600087803b15801561452a57600080fd5b505af115801561453e573d6000803e3d6000fd5b50505050612a48565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156145c157600080fd5b505af115801561375f573d6000803e3d6000fd5b60008060006145e485856145f9565b915091506145f181614669565b509392505050565b6000808251604114156146305760208301516040840151606085015160001a61462487828585614824565b94509450505050614662565b82516040141561465a576020830151604084015161464f868383614911565b935093505050614662565b506000905060025b9250929050565b600081600481111561467d5761467d614ce5565b14156146865750565b600181600481111561469a5761469a614ce5565b14156146e85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b24565b60028160048111156146fc576146fc614ce5565b141561474a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b24565b600381600481111561475e5761475e614ce5565b14156147b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b24565b60048160048111156147cb576147cb614ce5565b14156110725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b24565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561485b5750600090506003614908565b8460ff16601b1415801561487357508460ff16601c14155b156148845750600090506004614908565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156148d8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661490157600060019250925050614908565b9150600090505b94509492505050565b6000806001600160ff1b0383168161492e60ff86901c601b615b85565b905061493c87828885614824565b935093505050935093915050565b6001600160a01b038116811461107257600080fd5b803561496a8161494a565b919050565b600080600080600060a0868803121561498757600080fd5b85356149928161494a565b945060208601356149a28161494a565b935060408601356149b28161494a565b94979396509394606081013594506080013592915050565b60008083601f8401126149dc57600080fd5b5081356001600160401b038111156149f357600080fd5b6020830191508360208260051b850101111561466257600080fd5b60008060208385031215614a2157600080fd5b82356001600160401b03811115614a3757600080fd5b614a43858286016149ca565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614a8757835183529284019291840191600101614a6b565b50909695505050505050565b600060608284031215614aa557600080fd5b50919050565b60008083601f840112614abd57600080fd5b5081356001600160401b03811115614ad457600080fd5b60208301915083602082850101111561466257600080fd5b600080600060808486031215614b0157600080fd5b614b0b8585614a93565b925060608401356001600160401b03811115614b2657600080fd5b614b3286828701614aab565b9497909650939450505050565b600060208284031215614b5157600080fd5b8135614b5c8161494a565b9392505050565b600080600060608486031215614b7857600080fd5b8335614b838161494a565b92506020840135614b938161494a565b929592945050506040919091013590565b600060208284031215614bb657600080fd5b5035919050565b6000806000806000806000806080898b031215614bd957600080fd5b88356001600160401b0380821115614bf057600080fd5b614bfc8c838d016149ca565b909a50985060208b0135915080821115614c1557600080fd5b614c218c838d016149ca565b909850965060408b0135915080821115614c3a57600080fd5b614c468c838d016149ca565b909650945060608b0135915080821115614c5f57600080fd5b50614c6c8b828c016149ca565b999c989b5096995094979396929594505050565b60008060408385031215614c9357600080fd5b8235614c9e8161494a565b946020939093013593505050565b60008060408385031215614cbf57600080fd5b8235614cca8161494a565b91506020830135614cda8161494a565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614d1d57634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614d5b57614d5b614d23565b60405290565b604080519081016001600160401b0381118282101715614d5b57614d5b614d23565b60405160c081016001600160401b0381118282101715614d5b57614d5b614d23565b604051601f8201601f191681016001600160401b0381118282101715614dcd57614dcd614d23565b604052919050565b63ffffffff8116811461107257600080fd5b803561496a81614dd5565b60006001600160401b03821115614e0b57614e0b614d23565b5060051b60200190565b600082601f830112614e2657600080fd5b81356020614e3b614e3683614df2565b614da5565b82815260059290921b84018101918181019086841115614e5a57600080fd5b8286015b84811015614e7e578035614e718161494a565b8352918301918301614e5e565b509695505050505050565b600082601f830112614e9a57600080fd5b81356020614eaa614e3683614df2565b82815260059290921b84018101918181019086841115614ec957600080fd5b8286015b84811015614e7e5780358352918301918301614ecd565b600060e08284031215614ef657600080fd5b614efe614d39565b9050614f098261495f565b8152614f176020830161495f565b6020820152614f286040830161495f565b604082015260608201356060820152614f4360808301614de7565b608082015260a08201356001600160401b0380821115614f6257600080fd5b614f6e85838601614e15565b60a084015260c0840135915080821115614f8757600080fd5b50614f9484828501614e89565b60c08301525092915050565b600060208284031215614fb257600080fd5b81356001600160401b03811115614fc857600080fd5b614fd484828501614ee4565b949350505050565b600060208284031215614fee57600080fd5b813560ff81168114614b5c57600080fd5b60006040828403121561501157600080fd5b615019614d61565b905081356150268161494a565b815260208201356bffffffffffffffffffffffff8116811461504757600080fd5b602082015292915050565b6000602080838503121561506557600080fd5b82356001600160401b038082111561507c57600080fd5b818501915085601f83011261509057600080fd5b813561509e614e3682614df2565b81815260059190911b830184019084810190888311156150bd57600080fd5b8585015b83811015615197578035858111156150d95760008081fd5b860160e0818c03601f19018113156150f15760008081fd5b6150f9614d83565b898301358881111561510b5760008081fd5b6151198e8c83870101614e15565b825250604080840135898111156151305760008081fd5b61513e8f8d83880101614e89565b8c84015250606061515081860161495f565b82840152608091506151648f838701614fff565b9083015261517460c08501614de7565b9082015261518383830161495f565b60a0820152855250509186019186016150c1565b5098975050505050505050565b801515811461107257600080fd5b6000806000806000608086880312156151ca57600080fd5b85356001600160401b03808211156151e157600080fd5b9087019060e0828a0312156151f557600080fd5b9095506020870135908082111561520b57600080fd5b50615218888289016149ca565b909550935050604086013591506060860135615233816151a4565b809150509295509295909350565b600082601f83011261525257600080fd5b81356001600160401b0381111561526b5761526b614d23565b61527e601f8201601f1916602001614da5565b81815284602083860101111561529357600080fd5b816020850160208301376000918101602001919091529392505050565b6000604082840312156152c257600080fd5b6152ca614d61565b905081356001600160401b038111156152e257600080fd5b6152ee84828501615241565b8252506020820135602082015292915050565b600080600080600060a0868803121561531957600080fd5b85356153248161494a565b945060208601356153348161494a565b935060408601356001600160401b038082111561535057600080fd5b61535c89838a016152b0565b9450606088013591508082111561537257600080fd5b5061537f888289016152b0565b95989497509295608001359392505050565b600080604083850312156153a457600080fd5b82356153af8161494a565b915060208301356001600160401b03808211156153cb57600080fd5b90840190606082870312156153df57600080fd5b6040516060810181811083821117156153fa576153fa614d23565b60405282358281111561540c57600080fd5b61541888828601615241565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806020838503121561544f57600080fd5b82356001600160401b0381111561546557600080fd5b614a4385828601614aab565b6000806000806080858703121561548757600080fd5b84356154928161494a565b935060208501356154a28161494a565b93969395505050506040820135916060013590565b600080600080608085870312156154cd57600080fd5b84356154d88161494a565b93506020850135925060408501356154ef8161494a565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155385781516001600160a01b031687529582019590820190600101615513565b509495945050505050565b600081518084526020808501945080840160005b8381101561553857815187529582019590820190600101615557565b60408152600061558660408301856154ff565b82810360208401526112908185615543565b6000806000606084860312156155ad57600080fd5b83356155b88161494a565b925060208401356001600160401b038111156155d357600080fd5b6155df868287016152b0565b925050604084013590509250925092565b60006060828403121561560257600080fd5b614b5c8383614a93565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261566f57600080fd5b9190910192915050565b6000808335601e1984360301811261569057600080fd5b8301803591506001600160401b038211156156aa57600080fd5b6020019150600581901b360382131561466257600080fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156156ec576156ec6156c2565b5060010190565b6060810182356157028161494a565b6001600160a01b03908116835260208401359061571e8261494a565b166020830152604083013561573281614dd5565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561578657600080fd5b8151614b5c8161494a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561584a57600080fd5b8151614b5c816151a4565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261566f57600080fd5b6000602082840312156158c557600080fd5b8135614b5c816151a4565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261592b60e08501826154ff565b905060c083015184820360c08601526112908282615543565b602081526000614b5c60208301846158d0565b602081526000825160e060208401526159746101008401826154ff565b90506020840151601f198483030160408501526159918282615543565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a08501525060808401516159e960c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152509392505050565b60008060408385031215615a1957600080fd5b8251615a24816151a4565b6020939093015192949293505050565b828152604060208201526000614fd460408301846158d0565b600060208284031215615a5f57600080fd5b5051919050565b600082601f830112615a7757600080fd5b81516020615a87614e3683614df2565b82815260059290921b84018101918181019086841115615aa657600080fd5b8286015b84811015614e7e5780518352918301918301615aaa565b60008060408385031215615ad457600080fd5b82516001600160401b0380821115615aeb57600080fd5b818501915085601f830112615aff57600080fd5b81516020615b0f614e3683614df2565b82815260059290921b84018101918181019089841115615b2e57600080fd5b948201945b83861015615b55578551615b468161494a565b82529482019490820190615b33565b91880151919650909350505080821115615b6e57600080fd5b50615b7b85828601615a66565b9150509250929050565b60008219821115615b9857615b986156c2565b500190565b600082821015615baf57615baf6156c2565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615bea57600080fd5b8135614b5c81614dd5565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615c208161494a565b615c2a8183615bf5565b50600181016020830135615c3d8161494a565b615c478183615bf5565b506040830135615c5681614dd5565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615c843683614ee4565b92915050565b82815260006020604081840152835180604085015260005b81811015615cbe57858101830151858201606001528201615ca2565b81811115615cd0576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615cf957600080fd5b81516001600160e01b031981168114614b5c57600080fdfe44656c65676174696f6e4d616e616765722e72656769737465724f706572617444656c65676174696f6e4d616e616765722e636f6d706c657465517565756564a26469706673582212206a81cf1e3f4da9c1111581c8df74dfd0a545ece3552675f7c9396674b435d7ab64736f6c634300080c0033", } // ContractDelegationManagerABI is the input ABI used to generate the binding from. @@ -124,14 +131,20 @@ type ContractDelegationManagerCalls interface { MAXWITHDRAWALDELAYBLOCKS(opts *bind.CallOpts) (*big.Int, error) + OPERATORAVSREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) + STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) + AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) + BeaconChainETHStrategy(opts *bind.CallOpts) (common.Address, error) CalculateCurrentStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) CalculateDelegationApprovalDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) + CalculateOperatorAVSRegistrationDigestHash(opts *bind.CallOpts, operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) + CalculateStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) CalculateWithdrawalRoot(opts *bind.CallOpts, withdrawal IDelegationManagerWithdrawal) ([32]byte, error) @@ -158,6 +171,8 @@ type ContractDelegationManagerCalls interface { OperatorDetails(opts *bind.CallOpts, operator common.Address) (IDelegationManagerOperatorDetails, error) + OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) + OperatorShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) Owner(opts *bind.CallOpts) (common.Address, error) @@ -172,8 +187,6 @@ type ContractDelegationManagerCalls interface { Slasher(opts *bind.CallOpts) (common.Address, error) - StakeRegistry(opts *bind.CallOpts) (common.Address, error) - StakerNonce(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) StakerOptOutWindowBlocks(opts *bind.CallOpts, operator common.Address) (*big.Int, error) @@ -195,9 +208,11 @@ type ContractDelegationManagerTransacts interface { DelegateToBySignature(opts *bind.TransactOpts, staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) + DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) + IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) - Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) + Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) MigrateQueuedWithdrawals(opts *bind.TransactOpts, withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) @@ -211,29 +226,37 @@ type ContractDelegationManagerTransacts interface { RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) + RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) + RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) - SetStakeRegistry(opts *bind.TransactOpts, _stakeRegistry common.Address) (*types.Transaction, error) - - SetWithdrawalDelayBlocks(opts *bind.TransactOpts, newWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) - TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) Undelegate(opts *bind.TransactOpts, staker common.Address) (*types.Transaction, error) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) + UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) + UpdateOperatorMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) } // ContractDelegationManagerFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. type ContractDelegationManagerFilters interface { + FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*ContractDelegationManagerAVSMetadataURIUpdatedIterator, error) + WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) + ParseAVSMetadataURIUpdated(log types.Log) (*ContractDelegationManagerAVSMetadataURIUpdated, error) + FilterInitialized(opts *bind.FilterOpts) (*ContractDelegationManagerInitializedIterator, error) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerInitialized) (event.Subscription, error) ParseInitialized(log types.Log) (*ContractDelegationManagerInitialized, error) + FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator, error) + WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) + ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*ContractDelegationManagerOperatorAVSRegistrationStatusUpdated, error) + FilterOperatorDetailsModified(opts *bind.FilterOpts, operator []common.Address) (*ContractDelegationManagerOperatorDetailsModifiedIterator, error) WatchOperatorDetailsModified(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorDetailsModified, operator []common.Address) (event.Subscription, error) ParseOperatorDetailsModified(log types.Log) (*ContractDelegationManagerOperatorDetailsModified, error) @@ -266,10 +289,6 @@ type ContractDelegationManagerFilters interface { WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerPauserRegistrySet) (event.Subscription, error) ParsePauserRegistrySet(log types.Log) (*ContractDelegationManagerPauserRegistrySet, error) - FilterStakeRegistrySet(opts *bind.FilterOpts) (*ContractDelegationManagerStakeRegistrySetIterator, error) - WatchStakeRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStakeRegistrySet) (event.Subscription, error) - ParseStakeRegistrySet(log types.Log) (*ContractDelegationManagerStakeRegistrySet, error) - FilterStakerDelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*ContractDelegationManagerStakerDelegatedIterator, error) WatchStakerDelegated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStakerDelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) ParseStakerDelegated(log types.Log) (*ContractDelegationManagerStakerDelegated, error) @@ -581,6 +600,37 @@ func (_ContractDelegationManager *ContractDelegationManagerCallerSession) MAXWIT return _ContractDelegationManager.Contract.MAXWITHDRAWALDELAYBLOCKS(&_ContractDelegationManager.CallOpts) } +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) OPERATORAVSREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "OPERATOR_AVS_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_ContractDelegationManager.CallOpts) +} + // STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // // Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) @@ -612,6 +662,37 @@ func (_ContractDelegationManager *ContractDelegationManagerCallerSession) STAKER return _ContractDelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_ContractDelegationManager.CallOpts) } +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_ContractDelegationManager *ContractDelegationManagerCaller) AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "avsOperatorStatus", arg0, arg1) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_ContractDelegationManager *ContractDelegationManagerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _ContractDelegationManager.Contract.AvsOperatorStatus(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _ContractDelegationManager.Contract.AvsOperatorStatus(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -705,6 +786,37 @@ func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Calcul return _ContractDelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_ContractDelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) } +// CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. +// +// Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) CalculateOperatorAVSRegistrationDigestHash(opts *bind.CallOpts, operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "calculateOperatorAVSRegistrationDigestHash", operator, avs, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. +// +// Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateOperatorAVSRegistrationDigestHash(&_ContractDelegationManager.CallOpts, operator, avs, salt, expiry) +} + +// CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. +// +// Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateOperatorAVSRegistrationDigestHash(&_ContractDelegationManager.CallOpts, operator, avs, salt, expiry) +} + // CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. // // Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) @@ -1109,6 +1221,37 @@ func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Operat return _ContractDelegationManager.Contract.OperatorDetails(&_ContractDelegationManager.CallOpts, operator) } +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _ContractDelegationManager.Contract.OperatorSaltIsSpent(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _ContractDelegationManager.Contract.OperatorSaltIsSpent(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // // Solidity: function operatorShares(address , address ) view returns(uint256) @@ -1326,37 +1469,6 @@ func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Slashe return _ContractDelegationManager.Contract.Slasher(&_ContractDelegationManager.CallOpts) } -// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. -// -// Solidity: function stakeRegistry() view returns(address) -func (_ContractDelegationManager *ContractDelegationManagerCaller) StakeRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractDelegationManager.contract.Call(opts, &out, "stakeRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. -// -// Solidity: function stakeRegistry() view returns(address) -func (_ContractDelegationManager *ContractDelegationManagerSession) StakeRegistry() (common.Address, error) { - return _ContractDelegationManager.Contract.StakeRegistry(&_ContractDelegationManager.CallOpts) -} - -// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. -// -// Solidity: function stakeRegistry() view returns(address) -func (_ContractDelegationManager *ContractDelegationManagerCallerSession) StakeRegistry() (common.Address, error) { - return _ContractDelegationManager.Contract.StakeRegistry(&_ContractDelegationManager.CallOpts) -} - // StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. // // Solidity: function stakerNonce(address ) view returns(uint256) @@ -1586,6 +1698,27 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) De return _ContractDelegationManager.Contract.DelegateToBySignature(&_ContractDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DeregisterOperatorFromAVS(&_ContractDelegationManager.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DeregisterOperatorFromAVS(&_ContractDelegationManager.TransactOpts, operator) +} + // IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // // Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() @@ -1607,25 +1740,25 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) In return _ContractDelegationManager.Contract.IncreaseDelegatedShares(&_ContractDelegationManager.TransactOpts, staker, strategy, shares) } -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. +// Initialize is a paid mutator transaction binding the contract method 0xeb990c59. // -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_ContractDelegationManager *ContractDelegationManagerTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractDelegationManager.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus) +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus, _withdrawalDelayBlocks) } -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. +// Initialize is a paid mutator transaction binding the contract method 0xeb990c59. // -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_ContractDelegationManager *ContractDelegationManagerSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractDelegationManager.Contract.Initialize(&_ContractDelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Initialize(&_ContractDelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _withdrawalDelayBlocks) } -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. +// Initialize is a paid mutator transaction binding the contract method 0xeb990c59. // -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractDelegationManager.Contract.Initialize(&_ContractDelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Initialize(&_ContractDelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _withdrawalDelayBlocks) } // MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. @@ -1754,6 +1887,27 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Re return _ContractDelegationManager.Contract.RegisterAsOperator(&_ContractDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) } +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.RegisterOperatorToAVS(&_ContractDelegationManager.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.RegisterOperatorToAVS(&_ContractDelegationManager.TransactOpts, operator, operatorSignature) +} + // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() @@ -1796,48 +1950,6 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Se return _ContractDelegationManager.Contract.SetPauserRegistry(&_ContractDelegationManager.TransactOpts, newPauserRegistry) } -// SetStakeRegistry is a paid mutator transaction binding the contract method 0xe3b05f2f. -// -// Solidity: function setStakeRegistry(address _stakeRegistry) returns() -func (_ContractDelegationManager *ContractDelegationManagerTransactor) SetStakeRegistry(opts *bind.TransactOpts, _stakeRegistry common.Address) (*types.Transaction, error) { - return _ContractDelegationManager.contract.Transact(opts, "setStakeRegistry", _stakeRegistry) -} - -// SetStakeRegistry is a paid mutator transaction binding the contract method 0xe3b05f2f. -// -// Solidity: function setStakeRegistry(address _stakeRegistry) returns() -func (_ContractDelegationManager *ContractDelegationManagerSession) SetStakeRegistry(_stakeRegistry common.Address) (*types.Transaction, error) { - return _ContractDelegationManager.Contract.SetStakeRegistry(&_ContractDelegationManager.TransactOpts, _stakeRegistry) -} - -// SetStakeRegistry is a paid mutator transaction binding the contract method 0xe3b05f2f. -// -// Solidity: function setStakeRegistry(address _stakeRegistry) returns() -func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) SetStakeRegistry(_stakeRegistry common.Address) (*types.Transaction, error) { - return _ContractDelegationManager.Contract.SetStakeRegistry(&_ContractDelegationManager.TransactOpts, _stakeRegistry) -} - -// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. -// -// Solidity: function setWithdrawalDelayBlocks(uint256 newWithdrawalDelayBlocks) returns() -func (_ContractDelegationManager *ContractDelegationManagerTransactor) SetWithdrawalDelayBlocks(opts *bind.TransactOpts, newWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) { - return _ContractDelegationManager.contract.Transact(opts, "setWithdrawalDelayBlocks", newWithdrawalDelayBlocks) -} - -// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. -// -// Solidity: function setWithdrawalDelayBlocks(uint256 newWithdrawalDelayBlocks) returns() -func (_ContractDelegationManager *ContractDelegationManagerSession) SetWithdrawalDelayBlocks(newWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) { - return _ContractDelegationManager.Contract.SetWithdrawalDelayBlocks(&_ContractDelegationManager.TransactOpts, newWithdrawalDelayBlocks) -} - -// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. -// -// Solidity: function setWithdrawalDelayBlocks(uint256 newWithdrawalDelayBlocks) returns() -func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) SetWithdrawalDelayBlocks(newWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) { - return _ContractDelegationManager.Contract.SetWithdrawalDelayBlocks(&_ContractDelegationManager.TransactOpts, newWithdrawalDelayBlocks) -} - // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() @@ -1861,21 +1973,21 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Tr // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. // -// Solidity: function undelegate(address staker) returns(bytes32) +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) func (_ContractDelegationManager *ContractDelegationManagerTransactor) Undelegate(opts *bind.TransactOpts, staker common.Address) (*types.Transaction, error) { return _ContractDelegationManager.contract.Transact(opts, "undelegate", staker) } // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. // -// Solidity: function undelegate(address staker) returns(bytes32) +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) func (_ContractDelegationManager *ContractDelegationManagerSession) Undelegate(staker common.Address) (*types.Transaction, error) { return _ContractDelegationManager.Contract.Undelegate(&_ContractDelegationManager.TransactOpts, staker) } // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. // -// Solidity: function undelegate(address staker) returns(bytes32) +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Undelegate(staker common.Address) (*types.Transaction, error) { return _ContractDelegationManager.Contract.Undelegate(&_ContractDelegationManager.TransactOpts, staker) } @@ -1901,6 +2013,27 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Un return _ContractDelegationManager.Contract.Unpause(&_ContractDelegationManager.TransactOpts, newPausedStatus) } +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.UpdateAVSMetadataURI(&_ContractDelegationManager.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.UpdateAVSMetadataURI(&_ContractDelegationManager.TransactOpts, metadataURI) +} + // UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. // // Solidity: function updateOperatorMetadataURI(string metadataURI) returns() @@ -1922,6 +2055,151 @@ func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Up return _ContractDelegationManager.Contract.UpdateOperatorMetadataURI(&_ContractDelegationManager.TransactOpts, metadataURI) } +// ContractDelegationManagerAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerAVSMetadataURIUpdatedIterator struct { + Event *ContractDelegationManagerAVSMetadataURIUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerAVSMetadataURIUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerAVSMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerAVSMetadataURIUpdated struct { + Avs common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*ContractDelegationManagerAVSMetadataURIUpdatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerAVSMetadataURIUpdatedIterator{contract: _ContractDelegationManager.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerAVSMetadataURIUpdated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*ContractDelegationManagerAVSMetadataURIUpdated, error) { + event := new(ContractDelegationManagerAVSMetadataURIUpdated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ContractDelegationManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractDelegationManager contract. type ContractDelegationManagerInitializedIterator struct { Event *ContractDelegationManagerInitialized // Event containing the contract specifics and raw log @@ -2056,6 +2334,160 @@ func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseInitia return event, nil } +// ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *ContractDelegationManagerOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorAVSRegistrationStatusUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorAVSRegistrationStatusUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOperatorAVSRegistrationStatusUpdatedIterator{contract: _ContractDelegationManager.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOperatorAVSRegistrationStatusUpdated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*ContractDelegationManagerOperatorAVSRegistrationStatusUpdated, error) { + event := new(ContractDelegationManagerOperatorAVSRegistrationStatusUpdated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ContractDelegationManagerOperatorDetailsModifiedIterator is returned from FilterOperatorDetailsModified and is used to iterate over the raw logs and unpacked data for OperatorDetailsModified events raised by the ContractDelegationManager contract. type ContractDelegationManagerOperatorDetailsModifiedIterator struct { Event *ContractDelegationManagerOperatorDetailsModified // Event containing the contract specifics and raw log @@ -3218,140 +3650,6 @@ func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParsePauser return event, nil } -// ContractDelegationManagerStakeRegistrySetIterator is returned from FilterStakeRegistrySet and is used to iterate over the raw logs and unpacked data for StakeRegistrySet events raised by the ContractDelegationManager contract. -type ContractDelegationManagerStakeRegistrySetIterator struct { - Event *ContractDelegationManagerStakeRegistrySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractDelegationManagerStakeRegistrySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractDelegationManagerStakeRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractDelegationManagerStakeRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractDelegationManagerStakeRegistrySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractDelegationManagerStakeRegistrySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractDelegationManagerStakeRegistrySet represents a StakeRegistrySet event raised by the ContractDelegationManager contract. -type ContractDelegationManagerStakeRegistrySet struct { - StakeRegistry common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakeRegistrySet is a free log retrieval operation binding the contract event 0xce6d874069bceda1867eca9c60636bbf262e15213041658273d803a2b609a51f. -// -// Solidity: event StakeRegistrySet(address stakeRegistry) -func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterStakeRegistrySet(opts *bind.FilterOpts) (*ContractDelegationManagerStakeRegistrySetIterator, error) { - - logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "StakeRegistrySet") - if err != nil { - return nil, err - } - return &ContractDelegationManagerStakeRegistrySetIterator{contract: _ContractDelegationManager.contract, event: "StakeRegistrySet", logs: logs, sub: sub}, nil -} - -// WatchStakeRegistrySet is a free log subscription operation binding the contract event 0xce6d874069bceda1867eca9c60636bbf262e15213041658273d803a2b609a51f. -// -// Solidity: event StakeRegistrySet(address stakeRegistry) -func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchStakeRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStakeRegistrySet) (event.Subscription, error) { - - logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "StakeRegistrySet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractDelegationManagerStakeRegistrySet) - if err := _ContractDelegationManager.contract.UnpackLog(event, "StakeRegistrySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStakeRegistrySet is a log parse operation binding the contract event 0xce6d874069bceda1867eca9c60636bbf262e15213041658273d803a2b609a51f. -// -// Solidity: event StakeRegistrySet(address stakeRegistry) -func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseStakeRegistrySet(log types.Log) (*ContractDelegationManagerStakeRegistrySet, error) { - event := new(ContractDelegationManagerStakeRegistrySet) - if err := _ContractDelegationManager.contract.UnpackLog(event, "StakeRegistrySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // ContractDelegationManagerStakerDelegatedIterator is returned from FilterStakerDelegated and is used to iterate over the raw logs and unpacked data for StakerDelegated events raised by the ContractDelegationManager contract. type ContractDelegationManagerStakerDelegatedIterator struct { Event *ContractDelegationManagerStakerDelegated // Event containing the contract specifics and raw log diff --git a/contracts/bindings/EigenPod/binding.go b/contracts/bindings/EigenPod/binding.go index 26f4c388..b3b0e7cd 100644 --- a/contracts/bindings/EigenPod/binding.go +++ b/contracts/bindings/EigenPod/binding.go @@ -29,13 +29,6 @@ var ( _ = abi.ConvertType ) -// BeaconChainProofsBalanceUpdateProof is an auto generated low-level Go binding around an user-defined struct. -type BeaconChainProofsBalanceUpdateProof struct { - ValidatorBalanceProof []byte - ValidatorFieldsProof []byte - BalanceRoot [32]byte -} - // BeaconChainProofsStateRootProof is an auto generated low-level Go binding around an user-defined struct. type BeaconChainProofsStateRootProof struct { BeaconStateRoot [32]byte @@ -68,8 +61,8 @@ type IEigenPodValidatorInfo struct { // ContractEigenPodMetaData contains all meta data concerning the ContractEigenPod contract. var ContractEigenPodMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"_ethPOS\",\"type\":\"address\"},{\"internalType\":\"contractIDelayedWithdrawalRouter\",\"name\":\"_delayedWithdrawalRouter\",\"type\":\"address\"},{\"internalType\":\"contractIEigenPodManager\",\"name\":\"_eigenPodManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_GENESIS_TIME\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"}],\"name\":\"EigenPodStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\"}],\"name\":\"FullWithdrawalRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceived\",\"type\":\"uint256\"}],\"name\":\"NonBeaconChainETHReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWithdrawn\",\"type\":\"uint256\"}],\"name\":\"NonBeaconChainETHWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"partialWithdrawalAmountGwei\",\"type\":\"uint64\"}],\"name\":\"PartialWithdrawalRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RestakedBeaconChainETHWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"}],\"name\":\"RestakingActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"balanceTimestamp\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\"}],\"name\":\"ValidatorBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"}],\"name\":\"ValidatorRestaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GENESIS_TIME\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateRestaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedWithdrawalRouter\",\"outputs\":[{\"internalType\":\"contractIDelayedWithdrawalRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenPodManager\",\"outputs\":[{\"internalType\":\"contractIEigenPodManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethPOS\",\"outputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasRestaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_podOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mostRecentWithdrawalTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonBeaconChainETHBalanceWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"podOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"provenWithdrawal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"tokenList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"recoverTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sumOfPartialWithdrawalsClaimedGwei\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"validatorPubkeyHashToInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"validatorIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"mostRecentBalanceUpdateTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structIEigenPod.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"validatorStatus\",\"outputs\":[{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"withdrawalProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"slotProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"executionPayloadProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"timestampProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"historicalSummaryBlockRootProof\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"blockRootIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"historicalSummaryIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"withdrawalIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"slotRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"timestampRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"executionPayloadRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structBeaconChainProofs.WithdrawalProof[]\",\"name\":\"withdrawalProofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"withdrawalFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyAndProcessWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint40[]\",\"name\":\"validatorIndices\",\"type\":\"uint40[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"validatorBalanceProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"validatorFieldsProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"balanceRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structBeaconChainProofs.BalanceUpdateProof[]\",\"name\":\"balanceUpdateProofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyBalanceUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"internalType\":\"uint40[]\",\"name\":\"validatorIndices\",\"type\":\"uint40[]\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyWithdrawalCredentials\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawBeforeRestaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountToWithdraw\",\"type\":\"uint256\"}],\"name\":\"withdrawNonBeaconChainETHBalanceWei\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountWei\",\"type\":\"uint256\"}],\"name\":\"withdrawRestakedBeaconChainETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162005a7a38038062005a7a83398101604081905262000035916200016f565b6001600160a01b0380861660805284811660a052831660c0526001600160401b0380831660e0528116610100526200006c62000077565b5050505050620001e7565b600054610100900460ff1615620000e45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000137576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014f57600080fd5b50565b80516001600160401b03811681146200016a57600080fd5b919050565b600080600080600060a086880312156200018857600080fd5b8551620001958162000139565b6020870151909550620001a88162000139565b6040870151909450620001bb8162000139565b9250620001cb6060870162000152565b9150620001db6080870162000152565b90509295509295909350565b60805160a05160c05160e051610100516157b4620002c66000396000818161053f01528181612fd7015261308e01526000818161023f015281816120eb0152818161211f015281816126470152818161267401528181613e9a0152613ed50152600081816103370152818161059e01528181610731015281816109cf01528181610b2401528181610c4701528181610e0201528181610fe2015281816111160152818161122d01528181611778015281816118b70152611a8401526000818161020b0152612c9d0152600081816103fc0152610d1201526157b46000f3fe60806040526004361061014f5760003560e01c806374cdd798116100b6578063c4d66de81161006f578063c4d66de8146104ad578063dda3346c146104cd578063e251ef52146104ed578063e2c834451461050d578063f28824611461052d578063fe80b0871461056157600080fd5b806374cdd798146103ea57806387e0d2891461041e5780639b4e463414610445578063b725bceb14610458578063baa7145a14610478578063c49074421461048d57600080fd5b806334bea20a1161010857806334bea20a146102ca5780633f65cf19146103055780634665bcda146103255780635d3f65b6146103595780636fcd0e53146103795780637439841f146103a657600080fd5b80630b18ff66146101a55780630cd4649e146101e25780631a5057be146101f95780631d905d5c1461022d5780633106ab53146102795780633474aa16146102aa57600080fd5b366101a057346037600082825461016691906146fb565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b157600080fd5b506033546101c5906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ee57600080fd5b506101f7610585565b005b34801561020557600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561023957600080fd5b506102617f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b0390911681526020016101d9565b34801561028557600080fd5b5060345461029a90600160401b900460ff1681565b60405190151581526020016101d9565b3480156102b657600080fd5b50603454610261906001600160401b031681565b3480156102d657600080fd5b5061029a6102e536600461472f565b603560209081526000928352604080842090915290825290205460ff1681565b34801561031157600080fd5b506101f76103203660046147be565b6106ee565b34801561033157600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561036557600080fd5b50603854610261906001600160401b031681565b34801561038557600080fd5b5061039961039436600461488c565b610b8f565b6040516101d991906148dd565b3480156103b257600080fd5b506103dd6103c136600461488c565b600090815260366020526040902054600160c01b900460ff1690565b6040516101d99190614925565b3480156103f657600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561042a57600080fd5b5060335461026190600160a01b90046001600160401b031681565b6101f7610453366004614974565b610c3c565b34801561046457600080fd5b506101f76104733660046149e7565b610de9565b34801561048457600080fd5b506101f76111b7565b34801561049957600080fd5b506101f76104a8366004614a8f565b611222565b3480156104b957600080fd5b506101f76104c8366004614abb565b61145f565b3480156104d957600080fd5b506101f76104e8366004614bd5565b611637565b3480156104f957600080fd5b506101f7610508366004614ca6565b611760565b34801561051957600080fd5b506101f7610528366004614a8f565b611b2b565b34801561053957600080fd5b506102617f000000000000000000000000000000000000000000000000000000000000000081565b34801561056d57600080fd5b5061057760375481565b6040519081526020016101d9565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190614da1565b156106375760405162461bcd60e51b815260040161062e90614dc3565b60405180910390fd5b6033546001600160a01b031633146106615760405162461bcd60e51b815260040161062e90614e20565b603454600160401b900460ff161561068b5760405162461bcd60e51b815260040161062e90614e68565b6034805460ff60401b1916600160401b1790556033546106b3906001600160a01b0316611c65565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b031633146107185760405162461bcd60e51b815260040161062e90614e20565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190614da1565b156107c15760405162461bcd60e51b815260040161062e90614dc3565b60335489906001600160401b03600160a01b9091048116908216116107f85760405162461bcd60e51b815260040161062e90614eb7565b603454600160401b900460ff166108705760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b606482015260840161062e565b868514801561087e57508483145b61090e5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a40161062e565b42610924613f486001600160401b038d166146fb565b10156109ad5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a40161062e565b60405163d1c64cc960e01b81526001600160401b038b166004820152610a56907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190614f52565b8a35610a5160208d018d614f6b565b611c99565b6000805b88811015610afa57610adc8c8c358c8c85818110610a7a57610a7a614fb1565b9050602002016020810190610a8f9190614fc7565b8b8b86818110610aa157610aa1614fb1565b9050602002810190610ab39190614f6b565b8b8b88818110610ac557610ac5614fb1565b9050602002810190610ad79190614fee565b611e21565b610ae690836146fb565b915080610af281615037565b915050610a5a565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050505050505050505050505050565b610bb76040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610c2257610c226148a5565b6002811115610c3357610c336148a5565b90525092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c845760405162461bcd60e51b815260040161062e90615052565b346801bc16d674ec80000014610d105760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a40161062e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610d536122c6565b8888886040518863ffffffff1660e01b8152600401610d7796959493929190615124565b6000604051808303818588803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610dda929190615173565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190614da1565b15610e925760405162461bcd60e51b815260040161062e90614dc3565b8684148015610ea057508382145b610f285760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f72496e646963657320616e642070726f6f6673206d757374206260648201526c0ca40e6c2daca40d8cadccee8d609b1b608482015260a40161062e565b42610f3e613f486001600160401b038c166146fb565b1015610fc05760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e76657269667942616c616e63655570646174653a207370908201527f656369666965642074696d657374616d7020697320746f6f2066617220696e206064820152631c185cdd60e21b608482015260a40161062e565b60405163d1c64cc960e01b81526001600160401b038a166004820152611064907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190614f52565b8735610a5160208a018a614f6b565b6000805b88811015611108576110ea8b8b8b8481811061108657611086614fb1565b905060200201602081019061109b9190614fc7565b8a358a8a868181106110af576110af614fb1565b90506020028101906110c19190615187565b8989878181106110d3576110d3614fb1565b90506020028101906110e59190614fee565b61230b565b6110f490836151a7565b91508061110081615037565b915050611068565b506033546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163c2c51c40911661114d633b9aca00856151e8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561119357600080fd5b505af11580156111a7573d6000803e3d6000fd5b5050505050505050505050505050565b6033546001600160a01b031633146111e15760405162461bcd60e51b815260040161062e90614e20565b603454600160401b900460ff161561120b5760405162461bcd60e51b815260040161062e90614e68565b603354611220906001600160a01b0316611c65565b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461126a5760405162461bcd60e51b815260040161062e90615052565b611278633b9aca0082615283565b156113025760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a40161062e565b6000611312633b9aca0083615297565b6034549091506001600160401b0390811690821611156113cb5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c40161062e565b603480548291906000906113e99084906001600160401b03166152ab565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161144891815260200190565b60405180910390a261145a83836127d0565b505050565b600054610100900460ff161580801561147f5750600054600160ff909116105b806114995750303b158015611499575060005460ff166001145b6114fc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161062e565b6000805460ff19166001179055801561151f576000805461ff0019166101001790555b6001600160a01b0382166115925760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b606482015260840161062e565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611633576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146116615760405162461bcd60e51b815260040161062e90614e20565b81518351146116ec5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a40161062e565b60005b835181101561175a576117488284838151811061170e5761170e614fb1565b602002602001015186848151811061172857611728614fb1565b60200260200101516001600160a01b03166127da9092919063ffffffff16565b8061175281615037565b9150506116ef565b50505050565b604051635ac86ab760e01b81526004808201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117eb9190614da1565b156118085760405162461bcd60e51b815260040161062e90614dc3565b838614801561181657508588145b801561182157508782145b611895576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e677468606482015260840161062e565b60405163d1c64cc960e01b81526001600160401b038c166004820152611939907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a9190614f52565b8b35610a5160208e018e614f6b565b604080518082019091526000808252602082015260005b83811015611a395760006119f48d358d8d8581811061197157611971614fb1565b905060200281019061198391906152d3565b8c8c8681811061199557611995614fb1565b90506020028101906119a79190614f6b565b8c8c888181106119b9576119b9614fb1565b90506020028101906119cb9190614fee565b8c8c8a8181106119dd576119dd614fb1565b90506020028101906119ef9190614fee565b61282c565b80518451919250908490611a099083906146fb565b9052506020808201519084018051611a229083906151a7565b905250819050611a3181615037565b915050611950565b50805115611a68576033548151611a68916001600160a01b031690611a6390633b9aca00906152ea565b612c73565b602081015115611b1d5760335460208201516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263c2c51c4092911690611abe90633b9aca00906151e8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611b0457600080fd5b505af1158015611b18573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611b555760405162461bcd60e51b815260040161062e90614e20565b603754811115611c065760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c40161062e565b8060376000828254611c189190615309565b90915550506040518181526001600160a01b038316907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a26116338282612c73565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611c968147612c73565b50565b611ca5600360206152ea565b8114611d355760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a40161062e565b611d7a82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915060039050612d01565b61175a5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c40161062e565b600080611e60848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d1992505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611ecf57611ecf6148a5565b6002811115611ee057611ee06148a5565b9052509050600081606001516002811115611efd57611efd6148a5565b14611fa65760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c40161062e565b611fae6122c6565b611fb790615320565b611ff3868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d3d92505050565b1461207a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a40161062e565b60006120b8868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d5292505050565b90506120c88a87878b8b8e612d7d565b6001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000000000000081169082161115612149576001600160401b037f0000000000000000000000000000000000000000000000000000000000000000166020830152612159565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156121f7576121f76148a5565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516122929392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166122b791906152ea565b9b9a5050505050505050505050565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061231c604086013588612f9e565b9050600061235c858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d1992505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156123cb576123cb6148a5565b60028111156123dc576123dc6148a5565b815250509050896001600160401b031681604001516001600160401b0316106124935760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a40161062e565b6001816060015160028111156124ab576124ab6148a5565b146125135760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b606482015260840161062e565b61251c8a612fd3565b6001600160401b03166125618787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130bd92505050565b6001600160401b031611612604576000836001600160401b0316116126045760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a40161062e565b61261d88878761261760208c018c614f6b565b8e612d7d565b6126368860408901356126308a80614f6b565b8d6130d5565b602081015160006001600160401b037f00000000000000000000000000000000000000000000000000000000000000008116908616111561269857507f000000000000000000000000000000000000000000000000000000000000000061269b565b50835b6001600160401b0380821660208086019182528e831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612743576127436148a5565b0217905550905050816001600160401b0316816001600160401b0316146127c1576040805164ffffffffff8d1681526001600160401b038e8116602083015283168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a16127be818361323e565b95505b50505050509695505050505050565b611633828261325d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261145a908490613376565b604080518082019091526000808252602082015261285161284c896153b3565b613448565b6033546001600160401b03600160a01b9091048116908216116128865760405162461bcd60e51b815260040161062e90614eb7565b600061289461284c8b6153b3565b905060006128d4888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d1992505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612901576129016148a5565b14156129b85760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c40161062e565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612a775760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a40161062e565b60008181526035602090815260408083206001600160401b03861684529091529020805460ff19166001179055612ab08c87878e613458565b6000612aee878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e4092505050565b9050612afe8d8a8a8e8e86612d7d565b6000612b3c888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b9050612b7a8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130bd92505050565b6001600160401b0316612b94612b8f8f6153b3565b613e70565b6001600160401b031610612c4c57603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352612c4193869388938a936001600160a01b03909316928892916060830190600160c01b900460ff166002811115612c2857612c286148a5565b6002811115612c3957612c396148a5565b905250613e82565b955050505050612c66565b603354612c4190839086906001600160a01b031684614093565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063c0db354c9083906044016000604051808303818588803b158015612ce457600080fd5b505af1158015612cf8573d6000803e3d6000fd5b50505050505050565b600083612d0f868585614171565b1495945050505050565b600081600081518110612d2e57612d2e614fb1565b60200260200101519050919050565b600081600181518110612d2e57612d2e614fb1565b6000612d7782600281518110612d6a57612d6a614fb1565b60200260200101516142bd565b92915050565b612d89600360026155d3565b8414612e025760405162461bcd60e51b815260206004820152604e602482015260008051602061573f83398151915260448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a40161062e565b6005612e10602860016146fb565b612e1a91906146fb565b612e259060206152ea565b8214612e935760405162461bcd60e51b8152602060048201526043602482015260008051602061573f83398151915260448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a40161062e565b600064ffffffffff8216612ea9602860016146fb565b600b901b1790506000612eee87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061432492505050565b9050612f3485858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250859150869050612d01565b612f945760405162461bcd60e51b815260206004820152603d602482015260008051602061573f83398151915260448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f66000000606482015260840161062e565b5050505050505050565b600080612fac6004846155df565b612fb7906040615603565b64ffffffffff169050612fcb84821b6142bd565b949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316826001600160401b0316101561307d5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e65736973000000000000000000606482015260840161062e565b613089600c6020615630565b6130b37f0000000000000000000000000000000000000000000000000000000000000000846152ab565b612d779190615656565b6000612d7782600781518110612d6a57612d6a614fb1565b60056130e3602660016146fb565b6130ed91906146fb565b6130f89060206152ea565b82146131685760405162461bcd60e51b81526020600482015260446024820181905260008051602061573f833981519152908201527f7242616c616e63653a2050726f6f662068617320696e636f7272656374206c656064820152630dccee8d60e31b608482015260a40161062e565b600061317560048361567c565b64ffffffffff1690508061318b602660016146fb565b600c901b1790506131d684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150859050612d01565b6132365760405162461bcd60e51b815260206004820152603e602482015260008051602061573f83398151915260448201527f7242616c616e63653a20496e76616c6964206d65726b6c652070726f6f660000606482015260840161062e565b505050505050565b60006132566001600160401b03808416908516615694565b9392505050565b804710156132ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161062e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132fa576040519150601f19603f3d011682016040523d82523d6000602084013e6132ff565b606091505b505090508061145a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161062e565b60006133cb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145d19092919063ffffffff16565b80519091501561145a57808060200190518101906133e99190614da1565b61145a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161062e565b6000612d778261014001516142bd565b6134636002806155d3565b82146134d75760405162461bcd60e51b8152602060048201526049602482015260008051602061575f83398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a40161062e565b6134e3600d60026155d3565b6134f360c0830160a084016156d3565b6001600160401b03161061355d5760405162461bcd60e51b815260206004820152603f602482015260008051602061575f83398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c6172676500606482015260840161062e565b613569600460026155d3565b61357a610100830160e084016156d3565b6001600160401b0316106135e6576040805162461bcd60e51b815260206004820152602481019190915260008051602061575f83398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c61726765606482015260840161062e565b6135f2601860026155d3565b61360260e0830160c084016156d3565b6001600160401b03161061367c5760405162461bcd60e51b8152602060048201526047602482015260008051602061575f83398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a40161062e565b6136876004806146fb565b6136929060016146fb565b61369d9060206152ea565b6136a78280614f6b565b90501461371b5760405162461bcd60e51b8152602060048201526048602482015260008051602061575f83398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a40161062e565b613727600460036146fb565b6137329060206152ea565b61373f6040830183614f6b565b9050146137b95760405162461bcd60e51b815260206004820152604e602482015260008051602061575f83398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a40161062e565b6137c5600360206152ea565b6137d26020830183614f6b565b9050146138405760405162461bcd60e51b8152602060048201526042602482015260008051602061575f83398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a40161062e565b61384c600460206152ea565b6138596060830183614f6b565b9050146138cc5760405162461bcd60e51b8152602060048201526047602482015260008051602061575f83398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a40161062e565b600d6138da601860016146fb565b6138e59060056146fb565b6138f09060016146fb565b6138fa91906146fb565b6139059060206152ea565b6139126080830183614f6b565b90501461399b5760405162461bcd60e51b8152602060048201526058602482015260008051602061575f83398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a40161062e565b60006139ad60c0830160a084016156d3565b6001600160401b031660006139c4600d60016146fb565b6139d460e0860160c087016156d3565b6001600160401b0316901b600d6139ed601860016146fb565b6139f89060016146fb565b613a0291906146fb565b601b901b1717179050613a5d613a1b6080840184614f6b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250505061010085013584612d01565b613ad05760405162461bcd60e51b815260206004820152604a602482015260008051602061575f83398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a40161062e565b613b27613ae06020840184614f6b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610100880135935061012088013592509050612d01565b613b875760405162461bcd60e51b815260206004820152603d602482015260008051602061575f83398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f66000000606482015260840161062e565b6049613bdf613b996040850185614f6b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061010085013561016086013584612d01565b613c515760405162461bcd60e51b8152602060048201526049602482015260008051602061575f83398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a40161062e565b50613ca9613c626060840184614f6b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608401356101408501356009612d01565b613d175760405162461bcd60e51b81526020600482015260446024820181905260008051602061575f833981519152908201527f616c3a20496e76616c696420626c6f636b4e756d626572206d65726b6c6520706064820152633937b7b360e11b608482015260a40161062e565b6000613d2a610100840160e085016156d3565b6001600160401b0316613d3f600460016146fb565b600e901b1790506000613d8486868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061432492505050565b9050613dd4613d938580614f6b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608601358385612d01565b612cf85760405162461bcd60e51b8152602060048201526043602482015260008051602061575f83398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a40161062e565b6000612d7782600181518110612d6a57612d6a614fb1565b6000612d7782600381518110612d6a57612d6a614fb1565b600060206130b38361012001516142bd565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316846001600160401b03161115613ef957507f0000000000000000000000000000000000000000000000000000000000000000613efc565b50825b6040805180820190915260008082526020820152613f1a82866152ab565b6001600160401b039081168252603480548492600091613f3c918591166156ee565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613f6e82856020015161323e565b602082810191909152600090850152600260608501819052506000888152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115614025576140256148a5565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906141249084906001600160401b03166156ee565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561419057506020845161418e9190615283565b155b61421f5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a40161062e565b604080516020808201909252848152905b855181116142b357614243600285615283565b614276578151600052808601516020526020826040600060026107d05a03fa61426b57600080fd5b6002840493506142a1565b8086015160005281516020526020826040600060026107d05a03fa61429a57600080fd5b6002840493505b6142ac6020826146fb565b9050614230565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b600080600283516143359190615297565b90506000816001600160401b0381111561435157614351614ad8565b60405190808252806020026020018201604052801561437a578160200160208202803683370190505b50905060005b828110156144815760028561439583836152ea565b815181106143a5576143a5614fb1565b6020026020010151868360026143bb91906152ea565b6143c69060016146fb565b815181106143d6576143d6614fb1565b60200260200101516040516020016143f8929190918252602082015260400190565b60408051601f198184030181529082905261441291615719565b602060405180830381855afa15801561442f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906144529190614f52565b82828151811061446457614464614fb1565b60209081029190910101528061447981615037565b915050614380565b5061448d600283615297565b91505b81156145ad5760005b8281101561459a576002826144ae83836152ea565b815181106144be576144be614fb1565b6020026020010151838360026144d491906152ea565b6144df9060016146fb565b815181106144ef576144ef614fb1565b6020026020010151604051602001614511929190918252602082015260400190565b60408051601f198184030181529082905261452b91615719565b602060405180830381855afa158015614548573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061456b9190614f52565b82828151811061457d5761457d614fb1565b60209081029190910101528061459281615037565b915050614499565b506145a6600283615297565b9150614490565b806000815181106145c0576145c0614fb1565b602002602001015192505050919050565b6060612fcb8484600085856001600160a01b0385163b6146335760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161062e565b600080866001600160a01b0316858760405161464f9190615719565b60006040518083038185875af1925050503d806000811461468c576040519150601f19603f3d011682016040523d82523d6000602084013e614691565b606091505b50915091506146a18282866146ac565b979650505050505050565b606083156146bb575081613256565b8251156146cb5782518084602001fd5b8160405162461bcd60e51b815260040161062e919061572b565b634e487b7160e01b600052601160045260246000fd5b6000821982111561470e5761470e6146e5565b500190565b80356001600160401b038116811461472a57600080fd5b919050565b6000806040838503121561474257600080fd5b8235915061475260208401614713565b90509250929050565b60006040828403121561476d57600080fd5b50919050565b60008083601f84011261478557600080fd5b5081356001600160401b0381111561479c57600080fd5b6020830191508360208260051b85010111156147b757600080fd5b9250929050565b60008060008060008060008060a0898b0312156147da57600080fd5b6147e389614713565b975060208901356001600160401b03808211156147ff57600080fd5b61480b8c838d0161475b565b985060408b013591508082111561482157600080fd5b61482d8c838d01614773565b909850965060608b013591508082111561484657600080fd5b6148528c838d01614773565b909650945060808b013591508082111561486b57600080fd5b506148788b828c01614773565b999c989b5096995094979396929594505050565b60006020828403121561489e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600381106148d957634e487b7160e01b600052602160045260246000fd5b9052565b60006080820190506001600160401b0380845116835280602085015116602084015280604085015116604084015250606083015161491e60608401826148bb565b5092915050565b60208101612d7782846148bb565b60008083601f84011261494557600080fd5b5081356001600160401b0381111561495c57600080fd5b6020830191508360208285010111156147b757600080fd5b60008060008060006060868803121561498c57600080fd5b85356001600160401b03808211156149a357600080fd5b6149af89838a01614933565b909750955060208801359150808211156149c857600080fd5b506149d588828901614933565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614a0357600080fd5b614a0c89614713565b975060208901356001600160401b0380821115614a2857600080fd5b614a348c838d01614773565b909950975060408b0135915080821115614a4d57600080fd5b614a598c838d0161475b565b965060608b013591508082111561484657600080fd5b6001600160a01b0381168114611c9657600080fd5b803561472a81614a6f565b60008060408385031215614aa257600080fd5b8235614aad81614a6f565b946020939093013593505050565b600060208284031215614acd57600080fd5b813561325681614a6f565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614b1157614b11614ad8565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b3f57614b3f614ad8565b604052919050565b60006001600160401b03821115614b6057614b60614ad8565b5060051b60200190565b600082601f830112614b7b57600080fd5b81356020614b90614b8b83614b47565b614b17565b82815260059290921b84018101918181019086841115614baf57600080fd5b8286015b84811015614bca5780358352918301918301614bb3565b509695505050505050565b600080600060608486031215614bea57600080fd5b83356001600160401b0380821115614c0157600080fd5b818601915086601f830112614c1557600080fd5b81356020614c25614b8b83614b47565b82815260059290921b8401810191818101908a841115614c4457600080fd5b948201945b83861015614c6b578535614c5c81614a6f565b82529482019490820190614c49565b97505087013592505080821115614c8157600080fd5b50614c8e86828701614b6a565b925050614c9d60408501614a84565b90509250925092565b60008060008060008060008060008060c08b8d031215614cc557600080fd5b614cce8b614713565b995060208b01356001600160401b0380821115614cea57600080fd5b614cf68e838f0161475b565b9a5060408d0135915080821115614d0c57600080fd5b614d188e838f01614773565b909a50985060608d0135915080821115614d3157600080fd5b614d3d8e838f01614773565b909850965060808d0135915080821115614d5657600080fd5b614d628e838f01614773565b909650945060a08d0135915080821115614d7b57600080fd5b50614d888d828e01614773565b915080935050809150509295989b9194979a5092959850565b600060208284031215614db357600080fd5b8151801515811461325657600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b600060208284031215614f6457600080fd5b5051919050565b6000808335601e19843603018112614f8257600080fd5b8301803591506001600160401b03821115614f9c57600080fd5b6020019150368190038213156147b757600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614fd957600080fd5b813564ffffffffff8116811461325657600080fd5b6000808335601e1984360301811261500557600080fd5b8301803591506001600160401b0382111561501f57600080fd5b6020019150600581901b36038213156147b757600080fd5b600060001982141561504b5761504b6146e5565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b838110156150e75781810151838201526020016150cf565b8381111561175a5750506000910152565b600081518084526151108160208601602086016150cc565b601f01601f19169290920160200192915050565b60808152600061513860808301888a6150a3565b828103602084015261514a81886150f8565b9050828103604084015261515f8186886150a3565b915050826060830152979650505050505050565b602081526000612fcb6020830184866150a3565b60008235605e1983360301811261519d57600080fd5b9190910192915050565b600080821280156001600160ff1b03849003851316156151c9576151c96146e5565b600160ff1b83900384128116156151e2576151e26146e5565b50500190565b60006001600160ff1b038184138284138082168684048611161561520e5761520e6146e5565b600160ff1b600087128281168783058912161561522d5761522d6146e5565b60008712925087820587128484161615615249576152496146e5565b8785058712818416161561525f5761525f6146e5565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826152925761529261526d565b500690565b6000826152a6576152a661526d565b500490565b60006001600160401b03838116908316818110156152cb576152cb6146e5565b039392505050565b6000823561017e1983360301811261519d57600080fd5b6000816000190483118215151615615304576153046146e5565b500290565b60008282101561531b5761531b6146e5565b500390565b8051602080830151919081101561476d5760001960209190910360031b1b16919050565b600082601f83011261535557600080fd5b81356001600160401b0381111561536e5761536e614ad8565b615381601f8201601f1916602001614b17565b81815284602083860101111561539657600080fd5b816020850160208301376000918101602001919091529392505050565b600061018082360312156153c657600080fd5b6153ce614aee565b82356001600160401b03808211156153e557600080fd5b6153f136838701615344565b8352602085013591508082111561540757600080fd5b61541336838701615344565b6020840152604085013591508082111561542c57600080fd5b61543836838701615344565b6040840152606085013591508082111561545157600080fd5b61545d36838701615344565b6060840152608085013591508082111561547657600080fd5b5061548336828601615344565b60808301525061549560a08401614713565b60a08201526154a660c08401614713565b60c08201526154b760e08401614713565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600181815b8085111561552a578160001904821115615510576155106146e5565b8085161561551d57918102915b93841c93908002906154f4565b509250929050565b60008261554157506001612d77565b8161554e57506000612d77565b8160018114615564576002811461556e5761558a565b6001915050612d77565b60ff84111561557f5761557f6146e5565b50506001821b612d77565b5060208310610133831016604e8410600b84101617156155ad575081810a612d77565b6155b783836154ef565b80600019048211156155cb576155cb6146e5565b029392505050565b60006132568383615532565b600064ffffffffff808416806155f7576155f761526d565b92169190910692915050565b600064ffffffffff80831681851681830481118215151615615627576156276146e5565b02949350505050565b60006001600160401b0380831681851681830481118215151615615627576156276146e5565b60006001600160401b03808416806156705761567061526d565b92169190910492915050565b600064ffffffffff808416806156705761567061526d565b60008083128015600160ff1b8501841216156156b2576156b26146e5565b6001600160ff1b03840183138116156156cd576156cd6146e5565b50500390565b6000602082840312156156e557600080fd5b61325682614713565b60006001600160401b03808316818516808303821115615710576157106146e5565b01949350505050565b6000825161519d8184602087016150cc565b60208152600061325660208301846150f856fe426561636f6e436861696e50726f6f66732e76657269667956616c696461746f426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220adf6c760b4f63409f1c31e44c4973f342aba42b062831447260fa528498fa3d764736f6c634300080c0033", + ABI: "[{\"inputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"_ethPOS\",\"type\":\"address\"},{\"internalType\":\"contractIDelayedWithdrawalRouter\",\"name\":\"_delayedWithdrawalRouter\",\"type\":\"address\"},{\"internalType\":\"contractIEigenPodManager\",\"name\":\"_eigenPodManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_GENESIS_TIME\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"}],\"name\":\"EigenPodStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\"}],\"name\":\"FullWithdrawalRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceived\",\"type\":\"uint256\"}],\"name\":\"NonBeaconChainETHReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWithdrawn\",\"type\":\"uint256\"}],\"name\":\"NonBeaconChainETHWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"partialWithdrawalAmountGwei\",\"type\":\"uint64\"}],\"name\":\"PartialWithdrawalRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RestakedBeaconChainETHWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"}],\"name\":\"RestakingActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"balanceTimestamp\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\"}],\"name\":\"ValidatorBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"}],\"name\":\"ValidatorRestaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GENESIS_TIME\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateRestaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedWithdrawalRouter\",\"outputs\":[{\"internalType\":\"contractIDelayedWithdrawalRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenPodManager\",\"outputs\":[{\"internalType\":\"contractIEigenPodManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethPOS\",\"outputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasRestaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_podOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mostRecentWithdrawalTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonBeaconChainETHBalanceWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"podOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"provenWithdrawal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"tokenList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"recoverTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sumOfPartialWithdrawalsClaimedGwei\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"validatorPubkeyHashToInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"validatorIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"mostRecentBalanceUpdateTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structIEigenPod.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"validatorPubkey\",\"type\":\"bytes\"}],\"name\":\"validatorPubkeyToInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"validatorIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"mostRecentBalanceUpdateTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structIEigenPod.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"validatorPubkey\",\"type\":\"bytes\"}],\"name\":\"validatorStatus\",\"outputs\":[{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"validatorStatus\",\"outputs\":[{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"withdrawalProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"slotProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"executionPayloadProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"timestampProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"historicalSummaryBlockRootProof\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"blockRootIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"historicalSummaryIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"withdrawalIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"slotRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"timestampRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"executionPayloadRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structBeaconChainProofs.WithdrawalProof[]\",\"name\":\"withdrawalProofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"withdrawalFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyAndProcessWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint40[]\",\"name\":\"validatorIndices\",\"type\":\"uint40[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyBalanceUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"internalType\":\"uint40[]\",\"name\":\"validatorIndices\",\"type\":\"uint40[]\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyWithdrawalCredentials\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawBeforeRestaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountToWithdraw\",\"type\":\"uint256\"}],\"name\":\"withdrawNonBeaconChainETHBalanceWei\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountWei\",\"type\":\"uint256\"}],\"name\":\"withdrawRestakedBeaconChainETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162005d9c38038062005d9c83398101604081905262000035916200016f565b6001600160a01b0380861660805284811660a052831660c0526001600160401b0380831660e0528116610100526200006c62000077565b5050505050620001e7565b600054610100900460ff1615620000e45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000137576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014f57600080fd5b50565b80516001600160401b03811681146200016a57600080fd5b919050565b600080600080600060a086880312156200018857600080fd5b8551620001958162000139565b6020870151909550620001a88162000139565b6040870151909450620001bb8162000139565b9250620001cb6060870162000152565b9150620001db6080870162000152565b90509295509295909350565b60805160a05160c05160e05161010051615ac8620002d4600039600081816105b50152818161340d01526134c4015260008181610275015281816124130152818161244701528181612a7301528181612aa00152818161416701526141a201526000818161036d01528181610614015281816107a701528181610a4501528181610b9a01528181610d2201528181610edd015281816110be015281816111f2015281816113fc01528181611849015281816119f101528181611b3001528181611cfd0152611de701526000818161024101526130d80152600081816104520152610ded0152615ac86000f3fe6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614a35565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614a69565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614af8565b610764565b34801561036757600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039b57600080fd5b506103af6103aa366004614c07565b610c05565b60405161020f9190614c80565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614c8e565b610c6a565b60405161020f9190614ca7565b34801561041557600080fd5b506103af610424366004614c8e565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614cef565b610d17565b3480156104ba57600080fd5b5061022d6104c9366004614d62565b610ec4565b3480156104da57600080fd5b506103fc6104e9366004614c07565b611293565b3480156104fa57600080fd5b5061022d611386565b34801561050f57600080fd5b5061022d61051e366004614e0a565b6113f1565b34801561052f57600080fd5b5061022d61053e366004614e36565b61162e565b34801561054f57600080fd5b5061022d61055e366004614f50565b611806565b34801561056f57600080fd5b5061022d61057e366004615021565b6119d9565b34801561058f57600080fd5b5061022d61059e366004614e0a565b611da4565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061511c565b156106ad5760405162461bcd60e51b81526004016106a49061513e565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a49061519b565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a4906151e3565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f87565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a49061519b565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061511c565b156108375760405162461bcd60e51b81526004016106a49061513e565b60335489906001600160401b03600160a01b90910481169082161161086e5760405162461bcd60e51b81526004016106a490615232565b603454600160401b900460ff166108e65760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f457508483145b6109845760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099a613f486001600160401b038d16614a35565b1015610a235760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acc907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab891906152cd565b8a35610ac760208d018d6152e6565b611fbb565b6000805b88811015610b7057610b528c8c358c8c85818110610af057610af061532c565b9050602002016020810190610b059190615342565b8b8b86818110610b1757610b1761532c565b9050602002810190610b2991906152e6565b8b8b88818110610b3b57610b3b61532c565b9050602002810190610b4d9190615369565b612149565b610b5c9083614a35565b915080610b68816153b2565b915050610ad0565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125ee92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c926040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfd57610cfd614c48565b6002811115610d0e57610d0e614c48565b90525092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d5f5760405162461bcd60e51b81526004016106a4906153cd565b346801bc16d674ec80000014610deb5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610e2e6126e8565b8888886040518863ffffffff1660e01b8152600401610e529695949392919061549f565b6000604051808303818588803b158015610e6b57600080fd5b505af1158015610e7f573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb59291906154ee565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f50919061511c565b15610f6d5760405162461bcd60e51b81526004016106a49061513e565b8684148015610f7b57508382145b6110045760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101a613f486001600160401b038c16614a35565b101561109c5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611140907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906152cd565b8735610ac760208a018a6152e6565b6000805b888110156111e4576111c68b8b8b848181106111625761116261532c565b90506020020160208101906111779190615342565b8a358a8a8681811061118b5761118b61532c565b905060200281019061119d91906152e6565b8a8a888181106111af576111af61532c565b90506020028101906111c19190615369565b61272d565b6111d09083615502565b9150806111dc816153b2565b915050611144565b506033546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163c2c51c409116611229633b9aca0085615543565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561126f57600080fd5b505af1158015611283573d6000803e3d6000fd5b5050505050505050505050505050565b6112bb6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125ee92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136b5761136b614c48565b600281111561137c5761137c614c48565b9052509392505050565b6033546001600160a01b031633146113b05760405162461bcd60e51b81526004016106a49061519b565b603454600160401b900460ff16156113da5760405162461bcd60e51b81526004016106a4906151e3565b6033546113ef906001600160a01b0316611f87565b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114395760405162461bcd60e51b81526004016106a4906153cd565b611447633b9aca00826155de565b156114d15760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e1633b9aca00836155f2565b6034549091506001600160401b03908116908216111561159a5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b89084906001600160401b0316615606565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161791815260200190565b60405180910390a26116298383612c0b565b505050565b600054610100900460ff161580801561164e5750600054600160ff909116105b806116685750303b158015611668575060005460ff166001145b6116cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ee576000805461ff0019166101001790555b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611802576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118305760405162461bcd60e51b81526004016106a49061519b565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc919061511c565b156118d95760405162461bcd60e51b81526004016106a49061513e565b82518451146119645760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d2576119c0838583815181106119865761198661532c565b60200260200101518784815181106119a0576119a061532c565b60200260200101516001600160a01b0316612c159092919063ffffffff16565b806119ca816153b2565b915050611967565b5050505050565b604051635ac86ab760e01b81526004808201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061511c565b15611a815760405162461bcd60e51b81526004016106a49061513e565b8386148015611a8f57508588145b8015611a9a57508782145b611b0e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb2907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba391906152cd565b8b35610ac760208e018e6152e6565b604080518082019091526000808252602082015260005b83811015611cb2576000611c6d8d358d8d85818110611bea57611bea61532c565b9050602002810190611bfc919061562e565b8c8c86818110611c0e57611c0e61532c565b9050602002810190611c2091906152e6565b8c8c88818110611c3257611c3261532c565b9050602002810190611c449190615369565b8c8c8a818110611c5657611c5661532c565b9050602002810190611c689190615369565b612c67565b80518451919250908490611c82908390614a35565b9052506020808201519084018051611c9b908390615502565b905250819050611caa816153b2565b915050611bc9565b50805115611ce1576033548151611ce1916001600160a01b031690611cdc90633b9aca009061564f565b6130ae565b602081015115611d965760335460208201516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263c2c51c4092911690611d3790633b9aca0090615543565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dce5760405162461bcd60e51b81526004016106a49061519b565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a919061511c565b15611e775760405162461bcd60e51b81526004016106a49061513e565b603754821115611f285760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3a919061566e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261162983836130ae565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb881476130ae565b50565b611fc76003602061564f565b81146120575760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209c82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506003905061313c565b6121435760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061315492505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f7576121f7614c48565b600281111561220857612208614c48565b905250905060008160600151600281111561222557612225614c48565b146122ce5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d66126e8565b6122df90615685565b61231b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061317892505050565b146123a25760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318d92505050565b90506123f08a87878b8b8e6131b2565b6001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000000000000081169082161115612471576001600160401b037f0000000000000000000000000000000000000000000000000000000000000000166020830152612481565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561251f5761251f614c48565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125ba9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125df919061564f565b9b9a5050505050505050505050565b600081516030146126775760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b60405160029061268e9084906000906020016156a9565b60408051601f19818403018152908290526126a8916156d8565b602060405180830381855afa1580156126c5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6491906152cd565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061276c84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061318d92505050565b905060006127ac85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061315492505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561281b5761281b614c48565b600281111561282c5761282c614c48565b8152505090508a6001600160401b031681604001516001600160401b0316106128e35760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b6001816060015160028111156128fb576128fb614c48565b146129635760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b61296c8b613409565b6001600160401b03166129b18787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f392505050565b6001600160401b031611612a54576000836001600160401b031611612a545760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a628987878b8b8f6131b2565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000000000000081169086161115612ac457507f0000000000000000000000000000000000000000000000000000000000000000612ac7565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b6f57612b6f614c48565b0217905550905050816001600160401b0316816001600160401b031614612bfb577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612be69392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612bf8818361350b565b95505b5050505050979650505050505050565b611802828261352a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611629908490613643565b6040805180820190915260008082526020820152612c8c612c8789615759565b613715565b6033546001600160401b03600160a01b909104811690821611612cc15760405162461bcd60e51b81526004016106a490615232565b6000612ccf612c878b615759565b90506000612d0f88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061315492505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d3c57612d3c614c48565b1415612df35760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612eb25760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b60008181526035602090815260408083206001600160401b03861684529091529020805460ff19166001179055612eeb8c87878e613725565b6000612f2987878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061410d92505050565b9050612f398d8a8a8e8e866131b2565b6000612f7788888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061412592505050565b9050612fb58a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f392505050565b6001600160401b0316612fcf612fca8f615759565b61413d565b6001600160401b03161061308757603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261307c93869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561306357613063614c48565b600281111561307457613074614c48565b90525061414f565b9550505050506130a1565b60335461307c90839086906001600160a01b031684614360565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063c0db354c9083906044016000604051808303818588803b15801561311f57600080fd5b505af1158015613133573d6000803e3d6000fd5b50505050505050565b60008361314a86858561443e565b1495945050505050565b6000816000815181106131695761316961532c565b60200260200101519050919050565b6000816001815181106131695761316961532c565b6000610c64826002815181106131a5576131a561532c565b602002602001015161458a565b6131be60036002615979565b84146132495760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561325760286001614a35565b6132619190614a35565b61326c90602061564f565b82146132ec5760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff821661330260286001614a35565b600b901b17905060006133478787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145f192505050565b905061338d85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925085915086905061313c565b6133ff5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316826001600160401b031610156134b35760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b6134bf600c6020615985565b6134e97f000000000000000000000000000000000000000000000000000000000000000084615606565b610c6491906159b4565b6000610c64826007815181106131a5576131a561532c565b60006135236001600160401b038084169085166159da565b9392505050565b8047101561357a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146135c7576040519150601f19603f3d011682016040523d82523d6000602084013e6135cc565b606091505b50509050806116295760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613698826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661489e9092919063ffffffff16565b80519091501561162957808060200190518101906136b6919061511c565b6116295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c6482610140015161458a565b613730600280615979565b82146137a45760405162461bcd60e51b81526020600482015260496024820152600080516020615a7383398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b6137b0600d6002615979565b6137c060c0830160a08401615a19565b6001600160401b03161061382a5760405162461bcd60e51b815260206004820152603f6024820152600080516020615a7383398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b61383660046002615979565b613847610100830160e08401615a19565b6001600160401b0316106138b3576040805162461bcd60e51b8152602060048201526024810191909152600080516020615a7383398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b6138bf60186002615979565b6138cf60e0830160c08401615a19565b6001600160401b0316106139495760405162461bcd60e51b81526020600482015260476024820152600080516020615a7383398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b613954600480614a35565b61395f906001614a35565b61396a90602061564f565b61397482806152e6565b9050146139e85760405162461bcd60e51b81526020600482015260486024820152600080516020615a7383398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b6139f460046003614a35565b6139ff90602061564f565b613a0c60408301836152e6565b905014613a865760405162461bcd60e51b815260206004820152604e6024820152600080516020615a7383398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613a926003602061564f565b613a9f60208301836152e6565b905014613b0d5760405162461bcd60e51b81526020600482015260426024820152600080516020615a7383398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613b196004602061564f565b613b2660608301836152e6565b905014613b995760405162461bcd60e51b81526020600482015260476024820152600080516020615a7383398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613ba760186001614a35565b613bb2906005614a35565b613bbd906001614a35565b613bc79190614a35565b613bd290602061564f565b613bdf60808301836152e6565b905014613c685760405162461bcd60e51b81526020600482015260586024820152600080516020615a7383398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613c7a60c0830160a08401615a19565b6001600160401b03166000613c91600d6001614a35565b613ca160e0860160c08701615a19565b6001600160401b0316901b600d613cba60186001614a35565b613cc5906001614a35565b613ccf9190614a35565b601b901b1717179050613d2a613ce860808401846152e6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506101008501358461313c565b613d9d5760405162461bcd60e51b815260206004820152604a6024820152600080516020615a7383398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613df4613dad60208401846152e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525061010088013593506101208801359250905061313c565b613e545760405162461bcd60e51b815260206004820152603d6024820152600080516020615a7383398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613eac613e6660408501856152e6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008501356101608601358461313c565b613f1e5760405162461bcd60e51b81526020600482015260496024820152600080516020615a7383398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b50613f76613f2f60608401846152e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160840135610140850135600961313c565b613fe45760405162461bcd60e51b815260206004820152604460248201819052600080516020615a73833981519152908201527f616c3a20496e76616c696420626c6f636b4e756d626572206d65726b6c6520706064820152633937b7b360e11b608482015260a4016106a4565b6000613ff7610100840160e08501615a19565b6001600160401b031661400c60046001614a35565b600e901b17905060006140518686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145f192505050565b90506140a161406085806152e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160860135838561313c565b6131335760405162461bcd60e51b81526020600482015260436024820152600080516020615a7383398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b6000610c64826001815181106131a5576131a561532c565b6000610c64826003815181106131a5576131a561532c565b600060206134e983610120015161458a565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316846001600160401b031611156141c657507f00000000000000000000000000000000000000000000000000000000000000006141c9565b50825b60408051808201909152600080825260208201526141e78286615606565b6001600160401b03908116825260348054849260009161420991859116615a34565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061423b82856020015161350b565b602082810191909152600090850152600260608501819052506000888152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156142f2576142f2614c48565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906143f19084906001600160401b0316615a34565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561445d57506020845161445b91906155de565b155b6144ec5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b85518111614580576145106002856155de565b614543578151600052808601516020526020826040600060026107d05a03fa61453857600080fd5b60028404935061456e565b8086015160005281516020526020826040600060026107d05a03fa61456757600080fd5b6002840493505b614579602082614a35565b90506144fd565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161460291906155f2565b90506000816001600160401b0381111561461e5761461e614e53565b604051908082528060200260200182016040528015614647578160200160208202803683370190505b50905060005b8281101561474e57600285614662838361564f565b815181106146725761467261532c565b602002602001015186836002614688919061564f565b614693906001614a35565b815181106146a3576146a361532c565b60200260200101516040516020016146c5929190918252602082015260400190565b60408051601f19818403018152908290526146df916156d8565b602060405180830381855afa1580156146fc573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061471f91906152cd565b8282815181106147315761473161532c565b602090810291909101015280614746816153b2565b91505061464d565b5061475a6002836155f2565b91505b811561487a5760005b828110156148675760028261477b838361564f565b8151811061478b5761478b61532c565b6020026020010151838360026147a1919061564f565b6147ac906001614a35565b815181106147bc576147bc61532c565b60200260200101516040516020016147de929190918252602082015260400190565b60408051601f19818403018152908290526147f8916156d8565b602060405180830381855afa158015614815573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061483891906152cd565b82828151811061484a5761484a61532c565b60209081029190910101528061485f816153b2565b915050614766565b506148736002836155f2565b915061475d565b8060008151811061488d5761488d61532c565b602002602001015192505050919050565b60606148ad84846000856148b5565b949350505050565b6060824710156149165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b61496d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b0316858760405161498991906156d8565b60006040518083038185875af1925050503d80600081146149c6576040519150601f19603f3d011682016040523d82523d6000602084013e6149cb565b606091505b50915091506149db8282866149e6565b979650505050505050565b606083156149f5575081613523565b825115614a055782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615a5f565b634e487b7160e01b600052601160045260246000fd5b60008219821115614a4857614a48614a1f565b500190565b80356001600160401b0381168114614a6457600080fd5b919050565b60008060408385031215614a7c57600080fd5b82359150614a8c60208401614a4d565b90509250929050565b600060408284031215614aa757600080fd5b50919050565b60008083601f840112614abf57600080fd5b5081356001600160401b03811115614ad657600080fd5b6020830191508360208260051b8501011115614af157600080fd5b9250929050565b60008060008060008060008060a0898b031215614b1457600080fd5b614b1d89614a4d565b975060208901356001600160401b0380821115614b3957600080fd5b614b458c838d01614a95565b985060408b0135915080821115614b5b57600080fd5b614b678c838d01614aad565b909850965060608b0135915080821115614b8057600080fd5b614b8c8c838d01614aad565b909650945060808b0135915080821115614ba557600080fd5b50614bb28b828c01614aad565b999c989b5096995094979396929594505050565b60008083601f840112614bd857600080fd5b5081356001600160401b03811115614bef57600080fd5b602083019150836020828501011115614af157600080fd5b60008060208385031215614c1a57600080fd5b82356001600160401b03811115614c3057600080fd5b614c3c85828601614bc6565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614c7c57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c648284614c5e565b600060208284031215614ca057600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614ce86060840182614c5e565b5092915050565b600080600080600060608688031215614d0757600080fd5b85356001600160401b0380821115614d1e57600080fd5b614d2a89838a01614bc6565b90975095506020880135915080821115614d4357600080fd5b50614d5088828901614bc6565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614d7e57600080fd5b614d8789614a4d565b975060208901356001600160401b0380821115614da357600080fd5b614daf8c838d01614aad565b909950975060408b0135915080821115614dc857600080fd5b614dd48c838d01614a95565b965060608b0135915080821115614b8057600080fd5b6001600160a01b0381168114611fb857600080fd5b8035614a6481614dea565b60008060408385031215614e1d57600080fd5b8235614e2881614dea565b946020939093013593505050565b600060208284031215614e4857600080fd5b813561352381614dea565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614e8c57614e8c614e53565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614eba57614eba614e53565b604052919050565b60006001600160401b03821115614edb57614edb614e53565b5060051b60200190565b600082601f830112614ef657600080fd5b81356020614f0b614f0683614ec2565b614e92565b82815260059290921b84018101918181019086841115614f2a57600080fd5b8286015b84811015614f455780358352918301918301614f2e565b509695505050505050565b600080600060608486031215614f6557600080fd5b83356001600160401b0380821115614f7c57600080fd5b818601915086601f830112614f9057600080fd5b81356020614fa0614f0683614ec2565b82815260059290921b8401810191818101908a841115614fbf57600080fd5b948201945b83861015614fe6578535614fd781614dea565b82529482019490820190614fc4565b97505087013592505080821115614ffc57600080fd5b5061500986828701614ee5565b92505061501860408501614dff565b90509250925092565b60008060008060008060008060008060c08b8d03121561504057600080fd5b6150498b614a4d565b995060208b01356001600160401b038082111561506557600080fd5b6150718e838f01614a95565b9a5060408d013591508082111561508757600080fd5b6150938e838f01614aad565b909a50985060608d01359150808211156150ac57600080fd5b6150b88e838f01614aad565b909850965060808d01359150808211156150d157600080fd5b6150dd8e838f01614aad565b909650945060a08d01359150808211156150f657600080fd5b506151038d828e01614aad565b915080935050809150509295989b9194979a5092959850565b60006020828403121561512e57600080fd5b8151801515811461352357600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b6000602082840312156152df57600080fd5b5051919050565b6000808335601e198436030181126152fd57600080fd5b8301803591506001600160401b0382111561531757600080fd5b602001915036819003821315614af157600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561535457600080fd5b813564ffffffffff8116811461352357600080fd5b6000808335601e1984360301811261538057600080fd5b8301803591506001600160401b0382111561539a57600080fd5b6020019150600581901b3603821315614af157600080fd5b60006000198214156153c6576153c6614a1f565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561546257818101518382015260200161544a565b838111156121435750506000910152565b6000815180845261548b816020860160208601615447565b601f01601f19169290920160200192915050565b6080815260006154b360808301888a61541e565b82810360208401526154c58188615473565b905082810360408401526154da81868861541e565b915050826060830152979650505050505050565b6020815260006148ad60208301848661541e565b600080821280156001600160ff1b038490038513161561552457615524614a1f565b600160ff1b839003841281161561553d5761553d614a1f565b50500190565b60006001600160ff1b038184138284138082168684048611161561556957615569614a1f565b600160ff1b600087128281168783058912161561558857615588614a1f565b600087129250878205871284841616156155a4576155a4614a1f565b878505871281841616156155ba576155ba614a1f565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826155ed576155ed6155c8565b500690565b600082615601576156016155c8565b500490565b60006001600160401b038381169083168181101561562657615626614a1f565b039392505050565b6000823561017e1983360301811261564557600080fd5b9190910192915050565b600081600019048311821515161561566957615669614a1f565b500290565b60008282101561568057615680614a1f565b500390565b80516020808301519190811015614aa75760001960209190910360031b1b16919050565b600083516156bb818460208801615447565b6001600160801b0319939093169190920190815260100192915050565b60008251615645818460208701615447565b600082601f8301126156fb57600080fd5b81356001600160401b0381111561571457615714614e53565b615727601f8201601f1916602001614e92565b81815284602083860101111561573c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561576c57600080fd5b615774614e69565b82356001600160401b038082111561578b57600080fd5b615797368387016156ea565b835260208501359150808211156157ad57600080fd5b6157b9368387016156ea565b602084015260408501359150808211156157d257600080fd5b6157de368387016156ea565b604084015260608501359150808211156157f757600080fd5b615803368387016156ea565b6060840152608085013591508082111561581c57600080fd5b50615829368286016156ea565b60808301525061583b60a08401614a4d565b60a082015261584c60c08401614a4d565b60c082015261585d60e08401614a4d565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600181815b808511156158d05781600019048211156158b6576158b6614a1f565b808516156158c357918102915b93841c939080029061589a565b509250929050565b6000826158e757506001610c64565b816158f457506000610c64565b816001811461590a576002811461591457615930565b6001915050610c64565b60ff84111561592557615925614a1f565b50506001821b610c64565b5060208310610133831016604e8410600b8410161715615953575081810a610c64565b61595d8383615895565b806000190482111561597157615971614a1f565b029392505050565b600061352383836158d8565b60006001600160401b03808316818516818304811182151516156159ab576159ab614a1f565b02949350505050565b60006001600160401b03808416806159ce576159ce6155c8565b92169190910492915050565b60008083128015600160ff1b8501841216156159f8576159f8614a1f565b6001600160ff1b0384018313811615615a1357615a13614a1f565b50500390565b600060208284031215615a2b57600080fd5b61352382614a4d565b60006001600160401b03808316818516808303821115615a5657615a56614a1f565b01949350505050565b602081526000613523602083018461547356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220a70662ddf5cc6c48da2de15b85bdb76166a7de80fea7d4fd1263864700cbbdaf64736f6c634300080c0033", } // ContractEigenPodABI is the input ABI used to generate the binding from. @@ -130,7 +123,11 @@ type ContractEigenPodCalls interface { ValidatorPubkeyHashToInfo(opts *bind.CallOpts, validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) - ValidatorStatus(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) + ValidatorPubkeyToInfo(opts *bind.CallOpts, validatorPubkey []byte) (IEigenPodValidatorInfo, error) + + ValidatorStatus(opts *bind.CallOpts, validatorPubkey []byte) (uint8, error) + + ValidatorStatus0(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) WithdrawableRestakedExecutionLayerGwei(opts *bind.CallOpts) (uint64, error) } @@ -147,7 +144,7 @@ type ContractEigenPodTransacts interface { VerifyAndProcessWithdrawals(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) - VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) + VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) VerifyWithdrawalCredentials(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) @@ -727,12 +724,74 @@ func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorPubkeyHashToInf return _ContractEigenPod.Contract.ValidatorPubkeyHashToInfo(&_ContractEigenPod.CallOpts, validatorPubkeyHash) } -// ValidatorStatus is a free data retrieval call binding the contract method 0x7439841f. +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_ContractEigenPod *ContractEigenPodCaller) ValidatorPubkeyToInfo(opts *bind.CallOpts, validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "validatorPubkeyToInfo", validatorPubkey) + + if err != nil { + return *new(IEigenPodValidatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IEigenPodValidatorInfo)).(*IEigenPodValidatorInfo) + + return out0, err + +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_ContractEigenPod *ContractEigenPodSession) ValidatorPubkeyToInfo(validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + return _ContractEigenPod.Contract.ValidatorPubkeyToInfo(&_ContractEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorPubkeyToInfo(validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + return _ContractEigenPod.Contract.ValidatorPubkeyToInfo(&_ContractEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_ContractEigenPod *ContractEigenPodCaller) ValidatorStatus(opts *bind.CallOpts, validatorPubkey []byte) (uint8, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "validatorStatus", validatorPubkey) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_ContractEigenPod *ContractEigenPodSession) ValidatorStatus(validatorPubkey []byte) (uint8, error) { + return _ContractEigenPod.Contract.ValidatorStatus(&_ContractEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorStatus(validatorPubkey []byte) (uint8, error) { + return _ContractEigenPod.Contract.ValidatorStatus(&_ContractEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. // // Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) -func (_ContractEigenPod *ContractEigenPodCaller) ValidatorStatus(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) { +func (_ContractEigenPod *ContractEigenPodCaller) ValidatorStatus0(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) { var out []interface{} - err := _ContractEigenPod.contract.Call(opts, &out, "validatorStatus", pubkeyHash) + err := _ContractEigenPod.contract.Call(opts, &out, "validatorStatus0", pubkeyHash) if err != nil { return *new(uint8), err @@ -744,18 +803,18 @@ func (_ContractEigenPod *ContractEigenPodCaller) ValidatorStatus(opts *bind.Call } -// ValidatorStatus is a free data retrieval call binding the contract method 0x7439841f. +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. // // Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) -func (_ContractEigenPod *ContractEigenPodSession) ValidatorStatus(pubkeyHash [32]byte) (uint8, error) { - return _ContractEigenPod.Contract.ValidatorStatus(&_ContractEigenPod.CallOpts, pubkeyHash) +func (_ContractEigenPod *ContractEigenPodSession) ValidatorStatus0(pubkeyHash [32]byte) (uint8, error) { + return _ContractEigenPod.Contract.ValidatorStatus0(&_ContractEigenPod.CallOpts, pubkeyHash) } -// ValidatorStatus is a free data retrieval call binding the contract method 0x7439841f. +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. // // Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) -func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorStatus(pubkeyHash [32]byte) (uint8, error) { - return _ContractEigenPod.Contract.ValidatorStatus(&_ContractEigenPod.CallOpts, pubkeyHash) +func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorStatus0(pubkeyHash [32]byte) (uint8, error) { + return _ContractEigenPod.Contract.ValidatorStatus0(&_ContractEigenPod.CallOpts, pubkeyHash) } // WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. @@ -894,25 +953,25 @@ func (_ContractEigenPod *ContractEigenPodTransactorSession) VerifyAndProcessWith return _ContractEigenPod.Contract.VerifyAndProcessWithdrawals(&_ContractEigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) } -// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xb725bceb. +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. // -// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes32)[] balanceUpdateProofs, bytes32[][] validatorFields) returns() -func (_ContractEigenPod *ContractEigenPodTransactor) VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) { - return _ContractEigenPod.contract.Transact(opts, "verifyBalanceUpdates", oracleTimestamp, validatorIndices, stateRootProof, balanceUpdateProofs, validatorFields) +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "verifyBalanceUpdates", oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) } -// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xb725bceb. +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. // -// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes32)[] balanceUpdateProofs, bytes32[][] validatorFields) returns() -func (_ContractEigenPod *ContractEigenPodSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) { - return _ContractEigenPod.Contract.VerifyBalanceUpdates(&_ContractEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, balanceUpdateProofs, validatorFields) +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyBalanceUpdates(&_ContractEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) } -// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xb725bceb. +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. // -// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes32)[] balanceUpdateProofs, bytes32[][] validatorFields) returns() -func (_ContractEigenPod *ContractEigenPodTransactorSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) { - return _ContractEigenPod.Contract.VerifyBalanceUpdates(&_ContractEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, balanceUpdateProofs, validatorFields) +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyBalanceUpdates(&_ContractEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) } // VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. diff --git a/contracts/bindings/EigenPodManager/binding.go b/contracts/bindings/EigenPodManager/binding.go index 8e822f3e..540e1cf5 100644 --- a/contracts/bindings/EigenPodManager/binding.go +++ b/contracts/bindings/EigenPodManager/binding.go @@ -32,7 +32,7 @@ var ( // ContractEigenPodManagerMetaData contains all meta data concerning the ContractEigenPodManager contract. var ContractEigenPodManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"_ethPOS\",\"type\":\"address\"},{\"internalType\":\"contractIBeacon\",\"name\":\"_eigenPodBeacon\",\"type\":\"address\"},{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractISlasher\",\"name\":\"_slasher\",\"type\":\"address\"},{\"internalType\":\"contractIDelegationManager\",\"name\":\"_delegationManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BeaconChainETHDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"nonce\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatedAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"withdrawer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"BeaconChainETHWithdrawalCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOracleAddress\",\"type\":\"address\"}],\"name\":\"BeaconOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"MaxPodsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"eigenPod\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"}],\"name\":\"PodDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"addShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beaconChainETHStrategy\",\"outputs\":[{\"internalType\":\"contractIStrategy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beaconChainOracle\",\"outputs\":[{\"internalType\":\"contractIBeaconChainOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createPod\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationManager\",\"outputs\":[{\"internalType\":\"contractIDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenPodBeacon\",\"outputs\":[{\"internalType\":\"contractIBeacon\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethPOS\",\"outputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"getBlockRootAtTimestamp\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"}],\"name\":\"getPod\",\"outputs\":[{\"internalType\":\"contractIEigenPod\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"}],\"name\":\"hasPod\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxPods\",\"type\":\"uint256\"},{\"internalType\":\"contractIBeaconChainOracle\",\"name\":\"_beaconChainOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initPausedStatus\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numPods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ownerToPod\",\"outputs\":[{\"internalType\":\"contractIEigenPod\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"podOwnerShares\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"sharesDelta\",\"type\":\"int256\"}],\"name\":\"recordBeaconChainETHBalanceUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"removeShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxPods\",\"type\":\"uint256\"}],\"name\":\"setMaxPods\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBeaconChainOracle\",\"name\":\"newBeaconChainOracle\",\"type\":\"address\"}],\"name\":\"updateBeaconChainOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"withdrawSharesAsTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b506040516200337c3803806200337c83398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e0516101005161313b620002416000396000818161061e0152818161078401528181610b7c01528181611191015281816116260152611716015260006105140152600061030601526000818161029a015281816111100152611ecc015260006103e6015261313b6000f3fe6080604052600436106101ee5760003560e01c80639104c3191161010d578063c0ccbf10116100a0578063daf12cd41161006f578063daf12cd4146105ec578063ea4d3c9b1461060c578063f2fde38b14610640578063f6848d2414610660578063fabc1cbc1461069b57600080fd5b8063c0ccbf1014610576578063c1de3aef1461058c578063c2c51c40146105ac578063d1c64cc9146105cc57600080fd5b8063a6a509be116100dc578063a6a509be146104ec578063b134427114610502578063beffbb8914610536578063c052bd611461055657600080fd5b80639104c3191461045b5780639b4e4634146104835780639ba0627514610496578063a38406a3146104cc57600080fd5b80635ac86ab71161018557806374cdd7981161015457806374cdd798146103d457806384d8106214610408578063886f11951461041d5780638da5cb5b1461043d57600080fd5b80635ac86ab71461033d5780635c975abb1461037d57806360f4062b14610392578063715018a6146103bf57600080fd5b8063292b7b2b116101c1578063292b7b2b14610288578063387b1300146102d457806339b70e38146102f4578063595c6a671461032857600080fd5b80630cf2686d146101f35780630e81073c1461021557806310d67a2f14610248578063136439dd14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612284565b6106bb565b005b34801561022157600080fd5b506102356102303660046122b2565b610777565b6040519081526020015b60405180910390f35b34801561025457600080fd5b506102136102633660046122de565b610982565b34801561027457600080fd5b50610213610283366004612284565b610a32565b34801561029457600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161023f565b3480156102e057600080fd5b506102136102ef3660046122fb565b610b71565b34801561030057600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033457600080fd5b50610213610eb4565b34801561034957600080fd5b5061036d61035836600461233c565b606654600160ff9092169190911b9081161490565b604051901515815260200161023f565b34801561038957600080fd5b50606654610235565b34801561039e57600080fd5b506102356103ad3660046122de565b609b6020526000908152604090205481565b3480156103cb57600080fd5b50610213610f7b565b3480156103e057600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041457600080fd5b506102bc610f8f565b34801561042957600080fd5b506065546102bc906001600160a01b031681565b34801561044957600080fd5b506033546001600160a01b03166102bc565b34801561046757600080fd5b506102bc73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102136104913660046123a8565b61101b565b3480156104a257600080fd5b506102bc6104b13660046122de565b6098602052600090815260409020546001600160a01b031681565b3480156104d857600080fd5b506102bc6104e73660046122de565b6110b4565b3480156104f857600080fd5b5061023560995481565b34801561050e57600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054257600080fd5b506102136105513660046122b2565b611186565b34801561056257600080fd5b506097546102bc906001600160a01b031681565b34801561058257600080fd5b50610235609a5481565b34801561059857600080fd5b506102136105a73660046122de565b61139d565b3480156105b857600080fd5b506102136105c73660046122b2565b6113ae565b3480156105d857600080fd5b506102356105e736600461241c565b611780565b3480156105f857600080fd5b50610213610607366004612446565b61188b565b34801561061857600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5061021361065b3660046122de565b6119be565b34801561066c57600080fd5b5061036d61067b3660046122de565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106a757600080fd5b506102136106b6366004612284565b611a34565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073291906124a1565b6001600160a01b0316336001600160a01b03161461076b5760405162461bcd60e51b8152600401610762906124be565b60405180910390fd5b61077481611b90565b50565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c15760405162461bcd60e51b815260040161076290612508565b6001600160a01b03831661083d5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610762565b60008212156108ab5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610762565b6108b9633b9aca008361257c565b1561092c5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610762565b6001600160a01b0383166000908152609b60205260408120549061095084836125a6565b6001600160a01b0386166000908152609b6020526040902081905590506109778282611bd1565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f991906124a1565b6001600160a01b0316336001600160a01b031614610a295760405162461bcd60e51b8152600401610762906124be565b61077481611c13565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e91906125e7565b610aba5760405162461bcd60e51b815260040161076290612609565b60665481811614610b335760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610762565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb95760405162461bcd60e51b815260040161076290612508565b6001600160a01b038316610c335760405162461bcd60e51b815260206004820152604760248201526000805160206130e683398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610762565b6001600160a01b038216610cb05760405162461bcd60e51b815260206004820152604a60248201526000805160206130e683398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610762565b6000811215610d1f5760405162461bcd60e51b815260206004820152604160248201526000805160206130e683398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610762565b610d2d633b9aca008261257c565b15610da15760405162461bcd60e51b815260206004820152604a60248201526000805160206130e683398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610762565b6001600160a01b0383166000908152609b602052604081205490811215610e38576000610dcd82612651565b905080831115610e01576001600160a01b0385166000908152609b6020526040812055610dfa818461266e565b9250610e36565b6001600160a01b0385166000908152609b602052604081208054859290610e299084906125a6565b90915550610eaf92505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e9557600080fd5b505af1158015610ea9573d6000803e3d6000fd5b50505050505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2091906125e7565b610f3c5760405162461bcd60e51b815260040161076290612609565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610f83611d0a565b610f8d6000611d64565b565b336000908152609860205260408120546001600160a01b0316156110115760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610762565b600061097c611db6565b336000908152609860205260409020546001600160a01b03168061104457611041611db6565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e463490349061107a908a908a908a908a908a906004016126ae565b6000604051808303818588803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061097c5761117f836001600160a01b031660001b60405180610940016040528061090e81526020016127d861090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526111649291602001612723565b60405160208183030381529060405280519060200120611fea565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111ce5760405162461bcd60e51b815260040161076290612508565b60008112156112455760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610762565b611253633b9aca008261257c565b156112c8576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610762565b6001600160a01b0382166000908152609b60205260408120546112ec908390612738565b9050600081121561137d5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610762565b6001600160a01b039092166000908152609b602052604090209190915550565b6113a5611d0a565b61077481612046565b6001600160a01b0380831660009081526098602052604090205483911633146114295760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610762565b600260c954141561147c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610762565b600260c9556001600160a01b0383166115185760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610762565b611526633b9aca0083612777565b156115bf5760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610762565b6001600160a01b0383166000908152609b6020526040812054906115e384836125a6565b6001600160a01b0386166000908152609b6020526040812082905590915061160b8383611bd1565b905080156117735760008112156116d6576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061166a85612651565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156116b957600080fd5b505af11580156116cd573d6000803e3d6000fd5b50505050611773565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561175a57600080fd5b505af115801561176e573d6000803e3d6000fd5b505050505b5050600160c95550505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb919061278b565b90508061097c5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a401610762565b600054610100900460ff16158080156118ab5750600054600160ff909116105b806118c55750303b1580156118c5575060005460ff166001145b6119285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610762565b6000805460ff19166001179055801561194b576000805461ff0019166101001790555b61195486611b90565b61195d85612046565b61196684611d64565b6119708383612090565b80156119b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6119c6611d0a565b6001600160a01b038116611a2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610762565b61077481611d64565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab91906124a1565b6001600160a01b0316336001600160a01b031614611adb5760405162461bcd60e51b8152600401610762906124be565b606654198119606654191614611b595760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610762565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b66565b609a5460408051918252602082018390527f4e65c41a3597bda732ca64980235cf51494171d5853998763fb05db45afaacb3910160405180910390a1609a55565b6000808313611bf15760008213611bea5750600061097c565b508061097c565b60008213611c0957611c0283612651565b905061097c565b611c028383612738565b6001600160a01b038116611ca15760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610762565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610f8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610762565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606654600090819060019081161415611e115760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e64657820697320706175736564000000000000006044820152606401610762565b609a54609954611e229060016127a4565b1115611e865760405162461bcd60e51b815260206004820152602d60248201527f456967656e506f644d616e616765722e5f6465706c6f79506f643a20706f642060448201526c1b1a5b5a5d081c995858da1959609a1b6064820152608401610762565b609960008154611e95906127bc565b9091555060408051610940810190915261090e808252600091611f3491839133916127d86020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611f209291602001612723565b60405160208183030381529060405261217a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f7857600080fd5b505af1158015611f8c573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a391505090565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b166021830152603582018590526055808301859052835180840390910181526075909201909252805191012060009061117f565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b03161580156120b157506001600160a01b03821615155b6121335760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610762565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261217682611c13565b5050565b600080844710156121cd5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610762565b825161221b5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610762565b8383516020850187f590506001600160a01b03811661227c5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610762565b949350505050565b60006020828403121561229657600080fd5b5035919050565b6001600160a01b038116811461077457600080fd5b600080604083850312156122c557600080fd5b82356122d08161229d565b946020939093013593505050565b6000602082840312156122f057600080fd5b813561117f8161229d565b60008060006060848603121561231057600080fd5b833561231b8161229d565b9250602084013561232b8161229d565b929592945050506040919091013590565b60006020828403121561234e57600080fd5b813560ff8116811461117f57600080fd5b60008083601f84011261237157600080fd5b50813567ffffffffffffffff81111561238957600080fd5b6020830191508360208285010111156123a157600080fd5b9250929050565b6000806000806000606086880312156123c057600080fd5b853567ffffffffffffffff808211156123d857600080fd5b6123e489838a0161235f565b909750955060208801359150808211156123fd57600080fd5b5061240a8882890161235f565b96999598509660400135949350505050565b60006020828403121561242e57600080fd5b813567ffffffffffffffff8116811461117f57600080fd5b600080600080600060a0868803121561245e57600080fd5b8535945060208601356124708161229d565b935060408601356124808161229d565b925060608601356124908161229d565b949793965091946080013592915050565b6000602082840312156124b357600080fd5b815161117f8161229d565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261258b5761258b612566565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156125c8576125c8612590565b600160ff1b83900384128116156125e1576125e1612590565b50500190565b6000602082840312156125f957600080fd5b8151801515811461117f57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561266757612667612590565b5060000390565b60008282101561268057612680612590565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126c2606083018789612685565b82810360208401526126d5818688612685565b9150508260408301529695505050505050565b6000815160005b8181101561270957602081850181015186830152016126ef565b81811115612718576000828601525b509290920192915050565b600061227c61273283866126e8565b846126e8565b60008083128015600160ff1b85018412161561275657612756612590565b6001600160ff1b038401831381161561277157612771612590565b50500390565b60008261278657612786612566565b500790565b60006020828403121561279d57600080fd5b5051919050565b600082198211156127b7576127b7612590565b500190565b60006000198214156127d0576127d0612590565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564456967656e506f644d616e616765722e77697468647261775368617265734173a264697066735822122067d55226c4bd7f02eaade488b04b5389ad639aa22102c19306354772b989189c64736f6c634300080c0033", + Bin: "0x6101206040523480156200001257600080fd5b50604051620033d7380380620033d783398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051613196620002416000396000818161061e0152818161078401528181610b7c01528181611245015281816116da01526117ca015260006105140152600061030601526000818161029a015281816111c40152611f28015260006103e601526131966000f3fe6080604052600436106101ee5760003560e01c80639104c3191161010d578063c0ccbf10116100a0578063daf12cd41161006f578063daf12cd4146105ec578063ea4d3c9b1461060c578063f2fde38b14610640578063f6848d2414610660578063fabc1cbc1461069b57600080fd5b8063c0ccbf1014610576578063c1de3aef1461058c578063c2c51c40146105ac578063d1c64cc9146105cc57600080fd5b8063a6a509be116100dc578063a6a509be146104ec578063b134427114610502578063beffbb8914610536578063c052bd611461055657600080fd5b80639104c3191461045b5780639b4e4634146104835780639ba0627514610496578063a38406a3146104cc57600080fd5b80635ac86ab71161018557806374cdd7981161015457806374cdd798146103d457806384d8106214610408578063886f11951461041d5780638da5cb5b1461043d57600080fd5b80635ac86ab71461033d5780635c975abb1461037d57806360f4062b14610392578063715018a6146103bf57600080fd5b8063292b7b2b116101c1578063292b7b2b14610288578063387b1300146102d457806339b70e38146102f4578063595c6a671461032857600080fd5b80630cf2686d146101f35780630e81073c1461021557806310d67a2f14610248578063136439dd14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e3660046122df565b6106bb565b005b34801561022157600080fd5b5061023561023036600461230d565b610777565b6040519081526020015b60405180910390f35b34801561025457600080fd5b50610213610263366004612339565b610982565b34801561027457600080fd5b506102136102833660046122df565b610a32565b34801561029457600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161023f565b3480156102e057600080fd5b506102136102ef366004612356565b610b71565b34801561030057600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033457600080fd5b50610213610eb4565b34801561034957600080fd5b5061036d610358366004612397565b606654600160ff9092169190911b9081161490565b604051901515815260200161023f565b34801561038957600080fd5b50606654610235565b34801561039e57600080fd5b506102356103ad366004612339565b609b6020526000908152604090205481565b3480156103cb57600080fd5b50610213610f7b565b3480156103e057600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041457600080fd5b506102bc610f8f565b34801561042957600080fd5b506065546102bc906001600160a01b031681565b34801561044957600080fd5b506033546001600160a01b03166102bc565b34801561046757600080fd5b506102bc73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610213610491366004612403565b611079565b3480156104a257600080fd5b506102bc6104b1366004612339565b6098602052600090815260409020546001600160a01b031681565b3480156104d857600080fd5b506102bc6104e7366004612339565b611168565b3480156104f857600080fd5b5061023560995481565b34801561050e57600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054257600080fd5b5061021361055136600461230d565b61123a565b34801561056257600080fd5b506097546102bc906001600160a01b031681565b34801561058257600080fd5b50610235609a5481565b34801561059857600080fd5b506102136105a7366004612339565b611451565b3480156105b857600080fd5b506102136105c736600461230d565b611462565b3480156105d857600080fd5b506102356105e7366004612477565b611834565b3480156105f857600080fd5b506102136106073660046124a1565b61193f565b34801561061857600080fd5b506102bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5061021361065b366004612339565b611a72565b34801561066c57600080fd5b5061036d61067b366004612339565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106a757600080fd5b506102136106b63660046122df565b611ae8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073291906124fc565b6001600160a01b0316336001600160a01b03161461076b5760405162461bcd60e51b815260040161076290612519565b60405180910390fd5b61077481611c44565b50565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c15760405162461bcd60e51b815260040161076290612563565b6001600160a01b03831661083d5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610762565b60008212156108ab5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610762565b6108b9633b9aca00836125d7565b1561092c5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610762565b6001600160a01b0383166000908152609b6020526040812054906109508483612601565b6001600160a01b0386166000908152609b6020526040902081905590506109778282611c85565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f991906124fc565b6001600160a01b0316336001600160a01b031614610a295760405162461bcd60e51b815260040161076290612519565b61077481611cc7565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190612642565b610aba5760405162461bcd60e51b815260040161076290612664565b60665481811614610b335760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610762565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb95760405162461bcd60e51b815260040161076290612563565b6001600160a01b038316610c335760405162461bcd60e51b8152602060048201526047602482015260008051602061314183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610762565b6001600160a01b038216610cb05760405162461bcd60e51b815260206004820152604a602482015260008051602061314183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610762565b6000811215610d1f5760405162461bcd60e51b8152602060048201526041602482015260008051602061314183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610762565b610d2d633b9aca00826125d7565b15610da15760405162461bcd60e51b815260206004820152604a602482015260008051602061314183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610762565b6001600160a01b0383166000908152609b602052604081205490811215610e38576000610dcd826126ac565b905080831115610e01576001600160a01b0385166000908152609b6020526040812055610dfa81846126c9565b9250610e36565b6001600160a01b0385166000908152609b602052604081208054859290610e29908490612601565b90915550610eaf92505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e9557600080fd5b505af1158015610ea9573d6000803e3d6000fd5b50505050505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f209190612642565b610f3c5760405162461bcd60e51b815260040161076290612664565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610f83611dbe565b610f8d6000611e18565b565b606654600090819060019081161415610fe65760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610762565b336000908152609860205260409020546001600160a01b0316156110685760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610762565b6000611072611e6a565b9250505090565b606654600090600190811614156110ce5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610762565b336000908152609860205260409020546001600160a01b0316806110f7576110f4611e6a565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e463490349061112d908b908b908b908b908b90600401612709565b6000604051808303818588803b15801561114657600080fd5b505af115801561115a573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061097c57611233836001600160a01b031660001b60405180610940016040528061090e815260200161283361090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611218929160200161277e565b60405160208183030381529060405280519060200120612045565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112825760405162461bcd60e51b815260040161076290612563565b60008112156112f95760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610762565b611307633b9aca00826125d7565b1561137c576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610762565b6001600160a01b0382166000908152609b60205260408120546113a0908390612793565b905060008112156114315760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610762565b6001600160a01b039092166000908152609b602052604090209190915550565b611459611dbe565b610774816120a1565b6001600160a01b0380831660009081526098602052604090205483911633146114dd5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610762565b600260c95414156115305760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610762565b600260c9556001600160a01b0383166115cc5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610762565b6115da633b9aca00836127d2565b156116735760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610762565b6001600160a01b0383166000908152609b6020526040812054906116978483612601565b6001600160a01b0386166000908152609b602052604081208290559091506116bf8383611c85565b9050801561182757600081121561178a576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061171e856126ac565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561176d57600080fd5b505af1158015611781573d6000803e3d6000fd5b50505050611827565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561180e57600080fd5b505af1158015611822573d6000803e3d6000fd5b505050505b5050600160c95550505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af91906127e6565b90508061097c5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a401610762565b600054610100900460ff161580801561195f5750600054600160ff909116105b806119795750303b158015611979575060005460ff166001145b6119dc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610762565b6000805460ff1916600117905580156119ff576000805461ff0019166101001790555b611a0886611c44565b611a11856120a1565b611a1a84611e18565b611a2483836120eb565b8015611a6a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b611a7a611dbe565b6001600160a01b038116611adf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610762565b61077481611e18565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f91906124fc565b6001600160a01b0316336001600160a01b031614611b8f5760405162461bcd60e51b815260040161076290612519565b606654198119606654191614611c0d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610762565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b66565b609a5460408051918252602082018390527f4e65c41a3597bda732ca64980235cf51494171d5853998763fb05db45afaacb3910160405180910390a1609a55565b6000808313611ca55760008213611c9e5750600061097c565b508061097c565b60008213611cbd57611cb6836126ac565b905061097c565b611cb68383612793565b6001600160a01b038116611d555760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610762565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610f8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610762565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000609a546099546001611e7e91906127ff565b1115611ee25760405162461bcd60e51b815260206004820152602d60248201527f456967656e506f644d616e616765722e5f6465706c6f79506f643a20706f642060448201526c1b1a5b5a5d081c995858da1959609a1b6064820152608401610762565b609960008154611ef190612817565b9091555060408051610940810190915261090e808252600091611f9091839133916128336020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611f7c929160200161277e565b6040516020818303038152906040526121d5565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611fd457600080fd5b505af1158015611fe8573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611233565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561210c57506001600160a01b03821615155b61218e5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610762565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26121d182611cc7565b5050565b600080844710156122285760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610762565b82516122765760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610762565b8383516020850187f590506001600160a01b0381166122d75760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610762565b949350505050565b6000602082840312156122f157600080fd5b5035919050565b6001600160a01b038116811461077457600080fd5b6000806040838503121561232057600080fd5b823561232b816122f8565b946020939093013593505050565b60006020828403121561234b57600080fd5b8135611233816122f8565b60008060006060848603121561236b57600080fd5b8335612376816122f8565b92506020840135612386816122f8565b929592945050506040919091013590565b6000602082840312156123a957600080fd5b813560ff8116811461123357600080fd5b60008083601f8401126123cc57600080fd5b50813567ffffffffffffffff8111156123e457600080fd5b6020830191508360208285010111156123fc57600080fd5b9250929050565b60008060008060006060868803121561241b57600080fd5b853567ffffffffffffffff8082111561243357600080fd5b61243f89838a016123ba565b9097509550602088013591508082111561245857600080fd5b50612465888289016123ba565b96999598509660400135949350505050565b60006020828403121561248957600080fd5b813567ffffffffffffffff8116811461123357600080fd5b600080600080600060a086880312156124b957600080fd5b8535945060208601356124cb816122f8565b935060408601356124db816122f8565b925060608601356124eb816122f8565b949793965091946080013592915050565b60006020828403121561250e57600080fd5b8151611233816122f8565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826125e6576125e66125c1565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b0384900385131615612623576126236125eb565b600160ff1b839003841281161561263c5761263c6125eb565b50500190565b60006020828403121561265457600080fd5b8151801515811461123357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156126c2576126c26125eb565b5060000390565b6000828210156126db576126db6125eb565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061271d6060830187896126e0565b82810360208401526127308186886126e0565b9150508260408301529695505050505050565b6000815160005b81811015612764576020818501810151868301520161274a565b81811115612773576000828601525b509290920192915050565b60006122d761278d8386612743565b84612743565b60008083128015600160ff1b8501841216156127b1576127b16125eb565b6001600160ff1b03840183138116156127cc576127cc6125eb565b50500390565b6000826127e1576127e16125c1565b500790565b6000602082840312156127f857600080fd5b5051919050565b60008219821115612812576128126125eb565b500190565b600060001982141561282b5761282b6125eb565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220543f9ce279848456798b3d87c119b4c7742c70fdf6bb7e22c63123da44aa75d864736f6c634300080c0033", } // ContractEigenPodManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/IBLSSignatureChecker/binding.go b/contracts/bindings/IBLSSignatureChecker/binding.go index bde7e6b5..a2002a8e 100644 --- a/contracts/bindings/IBLSSignatureChecker/binding.go +++ b/contracts/bindings/IBLSSignatureChecker/binding.go @@ -61,7 +61,7 @@ type IBLSSignatureCheckerQuorumStakeTotals struct { // ContractIBLSSignatureCheckerMetaData contains all meta data concerning the ContractIBLSSignatureChecker contract. var ContractIBLSSignatureCheckerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"blsPubkeyRegistry\",\"outputs\":[{\"internalType\":\"contractIBLSPubkeyRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contractIStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", } // ContractIBLSSignatureCheckerABI is the input ABI used to generate the binding from. @@ -77,10 +77,12 @@ type ContractIBLSSignatureCheckerMethods interface { // ContractIBLSSignatureCheckerCalls is an auto generated interface that defines the call methods available for an Ethereum contract. type ContractIBLSSignatureCheckerCalls interface { - BlsPubkeyRegistry(opts *bind.CallOpts) (common.Address, error) + BlsApkRegistry(opts *bind.CallOpts) (common.Address, error) CheckSignatures(opts *bind.CallOpts, msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) + Delegation(opts *bind.CallOpts) (common.Address, error) + RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) StakeRegistry(opts *bind.CallOpts) (common.Address, error) @@ -92,6 +94,9 @@ type ContractIBLSSignatureCheckerTransacts interface { // ContractIBLSSignatureCheckerFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. type ContractIBLSSignatureCheckerFilters interface { + FilterStaleStakesForbiddenUpdate(opts *bind.FilterOpts) (*ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator, error) + WatchStaleStakesForbiddenUpdate(opts *bind.WatchOpts, sink chan<- *ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate) (event.Subscription, error) + ParseStaleStakesForbiddenUpdate(log types.Log) (*ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate, error) } // ContractIBLSSignatureChecker is an auto generated Go binding around an Ethereum contract. @@ -248,12 +253,12 @@ func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerTransactorRaw) return _ContractIBLSSignatureChecker.Contract.contract.Transact(opts, method, params...) } -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. // -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCaller) BlsPubkeyRegistry(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCaller) BlsApkRegistry(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _ContractIBLSSignatureChecker.contract.Call(opts, &out, "blsPubkeyRegistry") + err := _ContractIBLSSignatureChecker.contract.Call(opts, &out, "blsApkRegistry") if err != nil { return *new(common.Address), err @@ -265,18 +270,18 @@ func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCaller) BlsPubk } -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. // -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerSession) BlsPubkeyRegistry() (common.Address, error) { - return _ContractIBLSSignatureChecker.Contract.BlsPubkeyRegistry(&_ContractIBLSSignatureChecker.CallOpts) +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerSession) BlsApkRegistry() (common.Address, error) { + return _ContractIBLSSignatureChecker.Contract.BlsApkRegistry(&_ContractIBLSSignatureChecker.CallOpts) } -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. // -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCallerSession) BlsPubkeyRegistry() (common.Address, error) { - return _ContractIBLSSignatureChecker.Contract.BlsPubkeyRegistry(&_ContractIBLSSignatureChecker.CallOpts) +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCallerSession) BlsApkRegistry() (common.Address, error) { + return _ContractIBLSSignatureChecker.Contract.BlsApkRegistry(&_ContractIBLSSignatureChecker.CallOpts) } // CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636. @@ -311,6 +316,37 @@ func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCallerSession) return _ContractIBLSSignatureChecker.Contract.CheckSignatures(&_ContractIBLSSignatureChecker.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature) } +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractIBLSSignatureChecker.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerSession) Delegation() (common.Address, error) { + return _ContractIBLSSignatureChecker.Contract.Delegation(&_ContractIBLSSignatureChecker.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCallerSession) Delegation() (common.Address, error) { + return _ContractIBLSSignatureChecker.Contract.Delegation(&_ContractIBLSSignatureChecker.CallOpts) +} + // RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. // // Solidity: function registryCoordinator() view returns(address) @@ -372,3 +408,137 @@ func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerSession) StakeR func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerCallerSession) StakeRegistry() (common.Address, error) { return _ContractIBLSSignatureChecker.Contract.StakeRegistry(&_ContractIBLSSignatureChecker.CallOpts) } + +// ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator is returned from FilterStaleStakesForbiddenUpdate and is used to iterate over the raw logs and unpacked data for StaleStakesForbiddenUpdate events raised by the ContractIBLSSignatureChecker contract. +type ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator struct { + Event *ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate represents a StaleStakesForbiddenUpdate event raised by the ContractIBLSSignatureChecker contract. +type ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate struct { + Value bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStaleStakesForbiddenUpdate is a free log retrieval operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc. +// +// Solidity: event StaleStakesForbiddenUpdate(bool value) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerFilterer) FilterStaleStakesForbiddenUpdate(opts *bind.FilterOpts) (*ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator, error) { + + logs, sub, err := _ContractIBLSSignatureChecker.contract.FilterLogs(opts, "StaleStakesForbiddenUpdate") + if err != nil { + return nil, err + } + return &ContractIBLSSignatureCheckerStaleStakesForbiddenUpdateIterator{contract: _ContractIBLSSignatureChecker.contract, event: "StaleStakesForbiddenUpdate", logs: logs, sub: sub}, nil +} + +// WatchStaleStakesForbiddenUpdate is a free log subscription operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc. +// +// Solidity: event StaleStakesForbiddenUpdate(bool value) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerFilterer) WatchStaleStakesForbiddenUpdate(opts *bind.WatchOpts, sink chan<- *ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate) (event.Subscription, error) { + + logs, sub, err := _ContractIBLSSignatureChecker.contract.WatchLogs(opts, "StaleStakesForbiddenUpdate") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate) + if err := _ContractIBLSSignatureChecker.contract.UnpackLog(event, "StaleStakesForbiddenUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStaleStakesForbiddenUpdate is a log parse operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc. +// +// Solidity: event StaleStakesForbiddenUpdate(bool value) +func (_ContractIBLSSignatureChecker *ContractIBLSSignatureCheckerFilterer) ParseStaleStakesForbiddenUpdate(log types.Log) (*ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate, error) { + event := new(ContractIBLSSignatureCheckerStaleStakesForbiddenUpdate) + if err := _ContractIBLSSignatureChecker.contract.UnpackLog(event, "StaleStakesForbiddenUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/ISlasher/binding.go b/contracts/bindings/ISlasher/binding.go new file mode 100644 index 00000000..a443f10c --- /dev/null +++ b/contracts/bindings/ISlasher/binding.go @@ -0,0 +1,1568 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractISlasher + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ISlasherMiddlewareTimes is an auto generated low-level Go binding around an user-defined struct. +type ISlasherMiddlewareTimes struct { + StalestUpdateBlock uint32 + LatestServeUntilBlock uint32 +} + +// ContractISlasherMetaData contains all meta data concerning the ContractISlasher contract. +var ContractISlasherMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previouslySlashedAddress\",\"type\":\"address\"}],\"name\":\"FrozenStatusReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\"}],\"name\":\"MiddlewareTimesAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slashedOperator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slashingContract\",\"type\":\"address\"}],\"name\":\"OperatorFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"OptedIntoSlashing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"contractCanSlashOperatorUntilBlock\",\"type\":\"uint32\"}],\"name\":\"SlashingAbilityRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toBeSlashed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"slashingContract\",\"type\":\"address\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\"}],\"name\":\"canWithdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"contractCanSlashOperatorUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contractIDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toBeFrozen\",\"type\":\"address\"}],\"name\":\"freezeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"}],\"name\":\"getCorrectValueForInsertAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getMiddlewareTimesIndexServeUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getMiddlewareTimesIndexStalestUpdateBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"latestUpdateBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"middlewareTimesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"arrayIndex\",\"type\":\"uint256\"}],\"name\":\"operatorToMiddlewareTimes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\"}],\"internalType\":\"structISlasher.MiddlewareTimes\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"operatorWhitelistedContractsLinkedListEntry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"operatorWhitelistedContractsLinkedListSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"optIntoSlashing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordFirstStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordLastStakeUpdateAndRevokeSlashingAbility\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"insertAfter\",\"type\":\"uint256\"}],\"name\":\"recordStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"frozenAddresses\",\"type\":\"address[]\"}],\"name\":\"resetFrozenStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// ContractISlasherABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractISlasherMetaData.ABI instead. +var ContractISlasherABI = ContractISlasherMetaData.ABI + +// ContractISlasherMethods is an auto generated interface around an Ethereum contract. +type ContractISlasherMethods interface { + ContractISlasherCalls + ContractISlasherTransacts + ContractISlasherFilters +} + +// ContractISlasherCalls is an auto generated interface that defines the call methods available for an Ethereum contract. +type ContractISlasherCalls interface { + CanSlash(opts *bind.CallOpts, toBeSlashed common.Address, slashingContract common.Address) (bool, error) + + ContractCanSlashOperatorUntilBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) + + Delegation(opts *bind.CallOpts) (common.Address, error) + + GetCorrectValueForInsertAfter(opts *bind.CallOpts, operator common.Address, updateBlock uint32) (*big.Int, error) + + GetMiddlewareTimesIndexServeUntilBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) + + GetMiddlewareTimesIndexStalestUpdateBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) + + IsFrozen(opts *bind.CallOpts, staker common.Address) (bool, error) + + LatestUpdateBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) + + MiddlewareTimesLength(opts *bind.CallOpts, operator common.Address) (*big.Int, error) + + OperatorToMiddlewareTimes(opts *bind.CallOpts, operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) + + OperatorWhitelistedContractsLinkedListEntry(opts *bind.CallOpts, operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) + + OperatorWhitelistedContractsLinkedListSize(opts *bind.CallOpts, operator common.Address) (*big.Int, error) + + StrategyManager(opts *bind.CallOpts) (common.Address, error) +} + +// ContractISlasherTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. +type ContractISlasherTransacts interface { + CanWithdraw(opts *bind.TransactOpts, operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) + + FreezeOperator(opts *bind.TransactOpts, toBeFrozen common.Address) (*types.Transaction, error) + + OptIntoSlashing(opts *bind.TransactOpts, contractAddress common.Address) (*types.Transaction, error) + + RecordFirstStakeUpdate(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) + + RecordLastStakeUpdateAndRevokeSlashingAbility(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) + + RecordStakeUpdate(opts *bind.TransactOpts, operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) + + ResetFrozenStatus(opts *bind.TransactOpts, frozenAddresses []common.Address) (*types.Transaction, error) +} + +// ContractISlasherFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. +type ContractISlasherFilters interface { + FilterFrozenStatusReset(opts *bind.FilterOpts, previouslySlashedAddress []common.Address) (*ContractISlasherFrozenStatusResetIterator, error) + WatchFrozenStatusReset(opts *bind.WatchOpts, sink chan<- *ContractISlasherFrozenStatusReset, previouslySlashedAddress []common.Address) (event.Subscription, error) + ParseFrozenStatusReset(log types.Log) (*ContractISlasherFrozenStatusReset, error) + + FilterMiddlewareTimesAdded(opts *bind.FilterOpts) (*ContractISlasherMiddlewareTimesAddedIterator, error) + WatchMiddlewareTimesAdded(opts *bind.WatchOpts, sink chan<- *ContractISlasherMiddlewareTimesAdded) (event.Subscription, error) + ParseMiddlewareTimesAdded(log types.Log) (*ContractISlasherMiddlewareTimesAdded, error) + + FilterOperatorFrozen(opts *bind.FilterOpts, slashedOperator []common.Address, slashingContract []common.Address) (*ContractISlasherOperatorFrozenIterator, error) + WatchOperatorFrozen(opts *bind.WatchOpts, sink chan<- *ContractISlasherOperatorFrozen, slashedOperator []common.Address, slashingContract []common.Address) (event.Subscription, error) + ParseOperatorFrozen(log types.Log) (*ContractISlasherOperatorFrozen, error) + + FilterOptedIntoSlashing(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractISlasherOptedIntoSlashingIterator, error) + WatchOptedIntoSlashing(opts *bind.WatchOpts, sink chan<- *ContractISlasherOptedIntoSlashing, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) + ParseOptedIntoSlashing(log types.Log) (*ContractISlasherOptedIntoSlashing, error) + + FilterSlashingAbilityRevoked(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractISlasherSlashingAbilityRevokedIterator, error) + WatchSlashingAbilityRevoked(opts *bind.WatchOpts, sink chan<- *ContractISlasherSlashingAbilityRevoked, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) + ParseSlashingAbilityRevoked(log types.Log) (*ContractISlasherSlashingAbilityRevoked, error) +} + +// ContractISlasher is an auto generated Go binding around an Ethereum contract. +type ContractISlasher struct { + ContractISlasherCaller // Read-only binding to the contract + ContractISlasherTransactor // Write-only binding to the contract + ContractISlasherFilterer // Log filterer for contract events +} + +// ContractISlasher implements the ContractISlasherMethods interface. +var _ ContractISlasherMethods = (*ContractISlasher)(nil) + +// ContractISlasherCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractISlasherCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractISlasherCaller implements the ContractISlasherCalls interface. +var _ ContractISlasherCalls = (*ContractISlasherCaller)(nil) + +// ContractISlasherTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractISlasherTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractISlasherTransactor implements the ContractISlasherTransacts interface. +var _ ContractISlasherTransacts = (*ContractISlasherTransactor)(nil) + +// ContractISlasherFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractISlasherFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractISlasherFilterer implements the ContractISlasherFilters interface. +var _ ContractISlasherFilters = (*ContractISlasherFilterer)(nil) + +// ContractISlasherSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractISlasherSession struct { + Contract *ContractISlasher // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractISlasherCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractISlasherCallerSession struct { + Contract *ContractISlasherCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractISlasherTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractISlasherTransactorSession struct { + Contract *ContractISlasherTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractISlasherRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractISlasherRaw struct { + Contract *ContractISlasher // Generic contract binding to access the raw methods on +} + +// ContractISlasherCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractISlasherCallerRaw struct { + Contract *ContractISlasherCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractISlasherTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractISlasherTransactorRaw struct { + Contract *ContractISlasherTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractISlasher creates a new instance of ContractISlasher, bound to a specific deployed contract. +func NewContractISlasher(address common.Address, backend bind.ContractBackend) (*ContractISlasher, error) { + contract, err := bindContractISlasher(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractISlasher{ContractISlasherCaller: ContractISlasherCaller{contract: contract}, ContractISlasherTransactor: ContractISlasherTransactor{contract: contract}, ContractISlasherFilterer: ContractISlasherFilterer{contract: contract}}, nil +} + +// NewContractISlasherCaller creates a new read-only instance of ContractISlasher, bound to a specific deployed contract. +func NewContractISlasherCaller(address common.Address, caller bind.ContractCaller) (*ContractISlasherCaller, error) { + contract, err := bindContractISlasher(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractISlasherCaller{contract: contract}, nil +} + +// NewContractISlasherTransactor creates a new write-only instance of ContractISlasher, bound to a specific deployed contract. +func NewContractISlasherTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractISlasherTransactor, error) { + contract, err := bindContractISlasher(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractISlasherTransactor{contract: contract}, nil +} + +// NewContractISlasherFilterer creates a new log filterer instance of ContractISlasher, bound to a specific deployed contract. +func NewContractISlasherFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractISlasherFilterer, error) { + contract, err := bindContractISlasher(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractISlasherFilterer{contract: contract}, nil +} + +// bindContractISlasher binds a generic wrapper to an already deployed contract. +func bindContractISlasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractISlasherMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractISlasher *ContractISlasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractISlasher.Contract.ContractISlasherCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractISlasher *ContractISlasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractISlasher.Contract.ContractISlasherTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractISlasher *ContractISlasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractISlasher.Contract.ContractISlasherTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractISlasher *ContractISlasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractISlasher.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractISlasher *ContractISlasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractISlasher.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractISlasher *ContractISlasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractISlasher.Contract.contract.Transact(opts, method, params...) +} + +// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. +// +// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) +func (_ContractISlasher *ContractISlasherCaller) CanSlash(opts *bind.CallOpts, toBeSlashed common.Address, slashingContract common.Address) (bool, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "canSlash", toBeSlashed, slashingContract) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. +// +// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) +func (_ContractISlasher *ContractISlasherSession) CanSlash(toBeSlashed common.Address, slashingContract common.Address) (bool, error) { + return _ContractISlasher.Contract.CanSlash(&_ContractISlasher.CallOpts, toBeSlashed, slashingContract) +} + +// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. +// +// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) +func (_ContractISlasher *ContractISlasherCallerSession) CanSlash(toBeSlashed common.Address, slashingContract common.Address) (bool, error) { + return _ContractISlasher.Contract.CanSlash(&_ContractISlasher.CallOpts, toBeSlashed, slashingContract) +} + +// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. +// +// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) +func (_ContractISlasher *ContractISlasherCaller) ContractCanSlashOperatorUntilBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "contractCanSlashOperatorUntilBlock", operator, serviceContract) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. +// +// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) +func (_ContractISlasher *ContractISlasherSession) ContractCanSlashOperatorUntilBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ContractISlasher.Contract.ContractCanSlashOperatorUntilBlock(&_ContractISlasher.CallOpts, operator, serviceContract) +} + +// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. +// +// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) +func (_ContractISlasher *ContractISlasherCallerSession) ContractCanSlashOperatorUntilBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ContractISlasher.Contract.ContractCanSlashOperatorUntilBlock(&_ContractISlasher.CallOpts, operator, serviceContract) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractISlasher *ContractISlasherCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractISlasher *ContractISlasherSession) Delegation() (common.Address, error) { + return _ContractISlasher.Contract.Delegation(&_ContractISlasher.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractISlasher *ContractISlasherCallerSession) Delegation() (common.Address, error) { + return _ContractISlasher.Contract.Delegation(&_ContractISlasher.CallOpts) +} + +// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. +// +// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) +func (_ContractISlasher *ContractISlasherCaller) GetCorrectValueForInsertAfter(opts *bind.CallOpts, operator common.Address, updateBlock uint32) (*big.Int, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "getCorrectValueForInsertAfter", operator, updateBlock) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. +// +// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) +func (_ContractISlasher *ContractISlasherSession) GetCorrectValueForInsertAfter(operator common.Address, updateBlock uint32) (*big.Int, error) { + return _ContractISlasher.Contract.GetCorrectValueForInsertAfter(&_ContractISlasher.CallOpts, operator, updateBlock) +} + +// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. +// +// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) +func (_ContractISlasher *ContractISlasherCallerSession) GetCorrectValueForInsertAfter(operator common.Address, updateBlock uint32) (*big.Int, error) { + return _ContractISlasher.Contract.GetCorrectValueForInsertAfter(&_ContractISlasher.CallOpts, operator, updateBlock) +} + +// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. +// +// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) +func (_ContractISlasher *ContractISlasherCaller) GetMiddlewareTimesIndexServeUntilBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "getMiddlewareTimesIndexServeUntilBlock", operator, index) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. +// +// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) +func (_ContractISlasher *ContractISlasherSession) GetMiddlewareTimesIndexServeUntilBlock(operator common.Address, index uint32) (uint32, error) { + return _ContractISlasher.Contract.GetMiddlewareTimesIndexServeUntilBlock(&_ContractISlasher.CallOpts, operator, index) +} + +// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. +// +// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) +func (_ContractISlasher *ContractISlasherCallerSession) GetMiddlewareTimesIndexServeUntilBlock(operator common.Address, index uint32) (uint32, error) { + return _ContractISlasher.Contract.GetMiddlewareTimesIndexServeUntilBlock(&_ContractISlasher.CallOpts, operator, index) +} + +// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. +// +// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) +func (_ContractISlasher *ContractISlasherCaller) GetMiddlewareTimesIndexStalestUpdateBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "getMiddlewareTimesIndexStalestUpdateBlock", operator, index) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. +// +// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) +func (_ContractISlasher *ContractISlasherSession) GetMiddlewareTimesIndexStalestUpdateBlock(operator common.Address, index uint32) (uint32, error) { + return _ContractISlasher.Contract.GetMiddlewareTimesIndexStalestUpdateBlock(&_ContractISlasher.CallOpts, operator, index) +} + +// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. +// +// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) +func (_ContractISlasher *ContractISlasherCallerSession) GetMiddlewareTimesIndexStalestUpdateBlock(operator common.Address, index uint32) (uint32, error) { + return _ContractISlasher.Contract.GetMiddlewareTimesIndexStalestUpdateBlock(&_ContractISlasher.CallOpts, operator, index) +} + +// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. +// +// Solidity: function isFrozen(address staker) view returns(bool) +func (_ContractISlasher *ContractISlasherCaller) IsFrozen(opts *bind.CallOpts, staker common.Address) (bool, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "isFrozen", staker) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. +// +// Solidity: function isFrozen(address staker) view returns(bool) +func (_ContractISlasher *ContractISlasherSession) IsFrozen(staker common.Address) (bool, error) { + return _ContractISlasher.Contract.IsFrozen(&_ContractISlasher.CallOpts, staker) +} + +// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. +// +// Solidity: function isFrozen(address staker) view returns(bool) +func (_ContractISlasher *ContractISlasherCallerSession) IsFrozen(staker common.Address) (bool, error) { + return _ContractISlasher.Contract.IsFrozen(&_ContractISlasher.CallOpts, staker) +} + +// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. +// +// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) +func (_ContractISlasher *ContractISlasherCaller) LatestUpdateBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "latestUpdateBlock", operator, serviceContract) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. +// +// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) +func (_ContractISlasher *ContractISlasherSession) LatestUpdateBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ContractISlasher.Contract.LatestUpdateBlock(&_ContractISlasher.CallOpts, operator, serviceContract) +} + +// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. +// +// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) +func (_ContractISlasher *ContractISlasherCallerSession) LatestUpdateBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ContractISlasher.Contract.LatestUpdateBlock(&_ContractISlasher.CallOpts, operator, serviceContract) +} + +// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. +// +// Solidity: function middlewareTimesLength(address operator) view returns(uint256) +func (_ContractISlasher *ContractISlasherCaller) MiddlewareTimesLength(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "middlewareTimesLength", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. +// +// Solidity: function middlewareTimesLength(address operator) view returns(uint256) +func (_ContractISlasher *ContractISlasherSession) MiddlewareTimesLength(operator common.Address) (*big.Int, error) { + return _ContractISlasher.Contract.MiddlewareTimesLength(&_ContractISlasher.CallOpts, operator) +} + +// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. +// +// Solidity: function middlewareTimesLength(address operator) view returns(uint256) +func (_ContractISlasher *ContractISlasherCallerSession) MiddlewareTimesLength(operator common.Address) (*big.Int, error) { + return _ContractISlasher.Contract.MiddlewareTimesLength(&_ContractISlasher.CallOpts, operator) +} + +// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. +// +// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) +func (_ContractISlasher *ContractISlasherCaller) OperatorToMiddlewareTimes(opts *bind.CallOpts, operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "operatorToMiddlewareTimes", operator, arrayIndex) + + if err != nil { + return *new(ISlasherMiddlewareTimes), err + } + + out0 := *abi.ConvertType(out[0], new(ISlasherMiddlewareTimes)).(*ISlasherMiddlewareTimes) + + return out0, err + +} + +// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. +// +// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) +func (_ContractISlasher *ContractISlasherSession) OperatorToMiddlewareTimes(operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { + return _ContractISlasher.Contract.OperatorToMiddlewareTimes(&_ContractISlasher.CallOpts, operator, arrayIndex) +} + +// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. +// +// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) +func (_ContractISlasher *ContractISlasherCallerSession) OperatorToMiddlewareTimes(operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { + return _ContractISlasher.Contract.OperatorToMiddlewareTimes(&_ContractISlasher.CallOpts, operator, arrayIndex) +} + +// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. +// +// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) +func (_ContractISlasher *ContractISlasherCaller) OperatorWhitelistedContractsLinkedListEntry(opts *bind.CallOpts, operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "operatorWhitelistedContractsLinkedListEntry", operator, node) + + if err != nil { + return *new(bool), *new(*big.Int), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return out0, out1, out2, err + +} + +// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. +// +// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) +func (_ContractISlasher *ContractISlasherSession) OperatorWhitelistedContractsLinkedListEntry(operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { + return _ContractISlasher.Contract.OperatorWhitelistedContractsLinkedListEntry(&_ContractISlasher.CallOpts, operator, node) +} + +// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. +// +// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) +func (_ContractISlasher *ContractISlasherCallerSession) OperatorWhitelistedContractsLinkedListEntry(operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { + return _ContractISlasher.Contract.OperatorWhitelistedContractsLinkedListEntry(&_ContractISlasher.CallOpts, operator, node) +} + +// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. +// +// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) +func (_ContractISlasher *ContractISlasherCaller) OperatorWhitelistedContractsLinkedListSize(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "operatorWhitelistedContractsLinkedListSize", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. +// +// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) +func (_ContractISlasher *ContractISlasherSession) OperatorWhitelistedContractsLinkedListSize(operator common.Address) (*big.Int, error) { + return _ContractISlasher.Contract.OperatorWhitelistedContractsLinkedListSize(&_ContractISlasher.CallOpts, operator) +} + +// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. +// +// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) +func (_ContractISlasher *ContractISlasherCallerSession) OperatorWhitelistedContractsLinkedListSize(operator common.Address) (*big.Int, error) { + return _ContractISlasher.Contract.OperatorWhitelistedContractsLinkedListSize(&_ContractISlasher.CallOpts, operator) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ContractISlasher *ContractISlasherCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractISlasher.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ContractISlasher *ContractISlasherSession) StrategyManager() (common.Address, error) { + return _ContractISlasher.Contract.StrategyManager(&_ContractISlasher.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ContractISlasher *ContractISlasherCallerSession) StrategyManager() (common.Address, error) { + return _ContractISlasher.Contract.StrategyManager(&_ContractISlasher.CallOpts) +} + +// CanWithdraw is a paid mutator transaction binding the contract method 0x8105e043. +// +// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) returns(bool) +func (_ContractISlasher *ContractISlasherTransactor) CanWithdraw(opts *bind.TransactOpts, operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "canWithdraw", operator, withdrawalStartBlock, middlewareTimesIndex) +} + +// CanWithdraw is a paid mutator transaction binding the contract method 0x8105e043. +// +// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) returns(bool) +func (_ContractISlasher *ContractISlasherSession) CanWithdraw(operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) { + return _ContractISlasher.Contract.CanWithdraw(&_ContractISlasher.TransactOpts, operator, withdrawalStartBlock, middlewareTimesIndex) +} + +// CanWithdraw is a paid mutator transaction binding the contract method 0x8105e043. +// +// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) returns(bool) +func (_ContractISlasher *ContractISlasherTransactorSession) CanWithdraw(operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) { + return _ContractISlasher.Contract.CanWithdraw(&_ContractISlasher.TransactOpts, operator, withdrawalStartBlock, middlewareTimesIndex) +} + +// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// +// Solidity: function freezeOperator(address toBeFrozen) returns() +func (_ContractISlasher *ContractISlasherTransactor) FreezeOperator(opts *bind.TransactOpts, toBeFrozen common.Address) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "freezeOperator", toBeFrozen) +} + +// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// +// Solidity: function freezeOperator(address toBeFrozen) returns() +func (_ContractISlasher *ContractISlasherSession) FreezeOperator(toBeFrozen common.Address) (*types.Transaction, error) { + return _ContractISlasher.Contract.FreezeOperator(&_ContractISlasher.TransactOpts, toBeFrozen) +} + +// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// +// Solidity: function freezeOperator(address toBeFrozen) returns() +func (_ContractISlasher *ContractISlasherTransactorSession) FreezeOperator(toBeFrozen common.Address) (*types.Transaction, error) { + return _ContractISlasher.Contract.FreezeOperator(&_ContractISlasher.TransactOpts, toBeFrozen) +} + +// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. +// +// Solidity: function optIntoSlashing(address contractAddress) returns() +func (_ContractISlasher *ContractISlasherTransactor) OptIntoSlashing(opts *bind.TransactOpts, contractAddress common.Address) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "optIntoSlashing", contractAddress) +} + +// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. +// +// Solidity: function optIntoSlashing(address contractAddress) returns() +func (_ContractISlasher *ContractISlasherSession) OptIntoSlashing(contractAddress common.Address) (*types.Transaction, error) { + return _ContractISlasher.Contract.OptIntoSlashing(&_ContractISlasher.TransactOpts, contractAddress) +} + +// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. +// +// Solidity: function optIntoSlashing(address contractAddress) returns() +func (_ContractISlasher *ContractISlasherTransactorSession) OptIntoSlashing(contractAddress common.Address) (*types.Transaction, error) { + return _ContractISlasher.Contract.OptIntoSlashing(&_ContractISlasher.TransactOpts, contractAddress) +} + +// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// +// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() +func (_ContractISlasher *ContractISlasherTransactor) RecordFirstStakeUpdate(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "recordFirstStakeUpdate", operator, serveUntilBlock) +} + +// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// +// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() +func (_ContractISlasher *ContractISlasherSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ContractISlasher.Contract.RecordFirstStakeUpdate(&_ContractISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// +// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() +func (_ContractISlasher *ContractISlasherTransactorSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ContractISlasher.Contract.RecordFirstStakeUpdate(&_ContractISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. +// +// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() +func (_ContractISlasher *ContractISlasherTransactor) RecordLastStakeUpdateAndRevokeSlashingAbility(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "recordLastStakeUpdateAndRevokeSlashingAbility", operator, serveUntilBlock) +} + +// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. +// +// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() +func (_ContractISlasher *ContractISlasherSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ContractISlasher.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ContractISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. +// +// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() +func (_ContractISlasher *ContractISlasherTransactorSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ContractISlasher.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ContractISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. +// +// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() +func (_ContractISlasher *ContractISlasherTransactor) RecordStakeUpdate(opts *bind.TransactOpts, operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "recordStakeUpdate", operator, updateBlock, serveUntilBlock, insertAfter) +} + +// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. +// +// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() +func (_ContractISlasher *ContractISlasherSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { + return _ContractISlasher.Contract.RecordStakeUpdate(&_ContractISlasher.TransactOpts, operator, updateBlock, serveUntilBlock, insertAfter) +} + +// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. +// +// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() +func (_ContractISlasher *ContractISlasherTransactorSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { + return _ContractISlasher.Contract.RecordStakeUpdate(&_ContractISlasher.TransactOpts, operator, updateBlock, serveUntilBlock, insertAfter) +} + +// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. +// +// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() +func (_ContractISlasher *ContractISlasherTransactor) ResetFrozenStatus(opts *bind.TransactOpts, frozenAddresses []common.Address) (*types.Transaction, error) { + return _ContractISlasher.contract.Transact(opts, "resetFrozenStatus", frozenAddresses) +} + +// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. +// +// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() +func (_ContractISlasher *ContractISlasherSession) ResetFrozenStatus(frozenAddresses []common.Address) (*types.Transaction, error) { + return _ContractISlasher.Contract.ResetFrozenStatus(&_ContractISlasher.TransactOpts, frozenAddresses) +} + +// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. +// +// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() +func (_ContractISlasher *ContractISlasherTransactorSession) ResetFrozenStatus(frozenAddresses []common.Address) (*types.Transaction, error) { + return _ContractISlasher.Contract.ResetFrozenStatus(&_ContractISlasher.TransactOpts, frozenAddresses) +} + +// ContractISlasherFrozenStatusResetIterator is returned from FilterFrozenStatusReset and is used to iterate over the raw logs and unpacked data for FrozenStatusReset events raised by the ContractISlasher contract. +type ContractISlasherFrozenStatusResetIterator struct { + Event *ContractISlasherFrozenStatusReset // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractISlasherFrozenStatusResetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractISlasherFrozenStatusReset) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractISlasherFrozenStatusReset) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractISlasherFrozenStatusResetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractISlasherFrozenStatusResetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractISlasherFrozenStatusReset represents a FrozenStatusReset event raised by the ContractISlasher contract. +type ContractISlasherFrozenStatusReset struct { + PreviouslySlashedAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFrozenStatusReset is a free log retrieval operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. +// +// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) +func (_ContractISlasher *ContractISlasherFilterer) FilterFrozenStatusReset(opts *bind.FilterOpts, previouslySlashedAddress []common.Address) (*ContractISlasherFrozenStatusResetIterator, error) { + + var previouslySlashedAddressRule []interface{} + for _, previouslySlashedAddressItem := range previouslySlashedAddress { + previouslySlashedAddressRule = append(previouslySlashedAddressRule, previouslySlashedAddressItem) + } + + logs, sub, err := _ContractISlasher.contract.FilterLogs(opts, "FrozenStatusReset", previouslySlashedAddressRule) + if err != nil { + return nil, err + } + return &ContractISlasherFrozenStatusResetIterator{contract: _ContractISlasher.contract, event: "FrozenStatusReset", logs: logs, sub: sub}, nil +} + +// WatchFrozenStatusReset is a free log subscription operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. +// +// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) +func (_ContractISlasher *ContractISlasherFilterer) WatchFrozenStatusReset(opts *bind.WatchOpts, sink chan<- *ContractISlasherFrozenStatusReset, previouslySlashedAddress []common.Address) (event.Subscription, error) { + + var previouslySlashedAddressRule []interface{} + for _, previouslySlashedAddressItem := range previouslySlashedAddress { + previouslySlashedAddressRule = append(previouslySlashedAddressRule, previouslySlashedAddressItem) + } + + logs, sub, err := _ContractISlasher.contract.WatchLogs(opts, "FrozenStatusReset", previouslySlashedAddressRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractISlasherFrozenStatusReset) + if err := _ContractISlasher.contract.UnpackLog(event, "FrozenStatusReset", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseFrozenStatusReset is a log parse operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. +// +// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) +func (_ContractISlasher *ContractISlasherFilterer) ParseFrozenStatusReset(log types.Log) (*ContractISlasherFrozenStatusReset, error) { + event := new(ContractISlasherFrozenStatusReset) + if err := _ContractISlasher.contract.UnpackLog(event, "FrozenStatusReset", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractISlasherMiddlewareTimesAddedIterator is returned from FilterMiddlewareTimesAdded and is used to iterate over the raw logs and unpacked data for MiddlewareTimesAdded events raised by the ContractISlasher contract. +type ContractISlasherMiddlewareTimesAddedIterator struct { + Event *ContractISlasherMiddlewareTimesAdded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractISlasherMiddlewareTimesAddedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractISlasherMiddlewareTimesAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractISlasherMiddlewareTimesAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractISlasherMiddlewareTimesAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractISlasherMiddlewareTimesAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractISlasherMiddlewareTimesAdded represents a MiddlewareTimesAdded event raised by the ContractISlasher contract. +type ContractISlasherMiddlewareTimesAdded struct { + Operator common.Address + Index *big.Int + StalestUpdateBlock uint32 + LatestServeUntilBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMiddlewareTimesAdded is a free log retrieval operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. +// +// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) +func (_ContractISlasher *ContractISlasherFilterer) FilterMiddlewareTimesAdded(opts *bind.FilterOpts) (*ContractISlasherMiddlewareTimesAddedIterator, error) { + + logs, sub, err := _ContractISlasher.contract.FilterLogs(opts, "MiddlewareTimesAdded") + if err != nil { + return nil, err + } + return &ContractISlasherMiddlewareTimesAddedIterator{contract: _ContractISlasher.contract, event: "MiddlewareTimesAdded", logs: logs, sub: sub}, nil +} + +// WatchMiddlewareTimesAdded is a free log subscription operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. +// +// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) +func (_ContractISlasher *ContractISlasherFilterer) WatchMiddlewareTimesAdded(opts *bind.WatchOpts, sink chan<- *ContractISlasherMiddlewareTimesAdded) (event.Subscription, error) { + + logs, sub, err := _ContractISlasher.contract.WatchLogs(opts, "MiddlewareTimesAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractISlasherMiddlewareTimesAdded) + if err := _ContractISlasher.contract.UnpackLog(event, "MiddlewareTimesAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMiddlewareTimesAdded is a log parse operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. +// +// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) +func (_ContractISlasher *ContractISlasherFilterer) ParseMiddlewareTimesAdded(log types.Log) (*ContractISlasherMiddlewareTimesAdded, error) { + event := new(ContractISlasherMiddlewareTimesAdded) + if err := _ContractISlasher.contract.UnpackLog(event, "MiddlewareTimesAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractISlasherOperatorFrozenIterator is returned from FilterOperatorFrozen and is used to iterate over the raw logs and unpacked data for OperatorFrozen events raised by the ContractISlasher contract. +type ContractISlasherOperatorFrozenIterator struct { + Event *ContractISlasherOperatorFrozen // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractISlasherOperatorFrozenIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractISlasherOperatorFrozen) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractISlasherOperatorFrozen) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractISlasherOperatorFrozenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractISlasherOperatorFrozenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractISlasherOperatorFrozen represents a OperatorFrozen event raised by the ContractISlasher contract. +type ContractISlasherOperatorFrozen struct { + SlashedOperator common.Address + SlashingContract common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorFrozen is a free log retrieval operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. +// +// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) +func (_ContractISlasher *ContractISlasherFilterer) FilterOperatorFrozen(opts *bind.FilterOpts, slashedOperator []common.Address, slashingContract []common.Address) (*ContractISlasherOperatorFrozenIterator, error) { + + var slashedOperatorRule []interface{} + for _, slashedOperatorItem := range slashedOperator { + slashedOperatorRule = append(slashedOperatorRule, slashedOperatorItem) + } + var slashingContractRule []interface{} + for _, slashingContractItem := range slashingContract { + slashingContractRule = append(slashingContractRule, slashingContractItem) + } + + logs, sub, err := _ContractISlasher.contract.FilterLogs(opts, "OperatorFrozen", slashedOperatorRule, slashingContractRule) + if err != nil { + return nil, err + } + return &ContractISlasherOperatorFrozenIterator{contract: _ContractISlasher.contract, event: "OperatorFrozen", logs: logs, sub: sub}, nil +} + +// WatchOperatorFrozen is a free log subscription operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. +// +// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) +func (_ContractISlasher *ContractISlasherFilterer) WatchOperatorFrozen(opts *bind.WatchOpts, sink chan<- *ContractISlasherOperatorFrozen, slashedOperator []common.Address, slashingContract []common.Address) (event.Subscription, error) { + + var slashedOperatorRule []interface{} + for _, slashedOperatorItem := range slashedOperator { + slashedOperatorRule = append(slashedOperatorRule, slashedOperatorItem) + } + var slashingContractRule []interface{} + for _, slashingContractItem := range slashingContract { + slashingContractRule = append(slashingContractRule, slashingContractItem) + } + + logs, sub, err := _ContractISlasher.contract.WatchLogs(opts, "OperatorFrozen", slashedOperatorRule, slashingContractRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractISlasherOperatorFrozen) + if err := _ContractISlasher.contract.UnpackLog(event, "OperatorFrozen", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorFrozen is a log parse operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. +// +// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) +func (_ContractISlasher *ContractISlasherFilterer) ParseOperatorFrozen(log types.Log) (*ContractISlasherOperatorFrozen, error) { + event := new(ContractISlasherOperatorFrozen) + if err := _ContractISlasher.contract.UnpackLog(event, "OperatorFrozen", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractISlasherOptedIntoSlashingIterator is returned from FilterOptedIntoSlashing and is used to iterate over the raw logs and unpacked data for OptedIntoSlashing events raised by the ContractISlasher contract. +type ContractISlasherOptedIntoSlashingIterator struct { + Event *ContractISlasherOptedIntoSlashing // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractISlasherOptedIntoSlashingIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractISlasherOptedIntoSlashing) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractISlasherOptedIntoSlashing) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractISlasherOptedIntoSlashingIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractISlasherOptedIntoSlashingIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractISlasherOptedIntoSlashing represents a OptedIntoSlashing event raised by the ContractISlasher contract. +type ContractISlasherOptedIntoSlashing struct { + Operator common.Address + ContractAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOptedIntoSlashing is a free log retrieval operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. +// +// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) +func (_ContractISlasher *ContractISlasherFilterer) FilterOptedIntoSlashing(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractISlasherOptedIntoSlashingIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ContractISlasher.contract.FilterLogs(opts, "OptedIntoSlashing", operatorRule, contractAddressRule) + if err != nil { + return nil, err + } + return &ContractISlasherOptedIntoSlashingIterator{contract: _ContractISlasher.contract, event: "OptedIntoSlashing", logs: logs, sub: sub}, nil +} + +// WatchOptedIntoSlashing is a free log subscription operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. +// +// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) +func (_ContractISlasher *ContractISlasherFilterer) WatchOptedIntoSlashing(opts *bind.WatchOpts, sink chan<- *ContractISlasherOptedIntoSlashing, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ContractISlasher.contract.WatchLogs(opts, "OptedIntoSlashing", operatorRule, contractAddressRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractISlasherOptedIntoSlashing) + if err := _ContractISlasher.contract.UnpackLog(event, "OptedIntoSlashing", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOptedIntoSlashing is a log parse operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. +// +// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) +func (_ContractISlasher *ContractISlasherFilterer) ParseOptedIntoSlashing(log types.Log) (*ContractISlasherOptedIntoSlashing, error) { + event := new(ContractISlasherOptedIntoSlashing) + if err := _ContractISlasher.contract.UnpackLog(event, "OptedIntoSlashing", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractISlasherSlashingAbilityRevokedIterator is returned from FilterSlashingAbilityRevoked and is used to iterate over the raw logs and unpacked data for SlashingAbilityRevoked events raised by the ContractISlasher contract. +type ContractISlasherSlashingAbilityRevokedIterator struct { + Event *ContractISlasherSlashingAbilityRevoked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractISlasherSlashingAbilityRevokedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractISlasherSlashingAbilityRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractISlasherSlashingAbilityRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractISlasherSlashingAbilityRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractISlasherSlashingAbilityRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractISlasherSlashingAbilityRevoked represents a SlashingAbilityRevoked event raised by the ContractISlasher contract. +type ContractISlasherSlashingAbilityRevoked struct { + Operator common.Address + ContractAddress common.Address + ContractCanSlashOperatorUntilBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlashingAbilityRevoked is a free log retrieval operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. +// +// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) +func (_ContractISlasher *ContractISlasherFilterer) FilterSlashingAbilityRevoked(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractISlasherSlashingAbilityRevokedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ContractISlasher.contract.FilterLogs(opts, "SlashingAbilityRevoked", operatorRule, contractAddressRule) + if err != nil { + return nil, err + } + return &ContractISlasherSlashingAbilityRevokedIterator{contract: _ContractISlasher.contract, event: "SlashingAbilityRevoked", logs: logs, sub: sub}, nil +} + +// WatchSlashingAbilityRevoked is a free log subscription operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. +// +// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) +func (_ContractISlasher *ContractISlasherFilterer) WatchSlashingAbilityRevoked(opts *bind.WatchOpts, sink chan<- *ContractISlasherSlashingAbilityRevoked, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ContractISlasher.contract.WatchLogs(opts, "SlashingAbilityRevoked", operatorRule, contractAddressRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractISlasherSlashingAbilityRevoked) + if err := _ContractISlasher.contract.UnpackLog(event, "SlashingAbilityRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSlashingAbilityRevoked is a log parse operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. +// +// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) +func (_ContractISlasher *ContractISlasherFilterer) ParseSlashingAbilityRevoked(log types.Log) (*ContractISlasherSlashingAbilityRevoked, error) { + event := new(ContractISlasherSlashingAbilityRevoked) + if err := _ContractISlasher.contract.UnpackLog(event, "SlashingAbilityRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/OperatorStateRetriever/binding.go b/contracts/bindings/OperatorStateRetriever/binding.go new file mode 100644 index 00000000..b07a5d4e --- /dev/null +++ b/contracts/bindings/OperatorStateRetriever/binding.go @@ -0,0 +1,348 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractOperatorStateRetriever + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// OperatorStateRetrieverCheckSignaturesIndices is an auto generated low-level Go binding around an user-defined struct. +type OperatorStateRetrieverCheckSignaturesIndices struct { + NonSignerQuorumBitmapIndices []uint32 + QuorumApkIndices []uint32 + TotalStakeIndices []uint32 + NonSignerStakeIndices [][]uint32 +} + +// OperatorStateRetrieverOperator is an auto generated low-level Go binding around an user-defined struct. +type OperatorStateRetrieverOperator struct { + Operator common.Address + OperatorId [32]byte + Stake *big.Int +} + +// ContractOperatorStateRetrieverMetaData contains all meta data concerning the ContractOperatorStateRetriever contract. +var ContractOperatorStateRetrieverMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getCheckSignaturesIndices\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"nonSignerOperatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorStateRetriever.CheckSignaturesIndices\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorState\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[][]\",\"internalType\":\"structOperatorStateRetriever.Operator[][]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorState\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple[][]\",\"internalType\":\"structOperatorStateRetriever.Operator[][]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"}]", + Bin: "0x608060405234801561001057600080fd5b50611600806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610e3f565b6100b0565b6040516100669190610f9e565b60405180910390f35b61008261007d366004611004565b610548565b6040516100669190611108565b6100a261009d3660046111c3565b610bcf565b604051610066929190611205565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101169190611226565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c9190611226565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e29190611226565b90506000865167ffffffffffffffff81111561020057610200610dd6565b60405190808252806020026020018201604052801561023357816020015b606081526020019060019003908161021e5790505b50905060005b875181101561053c57600088828151811061025657610256611243565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa1580156102b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102df919081019061127d565b9050805167ffffffffffffffff8111156102fb576102fb610dd6565b60405190808252806020026020018201604052801561034657816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816103195790505b5084848151811061035957610359611243565b602002602001018190525060005b8151811015610526576040518060600160405280876001600160a01b03166347b314e885858151811061039c5761039c611243565b60200260200101516040518263ffffffff1660e01b81526004016103c291815260200190565b602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104039190611226565b6001600160a01b0316815260200183838151811061042357610423611243565b60200260200101518152602001896001600160a01b031663fa28c62785858151811061045157610451611243565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190611313565b6001600160601b03168152508585815181106104ef576104ef611243565b6020026020010151828151811061050857610508611243565b6020026020010181905250808061051e90611352565b915050610367565b505050808061053490611352565b915050610239565b50979650505050505050565b6105736040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190611226565b90506106046040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e90610634908b908990899060040161136d565b600060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261067991908101906113b7565b81526040516340e03a8160e11b81526001600160a01b038316906381c07502906106ab908b908b908b9060040161146f565b600060405180830381865afa1580156106c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f091908101906113b7565b60408201528567ffffffffffffffff81111561070e5761070e610dd6565b60405190808252806020026020018201604052801561074157816020015b606081526020019060019003908161072c5790505b50606082015260005b60ff8116871115610ae05760008567ffffffffffffffff81111561077057610770610dd6565b604051908082528060200260200182016040528015610799578160200160208202803683370190505b5083606001518360ff16815181106107b3576107b3611243565b602002602001018190525060005b868110156109df5760008c6001600160a01b03166304ec63518a8a858181106107ec576107ec611243565b905060200201358e8860000151868151811061080a5761080a611243565b60200260200101516040518463ffffffff1660e01b81526004016108479392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108889190611498565b90508a8a8560ff1681811061089f5761089f611243565b6001600160c01b03841692013560f81c9190911c6001908116141590506109cc57856001600160a01b031663dd9846b98a8a858181106108e1576108e1611243565b905060200201358d8d8860ff168181106108fd576108fd611243565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097791906114c1565b85606001518560ff168151811061099057610990611243565b602002602001015184815181106109a9576109a9611243565b63ffffffff90921660209283029190910190910152826109c881611352565b9350505b50806109d781611352565b9150506107c1565b5060008167ffffffffffffffff8111156109fb576109fb610dd6565b604051908082528060200260200182016040528015610a24578160200160208202803683370190505b50905060005b82811015610aa55784606001518460ff1681518110610a4b57610a4b611243565b60200260200101518181518110610a6457610a64611243565b6020026020010151828281518110610a7e57610a7e611243565b63ffffffff9092166020928302919091019091015280610a9d81611352565b915050610a2a565b508084606001518460ff1681518110610ac057610ac0611243565b602002602001018190525050508080610ad8906114de565b91505061074a565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b459190611226565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610b78908b908b908e906004016114fe565b600060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bbd91908101906113b7565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610c0a57610c0a611243565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e90610c469088908690600401611528565b600060405180830381865afa158015610c63573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8b91908101906113b7565b600081518110610c9d57610c9d611243565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190611498565b6001600160c01b031690506000610d4382610d61565b905081610d518a838a6100b0565b9550955050505050935093915050565b60606000805b610100811015610db7576001811b915083821615610da757828160f81b604051602001610d9592919061157c565b60405160208183030381529060405292505b610db081611352565b9050610d67565b5050919050565b6001600160a01b0381168114610dd357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e1557610e15610dd6565b604052919050565b63ffffffff81168114610dd357600080fd5b8035610e3a81610e1d565b919050565b600080600060608486031215610e5457600080fd5b8335610e5f81610dbe565b925060208481013567ffffffffffffffff80821115610e7d57600080fd5b818701915087601f830112610e9157600080fd5b813581811115610ea357610ea3610dd6565b610eb5601f8201601f19168501610dec565b91508082528884828501011115610ecb57600080fd5b8084840185840137600084828401015250809450505050610eee60408501610e2f565b90509250925092565b600082825180855260208086019550808260051b8401018186016000805b85811015610f9057868403601f19018a52825180518086529086019086860190845b81811015610f7b57835180516001600160a01b03168452898101518a8501526040908101516001600160601b03169084015292880192606090920191600101610f37565b50509a86019a94505091840191600101610f15565b509198975050505050505050565b602081526000610fb16020830184610ef7565b9392505050565b60008083601f840112610fca57600080fd5b50813567ffffffffffffffff811115610fe257600080fd5b6020830191508360208260051b8501011115610ffd57600080fd5b9250929050565b6000806000806000806080878903121561101d57600080fd5b863561102881610dbe565b9550602087013561103881610e1d565b9450604087013567ffffffffffffffff8082111561105557600080fd5b818901915089601f83011261106957600080fd5b81358181111561107857600080fd5b8a602082850101111561108a57600080fd5b6020830196508095505060608901359150808211156110a857600080fd5b506110b589828a01610fb8565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b838110156110fd57815163ffffffff16875295820195908201906001016110db565b509495945050505050565b60006020808352835160808285015261112460a08501826110c7565b905081850151601f198086840301604087015261114183836110c7565b9250604087015191508086840301606087015261115e83836110c7565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b828110156111b557848783030184526111a38287516110c7565b95880195938801939150600101611189565b509998505050505050505050565b6000806000606084860312156111d857600080fd5b83356111e381610dbe565b92506020840135915060408401356111fa81610e1d565b809150509250925092565b82815260406020820152600061121e6040830184610ef7565b949350505050565b60006020828403121561123857600080fd5b8151610fb181610dbe565b634e487b7160e01b600052603260045260246000fd5b600067ffffffffffffffff82111561127357611273610dd6565b5060051b60200190565b6000602080838503121561129057600080fd5b825167ffffffffffffffff8111156112a757600080fd5b8301601f810185136112b857600080fd5b80516112cb6112c682611259565b610dec565b81815260059190911b820183019083810190878311156112ea57600080fd5b928401925b82841015611308578351825292840192908401906112ef565b979650505050505050565b60006020828403121561132557600080fd5b81516001600160601b0381168114610fb157600080fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113665761136661133c565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561139a57600080fd5b8260051b8085606085013760009201606001918252509392505050565b600060208083850312156113ca57600080fd5b825167ffffffffffffffff8111156113e157600080fd5b8301601f810185136113f257600080fd5b80516114006112c682611259565b81815260059190911b8201830190838101908783111561141f57600080fd5b928401925b8284101561130857835161143781610e1d565b82529284019290840190611424565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061148f604083018486611446565b95945050505050565b6000602082840312156114aa57600080fd5b81516001600160c01b0381168114610fb157600080fd5b6000602082840312156114d357600080fd5b8151610fb181610e1d565b600060ff821660ff8114156114f5576114f561133c565b60010192915050565b604081526000611512604083018587611446565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b8181101561156f57845183529383019391830191600101611553565b5090979650505050505050565b6000835160005b8181101561159d5760208187018101518583015201611583565b818111156115ac576000828501525b506001600160f81b031993909316919092019081526001019291505056fea26469706673582212204de1f2dba2a4f9b1a10d17d1b2f6c44537507c445516dbc36388edc0270b22ee64736f6c634300080c0033", +} + +// ContractOperatorStateRetrieverABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractOperatorStateRetrieverMetaData.ABI instead. +var ContractOperatorStateRetrieverABI = ContractOperatorStateRetrieverMetaData.ABI + +// ContractOperatorStateRetrieverBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractOperatorStateRetrieverMetaData.Bin instead. +var ContractOperatorStateRetrieverBin = ContractOperatorStateRetrieverMetaData.Bin + +// DeployContractOperatorStateRetriever deploys a new Ethereum contract, binding an instance of ContractOperatorStateRetriever to it. +func DeployContractOperatorStateRetriever(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ContractOperatorStateRetriever, error) { + parsed, err := ContractOperatorStateRetrieverMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractOperatorStateRetrieverBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractOperatorStateRetriever{ContractOperatorStateRetrieverCaller: ContractOperatorStateRetrieverCaller{contract: contract}, ContractOperatorStateRetrieverTransactor: ContractOperatorStateRetrieverTransactor{contract: contract}, ContractOperatorStateRetrieverFilterer: ContractOperatorStateRetrieverFilterer{contract: contract}}, nil +} + +// ContractOperatorStateRetrieverMethods is an auto generated interface around an Ethereum contract. +type ContractOperatorStateRetrieverMethods interface { + ContractOperatorStateRetrieverCalls + ContractOperatorStateRetrieverTransacts + ContractOperatorStateRetrieverFilters +} + +// ContractOperatorStateRetrieverCalls is an auto generated interface that defines the call methods available for an Ethereum contract. +type ContractOperatorStateRetrieverCalls interface { + GetCheckSignaturesIndices(opts *bind.CallOpts, registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) + + GetOperatorState(opts *bind.CallOpts, registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) + + GetOperatorState0(opts *bind.CallOpts, registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) +} + +// ContractOperatorStateRetrieverTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. +type ContractOperatorStateRetrieverTransacts interface { +} + +// ContractOperatorStateRetrieverFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. +type ContractOperatorStateRetrieverFilters interface { +} + +// ContractOperatorStateRetriever is an auto generated Go binding around an Ethereum contract. +type ContractOperatorStateRetriever struct { + ContractOperatorStateRetrieverCaller // Read-only binding to the contract + ContractOperatorStateRetrieverTransactor // Write-only binding to the contract + ContractOperatorStateRetrieverFilterer // Log filterer for contract events +} + +// ContractOperatorStateRetriever implements the ContractOperatorStateRetrieverMethods interface. +var _ ContractOperatorStateRetrieverMethods = (*ContractOperatorStateRetriever)(nil) + +// ContractOperatorStateRetrieverCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractOperatorStateRetrieverCaller implements the ContractOperatorStateRetrieverCalls interface. +var _ ContractOperatorStateRetrieverCalls = (*ContractOperatorStateRetrieverCaller)(nil) + +// ContractOperatorStateRetrieverTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractOperatorStateRetrieverTransactor implements the ContractOperatorStateRetrieverTransacts interface. +var _ ContractOperatorStateRetrieverTransacts = (*ContractOperatorStateRetrieverTransactor)(nil) + +// ContractOperatorStateRetrieverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractOperatorStateRetrieverFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractOperatorStateRetrieverFilterer implements the ContractOperatorStateRetrieverFilters interface. +var _ ContractOperatorStateRetrieverFilters = (*ContractOperatorStateRetrieverFilterer)(nil) + +// ContractOperatorStateRetrieverSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractOperatorStateRetrieverSession struct { + Contract *ContractOperatorStateRetriever // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractOperatorStateRetrieverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractOperatorStateRetrieverCallerSession struct { + Contract *ContractOperatorStateRetrieverCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractOperatorStateRetrieverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractOperatorStateRetrieverTransactorSession struct { + Contract *ContractOperatorStateRetrieverTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractOperatorStateRetrieverRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverRaw struct { + Contract *ContractOperatorStateRetriever // Generic contract binding to access the raw methods on +} + +// ContractOperatorStateRetrieverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverCallerRaw struct { + Contract *ContractOperatorStateRetrieverCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractOperatorStateRetrieverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverTransactorRaw struct { + Contract *ContractOperatorStateRetrieverTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractOperatorStateRetriever creates a new instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetriever(address common.Address, backend bind.ContractBackend) (*ContractOperatorStateRetriever, error) { + contract, err := bindContractOperatorStateRetriever(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetriever{ContractOperatorStateRetrieverCaller: ContractOperatorStateRetrieverCaller{contract: contract}, ContractOperatorStateRetrieverTransactor: ContractOperatorStateRetrieverTransactor{contract: contract}, ContractOperatorStateRetrieverFilterer: ContractOperatorStateRetrieverFilterer{contract: contract}}, nil +} + +// NewContractOperatorStateRetrieverCaller creates a new read-only instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetrieverCaller(address common.Address, caller bind.ContractCaller) (*ContractOperatorStateRetrieverCaller, error) { + contract, err := bindContractOperatorStateRetriever(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetrieverCaller{contract: contract}, nil +} + +// NewContractOperatorStateRetrieverTransactor creates a new write-only instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetrieverTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractOperatorStateRetrieverTransactor, error) { + contract, err := bindContractOperatorStateRetriever(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetrieverTransactor{contract: contract}, nil +} + +// NewContractOperatorStateRetrieverFilterer creates a new log filterer instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetrieverFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractOperatorStateRetrieverFilterer, error) { + contract, err := bindContractOperatorStateRetriever(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetrieverFilterer{contract: contract}, nil +} + +// bindContractOperatorStateRetriever binds a generic wrapper to an already deployed contract. +func bindContractOperatorStateRetriever(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractOperatorStateRetrieverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractOperatorStateRetriever.Contract.ContractOperatorStateRetrieverCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.ContractOperatorStateRetrieverTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.ContractOperatorStateRetrieverTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractOperatorStateRetriever.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.contract.Transact(opts, method, params...) +} + +// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. +// +// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCaller) GetCheckSignaturesIndices(opts *bind.CallOpts, registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) { + var out []interface{} + err := _ContractOperatorStateRetriever.contract.Call(opts, &out, "getCheckSignaturesIndices", registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) + + if err != nil { + return *new(OperatorStateRetrieverCheckSignaturesIndices), err + } + + out0 := *abi.ConvertType(out[0], new(OperatorStateRetrieverCheckSignaturesIndices)).(*OperatorStateRetrieverCheckSignaturesIndices) + + return out0, err + +} + +// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. +// +// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverSession) GetCheckSignaturesIndices(registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) { + return _ContractOperatorStateRetriever.Contract.GetCheckSignaturesIndices(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) +} + +// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. +// +// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerSession) GetCheckSignaturesIndices(registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) { + return _ContractOperatorStateRetriever.Contract.GetCheckSignaturesIndices(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) +} + +// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCaller) GetOperatorState(opts *bind.CallOpts, registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) { + var out []interface{} + err := _ContractOperatorStateRetriever.contract.Call(opts, &out, "getOperatorState", registryCoordinator, quorumNumbers, blockNumber) + + if err != nil { + return *new([][]OperatorStateRetrieverOperator), err + } + + out0 := *abi.ConvertType(out[0], new([][]OperatorStateRetrieverOperator)).(*[][]OperatorStateRetrieverOperator) + + return out0, err + +} + +// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverSession) GetOperatorState(registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, quorumNumbers, blockNumber) +} + +// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerSession) GetOperatorState(registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, quorumNumbers, blockNumber) +} + +// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCaller) GetOperatorState0(opts *bind.CallOpts, registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) { + var out []interface{} + err := _ContractOperatorStateRetriever.contract.Call(opts, &out, "getOperatorState0", registryCoordinator, operatorId, blockNumber) + + if err != nil { + return *new(*big.Int), *new([][]OperatorStateRetrieverOperator), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new([][]OperatorStateRetrieverOperator)).(*[][]OperatorStateRetrieverOperator) + + return out0, out1, err + +} + +// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverSession) GetOperatorState0(registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState0(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, operatorId, blockNumber) +} + +// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerSession) GetOperatorState0(registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState0(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, operatorId, blockNumber) +} diff --git a/contracts/bindings/RegistryCoordinator/binding.go b/contracts/bindings/RegistryCoordinator/binding.go new file mode 100644 index 00000000..05952d04 --- /dev/null +++ b/contracts/bindings/RegistryCoordinator/binding.go @@ -0,0 +1,3431 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractRegistryCoordinator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// IBLSApkRegistryPubkeyRegistrationParams is an auto generated low-level Go binding around an user-defined struct. +type IBLSApkRegistryPubkeyRegistrationParams struct { + PubkeyRegistrationSignature BN254G1Point + PubkeyG1 BN254G1Point + PubkeyG2 BN254G2Point +} + +// IRegistryCoordinatorOperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorOperatorInfo struct { + OperatorId [32]byte + Status uint8 +} + +// IRegistryCoordinatorOperatorKickParam is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorOperatorKickParam struct { + QuorumNumber uint8 + Operator common.Address +} + +// IRegistryCoordinatorOperatorSetParam is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorOperatorSetParam struct { + MaxOperatorCount uint32 + KickBIPsOfOperatorStake uint16 + KickBIPsOfTotalStake uint16 +} + +// IRegistryCoordinatorQuorumBitmapUpdate is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorQuorumBitmapUpdate struct { + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 + QuorumBitmap *big.Int +} + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// IStakeRegistryStrategyParams is an auto generated low-level Go binding around an user-defined struct. +type IStakeRegistryStrategyParams struct { + Strategy common.Address + Multiplier *big.Int +} + +// ContractRegistryCoordinatorMetaData contains all meta data concerning the ContractRegistryCoordinator contract. +var ContractRegistryCoordinatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_serviceManager\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"},{\"name\":\"_stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"_blsApkRegistry\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"},{\"name\":\"_indexRegistry\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBKEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorChurnApprovalDigestHash\",\"inputs\":[{\"name\":\"registeringOperatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"churnApprover\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createQuorum\",\"inputs\":[{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejectOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentQuorumBitmap\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorInfo\",\"components\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromId\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorId\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorStatus\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapAtBlockNumberByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapHistoryLength\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapUpdateByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.QuorumBitmapUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBitmap\",\"type\":\"uint192\",\"internalType\":\"uint192\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"indexRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_operatorSetParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam[]\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"_minimumStakes\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[][]\",\"internalType\":\"structIStakeRegistry.StrategyParams[][]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isChurnApproverSaltUsed\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numRegistries\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumUpdateBlockNumber\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperatorWithChurn\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"churnApproverSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registries\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"serviceManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setChurnApprover\",\"inputs\":[{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEjector\",\"inputs\":[{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperators\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorsForQuorum\",\"inputs\":[{\"name\":\"operatorsPerQuorum\",\"type\":\"address[][]\",\"internalType\":\"address[][]\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSocket\",\"inputs\":[{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChurnApproverUpdated\",\"inputs\":[{\"name\":\"prevChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EjectorUpdated\",\"inputs\":[{\"name\":\"prevEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetParamsUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSocketUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"socket\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumBlockNumberUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"blocknumber\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101c06040523480156200001257600080fd5b506040516200628c3803806200628c833981016040819052620000359162000254565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f720000000000000000000060208083019182528351808501909452600684526576302e302e3160d01b908401528151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a05287938793879387939192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620001358184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b039384166101405291831661018052821661016052166101a0526200016f62000179565b50505050620002bc565b600054610100900460ff1615620001e65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000239576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200025157600080fd5b50565b600080600080608085870312156200026b57600080fd5b845162000278816200023b565b60208601519094506200028b816200023b565b60408601519093506200029e816200023b565b6060860151909250620002b1816200023b565b939692955090935050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615ec8620003c4600039600081816106240152818161118c0152818161204901528181612dec015281816136730152613c4b01526000818161057c01528181611fd40152818161245401528181612d6c015281816135ca015281816138200152613bca01526000818161054201528181610eae0152818161201201528181612cee01528181612ed401528181612f4a0152818161354a0152613cc701526000818161048601528181612c44015261349201526000613ea301526000613ef201526000613ecd01526000613e2601526000613e5001526000613e7a0152615ec86000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c80635df4594611610167578063a50857bf116100ce578063dd8283f311610087578063dd8283f3146106f5578063e65797ad14610708578063f2fde38b146107ab578063f8581191146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b8063a50857bf1461066d578063c391425e14610680578063ca0de882146106a0578063ca4f2d97146106c7578063d72d8dd6146106da578063d75b4c88146106e257600080fd5b8063886f119511610120578063886f1195146105cc5780638da5cb5b146105e55780639aa1653d146105ed5780639b5d177b1461060c5780639e9923c21461061f5780639feab8591461064657600080fd5b80635df459461461053d5780636347c9001461056457806368304835146105775780636e3b17db1461059e578063715018a6146105b1578063871ef049146105b957600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104c85780635865c60c146104db578063595c6a67146104fb5780635ac86ab7146105035780635b0b829f146105225780635c975abb1461053557600080fd5b806328f61b3114610435578063296bb0641461044857806329d1e0c31461045b5780632cdd1e861461046e5780633998fdd3146104815780633c2a7f4c146104a857600080fd5b806310d67a2f1161025d57806310d67a2f1461034a57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c421461041557600080fd5b8062cf2ab51461029957806303fd3492146102ae57806304ec6351146102e1578063054310e61461030c5780630cf4b76714610337575b600080fd5b6102ac6102a73660046149a3565b610820565b005b6102ce6102bc3660046149e4565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102f46102ef366004614a0f565b610936565b6040516001600160c01b0390911681526020016102d8565b609d5461031f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d8565b6102ac610345366004614b2e565b610b2c565b6102ac610358366004614ba3565b610c14565b6102ce61036b366004614ba3565b6001600160a01b031660009081526099602052604090205490565b6102ac6103943660046149e4565b610cc7565b6103bc6103a73660046149e4565b609a6020526000908152604090205460ff1681565b60405190151581526020016102d8565b6103df6103da366004614bc0565b610e04565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102d8565b6102ce610423366004614bf3565b609b6020526000908152604090205481565b609e5461031f906001600160a01b031681565b61031f6104563660046149e4565b610e95565b6102ac610469366004614ba3565b610f21565b6102ac61047c366004614ba3565b610f32565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6104bb6104b6366004614ba3565b610f43565b6040516102d89190614c0e565b6102ac6104d6366004614c66565b610fc2565b6104ee6104e9366004614ba3565b61154c565b6040516102d89190614d09565b6102ac6115c0565b6103bc610511366004614bf3565b6001805460ff9092161b9081161490565b6102ac610530366004614d8e565b61168c565b6001546102ce565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b61031f6105723660046149e4565b611723565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ac6105ac366004614dc2565b61174d565b6102ac61180d565b6102f46105c73660046149e4565b611821565b60005461031f906201000090046001600160a01b031681565b61031f61182c565b6096546105fa9060ff1681565b60405160ff90911681526020016102d8565b6102ac61061a366004614ee2565b611845565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ce7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102ac61067b366004614fdb565b611b7c565b61069361068e3660046150a6565b611d00565b6040516102d89190615150565b6102ce7ff843b3116d574f43e69f8dda5d93ebf11dccc4a465983f9453058005cd6b34a081565b6102ac6106d536600461519a565b611db9565b609c546102ce565b6102ac6106f0366004615280565b611e20565b6102ac610703366004615433565b611e33565b610777610716366004614bf3565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff9081169183019190915292820151909216908201526060016102d8565b6102ac6107b9366004614ba3565b612137565b6102ce6107cc366004615547565b6121ad565b6102ac6107df3660046149e4565b6121f4565b6108136107f2366004614ba3565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102d891906155fc565b600154600290600490811614156108525760405162461bcd60e51b81526004016108499061560a565b60405180910390fd5b60005b8281101561093057600084848381811061087157610871615641565b90506020020160208101906108869190614ba3565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156108d1576108d1614cd1565b60028111156108e2576108e2614cd1565b905250805190915060006108f582612350565b9050600061090b826001600160c01b03166123b9565b9050610918858583612416565b505050505080806109289061566d565b915050610855565b50505050565b600083815260986020526040812080548291908490811061095957610959615641565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610a535760405162461bcd60e51b815260206004820152606560248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c401610849565b602081015163ffffffff161580610a795750806020015163ffffffff168463ffffffff16105b610b205760405162461bcd60e51b815260206004820152606660248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c401610849565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610b5557610b55614cd1565b14610bc85760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f742072656769737465726564000000006064820152608401610849565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c099084906156e0565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b91906156f3565b6001600160a01b0316336001600160a01b031614610cbb5760405162461bcd60e51b815260040161084990615710565b610cc481612503565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d38919061575a565b610d545760405162461bcd60e51b81526004016108499061577c565b60015481811614610dcd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c09565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e4157610e41615641565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f91906156f3565b610f29612608565b610cc481612667565b610f3a612608565b610cc4816126d0565b6040805180820190915260008082526020820152610e8f610fbd7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610fa29291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612739565b612787565b60015460029060049081161415610feb5760405162461bcd60e51b81526004016108499061560a565b600061103384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506128179050565b905061103e816128d0565b6110ae5760405162461bcd60e51b81526020600482015260476024820152600080516020615e1383398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a401610849565b84831461111d5760405162461bcd60e51b81526020600482015260436024820152600080516020615e1383398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610849565b60005b8381101561154357600085858381811061113c5761113c615641565b919091013560f81c9150369050600089898581811061115d5761115d615641565b905060200281019061116f91906157c4565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f341092290602401602060405180830381865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff919061580d565b63ffffffff16811461129b5760405162461bcd60e51b81526020600482015260656024820152600080516020615e1383398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c401610849565b6000805b828110156114e25760008484838181106112bb576112bb615641565b90506020020160208101906112d09190614ba3565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561131b5761131b614cd1565b600281111561132c5761132c614cd1565b9052508051909150600061133f82612350565b905060016001600160c01b03821660ff8b161c8116146113c35760405162461bcd60e51b815260206004820152604460248201819052600080516020615e13833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a401610849565b856001600160a01b0316846001600160a01b03161161146e5760405162461bcd60e51b81526020600482015260676024820152600080516020615e1383398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c401610849565b506114cc83838f8f8d908e6001611485919061582a565b9261149293929190615842565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061241692505050565b509092506114db90508161566d565b905061129f565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061153c9061566d565b9050611120565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff1660028111156115a6576115a6614cd1565b60028111156115b7576115b7614cd1565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611631919061575a565b61164d5760405162461bcd60e51b81526004016108499061577c565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611694612608565b609654829060ff908116908216106117145760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d45786973747360448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610849565b61171e8383612903565b505050565b609c818154811061173357600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f720000000000006064820152608401610849565b61171e8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129b092505050565b611815612608565b61181f6000612e60565b565b6000610e8f82612350565b60006118406064546001600160a01b031690565b905090565b60018054600091908116141561186d5760405162461bcd60e51b81526004016108499061560a565b8389146118f05760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610849565b60006118fc3388612eb2565b905061195b818787808060200260200160405190810160405280939291908181526020016000905b82821015611950576119416040830286013681900381019061586c565b81526020019060010190611924565b505050505086612fe3565b60006119a233838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061316d915050565b905060005b8b811015611b6d576000609760008f8f858181106119c7576119c7615641565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110611a3457611a34615641565b602002602001015163ffffffff161115611b5a57611ad58e8e84818110611a5d57611a5d615641565b9050013560f81c60f81b60f81c84604001518481518110611a8057611a80615641565b60200260200101513386602001518681518110611a9f57611a9f615641565b60200260200101518d8d88818110611ab957611ab9615641565b905060400201803603810190611acf919061586c565b86613701565b611b5a898984818110611aea57611aea615641565b9050604002016020016020810190611b029190614ba3565b8f8f8590866001611b13919061582a565b92611b2093929190615842565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129b092505050565b5080611b658161566d565b9150506119a7565b50505050505050505050505050565b600180546000919081161415611ba45760405162461bcd60e51b81526004016108499061560a565b6000611bb03385612eb2565b90506000611bf933838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061316d915050565b51905060005b88811015611cf45760008a8a83818110611c1b57611c1b615641565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110611c5157611c51615641565b602002602001015163ffffffff161115611ce15760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a401610849565b5080611cec8161566d565b915050611bff565b50505050505050505050565b6060600082516001600160401b03811115611d1d57611d1d614a47565b604051908082528060200260200182016040528015611d46578160200160208202803683370190505b50905060005b8351811015611db157611d7885858381518110611d6b57611d6b615641565b60200260200101516139d6565b828281518110611d8a57611d8a615641565b63ffffffff9092166020928302919091019091015280611da98161566d565b915050611d4c565b509392505050565b6001805460029081161415611de05760405162461bcd60e51b81526004016108499061560a565b61171e3384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129b092505050565b611e28612608565b61171e838383613b12565b600054610100900460ff1615808015611e535750600054600160ff909116105b80611e6d5750303b158015611e6d575060005460ff166001145b611ed05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610849565b6000805460ff191660011790558015611ef3576000805461ff0019166101001790555b82518451148015611f05575081518351145b611f6f5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610849565b611f7889612e60565b611f828686613d29565b611f8b88612667565b611f94876126d0565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000000000000000000000000000000000000000000000841690831617905585549384019095559190920180547f000000000000000000000000000000000000000000000000000000000000000090921691909316179091555b84518110156120e5576120d385828151811061209257612092615641565b60200260200101518583815181106120ac576120ac615641565b60200260200101518584815181106120c6576120c6615641565b6020026020010151613b12565b806120dd8161566d565b915050612074565b50801561212c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61213f612608565b6001600160a01b0381166121a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610849565b610cc481612e60565b60006121eb7ff843b3116d574f43e69f8dda5d93ebf11dccc4a465983f9453058005cd6b34a086868686604051602001610fa2959493929190615888565b95945050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b91906156f3565b6001600160a01b0316336001600160a01b03161461229b5760405162461bcd60e51b815260040161084990615710565b6001541981196001541916146123195760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c09565b6000818152609860205260408120548061236d5750600092915050565b60008381526098602052604090206123866001836158fe565b8154811061239657612396615641565b600091825260209091200154600160401b90046001600160c01b03169392505050565b60606000805b61010081101561240f576001811b9150838216156123ff57828160f81b6040516020016123ed929190615915565b60405160208183030381529060405292505b6124088161566d565b90506123bf565b5050919050565b60018260200151600281111561242e5761242e614cd1565b1461243857505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366acfefe9061248d90889086908890600401615944565b6020604051808303816000875af11580156124ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d0919061596b565b90506001600160c01b038116156124fc576124fc856124f7836001600160c01b03166123b9565b6129b0565b5050505050565b6001600160a01b0381166125915760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610849565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b3361261161182c565b6001600160a01b03161461181f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610849565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8f612746613e19565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806127b7600080516020615e53833981519152866159aa565b90505b6127c381613f40565b9093509150600080516020615e538339815191528283098314156127fd576040805180820190915290815260208101919091529392505050565b600080516020615e538339815191526001820890506127ba565b60008061282384613fc2565b905080156128c9578260ff16846001865161283e91906158fe565b8151811061284e5761284e615641565b016020015160f81c106128c95760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610849565b9392505050565b60965460009081906128ea9060019060ff1681901b6158fe565b90506128c96001600160c01b0384811690831681161490565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff1660028111156129e4576129e4614cd1565b14612a515760405162461bcd60e51b81526020600482015260436024820152600080516020615e7383398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a401610849565b609654600090612a6590859060ff16612817565b90506000612a7283612350565b90506001600160c01b038216612ade5760405162461bcd60e51b815260206004820152603b6024820152600080516020615e7383398151915260448201527f70657261746f723a206269746d61702063616e6e6f74206265203000000000006064820152608401610849565b612ae7826128d0565b612b525760405162461bcd60e51b81526020600482015260426024820152600080516020615e7383398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a401610849565b612b696001600160c01b0383811690831681161490565b612bef5760405162461bcd60e51b81526020600482015260596024820152600080516020615e7383398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527f72656420666f72207370656369666965642071756f72756d7300000000000000608482015260a401610849565b6001600160c01b0382811619821616612c08848261414f565b6001600160c01b038116612cd75760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b158015612c8857600080fd5b505af1158015612c9c573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f4e24fe590612d25908a908a906004016159be565b600060405180830381600087803b158015612d3f57600080fd5b505af1158015612d53573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612da59087908a906004016159e2565b600060405180830381600087803b158015612dbf57600080fd5b505af1158015612dd3573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612e259087908a906004016159e2565b600060405180830381600087803b158015612e3f57600080fd5b505af1158015612e53573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906313542a4e90602401602060405180830381865afa158015612f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4191906159fb565b905080610e8f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bf79ce588484612f8287610f43565b6040518463ffffffff1660e01b8152600401612fa093929190615a14565b6020604051808303816000875af1158015612fbf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c991906159fb565b6020808201516000908152609a909152604090205460ff16156130895760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a401610849565b428160400151101561311e5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a401610849565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161171e926001600160a01b039092169161316691879187916121ad565b835161430f565b61319160405180606001604052806060815260200160608152602001606081525090565b60006131d986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506128179050565b905060006131e688612350565b90506001600160c01b0382166132645760405162461bcd60e51b815260206004820152603960248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206269746d61702063616e6e6f742062652030000000000000006064820152608401610849565b61326d826128d0565b6132e1576040805162461bcd60e51b81526020600482015260248101919091527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f742065786973746064820152608401610849565b8082166001600160c01b0316156133975760405162461bcd60e51b815260206004820152606860248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c401610849565b6001600160c01b03818116908316176133b0898261414f565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516133e091906156e0565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561341a5761341a614cd1565b14613533576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561347557613475614cd1565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150639926ee7d906134ca908d908990600401615a93565b600060405180830381600087803b1580156134e457600080fd5b505af11580156134f8573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633fb2795290613583908d908c908c90600401615b07565b600060405180830381600087803b15801561359d57600080fd5b505af11580156135b1573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063255047779150613607908d908d908d908d90600401615b2c565b6000604051808303816000875af1158015613626573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261364e9190810190615bc2565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062bff04d906136ab908c908c908c90600401615c25565b6000604051808303816000875af11580156136ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136f29190810190615c3f565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156137815760405162461bcd60e51b81526020600482015260356024820152600080516020615e3383398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b6064820152608401610849565b8760ff16846000015160ff16146137fe5760405162461bcd60e51b81526020600482015260476024820152600080516020615e3383398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a401610849565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635401ed2790604401602060405180830381865afa15801561386f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138939190615cd8565b905061389f81856144c9565b6001600160601b0316866001600160601b0316116139325760405162461bcd60e51b81526020600482015260566024820152600080516020615e3383398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a401610849565b61393c88856144ed565b6001600160601b0316816001600160601b03161061212c5760405162461bcd60e51b815260206004820152605c6024820152600080516020615e3383398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a401610849565b600081815260986020526040812054815b81811015613a685760016139fb82846158fe565b613a0591906158fe565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110613a3857613a38615641565b60009182526020909120015463ffffffff1611613a56575050610e8f565b80613a608161566d565b9150506139e7565b5060405162461bcd60e51b815260206004820152606c60248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c401610849565b60965460ff1660c08110613b865760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b6064820152608401610849565b613b91816001615cf5565b6096805460ff191660ff9290921691909117905580613bb08186612903565b60405160016296b58960e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ff694a7790613c0390849088908890600401615d1a565b600060405180830381600087803b158015613c1d57600080fd5b505af1158015613c31573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613c9957600080fd5b505af1158015613cad573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613d1557600080fd5b505af115801561212c573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015613d5057506001600160a01b03821615155b613dd25760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613e1582612503565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613e7257507f000000000000000000000000000000000000000000000000000000000000000046145b15613e9c57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615e538339815191526003600080516020615e5383398151915286600080516020615e53833981519152888909090890506000613fb6827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615e53833981519152614507565b91959194509092505050565b60006101008251111561404b5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610849565b815161405957506000919050565b6000808360008151811061406f5761406f615641565b0160200151600160f89190911c81901b92505b84518110156141465784818151811061409d5761409d615641565b0160200151600160f89190911c1b91508282116141325760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610849565b9181179161413f8161566d565b9050614082565b50909392505050565b600082815260986020526040902054806141f4576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b600083815260986020526040812061420d6001846158fe565b8154811061421d5761421d615641565b600091825260209091200180549091504363ffffffff908116911614156142615780546001600160401b0316600160401b6001600160c01b03851602178155610930565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561442957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061434f90869086906004016159e2565b602060405180830381865afa15801561436c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143909190615d93565b6001600160e01b0319161461171e5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610849565b826001600160a01b031661443d83836145b6565b6001600160a01b03161461171e5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610849565b6020810151600090612710906144e39061ffff1685615dbd565b6128c99190615dec565b6040810151600090612710906144e39061ffff1685615dbd565b600080614512614923565b61451a614941565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561455b5761455d565bfe5b50826145ab5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610849565b505195945050505050565b60008060006145c585856145d2565b91509150611db181614642565b6000808251604114156146095760208301516040840151606085015160001a6145fd878285856147fd565b9450945050505061463b565b82516040141561463357602083015160408401516146288683836148ea565b93509350505061463b565b506000905060025b9250929050565b600081600481111561465657614656614cd1565b141561465f5750565b600181600481111561467357614673614cd1565b14156146c15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610849565b60028160048111156146d5576146d5614cd1565b14156147235760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610849565b600381600481111561473757614737614cd1565b14156147905760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610849565b60048160048111156147a4576147a4614cd1565b1415610cc45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610849565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561483457506000905060036148e1565b8460ff16601b1415801561484c57508460ff16601c14155b1561485d57506000905060046148e1565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156148b1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166148da576000600192509250506148e1565b9150600090505b94509492505050565b6000806001600160ff1b0383168161490760ff86901c601b61582a565b9050614915878288856147fd565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f84011261497157600080fd5b5081356001600160401b0381111561498857600080fd5b6020830191508360208260051b850101111561463b57600080fd5b600080602083850312156149b657600080fd5b82356001600160401b038111156149cc57600080fd5b6149d88582860161495f565b90969095509350505050565b6000602082840312156149f657600080fd5b5035919050565b63ffffffff81168114610cc457600080fd5b600080600060608486031215614a2457600080fd5b833592506020840135614a36816149fd565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614a7f57614a7f614a47565b60405290565b604080519081016001600160401b0381118282101715614a7f57614a7f614a47565b604051601f8201601f191681016001600160401b0381118282101715614acf57614acf614a47565b604052919050565b60006001600160401b03831115614af057614af0614a47565b614b03601f8401601f1916602001614aa7565b9050828152838383011115614b1757600080fd5b828260208301376000602084830101529392505050565b600060208284031215614b4057600080fd5b81356001600160401b03811115614b5657600080fd5b8201601f81018413614b6757600080fd5b614b7684823560208401614ad7565b949350505050565b6001600160a01b0381168114610cc457600080fd5b8035614b9e81614b7e565b919050565b600060208284031215614bb557600080fd5b81356128c981614b7e565b60008060408385031215614bd357600080fd5b50508035926020909101359150565b803560ff81168114614b9e57600080fd5b600060208284031215614c0557600080fd5b6128c982614be2565b815181526020808301519082015260408101610e8f565b60008083601f840112614c3757600080fd5b5081356001600160401b03811115614c4e57600080fd5b60208301915083602082850101111561463b57600080fd5b60008060008060408587031215614c7c57600080fd5b84356001600160401b0380821115614c9357600080fd5b614c9f8883890161495f565b90965094506020870135915080821115614cb857600080fd5b50614cc587828801614c25565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614d0557634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614d2490840182614ce7565b5092915050565b803561ffff81168114614b9e57600080fd5b600060608284031215614d4f57600080fd5b614d57614a5d565b90508135614d64816149fd565b8152614d7260208301614d2b565b6020820152614d8360408301614d2b565b604082015292915050565b60008060808385031215614da157600080fd5b614daa83614be2565b9150614db98460208501614d3d565b90509250929050565b600080600060408486031215614dd757600080fd5b8335614de281614b7e565b925060208401356001600160401b03811115614dfd57600080fd5b614e0986828701614c25565b9497909650939450505050565b60006101008284031215614e2957600080fd5b50919050565b60008083601f840112614e4157600080fd5b5081356001600160401b03811115614e5857600080fd5b6020830191508360208260061b850101111561463b57600080fd5b600060608284031215614e8557600080fd5b614e8d614a5d565b905081356001600160401b03811115614ea557600080fd5b8201601f81018413614eb657600080fd5b614ec584823560208401614ad7565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f0157600080fd5b89356001600160401b0380821115614f1857600080fd5b614f248d838e01614c25565b909b50995060208c0135915080821115614f3d57600080fd5b614f498d838e01614c25565b9099509750879150614f5e8d60408e01614e16565b96506101408c0135915080821115614f7557600080fd5b614f818d838e01614e2f565b90965094506101608c0135915080821115614f9b57600080fd5b614fa78d838e01614e73565b93506101808c0135915080821115614fbe57600080fd5b50614fcb8c828d01614e73565b9150509295985092959850929598565b6000806000806000806101608789031215614ff557600080fd5b86356001600160401b038082111561500c57600080fd5b6150188a838b01614c25565b9098509650602089013591508082111561503157600080fd5b61503d8a838b01614c25565b90965094508491506150528a60408b01614e16565b935061014089013591508082111561506957600080fd5b5061507689828a01614e73565b9150509295509295509295565b60006001600160401b0382111561509c5761509c614a47565b5060051b60200190565b600080604083850312156150b957600080fd5b82356150c4816149fd565b91506020838101356001600160401b038111156150e057600080fd5b8401601f810186136150f157600080fd5b80356151046150ff82615083565b614aa7565b81815260059190911b8201830190838101908883111561512357600080fd5b928401925b8284101561514157833582529284019290840190615128565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561518e57835163ffffffff168352928401929184019160010161516c565b50909695505050505050565b600080602083850312156151ad57600080fd5b82356001600160401b038111156151c357600080fd5b6149d885828601614c25565b6001600160601b0381168114610cc457600080fd5b600082601f8301126151f557600080fd5b813560206152056150ff83615083565b82815260069290921b8401810191818101908684111561522457600080fd5b8286015b8481101561527557604081890312156152415760008081fd5b615249614a85565b813561525481614b7e565b815281850135615263816151cf565b81860152835291830191604001615228565b509695505050505050565b600080600060a0848603121561529557600080fd5b61529f8585614d3d565b925060608401356152af816151cf565b915060808401356001600160401b038111156152ca57600080fd5b6152d6868287016151e4565b9150509250925092565b600082601f8301126152f157600080fd5b813560206153016150ff83615083565b8281526060928302850182019282820191908785111561532057600080fd5b8387015b85811015615343576153368982614d3d565b8452928401928101615324565b5090979650505050505050565b600082601f83011261536157600080fd5b813560206153716150ff83615083565b82815260059290921b8401810191818101908684111561539057600080fd5b8286015b848110156152755780356153a7816151cf565b8352918301918301615394565b600082601f8301126153c557600080fd5b813560206153d56150ff83615083565b82815260059290921b840181019181810190868411156153f457600080fd5b8286015b848110156152755780356001600160401b038111156154175760008081fd5b6154258986838b01016151e4565b8452509183019183016153f8565b600080600080600080600080610100898b03121561545057600080fd5b61545989614b93565b975061546760208a01614b93565b965061547560408a01614b93565b955061548360608a01614b93565b94506080890135935060a08901356001600160401b03808211156154a657600080fd5b6154b28c838d016152e0565b945060c08b01359150808211156154c857600080fd5b6154d48c838d01615350565b935060e08b01359150808211156154ea57600080fd5b506154f78b828c016153b4565b9150509295985092959890939650565b60006040828403121561551957600080fd5b615521614a85565b905061552c82614be2565b8152602082013561553c81614b7e565b602082015292915050565b6000806000806080858703121561555d57600080fd5b843593506020808601356001600160401b0381111561557b57600080fd5b8601601f8101881361558c57600080fd5b803561559a6150ff82615083565b81815260069190911b8201830190838101908a8311156155b957600080fd5b928401925b828410156155e2576155d08b85615507565b825284820191506040840193506155be565b979a97995050505060408601359560600135949350505050565b60208101610e8f8284614ce7565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561568157615681615657565b5060010190565b60005b838110156156a357818101518382015260200161568b565b838111156109305750506000910152565b600081518084526156cc816020860160208601615688565b601f01601f19169290920160200192915050565b6020815260006128c960208301846156b4565b60006020828403121561570557600080fd5b81516128c981614b7e565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561576c57600080fd5b815180151581146128c957600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e198436030181126157db57600080fd5b8301803591506001600160401b038211156157f557600080fd5b6020019150600581901b360382131561463b57600080fd5b60006020828403121561581f57600080fd5b81516128c9816149fd565b6000821982111561583d5761583d615657565b500190565b6000808585111561585257600080fd5b8386111561585f57600080fd5b5050820193919092039150565b60006040828403121561587e57600080fd5b6128c98383615507565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b818110156158e5578551805160ff1684528501516001600160a01b03168584015294840194918301916001016158b4565b5050606086019790975250505050608001529392505050565b60008282101561591057615910615657565b500390565b60008351615927818460208801615688565b6001600160f81b0319939093169190920190815260010192915050565b60018060a01b03841681528260208201526060604082015260006121eb60608301846156b4565b60006020828403121561597d57600080fd5b81516001600160c01b03811681146128c957600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826159b9576159b9615994565b500690565b6001600160a01b0383168152604060208201819052600090614b76908301846156b4565b828152604060208201526000614b7660408301846156b4565b600060208284031215615a0d57600080fd5b5051919050565b6001600160a01b03841681526101608101615a3c602083018580358252602090810135910152565b615a56606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615abd60a08401826156b4565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906121eb9083018486615ade565b60018060a01b0385168152836020820152606060408201526000615b54606083018486615ade565b9695505050505050565b600082601f830112615b6f57600080fd5b81516020615b7f6150ff83615083565b82815260059290921b84018101918181019086841115615b9e57600080fd5b8286015b84811015615275578051615bb5816151cf565b8352918301918301615ba2565b60008060408385031215615bd557600080fd5b82516001600160401b0380821115615bec57600080fd5b615bf886838701615b5e565b93506020850151915080821115615c0e57600080fd5b50615c1b85828601615b5e565b9150509250929050565b8381526040602082015260006121eb604083018486615ade565b60006020808385031215615c5257600080fd5b82516001600160401b03811115615c6857600080fd5b8301601f81018513615c7957600080fd5b8051615c876150ff82615083565b81815260059190911b82018301908381019087831115615ca657600080fd5b928401925b82841015615ccd578351615cbe816149fd565b82529284019290840190615cab565b979650505050505050565b600060208284031215615cea57600080fd5b81516128c9816151cf565b600060ff821660ff84168060ff03821115615d1257615d12615657565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615d8357865180516001600160a01b031684528601518516868401529585019591830191600101615d53565b50909a9950505050505050505050565b600060208284031215615da557600080fd5b81516001600160e01b0319811681146128c957600080fd5b60006001600160601b0380831681851681830481118215151615615de357615de3615657565b02949350505050565b60006001600160601b0380841680615e0657615e06615994565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c696461746543687530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724fa264697066735822122007c44046a56826a1ceafa023d61e50742d9e749b629679d895b4b4d6978629c564736f6c634300080c0033", +} + +// ContractRegistryCoordinatorABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractRegistryCoordinatorMetaData.ABI instead. +var ContractRegistryCoordinatorABI = ContractRegistryCoordinatorMetaData.ABI + +// ContractRegistryCoordinatorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractRegistryCoordinatorMetaData.Bin instead. +var ContractRegistryCoordinatorBin = ContractRegistryCoordinatorMetaData.Bin + +// DeployContractRegistryCoordinator deploys a new Ethereum contract, binding an instance of ContractRegistryCoordinator to it. +func DeployContractRegistryCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _serviceManager common.Address, _stakeRegistry common.Address, _blsApkRegistry common.Address, _indexRegistry common.Address) (common.Address, *types.Transaction, *ContractRegistryCoordinator, error) { + parsed, err := ContractRegistryCoordinatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractRegistryCoordinatorBin), backend, _serviceManager, _stakeRegistry, _blsApkRegistry, _indexRegistry) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractRegistryCoordinator{ContractRegistryCoordinatorCaller: ContractRegistryCoordinatorCaller{contract: contract}, ContractRegistryCoordinatorTransactor: ContractRegistryCoordinatorTransactor{contract: contract}, ContractRegistryCoordinatorFilterer: ContractRegistryCoordinatorFilterer{contract: contract}}, nil +} + +// ContractRegistryCoordinatorMethods is an auto generated interface around an Ethereum contract. +type ContractRegistryCoordinatorMethods interface { + ContractRegistryCoordinatorCalls + ContractRegistryCoordinatorTransacts + ContractRegistryCoordinatorFilters +} + +// ContractRegistryCoordinatorCalls is an auto generated interface that defines the call methods available for an Ethereum contract. +type ContractRegistryCoordinatorCalls interface { + OPERATORCHURNAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) + + PUBKEYREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) + + BlsApkRegistry(opts *bind.CallOpts) (common.Address, error) + + CalculateOperatorChurnApprovalDigestHash(opts *bind.CallOpts, registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) + + ChurnApprover(opts *bind.CallOpts) (common.Address, error) + + Ejector(opts *bind.CallOpts) (common.Address, error) + + GetCurrentQuorumBitmap(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) + + GetOperator(opts *bind.CallOpts, operator common.Address) (IRegistryCoordinatorOperatorInfo, error) + + GetOperatorFromId(opts *bind.CallOpts, operatorId [32]byte) (common.Address, error) + + GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) + + GetOperatorSetParams(opts *bind.CallOpts, quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) + + GetOperatorStatus(opts *bind.CallOpts, operator common.Address) (uint8, error) + + GetQuorumBitmapAtBlockNumberByIndex(opts *bind.CallOpts, operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) + + GetQuorumBitmapHistoryLength(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) + + GetQuorumBitmapIndicesAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) + + GetQuorumBitmapUpdateByIndex(opts *bind.CallOpts, operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) + + IndexRegistry(opts *bind.CallOpts) (common.Address, error) + + IsChurnApproverSaltUsed(opts *bind.CallOpts, arg0 [32]byte) (bool, error) + + NumRegistries(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + Paused(opts *bind.CallOpts, index uint8) (bool, error) + + Paused0(opts *bind.CallOpts) (*big.Int, error) + + PauserRegistry(opts *bind.CallOpts) (common.Address, error) + + PubkeyRegistrationMessageHash(opts *bind.CallOpts, operator common.Address) (BN254G1Point, error) + + QuorumCount(opts *bind.CallOpts) (uint8, error) + + QuorumUpdateBlockNumber(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) + + Registries(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) + + ServiceManager(opts *bind.CallOpts) (common.Address, error) + + StakeRegistry(opts *bind.CallOpts) (common.Address, error) +} + +// ContractRegistryCoordinatorTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. +type ContractRegistryCoordinatorTransacts interface { + CreateQuorum(opts *bind.TransactOpts, operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) + + DeregisterOperator(opts *bind.TransactOpts, quorumNumbers []byte) (*types.Transaction, error) + + EjectOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) + + Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) + + Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) + + PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) + + RegisterOperator(opts *bind.TransactOpts, quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) + + RegisterOperatorWithChurn(opts *bind.TransactOpts, quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) + + RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + SetChurnApprover(opts *bind.TransactOpts, _churnApprover common.Address) (*types.Transaction, error) + + SetEjector(opts *bind.TransactOpts, _ejector common.Address) (*types.Transaction, error) + + SetOperatorSetParams(opts *bind.TransactOpts, quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) + + SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) + + Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) + + UpdateOperators(opts *bind.TransactOpts, operators []common.Address) (*types.Transaction, error) + + UpdateOperatorsForQuorum(opts *bind.TransactOpts, operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) + + UpdateSocket(opts *bind.TransactOpts, socket string) (*types.Transaction, error) +} + +// ContractRegistryCoordinatorFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. +type ContractRegistryCoordinatorFilters interface { + FilterChurnApproverUpdated(opts *bind.FilterOpts) (*ContractRegistryCoordinatorChurnApproverUpdatedIterator, error) + WatchChurnApproverUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorChurnApproverUpdated) (event.Subscription, error) + ParseChurnApproverUpdated(log types.Log) (*ContractRegistryCoordinatorChurnApproverUpdated, error) + + FilterEjectorUpdated(opts *bind.FilterOpts) (*ContractRegistryCoordinatorEjectorUpdatedIterator, error) + WatchEjectorUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorEjectorUpdated) (event.Subscription, error) + ParseEjectorUpdated(log types.Log) (*ContractRegistryCoordinatorEjectorUpdated, error) + + FilterInitialized(opts *bind.FilterOpts) (*ContractRegistryCoordinatorInitializedIterator, error) + WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorInitialized) (event.Subscription, error) + ParseInitialized(log types.Log) (*ContractRegistryCoordinatorInitialized, error) + + FilterOperatorDeregistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorDeregisteredIterator, error) + WatchOperatorDeregistered(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorDeregistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) + ParseOperatorDeregistered(log types.Log) (*ContractRegistryCoordinatorOperatorDeregistered, error) + + FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorRegisteredIterator, error) + WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorRegistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) + ParseOperatorRegistered(log types.Log) (*ContractRegistryCoordinatorOperatorRegistered, error) + + FilterOperatorSetParamsUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator, error) + WatchOperatorSetParamsUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorSetParamsUpdated, quorumNumber []uint8) (event.Subscription, error) + ParseOperatorSetParamsUpdated(log types.Log) (*ContractRegistryCoordinatorOperatorSetParamsUpdated, error) + + FilterOperatorSocketUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorSocketUpdateIterator, error) + WatchOperatorSocketUpdate(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorSocketUpdate, operatorId [][32]byte) (event.Subscription, error) + ParseOperatorSocketUpdate(log types.Log) (*ContractRegistryCoordinatorOperatorSocketUpdate, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractRegistryCoordinatorOwnershipTransferredIterator, error) + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) + ParseOwnershipTransferred(log types.Log) (*ContractRegistryCoordinatorOwnershipTransferred, error) + + FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractRegistryCoordinatorPausedIterator, error) + WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorPaused, account []common.Address) (event.Subscription, error) + ParsePaused(log types.Log) (*ContractRegistryCoordinatorPaused, error) + + FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractRegistryCoordinatorPauserRegistrySetIterator, error) + WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorPauserRegistrySet) (event.Subscription, error) + ParsePauserRegistrySet(log types.Log) (*ContractRegistryCoordinatorPauserRegistrySet, error) + + FilterQuorumBlockNumberUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator, error) + WatchQuorumBlockNumberUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorQuorumBlockNumberUpdated, quorumNumber []uint8) (event.Subscription, error) + ParseQuorumBlockNumberUpdated(log types.Log) (*ContractRegistryCoordinatorQuorumBlockNumberUpdated, error) + + FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractRegistryCoordinatorUnpausedIterator, error) + WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorUnpaused, account []common.Address) (event.Subscription, error) + ParseUnpaused(log types.Log) (*ContractRegistryCoordinatorUnpaused, error) +} + +// ContractRegistryCoordinator is an auto generated Go binding around an Ethereum contract. +type ContractRegistryCoordinator struct { + ContractRegistryCoordinatorCaller // Read-only binding to the contract + ContractRegistryCoordinatorTransactor // Write-only binding to the contract + ContractRegistryCoordinatorFilterer // Log filterer for contract events +} + +// ContractRegistryCoordinator implements the ContractRegistryCoordinatorMethods interface. +var _ ContractRegistryCoordinatorMethods = (*ContractRegistryCoordinator)(nil) + +// ContractRegistryCoordinatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractRegistryCoordinatorCaller implements the ContractRegistryCoordinatorCalls interface. +var _ ContractRegistryCoordinatorCalls = (*ContractRegistryCoordinatorCaller)(nil) + +// ContractRegistryCoordinatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractRegistryCoordinatorTransactor implements the ContractRegistryCoordinatorTransacts interface. +var _ ContractRegistryCoordinatorTransacts = (*ContractRegistryCoordinatorTransactor)(nil) + +// ContractRegistryCoordinatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractRegistryCoordinatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractRegistryCoordinatorFilterer implements the ContractRegistryCoordinatorFilters interface. +var _ ContractRegistryCoordinatorFilters = (*ContractRegistryCoordinatorFilterer)(nil) + +// ContractRegistryCoordinatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractRegistryCoordinatorSession struct { + Contract *ContractRegistryCoordinator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractRegistryCoordinatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractRegistryCoordinatorCallerSession struct { + Contract *ContractRegistryCoordinatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractRegistryCoordinatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractRegistryCoordinatorTransactorSession struct { + Contract *ContractRegistryCoordinatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractRegistryCoordinatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractRegistryCoordinatorRaw struct { + Contract *ContractRegistryCoordinator // Generic contract binding to access the raw methods on +} + +// ContractRegistryCoordinatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorCallerRaw struct { + Contract *ContractRegistryCoordinatorCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractRegistryCoordinatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorTransactorRaw struct { + Contract *ContractRegistryCoordinatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractRegistryCoordinator creates a new instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinator(address common.Address, backend bind.ContractBackend) (*ContractRegistryCoordinator, error) { + contract, err := bindContractRegistryCoordinator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinator{ContractRegistryCoordinatorCaller: ContractRegistryCoordinatorCaller{contract: contract}, ContractRegistryCoordinatorTransactor: ContractRegistryCoordinatorTransactor{contract: contract}, ContractRegistryCoordinatorFilterer: ContractRegistryCoordinatorFilterer{contract: contract}}, nil +} + +// NewContractRegistryCoordinatorCaller creates a new read-only instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinatorCaller(address common.Address, caller bind.ContractCaller) (*ContractRegistryCoordinatorCaller, error) { + contract, err := bindContractRegistryCoordinator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorCaller{contract: contract}, nil +} + +// NewContractRegistryCoordinatorTransactor creates a new write-only instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinatorTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractRegistryCoordinatorTransactor, error) { + contract, err := bindContractRegistryCoordinator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorTransactor{contract: contract}, nil +} + +// NewContractRegistryCoordinatorFilterer creates a new log filterer instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinatorFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractRegistryCoordinatorFilterer, error) { + contract, err := bindContractRegistryCoordinator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorFilterer{contract: contract}, nil +} + +// bindContractRegistryCoordinator binds a generic wrapper to an already deployed contract. +func bindContractRegistryCoordinator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractRegistryCoordinatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractRegistryCoordinator.Contract.ContractRegistryCoordinatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.ContractRegistryCoordinatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.ContractRegistryCoordinatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractRegistryCoordinator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.contract.Transact(opts, method, params...) +} + +// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. +// +// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) OPERATORCHURNAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "OPERATOR_CHURN_APPROVAL_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. +// +// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) OPERATORCHURNAPPROVALTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.OPERATORCHURNAPPROVALTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. +// +// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) OPERATORCHURNAPPROVALTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.OPERATORCHURNAPPROVALTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// PUBKEYREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0x9feab859. +// +// Solidity: function PUBKEY_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) PUBKEYREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "PUBKEY_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PUBKEYREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0x9feab859. +// +// Solidity: function PUBKEY_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PUBKEYREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.PUBKEYREGISTRATIONTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// PUBKEYREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0x9feab859. +// +// Solidity: function PUBKEY_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) PUBKEYREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.PUBKEYREGISTRATIONTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. +// +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) BlsApkRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "blsApkRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. +// +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) BlsApkRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.BlsApkRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. +// +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) BlsApkRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.BlsApkRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0xf8581191. +// +// Solidity: function calculateOperatorChurnApprovalDigestHash(bytes32 registeringOperatorId, (uint8,address)[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) CalculateOperatorChurnApprovalDigestHash(opts *bind.CallOpts, registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "calculateOperatorChurnApprovalDigestHash", registeringOperatorId, operatorKickParams, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0xf8581191. +// +// Solidity: function calculateOperatorChurnApprovalDigestHash(bytes32 registeringOperatorId, (uint8,address)[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) CalculateOperatorChurnApprovalDigestHash(registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.CalculateOperatorChurnApprovalDigestHash(&_ContractRegistryCoordinator.CallOpts, registeringOperatorId, operatorKickParams, salt, expiry) +} + +// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0xf8581191. +// +// Solidity: function calculateOperatorChurnApprovalDigestHash(bytes32 registeringOperatorId, (uint8,address)[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) CalculateOperatorChurnApprovalDigestHash(registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.CalculateOperatorChurnApprovalDigestHash(&_ContractRegistryCoordinator.CallOpts, registeringOperatorId, operatorKickParams, salt, expiry) +} + +// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. +// +// Solidity: function churnApprover() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) ChurnApprover(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "churnApprover") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. +// +// Solidity: function churnApprover() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) ChurnApprover() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ChurnApprover(&_ContractRegistryCoordinator.CallOpts) +} + +// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. +// +// Solidity: function churnApprover() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) ChurnApprover() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ChurnApprover(&_ContractRegistryCoordinator.CallOpts) +} + +// Ejector is a free data retrieval call binding the contract method 0x28f61b31. +// +// Solidity: function ejector() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Ejector(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "ejector") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Ejector is a free data retrieval call binding the contract method 0x28f61b31. +// +// Solidity: function ejector() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Ejector() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Ejector(&_ContractRegistryCoordinator.CallOpts) +} + +// Ejector is a free data retrieval call binding the contract method 0x28f61b31. +// +// Solidity: function ejector() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Ejector() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Ejector(&_ContractRegistryCoordinator.CallOpts) +} + +// GetCurrentQuorumBitmap is a free data retrieval call binding the contract method 0x871ef049. +// +// Solidity: function getCurrentQuorumBitmap(bytes32 operatorId) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetCurrentQuorumBitmap(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getCurrentQuorumBitmap", operatorId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCurrentQuorumBitmap is a free data retrieval call binding the contract method 0x871ef049. +// +// Solidity: function getCurrentQuorumBitmap(bytes32 operatorId) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetCurrentQuorumBitmap(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetCurrentQuorumBitmap(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetCurrentQuorumBitmap is a free data retrieval call binding the contract method 0x871ef049. +// +// Solidity: function getCurrentQuorumBitmap(bytes32 operatorId) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetCurrentQuorumBitmap(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetCurrentQuorumBitmap(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. +// +// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperator(opts *bind.CallOpts, operator common.Address) (IRegistryCoordinatorOperatorInfo, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperator", operator) + + if err != nil { + return *new(IRegistryCoordinatorOperatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorOperatorInfo)).(*IRegistryCoordinatorOperatorInfo) + + return out0, err + +} + +// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. +// +// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperator(operator common.Address) (IRegistryCoordinatorOperatorInfo, error) { + return _ContractRegistryCoordinator.Contract.GetOperator(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. +// +// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperator(operator common.Address) (IRegistryCoordinatorOperatorInfo, error) { + return _ContractRegistryCoordinator.Contract.GetOperator(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. +// +// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorFromId(opts *bind.CallOpts, operatorId [32]byte) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorFromId", operatorId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. +// +// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorFromId(operatorId [32]byte) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorFromId(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. +// +// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorFromId(operatorId [32]byte) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorFromId(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorId", operator) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorId(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorId(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. +// +// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorSetParams(opts *bind.CallOpts, quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorSetParams", quorumNumber) + + if err != nil { + return *new(IRegistryCoordinatorOperatorSetParam), err + } + + out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorOperatorSetParam)).(*IRegistryCoordinatorOperatorSetParam) + + return out0, err + +} + +// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. +// +// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorSetParams(quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorSetParams(&_ContractRegistryCoordinator.CallOpts, quorumNumber) +} + +// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. +// +// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorSetParams(quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorSetParams(&_ContractRegistryCoordinator.CallOpts, quorumNumber) +} + +// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. +// +// Solidity: function getOperatorStatus(address operator) view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorStatus(opts *bind.CallOpts, operator common.Address) (uint8, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorStatus", operator) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. +// +// Solidity: function getOperatorStatus(address operator) view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorStatus(operator common.Address) (uint8, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorStatus(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. +// +// Solidity: function getOperatorStatus(address operator) view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorStatus(operator common.Address) (uint8, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorStatus(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetQuorumBitmapAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x04ec6351. +// +// Solidity: function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapAtBlockNumberByIndex(opts *bind.CallOpts, operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapAtBlockNumberByIndex", operatorId, blockNumber, index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetQuorumBitmapAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x04ec6351. +// +// Solidity: function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapAtBlockNumberByIndex(operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapAtBlockNumberByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, blockNumber, index) +} + +// GetQuorumBitmapAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x04ec6351. +// +// Solidity: function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapAtBlockNumberByIndex(operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapAtBlockNumberByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, blockNumber, index) +} + +// GetQuorumBitmapHistoryLength is a free data retrieval call binding the contract method 0x03fd3492. +// +// Solidity: function getQuorumBitmapHistoryLength(bytes32 operatorId) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapHistoryLength(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapHistoryLength", operatorId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetQuorumBitmapHistoryLength is a free data retrieval call binding the contract method 0x03fd3492. +// +// Solidity: function getQuorumBitmapHistoryLength(bytes32 operatorId) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapHistoryLength(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapHistoryLength(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetQuorumBitmapHistoryLength is a free data retrieval call binding the contract method 0x03fd3492. +// +// Solidity: function getQuorumBitmapHistoryLength(bytes32 operatorId) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapHistoryLength(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapHistoryLength(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetQuorumBitmapIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xc391425e. +// +// Solidity: function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapIndicesAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapIndicesAtBlockNumber", blockNumber, operatorIds) + + if err != nil { + return *new([]uint32), err + } + + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + + return out0, err + +} + +// GetQuorumBitmapIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xc391425e. +// +// Solidity: function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapIndicesAtBlockNumber(blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapIndicesAtBlockNumber(&_ContractRegistryCoordinator.CallOpts, blockNumber, operatorIds) +} + +// GetQuorumBitmapIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xc391425e. +// +// Solidity: function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapIndicesAtBlockNumber(blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapIndicesAtBlockNumber(&_ContractRegistryCoordinator.CallOpts, blockNumber, operatorIds) +} + +// GetQuorumBitmapUpdateByIndex is a free data retrieval call binding the contract method 0x1eb812da. +// +// Solidity: function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapUpdateByIndex(opts *bind.CallOpts, operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapUpdateByIndex", operatorId, index) + + if err != nil { + return *new(IRegistryCoordinatorQuorumBitmapUpdate), err + } + + out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorQuorumBitmapUpdate)).(*IRegistryCoordinatorQuorumBitmapUpdate) + + return out0, err + +} + +// GetQuorumBitmapUpdateByIndex is a free data retrieval call binding the contract method 0x1eb812da. +// +// Solidity: function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapUpdateByIndex(operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapUpdateByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, index) +} + +// GetQuorumBitmapUpdateByIndex is a free data retrieval call binding the contract method 0x1eb812da. +// +// Solidity: function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapUpdateByIndex(operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapUpdateByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, index) +} + +// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. +// +// Solidity: function indexRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) IndexRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "indexRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. +// +// Solidity: function indexRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) IndexRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.IndexRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. +// +// Solidity: function indexRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) IndexRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.IndexRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. +// +// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) IsChurnApproverSaltUsed(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "isChurnApproverSaltUsed", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. +// +// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) IsChurnApproverSaltUsed(arg0 [32]byte) (bool, error) { + return _ContractRegistryCoordinator.Contract.IsChurnApproverSaltUsed(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. +// +// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) IsChurnApproverSaltUsed(arg0 [32]byte) (bool, error) { + return _ContractRegistryCoordinator.Contract.IsChurnApproverSaltUsed(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. +// +// Solidity: function numRegistries() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) NumRegistries(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "numRegistries") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. +// +// Solidity: function numRegistries() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) NumRegistries() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.NumRegistries(&_ContractRegistryCoordinator.CallOpts) +} + +// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. +// +// Solidity: function numRegistries() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) NumRegistries() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.NumRegistries(&_ContractRegistryCoordinator.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Owner() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Owner(&_ContractRegistryCoordinator.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Owner() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Owner(&_ContractRegistryCoordinator.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "paused", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Paused(index uint8) (bool, error) { + return _ContractRegistryCoordinator.Contract.Paused(&_ContractRegistryCoordinator.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Paused(index uint8) (bool, error) { + return _ContractRegistryCoordinator.Contract.Paused(&_ContractRegistryCoordinator.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "paused0") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Paused0() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.Paused0(&_ContractRegistryCoordinator.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Paused0() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.Paused0(&_ContractRegistryCoordinator.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "pauserRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PauserRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.PauserRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) PauserRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.PauserRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// PubkeyRegistrationMessageHash is a free data retrieval call binding the contract method 0x3c2a7f4c. +// +// Solidity: function pubkeyRegistrationMessageHash(address operator) view returns((uint256,uint256)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) PubkeyRegistrationMessageHash(opts *bind.CallOpts, operator common.Address) (BN254G1Point, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "pubkeyRegistrationMessageHash", operator) + + if err != nil { + return *new(BN254G1Point), err + } + + out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) + + return out0, err + +} + +// PubkeyRegistrationMessageHash is a free data retrieval call binding the contract method 0x3c2a7f4c. +// +// Solidity: function pubkeyRegistrationMessageHash(address operator) view returns((uint256,uint256)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PubkeyRegistrationMessageHash(operator common.Address) (BN254G1Point, error) { + return _ContractRegistryCoordinator.Contract.PubkeyRegistrationMessageHash(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// PubkeyRegistrationMessageHash is a free data retrieval call binding the contract method 0x3c2a7f4c. +// +// Solidity: function pubkeyRegistrationMessageHash(address operator) view returns((uint256,uint256)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) PubkeyRegistrationMessageHash(operator common.Address) (BN254G1Point, error) { + return _ContractRegistryCoordinator.Contract.PubkeyRegistrationMessageHash(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// +// Solidity: function quorumCount() view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) QuorumCount(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "quorumCount") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// +// Solidity: function quorumCount() view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) QuorumCount() (uint8, error) { + return _ContractRegistryCoordinator.Contract.QuorumCount(&_ContractRegistryCoordinator.CallOpts) +} + +// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// +// Solidity: function quorumCount() view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) QuorumCount() (uint8, error) { + return _ContractRegistryCoordinator.Contract.QuorumCount(&_ContractRegistryCoordinator.CallOpts) +} + +// QuorumUpdateBlockNumber is a free data retrieval call binding the contract method 0x249a0c42. +// +// Solidity: function quorumUpdateBlockNumber(uint8 ) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) QuorumUpdateBlockNumber(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "quorumUpdateBlockNumber", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// QuorumUpdateBlockNumber is a free data retrieval call binding the contract method 0x249a0c42. +// +// Solidity: function quorumUpdateBlockNumber(uint8 ) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) QuorumUpdateBlockNumber(arg0 uint8) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.QuorumUpdateBlockNumber(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// QuorumUpdateBlockNumber is a free data retrieval call binding the contract method 0x249a0c42. +// +// Solidity: function quorumUpdateBlockNumber(uint8 ) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) QuorumUpdateBlockNumber(arg0 uint8) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.QuorumUpdateBlockNumber(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// Registries is a free data retrieval call binding the contract method 0x6347c900. +// +// Solidity: function registries(uint256 ) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Registries(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "registries", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Registries is a free data retrieval call binding the contract method 0x6347c900. +// +// Solidity: function registries(uint256 ) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Registries(arg0 *big.Int) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Registries(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// Registries is a free data retrieval call binding the contract method 0x6347c900. +// +// Solidity: function registries(uint256 ) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Registries(arg0 *big.Int) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Registries(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// +// Solidity: function serviceManager() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) ServiceManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "serviceManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// +// Solidity: function serviceManager() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) ServiceManager() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ServiceManager(&_ContractRegistryCoordinator.CallOpts) +} + +// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// +// Solidity: function serviceManager() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) ServiceManager() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ServiceManager(&_ContractRegistryCoordinator.CallOpts) +} + +// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. +// +// Solidity: function stakeRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) StakeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "stakeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. +// +// Solidity: function stakeRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) StakeRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.StakeRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. +// +// Solidity: function stakeRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) StakeRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.StakeRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// CreateQuorum is a paid mutator transaction binding the contract method 0xd75b4c88. +// +// Solidity: function createQuorum((uint32,uint16,uint16) operatorSetParams, uint96 minimumStake, (address,uint96)[] strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) CreateQuorum(opts *bind.TransactOpts, operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "createQuorum", operatorSetParams, minimumStake, strategyParams) +} + +// CreateQuorum is a paid mutator transaction binding the contract method 0xd75b4c88. +// +// Solidity: function createQuorum((uint32,uint16,uint16) operatorSetParams, uint96 minimumStake, (address,uint96)[] strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) CreateQuorum(operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.CreateQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorSetParams, minimumStake, strategyParams) +} + +// CreateQuorum is a paid mutator transaction binding the contract method 0xd75b4c88. +// +// Solidity: function createQuorum((uint32,uint16,uint16) operatorSetParams, uint96 minimumStake, (address,uint96)[] strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) CreateQuorum(operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.CreateQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorSetParams, minimumStake, strategyParams) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xca4f2d97. +// +// Solidity: function deregisterOperator(bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) DeregisterOperator(opts *bind.TransactOpts, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "deregisterOperator", quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xca4f2d97. +// +// Solidity: function deregisterOperator(bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) DeregisterOperator(quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.DeregisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xca4f2d97. +// +// Solidity: function deregisterOperator(bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) DeregisterOperator(quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.DeregisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers) +} + +// EjectOperator is a paid mutator transaction binding the contract method 0x6e3b17db. +// +// Solidity: function ejectOperator(address operator, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) EjectOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "ejectOperator", operator, quorumNumbers) +} + +// EjectOperator is a paid mutator transaction binding the contract method 0x6e3b17db. +// +// Solidity: function ejectOperator(address operator, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) EjectOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.EjectOperator(&_ContractRegistryCoordinator.TransactOpts, operator, quorumNumbers) +} + +// EjectOperator is a paid mutator transaction binding the contract method 0x6e3b17db. +// +// Solidity: function ejectOperator(address operator, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) EjectOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.EjectOperator(&_ContractRegistryCoordinator.TransactOpts, operator, quorumNumbers) +} + +// Initialize is a paid mutator transaction binding the contract method 0xdd8283f3. +// +// Solidity: function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, (uint32,uint16,uint16)[] _operatorSetParams, uint96[] _minimumStakes, (address,uint96)[][] _strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "initialize", _initialOwner, _churnApprover, _ejector, _pauserRegistry, _initialPausedStatus, _operatorSetParams, _minimumStakes, _strategyParams) +} + +// Initialize is a paid mutator transaction binding the contract method 0xdd8283f3. +// +// Solidity: function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, (uint32,uint16,uint16)[] _operatorSetParams, uint96[] _minimumStakes, (address,uint96)[][] _strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Initialize(_initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Initialize(&_ContractRegistryCoordinator.TransactOpts, _initialOwner, _churnApprover, _ejector, _pauserRegistry, _initialPausedStatus, _operatorSetParams, _minimumStakes, _strategyParams) +} + +// Initialize is a paid mutator transaction binding the contract method 0xdd8283f3. +// +// Solidity: function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, (uint32,uint16,uint16)[] _operatorSetParams, uint96[] _minimumStakes, (address,uint96)[][] _strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) Initialize(_initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Initialize(&_ContractRegistryCoordinator.TransactOpts, _initialOwner, _churnApprover, _ejector, _pauserRegistry, _initialPausedStatus, _operatorSetParams, _minimumStakes, _strategyParams) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Pause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Pause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PauseAll() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.PauseAll(&_ContractRegistryCoordinator.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) PauseAll() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.PauseAll(&_ContractRegistryCoordinator.TransactOpts) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0xa50857bf. +// +// Solidity: function registerOperator(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) RegisterOperator(opts *bind.TransactOpts, quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "registerOperator", quorumNumbers, socket, params, operatorSignature) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0xa50857bf. +// +// Solidity: function registerOperator(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) RegisterOperator(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorSignature) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0xa50857bf. +// +// Solidity: function registerOperator(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) RegisterOperator(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorSignature) +} + +// RegisterOperatorWithChurn is a paid mutator transaction binding the contract method 0x9b5d177b. +// +// Solidity: function registerOperatorWithChurn(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint8,address)[] operatorKickParams, (bytes,bytes32,uint256) churnApproverSignature, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) RegisterOperatorWithChurn(opts *bind.TransactOpts, quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "registerOperatorWithChurn", quorumNumbers, socket, params, operatorKickParams, churnApproverSignature, operatorSignature) +} + +// RegisterOperatorWithChurn is a paid mutator transaction binding the contract method 0x9b5d177b. +// +// Solidity: function registerOperatorWithChurn(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint8,address)[] operatorKickParams, (bytes,bytes32,uint256) churnApproverSignature, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) RegisterOperatorWithChurn(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperatorWithChurn(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorKickParams, churnApproverSignature, operatorSignature) +} + +// RegisterOperatorWithChurn is a paid mutator transaction binding the contract method 0x9b5d177b. +// +// Solidity: function registerOperatorWithChurn(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint8,address)[] operatorKickParams, (bytes,bytes32,uint256) churnApproverSignature, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) RegisterOperatorWithChurn(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperatorWithChurn(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorKickParams, churnApproverSignature, operatorSignature) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RenounceOwnership(&_ContractRegistryCoordinator.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RenounceOwnership(&_ContractRegistryCoordinator.TransactOpts) +} + +// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. +// +// Solidity: function setChurnApprover(address _churnApprover) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetChurnApprover(opts *bind.TransactOpts, _churnApprover common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setChurnApprover", _churnApprover) +} + +// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. +// +// Solidity: function setChurnApprover(address _churnApprover) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetChurnApprover(_churnApprover common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetChurnApprover(&_ContractRegistryCoordinator.TransactOpts, _churnApprover) +} + +// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. +// +// Solidity: function setChurnApprover(address _churnApprover) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetChurnApprover(_churnApprover common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetChurnApprover(&_ContractRegistryCoordinator.TransactOpts, _churnApprover) +} + +// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. +// +// Solidity: function setEjector(address _ejector) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetEjector(opts *bind.TransactOpts, _ejector common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setEjector", _ejector) +} + +// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. +// +// Solidity: function setEjector(address _ejector) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetEjector(_ejector common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetEjector(&_ContractRegistryCoordinator.TransactOpts, _ejector) +} + +// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. +// +// Solidity: function setEjector(address _ejector) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetEjector(_ejector common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetEjector(&_ContractRegistryCoordinator.TransactOpts, _ejector) +} + +// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. +// +// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetOperatorSetParams(opts *bind.TransactOpts, quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setOperatorSetParams", quorumNumber, operatorSetParams) +} + +// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. +// +// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetOperatorSetParams(quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetOperatorSetParams(&_ContractRegistryCoordinator.TransactOpts, quorumNumber, operatorSetParams) +} + +// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. +// +// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetOperatorSetParams(quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetOperatorSetParams(&_ContractRegistryCoordinator.TransactOpts, quorumNumber, operatorSetParams) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetPauserRegistry(&_ContractRegistryCoordinator.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetPauserRegistry(&_ContractRegistryCoordinator.TransactOpts, newPauserRegistry) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.TransferOwnership(&_ContractRegistryCoordinator.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.TransferOwnership(&_ContractRegistryCoordinator.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Unpause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Unpause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// UpdateOperators is a paid mutator transaction binding the contract method 0x00cf2ab5. +// +// Solidity: function updateOperators(address[] operators) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) UpdateOperators(opts *bind.TransactOpts, operators []common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "updateOperators", operators) +} + +// UpdateOperators is a paid mutator transaction binding the contract method 0x00cf2ab5. +// +// Solidity: function updateOperators(address[] operators) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) UpdateOperators(operators []common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperators(&_ContractRegistryCoordinator.TransactOpts, operators) +} + +// UpdateOperators is a paid mutator transaction binding the contract method 0x00cf2ab5. +// +// Solidity: function updateOperators(address[] operators) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) UpdateOperators(operators []common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperators(&_ContractRegistryCoordinator.TransactOpts, operators) +} + +// UpdateOperatorsForQuorum is a paid mutator transaction binding the contract method 0x5140a548. +// +// Solidity: function updateOperatorsForQuorum(address[][] operatorsPerQuorum, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) UpdateOperatorsForQuorum(opts *bind.TransactOpts, operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "updateOperatorsForQuorum", operatorsPerQuorum, quorumNumbers) +} + +// UpdateOperatorsForQuorum is a paid mutator transaction binding the contract method 0x5140a548. +// +// Solidity: function updateOperatorsForQuorum(address[][] operatorsPerQuorum, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) UpdateOperatorsForQuorum(operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperatorsForQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorsPerQuorum, quorumNumbers) +} + +// UpdateOperatorsForQuorum is a paid mutator transaction binding the contract method 0x5140a548. +// +// Solidity: function updateOperatorsForQuorum(address[][] operatorsPerQuorum, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) UpdateOperatorsForQuorum(operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperatorsForQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorsPerQuorum, quorumNumbers) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) UpdateSocket(opts *bind.TransactOpts, socket string) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "updateSocket", socket) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) UpdateSocket(socket string) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateSocket(&_ContractRegistryCoordinator.TransactOpts, socket) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) UpdateSocket(socket string) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateSocket(&_ContractRegistryCoordinator.TransactOpts, socket) +} + +// ContractRegistryCoordinatorChurnApproverUpdatedIterator is returned from FilterChurnApproverUpdated and is used to iterate over the raw logs and unpacked data for ChurnApproverUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorChurnApproverUpdatedIterator struct { + Event *ContractRegistryCoordinatorChurnApproverUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorChurnApproverUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorChurnApproverUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorChurnApproverUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorChurnApproverUpdated represents a ChurnApproverUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorChurnApproverUpdated struct { + PrevChurnApprover common.Address + NewChurnApprover common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChurnApproverUpdated is a free log retrieval operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. +// +// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterChurnApproverUpdated(opts *bind.FilterOpts) (*ContractRegistryCoordinatorChurnApproverUpdatedIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "ChurnApproverUpdated") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorChurnApproverUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "ChurnApproverUpdated", logs: logs, sub: sub}, nil +} + +// WatchChurnApproverUpdated is a free log subscription operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. +// +// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchChurnApproverUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorChurnApproverUpdated) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "ChurnApproverUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "ChurnApproverUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChurnApproverUpdated is a log parse operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. +// +// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseChurnApproverUpdated(log types.Log) (*ContractRegistryCoordinatorChurnApproverUpdated, error) { + event := new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "ChurnApproverUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorEjectorUpdatedIterator is returned from FilterEjectorUpdated and is used to iterate over the raw logs and unpacked data for EjectorUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorEjectorUpdatedIterator struct { + Event *ContractRegistryCoordinatorEjectorUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorEjectorUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorEjectorUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorEjectorUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorEjectorUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorEjectorUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorEjectorUpdated represents a EjectorUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorEjectorUpdated struct { + PrevEjector common.Address + NewEjector common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEjectorUpdated is a free log retrieval operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. +// +// Solidity: event EjectorUpdated(address prevEjector, address newEjector) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterEjectorUpdated(opts *bind.FilterOpts) (*ContractRegistryCoordinatorEjectorUpdatedIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "EjectorUpdated") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorEjectorUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "EjectorUpdated", logs: logs, sub: sub}, nil +} + +// WatchEjectorUpdated is a free log subscription operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. +// +// Solidity: event EjectorUpdated(address prevEjector, address newEjector) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchEjectorUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorEjectorUpdated) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "EjectorUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorEjectorUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "EjectorUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEjectorUpdated is a log parse operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. +// +// Solidity: event EjectorUpdated(address prevEjector, address newEjector) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseEjectorUpdated(log types.Log) (*ContractRegistryCoordinatorEjectorUpdated, error) { + event := new(ContractRegistryCoordinatorEjectorUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "EjectorUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorInitializedIterator struct { + Event *ContractRegistryCoordinatorInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorInitialized represents a Initialized event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractRegistryCoordinatorInitializedIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorInitializedIterator{contract: _ContractRegistryCoordinator.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorInitialized) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseInitialized(log types.Log) (*ContractRegistryCoordinatorInitialized, error) { + event := new(ContractRegistryCoordinatorInitialized) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorDeregisteredIterator is returned from FilterOperatorDeregistered and is used to iterate over the raw logs and unpacked data for OperatorDeregistered events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorDeregisteredIterator struct { + Event *ContractRegistryCoordinatorOperatorDeregistered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorDeregisteredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorDeregistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorDeregistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorDeregisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorDeregisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorDeregistered represents a OperatorDeregistered event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorDeregistered struct { + Operator common.Address + OperatorId [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorDeregistered is a free log retrieval operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. +// +// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorDeregistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorDeregisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorDeregistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorDeregisteredIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorDeregistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorDeregistered is a free log subscription operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. +// +// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorDeregistered(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorDeregistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorDeregistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorDeregistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorDeregistered is a log parse operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. +// +// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorDeregistered(log types.Log) (*ContractRegistryCoordinatorOperatorDeregistered, error) { + event := new(ContractRegistryCoordinatorOperatorDeregistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorRegisteredIterator struct { + Event *ContractRegistryCoordinatorOperatorRegistered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorRegisteredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorRegistered represents a OperatorRegistered event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorRegistered struct { + Operator common.Address + OperatorId [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. +// +// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorRegisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorRegistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorRegisteredIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorRegistered is a free log subscription operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. +// +// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorRegistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorRegistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorRegistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRegistered is a log parse operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. +// +// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorRegistered(log types.Log) (*ContractRegistryCoordinatorOperatorRegistered, error) { + event := new(ContractRegistryCoordinatorOperatorRegistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator is returned from FilterOperatorSetParamsUpdated and is used to iterate over the raw logs and unpacked data for OperatorSetParamsUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator struct { + Event *ContractRegistryCoordinatorOperatorSetParamsUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorSetParamsUpdated represents a OperatorSetParamsUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSetParamsUpdated struct { + QuorumNumber uint8 + OperatorSetParams IRegistryCoordinatorOperatorSetParam + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetParamsUpdated is a free log retrieval operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. +// +// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorSetParamsUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorSetParamsUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorSetParamsUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetParamsUpdated is a free log subscription operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. +// +// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorSetParamsUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorSetParamsUpdated, quorumNumber []uint8) (event.Subscription, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorSetParamsUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSetParamsUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorSetParamsUpdated is a log parse operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. +// +// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorSetParamsUpdated(log types.Log) (*ContractRegistryCoordinatorOperatorSetParamsUpdated, error) { + event := new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSetParamsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorSocketUpdateIterator is returned from FilterOperatorSocketUpdate and is used to iterate over the raw logs and unpacked data for OperatorSocketUpdate events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSocketUpdateIterator struct { + Event *ContractRegistryCoordinatorOperatorSocketUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorSocketUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorSocketUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorSocketUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorSocketUpdate represents a OperatorSocketUpdate event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSocketUpdate struct { + OperatorId [32]byte + Socket string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSocketUpdate is a free log retrieval operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorSocketUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorSocketUpdateIterator, error) { + + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorSocketUpdate", operatorIdRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorSocketUpdateIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorSocketUpdate", logs: logs, sub: sub}, nil +} + +// WatchOperatorSocketUpdate is a free log subscription operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorSocketUpdate(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorSocketUpdate, operatorId [][32]byte) (event.Subscription, error) { + + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorSocketUpdate", operatorIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorSocketUpdate is a log parse operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorSocketUpdate(log types.Log) (*ContractRegistryCoordinatorOperatorSocketUpdate, error) { + event := new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOwnershipTransferredIterator struct { + Event *ContractRegistryCoordinatorOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOwnershipTransferred represents a OwnershipTransferred event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractRegistryCoordinatorOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOwnershipTransferredIterator{contract: _ContractRegistryCoordinator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOwnershipTransferred) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOwnershipTransferred(log types.Log) (*ContractRegistryCoordinatorOwnershipTransferred, error) { + event := new(ContractRegistryCoordinatorOwnershipTransferred) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPausedIterator struct { + Event *ContractRegistryCoordinatorPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorPaused represents a Paused event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractRegistryCoordinatorPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorPausedIterator{contract: _ContractRegistryCoordinator.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorPaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParsePaused(log types.Log) (*ContractRegistryCoordinatorPaused, error) { + event := new(ContractRegistryCoordinatorPaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPauserRegistrySetIterator struct { + Event *ContractRegistryCoordinatorPauserRegistrySet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorPauserRegistrySetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorPauserRegistrySet represents a PauserRegistrySet event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPauserRegistrySet struct { + PauserRegistry common.Address + NewPauserRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractRegistryCoordinatorPauserRegistrySetIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorPauserRegistrySetIterator{contract: _ContractRegistryCoordinator.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil +} + +// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorPauserRegistrySet) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParsePauserRegistrySet(log types.Log) (*ContractRegistryCoordinatorPauserRegistrySet, error) { + event := new(ContractRegistryCoordinatorPauserRegistrySet) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator is returned from FilterQuorumBlockNumberUpdated and is used to iterate over the raw logs and unpacked data for QuorumBlockNumberUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator struct { + Event *ContractRegistryCoordinatorQuorumBlockNumberUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorQuorumBlockNumberUpdated represents a QuorumBlockNumberUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorQuorumBlockNumberUpdated struct { + QuorumNumber uint8 + Blocknumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterQuorumBlockNumberUpdated is a free log retrieval operation binding the contract event 0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4. +// +// Solidity: event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterQuorumBlockNumberUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "QuorumBlockNumberUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "QuorumBlockNumberUpdated", logs: logs, sub: sub}, nil +} + +// WatchQuorumBlockNumberUpdated is a free log subscription operation binding the contract event 0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4. +// +// Solidity: event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchQuorumBlockNumberUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorQuorumBlockNumberUpdated, quorumNumber []uint8) (event.Subscription, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "QuorumBlockNumberUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "QuorumBlockNumberUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseQuorumBlockNumberUpdated is a log parse operation binding the contract event 0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4. +// +// Solidity: event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseQuorumBlockNumberUpdated(log types.Log) (*ContractRegistryCoordinatorQuorumBlockNumberUpdated, error) { + event := new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "QuorumBlockNumberUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorUnpausedIterator struct { + Event *ContractRegistryCoordinatorUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorUnpaused represents a Unpaused event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorUnpaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractRegistryCoordinatorUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorUnpausedIterator{contract: _ContractRegistryCoordinator.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorUnpaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseUnpaused(log types.Log) (*ContractRegistryCoordinatorUnpaused, error) { + event := new(ContractRegistryCoordinatorUnpaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/ServiceManagerBase/binding.go b/contracts/bindings/ServiceManagerBase/binding.go new file mode 100644 index 00000000..ea7f0ba6 --- /dev/null +++ b/contracts/bindings/ServiceManagerBase/binding.go @@ -0,0 +1,770 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractServiceManagerBase + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// ContractServiceManagerBaseMetaData contains all meta data concerning the ContractServiceManagerBase contract. +var ContractServiceManagerBaseMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x6", +} + +// ContractServiceManagerBaseABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractServiceManagerBaseMetaData.ABI instead. +var ContractServiceManagerBaseABI = ContractServiceManagerBaseMetaData.ABI + +// ContractServiceManagerBaseBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractServiceManagerBaseMetaData.Bin instead. +var ContractServiceManagerBaseBin = ContractServiceManagerBaseMetaData.Bin + +// DeployContractServiceManagerBase deploys a new Ethereum contract, binding an instance of ContractServiceManagerBase to it. +func DeployContractServiceManagerBase(auth *bind.TransactOpts, backend bind.ContractBackend, __delegationManager common.Address, __registryCoordinator common.Address, __stakeRegistry common.Address) (common.Address, *types.Transaction, *ContractServiceManagerBase, error) { + parsed, err := ContractServiceManagerBaseMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractServiceManagerBaseBin), backend, __delegationManager, __registryCoordinator, __stakeRegistry) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractServiceManagerBase{ContractServiceManagerBaseCaller: ContractServiceManagerBaseCaller{contract: contract}, ContractServiceManagerBaseTransactor: ContractServiceManagerBaseTransactor{contract: contract}, ContractServiceManagerBaseFilterer: ContractServiceManagerBaseFilterer{contract: contract}}, nil +} + +// ContractServiceManagerBaseMethods is an auto generated interface around an Ethereum contract. +type ContractServiceManagerBaseMethods interface { + ContractServiceManagerBaseCalls + ContractServiceManagerBaseTransacts + ContractServiceManagerBaseFilters +} + +// ContractServiceManagerBaseCalls is an auto generated interface that defines the call methods available for an Ethereum contract. +type ContractServiceManagerBaseCalls interface { + GetOperatorRestakedStrategies(opts *bind.CallOpts, operator common.Address) ([]common.Address, error) + + GetRestakeableStrategies(opts *bind.CallOpts) ([]common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) +} + +// ContractServiceManagerBaseTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. +type ContractServiceManagerBaseTransacts interface { + DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) + + Initialize(opts *bind.TransactOpts, initialOwner common.Address) (*types.Transaction, error) + + RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) + + RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + SetMetadataURI(opts *bind.TransactOpts, _metadataURI string) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) +} + +// ContractServiceManagerBaseFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. +type ContractServiceManagerBaseFilters interface { + FilterInitialized(opts *bind.FilterOpts) (*ContractServiceManagerBaseInitializedIterator, error) + WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractServiceManagerBaseInitialized) (event.Subscription, error) + ParseInitialized(log types.Log) (*ContractServiceManagerBaseInitialized, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractServiceManagerBaseOwnershipTransferredIterator, error) + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractServiceManagerBaseOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) + ParseOwnershipTransferred(log types.Log) (*ContractServiceManagerBaseOwnershipTransferred, error) +} + +// ContractServiceManagerBase is an auto generated Go binding around an Ethereum contract. +type ContractServiceManagerBase struct { + ContractServiceManagerBaseCaller // Read-only binding to the contract + ContractServiceManagerBaseTransactor // Write-only binding to the contract + ContractServiceManagerBaseFilterer // Log filterer for contract events +} + +// ContractServiceManagerBase implements the ContractServiceManagerBaseMethods interface. +var _ ContractServiceManagerBaseMethods = (*ContractServiceManagerBase)(nil) + +// ContractServiceManagerBaseCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractServiceManagerBaseCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractServiceManagerBaseCaller implements the ContractServiceManagerBaseCalls interface. +var _ ContractServiceManagerBaseCalls = (*ContractServiceManagerBaseCaller)(nil) + +// ContractServiceManagerBaseTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractServiceManagerBaseTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractServiceManagerBaseTransactor implements the ContractServiceManagerBaseTransacts interface. +var _ ContractServiceManagerBaseTransacts = (*ContractServiceManagerBaseTransactor)(nil) + +// ContractServiceManagerBaseFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractServiceManagerBaseFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractServiceManagerBaseFilterer implements the ContractServiceManagerBaseFilters interface. +var _ ContractServiceManagerBaseFilters = (*ContractServiceManagerBaseFilterer)(nil) + +// ContractServiceManagerBaseSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractServiceManagerBaseSession struct { + Contract *ContractServiceManagerBase // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractServiceManagerBaseCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractServiceManagerBaseCallerSession struct { + Contract *ContractServiceManagerBaseCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractServiceManagerBaseTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractServiceManagerBaseTransactorSession struct { + Contract *ContractServiceManagerBaseTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractServiceManagerBaseRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractServiceManagerBaseRaw struct { + Contract *ContractServiceManagerBase // Generic contract binding to access the raw methods on +} + +// ContractServiceManagerBaseCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractServiceManagerBaseCallerRaw struct { + Contract *ContractServiceManagerBaseCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractServiceManagerBaseTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractServiceManagerBaseTransactorRaw struct { + Contract *ContractServiceManagerBaseTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractServiceManagerBase creates a new instance of ContractServiceManagerBase, bound to a specific deployed contract. +func NewContractServiceManagerBase(address common.Address, backend bind.ContractBackend) (*ContractServiceManagerBase, error) { + contract, err := bindContractServiceManagerBase(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractServiceManagerBase{ContractServiceManagerBaseCaller: ContractServiceManagerBaseCaller{contract: contract}, ContractServiceManagerBaseTransactor: ContractServiceManagerBaseTransactor{contract: contract}, ContractServiceManagerBaseFilterer: ContractServiceManagerBaseFilterer{contract: contract}}, nil +} + +// NewContractServiceManagerBaseCaller creates a new read-only instance of ContractServiceManagerBase, bound to a specific deployed contract. +func NewContractServiceManagerBaseCaller(address common.Address, caller bind.ContractCaller) (*ContractServiceManagerBaseCaller, error) { + contract, err := bindContractServiceManagerBase(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractServiceManagerBaseCaller{contract: contract}, nil +} + +// NewContractServiceManagerBaseTransactor creates a new write-only instance of ContractServiceManagerBase, bound to a specific deployed contract. +func NewContractServiceManagerBaseTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractServiceManagerBaseTransactor, error) { + contract, err := bindContractServiceManagerBase(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractServiceManagerBaseTransactor{contract: contract}, nil +} + +// NewContractServiceManagerBaseFilterer creates a new log filterer instance of ContractServiceManagerBase, bound to a specific deployed contract. +func NewContractServiceManagerBaseFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractServiceManagerBaseFilterer, error) { + contract, err := bindContractServiceManagerBase(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractServiceManagerBaseFilterer{contract: contract}, nil +} + +// bindContractServiceManagerBase binds a generic wrapper to an already deployed contract. +func bindContractServiceManagerBase(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractServiceManagerBaseMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractServiceManagerBase *ContractServiceManagerBaseRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractServiceManagerBase.Contract.ContractServiceManagerBaseCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractServiceManagerBase *ContractServiceManagerBaseRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.ContractServiceManagerBaseTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractServiceManagerBase *ContractServiceManagerBaseRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.ContractServiceManagerBaseTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractServiceManagerBase *ContractServiceManagerBaseCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractServiceManagerBase.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.contract.Transact(opts, method, params...) +} + +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. +// +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractServiceManagerBase *ContractServiceManagerBaseCaller) GetOperatorRestakedStrategies(opts *bind.CallOpts, operator common.Address) ([]common.Address, error) { + var out []interface{} + err := _ContractServiceManagerBase.contract.Call(opts, &out, "getOperatorRestakedStrategies", operator) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. +// +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) { + return _ContractServiceManagerBase.Contract.GetOperatorRestakedStrategies(&_ContractServiceManagerBase.CallOpts, operator) +} + +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. +// +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractServiceManagerBase *ContractServiceManagerBaseCallerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) { + return _ContractServiceManagerBase.Contract.GetOperatorRestakedStrategies(&_ContractServiceManagerBase.CallOpts, operator) +} + +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. +// +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractServiceManagerBase *ContractServiceManagerBaseCaller) GetRestakeableStrategies(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _ContractServiceManagerBase.contract.Call(opts, &out, "getRestakeableStrategies") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. +// +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) GetRestakeableStrategies() ([]common.Address, error) { + return _ContractServiceManagerBase.Contract.GetRestakeableStrategies(&_ContractServiceManagerBase.CallOpts) +} + +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. +// +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractServiceManagerBase *ContractServiceManagerBaseCallerSession) GetRestakeableStrategies() ([]common.Address, error) { + return _ContractServiceManagerBase.Contract.GetRestakeableStrategies(&_ContractServiceManagerBase.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractServiceManagerBase *ContractServiceManagerBaseCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractServiceManagerBase.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) Owner() (common.Address, error) { + return _ContractServiceManagerBase.Contract.Owner(&_ContractServiceManagerBase.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractServiceManagerBase *ContractServiceManagerBaseCallerSession) Owner() (common.Address, error) { + return _ContractServiceManagerBase.Contract.Owner(&_ContractServiceManagerBase.CallOpts) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.DeregisterOperatorFromAVS(&_ContractServiceManagerBase.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.DeregisterOperatorFromAVS(&_ContractServiceManagerBase.TransactOpts, operator) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address initialOwner) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.contract.Transact(opts, "initialize", initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address initialOwner) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) Initialize(initialOwner common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.Initialize(&_ContractServiceManagerBase.TransactOpts, initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address initialOwner) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorSession) Initialize(initialOwner common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.Initialize(&_ContractServiceManagerBase.TransactOpts, initialOwner) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractServiceManagerBase.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.RegisterOperatorToAVS(&_ContractServiceManagerBase.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.RegisterOperatorToAVS(&_ContractServiceManagerBase.TransactOpts, operator, operatorSignature) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractServiceManagerBase.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.RenounceOwnership(&_ContractServiceManagerBase.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.RenounceOwnership(&_ContractServiceManagerBase.TransactOpts) +} + +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. +// +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactor) SetMetadataURI(opts *bind.TransactOpts, _metadataURI string) (*types.Transaction, error) { + return _ContractServiceManagerBase.contract.Transact(opts, "setMetadataURI", _metadataURI) +} + +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. +// +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) SetMetadataURI(_metadataURI string) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.SetMetadataURI(&_ContractServiceManagerBase.TransactOpts, _metadataURI) +} + +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. +// +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorSession) SetMetadataURI(_metadataURI string) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.SetMetadataURI(&_ContractServiceManagerBase.TransactOpts, _metadataURI) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.TransferOwnership(&_ContractServiceManagerBase.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractServiceManagerBase *ContractServiceManagerBaseTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractServiceManagerBase.Contract.TransferOwnership(&_ContractServiceManagerBase.TransactOpts, newOwner) +} + +// ContractServiceManagerBaseInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractServiceManagerBase contract. +type ContractServiceManagerBaseInitializedIterator struct { + Event *ContractServiceManagerBaseInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractServiceManagerBaseInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractServiceManagerBaseInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractServiceManagerBaseInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractServiceManagerBaseInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractServiceManagerBaseInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractServiceManagerBaseInitialized represents a Initialized event raised by the ContractServiceManagerBase contract. +type ContractServiceManagerBaseInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractServiceManagerBase *ContractServiceManagerBaseFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractServiceManagerBaseInitializedIterator, error) { + + logs, sub, err := _ContractServiceManagerBase.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractServiceManagerBaseInitializedIterator{contract: _ContractServiceManagerBase.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractServiceManagerBase *ContractServiceManagerBaseFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractServiceManagerBaseInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractServiceManagerBase.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractServiceManagerBaseInitialized) + if err := _ContractServiceManagerBase.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractServiceManagerBase *ContractServiceManagerBaseFilterer) ParseInitialized(log types.Log) (*ContractServiceManagerBaseInitialized, error) { + event := new(ContractServiceManagerBaseInitialized) + if err := _ContractServiceManagerBase.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractServiceManagerBaseOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractServiceManagerBase contract. +type ContractServiceManagerBaseOwnershipTransferredIterator struct { + Event *ContractServiceManagerBaseOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractServiceManagerBaseOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractServiceManagerBaseOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractServiceManagerBaseOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractServiceManagerBaseOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractServiceManagerBaseOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractServiceManagerBaseOwnershipTransferred represents a OwnershipTransferred event raised by the ContractServiceManagerBase contract. +type ContractServiceManagerBaseOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractServiceManagerBase *ContractServiceManagerBaseFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractServiceManagerBaseOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractServiceManagerBase.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ContractServiceManagerBaseOwnershipTransferredIterator{contract: _ContractServiceManagerBase.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractServiceManagerBase *ContractServiceManagerBaseFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractServiceManagerBaseOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractServiceManagerBase.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractServiceManagerBaseOwnershipTransferred) + if err := _ContractServiceManagerBase.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractServiceManagerBase *ContractServiceManagerBaseFilterer) ParseOwnershipTransferred(log types.Log) (*ContractServiceManagerBaseOwnershipTransferred, error) { + event := new(ContractServiceManagerBaseOwnershipTransferred) + if err := _ContractServiceManagerBase.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/Slasher/binding.go b/contracts/bindings/Slasher/binding.go deleted file mode 100644 index 38045c7a..00000000 --- a/contracts/bindings/Slasher/binding.go +++ /dev/null @@ -1,2699 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contractSlasher - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// ISlasherMiddlewareDetails is an auto generated low-level Go binding around an user-defined struct. -type ISlasherMiddlewareDetails struct { - RegistrationMayBeginAtBlock uint32 - ContractCanSlashOperatorUntilBlock uint32 - LatestUpdateBlock uint32 -} - -// ISlasherMiddlewareTimes is an auto generated low-level Go binding around an user-defined struct. -type ISlasherMiddlewareTimes struct { - StalestUpdateBlock uint32 - LatestServeUntilBlock uint32 -} - -// ContractSlasherMetaData contains all meta data concerning the ContractSlasher contract. -var ContractSlasherMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractIDelegationManager\",\"name\":\"_delegation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previouslySlashedAddress\",\"type\":\"address\"}],\"name\":\"FrozenStatusReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\"}],\"name\":\"MiddlewareTimesAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slashedOperator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slashingContract\",\"type\":\"address\"}],\"name\":\"OperatorFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"OptedIntoSlashing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"contractCanSlashOperatorUntilBlock\",\"type\":\"uint32\"}],\"name\":\"SlashingAbilityRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toBeSlashed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"slashingContract\",\"type\":\"address\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\"}],\"name\":\"canWithdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"contractCanSlashOperatorUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contractIDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toBeFrozen\",\"type\":\"address\"}],\"name\":\"freezeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"}],\"name\":\"getCorrectValueForInsertAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getMiddlewareTimesIndexServeUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getMiddlewareTimesIndexStalestUpdateBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"node\",\"type\":\"uint256\"}],\"name\":\"getPreviousWhitelistedContractByUpdate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialPausedStatus\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"latestUpdateBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"middlewareTimesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"arrayIndex\",\"type\":\"uint256\"}],\"name\":\"operatorToMiddlewareTimes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\"}],\"internalType\":\"structISlasher.MiddlewareTimes\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"operatorWhitelistedContractsLinkedListEntry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"operatorWhitelistedContractsLinkedListSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"optIntoSlashing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordFirstStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordLastStakeUpdateAndRevokeSlashingAbility\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"insertAfter\",\"type\":\"uint256\"}],\"name\":\"recordStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"frozenAddresses\",\"type\":\"address[]\"}],\"name\":\"resetFrozenStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"whitelistedContractDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"registrationMayBeginAtBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"contractCanSlashOperatorUntilBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestUpdateBlock\",\"type\":\"uint32\"}],\"internalType\":\"structISlasher.MiddlewareDetails\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162002cd738038062002cd7833981016040819052620000349162000134565b6001600160a01b03808316608052811660a0526200005162000059565b505062000173565b600054610100900460ff1615620000c65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000119576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013157600080fd5b50565b600080604083850312156200014857600080fd5b825162000155816200011b565b602084015190925062000168816200011b565b809150509250929050565b60805160a051612b29620001ae600039600081816105c8015281816114990152818161152b015261167b015260006103070152612b296000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80637259a45c1161011a578063d7b7fa13116100ad578063e58398361161007c578063e5839836146105ea578063e921d4fa146105fd578063f2fde38b14610626578063f73b751914610639578063fabc1cbc1461064c57600080fd5b8063d7b7fa13146104b8578063d98128c01461056a578063da16e29b1461057d578063df5cf723146105c357600080fd5b8063886f1195116100e9578063886f1195146104585780638da5cb5b1461046b578063a49db7321461047c578063c747075b146104a557600080fd5b80637259a45c146103ef5780637cf72bba146104025780638105e04314610415578063855fcc4a1461042857600080fd5b806338c8ee64116101925780635c975abb116101615780635c975abb1461037c5780636f0c2f741461038e578063715018a6146103d4578063723e59c7146103dc57600080fd5b806338c8ee64146102ef57806339b70e3814610302578063595c6a67146103415780635ac86ab71461034957600080fd5b80631794bb3c116101ce5780631794bb3c1461024e5780631874e5ae14610261578063282670fc1461028e57806335571676146102c557600080fd5b80630ffabbce1461020057806310d67a2f14610215578063136439dd14610228578063175d32051461023b575b600080fd5b61021361020e3660046126e6565b61065f565b005b61021361022336600461271b565b61078f565b610213610236366004612738565b610842565b6102136102493660046126e6565b610981565b61021361025c366004612751565b610aab565b61027461026f3660046126e6565b610bc9565b60405163ffffffff90911681526020015b60405180910390f35b6102a161029c366004612792565b610c14565b60408051825163ffffffff9081168252602093840151169281019290925201610285565b6102d86102d3366004612792565b610c8b565b604080519215158352602083019190915201610285565b6102136102fd36600461271b565b610cba565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610285565b610213610d88565b61036c6103573660046127be565b606654600160ff9092169190911b9081161490565b6040519015158152602001610285565b6066545b604051908152602001610285565b61027461039c3660046127e1565b6001600160a01b039182166000908152609760209081526040808320939094168252919091522054600160201b900463ffffffff1690565b610213610e4f565b6103806103ea3660046126e6565b610e63565b6102746103fd3660046126e6565b610f73565b61021361041036600461281a565b610fc3565b61036c61042336600461288f565b61100d565b61043b6104363660046127e1565b61116f565b604080519315158452602084019290925290820152606001610285565b606554610329906001600160a01b031681565b6033546001600160a01b0316610329565b61038061048a36600461271b565b6001600160a01b03166000908152609a602052604090205490565b6102136104b33660046128cd565b6111b2565b61053b6104c63660046127e1565b6040805160608082018352600080835260208084018290529284018190526001600160a01b0395861681526097835283812094909516855292815292819020815192830182525463ffffffff8082168452600160201b8204811694840194909452600160401b90049092169181019190915290565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610285565b61036c6105783660046127e1565b611405565b61027461058b3660046127e1565b6001600160a01b039182166000908152609760209081526040808320939094168252919091522054600160401b900463ffffffff1690565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b61036c6105f836600461271b565b611451565b61038061060b36600461271b565b6001600160a01b031660009081526099602052604090205490565b61021361063436600461271b565b6115c7565b61021361064736600461271b565b61163d565b61021361065a366004612738565b61176c565b6001600160a01b03821660009081526097602090815260408083203384529091529020548290600160201b900463ffffffff908116146106ba5760405162461bcd60e51b81526004016106b19061291a565b60405180910390fd5b6106c58343846118c8565b6106e7336001600160a01b038516600090815260996020526040902090611c5e565b61077f5760405162461bcd60e51b815260206004820152605760248201527f536c61736865722e7265636f72644c6173745374616b65557064617465416e6460448201527f5265766f6b65536c617368696e674162696c6974793a2052656d6f76696e672060648201527f6d6964646c657761726520756e7375636365737366756c000000000000000000608482015260a4016106b1565b61078a833384611cf8565b505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108069190612990565b6001600160a01b0316336001600160a01b0316146108365760405162461bcd60e51b81526004016106b1906129ad565b61083f81611e03565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561088a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ae91906129f7565b6108ca5760405162461bcd60e51b81526004016106b190612a19565b606654818116146109435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106b1565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b606654600190600290811614156109aa5760405162461bcd60e51b81526004016106b190612a61565b6001600160a01b03831660009081526097602090815260408083203384529091529020548390600160201b900463ffffffff908116146109fc5760405162461bcd60e51b81526004016106b19061291a565b610a078443856118c8565b610a29336001600160a01b038616600090815260996020526040902090611efa565b610aa55760405162461bcd60e51b815260206004820152604160248201527f536c61736865722e7265636f726446697273745374616b655570646174653a2060448201527f417070656e64696e67206d6964646c657761726520756e7375636365737366756064820152601b60fa1b608482015260a4016106b1565b50505050565b600054610100900460ff1615808015610acb5750600054600160ff909116105b80610ae55750303b158015610ae5575060005460ff166001145b610b485760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106b1565b6000805460ff191660011790558015610b6b576000805461ff0019166101001790555b610b758383611f08565b610b7e84611fee565b8015610aa5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6001600160a01b0382166000908152609a60205260408120805463ffffffff8416908110610bf957610bf9612a98565b60009182526020909120015463ffffffff1690505b92915050565b60408051808201909152600080825260208201526001600160a01b0383166000908152609a60205260409020805483908110610c5257610c52612a98565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b6001600160a01b03821660009081526099602052604081208190610caf9084612040565b915091509250929050565b60665460029060049081161415610ce35760405162461bcd60e51b81526004016106b190612a61565b610ced8233611405565b610d7a5760405162461bcd60e51b815260206004820152605260248201527f536c61736865722e667265657a654f70657261746f723a206d73672e73656e6460448201527f657220646f6573206e6f742068617665207065726d697373696f6e20746f20736064820152713630b9b4103a3434b99037b832b930ba37b960711b608482015260a4016106b1565b610d84823361204f565b5050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df491906129f7565b610e105760405162461bcd60e51b81526004016106b190612a19565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610e576120c1565b610e616000611fee565b565b6001600160a01b038281166000818152609960209081526040808320838052600190810183528184209084528252808320549383526097825280832094841683529390529182205463ffffffff848116600160401b909204161115610ecc576000915050610c0e565b6001600160a01b0384166000908152609960205260408120610eee908361211b565b9150505b8015801590610f3657506001600160a01b0385811660009081526097602090815260408083209386168352929052205463ffffffff858116600160401b9092041611155b15610f6b576001600160a01b03851660009081526099602052604090209091508190610f62908261211b565b9150610ef29050565b509392505050565b6001600160a01b0382166000908152609a60205260408120805463ffffffff8416908110610fa357610fa3612a98565b600091825260209091200154600160201b900463ffffffff169392505050565b610fcb6120c1565b60005b8181101561078a57611005838383818110610feb57610feb612a98565b9050602002016020810190611000919061271b565b61212a565b600101610fce565b6001600160a01b0383166000908152609a602052604081205461103257506001611168565b6001600160a01b0384166000908152609a6020526040812080548490811061105c5761105c612a98565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b909204811693830193909352909250908516108015906110ba57506001600160a01b038516600090815260996020526040902054155b15611136576001600160a01b0385166000908152609a6020526040902080546110e590600190612ac4565b815481106110f5576110f5612a98565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b909104811691909201819052439091161191506111689050565b806000015163ffffffff168463ffffffff161080156111645750806020015163ffffffff164363ffffffff16115b9150505b9392505050565b6001600160a01b0382166000908152609960205260408120819081906111a49061119f866001600160a01b031690565b612194565b9250925092505b9250925092565b6001600160a01b03841660009081526097602090815260408083203384529091529020548490600160201b900463ffffffff908116146112045760405162461bcd60e51b81526004016106b19061291a565b438463ffffffff16111561128a5760405162461bcd60e51b815260206004820152604160248201527f536c61736865722e7265636f72645374616b655570646174653a2063616e6e6f60448201527f742070726f766964652075706461746520666f722066757475726520626c6f636064820152606b60f81b608482015260a4016106b1565b6112958585856118c8565b6001600160a01b038516600090815260996020526040902054600114611359576112d7336001600160a01b038716600090815260996020526040902090611c5e565b6113495760405162461bcd60e51b815260206004820152603b60248201527f536c61736865722e7265636f72645374616b655570646174653a2052656d6f7660448201527f696e67206d6964646c657761726520756e7375636365737366756c000000000060648201526084016106b1565b6113548585846121e4565b6113fe565b336001600160a01b038616600090815260996020908152604080832083805260019081018352818420908452909152902054146113fe5760405162461bcd60e51b815260206004820152603960248201527f536c61736865722e7265636f72645374616b655570646174653a2043616c6c6560448201527f72206973206e6f7420746865206c69737420656e7472616e740000000000000060648201526084016106b1565b5050505050565b6001600160a01b038281166000908152609760209081526040808320938516835292905290812054600160201b900463ffffffff1643101561144957506001610c0e565b506000610c0e565b6001600160a01b03811660009081526098602052604081205460ff161561147a57506001919050565b604051633e28391d60e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633e28391d90602401602060405180830381865afa1580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150491906129f7565b156115ba57604051631976849960e21b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906365da126490602401602060405180830381865afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190612990565b6001600160a01b031660009081526098602052604090205460ff169392505050565b506000919050565b919050565b6115cf6120c1565b6001600160a01b0381166116345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b1565b61083f81611fee565b606654600090600190811614156116665760405162461bcd60e51b81526004016106b190612a61565b6040516336b87bd760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636d70f7ae90602401602060405180830381865afa1580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ee91906129f7565b611762576040805162461bcd60e51b81526020600482015260248101919091527f536c61736865722e6f7074496e746f536c617368696e673a206d73672e73656e60448201527f646572206973206e6f7420612072656769737465726564206f70657261746f7260648201526084016106b1565b610d84338361249b565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e39190612990565b6001600160a01b0316336001600160a01b0316146118135760405162461bcd60e51b81526004016106b1906129ad565b6066541981196066541916146118915760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106b1565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610976565b6001600160a01b038316600090815260976020908152604080832033845290915290205463ffffffff808416600160401b9092041611156119845760405162461bcd60e51b815260206004820152604a60248201527f536c61736865722e5f7265636f7264557064617465416e64416464546f4d696460448201527f646c657761726554696d65733a2063616e2774207075736820612070726576696064820152696f75732075706461746560b01b608482015260a4016106b1565b6001600160a01b0383166000818152609760209081526040808320338452825280832080546bffffffff00000000000000001916600160401b63ffffffff89160217905580518082018252838152808301849052938352609a9091529020548015611a51576001600160a01b0385166000908152609a60205260409020611a0c600183612ac4565b81548110611a1c57611a1c612a98565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b909104169181019190915291505b60008290506000836020015163ffffffff168563ffffffff161115611a80575063ffffffff8416602082015260015b6001600160a01b038716600090815260996020526040902054611aae575063ffffffff851681526001611b83565b336001600160a01b0388166000908152609960209081526040808320838052600190810183528184209084529091529020541415611b8357600080611b0b336001600160a01b038b1660009081526099602052604090209061211b565b915091508115611b72576001600160a01b03898116600090815260976020908152604080832093851683529290522054600160401b900463ffffffff908116908916811015611b625763ffffffff81168552611b6c565b63ffffffff891685525b50611b7c565b63ffffffff881684525b6001925050505b8015611c55576001600160a01b0387166000818152609a6020908152604082208054600181810183558285528385208851920180549489015163ffffffff908116600160201b0267ffffffffffffffff199096169316929092179390931790559290915290547f1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649918991611c179190612ac4565b8451602080870151604080516001600160a01b0390961686529185019390935263ffffffff9182169084015216606082015260800160405180910390a15b50505050505050565b6000811580611c745750611c728383612506565b155b15611c8157506000610c0e565b600082815260018481016020908152604080842084805290915280832054828452922054611cb3928692909190612582565b60008281526001848101602090815260408084208480529091528083208390558183528220829055845490918591611cec908490612ac4565b90915550919392505050565b63ffffffff8181161415611d825760405162461bcd60e51b8152602060048201526044602482018190527f536c61736865722e5f7265766f6b65536c617368696e674162696c6974793a20908201527f7365727665556e74696c426c6f636b2074696d65206d757374206265206c696d6064820152631a5d195960e21b608482015260a4016106b1565b6001600160a01b03838116600081815260976020908152604080832094871680845294825291829020805467ffffffff000000001916600160201b63ffffffff88169081029190911790915591519182527f9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14910160405180910390a3505050565b6001600160a01b038116611e915760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106b1565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611168838360006125b7565b6065546001600160a01b0316158015611f2957506001600160a01b03821615155b611fab5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106b1565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610d8482611e03565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080610caf848460006125ce565b6001600160a01b03821660009081526098602052604090205460ff16610d84576001600160a01b03808316600081815260986020526040808220805460ff1916600117905551928416927f444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba519190a35050565b6033546001600160a01b03163314610e615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106b1565b600080610caf848460016125ce565b6001600160a01b03811660009081526098602052604090205460ff161561083f576001600160a01b038116600081815260986020526040808220805460ff19169055517fd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d89190a250565b60008060006121a38585612506565b6121b5575060009150819050806111ab565b5050506000818152600183810160209081526040808420848052909152808320548284529220549091906111ab565b6000811561238e576001600160a01b038416600090815260996020526040902061220e9083612506565b612216575060015b8015801561225857506001600160a01b0384811660009081526097602090815260408083209386168352929052205463ffffffff848116600160401b90920416115b15612261575060015b806122d8576001600160a01b0384166000908152609960205260408120819061228a908561211b565b9150915081156122d5576001600160a01b0386811660009081526097602090815260408083209385168352929052205463ffffffff868116600160401b90920416116122d557600192505b50505b80612377576001600160a01b0384166000908152609960205260409020612300908333612617565b6123725760405162461bcd60e51b815260206004820152603c60248201527f536c61736865722e7265636f72645374616b655570646174653a20496e73657260448201527f74696e67206d6964646c657761726520756e7375636365737366756c0000000060648201526084016106b1565b610aa5565b6123818484610e63565b91506123728484846121e4565b6001600160a01b03848116600090815260976020908152604080832060998352818420848052600190810184528285209085528352818420549094168352929052205463ffffffff848116600160401b90920416116123eb575060015b8061248457612412336001600160a01b038616600090815260996020526040902090612626565b6123725760405162461bcd60e51b815260206004820152603e60248201527f536c61736865722e7265636f72645374616b655570646174653a20507265707060448201527f656e64696e67206d6964646c657761726520756e7375636365737366756c000060648201526084016106b1565b61248e8484610e63565b9150610aa58484846121e4565b6001600160a01b03808316600081815260976020908152604080832094861680845294909152808220805467ffffffff00000000191667ffffffff00000000179055517fefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d89190a35050565b6000818152600183016020908152604080832083805290915281205415801561254957506000828152600180850160209081526040808420928452919052902054155b1561257a57600080805260018085016020908152604080842092845291905290205482141561144957506001610c0e565b506001610c0e565b600082815260019094016020818152604080872093158088529382528087208690559486529081528385209115855252912055565b60006125c68460008585612634565b949350505050565b6000806125db8585612506565b6125ea5750600090508061260f565b5050600082815260018401602090815260408083208415158452909152902054801515905b935093915050565b60006125c68484846001612634565b6000611168838360016125b7565b60006126408584612506565b15801561265257506126528585612506565b156126b25760008481526001860160209081526040808320851515845290915290205461268186868686612582565b61268d86858386612582565b60018660000160008282546126a29190612adb565b90915550600192506125c6915050565b506000949350505050565b6001600160a01b038116811461083f57600080fd5b803563ffffffff811681146115c257600080fd5b600080604083850312156126f957600080fd5b8235612704816126bd565b9150612712602084016126d2565b90509250929050565b60006020828403121561272d57600080fd5b8135611168816126bd565b60006020828403121561274a57600080fd5b5035919050565b60008060006060848603121561276657600080fd5b8335612771816126bd565b92506020840135612781816126bd565b929592945050506040919091013590565b600080604083850312156127a557600080fd5b82356127b0816126bd565b946020939093013593505050565b6000602082840312156127d057600080fd5b813560ff8116811461116857600080fd5b600080604083850312156127f457600080fd5b82356127ff816126bd565b9150602083013561280f816126bd565b809150509250929050565b6000806020838503121561282d57600080fd5b823567ffffffffffffffff8082111561284557600080fd5b818501915085601f83011261285957600080fd5b81358181111561286857600080fd5b8660208260051b850101111561287d57600080fd5b60209290920196919550909350505050565b6000806000606084860312156128a457600080fd5b83356128af816126bd565b92506128bd602085016126d2565b9150604084013590509250925092565b600080600080608085870312156128e357600080fd5b84356128ee816126bd565b93506128fc602086016126d2565b925061290a604086016126d2565b9396929550929360600135925050565b60208082526050908201527f536c61736865722e6f6e6c7952656769737465726564466f725365727669636560408201527f3a204f70657261746f7220686173206e6f74206f7074656420696e746f20736c60608201526f30b9b434b73390313c9031b0b63632b960811b608082015260a00190565b6000602082840312156129a257600080fd5b8151611168816126bd565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612a0957600080fd5b8151801515811461116857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612ad657612ad6612aae565b500390565b60008219821115612aee57612aee612aae565b50019056fea2646970667358221220a9f8dd98b057b2ed1d3f1ee75258d0d3fe5c5c3f5120a48b6ace05334fa77a2364736f6c634300080c0033", -} - -// ContractSlasherABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractSlasherMetaData.ABI instead. -var ContractSlasherABI = ContractSlasherMetaData.ABI - -// ContractSlasherBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ContractSlasherMetaData.Bin instead. -var ContractSlasherBin = ContractSlasherMetaData.Bin - -// DeployContractSlasher deploys a new Ethereum contract, binding an instance of ContractSlasher to it. -func DeployContractSlasher(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _delegation common.Address) (common.Address, *types.Transaction, *ContractSlasher, error) { - parsed, err := ContractSlasherMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractSlasherBin), backend, _strategyManager, _delegation) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ContractSlasher{ContractSlasherCaller: ContractSlasherCaller{contract: contract}, ContractSlasherTransactor: ContractSlasherTransactor{contract: contract}, ContractSlasherFilterer: ContractSlasherFilterer{contract: contract}}, nil -} - -// ContractSlasherMethods is an auto generated interface around an Ethereum contract. -type ContractSlasherMethods interface { - ContractSlasherCalls - ContractSlasherTransacts - ContractSlasherFilters -} - -// ContractSlasherCalls is an auto generated interface that defines the call methods available for an Ethereum contract. -type ContractSlasherCalls interface { - CanSlash(opts *bind.CallOpts, toBeSlashed common.Address, slashingContract common.Address) (bool, error) - - CanWithdraw(opts *bind.CallOpts, operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (bool, error) - - ContractCanSlashOperatorUntilBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) - - Delegation(opts *bind.CallOpts) (common.Address, error) - - GetCorrectValueForInsertAfter(opts *bind.CallOpts, operator common.Address, updateBlock uint32) (*big.Int, error) - - GetMiddlewareTimesIndexServeUntilBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) - - GetMiddlewareTimesIndexStalestUpdateBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) - - GetPreviousWhitelistedContractByUpdate(opts *bind.CallOpts, operator common.Address, node *big.Int) (bool, *big.Int, error) - - IsFrozen(opts *bind.CallOpts, staker common.Address) (bool, error) - - LatestUpdateBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) - - MiddlewareTimesLength(opts *bind.CallOpts, operator common.Address) (*big.Int, error) - - OperatorToMiddlewareTimes(opts *bind.CallOpts, operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) - - OperatorWhitelistedContractsLinkedListEntry(opts *bind.CallOpts, operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) - - OperatorWhitelistedContractsLinkedListSize(opts *bind.CallOpts, operator common.Address) (*big.Int, error) - - Owner(opts *bind.CallOpts) (common.Address, error) - - Paused(opts *bind.CallOpts, index uint8) (bool, error) - - Paused0(opts *bind.CallOpts) (*big.Int, error) - - PauserRegistry(opts *bind.CallOpts) (common.Address, error) - - StrategyManager(opts *bind.CallOpts) (common.Address, error) - - WhitelistedContractDetails(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (ISlasherMiddlewareDetails, error) -} - -// ContractSlasherTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. -type ContractSlasherTransacts interface { - FreezeOperator(opts *bind.TransactOpts, toBeFrozen common.Address) (*types.Transaction, error) - - Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) - - OptIntoSlashing(opts *bind.TransactOpts, contractAddress common.Address) (*types.Transaction, error) - - Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) - - PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) - - RecordFirstStakeUpdate(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) - - RecordLastStakeUpdateAndRevokeSlashingAbility(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) - - RecordStakeUpdate(opts *bind.TransactOpts, operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) - - RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) - - ResetFrozenStatus(opts *bind.TransactOpts, frozenAddresses []common.Address) (*types.Transaction, error) - - SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) - - TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) - - Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) -} - -// ContractSlasherFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. -type ContractSlasherFilters interface { - FilterFrozenStatusReset(opts *bind.FilterOpts, previouslySlashedAddress []common.Address) (*ContractSlasherFrozenStatusResetIterator, error) - WatchFrozenStatusReset(opts *bind.WatchOpts, sink chan<- *ContractSlasherFrozenStatusReset, previouslySlashedAddress []common.Address) (event.Subscription, error) - ParseFrozenStatusReset(log types.Log) (*ContractSlasherFrozenStatusReset, error) - - FilterInitialized(opts *bind.FilterOpts) (*ContractSlasherInitializedIterator, error) - WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractSlasherInitialized) (event.Subscription, error) - ParseInitialized(log types.Log) (*ContractSlasherInitialized, error) - - FilterMiddlewareTimesAdded(opts *bind.FilterOpts) (*ContractSlasherMiddlewareTimesAddedIterator, error) - WatchMiddlewareTimesAdded(opts *bind.WatchOpts, sink chan<- *ContractSlasherMiddlewareTimesAdded) (event.Subscription, error) - ParseMiddlewareTimesAdded(log types.Log) (*ContractSlasherMiddlewareTimesAdded, error) - - FilterOperatorFrozen(opts *bind.FilterOpts, slashedOperator []common.Address, slashingContract []common.Address) (*ContractSlasherOperatorFrozenIterator, error) - WatchOperatorFrozen(opts *bind.WatchOpts, sink chan<- *ContractSlasherOperatorFrozen, slashedOperator []common.Address, slashingContract []common.Address) (event.Subscription, error) - ParseOperatorFrozen(log types.Log) (*ContractSlasherOperatorFrozen, error) - - FilterOptedIntoSlashing(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractSlasherOptedIntoSlashingIterator, error) - WatchOptedIntoSlashing(opts *bind.WatchOpts, sink chan<- *ContractSlasherOptedIntoSlashing, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) - ParseOptedIntoSlashing(log types.Log) (*ContractSlasherOptedIntoSlashing, error) - - FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractSlasherOwnershipTransferredIterator, error) - WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractSlasherOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) - ParseOwnershipTransferred(log types.Log) (*ContractSlasherOwnershipTransferred, error) - - FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractSlasherPausedIterator, error) - WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractSlasherPaused, account []common.Address) (event.Subscription, error) - ParsePaused(log types.Log) (*ContractSlasherPaused, error) - - FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractSlasherPauserRegistrySetIterator, error) - WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractSlasherPauserRegistrySet) (event.Subscription, error) - ParsePauserRegistrySet(log types.Log) (*ContractSlasherPauserRegistrySet, error) - - FilterSlashingAbilityRevoked(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractSlasherSlashingAbilityRevokedIterator, error) - WatchSlashingAbilityRevoked(opts *bind.WatchOpts, sink chan<- *ContractSlasherSlashingAbilityRevoked, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) - ParseSlashingAbilityRevoked(log types.Log) (*ContractSlasherSlashingAbilityRevoked, error) - - FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractSlasherUnpausedIterator, error) - WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractSlasherUnpaused, account []common.Address) (event.Subscription, error) - ParseUnpaused(log types.Log) (*ContractSlasherUnpaused, error) -} - -// ContractSlasher is an auto generated Go binding around an Ethereum contract. -type ContractSlasher struct { - ContractSlasherCaller // Read-only binding to the contract - ContractSlasherTransactor // Write-only binding to the contract - ContractSlasherFilterer // Log filterer for contract events -} - -// ContractSlasher implements the ContractSlasherMethods interface. -var _ ContractSlasherMethods = (*ContractSlasher)(nil) - -// ContractSlasherCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractSlasherCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractSlasherCaller implements the ContractSlasherCalls interface. -var _ ContractSlasherCalls = (*ContractSlasherCaller)(nil) - -// ContractSlasherTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractSlasherTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractSlasherTransactor implements the ContractSlasherTransacts interface. -var _ ContractSlasherTransacts = (*ContractSlasherTransactor)(nil) - -// ContractSlasherFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractSlasherFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractSlasherFilterer implements the ContractSlasherFilters interface. -var _ ContractSlasherFilters = (*ContractSlasherFilterer)(nil) - -// ContractSlasherSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ContractSlasherSession struct { - Contract *ContractSlasher // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractSlasherCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ContractSlasherCallerSession struct { - Contract *ContractSlasherCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ContractSlasherTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ContractSlasherTransactorSession struct { - Contract *ContractSlasherTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractSlasherRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractSlasherRaw struct { - Contract *ContractSlasher // Generic contract binding to access the raw methods on -} - -// ContractSlasherCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractSlasherCallerRaw struct { - Contract *ContractSlasherCaller // Generic read-only contract binding to access the raw methods on -} - -// ContractSlasherTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractSlasherTransactorRaw struct { - Contract *ContractSlasherTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewContractSlasher creates a new instance of ContractSlasher, bound to a specific deployed contract. -func NewContractSlasher(address common.Address, backend bind.ContractBackend) (*ContractSlasher, error) { - contract, err := bindContractSlasher(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ContractSlasher{ContractSlasherCaller: ContractSlasherCaller{contract: contract}, ContractSlasherTransactor: ContractSlasherTransactor{contract: contract}, ContractSlasherFilterer: ContractSlasherFilterer{contract: contract}}, nil -} - -// NewContractSlasherCaller creates a new read-only instance of ContractSlasher, bound to a specific deployed contract. -func NewContractSlasherCaller(address common.Address, caller bind.ContractCaller) (*ContractSlasherCaller, error) { - contract, err := bindContractSlasher(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ContractSlasherCaller{contract: contract}, nil -} - -// NewContractSlasherTransactor creates a new write-only instance of ContractSlasher, bound to a specific deployed contract. -func NewContractSlasherTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractSlasherTransactor, error) { - contract, err := bindContractSlasher(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ContractSlasherTransactor{contract: contract}, nil -} - -// NewContractSlasherFilterer creates a new log filterer instance of ContractSlasher, bound to a specific deployed contract. -func NewContractSlasherFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractSlasherFilterer, error) { - contract, err := bindContractSlasher(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ContractSlasherFilterer{contract: contract}, nil -} - -// bindContractSlasher binds a generic wrapper to an already deployed contract. -func bindContractSlasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractSlasherMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractSlasher *ContractSlasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractSlasher.Contract.ContractSlasherCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractSlasher *ContractSlasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractSlasher.Contract.ContractSlasherTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractSlasher *ContractSlasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractSlasher.Contract.ContractSlasherTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ContractSlasher *ContractSlasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ContractSlasher.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ContractSlasher *ContractSlasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractSlasher.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ContractSlasher *ContractSlasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ContractSlasher.Contract.contract.Transact(opts, method, params...) -} - -// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. -// -// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) -func (_ContractSlasher *ContractSlasherCaller) CanSlash(opts *bind.CallOpts, toBeSlashed common.Address, slashingContract common.Address) (bool, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "canSlash", toBeSlashed, slashingContract) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. -// -// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) -func (_ContractSlasher *ContractSlasherSession) CanSlash(toBeSlashed common.Address, slashingContract common.Address) (bool, error) { - return _ContractSlasher.Contract.CanSlash(&_ContractSlasher.CallOpts, toBeSlashed, slashingContract) -} - -// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. -// -// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) -func (_ContractSlasher *ContractSlasherCallerSession) CanSlash(toBeSlashed common.Address, slashingContract common.Address) (bool, error) { - return _ContractSlasher.Contract.CanSlash(&_ContractSlasher.CallOpts, toBeSlashed, slashingContract) -} - -// CanWithdraw is a free data retrieval call binding the contract method 0x8105e043. -// -// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) view returns(bool) -func (_ContractSlasher *ContractSlasherCaller) CanWithdraw(opts *bind.CallOpts, operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (bool, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "canWithdraw", operator, withdrawalStartBlock, middlewareTimesIndex) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// CanWithdraw is a free data retrieval call binding the contract method 0x8105e043. -// -// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) view returns(bool) -func (_ContractSlasher *ContractSlasherSession) CanWithdraw(operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (bool, error) { - return _ContractSlasher.Contract.CanWithdraw(&_ContractSlasher.CallOpts, operator, withdrawalStartBlock, middlewareTimesIndex) -} - -// CanWithdraw is a free data retrieval call binding the contract method 0x8105e043. -// -// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) view returns(bool) -func (_ContractSlasher *ContractSlasherCallerSession) CanWithdraw(operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (bool, error) { - return _ContractSlasher.Contract.CanWithdraw(&_ContractSlasher.CallOpts, operator, withdrawalStartBlock, middlewareTimesIndex) -} - -// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. -// -// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) -func (_ContractSlasher *ContractSlasherCaller) ContractCanSlashOperatorUntilBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "contractCanSlashOperatorUntilBlock", operator, serviceContract) - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. -// -// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) -func (_ContractSlasher *ContractSlasherSession) ContractCanSlashOperatorUntilBlock(operator common.Address, serviceContract common.Address) (uint32, error) { - return _ContractSlasher.Contract.ContractCanSlashOperatorUntilBlock(&_ContractSlasher.CallOpts, operator, serviceContract) -} - -// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. -// -// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) -func (_ContractSlasher *ContractSlasherCallerSession) ContractCanSlashOperatorUntilBlock(operator common.Address, serviceContract common.Address) (uint32, error) { - return _ContractSlasher.Contract.ContractCanSlashOperatorUntilBlock(&_ContractSlasher.CallOpts, operator, serviceContract) -} - -// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. -// -// Solidity: function delegation() view returns(address) -func (_ContractSlasher *ContractSlasherCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "delegation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. -// -// Solidity: function delegation() view returns(address) -func (_ContractSlasher *ContractSlasherSession) Delegation() (common.Address, error) { - return _ContractSlasher.Contract.Delegation(&_ContractSlasher.CallOpts) -} - -// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. -// -// Solidity: function delegation() view returns(address) -func (_ContractSlasher *ContractSlasherCallerSession) Delegation() (common.Address, error) { - return _ContractSlasher.Contract.Delegation(&_ContractSlasher.CallOpts) -} - -// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. -// -// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) -func (_ContractSlasher *ContractSlasherCaller) GetCorrectValueForInsertAfter(opts *bind.CallOpts, operator common.Address, updateBlock uint32) (*big.Int, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "getCorrectValueForInsertAfter", operator, updateBlock) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. -// -// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) -func (_ContractSlasher *ContractSlasherSession) GetCorrectValueForInsertAfter(operator common.Address, updateBlock uint32) (*big.Int, error) { - return _ContractSlasher.Contract.GetCorrectValueForInsertAfter(&_ContractSlasher.CallOpts, operator, updateBlock) -} - -// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. -// -// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) -func (_ContractSlasher *ContractSlasherCallerSession) GetCorrectValueForInsertAfter(operator common.Address, updateBlock uint32) (*big.Int, error) { - return _ContractSlasher.Contract.GetCorrectValueForInsertAfter(&_ContractSlasher.CallOpts, operator, updateBlock) -} - -// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. -// -// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) -func (_ContractSlasher *ContractSlasherCaller) GetMiddlewareTimesIndexServeUntilBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "getMiddlewareTimesIndexServeUntilBlock", operator, index) - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. -// -// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) -func (_ContractSlasher *ContractSlasherSession) GetMiddlewareTimesIndexServeUntilBlock(operator common.Address, index uint32) (uint32, error) { - return _ContractSlasher.Contract.GetMiddlewareTimesIndexServeUntilBlock(&_ContractSlasher.CallOpts, operator, index) -} - -// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. -// -// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) -func (_ContractSlasher *ContractSlasherCallerSession) GetMiddlewareTimesIndexServeUntilBlock(operator common.Address, index uint32) (uint32, error) { - return _ContractSlasher.Contract.GetMiddlewareTimesIndexServeUntilBlock(&_ContractSlasher.CallOpts, operator, index) -} - -// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. -// -// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) -func (_ContractSlasher *ContractSlasherCaller) GetMiddlewareTimesIndexStalestUpdateBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "getMiddlewareTimesIndexStalestUpdateBlock", operator, index) - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. -// -// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) -func (_ContractSlasher *ContractSlasherSession) GetMiddlewareTimesIndexStalestUpdateBlock(operator common.Address, index uint32) (uint32, error) { - return _ContractSlasher.Contract.GetMiddlewareTimesIndexStalestUpdateBlock(&_ContractSlasher.CallOpts, operator, index) -} - -// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. -// -// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) -func (_ContractSlasher *ContractSlasherCallerSession) GetMiddlewareTimesIndexStalestUpdateBlock(operator common.Address, index uint32) (uint32, error) { - return _ContractSlasher.Contract.GetMiddlewareTimesIndexStalestUpdateBlock(&_ContractSlasher.CallOpts, operator, index) -} - -// GetPreviousWhitelistedContractByUpdate is a free data retrieval call binding the contract method 0x35571676. -// -// Solidity: function getPreviousWhitelistedContractByUpdate(address operator, uint256 node) view returns(bool, uint256) -func (_ContractSlasher *ContractSlasherCaller) GetPreviousWhitelistedContractByUpdate(opts *bind.CallOpts, operator common.Address, node *big.Int) (bool, *big.Int, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "getPreviousWhitelistedContractByUpdate", operator, node) - - if err != nil { - return *new(bool), *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - - return out0, out1, err - -} - -// GetPreviousWhitelistedContractByUpdate is a free data retrieval call binding the contract method 0x35571676. -// -// Solidity: function getPreviousWhitelistedContractByUpdate(address operator, uint256 node) view returns(bool, uint256) -func (_ContractSlasher *ContractSlasherSession) GetPreviousWhitelistedContractByUpdate(operator common.Address, node *big.Int) (bool, *big.Int, error) { - return _ContractSlasher.Contract.GetPreviousWhitelistedContractByUpdate(&_ContractSlasher.CallOpts, operator, node) -} - -// GetPreviousWhitelistedContractByUpdate is a free data retrieval call binding the contract method 0x35571676. -// -// Solidity: function getPreviousWhitelistedContractByUpdate(address operator, uint256 node) view returns(bool, uint256) -func (_ContractSlasher *ContractSlasherCallerSession) GetPreviousWhitelistedContractByUpdate(operator common.Address, node *big.Int) (bool, *big.Int, error) { - return _ContractSlasher.Contract.GetPreviousWhitelistedContractByUpdate(&_ContractSlasher.CallOpts, operator, node) -} - -// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. -// -// Solidity: function isFrozen(address staker) view returns(bool) -func (_ContractSlasher *ContractSlasherCaller) IsFrozen(opts *bind.CallOpts, staker common.Address) (bool, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "isFrozen", staker) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. -// -// Solidity: function isFrozen(address staker) view returns(bool) -func (_ContractSlasher *ContractSlasherSession) IsFrozen(staker common.Address) (bool, error) { - return _ContractSlasher.Contract.IsFrozen(&_ContractSlasher.CallOpts, staker) -} - -// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. -// -// Solidity: function isFrozen(address staker) view returns(bool) -func (_ContractSlasher *ContractSlasherCallerSession) IsFrozen(staker common.Address) (bool, error) { - return _ContractSlasher.Contract.IsFrozen(&_ContractSlasher.CallOpts, staker) -} - -// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. -// -// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) -func (_ContractSlasher *ContractSlasherCaller) LatestUpdateBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "latestUpdateBlock", operator, serviceContract) - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. -// -// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) -func (_ContractSlasher *ContractSlasherSession) LatestUpdateBlock(operator common.Address, serviceContract common.Address) (uint32, error) { - return _ContractSlasher.Contract.LatestUpdateBlock(&_ContractSlasher.CallOpts, operator, serviceContract) -} - -// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. -// -// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) -func (_ContractSlasher *ContractSlasherCallerSession) LatestUpdateBlock(operator common.Address, serviceContract common.Address) (uint32, error) { - return _ContractSlasher.Contract.LatestUpdateBlock(&_ContractSlasher.CallOpts, operator, serviceContract) -} - -// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. -// -// Solidity: function middlewareTimesLength(address operator) view returns(uint256) -func (_ContractSlasher *ContractSlasherCaller) MiddlewareTimesLength(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "middlewareTimesLength", operator) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. -// -// Solidity: function middlewareTimesLength(address operator) view returns(uint256) -func (_ContractSlasher *ContractSlasherSession) MiddlewareTimesLength(operator common.Address) (*big.Int, error) { - return _ContractSlasher.Contract.MiddlewareTimesLength(&_ContractSlasher.CallOpts, operator) -} - -// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. -// -// Solidity: function middlewareTimesLength(address operator) view returns(uint256) -func (_ContractSlasher *ContractSlasherCallerSession) MiddlewareTimesLength(operator common.Address) (*big.Int, error) { - return _ContractSlasher.Contract.MiddlewareTimesLength(&_ContractSlasher.CallOpts, operator) -} - -// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. -// -// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) -func (_ContractSlasher *ContractSlasherCaller) OperatorToMiddlewareTimes(opts *bind.CallOpts, operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "operatorToMiddlewareTimes", operator, arrayIndex) - - if err != nil { - return *new(ISlasherMiddlewareTimes), err - } - - out0 := *abi.ConvertType(out[0], new(ISlasherMiddlewareTimes)).(*ISlasherMiddlewareTimes) - - return out0, err - -} - -// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. -// -// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) -func (_ContractSlasher *ContractSlasherSession) OperatorToMiddlewareTimes(operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { - return _ContractSlasher.Contract.OperatorToMiddlewareTimes(&_ContractSlasher.CallOpts, operator, arrayIndex) -} - -// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. -// -// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) -func (_ContractSlasher *ContractSlasherCallerSession) OperatorToMiddlewareTimes(operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { - return _ContractSlasher.Contract.OperatorToMiddlewareTimes(&_ContractSlasher.CallOpts, operator, arrayIndex) -} - -// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. -// -// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) -func (_ContractSlasher *ContractSlasherCaller) OperatorWhitelistedContractsLinkedListEntry(opts *bind.CallOpts, operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "operatorWhitelistedContractsLinkedListEntry", operator, node) - - if err != nil { - return *new(bool), *new(*big.Int), *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return out0, out1, out2, err - -} - -// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. -// -// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) -func (_ContractSlasher *ContractSlasherSession) OperatorWhitelistedContractsLinkedListEntry(operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { - return _ContractSlasher.Contract.OperatorWhitelistedContractsLinkedListEntry(&_ContractSlasher.CallOpts, operator, node) -} - -// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. -// -// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) -func (_ContractSlasher *ContractSlasherCallerSession) OperatorWhitelistedContractsLinkedListEntry(operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { - return _ContractSlasher.Contract.OperatorWhitelistedContractsLinkedListEntry(&_ContractSlasher.CallOpts, operator, node) -} - -// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. -// -// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) -func (_ContractSlasher *ContractSlasherCaller) OperatorWhitelistedContractsLinkedListSize(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "operatorWhitelistedContractsLinkedListSize", operator) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. -// -// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) -func (_ContractSlasher *ContractSlasherSession) OperatorWhitelistedContractsLinkedListSize(operator common.Address) (*big.Int, error) { - return _ContractSlasher.Contract.OperatorWhitelistedContractsLinkedListSize(&_ContractSlasher.CallOpts, operator) -} - -// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. -// -// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) -func (_ContractSlasher *ContractSlasherCallerSession) OperatorWhitelistedContractsLinkedListSize(operator common.Address) (*big.Int, error) { - return _ContractSlasher.Contract.OperatorWhitelistedContractsLinkedListSize(&_ContractSlasher.CallOpts, operator) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ContractSlasher *ContractSlasherCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ContractSlasher *ContractSlasherSession) Owner() (common.Address, error) { - return _ContractSlasher.Contract.Owner(&_ContractSlasher.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ContractSlasher *ContractSlasherCallerSession) Owner() (common.Address, error) { - return _ContractSlasher.Contract.Owner(&_ContractSlasher.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_ContractSlasher *ContractSlasherCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "paused", index) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_ContractSlasher *ContractSlasherSession) Paused(index uint8) (bool, error) { - return _ContractSlasher.Contract.Paused(&_ContractSlasher.CallOpts, index) -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_ContractSlasher *ContractSlasherCallerSession) Paused(index uint8) (bool, error) { - return _ContractSlasher.Contract.Paused(&_ContractSlasher.CallOpts, index) -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_ContractSlasher *ContractSlasherCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "paused0") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_ContractSlasher *ContractSlasherSession) Paused0() (*big.Int, error) { - return _ContractSlasher.Contract.Paused0(&_ContractSlasher.CallOpts) -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_ContractSlasher *ContractSlasherCallerSession) Paused0() (*big.Int, error) { - return _ContractSlasher.Contract.Paused0(&_ContractSlasher.CallOpts) -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_ContractSlasher *ContractSlasherCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "pauserRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_ContractSlasher *ContractSlasherSession) PauserRegistry() (common.Address, error) { - return _ContractSlasher.Contract.PauserRegistry(&_ContractSlasher.CallOpts) -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_ContractSlasher *ContractSlasherCallerSession) PauserRegistry() (common.Address, error) { - return _ContractSlasher.Contract.PauserRegistry(&_ContractSlasher.CallOpts) -} - -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. -// -// Solidity: function strategyManager() view returns(address) -func (_ContractSlasher *ContractSlasherCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "strategyManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. -// -// Solidity: function strategyManager() view returns(address) -func (_ContractSlasher *ContractSlasherSession) StrategyManager() (common.Address, error) { - return _ContractSlasher.Contract.StrategyManager(&_ContractSlasher.CallOpts) -} - -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. -// -// Solidity: function strategyManager() view returns(address) -func (_ContractSlasher *ContractSlasherCallerSession) StrategyManager() (common.Address, error) { - return _ContractSlasher.Contract.StrategyManager(&_ContractSlasher.CallOpts) -} - -// WhitelistedContractDetails is a free data retrieval call binding the contract method 0xd7b7fa13. -// -// Solidity: function whitelistedContractDetails(address operator, address serviceContract) view returns((uint32,uint32,uint32)) -func (_ContractSlasher *ContractSlasherCaller) WhitelistedContractDetails(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (ISlasherMiddlewareDetails, error) { - var out []interface{} - err := _ContractSlasher.contract.Call(opts, &out, "whitelistedContractDetails", operator, serviceContract) - - if err != nil { - return *new(ISlasherMiddlewareDetails), err - } - - out0 := *abi.ConvertType(out[0], new(ISlasherMiddlewareDetails)).(*ISlasherMiddlewareDetails) - - return out0, err - -} - -// WhitelistedContractDetails is a free data retrieval call binding the contract method 0xd7b7fa13. -// -// Solidity: function whitelistedContractDetails(address operator, address serviceContract) view returns((uint32,uint32,uint32)) -func (_ContractSlasher *ContractSlasherSession) WhitelistedContractDetails(operator common.Address, serviceContract common.Address) (ISlasherMiddlewareDetails, error) { - return _ContractSlasher.Contract.WhitelistedContractDetails(&_ContractSlasher.CallOpts, operator, serviceContract) -} - -// WhitelistedContractDetails is a free data retrieval call binding the contract method 0xd7b7fa13. -// -// Solidity: function whitelistedContractDetails(address operator, address serviceContract) view returns((uint32,uint32,uint32)) -func (_ContractSlasher *ContractSlasherCallerSession) WhitelistedContractDetails(operator common.Address, serviceContract common.Address) (ISlasherMiddlewareDetails, error) { - return _ContractSlasher.Contract.WhitelistedContractDetails(&_ContractSlasher.CallOpts, operator, serviceContract) -} - -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. -// -// Solidity: function freezeOperator(address toBeFrozen) returns() -func (_ContractSlasher *ContractSlasherTransactor) FreezeOperator(opts *bind.TransactOpts, toBeFrozen common.Address) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "freezeOperator", toBeFrozen) -} - -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. -// -// Solidity: function freezeOperator(address toBeFrozen) returns() -func (_ContractSlasher *ContractSlasherSession) FreezeOperator(toBeFrozen common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.FreezeOperator(&_ContractSlasher.TransactOpts, toBeFrozen) -} - -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. -// -// Solidity: function freezeOperator(address toBeFrozen) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) FreezeOperator(toBeFrozen common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.FreezeOperator(&_ContractSlasher.TransactOpts, toBeFrozen) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. -// -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_ContractSlasher *ContractSlasherTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. -// -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_ContractSlasher *ContractSlasherSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.Initialize(&_ContractSlasher.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. -// -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.Initialize(&_ContractSlasher.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) -} - -// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. -// -// Solidity: function optIntoSlashing(address contractAddress) returns() -func (_ContractSlasher *ContractSlasherTransactor) OptIntoSlashing(opts *bind.TransactOpts, contractAddress common.Address) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "optIntoSlashing", contractAddress) -} - -// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. -// -// Solidity: function optIntoSlashing(address contractAddress) returns() -func (_ContractSlasher *ContractSlasherSession) OptIntoSlashing(contractAddress common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.OptIntoSlashing(&_ContractSlasher.TransactOpts, contractAddress) -} - -// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. -// -// Solidity: function optIntoSlashing(address contractAddress) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) OptIntoSlashing(contractAddress common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.OptIntoSlashing(&_ContractSlasher.TransactOpts, contractAddress) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_ContractSlasher *ContractSlasherTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "pause", newPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_ContractSlasher *ContractSlasherSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.Pause(&_ContractSlasher.TransactOpts, newPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.Pause(&_ContractSlasher.TransactOpts, newPausedStatus) -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_ContractSlasher *ContractSlasherTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "pauseAll") -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_ContractSlasher *ContractSlasherSession) PauseAll() (*types.Transaction, error) { - return _ContractSlasher.Contract.PauseAll(&_ContractSlasher.TransactOpts) -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_ContractSlasher *ContractSlasherTransactorSession) PauseAll() (*types.Transaction, error) { - return _ContractSlasher.Contract.PauseAll(&_ContractSlasher.TransactOpts) -} - -// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. -// -// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() -func (_ContractSlasher *ContractSlasherTransactor) RecordFirstStakeUpdate(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "recordFirstStakeUpdate", operator, serveUntilBlock) -} - -// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. -// -// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() -func (_ContractSlasher *ContractSlasherSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractSlasher.Contract.RecordFirstStakeUpdate(&_ContractSlasher.TransactOpts, operator, serveUntilBlock) -} - -// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. -// -// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractSlasher.Contract.RecordFirstStakeUpdate(&_ContractSlasher.TransactOpts, operator, serveUntilBlock) -} - -// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. -// -// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() -func (_ContractSlasher *ContractSlasherTransactor) RecordLastStakeUpdateAndRevokeSlashingAbility(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "recordLastStakeUpdateAndRevokeSlashingAbility", operator, serveUntilBlock) -} - -// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. -// -// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() -func (_ContractSlasher *ContractSlasherSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractSlasher.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ContractSlasher.TransactOpts, operator, serveUntilBlock) -} - -// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. -// -// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractSlasher.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ContractSlasher.TransactOpts, operator, serveUntilBlock) -} - -// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. -// -// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() -func (_ContractSlasher *ContractSlasherTransactor) RecordStakeUpdate(opts *bind.TransactOpts, operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "recordStakeUpdate", operator, updateBlock, serveUntilBlock, insertAfter) -} - -// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. -// -// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() -func (_ContractSlasher *ContractSlasherSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.RecordStakeUpdate(&_ContractSlasher.TransactOpts, operator, updateBlock, serveUntilBlock, insertAfter) -} - -// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. -// -// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.RecordStakeUpdate(&_ContractSlasher.TransactOpts, operator, updateBlock, serveUntilBlock, insertAfter) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ContractSlasher *ContractSlasherTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ContractSlasher *ContractSlasherSession) RenounceOwnership() (*types.Transaction, error) { - return _ContractSlasher.Contract.RenounceOwnership(&_ContractSlasher.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ContractSlasher *ContractSlasherTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _ContractSlasher.Contract.RenounceOwnership(&_ContractSlasher.TransactOpts) -} - -// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. -// -// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() -func (_ContractSlasher *ContractSlasherTransactor) ResetFrozenStatus(opts *bind.TransactOpts, frozenAddresses []common.Address) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "resetFrozenStatus", frozenAddresses) -} - -// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. -// -// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() -func (_ContractSlasher *ContractSlasherSession) ResetFrozenStatus(frozenAddresses []common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.ResetFrozenStatus(&_ContractSlasher.TransactOpts, frozenAddresses) -} - -// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. -// -// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) ResetFrozenStatus(frozenAddresses []common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.ResetFrozenStatus(&_ContractSlasher.TransactOpts, frozenAddresses) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_ContractSlasher *ContractSlasherTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_ContractSlasher *ContractSlasherSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.SetPauserRegistry(&_ContractSlasher.TransactOpts, newPauserRegistry) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.SetPauserRegistry(&_ContractSlasher.TransactOpts, newPauserRegistry) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ContractSlasher *ContractSlasherTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ContractSlasher *ContractSlasherSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.TransferOwnership(&_ContractSlasher.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ContractSlasher.Contract.TransferOwnership(&_ContractSlasher.TransactOpts, newOwner) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_ContractSlasher *ContractSlasherTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.contract.Transact(opts, "unpause", newPausedStatus) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_ContractSlasher *ContractSlasherSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.Unpause(&_ContractSlasher.TransactOpts, newPausedStatus) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_ContractSlasher *ContractSlasherTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _ContractSlasher.Contract.Unpause(&_ContractSlasher.TransactOpts, newPausedStatus) -} - -// ContractSlasherFrozenStatusResetIterator is returned from FilterFrozenStatusReset and is used to iterate over the raw logs and unpacked data for FrozenStatusReset events raised by the ContractSlasher contract. -type ContractSlasherFrozenStatusResetIterator struct { - Event *ContractSlasherFrozenStatusReset // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherFrozenStatusResetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherFrozenStatusReset) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherFrozenStatusReset) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherFrozenStatusResetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherFrozenStatusResetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherFrozenStatusReset represents a FrozenStatusReset event raised by the ContractSlasher contract. -type ContractSlasherFrozenStatusReset struct { - PreviouslySlashedAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFrozenStatusReset is a free log retrieval operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. -// -// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) -func (_ContractSlasher *ContractSlasherFilterer) FilterFrozenStatusReset(opts *bind.FilterOpts, previouslySlashedAddress []common.Address) (*ContractSlasherFrozenStatusResetIterator, error) { - - var previouslySlashedAddressRule []interface{} - for _, previouslySlashedAddressItem := range previouslySlashedAddress { - previouslySlashedAddressRule = append(previouslySlashedAddressRule, previouslySlashedAddressItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "FrozenStatusReset", previouslySlashedAddressRule) - if err != nil { - return nil, err - } - return &ContractSlasherFrozenStatusResetIterator{contract: _ContractSlasher.contract, event: "FrozenStatusReset", logs: logs, sub: sub}, nil -} - -// WatchFrozenStatusReset is a free log subscription operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. -// -// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) -func (_ContractSlasher *ContractSlasherFilterer) WatchFrozenStatusReset(opts *bind.WatchOpts, sink chan<- *ContractSlasherFrozenStatusReset, previouslySlashedAddress []common.Address) (event.Subscription, error) { - - var previouslySlashedAddressRule []interface{} - for _, previouslySlashedAddressItem := range previouslySlashedAddress { - previouslySlashedAddressRule = append(previouslySlashedAddressRule, previouslySlashedAddressItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "FrozenStatusReset", previouslySlashedAddressRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherFrozenStatusReset) - if err := _ContractSlasher.contract.UnpackLog(event, "FrozenStatusReset", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFrozenStatusReset is a log parse operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. -// -// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) -func (_ContractSlasher *ContractSlasherFilterer) ParseFrozenStatusReset(log types.Log) (*ContractSlasherFrozenStatusReset, error) { - event := new(ContractSlasherFrozenStatusReset) - if err := _ContractSlasher.contract.UnpackLog(event, "FrozenStatusReset", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractSlasher contract. -type ContractSlasherInitializedIterator struct { - Event *ContractSlasherInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherInitialized represents a Initialized event raised by the ContractSlasher contract. -type ContractSlasherInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractSlasher *ContractSlasherFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractSlasherInitializedIterator, error) { - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &ContractSlasherInitializedIterator{contract: _ContractSlasher.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractSlasher *ContractSlasherFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractSlasherInitialized) (event.Subscription, error) { - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherInitialized) - if err := _ContractSlasher.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractSlasher *ContractSlasherFilterer) ParseInitialized(log types.Log) (*ContractSlasherInitialized, error) { - event := new(ContractSlasherInitialized) - if err := _ContractSlasher.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherMiddlewareTimesAddedIterator is returned from FilterMiddlewareTimesAdded and is used to iterate over the raw logs and unpacked data for MiddlewareTimesAdded events raised by the ContractSlasher contract. -type ContractSlasherMiddlewareTimesAddedIterator struct { - Event *ContractSlasherMiddlewareTimesAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherMiddlewareTimesAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherMiddlewareTimesAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherMiddlewareTimesAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherMiddlewareTimesAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherMiddlewareTimesAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherMiddlewareTimesAdded represents a MiddlewareTimesAdded event raised by the ContractSlasher contract. -type ContractSlasherMiddlewareTimesAdded struct { - Operator common.Address - Index *big.Int - StalestUpdateBlock uint32 - LatestServeUntilBlock uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMiddlewareTimesAdded is a free log retrieval operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. -// -// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) -func (_ContractSlasher *ContractSlasherFilterer) FilterMiddlewareTimesAdded(opts *bind.FilterOpts) (*ContractSlasherMiddlewareTimesAddedIterator, error) { - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "MiddlewareTimesAdded") - if err != nil { - return nil, err - } - return &ContractSlasherMiddlewareTimesAddedIterator{contract: _ContractSlasher.contract, event: "MiddlewareTimesAdded", logs: logs, sub: sub}, nil -} - -// WatchMiddlewareTimesAdded is a free log subscription operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. -// -// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) -func (_ContractSlasher *ContractSlasherFilterer) WatchMiddlewareTimesAdded(opts *bind.WatchOpts, sink chan<- *ContractSlasherMiddlewareTimesAdded) (event.Subscription, error) { - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "MiddlewareTimesAdded") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherMiddlewareTimesAdded) - if err := _ContractSlasher.contract.UnpackLog(event, "MiddlewareTimesAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMiddlewareTimesAdded is a log parse operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. -// -// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) -func (_ContractSlasher *ContractSlasherFilterer) ParseMiddlewareTimesAdded(log types.Log) (*ContractSlasherMiddlewareTimesAdded, error) { - event := new(ContractSlasherMiddlewareTimesAdded) - if err := _ContractSlasher.contract.UnpackLog(event, "MiddlewareTimesAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherOperatorFrozenIterator is returned from FilterOperatorFrozen and is used to iterate over the raw logs and unpacked data for OperatorFrozen events raised by the ContractSlasher contract. -type ContractSlasherOperatorFrozenIterator struct { - Event *ContractSlasherOperatorFrozen // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherOperatorFrozenIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherOperatorFrozen) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherOperatorFrozen) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherOperatorFrozenIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherOperatorFrozenIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherOperatorFrozen represents a OperatorFrozen event raised by the ContractSlasher contract. -type ContractSlasherOperatorFrozen struct { - SlashedOperator common.Address - SlashingContract common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorFrozen is a free log retrieval operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. -// -// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) -func (_ContractSlasher *ContractSlasherFilterer) FilterOperatorFrozen(opts *bind.FilterOpts, slashedOperator []common.Address, slashingContract []common.Address) (*ContractSlasherOperatorFrozenIterator, error) { - - var slashedOperatorRule []interface{} - for _, slashedOperatorItem := range slashedOperator { - slashedOperatorRule = append(slashedOperatorRule, slashedOperatorItem) - } - var slashingContractRule []interface{} - for _, slashingContractItem := range slashingContract { - slashingContractRule = append(slashingContractRule, slashingContractItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "OperatorFrozen", slashedOperatorRule, slashingContractRule) - if err != nil { - return nil, err - } - return &ContractSlasherOperatorFrozenIterator{contract: _ContractSlasher.contract, event: "OperatorFrozen", logs: logs, sub: sub}, nil -} - -// WatchOperatorFrozen is a free log subscription operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. -// -// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) -func (_ContractSlasher *ContractSlasherFilterer) WatchOperatorFrozen(opts *bind.WatchOpts, sink chan<- *ContractSlasherOperatorFrozen, slashedOperator []common.Address, slashingContract []common.Address) (event.Subscription, error) { - - var slashedOperatorRule []interface{} - for _, slashedOperatorItem := range slashedOperator { - slashedOperatorRule = append(slashedOperatorRule, slashedOperatorItem) - } - var slashingContractRule []interface{} - for _, slashingContractItem := range slashingContract { - slashingContractRule = append(slashingContractRule, slashingContractItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "OperatorFrozen", slashedOperatorRule, slashingContractRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherOperatorFrozen) - if err := _ContractSlasher.contract.UnpackLog(event, "OperatorFrozen", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperatorFrozen is a log parse operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. -// -// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) -func (_ContractSlasher *ContractSlasherFilterer) ParseOperatorFrozen(log types.Log) (*ContractSlasherOperatorFrozen, error) { - event := new(ContractSlasherOperatorFrozen) - if err := _ContractSlasher.contract.UnpackLog(event, "OperatorFrozen", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherOptedIntoSlashingIterator is returned from FilterOptedIntoSlashing and is used to iterate over the raw logs and unpacked data for OptedIntoSlashing events raised by the ContractSlasher contract. -type ContractSlasherOptedIntoSlashingIterator struct { - Event *ContractSlasherOptedIntoSlashing // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherOptedIntoSlashingIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherOptedIntoSlashing) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherOptedIntoSlashing) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherOptedIntoSlashingIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherOptedIntoSlashingIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherOptedIntoSlashing represents a OptedIntoSlashing event raised by the ContractSlasher contract. -type ContractSlasherOptedIntoSlashing struct { - Operator common.Address - ContractAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOptedIntoSlashing is a free log retrieval operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. -// -// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) -func (_ContractSlasher *ContractSlasherFilterer) FilterOptedIntoSlashing(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractSlasherOptedIntoSlashingIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var contractAddressRule []interface{} - for _, contractAddressItem := range contractAddress { - contractAddressRule = append(contractAddressRule, contractAddressItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "OptedIntoSlashing", operatorRule, contractAddressRule) - if err != nil { - return nil, err - } - return &ContractSlasherOptedIntoSlashingIterator{contract: _ContractSlasher.contract, event: "OptedIntoSlashing", logs: logs, sub: sub}, nil -} - -// WatchOptedIntoSlashing is a free log subscription operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. -// -// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) -func (_ContractSlasher *ContractSlasherFilterer) WatchOptedIntoSlashing(opts *bind.WatchOpts, sink chan<- *ContractSlasherOptedIntoSlashing, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var contractAddressRule []interface{} - for _, contractAddressItem := range contractAddress { - contractAddressRule = append(contractAddressRule, contractAddressItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "OptedIntoSlashing", operatorRule, contractAddressRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherOptedIntoSlashing) - if err := _ContractSlasher.contract.UnpackLog(event, "OptedIntoSlashing", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOptedIntoSlashing is a log parse operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. -// -// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) -func (_ContractSlasher *ContractSlasherFilterer) ParseOptedIntoSlashing(log types.Log) (*ContractSlasherOptedIntoSlashing, error) { - event := new(ContractSlasherOptedIntoSlashing) - if err := _ContractSlasher.contract.UnpackLog(event, "OptedIntoSlashing", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractSlasher contract. -type ContractSlasherOwnershipTransferredIterator struct { - Event *ContractSlasherOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherOwnershipTransferred represents a OwnershipTransferred event raised by the ContractSlasher contract. -type ContractSlasherOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_ContractSlasher *ContractSlasherFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractSlasherOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &ContractSlasherOwnershipTransferredIterator{contract: _ContractSlasher.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_ContractSlasher *ContractSlasherFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractSlasherOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherOwnershipTransferred) - if err := _ContractSlasher.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_ContractSlasher *ContractSlasherFilterer) ParseOwnershipTransferred(log types.Log) (*ContractSlasherOwnershipTransferred, error) { - event := new(ContractSlasherOwnershipTransferred) - if err := _ContractSlasher.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractSlasher contract. -type ContractSlasherPausedIterator struct { - Event *ContractSlasherPaused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherPausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherPaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherPaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherPaused represents a Paused event raised by the ContractSlasher contract. -type ContractSlasherPaused struct { - Account common.Address - NewPausedStatus *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_ContractSlasher *ContractSlasherFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractSlasherPausedIterator, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "Paused", accountRule) - if err != nil { - return nil, err - } - return &ContractSlasherPausedIterator{contract: _ContractSlasher.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_ContractSlasher *ContractSlasherFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractSlasherPaused, account []common.Address) (event.Subscription, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "Paused", accountRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherPaused) - if err := _ContractSlasher.contract.UnpackLog(event, "Paused", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_ContractSlasher *ContractSlasherFilterer) ParsePaused(log types.Log) (*ContractSlasherPaused, error) { - event := new(ContractSlasherPaused) - if err := _ContractSlasher.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractSlasher contract. -type ContractSlasherPauserRegistrySetIterator struct { - Event *ContractSlasherPauserRegistrySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherPauserRegistrySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherPauserRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherPauserRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherPauserRegistrySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherPauserRegistrySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherPauserRegistrySet represents a PauserRegistrySet event raised by the ContractSlasher contract. -type ContractSlasherPauserRegistrySet struct { - PauserRegistry common.Address - NewPauserRegistry common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. -// -// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) -func (_ContractSlasher *ContractSlasherFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractSlasherPauserRegistrySetIterator, error) { - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "PauserRegistrySet") - if err != nil { - return nil, err - } - return &ContractSlasherPauserRegistrySetIterator{contract: _ContractSlasher.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil -} - -// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. -// -// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) -func (_ContractSlasher *ContractSlasherFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractSlasherPauserRegistrySet) (event.Subscription, error) { - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "PauserRegistrySet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherPauserRegistrySet) - if err := _ContractSlasher.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. -// -// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) -func (_ContractSlasher *ContractSlasherFilterer) ParsePauserRegistrySet(log types.Log) (*ContractSlasherPauserRegistrySet, error) { - event := new(ContractSlasherPauserRegistrySet) - if err := _ContractSlasher.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherSlashingAbilityRevokedIterator is returned from FilterSlashingAbilityRevoked and is used to iterate over the raw logs and unpacked data for SlashingAbilityRevoked events raised by the ContractSlasher contract. -type ContractSlasherSlashingAbilityRevokedIterator struct { - Event *ContractSlasherSlashingAbilityRevoked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherSlashingAbilityRevokedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherSlashingAbilityRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherSlashingAbilityRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherSlashingAbilityRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherSlashingAbilityRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherSlashingAbilityRevoked represents a SlashingAbilityRevoked event raised by the ContractSlasher contract. -type ContractSlasherSlashingAbilityRevoked struct { - Operator common.Address - ContractAddress common.Address - ContractCanSlashOperatorUntilBlock uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSlashingAbilityRevoked is a free log retrieval operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. -// -// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) -func (_ContractSlasher *ContractSlasherFilterer) FilterSlashingAbilityRevoked(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ContractSlasherSlashingAbilityRevokedIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var contractAddressRule []interface{} - for _, contractAddressItem := range contractAddress { - contractAddressRule = append(contractAddressRule, contractAddressItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "SlashingAbilityRevoked", operatorRule, contractAddressRule) - if err != nil { - return nil, err - } - return &ContractSlasherSlashingAbilityRevokedIterator{contract: _ContractSlasher.contract, event: "SlashingAbilityRevoked", logs: logs, sub: sub}, nil -} - -// WatchSlashingAbilityRevoked is a free log subscription operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. -// -// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) -func (_ContractSlasher *ContractSlasherFilterer) WatchSlashingAbilityRevoked(opts *bind.WatchOpts, sink chan<- *ContractSlasherSlashingAbilityRevoked, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var contractAddressRule []interface{} - for _, contractAddressItem := range contractAddress { - contractAddressRule = append(contractAddressRule, contractAddressItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "SlashingAbilityRevoked", operatorRule, contractAddressRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherSlashingAbilityRevoked) - if err := _ContractSlasher.contract.UnpackLog(event, "SlashingAbilityRevoked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSlashingAbilityRevoked is a log parse operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. -// -// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) -func (_ContractSlasher *ContractSlasherFilterer) ParseSlashingAbilityRevoked(log types.Log) (*ContractSlasherSlashingAbilityRevoked, error) { - event := new(ContractSlasherSlashingAbilityRevoked) - if err := _ContractSlasher.contract.UnpackLog(event, "SlashingAbilityRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractSlasherUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractSlasher contract. -type ContractSlasherUnpausedIterator struct { - Event *ContractSlasherUnpaused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractSlasherUnpausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractSlasherUnpaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractSlasherUnpaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractSlasherUnpausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractSlasherUnpausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractSlasherUnpaused represents a Unpaused event raised by the ContractSlasher contract. -type ContractSlasherUnpaused struct { - Account common.Address - NewPausedStatus *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. -// -// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) -func (_ContractSlasher *ContractSlasherFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractSlasherUnpausedIterator, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractSlasher.contract.FilterLogs(opts, "Unpaused", accountRule) - if err != nil { - return nil, err - } - return &ContractSlasherUnpausedIterator{contract: _ContractSlasher.contract, event: "Unpaused", logs: logs, sub: sub}, nil -} - -// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. -// -// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) -func (_ContractSlasher *ContractSlasherFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractSlasherUnpaused, account []common.Address) (event.Subscription, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _ContractSlasher.contract.WatchLogs(opts, "Unpaused", accountRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractSlasherUnpaused) - if err := _ContractSlasher.contract.UnpackLog(event, "Unpaused", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. -// -// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) -func (_ContractSlasher *ContractSlasherFilterer) ParseUnpaused(log types.Log) (*ContractSlasherUnpaused, error) { - event := new(ContractSlasherUnpaused) - if err := _ContractSlasher.contract.UnpackLog(event, "Unpaused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/bindings/StakeRegistry/binding.go b/contracts/bindings/StakeRegistry/binding.go index 8221d531..adcdaf6e 100644 --- a/contracts/bindings/StakeRegistry/binding.go +++ b/contracts/bindings/StakeRegistry/binding.go @@ -29,23 +29,23 @@ var ( _ = abi.ConvertType ) -// IStakeRegistryOperatorStakeUpdate is an auto generated low-level Go binding around an user-defined struct. -type IStakeRegistryOperatorStakeUpdate struct { +// IStakeRegistryStakeUpdate is an auto generated low-level Go binding around an user-defined struct. +type IStakeRegistryStakeUpdate struct { UpdateBlockNumber uint32 NextUpdateBlockNumber uint32 Stake *big.Int } -// IVoteWeigherStrategyAndWeightingMultiplier is an auto generated low-level Go binding around an user-defined struct. -type IVoteWeigherStrategyAndWeightingMultiplier struct { +// IStakeRegistryStrategyParams is an auto generated low-level Go binding around an user-defined struct. +type IStakeRegistryStrategyParams struct { Strategy common.Address Multiplier *big.Int } // ContractStakeRegistryMetaData contains all meta data concerning the ContractStakeRegistry contract. var ContractStakeRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"_registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractIServiceManager\",\"name\":\"_serviceManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"minimumStake\",\"type\":\"uint96\"}],\"name\":\"MinimumStakeForQuorumUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"QuorumCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"name\":\"StakeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"StrategyAddedToQuorum\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"multiplier\",\"type\":\"uint256\"}],\"name\":\"StrategyMultiplierUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"StrategyRemovedFromQuorum\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_QUORUM_COUNT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WEIGHING_FUNCTION_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WEIGHTING_DIVISOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier[]\",\"name\":\"_newStrategiesConsideredAndMultipliers\",\"type\":\"tuple[]\"}],\"name\":\"addStrategiesConsideredAndMultipliers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier[]\",\"name\":\"_strategiesConsideredAndMultipliers\",\"type\":\"tuple[]\"}],\"name\":\"createQuorum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contractIDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"deregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getCurrentOperatorStakeForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getCurrentTotalStakeForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getLengthOfOperatorIdStakeHistoryForQuorum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getLengthOfTotalStakeHistoryForQuorum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getMostRecentStakeUpdateByOperatorId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getOperatorIdToStakeHistory\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getStakeForOperatorIdForQuorumAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getStakeUpdateForQuorumFromOperatorIdAndIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getTotalStakeAtBlockNumberFromIndex\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"getTotalStakeIndicesByQuorumNumbersAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getTotalStakeUpdateForQuorumFromIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96[]\",\"name\":\"_minimumStakeForQuorum\",\"type\":\"uint96[]\"},{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier[][]\",\"name\":\"_quorumStrategiesConsideredAndMultipliers\",\"type\":\"tuple[][]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"minimumStakeForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"strategyIndices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint96[]\",\"name\":\"newMultipliers\",\"type\":\"uint96[]\"}],\"name\":\"modifyStrategyWeights\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quorumCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"indicesToRemove\",\"type\":\"uint256[]\"}],\"name\":\"removeStrategiesConsideredAndMultipliers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"serviceManager\",\"outputs\":[{\"internalType\":\"contractIServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"minimumStake\",\"type\":\"uint96\"}],\"name\":\"setMinimumStakeForQuorum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"strategiesConsideredAndMultipliers\",\"outputs\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"strategiesConsideredAndMultipliersLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"strategyAndWeightingMultiplierForQuorumByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"}],\"name\":\"updateStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"weightOfOperatorForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620040a0380380620040a083398101604081905262000035916200024a565b8282828181816001600160a01b031660a0816001600160a01b031681525050816001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b991906200029e565b6001600160a01b03166080816001600160a01b031681525050816001600160a01b031663b13442716040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013791906200029e565b6001600160a01b0390811660c052811660e052620001546200016f565b505050506001600160a01b03166101005250620002c5915050565b600054610100900460ff1615620001dc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200022f576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200024757600080fd5b50565b6000806000606084860312156200026057600080fd5b83516200026d8162000231565b6020850151909350620002808162000231565b6040850151909250620002938162000231565b809150509250925092565b600060208284031215620002b157600080fd5b8151620002be8162000231565b9392505050565b60805160a05160c05160e05161010051613d506200035060003960008181610395015281816108de015281816117fd01528181611bb40152611c940152600081816102c401528181610b9a01528181610f2c015281816114f4015281816116480152611734015260006104f20152600061030301526000818161059e01526107790152613d506000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806399eed4ee11610125578063c8294c56116100ad578063df5cf7231161007c578063df5cf72314610599578063e192e9ad146105c0578063e25427dd146105e0578063e89c0a00146105f3578063eb92199c1461060657600080fd5b8063c8294c561461054d578063c8f739d014610560578063cd050d9c14610573578063ce977ec31461058657600080fd5b8063a6734667116100f4578063a6734667146104e5578063b1344271146104ed578063bba549fa14610514578063bc9a40c314610527578063bd29b8cd1461053a57600080fd5b806399eed4ee146104755780639aa1653d146104885780639e8ca620146104af578063a43cde89146104d257600080fd5b80635e5a6775116101a85780636e8f03ca116101775780636e8f03ca146103b75780637c172347146103e85780637cc0d75f146104025780637ed9430f14610442578063944472a91461045557600080fd5b80635e5a67751461034d5780635f2948ec1461036a5780636ab538d41461037d5780636d14a9871461039057600080fd5b80632b3d8816116101ef5780632b3d8816146102995780632c2a5d2b146102ac5780633998fdd3146102bf57806339b70e38146102fe578063480858661461032557600080fd5b80631b327225146102215780631f9b74e014610251578063248d6573146102645780632550477714610284575b600080fd5b61023461022f366004613133565b610627565b6040516001600160601b0390911681526020015b60405180910390f35b61023461025f366004613184565b61068b565b6102776102723660046131bb565b61083a565b60405161024891906131ee565b61029761029236600461326b565b6108d3565b005b6102976102a736600461330a565b610b98565b6102976102ba36600461335c565b610f2a565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610248565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b610338610333366004613133565b611260565b60405163ffffffff9091168152602001610248565b61035c670de0b6b3a764000081565b604051908152602001610248565b6102976103783660046135a2565b611275565b61023461038b366004613661565b61138a565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b61035c6103c5366004613661565b60009182526101b36020908152604080842060ff93909316845291905290205490565b6103f0602081565b60405160ff9091168152602001610248565b61041561041036600461368d565b6113a5565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610248565b6102346104503660046136b7565b61141f565b610468610463366004613661565b611453565b60405161024891906136d0565b610297610483366004613748565b6114f2565b60005461049c9062010000900461ffff1681565b60405161ffff9091168152602001610248565b61035c6104bd36600461377c565b60ff1660009081526001602052604090205490565b6102346104e0366004613797565b6115b0565b6103f060c081565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6102976105223660046137d9565b611646565b61029761053536600461381c565b611732565b610297610548366004613846565b6117f2565b61023461055b366004613884565b611989565b61023461056e36600461377c565b611a18565b610277610581366004613661565b611a89565b6102976105943660046138c0565b611b70565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6105d36105ce366004613901565b611e50565b604051610248919061393a565b6102776105ee36600461368d565b6120bd565b61035c61060136600461377c565b612155565b61061961061436600461368d565b612176565b604051610248929190613978565b60008381526101b36020908152604080832060ff86168452909152812061064f8585856121bf565b63ffffffff16815481106106655761066561399a565b600091825260209091200154600160401b90046001600160601b031690505b9392505050565b60008054839062010000900461ffff1660ff8216106106c55760405162461bcd60e51b81526004016106bc906139b0565b60405180910390fd5b60ff84166000908152600160209081526040808320548151808301909252838252918101839052825b8281101561082e5760ff8816600090815260016020526040902080548290811061071a5761071a61399a565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b81528b8316600482015260248101919091529194507f0000000000000000000000000000000000000000000000000000000000000000169063778e55f390604401602060405180830381865afa1580156107c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e49190613a0d565b9050801561082557670de0b6b3a764000083602001516001600160601b03168261080e9190613a3c565b6108189190613a5b565b6108229086613a7d565b94505b506001016106ee565b50919695505050505050565b60408051606081018252600080825260208083018290528284018290528582526101b3815283822060ff881683529052919091208054839081106108805761088061399a565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461091b5760405162461bcd60e51b81526004016106bc90613aa8565b60005462010000900461ffff168282610935600182613b1a565b8181106109445761094461399a565b9050013560f81c60f81b60f81c60ff16106109e45760405162461bcd60e51b815260206004820152605460248201527f5374616b6552656769737472792e5f72656769737465724f70657261746f723a60448201527f2067726561746573742071756f72756d4e756d626572206d757374206265206c606482015273195cdcc81d1a185b881c5d5bdc9d5b50dbdd5b9d60621b608482015260a4016106bc565b604080516060810182526000602082018190529181018290524363ffffffff168152905b60ff8116831115610b9057600084848360ff16818110610a2a57610a2a61399a565b919091013560f81c915060009050610a438888846124e6565b9150506001600160601b038116610ae85760405162461bcd60e51b815260206004820152605c60248201527f5374616b6552656769737472792e5f72656769737465724f70657261746f723a60448201527f204f70657261746f7220646f6573206e6f74206d656574206d696e696d756d2060648201527f7374616b6520726571756972656d656e7420666f722071756f72756d00000000608482015260a4016106bc565b600060b38360ff166101008110610b0157610b0161399a565b01549050818115610b685760b38460ff166101008110610b2357610b2361399a565b01610b2f600184613b1a565b81548110610b3f57610b3f61399a565b600091825260209091200154610b6590600160401b90046001600160601b031682613a7d565b90505b6001600160601b0381166040870152610b8184876125eb565b84600101945050505050610a08565b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190613b31565b6001600160a01b0316336001600160a01b031614610c4a5760405162461bcd60e51b81526004016106bc90613b4e565b600054839062010000900461ffff1660ff821610610c7a5760405162461bcd60e51b81526004016106bc906139b0565b8180610d145760405162461bcd60e51b815260206004820152605760248201527f566f746557656967686572426173652e72656d6f76655374726174656769657360448201527f436f6e73696465726564416e644d756c7469706c696572733a206e6f20696e6460648201527f6963657320746f2072656d6f76652070726f7669646564000000000000000000608482015260a4016106bc565b60005b81811015610b905760ff861660008181526001602052604090207f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f790878785818110610d6557610d6561399a565b9050602002013581548110610d7c57610d7c61399a565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a260ff861660008181526001602052604090207f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7590878785818110610de857610de861399a565b9050602002013581548110610dff57610dff61399a565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a260ff8616600090815260016020819052604090912080549091610e5191613b1a565b81548110610e6157610e6161399a565b6000918252602080832060ff8a16845260019091526040909220910190868684818110610e9057610e9061399a565b9050602002013581548110610ea757610ea761399a565b600091825260208083208454920180546001600160a01b0319166001600160a01b03909316928317815593546001600160601b03600160a01b91829004160290911790925560ff88168152600190915260409020805480610f0a57610f0a613bca565b600082815260208120820160001990810191909155019055600101610d17565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fac9190613b31565b6001600160a01b0316336001600160a01b031614610fdc5760405162461bcd60e51b81526004016106bc90613b4e565b600054859062010000900461ffff1660ff82161061100c5760405162461bcd60e51b81526004016106bc906139b0565b838061108c5760405162461bcd60e51b815260206004820152604360248201527f566f746557656967686572426173652e6d6f646966795374726174656779576560448201527f69676874733a206e6f20737472617465677920696e64696365732070726f766960648201526219195960ea1b608482015260a4016106bc565b8281146111015760405162461bcd60e51b815260206004820152603c60248201527f566f746557656967686572426173652e6d6f646966795374726174656779576560448201527f69676874733a20696e707574206c656e677468206d69736d617463680000000060648201526084016106bc565b60005b818110156112565784848281811061111e5761111e61399a565b90506020020160208101906111339190613be0565b60ff891660009081526001602052604090208888848181106111575761115761399a565b905060200201358154811061116e5761116e61399a565b6000918252602080832090910180546001600160601b0394909416600160a01b026001600160a01b039094169390931790925560ff8a168082526001909252604090207f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75908989858181106111e5576111e561399a565b90506020020135815481106111fc576111fc61399a565b6000918252602090912001546001600160a01b03168787858181106112235761122361399a565b90506020020160208101906112389190613be0565b604051611246929190613978565b60405180910390a2600101611104565b5050505050505050565b600061126d8484846121bf565b949350505050565b600054610100900460ff16158080156112955750600054600160ff909116105b806112af5750303b1580156112af575060005460ff166001145b6113125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106bc565b6000805460ff191660011790558015611335576000805461ff0019166101001790555b61133f8383612705565b8015611385576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000806113978484611a89565b604001519150505b92915050565b604080518082019091526000808252602082015260ff831660009081526001602052604090208054839081106113dd576113dd61399a565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b603381610100811061143057600080fd5b60029182820401919006600c02915054906101000a90046001600160601b031681565b60008281526101b36020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b828210156114e6576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b03169082015282526001909201910161148d565b50505050905092915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115749190613b31565b6001600160a01b0316336001600160a01b0316146115a45760405162461bcd60e51b81526004016106bc90613b4e565b6115ad81612849565b50565b60008281526101b36020908152604080832060ff8816845290915281208054829190849081106115e2576115e261399a565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015290506116398186612949565b6040015195945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c89190613b31565b6001600160a01b0316336001600160a01b0316146116f85760405162461bcd60e51b81526004016106bc90613b4e565b600054829062010000900461ffff1660ff8216106117285760405162461bcd60e51b81526004016106bc906139b0565b6113858383612aca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190613b31565b6001600160a01b0316336001600160a01b0316146117e45760405162461bcd60e51b81526004016106bc90613b4e565b6117ee8282612efc565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461183a5760405162461bcd60e51b81526004016106bc90613aa8565b60408051606080820183526000602080840182905283850182905263ffffffff43168085528551938401865290830182905293820181905292815290915b60ff8116841115610b9057600085858360ff1681811061189a5761189a61399a565b919091013560f81c9150600090506118b3888387612f91565b90508060b38360ff1661010081106118cd576118cd61399a565b01600160b38560ff1661010081106118e7576118e761399a565b01546118f39190613b1a565b815481106119035761190361399a565b6000918252602090912001546119299190600160401b90046001600160601b0316613bfb565b6001600160601b0316604085015261194182856125eb565b6040805160ff841681526000602082015289917fe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934910160405180910390a25050600101611878565b60008060b38560ff1661010081106119a3576119a361399a565b0183815481106119b5576119b561399a565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611a0c8185612949565b60400151949350505050565b600060b38260ff166101008110611a3157611a3161399a565b01600160b38460ff166101008110611a4b57611a4b61399a565b0154611a579190613b1a565b81548110611a6757611a6761399a565b600091825260209091200154600160401b90046001600160601b031692915050565b6040805160608082018352600080835260208084018290528385018290528682526101b3815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611ae357915061139f9050565b60008581526101b36020908152604080832060ff881684529091529020611b0b600184613b1a565b81548110611b1b57611b1b61399a565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b9093049290921690820152925061139f915050565b60005b60005462010000900461ffff1660ff821610156113855760408051606081018252600080825260208201819052918101829052905b83811015611e2f5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166313542a4e878785818110611bf357611bf361399a565b9050602002016020810190611c089190613c23565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c709190613a0d565b604051633431af2560e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633431af2590602401602060405180830381865afa158015611cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cff9190613c40565b905060016001600160c01b03821660ff87161c81161415611e2557835163ffffffff16611dc15760b38560ff166101008110611d3d57611d3d61399a565b01600160b38760ff166101008110611d5757611d5761399a565b0154611d639190613b1a565b81548110611d7357611d7361399a565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015293505b600080611df5898987818110611dd957611dd961399a565b9050602002016020810190611dee9190613c23565b85896124e6565b9150915080828760400151611e0a9190613bfb565b611e149190613a7d565b6001600160601b0316604087015250505b5050600101611ba8565b50805163ffffffff1615611e4757611e4782826125eb565b50600101611b73565b60606000826001600160401b03811115611e6c57611e6c6133dc565b604051908082528060200260200182016040528015611e95578160200160208202803683370190505b50905060005b838110156120b4576000858583818110611eb757611eb761399a565b919091013560f81c91505063ffffffff871660b3826101008110611edd57611edd61399a565b01600081548110611ef057611ef061399a565b60009182526020909120015463ffffffff161115611faf5760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f6573427951756f72756d4e756d626572734174426c6f636b4e756d6265723a2060648201527f71756f72756d20686173206e6f207374616b6520686973746f727920617420626084820152693637b1b5a73ab6b132b960b11b60a482015260c4016106bc565b600060b38260ff166101008110611fc857611fc861399a565b0154905060005b8163ffffffff168163ffffffff16101561209e578863ffffffff1660b38460ff1661010081106120015761200161399a565b01600161200e8486613c69565b6120189190613c69565b63ffffffff168154811061202e5761202e61399a565b60009182526020909120015463ffffffff161161208c5760016120518284613c69565b61205b9190613c69565b85858151811061206d5761206d61399a565b602002602001019063ffffffff16908163ffffffff168152505061209e565b8061209681613c86565b915050611fcf565b50505080806120ac90613caa565b915050611e9b565b50949350505050565b604080516060810182526000808252602082018190529181019190915260b38360ff1661010081106120f1576120f161399a565b0182815481106121035761210361399a565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b600060b38260ff16610100811061216e5761216e61399a565b015492915050565b6001602052816000526040600020818154811061219257600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60008381526101b36020908152604080832060ff86168452909152812054815b8163ffffffff168163ffffffff1610156124165760008681526101b36020908152604080832060ff89168452909152902063ffffffff85169060016122248486613c69565b61222e9190613c69565b63ffffffff16815481106122445761224461399a565b60009182526020909120015463ffffffff16116124045760008681526101b36020908152604080832060ff89168452909152902060016122848385613c69565b61228e9190613c69565b63ffffffff16815481106122a4576122a461399a565b600091825260209091200154600160201b900463ffffffff161580612330575060008681526101b36020908152604080832060ff89168452909152902063ffffffff85169060016122f58486613c69565b6122ff9190613c69565b63ffffffff16815481106123155761231561399a565b600091825260209091200154600160201b900463ffffffff16115b6123e55760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724964466f7251756f72756d4174426c6f636b4e60648201527f756d6265723a206f70657261746f72496420686173206e6f207374616b652075608482015273383230ba329030ba10313637b1b5a73ab6b132b960611b60a482015260c4016106bc565b60016123f18284613c69565b6123fb9190613c69565b92505050610684565b8061240e81613c86565b9150506121df565b5060405162461bcd60e51b815260206004820152608c60248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724964466f7251756f72756d4174426c6f636b4e60648201527f756d6265723a206e6f207374616b652075706461746520666f756e6420666f7260848201527f206f70657261746f72496420616e642071756f72756d4e756d6265722061742060a48201526b313637b1b590373ab6b132b960a11b60c482015260e4016106bc565b604080516060810182526000602082018190529181018290524363ffffffff1681528190612514848761068b565b6001600160601b03166040820152603360ff851661010081106125395761253961399a565b60029182820401919006600c029054906101000a90046001600160601b03166001600160601b031681604001516001600160601b0316101561257d57600060408201525b600061258a868684612f91565b604080840151815160ff891681526001600160601b03909116602082015291925087917fe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934910160405180910390a26040909101519092509050935093915050565b600060b38360ff1661010081106126045761260461399a565b01549050801561266e574360b38460ff1661010081106126265761262661399a565b01612632600184613b1a565b815481106126425761264261399a565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff1602179055505b63ffffffff4316825260b360ff8416610100811061268e5761268e61399a565b0180546001810182556000918252602091829020845191018054928501516040909501516001600160601b0316600160401b026bffffffffffffffffffffffff60401b1963ffffffff968716600160201b0267ffffffffffffffff1990951696909316959095179290921716929092179091555050565b600054610100900460ff166127705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016106bc565b80518251146127e75760405162461bcd60e51b815260206004820152603b60248201527f52656769737472792e5f696e697469616c697a653a206d696e696d756d53746160448201527f6b65466f7251756f72756d206c656e677468206d69736d61746368000000000060648201526084016106bc565b60005b81518160ff1610156113855761281c81848360ff168151811061280f5761280f61399a565b6020026020010151612efc565b612841828260ff16815181106128345761283461399a565b6020026020010151612849565b6001016127ea565b60005462010000900461ffff1660c081106128e45760405162461bcd60e51b815260206004820152604f60248201527f566f746557656967686572426173652e5f63726561746551756f72756d3a206e60448201527f756d626572206f662071756f72756d732063616e6e6f7420657863656564204d60648201526e105617d45553d4955357d0d3d55395608a1b608482015260a4016106bc565b806128f0816001613cc5565b600060026101000a81548161ffff021916908361ffff1602179055506129168184612aca565b60405160ff8216907f831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b490600090a2505050565b815163ffffffff808316911611156129ef5760405162461bcd60e51b815260206004820152606060248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a206f70657261746f725374616b6560648201527f5570646174652069732066726f6d20616674657220626c6f636b4e756d626572608482015260a4016106bc565b602082015163ffffffff161580612a1557508063ffffffff16826020015163ffffffff16115b6117ee5760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a2074686572652069732061206e6560648201527f776572206f70657261746f725374616b6555706461746520617661696c61626c60848201527332903132b337b93290313637b1b5a73ab6b132b960611b60a482015260c4016106bc565b6000815111612b465760405162461bcd60e51b815260206004820152604e6024820152600080516020613cfb83398151915260448201527f6e73696465726564416e644d756c7469706c696572733a206e6f20737472617460648201526d1959da595cc81c1c9bdd9a59195960921b608482015260a4016106bc565b805160ff831660009081526001602090815260409091205490612b698383613ce2565b1115612bf15760405162461bcd60e51b815260206004820152605b6024820152600080516020613cfb83398151915260448201527f6e73696465726564416e644d756c7469706c696572733a20657863656564204d60648201527f41585f5745494748494e475f46554e4354494f4e5f4c454e4754480000000000608482015260a4016106bc565b60005b82811015612ef55760005b612c098284613ce2565b811015612cfc57848281518110612c2257612c2261399a565b6020026020010151600001516001600160a01b0316600160008860ff1660ff1681526020019081526020016000208281548110612c6157612c6161399a565b6000918252602090912001546001600160a01b03161415612cf45760405162461bcd60e51b81526020600482015260536024820152600080516020613cfb83398151915260448201527f6e73696465726564416e644d756c7469706c696572733a2063616e6e6f7420616064820152720c8c840e6c2daca40e6e8e4c2e8cacef24064f606b1b608482015260a4016106bc565b600101612bff565b506000848281518110612d1157612d1161399a565b6020026020010151602001516001600160601b031611612dad5760405162461bcd60e51b815260206004820152605c6024820152600080516020613cfb83398151915260448201527f6e73696465726564416e644d756c7469706c696572733a2063616e6e6f74206160648201527f64642073747261746567792077697468207a65726f2077656967687400000000608482015260a4016106bc565b60ff851660009081526001602052604090208451859083908110612dd357612dd361399a565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612e5057612e5061399a565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612ead57612ead61399a565b602002602001015160000151868481518110612ecb57612ecb61399a565b602002602001015160200151604051612ee5929190613978565b60405180910390a2600101612bf4565b5050505050565b8060338360ff166101008110612f1457612f1461399a565b60029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b031602179055508160ff167f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf82604051612f8591906001600160601b0391909116815260200190565b60405180910390a25050565b60008381526101b36020908152604080832060ff86168452909152812054819080156130745760008681526101b36020908152604080832060ff8916845290915290204390612fe1600184613b1a565b81548110612ff157612ff161399a565b60009182526020808320909101805463ffffffff94909416600160201b0267ffffffff0000000019909416939093179092558781526101b38252604080822060ff8916835290925220613045600183613b1a565b815481106130555761305561399a565b600091825260209091200154600160401b90046001600160601b031691505b5060008581526101b36020908152604080832060ff88168452825280832080546001810182559084529282902086519301805492870151918701516001600160601b0316600160401b026bffffffffffffffffffffffff60401b1963ffffffff938416600160201b0267ffffffffffffffff199095169390951692909217929092179290921691909117905590509392505050565b803560ff8116811461311a57600080fd5b919050565b803563ffffffff8116811461311a57600080fd5b60008060006060848603121561314857600080fd5b8335925061315860208501613109565b91506131666040850161311f565b90509250925092565b6001600160a01b03811681146115ad57600080fd5b6000806040838503121561319757600080fd5b6131a083613109565b915060208301356131b08161316f565b809150509250929050565b6000806000606084860312156131d057600080fd5b6131d984613109565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b0316908201526060810161139f565b60008083601f84011261323557600080fd5b5081356001600160401b0381111561324c57600080fd5b60208301915083602082850101111561326457600080fd5b9250929050565b6000806000806060858703121561328157600080fd5b843561328c8161316f565b93506020850135925060408501356001600160401b038111156132ae57600080fd5b6132ba87828801613223565b95989497509550505050565b60008083601f8401126132d857600080fd5b5081356001600160401b038111156132ef57600080fd5b6020830191508360208260051b850101111561326457600080fd5b60008060006040848603121561331f57600080fd5b61332884613109565b925060208401356001600160401b0381111561334357600080fd5b61334f868287016132c6565b9497909650939450505050565b60008060008060006060868803121561337457600080fd5b61337d86613109565b945060208601356001600160401b038082111561339957600080fd5b6133a589838a016132c6565b909650945060408801359150808211156133be57600080fd5b506133cb888289016132c6565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613414576134146133dc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613442576134426133dc565b604052919050565b60006001600160401b03821115613463576134636133dc565b5060051b60200190565b80356001600160601b038116811461311a57600080fd5b600082601f83011261349557600080fd5b813560206134aa6134a58361344a565b61341a565b82815260069290921b840181019181810190868411156134c957600080fd5b8286015b8481101561351857604081890312156134e65760008081fd5b6134ee6133f2565b81356134f98161316f565b815261350682860161346d565b818601528352918301916040016134cd565b509695505050505050565b600082601f83011261353457600080fd5b813560206135446134a58361344a565b82815260059290921b8401810191818101908684111561356357600080fd5b8286015b848110156135185780356001600160401b038111156135865760008081fd5b6135948986838b0101613484565b845250918301918301613567565b600080604083850312156135b557600080fd5b82356001600160401b03808211156135cc57600080fd5b818501915085601f8301126135e057600080fd5b813560206135f06134a58361344a565b82815260059290921b8401810191818101908984111561360f57600080fd5b948201945b83861015613634576136258661346d565b82529482019490820190613614565b9650508601359250508082111561364a57600080fd5b5061365785828601613523565b9150509250929050565b6000806040838503121561367457600080fd5b8235915061368460208401613109565b90509250929050565b600080604083850312156136a057600080fd5b6136a983613109565b946020939093013593505050565b6000602082840312156136c957600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561373c5761372983855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b92840192606092909201916001016136ec565b50909695505050505050565b60006020828403121561375a57600080fd5b81356001600160401b0381111561377057600080fd5b61126d84828501613484565b60006020828403121561378e57600080fd5b61068482613109565b600080600080608085870312156137ad57600080fd5b6137b685613109565b93506137c46020860161311f565b93969395505050506040820135916060013590565b600080604083850312156137ec57600080fd5b6137f583613109565b915060208301356001600160401b0381111561381057600080fd5b61365785828601613484565b6000806040838503121561382f57600080fd5b61383883613109565b91506136846020840161346d565b60008060006040848603121561385b57600080fd5b8335925060208401356001600160401b0381111561387857600080fd5b61334f86828701613223565b60008060006060848603121561389957600080fd5b6138a284613109565b92506138b06020850161311f565b9150604084013590509250925092565b600080602083850312156138d357600080fd5b82356001600160401b038111156138e957600080fd5b6138f5858286016132c6565b90969095509350505050565b60008060006040848603121561391657600080fd5b61391f8461311f565b925060208401356001600160401b0381111561387857600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561373c57835163ffffffff1683529284019291840191600101613956565b6001600160a01b039290921682526001600160601b0316602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6020808252603c908201527f566f746557656967686572426173652e76616c696451756f72756d4e756d626560408201527f723a2071756f72756d4e756d626572206973206e6f742076616c696400000000606082015260800190565b600060208284031215613a1f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613a5657613a56613a26565b500290565b600082613a7857634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b03808316818516808303821115613a9f57613a9f613a26565b01949350505050565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b600082821015613b2c57613b2c613a26565b500390565b600060208284031215613b4357600080fd5b81516106848161316f565b60208082526056908201527f566f746557656967686572426173652e6f6e6c79536572766963654d616e616760408201527f65724f776e65723a2063616c6c6572206973206e6f7420746865206f776e65726060820152751037b3103a34329039b2b93b34b1b2a6b0b730b3b2b960511b608082015260a00190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613bf257600080fd5b6106848261346d565b60006001600160601b0383811690831681811015613c1b57613c1b613a26565b039392505050565b600060208284031215613c3557600080fd5b81356106848161316f565b600060208284031215613c5257600080fd5b81516001600160c01b038116811461068457600080fd5b600063ffffffff83811690831681811015613c1b57613c1b613a26565b600063ffffffff80831681811415613ca057613ca0613a26565b6001019392505050565b6000600019821415613cbe57613cbe613a26565b5060010190565b600061ffff808316818516808303821115613a9f57613a9f613a26565b60008219821115613cf557613cf5613a26565b50019056fe566f746557656967686572426173652e5f61646453747261746567696573436fa2646970667358221220325d58ca10e94f7fc8a2ccc43593872998c7b2ae5768b3bce1e28bc654af420164736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAX_WEIGHING_FUNCTION_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WEIGHTING_DIVISOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategies\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentStake\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentTotalStake\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestStakeUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StakeUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeAtBlockNumber\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeAtBlockNumberAndIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeHistory\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StakeUpdate[]\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeHistoryLength\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StakeUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeUpdateIndexAtBlockNumber\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeAtBlockNumberFromIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeHistoryLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StakeUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minimumStakeForQuorum\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyStrategyParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"strategyIndices\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"newMultipliers\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategies\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"indicesToRemove\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinimumStakeForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyParams\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyParamsByIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StrategyParams\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyParamsLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateOperatorStake\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"weightOfOperatorForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MinimumStakeForQuorumUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorStakeUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"},{\"name\":\"stake\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumCreated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyMultiplierUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false}]", + Bin: "0x60c06040523480156200001157600080fd5b506040516200374b3803806200374b833981016040819052620000349162000065565b6001600160a01b0391821660a05216608052620000a4565b6001600160a01b03811681146200006257600080fd5b50565b600080604083850312156200007957600080fd5b825162000086816200004c565b602084015190925062000099816200004c565b809150509250929050565b60805160a051613642620001096000396000818161036f015281816106140152818161095101528181610cc80152818161101e0152818161154101528181611643015281816117670152611b2501526000818161050b0152611d4901526136426000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac6bfb0311610104578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461052d578063f851e19814610540578063fa28c62714610553578063ff694a771461056657600080fd5b8063c8294c56146104b8578063d5eccc05146104cb578063dd9846b9146104de578063df5cf7231461050657600080fd5b8063bc9a40c3116100de578063bc9a40c314610456578063bd29b8cd14610469578063c46778a51461047c578063c601527d146104a557600080fd5b8063ac6bfb03146103e3578063adc804da14610403578063b6904b781461044357600080fd5b80634bd26e091161017c57806366acfefe1161014b57806366acfefe1461033f5780636d14a9871461036a5780637c172347146103a957806381c07502146103c357600080fd5b80634bd26e09146102da5780635401ed271461030a5780635e5a67751461031d5780635f1f2d771461032c57600080fd5b806320b66298116101b857806320b662981461026157806325504777146102765780632cd95940146102975780633ca5a5f5146102b757600080fd5b80630491b41c146101df57806308732461146102155780631f9b74e014610236575b600080fd5b6102026101ed366004612b07565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b610228610223366004612b22565b610579565b60405161020c929190612b4c565b610249610244366004612b86565b6105c2565b6040516001600160601b03909116815260200161020c565b61027461026f366004612c01565b610612565b005b610289610284366004612cc2565b610943565b60405161020c929190612d61565b6102aa6102a5366004612d86565b610c0e565b60405161020c9190612db2565b6102026102c5366004612b07565b60ff1660009081526003602052604090205490565b6102026102e8366004612d86565b600091825260026020908152604080842060ff93909316845291905290205490565b610249610318366004612d86565b610cad565b610202670de0b6b3a764000081565b61027461033a366004612ebb565b610cc6565b61035261034d366004612cc2565b611011565b6040516001600160c01b03909116815260200161020c565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020c565b6103b1602081565b60405160ff909116815260200161020c565b6103d66103d1366004612f77565b61116b565b60405161020c9190612fc9565b6103f66103f1366004613007565b61139e565b60405161020c919061303a565b610416610411366004612b22565b611436565b6040805182516001600160a01b031681526020928301516001600160601b0316928101929092520161020c565b6103f6610451366004612b22565b6114b0565b610274610464366004613086565b61153f565b6102746104773660046130b0565b611638565b61024961048a366004612b07565b6000602081905290815260409020546001600160601b031681565b6102746104b336600461317c565b611765565b6102496104c63660046131c9565b611859565b6102496104d9366004612b07565b6118d7565b6104f16104ec366004613205565b61192a565b60405163ffffffff909116815260200161020c565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b61024961053b366004613241565b61193f565b6103f661054e366004612d86565b6119d4565b610249610561366004613205565b611ab9565b610274610574366004613283565b611b1a565b6003602052816000526040600020818154811061059557600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff821660009081526001602052604081205483906105fc5760405162461bcd60e51b81526004016105f3906132e0565b60405180910390fd5b60006106088585611c85565b5095945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106949190613331565b6001600160a01b0316336001600160a01b0316146106c45760405162461bcd60e51b81526004016105f39061334e565b846106e08160ff16600090815260016020526040902054151590565b6106fc5760405162461bcd60e51b81526004016105f3906132e0565b8380610772576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f766964656460648201526084016105f3565b8281146107e75760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d617463680000000000000060648201526084016105f3565b60ff87166000908152600360205260408120905b8281101561093857858582818110610815576108156133ca565b905060200201602081019061082a91906133e0565b8289898481811061083d5761083d6133ca565b9050602002013581548110610854576108546133ca565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108bd576108bd6133ca565b90506020020135815481106108d4576108d46133ca565b6000918252602090912001546001600160a01b03168888858181106108fb576108fb6133ca565b905060200201602081019061091091906133e0565b60405161091e929190612b4c565b60405180910390a28061093081613411565b9150506107fb565b505050505050505050565b606080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461098e5760405162461bcd60e51b81526004016105f39061342c565b6000836001600160401b038111156109a8576109a8612e2a565b6040519080825280602002602001820160405280156109d1578160200160208202803683370190505b5090506000846001600160401b038111156109ee576109ee612e2a565b604051908082528060200260200182016040528015610a17578160200160208202803683370190505b50905060005b85811015610c00576000878783818110610a3957610a396133ca565b919091013560f81c60008181526001602052604090205490925015159050610ac15760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b60648201526084016105f3565b600080610ace838d611c85565b9150915080610b6b5760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a4016105f3565b6000610b788c8585611e3b565b905082878681518110610b8d57610b8d6133ca565b60200260200101906001600160601b031690816001600160601b031681525050610bb784826120bb565b868681518110610bc957610bc96133ca565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610bf890613411565b915050610a1d565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610ca0576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c47565b5050505090505b92915050565b600080610cba84846119d4565b60400151949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d489190613331565b6001600160a01b0316336001600160a01b031614610d785760405162461bcd60e51b81526004016105f39061334e565b81610d948160ff16600090815260016020526040902054151590565b610db05760405162461bcd60e51b81526004016105f3906132e0565b815180610e255760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f766964656400000060648201526084016105f3565b60ff84166000908152600360205260408120905b82811015611009578560ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f783878481518110610e7957610e796133ca565b602002602001015181548110610e9157610e916133ca565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28560ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7583878481518110610eef57610eef6133ca565b602002602001015181548110610f0757610f076133ca565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a281548290610f479060019061349e565b81548110610f5757610f576133ca565b9060005260206000200182868381518110610f7457610f746133ca565b602002602001015181548110610f8c57610f8c6133ca565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558154829080610fdf57610fdf6134b5565b6000828152602081208201600019908101919091550190558061100181613411565b915050610e39565b505050505050565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461105b5760405162461bcd60e51b81526004016105f39061342c565b6000805b8381101561060857600085858381811061107b5761107b6133ca565b919091013560f81c6000818152600160205260409020549092501515905061110b5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f74206578697374000000000000000060648201526084016105f3565b600080611118838b611c85565b915091508061113a5760009150600160ff84161b6001600160c01b0386161794505b60006111478a8585611e3b565b905061115384826120bb565b5050505050808061116390613411565b91505061105f565b60606000826001600160401b0381111561118757611187612e2a565b6040519080825280602002602001820160405280156111b0578160200160208202803683370190505b50905060005b838110156113935760008585838181106111d2576111d26133ca565b919091013560f81c6000818152600160205260408120805492945063ffffffff8b16935091611203576112036133ca565b60009182526020909120015463ffffffff1611156112af5760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a4016105f3565b60ff8116600090815260016020526040812054905b8181101561137d5760ff8316600090815260016020819052604090912063ffffffff8b16916112f3848661349e565b6112fd919061349e565b8154811061130d5761130d6133ca565b60009182526020909120015463ffffffff161161136b576001611330828461349e565b61133a919061349e565b85858151811061134c5761134c6133ca565b602002602001019063ffffffff16908163ffffffff168152505061137d565b8061137581613411565b9150506112c4565b505050808061138b90613411565b9150506111b6565b5090505b9392505050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff881683529052919091208054839081106113e3576113e36133ca565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff8316600090815260036020526040902080548390811061146e5761146e6133ca565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260019052919091208054839081106114ed576114ed6133ca565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561159d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c19190613331565b6001600160a01b0316336001600160a01b0316146115f15760405162461bcd60e51b81526004016105f39061334e565b8161160d8160ff16600090815260016020526040902054151590565b6116295760405162461bcd60e51b81526004016105f3906132e0565b6116338383612235565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116805760405162461bcd60e51b81526004016105f39061342c565b60005b8181101561175f57600083838381811061169f5761169f6133ca565b919091013560f81c6000818152600160205260409020549092501515905061172f5760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f7420657869737400000000000000000060648201526084016105f3565b600061173d86836000611e3b565b905061174982826120bb565b505050808061175790613411565b915050611683565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190613331565b6001600160a01b0316336001600160a01b0316146118175760405162461bcd60e51b81526004016105f39061334e565b816118338160ff16600090815260016020526040902054151590565b61184f5760405162461bcd60e51b81526004016105f3906132e0565b611633838361229e565b60ff83166000908152600160205260408120805482919084908110611880576118806133ca565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cba8185612682565b60ff811660009081526001602081905260408220805490916118f89161349e565b81548110611908576119086133ca565b600091825260209091200154600160401b90046001600160601b031692915050565b600061193784848461280d565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611970576119706133ca565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015290506119c78186612682565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611a2d579150610ca79050565b600085815260026020908152604080832060ff881684529091529020611a5460018461349e565b81548110611a6457611a646133ca565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610ca7915050565b600083815260026020908152604080832060ff861684529091528120611ae085858561280d565b63ffffffff1681548110611af657611af66133ca565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b625760405162461bcd60e51b81526004016105f39061342c565b60ff831660009081526001602052604090205415611be05760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b60648201526084016105f3565b611bea838261229e565b611bf48383612235565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611ca48660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060005b82811015611e085760ff88166000908152600360205260409020805482908110611cea57611cea6133ca565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b81528b8316600482015260248101919091529194507f0000000000000000000000000000000000000000000000000000000000000000169063778e55f390604401602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db491906134cb565b90508015611df557670de0b6b3a764000083602001516001600160601b031682611dde91906134e4565b611de89190613503565b611df29086613525565b94505b5080611e0081613411565b915050611cbe565b50505060ff85166000908152602081905260409020549092506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff86168452909152812054819080611eff57600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055612061565b600086815260026020908152604080832060ff891684529091528120611f2660018461349e565b81548110611f3657611f366133ca565b600091825260209091200180546001600160601b03600160401b909104811694509091508516831415611f6f5760009350505050611397565b80544363ffffffff90811691161415611fa9578054600160401b600160a01b031916600160401b6001600160601b0387160217815561205f565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26120b18285612aab565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906120df908461349e565b815481106120ef576120ef6133ca565b906000526020600020019050836000141561211e5754600160401b90046001600160601b03169150610ca79050565b805460009061213d90600160401b90046001600160601b031686612ac3565b82549091504363ffffffff9081169116141561217a578154600160401b600160a01b031916600160401b6001600160601b0383160217825561222c565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b60008151116123035760405162461bcd60e51b815260206004820152603860248201526000805160206135ed83398151915260448201527f3a206e6f20737472617465676965732070726f7669646564000000000000000060648201526084016105f3565b805160ff8316600090815260036020908152604090912054906123268383613550565b11156123965760405162461bcd60e51b815260206004820152604560248201526000805160206135ed83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a4016105f3565b60005b8281101561267b5760005b6123ae8284613550565b81101561248f578482815181106123c7576123c76133ca565b6020026020010151600001516001600160a01b0316600360008860ff1660ff1681526020019081526020016000208281548110612406576124066133ca565b6000918252602090912001546001600160a01b0316141561247d5760405162461bcd60e51b815260206004820152603d60248201526000805160206135ed83398151915260448201527f3a2063616e6e6f74206164642073616d6520737472617465677920327800000060648201526084016105f3565b8061248781613411565b9150506123a4565b5060008482815181106124a4576124a46133ca565b6020026020010151602001516001600160601b0316116125295760405162461bcd60e51b815260206004820152604660248201526000805160206135ed83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a4016105f3565b60ff85166000908152600360205260409020845185908390811061254f5761254f6133ca565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f5404908690849081106125cc576125cc6133ca565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612629576126296133ca565b602002602001015160000151868481518110612647576126476133ca565b602002602001015160200151604051612661929190612b4c565b60405180910390a28061267381613411565b915050612399565b5050505050565b816000015163ffffffff168163ffffffff16101561272e5760405162461bcd60e51b815260206004820152606060248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a206f70657261746f725374616b6560648201527f5570646174652069732066726f6d20616674657220626c6f636b4e756d626572608482015260a4016105f3565b602082015163ffffffff1615806127545750816020015163ffffffff168163ffffffff16105b6128095760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a2074686572652069732061206e6560648201527f776572206f70657261746f725374616b6555706461746520617661696c61626c60848201527332903132b337b93290313637b1b5a73ab6b132b960611b60a482015260c4016105f3565b5050565b600083815260026020908152604080832060ff86168452909152812054815b818110156129e657600086815260026020908152604080832060ff89168452909152902063ffffffff8516906001612864848661349e565b61286e919061349e565b8154811061287e5761287e6133ca565b60009182526020909120015463ffffffff16116129d457600086815260026020908152604080832060ff89168452909152812060016128bd848661349e565b6128c7919061349e565b815481106128d7576128d76133ca565b600091825260209091200154600160201b900463ffffffff16905080158061290a57508463ffffffff168163ffffffff16115b6129b45760405162461bcd60e51b815260206004820152606960248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206f70657260648201527f61746f72496420686173206e6f207374616b652075706461746520617420626c60848201526837b1b5a73ab6b132b960b91b60a482015260c4016105f3565b60016129c0838561349e565b6129ca919061349e565b9350505050611397565b806129de81613411565b91505061282c565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e4016105f3565b60006113976001600160601b03808516908416613568565b600080821215612ae757612ad6826135a7565b612ae090846135c4565b9050610ca7565b612ae08284613525565b803560ff81168114612b0257600080fd5b919050565b600060208284031215612b1957600080fd5b61139782612af1565b60008060408385031215612b3557600080fd5b612b3e83612af1565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612b8357600080fd5b50565b60008060408385031215612b9957600080fd5b612ba283612af1565b91506020830135612bb281612b6e565b809150509250929050565b60008083601f840112612bcf57600080fd5b5081356001600160401b03811115612be657600080fd5b6020830191508360208260051b8501011115611e3457600080fd5b600080600080600060608688031215612c1957600080fd5b612c2286612af1565b945060208601356001600160401b0380821115612c3e57600080fd5b612c4a89838a01612bbd565b90965094506040880135915080821115612c6357600080fd5b50612c7088828901612bbd565b969995985093965092949392505050565b60008083601f840112612c9357600080fd5b5081356001600160401b03811115612caa57600080fd5b602083019150836020828501011115611e3457600080fd5b60008060008060608587031215612cd857600080fd5b8435612ce381612b6e565b93506020850135925060408501356001600160401b03811115612d0557600080fd5b612d1187828801612c81565b95989497509550505050565b600081518084526020808501945080840160005b83811015612d565781516001600160601b031687529582019590820190600101612d31565b509495945050505050565b604081526000612d746040830185612d1d565b828103602084015261222c8185612d1d565b60008060408385031215612d9957600080fd5b82359150612da960208401612af1565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612e1e57612e0b83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612dce565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612e6257612e62612e2a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612e9057612e90612e2a565b604052919050565b60006001600160401b03821115612eb157612eb1612e2a565b5060051b60200190565b60008060408385031215612ece57600080fd5b612ed783612af1565b91506020808401356001600160401b03811115612ef357600080fd5b8401601f81018613612f0457600080fd5b8035612f17612f1282612e98565b612e68565b81815260059190911b82018301908381019088831115612f3657600080fd5b928401925b82841015612f5457833582529284019290840190612f3b565b80955050505050509250929050565b803563ffffffff81168114612b0257600080fd5b600080600060408486031215612f8c57600080fd5b612f9584612f63565b925060208401356001600160401b03811115612fb057600080fd5b612fbc86828701612c81565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612e1e57835163ffffffff1683529284019291840191600101612fe5565b60008060006060848603121561301c57600080fd5b61302584612af1565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610ca7565b80356001600160601b0381168114612b0257600080fd5b6000806040838503121561309957600080fd5b6130a283612af1565b9150612da96020840161306f565b6000806000604084860312156130c557600080fd5b8335925060208401356001600160401b03811115612fb057600080fd5b600082601f8301126130f357600080fd5b81356020613103612f1283612e98565b82815260069290921b8401810191818101908684111561312257600080fd5b8286015b84811015613171576040818903121561313f5760008081fd5b613147612e40565b813561315281612b6e565b815261315f82860161306f565b81860152835291830191604001613126565b509695505050505050565b6000806040838503121561318f57600080fd5b61319883612af1565b915060208301356001600160401b038111156131b357600080fd5b6131bf858286016130e2565b9150509250929050565b6000806000606084860312156131de57600080fd5b6131e784612af1565b92506131f560208501612f63565b9150604084013590509250925092565b60008060006060848603121561321a57600080fd5b8335925061322a60208501612af1565b915061323860408501612f63565b90509250925092565b6000806000806080858703121561325757600080fd5b61326085612af1565b935061326e60208601612f63565b93969395505050506040820135916060013590565b60008060006060848603121561329857600080fd5b6132a184612af1565b92506132af6020850161306f565b915060408401356001600160401b038111156132ca57600080fd5b6132d6868287016130e2565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561334357600080fd5b815161139781612b6e565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133f257600080fd5b6113978261306f565b634e487b7160e01b600052601160045260246000fd5b6000600019821415613425576134256133fb565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156134b0576134b06133fb565b500390565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156134dd57600080fd5b5051919050565b60008160001904831182151516156134fe576134fe6133fb565b500290565b60008261352057634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b03808316818516808303821115613547576135476133fb565b01949350505050565b60008219821115613563576135636133fb565b500190565b60008083128015600160ff1b850184121615613586576135866133fb565b6001600160ff1b03840183138116156135a1576135a16133fb565b50500390565b6000600160ff1b8214156135bd576135bd6133fb565b5060000390565b60006001600160601b03838116908316818110156135e4576135e46133fb565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a26469706673582212205e32ecef2c4234c218247eea65e7233b5babef90df9e758872dfeb68cd17e56164736f6c634300080c0033", } // ContractStakeRegistryABI is the input ABI used to generate the binding from. @@ -57,7 +57,7 @@ var ContractStakeRegistryABI = ContractStakeRegistryMetaData.ABI var ContractStakeRegistryBin = ContractStakeRegistryMetaData.Bin // DeployContractStakeRegistry deploys a new Ethereum contract, binding an instance of ContractStakeRegistry to it. -func DeployContractStakeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address, _strategyManager common.Address, _serviceManager common.Address) (common.Address, *types.Transaction, *ContractStakeRegistry, error) { +func DeployContractStakeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address, _delegationManager common.Address) (common.Address, *types.Transaction, *ContractStakeRegistry, error) { parsed, err := ContractStakeRegistryMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -66,7 +66,7 @@ func DeployContractStakeRegistry(auth *bind.TransactOpts, backend bind.ContractB return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractStakeRegistryBin), backend, _registryCoordinator, _strategyManager, _serviceManager) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractStakeRegistryBin), backend, _registryCoordinator, _delegationManager) if err != nil { return common.Address{}, nil, nil, err } @@ -82,103 +82,87 @@ type ContractStakeRegistryMethods interface { // ContractStakeRegistryCalls is an auto generated interface that defines the call methods available for an Ethereum contract. type ContractStakeRegistryCalls interface { - MAXQUORUMCOUNT(opts *bind.CallOpts) (uint8, error) - MAXWEIGHINGFUNCTIONLENGTH(opts *bind.CallOpts) (uint8, error) WEIGHTINGDIVISOR(opts *bind.CallOpts) (*big.Int, error) Delegation(opts *bind.CallOpts) (common.Address, error) - GetCurrentOperatorStakeForQuorum(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) - - GetCurrentTotalStakeForQuorum(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) + GetCurrentStake(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) - GetLengthOfOperatorIdStakeHistoryForQuorum(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) + GetCurrentTotalStake(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) - GetLengthOfTotalStakeHistoryForQuorum(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) + GetLatestStakeUpdate(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) - GetMostRecentStakeUpdateByOperatorId(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) + GetStakeAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) - GetOperatorIdToStakeHistory(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) + GetStakeAtBlockNumberAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) - GetStakeForOperatorIdForQuorumAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) + GetStakeHistory(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) - GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) + GetStakeHistoryLength(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) - GetStakeUpdateForQuorumFromOperatorIdAndIndex(opts *bind.CallOpts, quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) + GetStakeUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) - GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) + GetStakeUpdateIndexAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) GetTotalStakeAtBlockNumberFromIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index *big.Int) (*big.Int, error) - GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, quorumNumbers []byte) ([]uint32, error) + GetTotalStakeHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) - GetTotalStakeUpdateForQuorumFromIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) + GetTotalStakeIndicesAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, quorumNumbers []byte) ([]uint32, error) - MinimumStakeForQuorum(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) + GetTotalStakeUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) - QuorumCount(opts *bind.CallOpts) (uint16, error) + MinimumStakeForQuorum(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) - ServiceManager(opts *bind.CallOpts) (common.Address, error) - - Slasher(opts *bind.CallOpts) (common.Address, error) - - StrategiesConsideredAndMultipliers(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { + StrategyParams(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) - StrategiesConsideredAndMultipliersLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) - - StrategyAndWeightingMultiplierForQuorumByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) + StrategyParamsByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) - StrategyManager(opts *bind.CallOpts) (common.Address, error) + StrategyParamsLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) WeightOfOperatorForQuorum(opts *bind.CallOpts, quorumNumber uint8, operator common.Address) (*big.Int, error) } // ContractStakeRegistryTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. type ContractStakeRegistryTransacts interface { - AddStrategiesConsideredAndMultipliers(opts *bind.TransactOpts, quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) - - CreateQuorum(opts *bind.TransactOpts, _strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) + AddStrategies(opts *bind.TransactOpts, quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) DeregisterOperator(opts *bind.TransactOpts, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) - Initialize(opts *bind.TransactOpts, _minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) + InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) - ModifyStrategyWeights(opts *bind.TransactOpts, quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) + ModifyStrategyParams(opts *bind.TransactOpts, quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) RegisterOperator(opts *bind.TransactOpts, operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) - RemoveStrategiesConsideredAndMultipliers(opts *bind.TransactOpts, quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) + RemoveStrategies(opts *bind.TransactOpts, quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) SetMinimumStakeForQuorum(opts *bind.TransactOpts, quorumNumber uint8, minimumStake *big.Int) (*types.Transaction, error) - UpdateStakes(opts *bind.TransactOpts, operators []common.Address) (*types.Transaction, error) + UpdateOperatorStake(opts *bind.TransactOpts, operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) } // ContractStakeRegistryFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. type ContractStakeRegistryFilters interface { - FilterInitialized(opts *bind.FilterOpts) (*ContractStakeRegistryInitializedIterator, error) - WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryInitialized) (event.Subscription, error) - ParseInitialized(log types.Log) (*ContractStakeRegistryInitialized, error) - FilterMinimumStakeForQuorumUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryMinimumStakeForQuorumUpdatedIterator, error) WatchMinimumStakeForQuorumUpdated(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryMinimumStakeForQuorumUpdated, quorumNumber []uint8) (event.Subscription, error) ParseMinimumStakeForQuorumUpdated(log types.Log) (*ContractStakeRegistryMinimumStakeForQuorumUpdated, error) + FilterOperatorStakeUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractStakeRegistryOperatorStakeUpdateIterator, error) + WatchOperatorStakeUpdate(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryOperatorStakeUpdate, operatorId [][32]byte) (event.Subscription, error) + ParseOperatorStakeUpdate(log types.Log) (*ContractStakeRegistryOperatorStakeUpdate, error) + FilterQuorumCreated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryQuorumCreatedIterator, error) WatchQuorumCreated(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryQuorumCreated, quorumNumber []uint8) (event.Subscription, error) ParseQuorumCreated(log types.Log) (*ContractStakeRegistryQuorumCreated, error) - FilterStakeUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractStakeRegistryStakeUpdateIterator, error) - WatchStakeUpdate(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryStakeUpdate, operatorId [][32]byte) (event.Subscription, error) - ParseStakeUpdate(log types.Log) (*ContractStakeRegistryStakeUpdate, error) - FilterStrategyAddedToQuorum(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryStrategyAddedToQuorumIterator, error) WatchStrategyAddedToQuorum(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryStrategyAddedToQuorum, quorumNumber []uint8) (event.Subscription, error) ParseStrategyAddedToQuorum(log types.Log) (*ContractStakeRegistryStrategyAddedToQuorum, error) @@ -346,37 +330,6 @@ func (_ContractStakeRegistry *ContractStakeRegistryTransactorRaw) Transact(opts return _ContractStakeRegistry.Contract.contract.Transact(opts, method, params...) } -// MAXQUORUMCOUNT is a free data retrieval call binding the contract method 0xa6734667. -// -// Solidity: function MAX_QUORUM_COUNT() view returns(uint8) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) MAXQUORUMCOUNT(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "MAX_QUORUM_COUNT") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// MAXQUORUMCOUNT is a free data retrieval call binding the contract method 0xa6734667. -// -// Solidity: function MAX_QUORUM_COUNT() view returns(uint8) -func (_ContractStakeRegistry *ContractStakeRegistrySession) MAXQUORUMCOUNT() (uint8, error) { - return _ContractStakeRegistry.Contract.MAXQUORUMCOUNT(&_ContractStakeRegistry.CallOpts) -} - -// MAXQUORUMCOUNT is a free data retrieval call binding the contract method 0xa6734667. -// -// Solidity: function MAX_QUORUM_COUNT() view returns(uint8) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) MAXQUORUMCOUNT() (uint8, error) { - return _ContractStakeRegistry.Contract.MAXQUORUMCOUNT(&_ContractStakeRegistry.CallOpts) -} - // MAXWEIGHINGFUNCTIONLENGTH is a free data retrieval call binding the contract method 0x7c172347. // // Solidity: function MAX_WEIGHING_FUNCTION_LENGTH() view returns(uint8) @@ -470,12 +423,12 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) Delegation() ( return _ContractStakeRegistry.Contract.Delegation(&_ContractStakeRegistry.CallOpts) } -// GetCurrentOperatorStakeForQuorum is a free data retrieval call binding the contract method 0x6ab538d4. +// GetCurrentStake is a free data retrieval call binding the contract method 0x5401ed27. // -// Solidity: function getCurrentOperatorStakeForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentOperatorStakeForQuorum(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getCurrentStake(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentStake(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentOperatorStakeForQuorum", operatorId, quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentStake", operatorId, quorumNumber) if err != nil { return *new(*big.Int), err @@ -487,26 +440,26 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentOperatorSta } -// GetCurrentOperatorStakeForQuorum is a free data retrieval call binding the contract method 0x6ab538d4. +// GetCurrentStake is a free data retrieval call binding the contract method 0x5401ed27. // -// Solidity: function getCurrentOperatorStakeForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentOperatorStakeForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentOperatorStakeForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getCurrentStake(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentStake(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentStake(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetCurrentOperatorStakeForQuorum is a free data retrieval call binding the contract method 0x6ab538d4. +// GetCurrentStake is a free data retrieval call binding the contract method 0x5401ed27. // -// Solidity: function getCurrentOperatorStakeForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentOperatorStakeForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentOperatorStakeForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getCurrentStake(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentStake(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentStake(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetCurrentTotalStakeForQuorum is a free data retrieval call binding the contract method 0xc8f739d0. +// GetCurrentTotalStake is a free data retrieval call binding the contract method 0xd5eccc05. // -// Solidity: function getCurrentTotalStakeForQuorum(uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentTotalStakeForQuorum(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getCurrentTotalStake(uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentTotalStake(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentTotalStakeForQuorum", quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentTotalStake", quorumNumber) if err != nil { return *new(*big.Int), err @@ -518,57 +471,57 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentTotalStakeF } -// GetCurrentTotalStakeForQuorum is a free data retrieval call binding the contract method 0xc8f739d0. +// GetCurrentTotalStake is a free data retrieval call binding the contract method 0xd5eccc05. // -// Solidity: function getCurrentTotalStakeForQuorum(uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentTotalStakeForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentTotalStakeForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getCurrentTotalStake(uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentTotalStake(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentTotalStake(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetCurrentTotalStakeForQuorum is a free data retrieval call binding the contract method 0xc8f739d0. +// GetCurrentTotalStake is a free data retrieval call binding the contract method 0xd5eccc05. // -// Solidity: function getCurrentTotalStakeForQuorum(uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentTotalStakeForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentTotalStakeForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getCurrentTotalStake(uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentTotalStake(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentTotalStake(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetLengthOfOperatorIdStakeHistoryForQuorum is a free data retrieval call binding the contract method 0x6e8f03ca. +// GetLatestStakeUpdate is a free data retrieval call binding the contract method 0xf851e198. // -// Solidity: function getLengthOfOperatorIdStakeHistoryForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLengthOfOperatorIdStakeHistoryForQuorum(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getLatestStakeUpdate(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLatestStakeUpdate(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getLengthOfOperatorIdStakeHistoryForQuorum", operatorId, quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getLatestStakeUpdate", operatorId, quorumNumber) if err != nil { - return *new(*big.Int), err + return *new(IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStakeUpdate)).(*IStakeRegistryStakeUpdate) return out0, err } -// GetLengthOfOperatorIdStakeHistoryForQuorum is a free data retrieval call binding the contract method 0x6e8f03ca. +// GetLatestStakeUpdate is a free data retrieval call binding the contract method 0xf851e198. // -// Solidity: function getLengthOfOperatorIdStakeHistoryForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetLengthOfOperatorIdStakeHistoryForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfOperatorIdStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getLatestStakeUpdate(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetLatestStakeUpdate(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetLatestStakeUpdate(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetLengthOfOperatorIdStakeHistoryForQuorum is a free data retrieval call binding the contract method 0x6e8f03ca. +// GetLatestStakeUpdate is a free data retrieval call binding the contract method 0xf851e198. // -// Solidity: function getLengthOfOperatorIdStakeHistoryForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetLengthOfOperatorIdStakeHistoryForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfOperatorIdStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getLatestStakeUpdate(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetLatestStakeUpdate(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetLatestStakeUpdate(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetLengthOfTotalStakeHistoryForQuorum is a free data retrieval call binding the contract method 0xe89c0a00. +// GetStakeAtBlockNumber is a free data retrieval call binding the contract method 0xfa28c627. // -// Solidity: function getLengthOfTotalStakeHistoryForQuorum(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLengthOfTotalStakeHistoryForQuorum(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getStakeAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getLengthOfTotalStakeHistoryForQuorum", quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeAtBlockNumber", operatorId, quorumNumber, blockNumber) if err != nil { return *new(*big.Int), err @@ -580,119 +533,88 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLengthOfTotalStake } -// GetLengthOfTotalStakeHistoryForQuorum is a free data retrieval call binding the contract method 0xe89c0a00. +// GetStakeAtBlockNumber is a free data retrieval call binding the contract method 0xfa28c627. // -// Solidity: function getLengthOfTotalStakeHistoryForQuorum(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetLengthOfTotalStakeHistoryForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfTotalStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getStakeAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } -// GetLengthOfTotalStakeHistoryForQuorum is a free data retrieval call binding the contract method 0xe89c0a00. +// GetStakeAtBlockNumber is a free data retrieval call binding the contract method 0xfa28c627. // -// Solidity: function getLengthOfTotalStakeHistoryForQuorum(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetLengthOfTotalStakeHistoryForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfTotalStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getStakeAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } -// GetMostRecentStakeUpdateByOperatorId is a free data retrieval call binding the contract method 0xcd050d9c. +// GetStakeAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0xf2be94ae. // -// Solidity: function getMostRecentStakeUpdateByOperatorId(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetMostRecentStakeUpdateByOperatorId(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) { +// Solidity: function getStakeAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeAtBlockNumberAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getMostRecentStakeUpdateByOperatorId", operatorId, quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeAtBlockNumberAndIndex", quorumNumber, blockNumber, operatorId, index) if err != nil { - return *new(IStakeRegistryOperatorStakeUpdate), err - } - - out0 := *abi.ConvertType(out[0], new(IStakeRegistryOperatorStakeUpdate)).(*IStakeRegistryOperatorStakeUpdate) - - return out0, err - -} - -// GetMostRecentStakeUpdateByOperatorId is a free data retrieval call binding the contract method 0xcd050d9c. -// -// Solidity: function getMostRecentStakeUpdateByOperatorId(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetMostRecentStakeUpdateByOperatorId(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetMostRecentStakeUpdateByOperatorId(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) -} - -// GetMostRecentStakeUpdateByOperatorId is a free data retrieval call binding the contract method 0xcd050d9c. -// -// Solidity: function getMostRecentStakeUpdateByOperatorId(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetMostRecentStakeUpdateByOperatorId(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetMostRecentStakeUpdateByOperatorId(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) -} - -// GetOperatorIdToStakeHistory is a free data retrieval call binding the contract method 0x944472a9. -// -// Solidity: function getOperatorIdToStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetOperatorIdToStakeHistory(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getOperatorIdToStakeHistory", operatorId, quorumNumber) - - if err != nil { - return *new([]IStakeRegistryOperatorStakeUpdate), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([]IStakeRegistryOperatorStakeUpdate)).(*[]IStakeRegistryOperatorStakeUpdate) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// GetOperatorIdToStakeHistory is a free data retrieval call binding the contract method 0x944472a9. +// GetStakeAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0xf2be94ae. // -// Solidity: function getOperatorIdToStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetOperatorIdToStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetOperatorIdToStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getStakeAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumberAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) } -// GetOperatorIdToStakeHistory is a free data retrieval call binding the contract method 0x944472a9. +// GetStakeAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0xf2be94ae. // -// Solidity: function getOperatorIdToStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetOperatorIdToStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetOperatorIdToStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getStakeAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumberAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) } -// GetStakeForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x1b327225. +// GetStakeHistory is a free data retrieval call binding the contract method 0x2cd95940. // -// Solidity: function getStakeForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeForOperatorIdForQuorumAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { +// Solidity: function getStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeHistory(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeForOperatorIdForQuorumAtBlockNumber", operatorId, quorumNumber, blockNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeHistory", operatorId, quorumNumber) if err != nil { - return *new(*big.Int), err + return *new([]IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([]IStakeRegistryStakeUpdate)).(*[]IStakeRegistryStakeUpdate) return out0, err } -// GetStakeForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x1b327225. +// GetStakeHistory is a free data retrieval call binding the contract method 0x2cd95940. // -// Solidity: function getStakeForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x1b327225. +// GetStakeHistory is a free data retrieval call binding the contract method 0x2cd95940. // -// Solidity: function getStakeForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0xa43cde89. +// GetStakeHistoryLength is a free data retrieval call binding the contract method 0x4bd26e09. // -// Solidity: function getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { +// Solidity: function getStakeHistoryLength(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeHistoryLength(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex", quorumNumber, blockNumber, operatorId, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeHistoryLength", operatorId, quorumNumber) if err != nil { return *new(*big.Int), err @@ -704,57 +626,57 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeForQuorumAtBl } -// GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0xa43cde89. +// GetStakeHistoryLength is a free data retrieval call binding the contract method 0x4bd26e09. // -// Solidity: function getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) +// Solidity: function getStakeHistoryLength(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeHistoryLength(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeHistoryLength(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0xa43cde89. +// GetStakeHistoryLength is a free data retrieval call binding the contract method 0x4bd26e09. // -// Solidity: function getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) +// Solidity: function getStakeHistoryLength(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeHistoryLength(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeHistoryLength(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeUpdateForQuorumFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0x248d6573. +// GetStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xac6bfb03. // -// Solidity: function getStakeUpdateForQuorumFromOperatorIdAndIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateForQuorumFromOperatorIdAndIndex(opts *bind.CallOpts, quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { +// Solidity: function getStakeUpdateAtIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateForQuorumFromOperatorIdAndIndex", quorumNumber, operatorId, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateAtIndex", quorumNumber, operatorId, index) if err != nil { - return *new(IStakeRegistryOperatorStakeUpdate), err + return *new(IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(IStakeRegistryOperatorStakeUpdate)).(*IStakeRegistryOperatorStakeUpdate) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStakeUpdate)).(*IStakeRegistryStakeUpdate) return out0, err } -// GetStakeUpdateForQuorumFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0x248d6573. +// GetStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xac6bfb03. // -// Solidity: function getStakeUpdateForQuorumFromOperatorIdAndIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateForQuorumFromOperatorIdAndIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateForQuorumFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) +// Solidity: function getStakeUpdateAtIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateAtIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) } -// GetStakeUpdateForQuorumFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0x248d6573. +// GetStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xac6bfb03. // -// Solidity: function getStakeUpdateForQuorumFromOperatorIdAndIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateForQuorumFromOperatorIdAndIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateForQuorumFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) +// Solidity: function getStakeUpdateAtIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateAtIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) } -// GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x48085866. +// GetStakeUpdateIndexAtBlockNumber is a free data retrieval call binding the contract method 0xdd9846b9. // -// Solidity: function getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { +// Solidity: function getStakeUpdateIndexAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateIndexAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber", operatorId, quorumNumber, blockNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateIndexAtBlockNumber", operatorId, quorumNumber, blockNumber) if err != nil { return *new(uint32), err @@ -766,18 +688,18 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateIndexFo } -// GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x48085866. +// GetStakeUpdateIndexAtBlockNumber is a free data retrieval call binding the contract method 0xdd9846b9. // -// Solidity: function getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeUpdateIndexAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateIndexAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateIndexAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } -// GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x48085866. +// GetStakeUpdateIndexAtBlockNumber is a free data retrieval call binding the contract method 0xdd9846b9. // -// Solidity: function getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeUpdateIndexAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateIndexAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateIndexAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } // GetTotalStakeAtBlockNumberFromIndex is a free data retrieval call binding the contract method 0xc8294c56. @@ -811,128 +733,128 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeA return _ContractStakeRegistry.Contract.GetTotalStakeAtBlockNumberFromIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, index) } -// GetTotalStakeIndicesByQuorumNumbersAtBlockNumber is a free data retrieval call binding the contract method 0xe192e9ad. +// GetTotalStakeHistoryLength is a free data retrieval call binding the contract method 0x0491b41c. // -// Solidity: function getTotalStakeIndicesByQuorumNumbersAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { +// Solidity: function getTotalStakeHistoryLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeIndicesByQuorumNumbersAtBlockNumber", blockNumber, quorumNumbers) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeHistoryLength", quorumNumber) if err != nil { - return *new([]uint32), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// GetTotalStakeIndicesByQuorumNumbersAtBlockNumber is a free data retrieval call binding the contract method 0xe192e9ad. +// GetTotalStakeHistoryLength is a free data retrieval call binding the contract method 0x0491b41c. // -// Solidity: function getTotalStakeIndicesByQuorumNumbersAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) +// Solidity: function getTotalStakeHistoryLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeHistoryLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeHistoryLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetTotalStakeIndicesByQuorumNumbersAtBlockNumber is a free data retrieval call binding the contract method 0xe192e9ad. +// GetTotalStakeHistoryLength is a free data retrieval call binding the contract method 0x0491b41c. // -// Solidity: function getTotalStakeIndicesByQuorumNumbersAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) +// Solidity: function getTotalStakeHistoryLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeHistoryLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeHistoryLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetTotalStakeUpdateForQuorumFromIndex is a free data retrieval call binding the contract method 0xe25427dd. +// GetTotalStakeIndicesAtBlockNumber is a free data retrieval call binding the contract method 0x81c07502. // -// Solidity: function getTotalStakeUpdateForQuorumFromIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeUpdateForQuorumFromIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { +// Solidity: function getTotalStakeIndicesAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeIndicesAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeUpdateForQuorumFromIndex", quorumNumber, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeIndicesAtBlockNumber", blockNumber, quorumNumbers) if err != nil { - return *new(IStakeRegistryOperatorStakeUpdate), err + return *new([]uint32), err } - out0 := *abi.ConvertType(out[0], new(IStakeRegistryOperatorStakeUpdate)).(*IStakeRegistryOperatorStakeUpdate) + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) return out0, err } -// GetTotalStakeUpdateForQuorumFromIndex is a free data retrieval call binding the contract method 0xe25427dd. +// GetTotalStakeIndicesAtBlockNumber is a free data retrieval call binding the contract method 0x81c07502. // -// Solidity: function getTotalStakeUpdateForQuorumFromIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeUpdateForQuorumFromIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeUpdateForQuorumFromIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) +// Solidity: function getTotalStakeIndicesAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeIndicesAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeIndicesAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) } -// GetTotalStakeUpdateForQuorumFromIndex is a free data retrieval call binding the contract method 0xe25427dd. +// GetTotalStakeIndicesAtBlockNumber is a free data retrieval call binding the contract method 0x81c07502. // -// Solidity: function getTotalStakeUpdateForQuorumFromIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeUpdateForQuorumFromIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeUpdateForQuorumFromIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) +// Solidity: function getTotalStakeIndicesAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeIndicesAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeIndicesAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) } -// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0x7ed9430f. +// GetTotalStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xb6904b78. // -// Solidity: function minimumStakeForQuorum(uint256 ) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) MinimumStakeForQuorum(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { +// Solidity: function getTotalStakeUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "minimumStakeForQuorum", arg0) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeUpdateAtIndex", quorumNumber, index) if err != nil { - return *new(*big.Int), err + return *new(IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStakeUpdate)).(*IStakeRegistryStakeUpdate) return out0, err } -// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0x7ed9430f. +// GetTotalStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xb6904b78. // -// Solidity: function minimumStakeForQuorum(uint256 ) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) MinimumStakeForQuorum(arg0 *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) +// Solidity: function getTotalStakeUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeUpdateAtIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0x7ed9430f. +// GetTotalStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xb6904b78. // -// Solidity: function minimumStakeForQuorum(uint256 ) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) MinimumStakeForQuorum(arg0 *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) +// Solidity: function getTotalStakeUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeUpdateAtIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0xc46778a5. // -// Solidity: function quorumCount() view returns(uint16) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) QuorumCount(opts *bind.CallOpts) (uint16, error) { +// Solidity: function minimumStakeForQuorum(uint8 ) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) MinimumStakeForQuorum(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "quorumCount") + err := _ContractStakeRegistry.contract.Call(opts, &out, "minimumStakeForQuorum", arg0) if err != nil { - return *new(uint16), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0xc46778a5. // -// Solidity: function quorumCount() view returns(uint16) -func (_ContractStakeRegistry *ContractStakeRegistrySession) QuorumCount() (uint16, error) { - return _ContractStakeRegistry.Contract.QuorumCount(&_ContractStakeRegistry.CallOpts) +// Solidity: function minimumStakeForQuorum(uint8 ) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) MinimumStakeForQuorum(arg0 uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) } -// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0xc46778a5. // -// Solidity: function quorumCount() view returns(uint16) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) QuorumCount() (uint16, error) { - return _ContractStakeRegistry.Contract.QuorumCount(&_ContractStakeRegistry.CallOpts) +// Solidity: function minimumStakeForQuorum(uint8 ) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) MinimumStakeForQuorum(arg0 uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) } // RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. @@ -966,77 +888,15 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) RegistryCoordi return _ContractStakeRegistry.Contract.RegistryCoordinator(&_ContractStakeRegistry.CallOpts) } -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) ServiceManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "serviceManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistrySession) ServiceManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.ServiceManager(&_ContractStakeRegistry.CallOpts) -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) ServiceManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.ServiceManager(&_ContractStakeRegistry.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "slasher") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistrySession) Slasher() (common.Address, error) { - return _ContractStakeRegistry.Contract.Slasher(&_ContractStakeRegistry.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// StrategyParams is a free data retrieval call binding the contract method 0x08732461. // -// Solidity: function slasher() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) Slasher() (common.Address, error) { - return _ContractStakeRegistry.Contract.Slasher(&_ContractStakeRegistry.CallOpts) -} - -// StrategiesConsideredAndMultipliers is a free data retrieval call binding the contract method 0xeb92199c. -// -// Solidity: function strategiesConsideredAndMultipliers(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategiesConsideredAndMultipliers(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { +// Solidity: function strategyParams(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyParams(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategiesConsideredAndMultipliers", arg0, arg1) + err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyParams", arg0, arg1) outstruct := new(struct { Strategy common.Address @@ -1053,117 +913,86 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategiesConsideredA } -// StrategiesConsideredAndMultipliers is a free data retrieval call binding the contract method 0xeb92199c. +// StrategyParams is a free data retrieval call binding the contract method 0x08732461. // -// Solidity: function strategiesConsideredAndMultipliers(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategiesConsideredAndMultipliers(arg0 uint8, arg1 *big.Int) (struct { +// Solidity: function strategyParams(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) +func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyParams(arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliers(&_ContractStakeRegistry.CallOpts, arg0, arg1) + return _ContractStakeRegistry.Contract.StrategyParams(&_ContractStakeRegistry.CallOpts, arg0, arg1) } -// StrategiesConsideredAndMultipliers is a free data retrieval call binding the contract method 0xeb92199c. +// StrategyParams is a free data retrieval call binding the contract method 0x08732461. // -// Solidity: function strategiesConsideredAndMultipliers(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategiesConsideredAndMultipliers(arg0 uint8, arg1 *big.Int) (struct { +// Solidity: function strategyParams(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyParams(arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliers(&_ContractStakeRegistry.CallOpts, arg0, arg1) + return _ContractStakeRegistry.Contract.StrategyParams(&_ContractStakeRegistry.CallOpts, arg0, arg1) } -// StrategiesConsideredAndMultipliersLength is a free data retrieval call binding the contract method 0x9e8ca620. +// StrategyParamsByIndex is a free data retrieval call binding the contract method 0xadc804da. // -// Solidity: function strategiesConsideredAndMultipliersLength(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategiesConsideredAndMultipliersLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { +// Solidity: function strategyParamsByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyParamsByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategiesConsideredAndMultipliersLength", quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyParamsByIndex", quorumNumber, index) if err != nil { - return *new(*big.Int), err + return *new(IStakeRegistryStrategyParams), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStrategyParams)).(*IStakeRegistryStrategyParams) return out0, err } -// StrategiesConsideredAndMultipliersLength is a free data retrieval call binding the contract method 0x9e8ca620. +// StrategyParamsByIndex is a free data retrieval call binding the contract method 0xadc804da. // -// Solidity: function strategiesConsideredAndMultipliersLength(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategiesConsideredAndMultipliersLength(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliersLength(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function strategyParamsByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyParamsByIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) { + return _ContractStakeRegistry.Contract.StrategyParamsByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// StrategiesConsideredAndMultipliersLength is a free data retrieval call binding the contract method 0x9e8ca620. +// StrategyParamsByIndex is a free data retrieval call binding the contract method 0xadc804da. // -// Solidity: function strategiesConsideredAndMultipliersLength(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategiesConsideredAndMultipliersLength(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliersLength(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function strategyParamsByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyParamsByIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) { + return _ContractStakeRegistry.Contract.StrategyParamsByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// StrategyAndWeightingMultiplierForQuorumByIndex is a free data retrieval call binding the contract method 0x7cc0d75f. +// StrategyParamsLength is a free data retrieval call binding the contract method 0x3ca5a5f5. // -// Solidity: function strategyAndWeightingMultiplierForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyAndWeightingMultiplierForQuorumByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) { +// Solidity: function strategyParamsLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyParamsLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyAndWeightingMultiplierForQuorumByIndex", quorumNumber, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyParamsLength", quorumNumber) if err != nil { - return *new(IVoteWeigherStrategyAndWeightingMultiplier), err - } - - out0 := *abi.ConvertType(out[0], new(IVoteWeigherStrategyAndWeightingMultiplier)).(*IVoteWeigherStrategyAndWeightingMultiplier) - - return out0, err - -} - -// StrategyAndWeightingMultiplierForQuorumByIndex is a free data retrieval call binding the contract method 0x7cc0d75f. -// -// Solidity: function strategyAndWeightingMultiplierForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyAndWeightingMultiplierForQuorumByIndex(quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) { - return _ContractStakeRegistry.Contract.StrategyAndWeightingMultiplierForQuorumByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) -} - -// StrategyAndWeightingMultiplierForQuorumByIndex is a free data retrieval call binding the contract method 0x7cc0d75f. -// -// Solidity: function strategyAndWeightingMultiplierForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyAndWeightingMultiplierForQuorumByIndex(quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) { - return _ContractStakeRegistry.Contract.StrategyAndWeightingMultiplierForQuorumByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) -} - -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. -// -// Solidity: function strategyManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyManager") - - if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StrategyParamsLength is a free data retrieval call binding the contract method 0x3ca5a5f5. // -// Solidity: function strategyManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.StrategyManager(&_ContractStakeRegistry.CallOpts) +// Solidity: function strategyParamsLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyParamsLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.StrategyParamsLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StrategyParamsLength is a free data retrieval call binding the contract method 0x3ca5a5f5. // -// Solidity: function strategyManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.StrategyManager(&_ContractStakeRegistry.CallOpts) +// Solidity: function strategyParamsLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyParamsLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.StrategyParamsLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } // WeightOfOperatorForQuorum is a free data retrieval call binding the contract method 0x1f9b74e0. @@ -1197,46 +1026,25 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) WeightOfOperat return _ContractStakeRegistry.Contract.WeightOfOperatorForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber, operator) } -// AddStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0xbba549fa. -// -// Solidity: function addStrategiesConsideredAndMultipliers(uint8 quorumNumber, (address,uint96)[] _newStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) AddStrategiesConsideredAndMultipliers(opts *bind.TransactOpts, quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "addStrategiesConsideredAndMultipliers", quorumNumber, _newStrategiesConsideredAndMultipliers) -} - -// AddStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0xbba549fa. -// -// Solidity: function addStrategiesConsideredAndMultipliers(uint8 quorumNumber, (address,uint96)[] _newStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) AddStrategiesConsideredAndMultipliers(quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.AddStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, _newStrategiesConsideredAndMultipliers) -} - -// AddStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0xbba549fa. -// -// Solidity: function addStrategiesConsideredAndMultipliers(uint8 quorumNumber, (address,uint96)[] _newStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) AddStrategiesConsideredAndMultipliers(quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.AddStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, _newStrategiesConsideredAndMultipliers) -} - -// CreateQuorum is a paid mutator transaction binding the contract method 0x99eed4ee. +// AddStrategies is a paid mutator transaction binding the contract method 0xc601527d. // -// Solidity: function createQuorum((address,uint96)[] _strategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) CreateQuorum(opts *bind.TransactOpts, _strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "createQuorum", _strategiesConsideredAndMultipliers) +// Solidity: function addStrategies(uint8 quorumNumber, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) AddStrategies(opts *bind.TransactOpts, quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "addStrategies", quorumNumber, _strategyParams) } -// CreateQuorum is a paid mutator transaction binding the contract method 0x99eed4ee. +// AddStrategies is a paid mutator transaction binding the contract method 0xc601527d. // -// Solidity: function createQuorum((address,uint96)[] _strategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) CreateQuorum(_strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.CreateQuorum(&_ContractStakeRegistry.TransactOpts, _strategiesConsideredAndMultipliers) +// Solidity: function addStrategies(uint8 quorumNumber, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) AddStrategies(quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.AddStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, _strategyParams) } -// CreateQuorum is a paid mutator transaction binding the contract method 0x99eed4ee. +// AddStrategies is a paid mutator transaction binding the contract method 0xc601527d. // -// Solidity: function createQuorum((address,uint96)[] _strategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) CreateQuorum(_strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.CreateQuorum(&_ContractStakeRegistry.TransactOpts, _strategiesConsideredAndMultipliers) +// Solidity: function addStrategies(uint8 quorumNumber, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) AddStrategies(quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.AddStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, _strategyParams) } // DeregisterOperator is a paid mutator transaction binding the contract method 0xbd29b8cd. @@ -1260,88 +1068,88 @@ func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) Deregister return _ContractStakeRegistry.Contract.DeregisterOperator(&_ContractStakeRegistry.TransactOpts, operatorId, quorumNumbers) } -// Initialize is a paid mutator transaction binding the contract method 0x5f2948ec. +// InitializeQuorum is a paid mutator transaction binding the contract method 0xff694a77. // -// Solidity: function initialize(uint96[] _minimumStakeForQuorum, (address,uint96)[][] _quorumStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) Initialize(opts *bind.TransactOpts, _minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "initialize", _minimumStakeForQuorum, _quorumStrategiesConsideredAndMultipliers) +// Solidity: function initializeQuorum(uint8 quorumNumber, uint96 minimumStake, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "initializeQuorum", quorumNumber, minimumStake, _strategyParams) } -// Initialize is a paid mutator transaction binding the contract method 0x5f2948ec. +// InitializeQuorum is a paid mutator transaction binding the contract method 0xff694a77. // -// Solidity: function initialize(uint96[] _minimumStakeForQuorum, (address,uint96)[][] _quorumStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) Initialize(_minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.Initialize(&_ContractStakeRegistry.TransactOpts, _minimumStakeForQuorum, _quorumStrategiesConsideredAndMultipliers) +// Solidity: function initializeQuorum(uint8 quorumNumber, uint96 minimumStake, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) InitializeQuorum(quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.InitializeQuorum(&_ContractStakeRegistry.TransactOpts, quorumNumber, minimumStake, _strategyParams) } -// Initialize is a paid mutator transaction binding the contract method 0x5f2948ec. +// InitializeQuorum is a paid mutator transaction binding the contract method 0xff694a77. // -// Solidity: function initialize(uint96[] _minimumStakeForQuorum, (address,uint96)[][] _quorumStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) Initialize(_minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.Initialize(&_ContractStakeRegistry.TransactOpts, _minimumStakeForQuorum, _quorumStrategiesConsideredAndMultipliers) +// Solidity: function initializeQuorum(uint8 quorumNumber, uint96 minimumStake, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) InitializeQuorum(quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.InitializeQuorum(&_ContractStakeRegistry.TransactOpts, quorumNumber, minimumStake, _strategyParams) } -// ModifyStrategyWeights is a paid mutator transaction binding the contract method 0x2c2a5d2b. +// ModifyStrategyParams is a paid mutator transaction binding the contract method 0x20b66298. // -// Solidity: function modifyStrategyWeights(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) ModifyStrategyWeights(opts *bind.TransactOpts, quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "modifyStrategyWeights", quorumNumber, strategyIndices, newMultipliers) +// Solidity: function modifyStrategyParams(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) ModifyStrategyParams(opts *bind.TransactOpts, quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "modifyStrategyParams", quorumNumber, strategyIndices, newMultipliers) } -// ModifyStrategyWeights is a paid mutator transaction binding the contract method 0x2c2a5d2b. +// ModifyStrategyParams is a paid mutator transaction binding the contract method 0x20b66298. // -// Solidity: function modifyStrategyWeights(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) ModifyStrategyWeights(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.ModifyStrategyWeights(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) +// Solidity: function modifyStrategyParams(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) ModifyStrategyParams(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.ModifyStrategyParams(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) } -// ModifyStrategyWeights is a paid mutator transaction binding the contract method 0x2c2a5d2b. +// ModifyStrategyParams is a paid mutator transaction binding the contract method 0x20b66298. // -// Solidity: function modifyStrategyWeights(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) ModifyStrategyWeights(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.ModifyStrategyWeights(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) +// Solidity: function modifyStrategyParams(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) ModifyStrategyParams(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.ModifyStrategyParams(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) } // RegisterOperator is a paid mutator transaction binding the contract method 0x25504777. // -// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns() +// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint96[], uint96[]) func (_ContractStakeRegistry *ContractStakeRegistryTransactor) RegisterOperator(opts *bind.TransactOpts, operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { return _ContractStakeRegistry.contract.Transact(opts, "registerOperator", operator, operatorId, quorumNumbers) } // RegisterOperator is a paid mutator transaction binding the contract method 0x25504777. // -// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns() +// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint96[], uint96[]) func (_ContractStakeRegistry *ContractStakeRegistrySession) RegisterOperator(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { return _ContractStakeRegistry.Contract.RegisterOperator(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } // RegisterOperator is a paid mutator transaction binding the contract method 0x25504777. // -// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns() +// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint96[], uint96[]) func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) RegisterOperator(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { return _ContractStakeRegistry.Contract.RegisterOperator(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } -// RemoveStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0x2b3d8816. +// RemoveStrategies is a paid mutator transaction binding the contract method 0x5f1f2d77. // -// Solidity: function removeStrategiesConsideredAndMultipliers(uint8 quorumNumber, uint256[] indicesToRemove) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) RemoveStrategiesConsideredAndMultipliers(opts *bind.TransactOpts, quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "removeStrategiesConsideredAndMultipliers", quorumNumber, indicesToRemove) +// Solidity: function removeStrategies(uint8 quorumNumber, uint256[] indicesToRemove) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) RemoveStrategies(opts *bind.TransactOpts, quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "removeStrategies", quorumNumber, indicesToRemove) } -// RemoveStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0x2b3d8816. +// RemoveStrategies is a paid mutator transaction binding the contract method 0x5f1f2d77. // -// Solidity: function removeStrategiesConsideredAndMultipliers(uint8 quorumNumber, uint256[] indicesToRemove) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) RemoveStrategiesConsideredAndMultipliers(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.RemoveStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) +// Solidity: function removeStrategies(uint8 quorumNumber, uint256[] indicesToRemove) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) RemoveStrategies(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.RemoveStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) } -// RemoveStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0x2b3d8816. +// RemoveStrategies is a paid mutator transaction binding the contract method 0x5f1f2d77. // -// Solidity: function removeStrategiesConsideredAndMultipliers(uint8 quorumNumber, uint256[] indicesToRemove) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) RemoveStrategiesConsideredAndMultipliers(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.RemoveStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) +// Solidity: function removeStrategies(uint8 quorumNumber, uint256[] indicesToRemove) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) RemoveStrategies(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.RemoveStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) } // SetMinimumStakeForQuorum is a paid mutator transaction binding the contract method 0xbc9a40c3. @@ -1365,159 +1173,25 @@ func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) SetMinimum return _ContractStakeRegistry.Contract.SetMinimumStakeForQuorum(&_ContractStakeRegistry.TransactOpts, quorumNumber, minimumStake) } -// UpdateStakes is a paid mutator transaction binding the contract method 0xce977ec3. +// UpdateOperatorStake is a paid mutator transaction binding the contract method 0x66acfefe. // -// Solidity: function updateStakes(address[] operators) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) UpdateStakes(opts *bind.TransactOpts, operators []common.Address) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "updateStakes", operators) +// Solidity: function updateOperatorStake(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint192) +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) UpdateOperatorStake(opts *bind.TransactOpts, operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "updateOperatorStake", operator, operatorId, quorumNumbers) } -// UpdateStakes is a paid mutator transaction binding the contract method 0xce977ec3. +// UpdateOperatorStake is a paid mutator transaction binding the contract method 0x66acfefe. // -// Solidity: function updateStakes(address[] operators) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) UpdateStakes(operators []common.Address) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.UpdateStakes(&_ContractStakeRegistry.TransactOpts, operators) +// Solidity: function updateOperatorStake(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint192) +func (_ContractStakeRegistry *ContractStakeRegistrySession) UpdateOperatorStake(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.UpdateOperatorStake(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } -// UpdateStakes is a paid mutator transaction binding the contract method 0xce977ec3. +// UpdateOperatorStake is a paid mutator transaction binding the contract method 0x66acfefe. // -// Solidity: function updateStakes(address[] operators) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) UpdateStakes(operators []common.Address) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.UpdateStakes(&_ContractStakeRegistry.TransactOpts, operators) -} - -// ContractStakeRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractStakeRegistry contract. -type ContractStakeRegistryInitializedIterator struct { - Event *ContractStakeRegistryInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractStakeRegistryInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractStakeRegistryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractStakeRegistryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractStakeRegistryInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractStakeRegistryInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractStakeRegistryInitialized represents a Initialized event raised by the ContractStakeRegistry contract. -type ContractStakeRegistryInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractStakeRegistryInitializedIterator, error) { - - logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &ContractStakeRegistryInitializedIterator{contract: _ContractStakeRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryInitialized) (event.Subscription, error) { - - logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractStakeRegistryInitialized) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseInitialized(log types.Log) (*ContractStakeRegistryInitialized, error) { - event := new(ContractStakeRegistryInitialized) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil +// Solidity: function updateOperatorStake(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint192) +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) UpdateOperatorStake(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.UpdateOperatorStake(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } // ContractStakeRegistryMinimumStakeForQuorumUpdatedIterator is returned from FilterMinimumStakeForQuorumUpdated and is used to iterate over the raw logs and unpacked data for MinimumStakeForQuorumUpdated events raised by the ContractStakeRegistry contract. @@ -1665,9 +1339,9 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseMinimumStakeFo return event, nil } -// ContractStakeRegistryQuorumCreatedIterator is returned from FilterQuorumCreated and is used to iterate over the raw logs and unpacked data for QuorumCreated events raised by the ContractStakeRegistry contract. -type ContractStakeRegistryQuorumCreatedIterator struct { - Event *ContractStakeRegistryQuorumCreated // Event containing the contract specifics and raw log +// ContractStakeRegistryOperatorStakeUpdateIterator is returned from FilterOperatorStakeUpdate and is used to iterate over the raw logs and unpacked data for OperatorStakeUpdate events raised by the ContractStakeRegistry contract. +type ContractStakeRegistryOperatorStakeUpdateIterator struct { + Event *ContractStakeRegistryOperatorStakeUpdate // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1681,7 +1355,7 @@ type ContractStakeRegistryQuorumCreatedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { +func (it *ContractStakeRegistryOperatorStakeUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1690,7 +1364,7 @@ func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryQuorumCreated) + it.Event = new(ContractStakeRegistryOperatorStakeUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1705,7 +1379,7 @@ func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryQuorumCreated) + it.Event = new(ContractStakeRegistryOperatorStakeUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1721,51 +1395,53 @@ func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractStakeRegistryQuorumCreatedIterator) Error() error { +func (it *ContractStakeRegistryOperatorStakeUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractStakeRegistryQuorumCreatedIterator) Close() error { +func (it *ContractStakeRegistryOperatorStakeUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractStakeRegistryQuorumCreated represents a QuorumCreated event raised by the ContractStakeRegistry contract. -type ContractStakeRegistryQuorumCreated struct { +// ContractStakeRegistryOperatorStakeUpdate represents a OperatorStakeUpdate event raised by the ContractStakeRegistry contract. +type ContractStakeRegistryOperatorStakeUpdate struct { + OperatorId [32]byte QuorumNumber uint8 + Stake *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterQuorumCreated is a free log retrieval operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. +// FilterOperatorStakeUpdate is a free log retrieval operation binding the contract event 0x2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d. // -// Solidity: event QuorumCreated(uint8 indexed quorumNumber) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterQuorumCreated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryQuorumCreatedIterator, error) { +// Solidity: event OperatorStakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterOperatorStakeUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractStakeRegistryOperatorStakeUpdateIterator, error) { - var quorumNumberRule []interface{} - for _, quorumNumberItem := range quorumNumber { - quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) } - logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "QuorumCreated", quorumNumberRule) + logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "OperatorStakeUpdate", operatorIdRule) if err != nil { return nil, err } - return &ContractStakeRegistryQuorumCreatedIterator{contract: _ContractStakeRegistry.contract, event: "QuorumCreated", logs: logs, sub: sub}, nil + return &ContractStakeRegistryOperatorStakeUpdateIterator{contract: _ContractStakeRegistry.contract, event: "OperatorStakeUpdate", logs: logs, sub: sub}, nil } -// WatchQuorumCreated is a free log subscription operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. +// WatchOperatorStakeUpdate is a free log subscription operation binding the contract event 0x2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d. // -// Solidity: event QuorumCreated(uint8 indexed quorumNumber) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryQuorumCreated, quorumNumber []uint8) (event.Subscription, error) { +// Solidity: event OperatorStakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchOperatorStakeUpdate(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryOperatorStakeUpdate, operatorId [][32]byte) (event.Subscription, error) { - var quorumNumberRule []interface{} - for _, quorumNumberItem := range quorumNumber { - quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) } - logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "QuorumCreated", quorumNumberRule) + logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "OperatorStakeUpdate", operatorIdRule) if err != nil { return nil, err } @@ -1775,8 +1451,8 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated( select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractStakeRegistryQuorumCreated) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { + event := new(ContractStakeRegistryOperatorStakeUpdate) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "OperatorStakeUpdate", log); err != nil { return err } event.Raw = log @@ -1797,21 +1473,21 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated( }), nil } -// ParseQuorumCreated is a log parse operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. +// ParseOperatorStakeUpdate is a log parse operation binding the contract event 0x2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d. // -// Solidity: event QuorumCreated(uint8 indexed quorumNumber) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseQuorumCreated(log types.Log) (*ContractStakeRegistryQuorumCreated, error) { - event := new(ContractStakeRegistryQuorumCreated) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { +// Solidity: event OperatorStakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseOperatorStakeUpdate(log types.Log) (*ContractStakeRegistryOperatorStakeUpdate, error) { + event := new(ContractStakeRegistryOperatorStakeUpdate) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "OperatorStakeUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ContractStakeRegistryStakeUpdateIterator is returned from FilterStakeUpdate and is used to iterate over the raw logs and unpacked data for StakeUpdate events raised by the ContractStakeRegistry contract. -type ContractStakeRegistryStakeUpdateIterator struct { - Event *ContractStakeRegistryStakeUpdate // Event containing the contract specifics and raw log +// ContractStakeRegistryQuorumCreatedIterator is returned from FilterQuorumCreated and is used to iterate over the raw logs and unpacked data for QuorumCreated events raised by the ContractStakeRegistry contract. +type ContractStakeRegistryQuorumCreatedIterator struct { + Event *ContractStakeRegistryQuorumCreated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1825,7 +1501,7 @@ type ContractStakeRegistryStakeUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { +func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1834,7 +1510,7 @@ func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryStakeUpdate) + it.Event = new(ContractStakeRegistryQuorumCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1849,7 +1525,7 @@ func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryStakeUpdate) + it.Event = new(ContractStakeRegistryQuorumCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1865,53 +1541,51 @@ func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractStakeRegistryStakeUpdateIterator) Error() error { +func (it *ContractStakeRegistryQuorumCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractStakeRegistryStakeUpdateIterator) Close() error { +func (it *ContractStakeRegistryQuorumCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractStakeRegistryStakeUpdate represents a StakeUpdate event raised by the ContractStakeRegistry contract. -type ContractStakeRegistryStakeUpdate struct { - OperatorId [32]byte +// ContractStakeRegistryQuorumCreated represents a QuorumCreated event raised by the ContractStakeRegistry contract. +type ContractStakeRegistryQuorumCreated struct { QuorumNumber uint8 - Stake *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterStakeUpdate is a free log retrieval operation binding the contract event 0xe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934. +// FilterQuorumCreated is a free log retrieval operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. // -// Solidity: event StakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterStakeUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractStakeRegistryStakeUpdateIterator, error) { +// Solidity: event QuorumCreated(uint8 indexed quorumNumber) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterQuorumCreated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryQuorumCreatedIterator, error) { - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) } - logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "StakeUpdate", operatorIdRule) + logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "QuorumCreated", quorumNumberRule) if err != nil { return nil, err } - return &ContractStakeRegistryStakeUpdateIterator{contract: _ContractStakeRegistry.contract, event: "StakeUpdate", logs: logs, sub: sub}, nil + return &ContractStakeRegistryQuorumCreatedIterator{contract: _ContractStakeRegistry.contract, event: "QuorumCreated", logs: logs, sub: sub}, nil } -// WatchStakeUpdate is a free log subscription operation binding the contract event 0xe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934. +// WatchQuorumCreated is a free log subscription operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. // -// Solidity: event StakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchStakeUpdate(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryStakeUpdate, operatorId [][32]byte) (event.Subscription, error) { +// Solidity: event QuorumCreated(uint8 indexed quorumNumber) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryQuorumCreated, quorumNumber []uint8) (event.Subscription, error) { - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) } - logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "StakeUpdate", operatorIdRule) + logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "QuorumCreated", quorumNumberRule) if err != nil { return nil, err } @@ -1921,8 +1595,8 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchStakeUpdate(op select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractStakeRegistryStakeUpdate) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "StakeUpdate", log); err != nil { + event := new(ContractStakeRegistryQuorumCreated) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { return err } event.Raw = log @@ -1943,12 +1617,12 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchStakeUpdate(op }), nil } -// ParseStakeUpdate is a log parse operation binding the contract event 0xe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934. +// ParseQuorumCreated is a log parse operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. // -// Solidity: event StakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseStakeUpdate(log types.Log) (*ContractStakeRegistryStakeUpdate, error) { - event := new(ContractStakeRegistryStakeUpdate) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "StakeUpdate", log); err != nil { +// Solidity: event QuorumCreated(uint8 indexed quorumNumber) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseQuorumCreated(log types.Log) (*ContractStakeRegistryQuorumCreated, error) { + event := new(ContractStakeRegistryQuorumCreated) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/generate-bindings.sh b/contracts/generate-bindings.sh index f30058c2..6638af8e 100755 --- a/contracts/generate-bindings.sh +++ b/contracts/generate-bindings.sh @@ -33,9 +33,11 @@ function create_binding { EIGENLAYER_MIDDLEWARE_PATH=$script_path/lib/eigenlayer-middleware cd $EIGENLAYER_MIDDLEWARE_PATH +# you might want to run forge clean if the contracts have changed forge build -avs_contracts="BLSRegistryCoordinatorWithIndices BLSOperatorStateRetriever StakeRegistry BLSPubkeyRegistry IBLSSignatureChecker BLSPublicKeyCompendium" +# No idea why but ordering of the contracts matters here... when I move them around sometimes bindings fail +avs_contracts="RegistryCoordinator OperatorStateRetriever StakeRegistry BLSApkRegistry IBLSSignatureChecker ServiceManagerBase" for contract in $avs_contracts; do create_binding . $contract ../../bindings done @@ -44,9 +46,8 @@ EIGENLAYER_CONTRACT_PATH=$EIGENLAYER_MIDDLEWARE_PATH/lib/eigenlayer-contracts cd $EIGENLAYER_CONTRACT_PATH forge build -# No idea why but EigenPod needs to be right before EigenPodManager otherwise there's a bug and -# abigen fails... -el_contracts="DelegationManager Slasher StrategyManager IStrategy EigenPod EigenPodManager IERC20" +# No idea why but the ordering of the contracts matters, and for some orderings abigen fails... +el_contracts="DelegationManager ISlasher StrategyManager EigenPod EigenPodManager IStrategy IERC20" for contract in $el_contracts; do create_binding . $contract ../../../../bindings done diff --git a/contracts/lib/eigenlayer-middleware b/contracts/lib/eigenlayer-middleware index eed4be6b..6761d247 160000 --- a/contracts/lib/eigenlayer-middleware +++ b/contracts/lib/eigenlayer-middleware @@ -1 +1 @@ -Subproject commit eed4be6bcec2a362952a7d24b81de5bd7127a009 +Subproject commit 6761d2471a5749be1f4df8dc7521b3227fe14dec diff --git a/crypto/bls/attestation.go b/crypto/bls/attestation.go index f6dd2061..2b641f3a 100644 --- a/crypto/bls/attestation.go +++ b/crypto/bls/attestation.go @@ -14,7 +14,6 @@ import ( "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/consensys/gnark-crypto/ecc/bn254/fr" "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" ) @@ -269,6 +268,12 @@ func (k *KeyPair) SignMessage(message [32]byte) *Signature { return &Signature{&G1Point{sig}} } +// This signs a message on G1, and so will require a G2Pubkey to verify +func (k *KeyPair) SignHashedToCurveMessage(g1HashedMsg *bn254.G1Affine) *Signature { + sig := new(bn254.G1Affine).ScalarMultiplication(g1HashedMsg, k.PrivKey.BigInt(new(big.Int))) + return &Signature{&G1Point{sig}} +} + func (k *KeyPair) GetPubKeyG2() *G2Point { return &G2Point{bn254utils.MulByGeneratorG2(k.PrivKey)} } @@ -276,18 +281,3 @@ func (k *KeyPair) GetPubKeyG2() *G2Point { func (k *KeyPair) GetPubKeyG1() *G1Point { return k.PubKey } - -// MakePubkeyRegistrationData returns the data that should be sent to the pubkey compendium smart contract to register -// the public key. The values returned constitute a proof that the operator knows the secret key corresponding to the -// public key, and prevents the operator -// from attacking the signature protocol by registering a public key that is derived from other public keys. -// (e.g., see https://medium.com/@coolcottontail/rogue-key-attack-in-bls-signature-and-harmony-security-eac1ea2370ee) -func (k *KeyPair) MakePubkeyRegistrationData( - operatorAddress common.Address, - blsPubkeyCompendiumAddress common.Address, - chainId *big.Int, -) *G1Point { - return &G1Point{ - bn254utils.MakePubkeyRegistrationData(k.PrivKey, operatorAddress, blsPubkeyCompendiumAddress, chainId), - } -} diff --git a/crypto/bls/state.go b/crypto/bls/state.go index fc4764c6..c879990d 100644 --- a/crypto/bls/state.go +++ b/crypto/bls/state.go @@ -36,7 +36,7 @@ type OperatorState struct { // contracts. Note that // this information does not depend on the quorum. type IndexedOperatorInfo struct { - // PubKeyG1 and PubKeyG2 are the public keys of the operator, which are retrieved from the EigenDAPubKeyCompendium + // PubKeyG1 and PubKeyG2 are the public keys of the operator, which are retrieved from the BlsApkRegistry // smart contract PubkeyG1 *G1Point PubkeyG2 *G2Point diff --git a/crypto/bn254/utils.go b/crypto/bn254/utils.go index fe762a63..0ba2ebef 100644 --- a/crypto/bn254/utils.go +++ b/crypto/bn254/utils.go @@ -6,8 +6,6 @@ import ( "github.com/consensys/gnark-crypto/ecc/bn254" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/consensys/gnark-crypto/ecc/bn254/fr" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" ) func VerifySig(sig *bn254.G1Affine, pubkey *bn254.G2Affine, msgBytes [32]byte) (bool, error) { @@ -145,30 +143,3 @@ func DeserializeG2(b []byte) *bn254.G2Affine { p.Y.A1.SetBytes(b[96:128]) return p } - -func MakePubkeyRegistrationData( - privKey *fr.Element, - operatorAddress common.Address, - blsPubkeyCompendiumAddress common.Address, - chainId *big.Int, -) *bn254.G1Affine { - toHash := make([]byte, 0) - toHash = append(toHash, operatorAddress.Bytes()...) - // we also sign on the bls pubkey compendium contract's address, to prevent replay attacks - // in different bls pubkey compendiums (in case some teams have deployed their own compendium) - toHash = append(toHash, blsPubkeyCompendiumAddress.Bytes()...) - // make sure chainId is 32 bytes - toHash = append(toHash, common.LeftPadBytes(chainId.Bytes(), 32)...) - toHash = append(toHash, []byte("EigenLayer_BN254_Pubkey_Registration")...) - - msgHash := crypto.Keccak256(toHash) - // convert to [32]byte - var msgHash32 [32]byte - for i := 0; i < 32; i++ { - msgHash32[i] = msgHash[i] - } - // hash to G1 - hashToSign := MapToCurve(msgHash32) - - return new(bn254.G1Affine).ScalarMultiplication(hashToSign, privKey.BigInt(new(big.Int))) -} diff --git a/metrics/eigenmetrics_example_test.go b/metrics/eigenmetrics_example_test.go index 445cb957..a92e0b2d 100644 --- a/metrics/eigenmetrics_example_test.go +++ b/metrics/eigenmetrics_example_test.go @@ -16,7 +16,6 @@ import ( rpccalls "github.com/Layr-Labs/eigensdk-go/metrics/collectors/rpc_calls" "github.com/Layr-Labs/eigensdk-go/signerv2" "github.com/Layr-Labs/eigensdk-go/types" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/prometheus/client_golang/prometheus" ) @@ -37,6 +36,7 @@ func ExampleEigenMetrics() { if err != nil { panic(err) } + operatorEcdsaAddr := crypto.PubkeyToAddress(ecdsaPrivateKey.PublicKey) signerV2, _, err := signerv2.SignerFromConfig(signerv2.Config{PrivateKey: ecdsaPrivateKey}, big.NewInt(1)) if err != nil { @@ -44,28 +44,27 @@ func ExampleEigenMetrics() { } chainioConfig := clients.BuildAllConfig{ - EthHttpUrl: "http://localhost:8545", - EthWsUrl: "ws://localhost:8545", - BlsRegistryCoordinatorAddr: "0x0", - BlsOperatorStateRetrieverAddr: "0x0", - AvsName: "exampleAvs", - PromMetricsIpPortAddress: ":9090", + EthHttpUrl: "http://localhost:8545", + EthWsUrl: "ws://localhost:8545", + RegistryCoordinatorAddr: "0x0", + OperatorStateRetrieverAddr: "0x0", + AvsName: "exampleAvs", + PromMetricsIpPortAddress: ":9090", } - clients, err := clients.BuildAll(chainioConfig, signerV2, logger) + clients, err := clients.BuildAll(chainioConfig, operatorEcdsaAddr, signerV2, logger) if err != nil { panic(err) } reg := prometheus.NewRegistry() eigenMetrics := metrics.NewEigenMetrics("exampleAvs", ":9090", reg, logger) - operatorAddr := common.HexToAddress("0x0") quorumNames := map[types.QuorumNum]string{ 0: "ethQuorum", 1: "someOtherTokenQuorum", } // We must register the economic metrics separately because they are exported metrics (from jsonrpc or subgraph calls) // and not instrumented metrics: see https://prometheus.io/docs/instrumenting/writing_clientlibs/#overall-structure - economicMetricsCollector := economic.NewCollector(clients.ElChainReader, clients.AvsRegistryChainReader, "exampleAvs", logger, operatorAddr, quorumNames) + economicMetricsCollector := economic.NewCollector(clients.ElChainReader, clients.AvsRegistryChainReader, "exampleAvs", logger, operatorEcdsaAddr, quorumNames) reg.MustRegister(economicMetricsCollector) rpcCallsCollector := rpccalls.NewCollector("exampleAvs", reg) diff --git a/services/README.md b/services/README.md index f89b922e..6d272ebc 100644 --- a/services/README.md +++ b/services/README.md @@ -1,12 +1,12 @@ # Services -eigensdk services are high level APIs that provide backend like functionality for avs nodes and aggregators processes. Only the pubkeycompendium service is currently implemented, but the goal is to provide the following suite of services as soon as possible: +eigensdk services are high level APIs that provide backend like functionality for avs nodes and aggregators processes. We provide the following suite of services as soon as possible: -- [BLS pubkey compendium service](./pubkeycompendium/) - - this service simply indexes the [NewPubkeyRegistration](https://github.com/Layr-Labs/eigenlayer-contracts/blob/ba22dbc18c72514f3a4a8b7b7b46cb59fef29034/src/contracts/middleware/BLSPublicKeyCompendium.sol#L23) events and provides a single endpoint to query for the registered G1 and G2 pubkeys of a given operator address. +- [operator pubkeys service](./operatorpubkeys/) + - this service simply indexes the [NewPubkeyRegistration](https://github.com/Layr-Labs/eigenlayer-middleware/blob/9aa6eb543fe38db6e41516f89f15b654ad4d6bf4/src/interfaces/IBLSApkRegistry.sol#L38) events and provides a single endpoint to query for the registered G1 and G2 pubkeys of a given operator address. - this service is needed for aggregators to get the pubkey of their registered operators so as to verify their signatures - Registry service - - this service will index the events on the [avs registry contracts](https://github.com/Layr-Labs/eigenlayer-contracts/tree/11a8da30919268ef22828e7e39088110cbf64611/src/contracts/middleware) and provide endpoints to query for the registered avs nodes, their stake at past blocks, operator id, etc. + - this service will index the events on the [avs registry contracts](https://github.com/Layr-Labs/eigenlayer-middleware) and provide endpoints to query for the registered avs nodes, their stake at past blocks, operator id, etc. - this service is needed to be able to check that an eigenlayer operator was registered at a specific block and that the stake threshold had been met for an aggregate bls signature - Signature aggregation service - this service will provide endpoints to aggregate operator signatures for various avs tasks diff --git a/services/avsregistry/avsregistry.go b/services/avsregistry/avsregistry.go index 63627127..46a156ee 100644 --- a/services/avsregistry/avsregistry.go +++ b/services/avsregistry/avsregistry.go @@ -3,7 +3,7 @@ package avsregistry import ( "context" - blsoperatorstateretrievar "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" + opstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" "github.com/Layr-Labs/eigensdk-go/types" "github.com/ethereum/go-ethereum/accounts/abi/bind" ) @@ -19,5 +19,5 @@ type AvsRegistryService interface { // This information is derivable from the Operators Avs State (returned from GetOperatorsAvsStateAtBlock), but this function is provided for convenience. GetQuorumsAvsStateAtBlock(ctx context.Context, quorumNumbers []types.QuorumNum, blockNumber types.BlockNum) (map[types.QuorumNum]types.QuorumAvsState, error) // GetCheckSignaturesIndices returns the registry indices of the nonsigner operators specified by nonSignerOperatorIds who were registered at referenceBlockNumber. - GetCheckSignaturesIndices(opts *bind.CallOpts, referenceBlockNumber types.BlockNum, quorumNumbers []types.QuorumNum, nonSignerOperatorIds []types.OperatorId) (blsoperatorstateretrievar.BLSOperatorStateRetrieverCheckSignaturesIndices, error) + GetCheckSignaturesIndices(opts *bind.CallOpts, referenceBlockNumber types.BlockNum, quorumNumbers []types.QuorumNum, nonSignerOperatorIds []types.OperatorId) (opstateretriever.OperatorStateRetrieverCheckSignaturesIndices, error) } diff --git a/services/avsregistry/avsregistry_chaincaller.go b/services/avsregistry/avsregistry_chaincaller.go index ac2f2531..e3ce65a6 100644 --- a/services/avsregistry/avsregistry_chaincaller.go +++ b/services/avsregistry/avsregistry_chaincaller.go @@ -5,10 +5,9 @@ import ( "math/big" avsregistry "github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry" - elcontracts "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" - pcservice "github.com/Layr-Labs/eigensdk-go/services/pubkeycompendium" + oppubkeysservice "github.com/Layr-Labs/eigensdk-go/services/operatorpubkeys" "github.com/Layr-Labs/eigensdk-go/types" "github.com/ethereum/go-ethereum/accounts/abi/bind" ) @@ -17,19 +16,17 @@ import ( // nicer golang types that are easier to work with type AvsRegistryServiceChainCaller struct { avsregistry.AvsRegistryReader - elReader elcontracts.ELReader - pubkeyCompendiumService pcservice.PubkeyCompendiumService - logger logging.Logger + operatorPubkeysService oppubkeysservice.OperatorPubkeysService + logger logging.Logger } var _ AvsRegistryService = (*AvsRegistryServiceChainCaller)(nil) -func NewAvsRegistryServiceChainCaller(avsRegistryReader avsregistry.AvsRegistryReader, elReader elcontracts.ELReader, pubkeyCompendiumService pcservice.PubkeyCompendiumService, logger logging.Logger) *AvsRegistryServiceChainCaller { +func NewAvsRegistryServiceChainCaller(avsRegistryReader avsregistry.AvsRegistryReader, operatorPubkeysService oppubkeysservice.OperatorPubkeysService, logger logging.Logger) *AvsRegistryServiceChainCaller { return &AvsRegistryServiceChainCaller{ - elReader: elReader, - AvsRegistryReader: avsRegistryReader, - pubkeyCompendiumService: pubkeyCompendiumService, - logger: logger, + AvsRegistryReader: avsRegistryReader, + operatorPubkeysService: operatorPubkeysService, + logger: logger, } } @@ -100,19 +97,19 @@ func (ar *AvsRegistryServiceChainCaller) GetQuorumsAvsStateAtBlock(ctx context.C } // getOperatorPubkeys is a temporary hack until we implement GetOperatorAddr on the BLSpubkeyregistry contract -// TODO(samlaf): we need operatorId -> operatorAddr so that we can query the pubkeyCompendiumService +// TODO(samlaf): we need operatorId -> operatorAddr so that we can query the operatorPubkeysService // this inverse mapping (only operatorAddr->operatorId is stored in registryCoordinator) is not stored, // but we know that the current implementation uses the hash of the G1 pubkey as the operatorId, -// and the pubkeycompendium contract stores the mapping G1pubkeyHash -> operatorAddr +// and the BLSApkRegistry contract stores the mapping G1pubkeyHash -> operatorAddr // When the above PR is merged, we should change this to instead call GetOperatorAddressFromOperatorId on the avsRegistryReader // and not hardcode the definition of the operatorId here func (ar *AvsRegistryServiceChainCaller) getOperatorPubkeys(ctx context.Context, operatorId types.OperatorId) (types.OperatorPubkeys, error) { - operatorAddr, err := ar.elReader.GetOperatorAddressFromPubkeyHash(&bind.CallOpts{Context: ctx}, operatorId) + operatorAddr, err := ar.AvsRegistryReader.GetOperatorFromId(&bind.CallOpts{Context: ctx}, operatorId) if err != nil { ar.logger.Error("Failed to get operator address from pubkey hash", "err", err, "service", "AvsRegistryServiceChainCaller") return types.OperatorPubkeys{}, err } - pubkeys, ok := ar.pubkeyCompendiumService.GetOperatorPubkeys(ctx, operatorAddr) + pubkeys, ok := ar.operatorPubkeysService.GetOperatorPubkeys(ctx, operatorAddr) if !ok { ar.logger.Error("Failed to get operator pubkeys from pubkey compendium service", "service", "AvsRegistryServiceChainCaller", "operatorAddr", operatorAddr, "operatorId", operatorId) return types.OperatorPubkeys{}, err diff --git a/services/avsregistry/avsregistry_chaincaller_test.go b/services/avsregistry/avsregistry_chaincaller_test.go index f3a19696..525af13b 100644 --- a/services/avsregistry/avsregistry_chaincaller_test.go +++ b/services/avsregistry/avsregistry_chaincaller_test.go @@ -7,7 +7,7 @@ import ( "testing" chainiomocks "github.com/Layr-Labs/eigensdk-go/chainio/mocks" - blsoperatorstateretrievar "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" + opstateretrievar "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" servicemocks "github.com/Layr-Labs/eigensdk-go/services/mocks" @@ -36,16 +36,16 @@ func TestAvsRegistryServiceChainCaller_getOperatorPubkeys(t *testing.T) { // TODO(samlaf): add error test cases var tests = []struct { name string - mocksInitializationFunc func(*chainiomocks.MockAvsRegistryReader, *chainiomocks.MockELReader, *servicemocks.MockPubkeyCompendiumService) + mocksInitializationFunc func(*chainiomocks.MockAvsRegistryReader, *servicemocks.MockOperatorPubkeysService) queryOperatorId types.OperatorId wantErr error wantOperatorPubkeys types.OperatorPubkeys }{ { name: "should return operatorpubkeys", - mocksInitializationFunc: func(mockAvsRegistryReader *chainiomocks.MockAvsRegistryReader, mockElReader *chainiomocks.MockELReader, mockPubkeyCompendiumService *servicemocks.MockPubkeyCompendiumService) { - mockElReader.EXPECT().GetOperatorAddressFromPubkeyHash(gomock.Any(), testOperator.operatorId).Return(testOperator.operatorAddr, nil) - mockPubkeyCompendiumService.EXPECT().GetOperatorPubkeys(gomock.Any(), testOperator.operatorAddr).Return(testOperator.pubkeys, true) + mocksInitializationFunc: func(mockAvsRegistryReader *chainiomocks.MockAvsRegistryReader, mockOperatorPubkeysService *servicemocks.MockOperatorPubkeysService) { + mockAvsRegistryReader.EXPECT().GetOperatorFromId(gomock.Any(), testOperator.operatorId).Return(testOperator.operatorAddr, nil) + mockOperatorPubkeysService.EXPECT().GetOperatorPubkeys(gomock.Any(), testOperator.operatorAddr).Return(testOperator.pubkeys, true) }, queryOperatorId: testOperator.operatorId, wantErr: nil, @@ -58,14 +58,13 @@ func TestAvsRegistryServiceChainCaller_getOperatorPubkeys(t *testing.T) { // Create mocks mockCtrl := gomock.NewController(t) mockAvsRegistryReader := chainiomocks.NewMockAvsRegistryReader(mockCtrl) - mockElReader := chainiomocks.NewMockELReader(mockCtrl) - mockPubkeyCompendium := servicemocks.NewMockPubkeyCompendiumService(mockCtrl) + mockOperatorPubkeysService := servicemocks.NewMockOperatorPubkeysService(mockCtrl) if tt.mocksInitializationFunc != nil { - tt.mocksInitializationFunc(mockAvsRegistryReader, mockElReader, mockPubkeyCompendium) + tt.mocksInitializationFunc(mockAvsRegistryReader, mockOperatorPubkeysService) } // Create a new instance of the avsregistry service - service := NewAvsRegistryServiceChainCaller(mockAvsRegistryReader, mockElReader, mockPubkeyCompendium, logger) + service := NewAvsRegistryServiceChainCaller(mockAvsRegistryReader, mockOperatorPubkeysService, logger) // Call the GetOperatorPubkeys method with the test operator address gotOperatorPubkeys, gotErr := service.getOperatorPubkeys(context.Background(), tt.queryOperatorId) @@ -92,7 +91,7 @@ func TestAvsRegistryServiceChainCaller_GetOperatorsAvsState(t *testing.T) { var tests = []struct { name string - mocksInitializationFunc func(*chainiomocks.MockAvsRegistryReader, *chainiomocks.MockELReader, *servicemocks.MockPubkeyCompendiumService) + mocksInitializationFunc func(*chainiomocks.MockAvsRegistryReader, *servicemocks.MockOperatorPubkeysService) queryQuorumNumbers []types.QuorumNum queryBlockNum types.BlockNum wantErr error @@ -100,8 +99,8 @@ func TestAvsRegistryServiceChainCaller_GetOperatorsAvsState(t *testing.T) { }{ { name: "should return operatorsAvsState", - mocksInitializationFunc: func(mockAvsRegistryReader *chainiomocks.MockAvsRegistryReader, mockElReader *chainiomocks.MockELReader, mockPubkeyCompendiumService *servicemocks.MockPubkeyCompendiumService) { - mockAvsRegistryReader.EXPECT().GetOperatorsStakeInQuorumsAtBlock(gomock.Any(), []types.QuorumNum{1}, types.BlockNum(1)).Return([][]blsoperatorstateretrievar.BLSOperatorStateRetrieverOperator{ + mocksInitializationFunc: func(mockAvsRegistryReader *chainiomocks.MockAvsRegistryReader, mockOperatorPubkeysService *servicemocks.MockOperatorPubkeysService) { + mockAvsRegistryReader.EXPECT().GetOperatorsStakeInQuorumsAtBlock(gomock.Any(), []types.QuorumNum{1}, types.BlockNum(1)).Return([][]opstateretrievar.OperatorStateRetrieverOperator{ { { OperatorId: testOperator.operatorId, @@ -109,8 +108,8 @@ func TestAvsRegistryServiceChainCaller_GetOperatorsAvsState(t *testing.T) { }, }, }, nil) - mockElReader.EXPECT().GetOperatorAddressFromPubkeyHash(gomock.Any(), testOperator.operatorId).Return(testOperator.operatorAddr, nil) - mockPubkeyCompendiumService.EXPECT().GetOperatorPubkeys(gomock.Any(), testOperator.operatorAddr).Return(testOperator.pubkeys, true) + mockAvsRegistryReader.EXPECT().GetOperatorFromId(gomock.Any(), testOperator.operatorId).Return(testOperator.operatorAddr, nil) + mockOperatorPubkeysService.EXPECT().GetOperatorPubkeys(gomock.Any(), testOperator.operatorAddr).Return(testOperator.pubkeys, true) }, queryQuorumNumbers: []types.QuorumNum{1}, queryBlockNum: 1, @@ -131,14 +130,13 @@ func TestAvsRegistryServiceChainCaller_GetOperatorsAvsState(t *testing.T) { // Create mocks mockCtrl := gomock.NewController(t) mockAvsRegistryReader := chainiomocks.NewMockAvsRegistryReader(mockCtrl) - mockElReader := chainiomocks.NewMockELReader(mockCtrl) - mockPubkeyCompendium := servicemocks.NewMockPubkeyCompendiumService(mockCtrl) + mockOperatorPubkeysService := servicemocks.NewMockOperatorPubkeysService(mockCtrl) if tt.mocksInitializationFunc != nil { - tt.mocksInitializationFunc(mockAvsRegistryReader, mockElReader, mockPubkeyCompendium) + tt.mocksInitializationFunc(mockAvsRegistryReader, mockOperatorPubkeysService) } // Create a new instance of the avsregistry service - service := NewAvsRegistryServiceChainCaller(mockAvsRegistryReader, mockElReader, mockPubkeyCompendium, logger) + service := NewAvsRegistryServiceChainCaller(mockAvsRegistryReader, mockOperatorPubkeysService, logger) // Call the GetOperatorPubkeys method with the test operator address gotOperatorsAvsStateDict, gotErr := service.GetOperatorsAvsStateAtBlock(context.Background(), tt.queryQuorumNumbers, tt.queryBlockNum) @@ -165,7 +163,7 @@ func TestAvsRegistryServiceChainCaller_GetQuorumsAvsState(t *testing.T) { var tests = []struct { name string - mocksInitializationFunc func(*chainiomocks.MockAvsRegistryReader, *chainiomocks.MockELReader, *servicemocks.MockPubkeyCompendiumService) + mocksInitializationFunc func(*chainiomocks.MockAvsRegistryReader, *servicemocks.MockOperatorPubkeysService) queryQuorumNumbers []types.QuorumNum queryBlockNum types.BlockNum wantErr error @@ -173,8 +171,8 @@ func TestAvsRegistryServiceChainCaller_GetQuorumsAvsState(t *testing.T) { }{ { name: "should return operatorsAvsState", - mocksInitializationFunc: func(mockAvsRegistryReader *chainiomocks.MockAvsRegistryReader, mockElReader *chainiomocks.MockELReader, mockPubkeyCompendiumService *servicemocks.MockPubkeyCompendiumService) { - mockAvsRegistryReader.EXPECT().GetOperatorsStakeInQuorumsAtBlock(gomock.Any(), []types.QuorumNum{1}, types.BlockNum(1)).Return([][]blsoperatorstateretrievar.BLSOperatorStateRetrieverOperator{ + mocksInitializationFunc: func(mockAvsRegistryReader *chainiomocks.MockAvsRegistryReader, mockOperatorPubkeysService *servicemocks.MockOperatorPubkeysService) { + mockAvsRegistryReader.EXPECT().GetOperatorsStakeInQuorumsAtBlock(gomock.Any(), []types.QuorumNum{1}, types.BlockNum(1)).Return([][]opstateretrievar.OperatorStateRetrieverOperator{ { { OperatorId: testOperator.operatorId, @@ -182,8 +180,8 @@ func TestAvsRegistryServiceChainCaller_GetQuorumsAvsState(t *testing.T) { }, }, }, nil) - mockElReader.EXPECT().GetOperatorAddressFromPubkeyHash(gomock.Any(), testOperator.operatorId).Return(testOperator.operatorAddr, nil) - mockPubkeyCompendiumService.EXPECT().GetOperatorPubkeys(gomock.Any(), testOperator.operatorAddr).Return(testOperator.pubkeys, true) + mockAvsRegistryReader.EXPECT().GetOperatorFromId(gomock.Any(), testOperator.operatorId).Return(testOperator.operatorAddr, nil) + mockOperatorPubkeysService.EXPECT().GetOperatorPubkeys(gomock.Any(), testOperator.operatorAddr).Return(testOperator.pubkeys, true) }, queryQuorumNumbers: []types.QuorumNum{1}, queryBlockNum: 1, @@ -204,14 +202,13 @@ func TestAvsRegistryServiceChainCaller_GetQuorumsAvsState(t *testing.T) { // Create mocks mockCtrl := gomock.NewController(t) mockAvsRegistryReader := chainiomocks.NewMockAvsRegistryReader(mockCtrl) - mockElReader := chainiomocks.NewMockELReader(mockCtrl) - mockPubkeyCompendium := servicemocks.NewMockPubkeyCompendiumService(mockCtrl) + mockOperatorPubkeysService := servicemocks.NewMockOperatorPubkeysService(mockCtrl) if tt.mocksInitializationFunc != nil { - tt.mocksInitializationFunc(mockAvsRegistryReader, mockElReader, mockPubkeyCompendium) + tt.mocksInitializationFunc(mockAvsRegistryReader, mockOperatorPubkeysService) } // Create a new instance of the avsregistry service - service := NewAvsRegistryServiceChainCaller(mockAvsRegistryReader, mockElReader, mockPubkeyCompendium, logger) + service := NewAvsRegistryServiceChainCaller(mockAvsRegistryReader, mockOperatorPubkeysService, logger) // Call the GetOperatorPubkeys method with the test operator address aggG1PubkeyPerQuorum, gotErr := service.GetQuorumsAvsStateAtBlock(context.Background(), tt.queryQuorumNumbers, tt.queryBlockNum) diff --git a/services/avsregistry/avsregistry_fake.go b/services/avsregistry/avsregistry_fake.go index a3555752..c5759ba3 100644 --- a/services/avsregistry/avsregistry_fake.go +++ b/services/avsregistry/avsregistry_fake.go @@ -5,7 +5,7 @@ import ( "errors" "math/big" - blsoperatorstateretrievar "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" + opstateretriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/types" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -68,6 +68,9 @@ func (f *FakeAvsRegistryService) GetQuorumsAvsStateAtBlock(ctx context.Context, return quorumsAvsState, nil } -func (f *FakeAvsRegistryService) GetCheckSignaturesIndices(opts *bind.CallOpts, referenceBlockNumber types.BlockNum, quorumNumbers []types.QuorumNum, nonSignerOperatorIds []types.OperatorId) (blsoperatorstateretrievar.BLSOperatorStateRetrieverCheckSignaturesIndices, error) { - return blsoperatorstateretrievar.BLSOperatorStateRetrieverCheckSignaturesIndices{}, nil +func (f *FakeAvsRegistryService) GetCheckSignaturesIndices( + opts *bind.CallOpts, referenceBlockNumber types.BlockNum, + quorumNumbers []types.QuorumNum, nonSignerOperatorIds []types.OperatorId, +) (opstateretriever.OperatorStateRetrieverCheckSignaturesIndices, error) { + return opstateretriever.OperatorStateRetrieverCheckSignaturesIndices{}, nil } diff --git a/services/gen.go b/services/gen.go index 88ddba28..6d926819 100644 --- a/services/gen.go +++ b/services/gen.go @@ -1,13 +1,13 @@ package services -//go:generate mockgen -destination=./mocks/pubkeycompendium.go -package=mocks github.com/Layr-Labs/eigensdk-go/services/pubkeycompendium PubkeyCompendiumService +//go:generate mockgen -destination=./mocks/operatorpubkeys.go -package=mocks github.com/Layr-Labs/eigensdk-go/services/operatorpubkeys OperatorPubkeysService //go:generate mockgen -destination=./mocks/avsregistry.go -package=mocks github.com/Layr-Labs/eigensdk-go/services/avsregistry AvsRegistryService // We generate it in ./mocks/blsagg/ instead of ./mocks like the others because otherwise we get a circular dependency // avsregistry -> mocks -> avsregistry -// because avsregistry_chaincaller_test -> for pubkeycompendium mock +// because avsregistry_chaincaller_test -> for blsApkRegistry mock // and blsaggregation mock -> avsregistry interface // TODO: are there better ways to organize these dependencies? Maybe by using ben johnson -// and having teh avs registry interface be in the /avsregistry dir but the avsregistry_chaincaller +// and having the avs registry interface be in the /avsregistry dir but the avsregistry_chaincaller // and its test in a subdir? //go:generate mockgen -destination=./mocks/blsagg/blsaggregation.go -package=mocks github.com/Layr-Labs/eigensdk-go/services/bls_aggregation BlsAggregationService diff --git a/services/mocks/avsregistry.go b/services/mocks/avsregistry.go index b0b58707..0c53110c 100644 --- a/services/mocks/avsregistry.go +++ b/services/mocks/avsregistry.go @@ -12,7 +12,7 @@ import ( context "context" reflect "reflect" - contractBLSOperatorStateRetriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSOperatorStateRetriever" + contractOperatorStateRetriever "github.com/Layr-Labs/eigensdk-go/contracts/bindings/OperatorStateRetriever" types "github.com/Layr-Labs/eigensdk-go/types" bind "github.com/ethereum/go-ethereum/accounts/abi/bind" gomock "go.uber.org/mock/gomock" @@ -42,10 +42,10 @@ func (m *MockAvsRegistryService) EXPECT() *MockAvsRegistryServiceMockRecorder { } // GetCheckSignaturesIndices mocks base method. -func (m *MockAvsRegistryService) GetCheckSignaturesIndices(arg0 *bind.CallOpts, arg1 uint32, arg2 []byte, arg3 [][32]byte) (contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverCheckSignaturesIndices, error) { +func (m *MockAvsRegistryService) GetCheckSignaturesIndices(arg0 *bind.CallOpts, arg1 uint32, arg2 []byte, arg3 [][32]byte) (contractOperatorStateRetriever.OperatorStateRetrieverCheckSignaturesIndices, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetCheckSignaturesIndices", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(contractBLSOperatorStateRetriever.BLSOperatorStateRetrieverCheckSignaturesIndices) + ret0, _ := ret[0].(contractOperatorStateRetriever.OperatorStateRetrieverCheckSignaturesIndices) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/services/mocks/operatorpubkeys.go b/services/mocks/operatorpubkeys.go new file mode 100644 index 00000000..8fe32953 --- /dev/null +++ b/services/mocks/operatorpubkeys.go @@ -0,0 +1,56 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/Layr-Labs/eigensdk-go/services/operatorpubkeys (interfaces: OperatorPubkeysService) +// +// Generated by this command: +// +// mockgen -destination=./mocks/operatorpubkeys.go -package=mocks github.com/Layr-Labs/eigensdk-go/services/operatorpubkeys OperatorPubkeysService +// +// Package mocks is a generated GoMock package. +package mocks + +import ( + context "context" + reflect "reflect" + + types "github.com/Layr-Labs/eigensdk-go/types" + common "github.com/ethereum/go-ethereum/common" + gomock "go.uber.org/mock/gomock" +) + +// MockOperatorPubkeysService is a mock of OperatorPubkeysService interface. +type MockOperatorPubkeysService struct { + ctrl *gomock.Controller + recorder *MockOperatorPubkeysServiceMockRecorder +} + +// MockOperatorPubkeysServiceMockRecorder is the mock recorder for MockOperatorPubkeysService. +type MockOperatorPubkeysServiceMockRecorder struct { + mock *MockOperatorPubkeysService +} + +// NewMockOperatorPubkeysService creates a new mock instance. +func NewMockOperatorPubkeysService(ctrl *gomock.Controller) *MockOperatorPubkeysService { + mock := &MockOperatorPubkeysService{ctrl: ctrl} + mock.recorder = &MockOperatorPubkeysServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockOperatorPubkeysService) EXPECT() *MockOperatorPubkeysServiceMockRecorder { + return m.recorder +} + +// GetOperatorPubkeys mocks base method. +func (m *MockOperatorPubkeysService) GetOperatorPubkeys(arg0 context.Context, arg1 common.Address) (types.OperatorPubkeys, bool) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOperatorPubkeys", arg0, arg1) + ret0, _ := ret[0].(types.OperatorPubkeys) + ret1, _ := ret[1].(bool) + return ret0, ret1 +} + +// GetOperatorPubkeys indicates an expected call of GetOperatorPubkeys. +func (mr *MockOperatorPubkeysServiceMockRecorder) GetOperatorPubkeys(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorPubkeys", reflect.TypeOf((*MockOperatorPubkeysService)(nil).GetOperatorPubkeys), arg0, arg1) +} diff --git a/services/mocks/pubkeycompendium.go b/services/mocks/pubkeycompendium.go deleted file mode 100644 index 1540b214..00000000 --- a/services/mocks/pubkeycompendium.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/Layr-Labs/eigensdk-go/services/pubkeycompendium (interfaces: PubkeyCompendiumService) -// -// Generated by this command: -// -// mockgen -destination=./mocks/pubkeycompendium.go -package=mocks github.com/Layr-Labs/eigensdk-go/services/pubkeycompendium PubkeyCompendiumService -// -// Package mocks is a generated GoMock package. -package mocks - -import ( - context "context" - reflect "reflect" - - types "github.com/Layr-Labs/eigensdk-go/types" - common "github.com/ethereum/go-ethereum/common" - gomock "go.uber.org/mock/gomock" -) - -// MockPubkeyCompendiumService is a mock of PubkeyCompendiumService interface. -type MockPubkeyCompendiumService struct { - ctrl *gomock.Controller - recorder *MockPubkeyCompendiumServiceMockRecorder -} - -// MockPubkeyCompendiumServiceMockRecorder is the mock recorder for MockPubkeyCompendiumService. -type MockPubkeyCompendiumServiceMockRecorder struct { - mock *MockPubkeyCompendiumService -} - -// NewMockPubkeyCompendiumService creates a new mock instance. -func NewMockPubkeyCompendiumService(ctrl *gomock.Controller) *MockPubkeyCompendiumService { - mock := &MockPubkeyCompendiumService{ctrl: ctrl} - mock.recorder = &MockPubkeyCompendiumServiceMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockPubkeyCompendiumService) EXPECT() *MockPubkeyCompendiumServiceMockRecorder { - return m.recorder -} - -// GetOperatorPubkeys mocks base method. -func (m *MockPubkeyCompendiumService) GetOperatorPubkeys(arg0 context.Context, arg1 common.Address) (types.OperatorPubkeys, bool) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorPubkeys", arg0, arg1) - ret0, _ := ret[0].(types.OperatorPubkeys) - ret1, _ := ret[1].(bool) - return ret0, ret1 -} - -// GetOperatorPubkeys indicates an expected call of GetOperatorPubkeys. -func (mr *MockPubkeyCompendiumServiceMockRecorder) GetOperatorPubkeys(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorPubkeys", reflect.TypeOf((*MockPubkeyCompendiumService)(nil).GetOperatorPubkeys), arg0, arg1) -} diff --git a/services/pubkeycompendium/pubkeycompendium.go b/services/operatorpubkeys/operatorpubkeys.go similarity index 64% rename from services/pubkeycompendium/pubkeycompendium.go rename to services/operatorpubkeys/operatorpubkeys.go index efc30f82..d4beef00 100644 --- a/services/pubkeycompendium/pubkeycompendium.go +++ b/services/operatorpubkeys/operatorpubkeys.go @@ -1,4 +1,4 @@ -package pubkeycompendium +package operatorpubkeys import ( "context" @@ -7,11 +7,11 @@ import ( "github.com/ethereum/go-ethereum/common" ) -// PubkeyCompendiumService is a service that indexes the BLSPublicKeyCompendium contract and provides a way to query for operator pubkeys. -// Currently BLSPublicKeyCompendium only stores the hash of the G1 and G2 pubkeys, so this service needs to listen to the +// OperatorPubkeysService is a service that indexes the BLSApkRegistry contract and provides a way to query for operator pubkeys. +// Currently BLSApkRegistry only stores the hash of the G1 and G2 pubkeys, so this service needs to listen to the // event NewPubkeyRegistration(address indexed operator, BN254.G1Point pubkeyG1, BN254.G2Point pubkeyG2) // and store the actual pubkeys, so that AVS aggregators can get the pubkeys of the operators registered with their AVS. -type PubkeyCompendiumService interface { +type OperatorPubkeysService interface { // GetOperatorPubkeys returns the pubkeys of the operator with the given address. // it returns false is the operator is not found. GetOperatorPubkeys(ctx context.Context, operator common.Address) (operatorPubkeys types.OperatorPubkeys, operatorFound bool) diff --git a/services/pubkeycompendium/pubkeycompendium_inmemory.go b/services/operatorpubkeys/operatorpubkeys_inmemory.go similarity index 62% rename from services/pubkeycompendium/pubkeycompendium_inmemory.go rename to services/operatorpubkeys/operatorpubkeys_inmemory.go index eddb89c9..35036cbc 100644 --- a/services/pubkeycompendium/pubkeycompendium_inmemory.go +++ b/services/operatorpubkeys/operatorpubkeys_inmemory.go @@ -1,18 +1,18 @@ -package pubkeycompendium +package operatorpubkeys import ( "context" "sync" - sdkelcontracts "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" + "github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry" "github.com/Layr-Labs/eigensdk-go/crypto/bls" "github.com/Layr-Labs/eigensdk-go/logging" "github.com/Layr-Labs/eigensdk-go/types" "github.com/ethereum/go-ethereum/common" ) -// PubkeyCompendiumServiceInMemory is a stateful goroutine (see https://gobyexample.com/stateful-goroutines) -// implementation of PubkeyCompendiumService that listen for the NewPubkeyRegistration using a websocket connection +// OperatorPubkeysServiceInMemory is a stateful goroutine (see https://gobyexample.com/stateful-goroutines) +// implementation of OperatorPubkeysService that listen for the NewPubkeyRegistration using a websocket connection // to an eth client and stores the pubkeys in memory. Another possible implementation is using a mutex // (https://gobyexample.com/mutexes) instead. We can switch to that if we ever find a good reason to. // @@ -22,11 +22,11 @@ import ( // websocket connection errors or when failing to query past events. The philosophy here is that hard crashing is // better than silently failing, since it will be easier to debug. Naturally, this means that this aggregator using this service needs // to be replicated and load-balanced, so that when it fails traffic can be switched to the other aggregator. -type PubkeyCompendiumServiceInMemory struct { - eigenlayerSubscriber sdkelcontracts.ELSubscriber - eigenlayerReader sdkelcontracts.ELReader - logger logging.Logger - queryC chan<- query +type OperatorPubkeysServiceInMemory struct { + avsRegistrySubscriber avsregistry.AvsRegistrySubscriber + avsRegistryReader avsregistry.AvsRegistryReader + logger logging.Logger + queryC chan<- query } type query struct { operatorAddr common.Address @@ -39,25 +39,25 @@ type resp struct { operatorExists bool } -var _ PubkeyCompendiumService = (*PubkeyCompendiumServiceInMemory)(nil) +var _ OperatorPubkeysService = (*OperatorPubkeysServiceInMemory)(nil) -// NewPubkeyCompendiumInMemory constructs a PubkeyCompendiumServiceInMemory and starts it in a goroutine. +// NewOperatorPubkeysServiceInMemory constructs a OperatorPubkeysServiceInMemory and starts it in a goroutine. // It takes a context as argument because the "backfilling" of the database is done inside this constructor, // so we wait for all past NewPubkeyRegistration events to be queried and the db to be filled before returning the service. // The constructor is thus following a RAII-like pattern, of initializing the serving during construction. // Using a separate initialize() function might lead to some users forgetting to call it and the service not behaving properly. -func NewPubkeyCompendiumInMemory( +func NewOperatorPubkeysServiceInMemory( ctx context.Context, - eigenlayerSubscriber sdkelcontracts.ELSubscriber, - eigenlayerReader sdkelcontracts.ELReader, + avsRegistrySubscriber avsregistry.AvsRegistrySubscriber, + avsRegistryReader avsregistry.AvsRegistryReader, logger logging.Logger, -) *PubkeyCompendiumServiceInMemory { +) *OperatorPubkeysServiceInMemory { queryC := make(chan query) - pkcs := &PubkeyCompendiumServiceInMemory{ - eigenlayerSubscriber: eigenlayerSubscriber, - eigenlayerReader: eigenlayerReader, - logger: logger, - queryC: queryC, + pkcs := &OperatorPubkeysServiceInMemory{ + avsRegistrySubscriber: avsRegistrySubscriber, + avsRegistryReader: avsRegistryReader, + logger: logger, + queryC: queryC, } // We use this waitgroup to wait on the initialization of the inmemory pubkey dict, // which requires querying the past events of the pubkey registration contract @@ -68,19 +68,19 @@ func NewPubkeyCompendiumInMemory( return pkcs } -func (pkcs *PubkeyCompendiumServiceInMemory) startServiceInGoroutine(ctx context.Context, queryC <-chan query, wg *sync.WaitGroup) { +func (ops *OperatorPubkeysServiceInMemory) startServiceInGoroutine(ctx context.Context, queryC <-chan query, wg *sync.WaitGroup) { go func() { pubkeyDict := make(map[common.Address]types.OperatorPubkeys) // TODO(samlaf): we should probably save the service in the logger itself and add it automatically to all logs - pkcs.logger.Debug("Subscribing to new pubkey registration event on pubkey compendium contract", "service", "PubkeyCompendiumServiceInMemory") - newPubkeyRegistrationC, newPubkeyRegistrationSub, err := pkcs.eigenlayerSubscriber.SubscribeToNewPubkeyRegistrations() + ops.logger.Debug("Subscribing to new pubkey registration event on pubkey compendium contract", "service", "OperatorPubkeysServiceInMemory") + newPubkeyRegistrationC, newPubkeyRegistrationSub, err := ops.avsRegistrySubscriber.SubscribeToNewPubkeyRegistrations() if err != nil { - pkcs.logger.Error("Fatal error opening websocket subscription for new pubkey registrations", "err", err, "service", "PubkeyCompendiumServiceInMemory") + ops.logger.Error("Fatal error opening websocket subscription for new pubkey registrations", "err", err, "service", "OperatorPubkeysServiceInMemory") // see the warning above the struct definition to understand why we panic here panic(err) } - pkcs.queryPastRegisteredOperatorEventsAndFillDb(ctx, pubkeyDict) + ops.queryPastRegisteredOperatorEventsAndFillDb(ctx, pubkeyDict) // The constructor can return after we have backfilled the db by querying the events of operators that have registered with the pubkey compendium // before the block at which we started the ws subscription above wg.Done() @@ -88,14 +88,14 @@ func (pkcs *PubkeyCompendiumServiceInMemory) startServiceInGoroutine(ctx context select { case <-ctx.Done(): // TODO(samlaf): should we do anything here? Seems like this only happens when the aggregator is shutting down and we want graceful exit - pkcs.logger.Infof("PubkeyCompendiumServiceInMemory: Context cancelled, exiting") + ops.logger.Infof("OperatorPubkeysServiceInMemory: Context cancelled, exiting") return case err := <-newPubkeyRegistrationSub.Err(): - pkcs.logger.Error("Error in websocket subscription for new pubkey registration events. Attempting to reconnect...", "err", err, "service", "PubkeyCompendiumServiceInMemory") + ops.logger.Error("Error in websocket subscription for new pubkey registration events. Attempting to reconnect...", "err", err, "service", "OperatorPubkeysServiceInMemory") newPubkeyRegistrationSub.Unsubscribe() - newPubkeyRegistrationC, newPubkeyRegistrationSub, err = pkcs.eigenlayerSubscriber.SubscribeToNewPubkeyRegistrations() + newPubkeyRegistrationC, newPubkeyRegistrationSub, err = ops.avsRegistrySubscriber.SubscribeToNewPubkeyRegistrations() if err != nil { - pkcs.logger.Error("Error opening websocket subscription for new pubkey registrations", "err", err, "service", "PubkeyCompendiumServiceInMemory") + ops.logger.Error("Error opening websocket subscription for new pubkey registrations", "err", err, "service", "OperatorPubkeysServiceInMemory") // see the warning above the struct definition to understand why we panic here panic(err) } @@ -105,8 +105,8 @@ func (pkcs *PubkeyCompendiumServiceInMemory) startServiceInGoroutine(ctx context G1Pubkey: bls.NewG1Point(newPubkeyRegistrationEvent.PubkeyG1.X, newPubkeyRegistrationEvent.PubkeyG1.Y), G2Pubkey: bls.NewG2Point(newPubkeyRegistrationEvent.PubkeyG2.X, newPubkeyRegistrationEvent.PubkeyG2.Y), } - pkcs.logger.Debug("Added operator pubkeys to pubkey dict", - "service", "PubkeyCompendiumServiceInMemory", "operatorAddr", operatorAddr, + ops.logger.Debug("Added operator pubkeys to pubkey dict", + "service", "OperatorPubkeysServiceInMemory", "operatorAddr", operatorAddr, "G1pubkey", pubkeyDict[operatorAddr].G1Pubkey, "G2pubkey", pubkeyDict[operatorAddr].G2Pubkey, ) // Receive a query from GetOperatorPubkeys @@ -118,15 +118,15 @@ func (pkcs *PubkeyCompendiumServiceInMemory) startServiceInGoroutine(ctx context }() } -func (pkcs *PubkeyCompendiumServiceInMemory) queryPastRegisteredOperatorEventsAndFillDb(ctx context.Context, pubkeydict map[common.Address]types.OperatorPubkeys) { +func (pkcs *OperatorPubkeysServiceInMemory) queryPastRegisteredOperatorEventsAndFillDb(ctx context.Context, pubkeydict map[common.Address]types.OperatorPubkeys) { // Querying with nil startBlock and stopBlock will return all events. It doesn't matter if we query some events that we will receive again in the websocket, // since we will just overwrite the pubkey dict with the same values. - alreadyRegisteredOperatorAddrs, alreadyRegisteredOperatorPubkeys, err := pkcs.eigenlayerReader.QueryExistingRegisteredOperatorPubKeys(ctx, nil, nil) + alreadyRegisteredOperatorAddrs, alreadyRegisteredOperatorPubkeys, err := pkcs.avsRegistryReader.QueryExistingRegisteredOperatorPubKeys(ctx, nil, nil) if err != nil { - pkcs.logger.Error("Fatal error querying existing registered operators", "err", err, "service", "PubkeyCompendiumServiceInMemory") + pkcs.logger.Error("Fatal error querying existing registered operators", "err", err, "service", "OperatorPubkeysServiceInMemory") panic(err) } - pkcs.logger.Debug("List of queried operator registration events in pubkey compendium", "alreadyRegisteredOperatorAddr", alreadyRegisteredOperatorAddrs, "service", "PubkeyCompendiumServiceInMemory") + pkcs.logger.Debug("List of queried operator registration events in pubkey compendium", "alreadyRegisteredOperatorAddr", alreadyRegisteredOperatorAddrs, "service", "OperatorPubkeysServiceInMemory") // Fill the pubkeydict db with the operators and pubkeys found for i, operatorAddr := range alreadyRegisteredOperatorAddrs { @@ -136,7 +136,7 @@ func (pkcs *PubkeyCompendiumServiceInMemory) queryPastRegisteredOperatorEventsAn } // TODO(samlaf): we might want to also add an async version of this method that returns a channel of operator pubkeys? -func (pkcs *PubkeyCompendiumServiceInMemory) GetOperatorPubkeys(ctx context.Context, operator common.Address) (operatorPubkeys types.OperatorPubkeys, operatorFound bool) { +func (pkcs *OperatorPubkeysServiceInMemory) GetOperatorPubkeys(ctx context.Context, operator common.Address) (operatorPubkeys types.OperatorPubkeys, operatorFound bool) { respC := make(chan resp) pkcs.queryC <- query{operator, respC} select { diff --git a/services/pubkeycompendium/pubkeycompendium_inmemory_test.go b/services/operatorpubkeys/operatorpubkeys_inmemory_test.go similarity index 64% rename from services/pubkeycompendium/pubkeycompendium_inmemory_test.go rename to services/operatorpubkeys/operatorpubkeys_inmemory_test.go index 9d244579..25156e7c 100644 --- a/services/pubkeycompendium/pubkeycompendium_inmemory_test.go +++ b/services/operatorpubkeys/operatorpubkeys_inmemory_test.go @@ -1,4 +1,4 @@ -package pubkeycompendium +package operatorpubkeys import ( "context" @@ -14,14 +14,14 @@ import ( gethtypes "github.com/ethereum/go-ethereum/core/types" "go.uber.org/mock/gomock" - pubkeycompendiumbindings "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSPublicKeyCompendium" + apkregistrybindings "github.com/Layr-Labs/eigensdk-go/contracts/bindings/BLSApkRegistry" ) type testOperator struct { operatorAddr common.Address pubkeys types.OperatorPubkeys - contractG1Pubkey pubkeycompendiumbindings.BN254G1Point - contractG2Pubkey pubkeycompendiumbindings.BN254G2Point + contractG1Pubkey apkregistrybindings.BN254G1Point + contractG2Pubkey apkregistrybindings.BN254G2Point } func TestGetOperatorPubkeys(t *testing.T) { @@ -32,11 +32,11 @@ func TestGetOperatorPubkeys(t *testing.T) { G1Pubkey: bls.NewG1Point(big.NewInt(1), big.NewInt(1)), G2Pubkey: bls.NewG2Point([2]*big.Int{big.NewInt(1), big.NewInt(1)}, [2]*big.Int{big.NewInt(1), big.NewInt(1)}), }, - contractG1Pubkey: pubkeycompendiumbindings.BN254G1Point{ + contractG1Pubkey: apkregistrybindings.BN254G1Point{ X: big.NewInt(1), Y: big.NewInt(1), }, - contractG2Pubkey: pubkeycompendiumbindings.BN254G2Point{ + contractG2Pubkey: apkregistrybindings.BN254G2Point{ X: [2]*big.Int{big.NewInt(1), big.NewInt(1)}, Y: [2]*big.Int{big.NewInt(1), big.NewInt(1)}, }, @@ -45,17 +45,17 @@ func TestGetOperatorPubkeys(t *testing.T) { // Define tests var tests = []struct { name string - mocksInitializationFunc func(*mocks.MockELSubscriber, *mocks.MockELReader, *mocks.MockSubscription) + mocksInitializationFunc func(*mocks.MockAvsRegistrySubscriber, *mocks.MockAvsRegistryReader, *mocks.MockSubscription) queryOperatorAddr common.Address wantOperatorFound bool wantOperatorPubkeys types.OperatorPubkeys }{ { name: "should return false if operator not found", - mocksInitializationFunc: func(mockElSubscriber *mocks.MockELSubscriber, mockElReader *mocks.MockELReader, mockSubscription *mocks.MockSubscription) { + mocksInitializationFunc: func(mockAvsRegistrySubscriber *mocks.MockAvsRegistrySubscriber, mockElReader *mocks.MockAvsRegistryReader, mockSubscription *mocks.MockSubscription) { errC := make(chan error) mockSubscription.EXPECT().Err().AnyTimes().Return(errC) - mockElSubscriber.EXPECT().SubscribeToNewPubkeyRegistrations().Return(nil, mockSubscription, nil) + mockAvsRegistrySubscriber.EXPECT().SubscribeToNewPubkeyRegistrations().Return(nil, mockSubscription, nil) mockElReader.EXPECT().QueryExistingRegisteredOperatorPubKeys(gomock.Any(), nil, nil).Return(nil, nil, nil) }, queryOperatorAddr: testOperator1.operatorAddr, @@ -64,10 +64,10 @@ func TestGetOperatorPubkeys(t *testing.T) { }, { name: "should return operator pubkeys found via query", - mocksInitializationFunc: func(mockElSubscriber *mocks.MockELSubscriber, mockElReader *mocks.MockELReader, mockSubscription *mocks.MockSubscription) { + mocksInitializationFunc: func(mockAvsRegistrySubscriber *mocks.MockAvsRegistrySubscriber, mockElReader *mocks.MockAvsRegistryReader, mockSubscription *mocks.MockSubscription) { errC := make(chan error) mockSubscription.EXPECT().Err().AnyTimes().Return(errC) - mockElSubscriber.EXPECT().SubscribeToNewPubkeyRegistrations().Return(nil, mockSubscription, nil) + mockAvsRegistrySubscriber.EXPECT().SubscribeToNewPubkeyRegistrations().Return(nil, mockSubscription, nil) mockElReader.EXPECT().QueryExistingRegisteredOperatorPubKeys(gomock.Any(), nil, nil). Return([]common.Address{testOperator1.operatorAddr}, []types.OperatorPubkeys{testOperator1.pubkeys}, nil) }, @@ -77,10 +77,10 @@ func TestGetOperatorPubkeys(t *testing.T) { }, { name: "should return operator pubkeys found via subscription", - mocksInitializationFunc: func(mockElSubscriber *mocks.MockELSubscriber, mockElReader *mocks.MockELReader, mockSubscription *mocks.MockSubscription) { + mocksInitializationFunc: func(mockAvsRegistrySubscriber *mocks.MockAvsRegistrySubscriber, mockElReader *mocks.MockAvsRegistryReader, mockSubscription *mocks.MockSubscription) { errC := make(chan error) - pubkeyRegistrationEventC := make(chan *pubkeycompendiumbindings.ContractBLSPublicKeyCompendiumNewPubkeyRegistration, 1) - pubkeyRegistrationEvent := &pubkeycompendiumbindings.ContractBLSPublicKeyCompendiumNewPubkeyRegistration{ + pubkeyRegistrationEventC := make(chan *apkregistrybindings.ContractBLSApkRegistryNewPubkeyRegistration, 1) + pubkeyRegistrationEvent := &apkregistrybindings.ContractBLSApkRegistryNewPubkeyRegistration{ Operator: testOperator1.operatorAddr, PubkeyG1: testOperator1.contractG1Pubkey, PubkeyG2: testOperator1.contractG2Pubkey, @@ -88,7 +88,7 @@ func TestGetOperatorPubkeys(t *testing.T) { } pubkeyRegistrationEventC <- pubkeyRegistrationEvent mockSubscription.EXPECT().Err().AnyTimes().Return(errC) - mockElSubscriber.EXPECT().SubscribeToNewPubkeyRegistrations().Return(pubkeyRegistrationEventC, mockSubscription, nil) + mockAvsRegistrySubscriber.EXPECT().SubscribeToNewPubkeyRegistrations().Return(pubkeyRegistrationEventC, mockSubscription, nil) mockElReader.EXPECT().QueryExistingRegisteredOperatorPubKeys(gomock.Any(), nil, nil). Return([]common.Address{}, []types.OperatorPubkeys{}, nil) }, @@ -102,15 +102,15 @@ func TestGetOperatorPubkeys(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // Create mocks mockCtrl := gomock.NewController(t) - mockElSubscriber := mocks.NewMockELSubscriber(mockCtrl) - mockElReader := mocks.NewMockELReader(mockCtrl) + mockAvsRegistrySubscriber := mocks.NewMockAvsRegistrySubscriber(mockCtrl) + mockElReader := mocks.NewMockAvsRegistryReader(mockCtrl) mockSubscription := mocks.NewMockSubscription(mockCtrl) if tt.mocksInitializationFunc != nil { - tt.mocksInitializationFunc(mockElSubscriber, mockElReader, mockSubscription) + tt.mocksInitializationFunc(mockAvsRegistrySubscriber, mockElReader, mockSubscription) } - // Create a new instance of the pubkeycompendium service - service := NewPubkeyCompendiumInMemory(context.Background(), mockElSubscriber, mockElReader, logger) + // Create a new instance of the operatorpubkeys service + service := NewOperatorPubkeysServiceInMemory(context.Background(), mockAvsRegistrySubscriber, mockElReader, logger) // Call the GetOperatorPubkeys method with the test operator address gotOperatorPubkeys, gotOperatorFound := service.GetOperatorPubkeys(context.Background(), tt.queryOperatorAddr) diff --git a/types/abi/BLSApkRegistry.json b/types/abi/BLSApkRegistry.json new file mode 100644 index 00000000..db40e808 --- /dev/null +++ b/types/abi/BLSApkRegistry.json @@ -0,0 +1,607 @@ +[ + { + "inputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "_registryCoordinator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct BN254.G1Point", + "name": "pubkeyG1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "indexed": false, + "internalType": "struct BN254.G2Point", + "name": "pubkeyG2", + "type": "tuple" + } + ], + "name": "NewPubkeyRegistration", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + } + ], + "name": "OperatorAddedToQuorums", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + } + ], + "name": "OperatorRemovedFromQuorums", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "apkHistory", + "outputs": [ + { + "internalType": "bytes24", + "name": "apkHash", + "type": "bytes24" + }, + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "name": "currentApk", + "outputs": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + } + ], + "name": "deregisterOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + } + ], + "name": "getApk", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "internalType": "struct BN254.G1Point", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "blockNumber", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getApkHashAtBlockNumberAndIndex", + "outputs": [ + { + "internalType": "bytes24", + "name": "", + "type": "bytes24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + } + ], + "name": "getApkHistoryLength", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "getApkIndicesAtBlockNumber", + "outputs": [ + { + "internalType": "uint32[]", + "name": "", + "type": "uint32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getApkUpdateAtIndex", + "outputs": [ + { + "components": [ + { + "internalType": "bytes24", + "name": "apkHash", + "type": "bytes24" + }, + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + } + ], + "internalType": "struct IBLSApkRegistry.ApkUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "pubkeyHash", + "type": "bytes32" + } + ], + "name": "getOperatorFromPubkeyHash", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "getOperatorId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "getRegisteredPubkey", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "internalType": "struct BN254.G1Point", + "name": "", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + } + ], + "name": "initializeQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "operatorToPubkey", + "outputs": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "operatorToPubkeyHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pubkeyHashToOperator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyRegistrationSignature", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyG1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "pubkeyG2", + "type": "tuple" + } + ], + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "name": "params", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyRegistrationMessageHash", + "type": "tuple" + } + ], + "name": "registerBLSPublicKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + } + ], + "name": "registerOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registryCoordinator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/types/abi/BLSPublicKeyCompendium.json b/types/abi/BLSPublicKeyCompendium.json deleted file mode 100644 index 79e832a6..00000000 --- a/types/abi/BLSPublicKeyCompendium.json +++ /dev/null @@ -1,203 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct BN254.G1Point", - "name": "pubkeyG1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "indexed": false, - "internalType": "struct BN254.G2Point", - "name": "pubkeyG2", - "type": "tuple" - } - ], - "name": "NewPubkeyRegistration", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "operatorID", - "type": "bytes32" - } - ], - "name": "getBN254PubkeysFromOperatorID", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkeyG1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "internalType": "struct BN254.G2Point", - "name": "pubkeyG2", - "type": "tuple" - } - ], - "internalType": "struct IBLSPublicKeyCompendium.BN254Pubkeys", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "operatorToPubkeyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pubkeyHashToOperator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "signedMessageHash", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkeyG1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "internalType": "struct BN254.G2Point", - "name": "pubkeyG2", - "type": "tuple" - } - ], - "name": "registerBLSPublicKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file diff --git a/types/abi/abi.go b/types/abi/abi.go index 43815b2c..be7e65b5 100644 --- a/types/abi/abi.go +++ b/types/abi/abi.go @@ -4,5 +4,5 @@ import ( _ "embed" ) -//go:embed BLSPublicKeyCompendium.json -var BLSPublicKeyCompendiumAbi []byte +//go:embed BLSApkRegistry.json +var BLSApkRegistryAbi []byte