// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package agglayerbridge

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
)

// AgglayerbridgeMetaData contains all meta data concerning the Agglayerbridge contract.
var AgglayerbridgeMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountDoesNotMatchMsgValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DestinationNetworkInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EtherTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedProxyDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasTokenNetworkMustBeZeroOnEther\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GlobalExitRootInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidGlobalIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializeFunction\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proxyAdmin\",\"type\":\"address\"}],\"name\":\"InvalidProxyAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSmtProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proxyAdmin\",\"type\":\"address\"}],\"name\":\"InvalidZeroProxyAdminOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeFull\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MsgValueNotZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NativeTokenIsEther\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewDepositCountExceedsMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoValueInMessagesOnGasTokenNetworks\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonZeroValueForUnusedFrontier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNotEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingProxiedTokensManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyProxiedTokensManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyRollupManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubtreeFrontierMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldProxiedTokensManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newProxiedTokensManager\",\"type\":\"address\"}],\"name\":\"AcceptProxiedTokensManagerRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"leafType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"depositCount\",\"type\":\"uint32\"}],\"name\":\"BridgeEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"globalIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wrappedTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"NewWrappedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"currentProxiedTokensManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newProxiedTokensManager\",\"type\":\"address\"}],\"name\":\"TransferProxiedTokensManagerRole\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INIT_BYTECODE_TRANSPARENT_PROXY\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETHToken\",\"outputs\":[{\"internalType\":\"contractITokenWrappedBridgeUpgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProxiedTokensManagerRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"permitData\",\"type\":\"bytes\"}],\"name\":\"bridgeAsset\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridgeLib\",\"outputs\":[{\"internalType\":\"contractBridgeLib\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"bridgeMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountWETH\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"bridgeMessageWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leafHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"calculateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"smtProofLocalExitRoot\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"smtProofRollupExitRoot\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"globalIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"claimAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"smtProofLocalExitRoot\",\"type\":\"bytes32[32]\"},{\"internalType\":\"bytes32[32]\",\"name\":\"smtProofRollupExitRoot\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"globalIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"claimMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimedBitMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"name\":\"computeTokenProxyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deactivateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTokenMetadata\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTokenNetwork\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"leafType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"}],\"name\":\"getLeafValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxiedTokensManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenMetadata\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"name\":\"getTokenWrappedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWrappedTokenBridgeImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalExitRootManager\",\"outputs\":[{\"internalType\":\"contractIBaseLegacyAgglayerGER\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_networkID\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_gasTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_gasTokenNetwork\",\"type\":\"uint32\"},{\"internalType\":\"contractIBaseLegacyAgglayerGER\",\"name\":\"_globalExitRootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_polygonRollupManager\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_gasTokenMetadata\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"leafIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"sourceBridgeNetwork\",\"type\":\"uint32\"}],\"name\":\"isClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastUpdatedDepositCount\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingProxiedTokensManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"polygonRollupManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiedTokensManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tokenInfoToWrappedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newProxiedTokensManager\",\"type\":\"address\"}],\"name\":\"transferProxiedTokensManagerRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateGlobalExitRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leafHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMerkleProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedTokenBytecodeStorer\",\"outputs\":[{\"internalType\":\"contractIBytecodeStorer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"wrappedTokenToTokenInfo\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Bin: "0x60e060405234801561000f575f5ffd5b5060405161001c90610170565b604051809103905ff080158015610035573d5f5f3e3d5ffd5b506001600160a01b031660805260405161004e9061017d565b604051809103905ff080158015610067573d5f5f3e3d5ffd5b506001600160a01b031660c0526040516100809061018a565b604051809103905ff080158015610099573d5f5f3e3d5ffd5b506001600160a01b031660a0526100ae6100b3565b610197565b5f54610100900460ff161561011e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116101561016e575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610fcf8061387f83390190565b6115988061484e83390190565b610cde80615de683390190565b60805160a05160c0516136a26101dd5f395f6103d901525f818161053501528181610dec015281816116a801526122ab01525f818161038c0152610e6601526136a25ff3fe608060405260043610610249575f3560e01c806381b1c17411610134578063cc461632116100b3578063ece93c6f11610078578063ece93c6f14610745578063ee25560b14610764578063f214e1611461078f578063f5efcd79146107ae578063f811bff7146107cd578063fb570834146107ec575f5ffd5b8063cc461632146106ba578063ccaa2d11146106d9578063cd586579146106f8578063d02103ca1461070b578063dbc1697614610731575f5ffd5b8063b8b284d0116100f9578063b8b284d014610624578063bab161bf14610643578063be5831c714610664578063c00f14ab14610687578063c514f24e146106a6575f5ffd5b806381b1c1741461057f57806383f24403146105b35780638bd309c3146105d25780638c668f1c146105f15780638ed7e3f214610605575f5ffd5b80633c351e10116101cb5780635ca1e165116101905780635ca1e165146104c057806365d6f654146104d45780636e4ecfed146105055780636f0bc3da1461052457806379e2cf97146105575780638129fc1c1461056b575f5ffd5b80633c351e10146103fd5780633cbc795b1461041c5780633e197043146104545780634b2f336d1461047357806354fd4d5014610492575f5ffd5b80632dfdf0b5116102115780632dfdf0b5146102f1578063318aee3d14610314578063381fef6d1461037b57806338b8fbbb146103ae5780633b2fee9a146103cb575f5ffd5b806315064c961461024d5780632072f6c51461027b57806322e95f2c14610291578063240ff378146102bd57806327aef4e8146102d0575b5f5ffd5b348015610258575f5ffd5b506068546102669060ff1681565b60405190151581526020015b60405180910390f35b348015610286575f5ffd5b5061028f61080b565b005b34801561029c575f5ffd5b506102b06102ab3660046128ee565b610840565b6040516102729190612923565b61028f6102cb366004612988565b61088e565b3480156102db575f5ffd5b506102e46108fe565b6040516102729190612a49565b3480156102fc575f5ffd5b5061030660535481565b604051908152602001610272565b34801561031f575f5ffd5b5061035761032e366004612a5b565b606b6020525f908152604090205463ffffffff811690600160201b90046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610272565b348015610386575f5ffd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b9575f5ffd5b506070546001600160a01b03166102b0565b3480156103d6575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102b0565b348015610408575f5ffd5b50606d546102b0906001600160a01b031681565b348015610427575f5ffd5b50606d5461043f90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610272565b34801561045f575f5ffd5b5061030661046e366004612a84565b61098a565b34801561047e575f5ffd5b50606f546102b0906001600160a01b031681565b34801561049d575f5ffd5b50604080518082019091526006815265076312e312e360d41b60208201526102e4565b3480156104cb575f5ffd5b50610306610a16565b3480156104df575f5ffd5b506102e460405180604001604052806006815260200165076312e312e360d41b81525081565b348015610510575f5ffd5b506070546102b0906001600160a01b031681565b34801561052f575f5ffd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b348015610562575f5ffd5b5061028f610a95565b348015610576575f5ffd5b5061028f610ab6565b34801561058a575f5ffd5b506102b0610599366004612afe565b606a6020525f90815260409020546001600160a01b031681565b3480156105be575f5ffd5b506103066105cd366004612b26565b610bb1565b3480156105dd575f5ffd5b5061028f6105ec366004612a5b565b610c40565b3480156105fc575f5ffd5b5061028f610ccb565b348015610610575f5ffd5b50606c546102b0906001600160a01b031681565b34801561062f575f5ffd5b5061028f61063e366004612b62565b610d54565b34801561064e575f5ffd5b5060685461043f90610100900463ffffffff1681565b34801561066f575f5ffd5b5060685461043f90600160c81b900463ffffffff1681565b348015610692575f5ffd5b506102e46106a1366004612a5b565b610dd2565b3480156106b1575f5ffd5b506102e4610e62565b3480156106c5575f5ffd5b506102666106d4366004612bdf565b610eeb565b3480156106e4575f5ffd5b5061028f6106f3366004612c10565b610f72565b61028f610706366004612cee565b611371565b348015610716575f5ffd5b506068546102b090600160281b90046001600160a01b031681565b34801561073c575f5ffd5b5061028f61179a565b348015610750575f5ffd5b506071546102b0906001600160a01b031681565b34801561076f575f5ffd5b5061030661077e366004612afe565b60696020525f908152604090205481565b34801561079a575f5ffd5b506102b06107a93660046128ee565b6117cd565b3480156107b9575f5ffd5b5061028f6107c8366004612c10565b611893565b3480156107d8575f5ffd5b5061028f6107e7366004612de7565b611ad6565b3480156107f7575f5ffd5b50610266610806366004612eb6565b611d2d565b606c546001600160a01b0316331461083657604051631736745960e31b815260040160405180910390fd5b61083e611d44565b565b5f606a5f8484604051602001610857929190612efb565b60408051601f198184030181529181528151602092830120835290820192909252015f20546001600160a01b031690505b92915050565b60685460ff16156108b257604051630bc011ff60e21b815260040160405180910390fd5b34158015906108cb5750606f546001600160a01b031615155b156108e9576040516301bd897160e61b815260040160405180910390fd5b6108f7858534868686611d9f565b5050505050565b606e805461090b90612f25565b80601f016020809104026020016040519081016040528092919081815260200182805461093790612f25565b80156109825780601f1061095957610100808354040283529160200191610982565b820191905f5260205f20905b81548152906001019060200180831161096557829003601f168201915b505050505081565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d82015260518101839052607181018290525f90609101604051602081830303815290604052805190602001209050979650505050505050565b6053545f90819081805b6020811015610a8c578083901c600116600103610a6557610a5e60338260208110610a4d57610a4d612f5d565b0154855f9182526020526040902090565b9350610a75565b5f84815260208390526040902093505b5f8281526020839052604090209150600101610a20565b50919392505050565b605354606854600160c81b900463ffffffff16101561083e5761083e611e7b565b5f5460ff166071805460ff60a01b1916600160a01b60ff938416021790555f5460029161010090910416158015610af357505f5460ff8083169116105b610b185760405162461bcd60e51b8152600401610b0f90612f71565b60405180910390fd5b5f805461ffff191660ff80841691909117610100178255607154600160a01b9004169003610b595760405163f57ac68360e01b815260040160405180910390fd5b610b61611f0f565b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1506071805460ff60a01b19169055565b5f83815b6020811015610c3557600163ffffffff8516821c81169003610c0157610bfa858260208110610be657610be6612f5d565b6020020135835f9182526020526040902090565b9150610c2d565b610c2a82868360208110610c1757610c17612f5d565b60200201355f9182526020526040902090565b91505b600101610bb5565b5090505b9392505050565b6070546001600160a01b03163314610c6b57604051630866750360e01b815260040160405180910390fd5b607180546001600160a01b0319166001600160a01b03838116919091179091556070546040517f0a34baa3feb299aef9c05cb59c6e0c8e7c0bcc65cbf0a647e7a7c8a2411591e292610cc09216908490612fbf565b60405180910390a150565b6071546001600160a01b03163314610cf657604051630b59ef2760e21b815260040160405180910390fd5b60708054607180546001600160a01b038082166001600160a01b03198086168217909655949091169091556040519116917fa9da6fb8c39e9c2fafda878eac316815987bdc948d241ba6d75ed035e0e829f291610cc0918491612fbf565b60685460ff1615610d7857604051630bc011ff60e21b815260040160405180910390fd5b606f546001600160a01b0316610da15760405163dde3cda760e01b815260040160405180910390fd5b606f545f90610db9906001600160a01b031686612020565b9050610dc9878783878787611d9f565b50505050505050565b60405163c00f14ab60e01b81526060906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab90610e21908590600401612923565b5f60405180830381865afa158015610e3b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108889190810190613007565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c514f24e6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610ebf573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ee69190810190613007565b905090565b6068545f908190610100900463ffffffff16158015610f10575063ffffffff83166001145b15610f22575063ffffffff8316610f49565b610f36600160201b63ffffffff8516613067565b610f469063ffffffff861661307e565b90505b600881901c5f90815260696020526040902054600160ff9092169190911b908116149392505050565b60685460ff1615610f9657604051630bc011ff60e21b815260040160405180910390fd5b610f9e612084565b60685463ffffffff8681166101009092041614610fce576040516302caf51760e11b815260040160405180910390fd5b610ff98c8c8c8c8c5f8d8d8d8d8d8d8d604051610fec929190613091565b60405180910390206120dd565b7f1df3f2a973a00d6635911755c260704e95e8a5876997546798770f76396fda4d8a888887876040516110309594939291906130a0565b60405180910390a16001600160a01b038616158015611053575063ffffffff8716155b1561113157606f546001600160a01b0316611115575f6001600160a01b03851684825b6040519080825280601f01601f1916602001820160405280156110a0576020820181803683370190505b506040516110ae91906130d2565b5f6040518083038185875af1925050503d805f81146110e8576040519150601f19603f3d011682016040523d82523d5f602084013e6110ed565b606091505b505090508061110f57604051630ce8f45160e31b815260040160405180910390fd5b5061135a565b606f5461112c906001600160a01b031685856120f9565b61135a565b606d546001600160a01b03878116911614801561115f5750606d5463ffffffff888116600160a01b90920416145b15611176575f6001600160a01b0385168482611076565b60685463ffffffff6101009091048116908816036111a25761112c6001600160a01b0387168585612150565b5f87876040516020016111b6929190612efb565b60408051601f1981840301815291815281516020928301205f818152606a9093529120549091506001600160a01b03168061134c575f61122b8386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506121ad92505050565b90506112388188886120f9565b80606a5f8581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808b63ffffffff1681526020018a6001600160a01b0316815250606b5f836001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398a8a83888860405161133e959493929190613115565b60405180910390a150611357565b6113578187876120f9565b50505b61136360018055565b505050505050505050505050565b60685460ff161561139557604051630bc011ff60e21b815260040160405180910390fd5b61139d612084565b60685463ffffffff6101009091048116908816036113ce576040516302caf51760e11b815260040160405180910390fd5b5f806060876001600160a01b0388166114b1578834146114015760405163b89240f560e01b815260040160405180910390fd5b606d54606e80546001600160a01b0383169650600160a01b90920463ffffffff1694509061142e90612f25565b80601f016020809104026020016040519081016040528092919081815260200182805461145a90612f25565b80156114a55780601f1061147c576101008083540402835291602001916114a5565b820191905f5260205f20905b81548152906001019060200180831161148857829003601f168201915b50505050509150611722565b34156114d05760405163798ee6f160e01b815260040160405180910390fd5b84156114e1576114e1888787612294565b606f546001600160a01b039081169089160361150857611501888a612020565b9050611722565b6001600160a01b038089165f908152606b602090815260409182902082518084019093525463ffffffff81168352600160201b90049092169181018290529015158061155a5750805163ffffffff1615155b1561157c57611569898b612020565b6020820151825190965094509150611691565b6040516370a0823160e01b81525f906001600160a01b038b16906370a08231906115aa903090600401612923565b602060405180830381865afa1580156115c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e99190613158565b90506116006001600160a01b038b1633308e612328565b6040516370a0823160e01b81525f906001600160a01b038c16906370a082319061162e903090600401612923565b602060405180830381865afa158015611649573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166d9190613158565b9050611679828261316f565b6068548c9850610100900463ffffffff169650935050505b60405163c00f14ab60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906116dd908c90600401612923565b5f60405180830381865afa1580156116f7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261171e9190810190613007565b9250505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b5f84868e8e8688605354604051611761989796959493929190613182565b60405180910390a161177f5f84868e8e868880519060200120612361565b861561178d5761178d611e7b565b50505050610dc960018055565b606c546001600160a01b031633146117c557604051631736745960e31b815260040160405180910390fd5b61083e612378565b5f5f83836040516020016117e2929190612efb565b6040516020818303038152906040528051906020012090505f60ff60f81b308361180a610e62565b60405160200161181a91906130d2565b6040516020818303038152906040528051906020012060405160200161187294939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f19018152919052805160209091012095945050505050565b60685460ff16156118b757604051630bc011ff60e21b815260040160405180910390fd5b60685463ffffffff86811661010090920416146118e7576040516302caf51760e11b815260040160405180910390fd5b6119068c8c8c8c8c60018d8d8d8d8d8d8d604051610fec929190613091565b7f1df3f2a973a00d6635911755c260704e95e8a5876997546798770f76396fda4d8a8888878760405161193d9594939291906130a0565b60405180910390a1606f545f906001600160a01b03166119f857846001600160a01b031684888a868660405160240161197994939291906131ee565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b179052516119ae91906130d2565b5f6040518083038185875af1925050503d805f81146119e8576040519150601f19603f3d011682016040523d82523d5f602084013e6119ed565b606091505b505080915050611aa9565b606f54611a0f906001600160a01b031686866120f9565b846001600160a01b031687898585604051602401611a3094939291906131ee565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b17905251611a6591906130d2565b5f604051808303815f865af19150503d805f8114611a9e576040519150601f19603f3d011682016040523d82523d5f602084013e611aa3565b606091505b50909150505b80611ac7576040516337e391c360e01b815260040160405180910390fd5b50505050505050505050505050565b5f5460ff166071805460ff60a01b1916600160a01b60ff938416021790555f5460029161010090910416158015611b1357505f5460ff8083169116105b611b2f5760405162461bcd60e51b8152600401610b0f90612f71565b5f805461ffff191660ff8084169190911761010017909155607154600160a01b90041615611b705760405163f57ac68360e01b815260040160405180910390fd5b611b78611f0f565b60688054610100600160c81b03191661010063ffffffff8a160265010000000000600160c81b03191617600160281b6001600160a01b038781169190910291909117909155606c80546001600160a01b0319168583161790558616611c015763ffffffff851615611bfc57604051630d43a60960e11b815260040160405180910390fd5b611ccf565b606d805463ffffffff8716600160a01b026001600160c01b03199091166001600160a01b03891617179055606e611c388382613262565b50611cae5f5f1b6012604051602001611c9a91906060808252600d908201526c2bb930b83832b21022ba3432b960991b608082015260a060208201819052600490820152630ae8aa8960e31b60c082015260ff91909116604082015260e00190565b6040516020818303038152906040526121ad565b606f80546001600160a01b0319166001600160a01b03929092169190911790555b611cd76123cf565b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150506071805460ff60a01b191690555050505050565b5f81611d3a868686610bb1565b1495945050505050565b60685460ff1615611d6857604051630bc011ff60e21b815260040160405180910390fd5b6068805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497905f90a1565b60685463ffffffff610100909104811690871603611dd0576040516302caf51760e11b815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff16338989898888605354604051611e249998979695949392919061331c565b60405180910390a1611e656001606860019054906101000a900463ffffffff16338989898888604051611e58929190613091565b6040518091039020612361565b8215611e7357611e73611e7b565b505050505050565b6053546068805463ffffffff909216600160c81b0263ffffffff60c81b1990921691909117908190556001600160a01b03600160281b909104166333d6247d611ec2610a16565b6040518263ffffffff1660e01b8152600401611ee091815260200190565b5f604051808303815f87803b158015611ef7575f5ffd5b505af1158015611f09573d5f5f3e3d5ffd5b50505050565b5f611f417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b9050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fa3919061338a565b607080546001600160a01b0319166001600160a01b039290921691821790558190611fe257604051632a506c0560e11b8152600401610b0f9190612923565b506070546040517fa9da6fb8c39e9c2fafda878eac316815987bdc948d241ba6d75ed035e0e829f291610cc0915f916001600160a01b031690612fbf565b604051632770a7eb60e21b81525f906001600160a01b03841690639dc29fac9061205090339086906004016133a5565b5f604051808303815f87803b158015612067575f5ffd5b505af1158015612079573d5f5f3e3d5ffd5b509395945050505050565b6002600154036120d65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b0f565b6002600155565b6113638c8c8c8c8c6120f48d8d8d8d8d8d8d61098a565b6123fd565b6040516340c10f1960e01b81526001600160a01b038416906340c10f199061212790859085906004016133a5565b5f604051808303815f87803b15801561213e575f5ffd5b505af1158015610dc9573d5f5f3e3d5ffd5b6121a883846001600160a01b031663a9059cbb85856040516024016121769291906133a5565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061253f565b505050565b5f5f6121b7610e62565b6040516020016121c791906130d2565b6040516020818303038152906040529050838151602083015ff591506001600160a01b03821661220a576040516331682e8d60e11b815260040160405180910390fd5b5f5f5f8580602001905181019061222191906133dc565b925092509250846001600160a01b0316631624f6c68484846040518463ffffffff1660e01b815260040161225793929190613452565b5f604051808303815f87803b15801561226e575f5ffd5b505af1158015612280573d5f5f3e3d5ffd5b505050505050505092915050565b60018055565b60405163a28fa4a360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a28fa4a3906122e8908690869086903390309060040161348a565b6020604051808303815f875af1158015612304573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0991906134d0565b6040516001600160a01b038481166024830152838116604483015260648201839052611f099186918216906323b872dd90608401612176565b610dc96123738888888888888861098a565b612597565b60685460ff1661239b57604051635386698160e01b815260040160405180910390fd5b6068805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3905f90a1565b5f54610100900460ff166123f55760405162461bcd60e51b8152600401610b0f906134eb565b61083e612656565b6068545f90600160281b90046001600160a01b031663257b363261242a86865f9182526020526040902090565b6040518263ffffffff1660e01b815260040161244891815260200190565b6020604051808303815f875af1158015612464573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124889190613158565b9050805f036124a957604051622f6fad60e01b815260040160405180910390fd5b5f5f5f6124b58861267c565b925092509250600160401b88165f146124f6576124d4858b858a611d2d565b6124f1576040516338105f3b60e21b815260040160405180910390fd5b612529565b61250c612504868c86610bb1565b8a8489611d2d565b612529576040516338105f3b60e21b815260040160405180910390fd5b6125338382612720565b50505050505050505050565b5f6125536001600160a01b038416836127c6565b905080515f1415801561257757508080602001905181019061257591906134d0565b155b156121a85782604051635274afe760e01b8152600401610b0f9190612923565b8060016125a660206002613619565b6125b0919061316f565b605354106125d1576040516377ae67b360e11b815260040160405180910390fd5b5f60535f81546125e090613624565b918290555090505f5b602081101561264d578082901c60011660010361261c57826033826020811061261457612614612f5d565b015550505050565b6126436033826020811061263257612632612f5d565b0154845f9182526020526040902090565b92506001016125e9565b506121a861363c565b5f54610100900460ff1661228e5760405162461bcd60e51b8152600401610b0f906134eb565b805f80600160401b8316156126c857505f905080836126a563ffffffff8516600160401b61307e565b146126c35760405163071389e960e01b815260040160405180910390fd5b612719565b602084901c91506126da826001613650565b9050836126fb63ffffffff851667ffffffff00000000602086901b1661307e565b146127195760405163071389e960e01b815260040160405180910390fd5b9193909250565b6068545f90610100900463ffffffff16158015612743575063ffffffff82166001145b15612755575063ffffffff821661277c565b612769600160201b63ffffffff8416613067565b6127799063ffffffff851661307e565b90505b600881901c5f8181526069602052604081208054600160ff861690811b91821892839055929091908183169003610dc957604051630c8d9eab60e31b815260040160405180910390fd5b6060610c3983835f845f5f856001600160a01b031684866040516127ea91906130d2565b5f6040518083038185875af1925050503d805f8114612824576040519150601f19603f3d011682016040523d82523d5f602084013e612829565b606091505b5091509150612839868383612843565b9695505050505050565b6060826128585761285382612896565b610c39565b815115801561286f57506001600160a01b0384163b155b1561288f5783604051639996b31560e01b8152600401610b0f9190612923565b5080610c39565b8051156128a65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b803563ffffffff811681146128d5575f5ffd5b919050565b6001600160a01b03811681146128bf575f5ffd5b5f5f604083850312156128ff575f5ffd5b612908836128c2565b91506020830135612918816128da565b809150509250929050565b6001600160a01b0391909116815260200190565b80151581146128bf575f5ffd5b5f5f83601f840112612954575f5ffd5b5081356001600160401b0381111561296a575f5ffd5b602083019150836020828501011115612981575f5ffd5b9250929050565b5f5f5f5f5f6080868803121561299c575f5ffd5b6129a5866128c2565b945060208601356129b5816128da565b935060408601356129c581612937565b925060608601356001600160401b038111156129df575f5ffd5b6129eb88828901612944565b969995985093965092949392505050565b5f5b83811015612a165781810151838201526020016129fe565b50505f910152565b5f8151808452612a358160208601602086016129fc565b601f01601f19169290920160200192915050565b602081525f610c396020830184612a1e565b5f60208284031215612a6b575f5ffd5b8135610c39816128da565b60ff811681146128bf575f5ffd5b5f5f5f5f5f5f5f60e0888a031215612a9a575f5ffd5b8735612aa581612a76565b9650612ab3602089016128c2565b95506040880135612ac3816128da565b9450612ad1606089016128c2565b93506080880135612ae1816128da565b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215612b0e575f5ffd5b5035919050565b806104008101831015610888575f5ffd5b5f5f5f6104408486031215612b39575f5ffd5b83359250612b4a8560208601612b15565b9150612b5961042085016128c2565b90509250925092565b5f5f5f5f5f5f60a08789031215612b77575f5ffd5b612b80876128c2565b95506020870135612b90816128da565b9450604087013593506060870135612ba781612937565b925060808701356001600160401b03811115612bc1575f5ffd5b612bcd89828a01612944565b979a9699509497509295939492505050565b5f5f60408385031215612bf0575f5ffd5b612bf9836128c2565b9150612c07602084016128c2565b90509250929050565b5f5f5f5f5f5f5f5f5f5f5f5f6109208d8f031215612c2c575f5ffd5b612c368e8e612b15565b9b50612c468e6104008f01612b15565b9a506108008d013599506108208d013598506108408d01359750612c6d6108608e016128c2565b9650612c7d6108808e01356128da565b6108808d01359550612c926108a08e016128c2565b94506108c08d0135612ca3816128da565b93506108e08d013592506001600160401b036109008e01351115612cc5575f5ffd5b612cd68e6109008f01358f01612944565b81935080925050509295989b509295989b509295989b565b5f5f5f5f5f5f5f60c0888a031215612d04575f5ffd5b612d0d886128c2565b96506020880135612d1d816128da565b9550604088013594506060880135612d34816128da565b93506080880135612d4481612937565b925060a08801356001600160401b03811115612d5e575f5ffd5b612d6a8a828b01612944565b989b979a50959850939692959293505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612db957612db9612d7d565b604052919050565b5f6001600160401b03821115612dd957612dd9612d7d565b50601f01601f191660200190565b5f5f5f5f5f5f60c08789031215612dfc575f5ffd5b612e05876128c2565b95506020870135612e15816128da565b9450612e23604088016128c2565b93506060870135612e33816128da565b92506080870135612e43816128da565b915060a08701356001600160401b03811115612e5d575f5ffd5b8701601f81018913612e6d575f5ffd5b8035612e80612e7b82612dc1565b612d91565b8181528a6020838501011115612e94575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b5f5f5f5f6104608587031215612eca575f5ffd5b84359350612edb8660208701612b15565b9250612eea61042086016128c2565b939692955092936104400135925050565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b600181811c90821680612f3957607f821691505b602082108103612f5757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0392831681529116602082015260400190565b5f612fe6612e7b84612dc1565b9050828152838383011115612ff9575f5ffd5b610c398360208301846129fc565b5f60208284031215613017575f5ffd5b81516001600160401b0381111561302c575f5ffd5b8201601f8101841361303c575f5ffd5b61304b84825160208401612fd9565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761088857610888613053565b8082018082111561088857610888613053565b818382375f9101908152919050565b94855263ffffffff9390931660208501526001600160a01b039182166040850152166060830152608082015260a00190565b5f82516130e38184602087016129fc565b9190910192915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b63ffffffff861681526001600160a01b038581166020830152841660408201526080606082018190525f9061314d90830184866130ed565b979650505050505050565b5f60208284031215613168575f5ffd5b5051919050565b8181038181111561088857610888613053565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015290871660608301528516608082015260a0810184905261010060c082018190525f906131d390830185612a1e565b905063ffffffff831660e08301529998505050505050505050565b6001600160a01b038516815263ffffffff841660208201526060604082018190525f9061283990830184866130ed565b601f8211156121a857805f5260205f20601f840160051c810160208510156132435750805b601f840160051c820191505b818110156108f7575f815560010161324f565b81516001600160401b0381111561327b5761327b612d7d565b61328f816132898454612f25565b8461321e565b6020601f8211600181146132c1575f83156132aa5750848201515b5f19600385901b1c1916600184901b1784556108f7565b5f84815260208120601f198516915b828110156132f057878501518255602094850194600190920191016132d0565b508482101561330d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60ff8a16815263ffffffff89811660208301526001600160a01b03898116604084015290881660608301528616608082015260a0810185905261010060c082018190525f9061336e90830185876130ed565b905063ffffffff831660e08301529a9950505050505050505050565b5f6020828403121561339a575f5ffd5b8151610c39816128da565b6001600160a01b03929092168252602082015260400190565b5f82601f8301126133cd575f5ffd5b610c3983835160208501612fd9565b5f5f5f606084860312156133ee575f5ffd5b83516001600160401b03811115613403575f5ffd5b61340f868287016133be565b93505060208401516001600160401b0381111561342a575f5ffd5b613436868287016133be565b925050604084015161344781612a76565b809150509250925092565b606081525f6134646060830186612a1e565b82810360208401526134768186612a1e565b91505060ff83166040830152949350505050565b6001600160a01b03861681526080602082018190525f906134ae90830186886130ed565b6001600160a01b03948516604084015292909316606090910152949350505050565b5f602082840312156134e0575f5ffd5b8151610c3981612937565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001815b60018411156135715780850481111561355557613555613053565b600184161561356357908102905b60019390931c92800261353a565b935093915050565b5f8261358757506001610888565b8161359357505f610888565b81600181146135a957600281146135b3576135cf565b6001915050610888565b60ff8411156135c4576135c4613053565b50506001821b610888565b5060208310610133831016604e8410600b84101617156135f2575081810a610888565b6135fe5f198484613536565b805f190482111561361157613611613053565b029392505050565b5f610c398383613579565b5f6001820161363557613635613053565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b63ffffffff81811683821601908111156108885761088861305356fea264697066735822122055b0fc70c6dc6b42ad4397c51786a546257c97e0ca23f102f8e7a04ac9b015de64736f6c634300081c00336080604052348015600e575f5ffd5b50610fb38061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063c514f24e1461002d575b5f5ffd5b61003561004b565b604051610042919061006a565b60405180910390f35b60405180610f000160405280610ec881526020016100b6610ec8913981565b602081525f82518060208401525f5b818110156100965760208186018101516040868401015201610079565b505f604082850101526040601f19601f8301168401019150509291505056fe60806040819052631d97f74d60e11b81523390633b2fee9a90608490602090600481865afa158015610033573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100579190610433565b604080515f80825260208201909252905061007382825f6100e2565b50506100dd336001600160a01b03166338b8fbbb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d89190610433565b61010d565b6104c8565b6100eb8361017a565b5f825111806100f75750805b156101085761010683836101b9565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61014c5f516020610e815f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1610177816101e5565b50565b61018381610280565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606101de8383604051806060016040528060278152602001610ea160279139610314565b9392505050565b6001600160a01b03811661024f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f516020610e815f395f51905f525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6102ed5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610246565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61025f565b60605f5f856001600160a01b031685604051610330919061047b565b5f60405180830381855af49150503d805f8114610368576040519150601f19603f3d011682016040523d82523d5f602084013e61036d565b606091505b50909250905061037f86838387610389565b9695505050505050565b606083156103f75782515f036103f0576001600160a01b0385163b6103f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610246565b5081610401565b6104018383610409565b949350505050565b8151156104195781518083602001fd5b8060405162461bcd60e51b81526004016102469190610496565b5f60208284031215610443575f5ffd5b81516001600160a01b03811681146101de575f5ffd5b5f5b8381101561047357818101518382015260200161045b565b50505f910152565b5f825161048c818460208701610459565b9190910192915050565b602081525f82518060208401526104b4816040850160208701610459565b601f01601f19169190910160400192915050565b6109ac806104d55f395ff3fe60806040526004361061005d575f3560e01c80635c60da1b116100425780635c60da1b146100a65780638f283970146100e3578063f851a440146101025761006c565b80633659cfe6146100745780634f1ef286146100935761006c565b3661006c5761006a610116565b005b61006a610116565b34801561007f575f5ffd5b5061006a61008e366004610854565b610130565b61006a6100a136600461086d565b610178565b3480156100b1575f5ffd5b506100ba6101eb565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ee575f5ffd5b5061006a6100fd366004610854565b610228565b34801561010d575f5ffd5b506100ba610255565b61011e610282565b61012e610129610359565b610362565b565b610138610380565b73ffffffffffffffffffffffffffffffffffffffff1633036101705761016d8160405180602001604052805f8152505f6103bf565b50565b61016d610116565b610180610380565b73ffffffffffffffffffffffffffffffffffffffff1633036101e3576101de8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250600192506103bf915050565b505050565b6101de610116565b5f6101f4610380565b73ffffffffffffffffffffffffffffffffffffffff16330361021d57610218610359565b905090565b610225610116565b90565b610230610380565b73ffffffffffffffffffffffffffffffffffffffff1633036101705761016d816103e9565b5f61025e610380565b73ffffffffffffffffffffffffffffffffffffffff16330361021d57610218610380565b61028a610380565b73ffffffffffffffffffffffffffffffffffffffff16330361012e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b5f61021861044a565b365f5f375f5f365f845af43d5f5f3e80801561037c573d5ff35b3d5ffd5b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6103c883610471565b5f825111806103d45750805b156101de576103e383836104bd565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610412610380565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161016d816104e9565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6103a3565b61047a816105f5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606104e28383604051806060016040528060278152602001610979602791396106c0565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811661058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610350565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b73ffffffffffffffffffffffffffffffffffffffff81163b610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610350565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105af565b60605f5f8573ffffffffffffffffffffffffffffffffffffffff16856040516106e9919061090d565b5f60405180830381855af49150503d805f8114610721576040519150601f19603f3d011682016040523d82523d5f602084013e610726565b606091505b509150915061073786838387610741565b9695505050505050565b606083156107d65782515f036107cf5773ffffffffffffffffffffffffffffffffffffffff85163b6107cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610350565b50816107e0565b6107e083836107e8565b949350505050565b8151156107f85781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103509190610928565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f575f5ffd5b919050565b5f60208284031215610864575f5ffd5b6104e28261082c565b5f5f5f6040848603121561087f575f5ffd5b6108888461082c565b9250602084013567ffffffffffffffff8111156108a3575f5ffd5b8401601f810186136108b3575f5ffd5b803567ffffffffffffffff8111156108c9575f5ffd5b8660208284010111156108da575f5ffd5b939660209190910195509293505050565b5f5b838110156109055781810151838201526020016108ed565b50505f910152565b5f825161091e8184602087016108eb565b9190910192915050565b602081525f82518060208401526109468160408501602087016108eb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300081c000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d7847fa500b7c717aa6a7e73128e0f74956c8497543c956e303def2d68265f2564736f6c634300081c00336080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6114c2806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106100e8575f3560e01c806370a082311161008f57806370a08231146101a05780637ecebe00146101b357806384b0196e146101c657806395d89b41146101e15780639dc29fac146101e9578063a3c573eb146101fc578063a9059cbb14610211578063d505accf14610224578063dd62ed3e14610237575f5ffd5b806306fdde03146100ec578063095ea7b31461010a5780631624f6c61461012d57806318160ddd1461014257806323b872dd14610158578063313ce5671461016b5780633644e5151461018557806340c10f191461018d575b5f5ffd5b6100f461024a565b6040516101019190610ff3565b60405180910390f35b61011d610118366004611027565b6102e8565b6040519015158152602001610101565b61014061013b3660046110fc565b610301565b005b61014a61043e565b604051908152602001610101565b61011d61016636600461116e565b610452565b610173610475565b60405160ff9091168152602001610101565b61014a610489565b61014061019b366004611027565b610497565b61014a6101ae3660046111a8565b6104e1565b61014a6101c13660046111a8565b61050a565b6101ce610514565b60405161010197969594939291906111c1565b6100f46105bd565b6101406101f7366004611027565b6105d9565b61020461061e565b6040516101019190611257565b61011d61021f366004611027565b61063d565b61014061023236600461126b565b61064a565b61014a6102453660046112d1565b61079f565b60605f6102556107d9565b905080600301805461026690611302565b80601f016020809104026020016040519081016040528092919081815260200182805461029290611302565b80156102dd5780601f106102b4576101008083540402835291602001916102dd565b820191905f5260205f20905b8154815290600101906020018083116102c057829003601f168201915b505050505091505090565b5f336102f58185856107fd565b60019150505b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156103455750825b90505f826001600160401b031660011480156103605750303b155b90508115801561036e575080155b1561038c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156103b657845460ff60401b1916600160401b1785555b6103c0888861080a565b6103c988610820565b5f6103d261084e565b805433610100026001600160a81b031990911660ff8a161717905550831561043457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f5f6104486107d9565b6002015492915050565b5f3361045f858285610872565b61046a8585856108c2565b506001949350505050565b5f5f61047f61084e565b5460ff1692915050565b5f61049261091f565b905090565b5f6104a061084e565b805490915061010090046001600160a01b031633146104d2576040516338da3b1560e01b815260040160405180910390fd5b6104dc8383610928565b505050565b5f5f6104eb6107d9565b6001600160a01b039093165f9081526020939093525050604090205490565b5f6102fb8261095c565b5f6060805f5f5f60605f610526610966565b805490915015801561053a57506001810154155b6105835760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61058b61098a565b6105936109a6565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b60605f6105c86107d9565b905080600401805461026690611302565b5f6105e261084e565b805490915061010090046001600160a01b03163314610614576040516338da3b1560e01b815260040160405180910390fd5b6104dc83836109b1565b5f5f61062861084e565b5461010090046001600160a01b031692915050565b5f336102f58185856108c2565b8342111561066e5760405163313c898160e11b81526004810185905260240161057a565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106d88c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f610732826109e5565b90505f61074182878787610a11565b9050896001600160a01b0316816001600160a01b031614610788576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161057a565b6107938a8a8a6107fd565b50505050505050505050565b5f5f6107a96107d9565b6001600160a01b039485165f90815260019190910160209081526040808320959096168252939093525050205490565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0090565b6104dc8383836001610a3d565b610812610b1e565b61081c8282610b69565b5050565b610828610b1e565b61084b81604051806040016040528060018152602001603160f81b815250610b99565b50565b7f863b064fe9383d75d38f584f64f1aaba4520e9ebc98515fa15bdeae8c4274d0090565b5f61087d848461079f565b90505f1981146108bc57818110156108ae57828183604051637dc7a0d960e11b815260040161057a9392919061133a565b6108bc84848484035f610a3d565b50505050565b6001600160a01b0383166108eb575f604051634b637e8f60e11b815260040161057a9190611257565b6001600160a01b038216610914575f60405163ec442f0560e01b815260040161057a9190611257565b6104dc838383610bd8565b5f610492610cfb565b6001600160a01b038216610951575f60405163ec442f0560e01b815260040161057a9190611257565b61081c5f8383610bd8565b5f6102fb82610d6e565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60605f610995610966565b905080600201805461026690611302565b60605f610255610966565b6001600160a01b0382166109da575f604051634b637e8f60e11b815260040161057a9190611257565b61081c825f83610bd8565b5f6102fb6109f161091f565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f610a2188888888610d96565b925092509250610a318282610e54565b50909695505050505050565b5f610a466107d9565b90506001600160a01b038516610a71575f60405163e602df0560e01b815260040161057a9190611257565b6001600160a01b038416610a9a575f604051634a1406b160e11b815260040161057a9190611257565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610b1757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b0e91815260200190565b60405180910390a35b5050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b6757604051631afcd79f60e31b815260040160405180910390fd5b565b610b71610b1e565b5f610b7a6107d9565b905060038101610b8a848261139f565b50600481016108bc838261139f565b610ba1610b1e565b5f610baa610966565b905060028101610bba848261139f565b5060038101610bc9838261139f565b505f8082556001909101555050565b5f610be16107d9565b90506001600160a01b038416610c0f5781816002015f828254610c049190611459565b90915550610c6c9050565b6001600160a01b0384165f9081526020829052604090205482811015610c4e5784818460405163391434e360e21b815260040161057a9392919061133a565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610c8a576002810180548390039055610ca8565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ced91815260200190565b60405180910390a350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d25610f0c565b610d2d610f71565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006104eb565b5f80806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03841115610dc557505f91506003905082610e4a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e16573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610e4157505f925060019150829050610e4a565b92505f91508190505b9450945094915050565b5f826003811115610e6757610e67611478565b03610e70575050565b6001826003811115610e8457610e84611478565b03610ea25760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610eb657610eb6611478565b03610ed75760405163fce698f760e01b81526004810182905260240161057a565b6003826003811115610eeb57610eeb611478565b0361081c576040516335e2f38360e21b81526004810182905260240161057a565b5f5f610f16610966565b90505f610f2161098a565b805190915015610f3957805160209091012092915050565b81548015610f48579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f610f7b610966565b90505f610f866109a6565b805190915015610f9e57805160209091012092915050565b60018201548015610f48579392505050565b5f81518084525f5b81811015610fd457602081850181015186830182015201610fb8565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6110056020830184610fb0565b9392505050565b80356001600160a01b0381168114611022575f5ffd5b919050565b5f5f60408385031215611038575f5ffd5b6110418361100c565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611072575f5ffd5b81356001600160401b0381111561108b5761108b61104f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156110b9576110b961104f565b6040528181528382016020018510156110d0575f5ffd5b816020850160208301375f918101602001919091529392505050565b803560ff81168114611022575f5ffd5b5f5f5f6060848603121561110e575f5ffd5b83356001600160401b03811115611123575f5ffd5b61112f86828701611063565b93505060208401356001600160401b0381111561114a575f5ffd5b61115686828701611063565b925050611165604085016110ec565b90509250925092565b5f5f5f60608486031215611180575f5ffd5b6111898461100c565b92506111976020850161100c565b929592945050506040919091013590565b5f602082840312156111b8575f5ffd5b6110058261100c565b60ff60f81b8816815260e060208201525f6111df60e0830189610fb0565b82810360408401526111f18189610fb0565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015611246578351835260209384019390920191600101611228565b50909b9a5050505050505050505050565b6001600160a01b0391909116815260200190565b5f5f5f5f5f5f5f60e0888a031215611281575f5ffd5b61128a8861100c565b96506112986020890161100c565b955060408801359450606088013593506112b4608089016110ec565b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156112e2575f5ffd5b6112eb8361100c565b91506112f96020840161100c565b90509250929050565b600181811c9082168061131657607f821691505b60208210810361133457634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b039390931683526020830191909152604082015260600190565b601f8211156104dc57805f5260205f20601f840160051c810160208510156113805750805b601f840160051c820191505b81811015610b17575f815560010161138c565b81516001600160401b038111156113b8576113b861104f565b6113cc816113c68454611302565b8461135b565b6020601f8211600181146113fe575f83156113e75750848201515b5f19600385901b1c1916600184901b178455610b17565b5f84815260208120601f198516915b8281101561142d578785015182556020948501946001909201910161140d565b508482101561144a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156102fb57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220734889424b5f04b57ae9c0f182a620f22fa0c90954fa75a81eadce83f886d8bc64736f6c634300081c00336080604052348015600e575f5ffd5b50610cc28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c8063737ce34114610059578063a28fa4a314610082578063be3dcf62146100a5578063c00f14ab146100ca578063cf825e55146100dd575b5f5ffd5b61006c6100673660046108ac565b6100f0565b604051610079919061091b565b60405180910390f35b61009561009036600461092d565b6101b5565b6040519015158152602001610079565b6100b86100b33660046108ac565b610559565b60405160ff9091168152602001610079565b61006c6100d83660046108ac565b61060d565b61006c6100eb3660046108ac565b610652565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161013691906109d0565b5f60405180830381855afa9150503d805f811461016e576040519150601f19603f3d011682016040523d82523d5f602084013e610173565b606091505b5091509150816101a457604051806040016040528060098152602001681393d7d4d6535093d360ba1b8152506101ad565b6101ad81610704565b949350505050565b5f806101c460048287896109eb565b6101cd91610a12565b9050632afa533160e01b6001600160e01b031982160161037c575f5f5f5f5f5f5f8c8c6004908092610201939291906109eb565b81019061020e9190610a58565b96509650965096509650965096508a6001600160a01b0316876001600160a01b03161461024e5760405163912ecce760e01b815260040160405180910390fd5b896001600160a01b0316866001600160a01b0316146102805760405163750643af60e01b815260040160405180910390fd5b5f8e6001600160a01b031663d505accf60e01b898989898989896040516024016102ec97969594939291906001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161032a91906109d0565b5f604051808303815f865af19150503d805f8114610363576040519150601f19603f3d011682016040523d82523d5f602084013e610368565b606091505b50909a506105509950505050505050505050565b631c0d143d60e21b6001600160e01b0319821601610537575f5f5f5f5f5f5f5f8d8d60049080926103af939291906109eb565b8101906103bc9190610ac4565b975097509750975097509750975097508b6001600160a01b0316886001600160a01b0316146103fe5760405163912ecce760e01b815260040160405180910390fd5b8a6001600160a01b0316876001600160a01b0316146104305760405163750643af60e01b815260040160405180910390fd5b5f8f6001600160a01b0316638fcbaf0c60e01b8a8a8a8a8a8a8a8a6040516024016104a69897969594939291906001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516104e491906109d0565b5f604051808303815f865af19150503d805f811461051d576040519150601f19603f3d011682016040523d82523d5f602084013e610522565b606091505b50909b506105509a5050505050505050505050565b604051637141605d60e11b815260040160405180910390fd5b95945050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b0386169161059e91906109d0565b5f60405180830381855afa9150503d805f81146105d6576040519150601f19603f3d011682016040523d82523d5f602084013e6105db565b606091505b50915091508180156105ee575080516020145b6105f95760126101ad565b808060200190518101906101ad9190610b46565b606061061882610652565b610621836100f0565b61062a84610559565b60405160200161063c93929190610b61565b6040516020818303038152906040529050919050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161069891906109d0565b5f60405180830381855afa9150503d805f81146106d0576040519150601f19603f3d011682016040523d82523d5f602084013e6106d5565b606091505b5091509150816101a457604051806040016040528060078152602001664e4f5f4e414d4560c81b8152506101ad565b6060604082511061072957818060200190518101906107239190610bad565b92915050565b8151602003610857575f5b602081108015610763575082818151811061075157610751610c54565b01602001516001600160f81b03191615155b1561077a578061077281610c68565b915050610734565b805f036107b15750506040805180820190915260128152714e4f545f56414c49445f454e434f44494e4760701b6020820152919050565b5f8167ffffffffffffffff8111156107cb576107cb610b99565b6040519080825280601f01601f1916602001820160405280156107f5576020820181803683370190505b5090505f5b8281101561084f5784818151811061081457610814610c54565b602001015160f81c60f81b82828151811061083157610831610c54565b60200101906001600160f81b03191690815f1a9053506001016107fa565b509392505050565b50506040805180820190915260128152714e4f545f56414c49445f454e434f44494e4760701b602082015290565b919050565b6001600160a01b038116811461089e575f5ffd5b50565b80356108858161088a565b5f602082840312156108bc575f5ffd5b81356108c78161088a565b9392505050565b5f5b838110156108e85781810151838201526020016108d0565b50505f910152565b5f81518084526109078160208601602086016108ce565b601f01601f19169290920160200192915050565b602081525f6108c760208301846108f0565b5f5f5f5f5f60808688031215610941575f5ffd5b853561094c8161088a565b9450602086013567ffffffffffffffff811115610967575f5ffd5b8601601f81018813610977575f5ffd5b803567ffffffffffffffff81111561098d575f5ffd5b88602082840101111561099e575f5ffd5b6020919091019450925060408601356109b68161088a565b91506109c4606087016108a1565b90509295509295909350565b5f82516109e18184602087016108ce565b9190910192915050565b5f5f858511156109f9575f5ffd5b83861115610a05575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610a43576001600160e01b0319600485900360031b81901b82161691505b5092915050565b60ff8116811461089e575f5ffd5b5f5f5f5f5f5f5f60e0888a031215610a6e575f5ffd5b8735610a798161088a565b96506020880135610a898161088a565b955060408801359450606088013593506080880135610aa781610a4a565b9699959850939692959460a0840135945060c09093013592915050565b5f5f5f5f5f5f5f5f610100898b031215610adc575f5ffd5b8835610ae78161088a565b97506020890135610af78161088a565b9650604089013595506060890135945060808901358015158114610b19575f5ffd5b935060a0890135610b2981610a4a565b979a969950949793969295929450505060c08201359160e0013590565b5f60208284031215610b56575f5ffd5b81516108c781610a4a565b606081525f610b7360608301866108f0565b8281036020840152610b8581866108f0565b91505060ff83166040830152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610bbd575f5ffd5b815167ffffffffffffffff811115610bd3575f5ffd5b8201601f81018413610be3575f5ffd5b805167ffffffffffffffff811115610bfd57610bfd610b99565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610c2c57610c2c610b99565b604052818152828201602001861015610c43575f5ffd5b6105508260208301602086016108ce565b634e487b7160e01b5f52603260045260245ffd5b5f60018201610c8557634e487b7160e01b5f52601160045260245ffd5b506001019056fea26469706673582212206db9941992a6c13c8af2a735afe7360f7dfde05688ae4632f7209a0b5512f84d64736f6c634300081c0033",
}

// AgglayerbridgeABI is the input ABI used to generate the binding from.
// Deprecated: Use AgglayerbridgeMetaData.ABI instead.
var AgglayerbridgeABI = AgglayerbridgeMetaData.ABI

// AgglayerbridgeBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use AgglayerbridgeMetaData.Bin instead.
var AgglayerbridgeBin = AgglayerbridgeMetaData.Bin

// DeployAgglayerbridge deploys a new Ethereum contract, binding an instance of Agglayerbridge to it.
func DeployAgglayerbridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Agglayerbridge, error) {
	parsed, err := AgglayerbridgeMetaData.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(AgglayerbridgeBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Agglayerbridge{AgglayerbridgeCaller: AgglayerbridgeCaller{contract: contract}, AgglayerbridgeTransactor: AgglayerbridgeTransactor{contract: contract}, AgglayerbridgeFilterer: AgglayerbridgeFilterer{contract: contract}}, nil
}

// Agglayerbridge is an auto generated Go binding around an Ethereum contract.
type Agglayerbridge struct {
	AgglayerbridgeCaller     // Read-only binding to the contract
	AgglayerbridgeTransactor // Write-only binding to the contract
	AgglayerbridgeFilterer   // Log filterer for contract events
}

// AgglayerbridgeCaller is an auto generated read-only Go binding around an Ethereum contract.
type AgglayerbridgeCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// AgglayerbridgeTransactor is an auto generated write-only Go binding around an Ethereum contract.
type AgglayerbridgeTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// AgglayerbridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type AgglayerbridgeFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// AgglayerbridgeSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type AgglayerbridgeSession struct {
	Contract     *Agglayerbridge   // 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
}

// AgglayerbridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type AgglayerbridgeCallerSession struct {
	Contract *AgglayerbridgeCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts         // Call options to use throughout this session
}

// AgglayerbridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type AgglayerbridgeTransactorSession struct {
	Contract     *AgglayerbridgeTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
}

// AgglayerbridgeRaw is an auto generated low-level Go binding around an Ethereum contract.
type AgglayerbridgeRaw struct {
	Contract *Agglayerbridge // Generic contract binding to access the raw methods on
}

// AgglayerbridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type AgglayerbridgeCallerRaw struct {
	Contract *AgglayerbridgeCaller // Generic read-only contract binding to access the raw methods on
}

// AgglayerbridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type AgglayerbridgeTransactorRaw struct {
	Contract *AgglayerbridgeTransactor // Generic write-only contract binding to access the raw methods on
}

// NewAgglayerbridge creates a new instance of Agglayerbridge, bound to a specific deployed contract.
func NewAgglayerbridge(address common.Address, backend bind.ContractBackend) (*Agglayerbridge, error) {
	contract, err := bindAgglayerbridge(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Agglayerbridge{AgglayerbridgeCaller: AgglayerbridgeCaller{contract: contract}, AgglayerbridgeTransactor: AgglayerbridgeTransactor{contract: contract}, AgglayerbridgeFilterer: AgglayerbridgeFilterer{contract: contract}}, nil
}

// NewAgglayerbridgeCaller creates a new read-only instance of Agglayerbridge, bound to a specific deployed contract.
func NewAgglayerbridgeCaller(address common.Address, caller bind.ContractCaller) (*AgglayerbridgeCaller, error) {
	contract, err := bindAgglayerbridge(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeCaller{contract: contract}, nil
}

// NewAgglayerbridgeTransactor creates a new write-only instance of Agglayerbridge, bound to a specific deployed contract.
func NewAgglayerbridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*AgglayerbridgeTransactor, error) {
	contract, err := bindAgglayerbridge(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeTransactor{contract: contract}, nil
}

// NewAgglayerbridgeFilterer creates a new log filterer instance of Agglayerbridge, bound to a specific deployed contract.
func NewAgglayerbridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*AgglayerbridgeFilterer, error) {
	contract, err := bindAgglayerbridge(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeFilterer{contract: contract}, nil
}

// bindAgglayerbridge binds a generic wrapper to an already deployed contract.
func bindAgglayerbridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := AgglayerbridgeMetaData.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 (_Agglayerbridge *AgglayerbridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Agglayerbridge.Contract.AgglayerbridgeCaller.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 (_Agglayerbridge *AgglayerbridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.AgglayerbridgeTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Agglayerbridge *AgglayerbridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.AgglayerbridgeTransactor.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 (_Agglayerbridge *AgglayerbridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Agglayerbridge.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 (_Agglayerbridge *AgglayerbridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Agglayerbridge *AgglayerbridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.contract.Transact(opts, method, params...)
}

// BRIDGEVERSION is a free data retrieval call binding the contract method 0x65d6f654.
//
// Solidity: function BRIDGE_VERSION() view returns(string)
func (_Agglayerbridge *AgglayerbridgeCaller) BRIDGEVERSION(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "BRIDGE_VERSION")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// BRIDGEVERSION is a free data retrieval call binding the contract method 0x65d6f654.
//
// Solidity: function BRIDGE_VERSION() view returns(string)
func (_Agglayerbridge *AgglayerbridgeSession) BRIDGEVERSION() (string, error) {
	return _Agglayerbridge.Contract.BRIDGEVERSION(&_Agglayerbridge.CallOpts)
}

// BRIDGEVERSION is a free data retrieval call binding the contract method 0x65d6f654.
//
// Solidity: function BRIDGE_VERSION() view returns(string)
func (_Agglayerbridge *AgglayerbridgeCallerSession) BRIDGEVERSION() (string, error) {
	return _Agglayerbridge.Contract.BRIDGEVERSION(&_Agglayerbridge.CallOpts)
}

// INITBYTECODETRANSPARENTPROXY is a free data retrieval call binding the contract method 0xc514f24e.
//
// Solidity: function INIT_BYTECODE_TRANSPARENT_PROXY() view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeCaller) INITBYTECODETRANSPARENTPROXY(opts *bind.CallOpts) ([]byte, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "INIT_BYTECODE_TRANSPARENT_PROXY")

	if err != nil {
		return *new([]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte)

	return out0, err

}

// INITBYTECODETRANSPARENTPROXY is a free data retrieval call binding the contract method 0xc514f24e.
//
// Solidity: function INIT_BYTECODE_TRANSPARENT_PROXY() view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeSession) INITBYTECODETRANSPARENTPROXY() ([]byte, error) {
	return _Agglayerbridge.Contract.INITBYTECODETRANSPARENTPROXY(&_Agglayerbridge.CallOpts)
}

// INITBYTECODETRANSPARENTPROXY is a free data retrieval call binding the contract method 0xc514f24e.
//
// Solidity: function INIT_BYTECODE_TRANSPARENT_PROXY() view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeCallerSession) INITBYTECODETRANSPARENTPROXY() ([]byte, error) {
	return _Agglayerbridge.Contract.INITBYTECODETRANSPARENTPROXY(&_Agglayerbridge.CallOpts)
}

// WETHToken is a free data retrieval call binding the contract method 0x4b2f336d.
//
// Solidity: function WETHToken() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) WETHToken(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "WETHToken")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// WETHToken is a free data retrieval call binding the contract method 0x4b2f336d.
//
// Solidity: function WETHToken() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) WETHToken() (common.Address, error) {
	return _Agglayerbridge.Contract.WETHToken(&_Agglayerbridge.CallOpts)
}

// WETHToken is a free data retrieval call binding the contract method 0x4b2f336d.
//
// Solidity: function WETHToken() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) WETHToken() (common.Address, error) {
	return _Agglayerbridge.Contract.WETHToken(&_Agglayerbridge.CallOpts)
}

// BridgeLib is a free data retrieval call binding the contract method 0x6f0bc3da.
//
// Solidity: function bridgeLib() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) BridgeLib(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "bridgeLib")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// BridgeLib is a free data retrieval call binding the contract method 0x6f0bc3da.
//
// Solidity: function bridgeLib() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) BridgeLib() (common.Address, error) {
	return _Agglayerbridge.Contract.BridgeLib(&_Agglayerbridge.CallOpts)
}

// BridgeLib is a free data retrieval call binding the contract method 0x6f0bc3da.
//
// Solidity: function bridgeLib() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) BridgeLib() (common.Address, error) {
	return _Agglayerbridge.Contract.BridgeLib(&_Agglayerbridge.CallOpts)
}

// CalculateRoot is a free data retrieval call binding the contract method 0x83f24403.
//
// Solidity: function calculateRoot(bytes32 leafHash, bytes32[32] smtProof, uint32 index) pure returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeCaller) CalculateRoot(opts *bind.CallOpts, leafHash [32]byte, smtProof [32][32]byte, index uint32) ([32]byte, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "calculateRoot", leafHash, smtProof, index)

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// CalculateRoot is a free data retrieval call binding the contract method 0x83f24403.
//
// Solidity: function calculateRoot(bytes32 leafHash, bytes32[32] smtProof, uint32 index) pure returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeSession) CalculateRoot(leafHash [32]byte, smtProof [32][32]byte, index uint32) ([32]byte, error) {
	return _Agglayerbridge.Contract.CalculateRoot(&_Agglayerbridge.CallOpts, leafHash, smtProof, index)
}

// CalculateRoot is a free data retrieval call binding the contract method 0x83f24403.
//
// Solidity: function calculateRoot(bytes32 leafHash, bytes32[32] smtProof, uint32 index) pure returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeCallerSession) CalculateRoot(leafHash [32]byte, smtProof [32][32]byte, index uint32) ([32]byte, error) {
	return _Agglayerbridge.Contract.CalculateRoot(&_Agglayerbridge.CallOpts, leafHash, smtProof, index)
}

// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b.
//
// Solidity: function claimedBitMap(uint256 ) view returns(uint256)
func (_Agglayerbridge *AgglayerbridgeCaller) ClaimedBitMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "claimedBitMap", arg0)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b.
//
// Solidity: function claimedBitMap(uint256 ) view returns(uint256)
func (_Agglayerbridge *AgglayerbridgeSession) ClaimedBitMap(arg0 *big.Int) (*big.Int, error) {
	return _Agglayerbridge.Contract.ClaimedBitMap(&_Agglayerbridge.CallOpts, arg0)
}

// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b.
//
// Solidity: function claimedBitMap(uint256 ) view returns(uint256)
func (_Agglayerbridge *AgglayerbridgeCallerSession) ClaimedBitMap(arg0 *big.Int) (*big.Int, error) {
	return _Agglayerbridge.Contract.ClaimedBitMap(&_Agglayerbridge.CallOpts, arg0)
}

// ComputeTokenProxyAddress is a free data retrieval call binding the contract method 0xf214e161.
//
// Solidity: function computeTokenProxyAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) ComputeTokenProxyAddress(opts *bind.CallOpts, originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "computeTokenProxyAddress", originNetwork, originTokenAddress)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// ComputeTokenProxyAddress is a free data retrieval call binding the contract method 0xf214e161.
//
// Solidity: function computeTokenProxyAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) ComputeTokenProxyAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	return _Agglayerbridge.Contract.ComputeTokenProxyAddress(&_Agglayerbridge.CallOpts, originNetwork, originTokenAddress)
}

// ComputeTokenProxyAddress is a free data retrieval call binding the contract method 0xf214e161.
//
// Solidity: function computeTokenProxyAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) ComputeTokenProxyAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	return _Agglayerbridge.Contract.ComputeTokenProxyAddress(&_Agglayerbridge.CallOpts, originNetwork, originTokenAddress)
}

// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5.
//
// Solidity: function depositCount() view returns(uint256)
func (_Agglayerbridge *AgglayerbridgeCaller) DepositCount(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "depositCount")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5.
//
// Solidity: function depositCount() view returns(uint256)
func (_Agglayerbridge *AgglayerbridgeSession) DepositCount() (*big.Int, error) {
	return _Agglayerbridge.Contract.DepositCount(&_Agglayerbridge.CallOpts)
}

// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5.
//
// Solidity: function depositCount() view returns(uint256)
func (_Agglayerbridge *AgglayerbridgeCallerSession) DepositCount() (*big.Int, error) {
	return _Agglayerbridge.Contract.DepositCount(&_Agglayerbridge.CallOpts)
}

// GasTokenAddress is a free data retrieval call binding the contract method 0x3c351e10.
//
// Solidity: function gasTokenAddress() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) GasTokenAddress(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "gasTokenAddress")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GasTokenAddress is a free data retrieval call binding the contract method 0x3c351e10.
//
// Solidity: function gasTokenAddress() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) GasTokenAddress() (common.Address, error) {
	return _Agglayerbridge.Contract.GasTokenAddress(&_Agglayerbridge.CallOpts)
}

// GasTokenAddress is a free data retrieval call binding the contract method 0x3c351e10.
//
// Solidity: function gasTokenAddress() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GasTokenAddress() (common.Address, error) {
	return _Agglayerbridge.Contract.GasTokenAddress(&_Agglayerbridge.CallOpts)
}

// GasTokenMetadata is a free data retrieval call binding the contract method 0x27aef4e8.
//
// Solidity: function gasTokenMetadata() view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeCaller) GasTokenMetadata(opts *bind.CallOpts) ([]byte, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "gasTokenMetadata")

	if err != nil {
		return *new([]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte)

	return out0, err

}

// GasTokenMetadata is a free data retrieval call binding the contract method 0x27aef4e8.
//
// Solidity: function gasTokenMetadata() view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeSession) GasTokenMetadata() ([]byte, error) {
	return _Agglayerbridge.Contract.GasTokenMetadata(&_Agglayerbridge.CallOpts)
}

// GasTokenMetadata is a free data retrieval call binding the contract method 0x27aef4e8.
//
// Solidity: function gasTokenMetadata() view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GasTokenMetadata() ([]byte, error) {
	return _Agglayerbridge.Contract.GasTokenMetadata(&_Agglayerbridge.CallOpts)
}

// GasTokenNetwork is a free data retrieval call binding the contract method 0x3cbc795b.
//
// Solidity: function gasTokenNetwork() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeCaller) GasTokenNetwork(opts *bind.CallOpts) (uint32, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "gasTokenNetwork")

	if err != nil {
		return *new(uint32), err
	}

	out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32)

	return out0, err

}

// GasTokenNetwork is a free data retrieval call binding the contract method 0x3cbc795b.
//
// Solidity: function gasTokenNetwork() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeSession) GasTokenNetwork() (uint32, error) {
	return _Agglayerbridge.Contract.GasTokenNetwork(&_Agglayerbridge.CallOpts)
}

// GasTokenNetwork is a free data retrieval call binding the contract method 0x3cbc795b.
//
// Solidity: function gasTokenNetwork() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GasTokenNetwork() (uint32, error) {
	return _Agglayerbridge.Contract.GasTokenNetwork(&_Agglayerbridge.CallOpts)
}

// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043.
//
// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeCaller) GetLeafValue(opts *bind.CallOpts, leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "getLeafValue", leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash)

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043.
//
// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeSession) GetLeafValue(leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) {
	return _Agglayerbridge.Contract.GetLeafValue(&_Agglayerbridge.CallOpts, leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash)
}

// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043.
//
// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GetLeafValue(leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) {
	return _Agglayerbridge.Contract.GetLeafValue(&_Agglayerbridge.CallOpts, leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash)
}

// GetProxiedTokensManager is a free data retrieval call binding the contract method 0x38b8fbbb.
//
// Solidity: function getProxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) GetProxiedTokensManager(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "getProxiedTokensManager")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetProxiedTokensManager is a free data retrieval call binding the contract method 0x38b8fbbb.
//
// Solidity: function getProxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) GetProxiedTokensManager() (common.Address, error) {
	return _Agglayerbridge.Contract.GetProxiedTokensManager(&_Agglayerbridge.CallOpts)
}

// GetProxiedTokensManager is a free data retrieval call binding the contract method 0x38b8fbbb.
//
// Solidity: function getProxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GetProxiedTokensManager() (common.Address, error) {
	return _Agglayerbridge.Contract.GetProxiedTokensManager(&_Agglayerbridge.CallOpts)
}

// GetRoot is a free data retrieval call binding the contract method 0x5ca1e165.
//
// Solidity: function getRoot() view returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeCaller) GetRoot(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "getRoot")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// GetRoot is a free data retrieval call binding the contract method 0x5ca1e165.
//
// Solidity: function getRoot() view returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeSession) GetRoot() ([32]byte, error) {
	return _Agglayerbridge.Contract.GetRoot(&_Agglayerbridge.CallOpts)
}

// GetRoot is a free data retrieval call binding the contract method 0x5ca1e165.
//
// Solidity: function getRoot() view returns(bytes32)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GetRoot() ([32]byte, error) {
	return _Agglayerbridge.Contract.GetRoot(&_Agglayerbridge.CallOpts)
}

// GetTokenMetadata is a free data retrieval call binding the contract method 0xc00f14ab.
//
// Solidity: function getTokenMetadata(address token) view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeCaller) GetTokenMetadata(opts *bind.CallOpts, token common.Address) ([]byte, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "getTokenMetadata", token)

	if err != nil {
		return *new([]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte)

	return out0, err

}

// GetTokenMetadata is a free data retrieval call binding the contract method 0xc00f14ab.
//
// Solidity: function getTokenMetadata(address token) view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeSession) GetTokenMetadata(token common.Address) ([]byte, error) {
	return _Agglayerbridge.Contract.GetTokenMetadata(&_Agglayerbridge.CallOpts, token)
}

// GetTokenMetadata is a free data retrieval call binding the contract method 0xc00f14ab.
//
// Solidity: function getTokenMetadata(address token) view returns(bytes)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GetTokenMetadata(token common.Address) ([]byte, error) {
	return _Agglayerbridge.Contract.GetTokenMetadata(&_Agglayerbridge.CallOpts, token)
}

// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c.
//
// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) GetTokenWrappedAddress(opts *bind.CallOpts, originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "getTokenWrappedAddress", originNetwork, originTokenAddress)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c.
//
// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) GetTokenWrappedAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	return _Agglayerbridge.Contract.GetTokenWrappedAddress(&_Agglayerbridge.CallOpts, originNetwork, originTokenAddress)
}

// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c.
//
// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GetTokenWrappedAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	return _Agglayerbridge.Contract.GetTokenWrappedAddress(&_Agglayerbridge.CallOpts, originNetwork, originTokenAddress)
}

// GetWrappedTokenBridgeImplementation is a free data retrieval call binding the contract method 0x3b2fee9a.
//
// Solidity: function getWrappedTokenBridgeImplementation() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) GetWrappedTokenBridgeImplementation(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "getWrappedTokenBridgeImplementation")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetWrappedTokenBridgeImplementation is a free data retrieval call binding the contract method 0x3b2fee9a.
//
// Solidity: function getWrappedTokenBridgeImplementation() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) GetWrappedTokenBridgeImplementation() (common.Address, error) {
	return _Agglayerbridge.Contract.GetWrappedTokenBridgeImplementation(&_Agglayerbridge.CallOpts)
}

// GetWrappedTokenBridgeImplementation is a free data retrieval call binding the contract method 0x3b2fee9a.
//
// Solidity: function getWrappedTokenBridgeImplementation() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GetWrappedTokenBridgeImplementation() (common.Address, error) {
	return _Agglayerbridge.Contract.GetWrappedTokenBridgeImplementation(&_Agglayerbridge.CallOpts)
}

// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca.
//
// Solidity: function globalExitRootManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) GlobalExitRootManager(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "globalExitRootManager")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca.
//
// Solidity: function globalExitRootManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) GlobalExitRootManager() (common.Address, error) {
	return _Agglayerbridge.Contract.GlobalExitRootManager(&_Agglayerbridge.CallOpts)
}

// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca.
//
// Solidity: function globalExitRootManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) GlobalExitRootManager() (common.Address, error) {
	return _Agglayerbridge.Contract.GlobalExitRootManager(&_Agglayerbridge.CallOpts)
}

// IsClaimed is a free data retrieval call binding the contract method 0xcc461632.
//
// Solidity: function isClaimed(uint32 leafIndex, uint32 sourceBridgeNetwork) view returns(bool)
func (_Agglayerbridge *AgglayerbridgeCaller) IsClaimed(opts *bind.CallOpts, leafIndex uint32, sourceBridgeNetwork uint32) (bool, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "isClaimed", leafIndex, sourceBridgeNetwork)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsClaimed is a free data retrieval call binding the contract method 0xcc461632.
//
// Solidity: function isClaimed(uint32 leafIndex, uint32 sourceBridgeNetwork) view returns(bool)
func (_Agglayerbridge *AgglayerbridgeSession) IsClaimed(leafIndex uint32, sourceBridgeNetwork uint32) (bool, error) {
	return _Agglayerbridge.Contract.IsClaimed(&_Agglayerbridge.CallOpts, leafIndex, sourceBridgeNetwork)
}

// IsClaimed is a free data retrieval call binding the contract method 0xcc461632.
//
// Solidity: function isClaimed(uint32 leafIndex, uint32 sourceBridgeNetwork) view returns(bool)
func (_Agglayerbridge *AgglayerbridgeCallerSession) IsClaimed(leafIndex uint32, sourceBridgeNetwork uint32) (bool, error) {
	return _Agglayerbridge.Contract.IsClaimed(&_Agglayerbridge.CallOpts, leafIndex, sourceBridgeNetwork)
}

// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96.
//
// Solidity: function isEmergencyState() view returns(bool)
func (_Agglayerbridge *AgglayerbridgeCaller) IsEmergencyState(opts *bind.CallOpts) (bool, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "isEmergencyState")

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96.
//
// Solidity: function isEmergencyState() view returns(bool)
func (_Agglayerbridge *AgglayerbridgeSession) IsEmergencyState() (bool, error) {
	return _Agglayerbridge.Contract.IsEmergencyState(&_Agglayerbridge.CallOpts)
}

// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96.
//
// Solidity: function isEmergencyState() view returns(bool)
func (_Agglayerbridge *AgglayerbridgeCallerSession) IsEmergencyState() (bool, error) {
	return _Agglayerbridge.Contract.IsEmergencyState(&_Agglayerbridge.CallOpts)
}

// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7.
//
// Solidity: function lastUpdatedDepositCount() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeCaller) LastUpdatedDepositCount(opts *bind.CallOpts) (uint32, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "lastUpdatedDepositCount")

	if err != nil {
		return *new(uint32), err
	}

	out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32)

	return out0, err

}

// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7.
//
// Solidity: function lastUpdatedDepositCount() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeSession) LastUpdatedDepositCount() (uint32, error) {
	return _Agglayerbridge.Contract.LastUpdatedDepositCount(&_Agglayerbridge.CallOpts)
}

// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7.
//
// Solidity: function lastUpdatedDepositCount() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeCallerSession) LastUpdatedDepositCount() (uint32, error) {
	return _Agglayerbridge.Contract.LastUpdatedDepositCount(&_Agglayerbridge.CallOpts)
}

// NetworkID is a free data retrieval call binding the contract method 0xbab161bf.
//
// Solidity: function networkID() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeCaller) NetworkID(opts *bind.CallOpts) (uint32, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "networkID")

	if err != nil {
		return *new(uint32), err
	}

	out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32)

	return out0, err

}

// NetworkID is a free data retrieval call binding the contract method 0xbab161bf.
//
// Solidity: function networkID() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeSession) NetworkID() (uint32, error) {
	return _Agglayerbridge.Contract.NetworkID(&_Agglayerbridge.CallOpts)
}

// NetworkID is a free data retrieval call binding the contract method 0xbab161bf.
//
// Solidity: function networkID() view returns(uint32)
func (_Agglayerbridge *AgglayerbridgeCallerSession) NetworkID() (uint32, error) {
	return _Agglayerbridge.Contract.NetworkID(&_Agglayerbridge.CallOpts)
}

// PendingProxiedTokensManager is a free data retrieval call binding the contract method 0xece93c6f.
//
// Solidity: function pendingProxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) PendingProxiedTokensManager(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "pendingProxiedTokensManager")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// PendingProxiedTokensManager is a free data retrieval call binding the contract method 0xece93c6f.
//
// Solidity: function pendingProxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) PendingProxiedTokensManager() (common.Address, error) {
	return _Agglayerbridge.Contract.PendingProxiedTokensManager(&_Agglayerbridge.CallOpts)
}

// PendingProxiedTokensManager is a free data retrieval call binding the contract method 0xece93c6f.
//
// Solidity: function pendingProxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) PendingProxiedTokensManager() (common.Address, error) {
	return _Agglayerbridge.Contract.PendingProxiedTokensManager(&_Agglayerbridge.CallOpts)
}

// PolygonRollupManager is a free data retrieval call binding the contract method 0x8ed7e3f2.
//
// Solidity: function polygonRollupManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) PolygonRollupManager(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "polygonRollupManager")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// PolygonRollupManager is a free data retrieval call binding the contract method 0x8ed7e3f2.
//
// Solidity: function polygonRollupManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) PolygonRollupManager() (common.Address, error) {
	return _Agglayerbridge.Contract.PolygonRollupManager(&_Agglayerbridge.CallOpts)
}

// PolygonRollupManager is a free data retrieval call binding the contract method 0x8ed7e3f2.
//
// Solidity: function polygonRollupManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) PolygonRollupManager() (common.Address, error) {
	return _Agglayerbridge.Contract.PolygonRollupManager(&_Agglayerbridge.CallOpts)
}

// ProxiedTokensManager is a free data retrieval call binding the contract method 0x6e4ecfed.
//
// Solidity: function proxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) ProxiedTokensManager(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "proxiedTokensManager")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// ProxiedTokensManager is a free data retrieval call binding the contract method 0x6e4ecfed.
//
// Solidity: function proxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) ProxiedTokensManager() (common.Address, error) {
	return _Agglayerbridge.Contract.ProxiedTokensManager(&_Agglayerbridge.CallOpts)
}

// ProxiedTokensManager is a free data retrieval call binding the contract method 0x6e4ecfed.
//
// Solidity: function proxiedTokensManager() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) ProxiedTokensManager() (common.Address, error) {
	return _Agglayerbridge.Contract.ProxiedTokensManager(&_Agglayerbridge.CallOpts)
}

// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174.
//
// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) TokenInfoToWrappedToken(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "tokenInfoToWrappedToken", arg0)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174.
//
// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) TokenInfoToWrappedToken(arg0 [32]byte) (common.Address, error) {
	return _Agglayerbridge.Contract.TokenInfoToWrappedToken(&_Agglayerbridge.CallOpts, arg0)
}

// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174.
//
// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) TokenInfoToWrappedToken(arg0 [32]byte) (common.Address, error) {
	return _Agglayerbridge.Contract.TokenInfoToWrappedToken(&_Agglayerbridge.CallOpts, arg0)
}

// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834.
//
// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool)
func (_Agglayerbridge *AgglayerbridgeCaller) VerifyMerkleProof(opts *bind.CallOpts, leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "verifyMerkleProof", leafHash, smtProof, index, root)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834.
//
// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool)
func (_Agglayerbridge *AgglayerbridgeSession) VerifyMerkleProof(leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) {
	return _Agglayerbridge.Contract.VerifyMerkleProof(&_Agglayerbridge.CallOpts, leafHash, smtProof, index, root)
}

// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834.
//
// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool)
func (_Agglayerbridge *AgglayerbridgeCallerSession) VerifyMerkleProof(leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) {
	return _Agglayerbridge.Contract.VerifyMerkleProof(&_Agglayerbridge.CallOpts, leafHash, smtProof, index, root)
}

// Version is a free data retrieval call binding the contract method 0x54fd4d50.
//
// Solidity: function version() pure returns(string)
func (_Agglayerbridge *AgglayerbridgeCaller) Version(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "version")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Version is a free data retrieval call binding the contract method 0x54fd4d50.
//
// Solidity: function version() pure returns(string)
func (_Agglayerbridge *AgglayerbridgeSession) Version() (string, error) {
	return _Agglayerbridge.Contract.Version(&_Agglayerbridge.CallOpts)
}

// Version is a free data retrieval call binding the contract method 0x54fd4d50.
//
// Solidity: function version() pure returns(string)
func (_Agglayerbridge *AgglayerbridgeCallerSession) Version() (string, error) {
	return _Agglayerbridge.Contract.Version(&_Agglayerbridge.CallOpts)
}

// WrappedTokenBytecodeStorer is a free data retrieval call binding the contract method 0x381fef6d.
//
// Solidity: function wrappedTokenBytecodeStorer() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCaller) WrappedTokenBytecodeStorer(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "wrappedTokenBytecodeStorer")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// WrappedTokenBytecodeStorer is a free data retrieval call binding the contract method 0x381fef6d.
//
// Solidity: function wrappedTokenBytecodeStorer() view returns(address)
func (_Agglayerbridge *AgglayerbridgeSession) WrappedTokenBytecodeStorer() (common.Address, error) {
	return _Agglayerbridge.Contract.WrappedTokenBytecodeStorer(&_Agglayerbridge.CallOpts)
}

// WrappedTokenBytecodeStorer is a free data retrieval call binding the contract method 0x381fef6d.
//
// Solidity: function wrappedTokenBytecodeStorer() view returns(address)
func (_Agglayerbridge *AgglayerbridgeCallerSession) WrappedTokenBytecodeStorer() (common.Address, error) {
	return _Agglayerbridge.Contract.WrappedTokenBytecodeStorer(&_Agglayerbridge.CallOpts)
}

// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d.
//
// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress)
func (_Agglayerbridge *AgglayerbridgeCaller) WrappedTokenToTokenInfo(opts *bind.CallOpts, arg0 common.Address) (struct {
	OriginNetwork      uint32
	OriginTokenAddress common.Address
}, error) {
	var out []interface{}
	err := _Agglayerbridge.contract.Call(opts, &out, "wrappedTokenToTokenInfo", arg0)

	outstruct := new(struct {
		OriginNetwork      uint32
		OriginTokenAddress common.Address
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.OriginNetwork = *abi.ConvertType(out[0], new(uint32)).(*uint32)
	outstruct.OriginTokenAddress = *abi.ConvertType(out[1], new(common.Address)).(*common.Address)

	return *outstruct, err

}

// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d.
//
// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress)
func (_Agglayerbridge *AgglayerbridgeSession) WrappedTokenToTokenInfo(arg0 common.Address) (struct {
	OriginNetwork      uint32
	OriginTokenAddress common.Address
}, error) {
	return _Agglayerbridge.Contract.WrappedTokenToTokenInfo(&_Agglayerbridge.CallOpts, arg0)
}

// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d.
//
// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress)
func (_Agglayerbridge *AgglayerbridgeCallerSession) WrappedTokenToTokenInfo(arg0 common.Address) (struct {
	OriginNetwork      uint32
	OriginTokenAddress common.Address
}, error) {
	return _Agglayerbridge.Contract.WrappedTokenToTokenInfo(&_Agglayerbridge.CallOpts, arg0)
}

// AcceptProxiedTokensManagerRole is a paid mutator transaction binding the contract method 0x8c668f1c.
//
// Solidity: function acceptProxiedTokensManagerRole() returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) AcceptProxiedTokensManagerRole(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "acceptProxiedTokensManagerRole")
}

// AcceptProxiedTokensManagerRole is a paid mutator transaction binding the contract method 0x8c668f1c.
//
// Solidity: function acceptProxiedTokensManagerRole() returns()
func (_Agglayerbridge *AgglayerbridgeSession) AcceptProxiedTokensManagerRole() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.AcceptProxiedTokensManagerRole(&_Agglayerbridge.TransactOpts)
}

// AcceptProxiedTokensManagerRole is a paid mutator transaction binding the contract method 0x8c668f1c.
//
// Solidity: function acceptProxiedTokensManagerRole() returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) AcceptProxiedTokensManagerRole() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.AcceptProxiedTokensManagerRole(&_Agglayerbridge.TransactOpts)
}

// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5.
//
// Solidity: function activateEmergencyState() returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) ActivateEmergencyState(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "activateEmergencyState")
}

// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5.
//
// Solidity: function activateEmergencyState() returns()
func (_Agglayerbridge *AgglayerbridgeSession) ActivateEmergencyState() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.ActivateEmergencyState(&_Agglayerbridge.TransactOpts)
}

// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5.
//
// Solidity: function activateEmergencyState() returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) ActivateEmergencyState() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.ActivateEmergencyState(&_Agglayerbridge.TransactOpts)
}

// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579.
//
// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) BridgeAsset(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "bridgeAsset", destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData)
}

// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579.
//
// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns()
func (_Agglayerbridge *AgglayerbridgeSession) BridgeAsset(destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.BridgeAsset(&_Agglayerbridge.TransactOpts, destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData)
}

// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579.
//
// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) BridgeAsset(destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.BridgeAsset(&_Agglayerbridge.TransactOpts, destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData)
}

// BridgeMessage is a paid mutator transaction binding the contract method 0x240ff378.
//
// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) BridgeMessage(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "bridgeMessage", destinationNetwork, destinationAddress, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessage is a paid mutator transaction binding the contract method 0x240ff378.
//
// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns()
func (_Agglayerbridge *AgglayerbridgeSession) BridgeMessage(destinationNetwork uint32, destinationAddress common.Address, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.BridgeMessage(&_Agglayerbridge.TransactOpts, destinationNetwork, destinationAddress, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessage is a paid mutator transaction binding the contract method 0x240ff378.
//
// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) BridgeMessage(destinationNetwork uint32, destinationAddress common.Address, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.BridgeMessage(&_Agglayerbridge.TransactOpts, destinationNetwork, destinationAddress, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessageWETH is a paid mutator transaction binding the contract method 0xb8b284d0.
//
// Solidity: function bridgeMessageWETH(uint32 destinationNetwork, address destinationAddress, uint256 amountWETH, bool forceUpdateGlobalExitRoot, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) BridgeMessageWETH(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, amountWETH *big.Int, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "bridgeMessageWETH", destinationNetwork, destinationAddress, amountWETH, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessageWETH is a paid mutator transaction binding the contract method 0xb8b284d0.
//
// Solidity: function bridgeMessageWETH(uint32 destinationNetwork, address destinationAddress, uint256 amountWETH, bool forceUpdateGlobalExitRoot, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeSession) BridgeMessageWETH(destinationNetwork uint32, destinationAddress common.Address, amountWETH *big.Int, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.BridgeMessageWETH(&_Agglayerbridge.TransactOpts, destinationNetwork, destinationAddress, amountWETH, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessageWETH is a paid mutator transaction binding the contract method 0xb8b284d0.
//
// Solidity: function bridgeMessageWETH(uint32 destinationNetwork, address destinationAddress, uint256 amountWETH, bool forceUpdateGlobalExitRoot, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) BridgeMessageWETH(destinationNetwork uint32, destinationAddress common.Address, amountWETH *big.Int, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.BridgeMessageWETH(&_Agglayerbridge.TransactOpts, destinationNetwork, destinationAddress, amountWETH, forceUpdateGlobalExitRoot, metadata)
}

// ClaimAsset is a paid mutator transaction binding the contract method 0xccaa2d11.
//
// Solidity: function claimAsset(bytes32[32] smtProofLocalExitRoot, bytes32[32] smtProofRollupExitRoot, uint256 globalIndex, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) ClaimAsset(opts *bind.TransactOpts, smtProofLocalExitRoot [32][32]byte, smtProofRollupExitRoot [32][32]byte, globalIndex *big.Int, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "claimAsset", smtProofLocalExitRoot, smtProofRollupExitRoot, globalIndex, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimAsset is a paid mutator transaction binding the contract method 0xccaa2d11.
//
// Solidity: function claimAsset(bytes32[32] smtProofLocalExitRoot, bytes32[32] smtProofRollupExitRoot, uint256 globalIndex, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeSession) ClaimAsset(smtProofLocalExitRoot [32][32]byte, smtProofRollupExitRoot [32][32]byte, globalIndex *big.Int, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.ClaimAsset(&_Agglayerbridge.TransactOpts, smtProofLocalExitRoot, smtProofRollupExitRoot, globalIndex, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimAsset is a paid mutator transaction binding the contract method 0xccaa2d11.
//
// Solidity: function claimAsset(bytes32[32] smtProofLocalExitRoot, bytes32[32] smtProofRollupExitRoot, uint256 globalIndex, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) ClaimAsset(smtProofLocalExitRoot [32][32]byte, smtProofRollupExitRoot [32][32]byte, globalIndex *big.Int, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.ClaimAsset(&_Agglayerbridge.TransactOpts, smtProofLocalExitRoot, smtProofRollupExitRoot, globalIndex, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimMessage is a paid mutator transaction binding the contract method 0xf5efcd79.
//
// Solidity: function claimMessage(bytes32[32] smtProofLocalExitRoot, bytes32[32] smtProofRollupExitRoot, uint256 globalIndex, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) ClaimMessage(opts *bind.TransactOpts, smtProofLocalExitRoot [32][32]byte, smtProofRollupExitRoot [32][32]byte, globalIndex *big.Int, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "claimMessage", smtProofLocalExitRoot, smtProofRollupExitRoot, globalIndex, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimMessage is a paid mutator transaction binding the contract method 0xf5efcd79.
//
// Solidity: function claimMessage(bytes32[32] smtProofLocalExitRoot, bytes32[32] smtProofRollupExitRoot, uint256 globalIndex, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeSession) ClaimMessage(smtProofLocalExitRoot [32][32]byte, smtProofRollupExitRoot [32][32]byte, globalIndex *big.Int, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.ClaimMessage(&_Agglayerbridge.TransactOpts, smtProofLocalExitRoot, smtProofRollupExitRoot, globalIndex, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimMessage is a paid mutator transaction binding the contract method 0xf5efcd79.
//
// Solidity: function claimMessage(bytes32[32] smtProofLocalExitRoot, bytes32[32] smtProofRollupExitRoot, uint256 globalIndex, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) ClaimMessage(smtProofLocalExitRoot [32][32]byte, smtProofRollupExitRoot [32][32]byte, globalIndex *big.Int, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.ClaimMessage(&_Agglayerbridge.TransactOpts, smtProofLocalExitRoot, smtProofRollupExitRoot, globalIndex, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976.
//
// Solidity: function deactivateEmergencyState() returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) DeactivateEmergencyState(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "deactivateEmergencyState")
}

// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976.
//
// Solidity: function deactivateEmergencyState() returns()
func (_Agglayerbridge *AgglayerbridgeSession) DeactivateEmergencyState() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.DeactivateEmergencyState(&_Agglayerbridge.TransactOpts)
}

// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976.
//
// Solidity: function deactivateEmergencyState() returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) DeactivateEmergencyState() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.DeactivateEmergencyState(&_Agglayerbridge.TransactOpts)
}

// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c.
//
// Solidity: function initialize() returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "initialize")
}

// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c.
//
// Solidity: function initialize() returns()
func (_Agglayerbridge *AgglayerbridgeSession) Initialize() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.Initialize(&_Agglayerbridge.TransactOpts)
}

// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c.
//
// Solidity: function initialize() returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) Initialize() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.Initialize(&_Agglayerbridge.TransactOpts)
}

// Initialize0 is a paid mutator transaction binding the contract method 0xf811bff7.
//
// Solidity: function initialize(uint32 _networkID, address _gasTokenAddress, uint32 _gasTokenNetwork, address _globalExitRootManager, address _polygonRollupManager, bytes _gasTokenMetadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) Initialize0(opts *bind.TransactOpts, _networkID uint32, _gasTokenAddress common.Address, _gasTokenNetwork uint32, _globalExitRootManager common.Address, _polygonRollupManager common.Address, _gasTokenMetadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "initialize0", _networkID, _gasTokenAddress, _gasTokenNetwork, _globalExitRootManager, _polygonRollupManager, _gasTokenMetadata)
}

// Initialize0 is a paid mutator transaction binding the contract method 0xf811bff7.
//
// Solidity: function initialize(uint32 _networkID, address _gasTokenAddress, uint32 _gasTokenNetwork, address _globalExitRootManager, address _polygonRollupManager, bytes _gasTokenMetadata) returns()
func (_Agglayerbridge *AgglayerbridgeSession) Initialize0(_networkID uint32, _gasTokenAddress common.Address, _gasTokenNetwork uint32, _globalExitRootManager common.Address, _polygonRollupManager common.Address, _gasTokenMetadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.Initialize0(&_Agglayerbridge.TransactOpts, _networkID, _gasTokenAddress, _gasTokenNetwork, _globalExitRootManager, _polygonRollupManager, _gasTokenMetadata)
}

// Initialize0 is a paid mutator transaction binding the contract method 0xf811bff7.
//
// Solidity: function initialize(uint32 _networkID, address _gasTokenAddress, uint32 _gasTokenNetwork, address _globalExitRootManager, address _polygonRollupManager, bytes _gasTokenMetadata) returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) Initialize0(_networkID uint32, _gasTokenAddress common.Address, _gasTokenNetwork uint32, _globalExitRootManager common.Address, _polygonRollupManager common.Address, _gasTokenMetadata []byte) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.Initialize0(&_Agglayerbridge.TransactOpts, _networkID, _gasTokenAddress, _gasTokenNetwork, _globalExitRootManager, _polygonRollupManager, _gasTokenMetadata)
}

// TransferProxiedTokensManagerRole is a paid mutator transaction binding the contract method 0x8bd309c3.
//
// Solidity: function transferProxiedTokensManagerRole(address newProxiedTokensManager) returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) TransferProxiedTokensManagerRole(opts *bind.TransactOpts, newProxiedTokensManager common.Address) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "transferProxiedTokensManagerRole", newProxiedTokensManager)
}

// TransferProxiedTokensManagerRole is a paid mutator transaction binding the contract method 0x8bd309c3.
//
// Solidity: function transferProxiedTokensManagerRole(address newProxiedTokensManager) returns()
func (_Agglayerbridge *AgglayerbridgeSession) TransferProxiedTokensManagerRole(newProxiedTokensManager common.Address) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.TransferProxiedTokensManagerRole(&_Agglayerbridge.TransactOpts, newProxiedTokensManager)
}

// TransferProxiedTokensManagerRole is a paid mutator transaction binding the contract method 0x8bd309c3.
//
// Solidity: function transferProxiedTokensManagerRole(address newProxiedTokensManager) returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) TransferProxiedTokensManagerRole(newProxiedTokensManager common.Address) (*types.Transaction, error) {
	return _Agglayerbridge.Contract.TransferProxiedTokensManagerRole(&_Agglayerbridge.TransactOpts, newProxiedTokensManager)
}

// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97.
//
// Solidity: function updateGlobalExitRoot() returns()
func (_Agglayerbridge *AgglayerbridgeTransactor) UpdateGlobalExitRoot(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Agglayerbridge.contract.Transact(opts, "updateGlobalExitRoot")
}

// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97.
//
// Solidity: function updateGlobalExitRoot() returns()
func (_Agglayerbridge *AgglayerbridgeSession) UpdateGlobalExitRoot() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.UpdateGlobalExitRoot(&_Agglayerbridge.TransactOpts)
}

// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97.
//
// Solidity: function updateGlobalExitRoot() returns()
func (_Agglayerbridge *AgglayerbridgeTransactorSession) UpdateGlobalExitRoot() (*types.Transaction, error) {
	return _Agglayerbridge.Contract.UpdateGlobalExitRoot(&_Agglayerbridge.TransactOpts)
}

// AgglayerbridgeAcceptProxiedTokensManagerRoleIterator is returned from FilterAcceptProxiedTokensManagerRole and is used to iterate over the raw logs and unpacked data for AcceptProxiedTokensManagerRole events raised by the Agglayerbridge contract.
type AgglayerbridgeAcceptProxiedTokensManagerRoleIterator struct {
	Event *AgglayerbridgeAcceptProxiedTokensManagerRole // 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 *AgglayerbridgeAcceptProxiedTokensManagerRoleIterator) 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(AgglayerbridgeAcceptProxiedTokensManagerRole)
			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(AgglayerbridgeAcceptProxiedTokensManagerRole)
		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 *AgglayerbridgeAcceptProxiedTokensManagerRoleIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeAcceptProxiedTokensManagerRoleIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeAcceptProxiedTokensManagerRole represents a AcceptProxiedTokensManagerRole event raised by the Agglayerbridge contract.
type AgglayerbridgeAcceptProxiedTokensManagerRole struct {
	OldProxiedTokensManager common.Address
	NewProxiedTokensManager common.Address
	Raw                     types.Log // Blockchain specific contextual infos
}

// FilterAcceptProxiedTokensManagerRole is a free log retrieval operation binding the contract event 0xa9da6fb8c39e9c2fafda878eac316815987bdc948d241ba6d75ed035e0e829f2.
//
// Solidity: event AcceptProxiedTokensManagerRole(address oldProxiedTokensManager, address newProxiedTokensManager)
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterAcceptProxiedTokensManagerRole(opts *bind.FilterOpts) (*AgglayerbridgeAcceptProxiedTokensManagerRoleIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "AcceptProxiedTokensManagerRole")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeAcceptProxiedTokensManagerRoleIterator{contract: _Agglayerbridge.contract, event: "AcceptProxiedTokensManagerRole", logs: logs, sub: sub}, nil
}

// WatchAcceptProxiedTokensManagerRole is a free log subscription operation binding the contract event 0xa9da6fb8c39e9c2fafda878eac316815987bdc948d241ba6d75ed035e0e829f2.
//
// Solidity: event AcceptProxiedTokensManagerRole(address oldProxiedTokensManager, address newProxiedTokensManager)
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchAcceptProxiedTokensManagerRole(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeAcceptProxiedTokensManagerRole) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "AcceptProxiedTokensManagerRole")
	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(AgglayerbridgeAcceptProxiedTokensManagerRole)
				if err := _Agglayerbridge.contract.UnpackLog(event, "AcceptProxiedTokensManagerRole", 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
}

// ParseAcceptProxiedTokensManagerRole is a log parse operation binding the contract event 0xa9da6fb8c39e9c2fafda878eac316815987bdc948d241ba6d75ed035e0e829f2.
//
// Solidity: event AcceptProxiedTokensManagerRole(address oldProxiedTokensManager, address newProxiedTokensManager)
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseAcceptProxiedTokensManagerRole(log types.Log) (*AgglayerbridgeAcceptProxiedTokensManagerRole, error) {
	event := new(AgglayerbridgeAcceptProxiedTokensManagerRole)
	if err := _Agglayerbridge.contract.UnpackLog(event, "AcceptProxiedTokensManagerRole", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeBridgeEventIterator is returned from FilterBridgeEvent and is used to iterate over the raw logs and unpacked data for BridgeEvent events raised by the Agglayerbridge contract.
type AgglayerbridgeBridgeEventIterator struct {
	Event *AgglayerbridgeBridgeEvent // 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 *AgglayerbridgeBridgeEventIterator) 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(AgglayerbridgeBridgeEvent)
			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(AgglayerbridgeBridgeEvent)
		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 *AgglayerbridgeBridgeEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeBridgeEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeBridgeEvent represents a BridgeEvent event raised by the Agglayerbridge contract.
type AgglayerbridgeBridgeEvent struct {
	LeafType           uint8
	OriginNetwork      uint32
	OriginAddress      common.Address
	DestinationNetwork uint32
	DestinationAddress common.Address
	Amount             *big.Int
	Metadata           []byte
	DepositCount       uint32
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterBridgeEvent is a free log retrieval operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b.
//
// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount)
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterBridgeEvent(opts *bind.FilterOpts) (*AgglayerbridgeBridgeEventIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "BridgeEvent")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeBridgeEventIterator{contract: _Agglayerbridge.contract, event: "BridgeEvent", logs: logs, sub: sub}, nil
}

// WatchBridgeEvent is a free log subscription operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b.
//
// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount)
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchBridgeEvent(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeBridgeEvent) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "BridgeEvent")
	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(AgglayerbridgeBridgeEvent)
				if err := _Agglayerbridge.contract.UnpackLog(event, "BridgeEvent", 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
}

// ParseBridgeEvent is a log parse operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b.
//
// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount)
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseBridgeEvent(log types.Log) (*AgglayerbridgeBridgeEvent, error) {
	event := new(AgglayerbridgeBridgeEvent)
	if err := _Agglayerbridge.contract.UnpackLog(event, "BridgeEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeClaimEventIterator is returned from FilterClaimEvent and is used to iterate over the raw logs and unpacked data for ClaimEvent events raised by the Agglayerbridge contract.
type AgglayerbridgeClaimEventIterator struct {
	Event *AgglayerbridgeClaimEvent // 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 *AgglayerbridgeClaimEventIterator) 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(AgglayerbridgeClaimEvent)
			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(AgglayerbridgeClaimEvent)
		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 *AgglayerbridgeClaimEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeClaimEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeClaimEvent represents a ClaimEvent event raised by the Agglayerbridge contract.
type AgglayerbridgeClaimEvent struct {
	GlobalIndex        *big.Int
	OriginNetwork      uint32
	OriginAddress      common.Address
	DestinationAddress common.Address
	Amount             *big.Int
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterClaimEvent is a free log retrieval operation binding the contract event 0x1df3f2a973a00d6635911755c260704e95e8a5876997546798770f76396fda4d.
//
// Solidity: event ClaimEvent(uint256 globalIndex, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount)
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterClaimEvent(opts *bind.FilterOpts) (*AgglayerbridgeClaimEventIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "ClaimEvent")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeClaimEventIterator{contract: _Agglayerbridge.contract, event: "ClaimEvent", logs: logs, sub: sub}, nil
}

// WatchClaimEvent is a free log subscription operation binding the contract event 0x1df3f2a973a00d6635911755c260704e95e8a5876997546798770f76396fda4d.
//
// Solidity: event ClaimEvent(uint256 globalIndex, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount)
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchClaimEvent(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeClaimEvent) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "ClaimEvent")
	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(AgglayerbridgeClaimEvent)
				if err := _Agglayerbridge.contract.UnpackLog(event, "ClaimEvent", 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
}

// ParseClaimEvent is a log parse operation binding the contract event 0x1df3f2a973a00d6635911755c260704e95e8a5876997546798770f76396fda4d.
//
// Solidity: event ClaimEvent(uint256 globalIndex, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount)
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseClaimEvent(log types.Log) (*AgglayerbridgeClaimEvent, error) {
	event := new(AgglayerbridgeClaimEvent)
	if err := _Agglayerbridge.contract.UnpackLog(event, "ClaimEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeEmergencyStateActivatedIterator is returned from FilterEmergencyStateActivated and is used to iterate over the raw logs and unpacked data for EmergencyStateActivated events raised by the Agglayerbridge contract.
type AgglayerbridgeEmergencyStateActivatedIterator struct {
	Event *AgglayerbridgeEmergencyStateActivated // 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 *AgglayerbridgeEmergencyStateActivatedIterator) 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(AgglayerbridgeEmergencyStateActivated)
			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(AgglayerbridgeEmergencyStateActivated)
		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 *AgglayerbridgeEmergencyStateActivatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeEmergencyStateActivatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeEmergencyStateActivated represents a EmergencyStateActivated event raised by the Agglayerbridge contract.
type AgglayerbridgeEmergencyStateActivated struct {
	Raw types.Log // Blockchain specific contextual infos
}

// FilterEmergencyStateActivated is a free log retrieval operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497.
//
// Solidity: event EmergencyStateActivated()
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterEmergencyStateActivated(opts *bind.FilterOpts) (*AgglayerbridgeEmergencyStateActivatedIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "EmergencyStateActivated")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeEmergencyStateActivatedIterator{contract: _Agglayerbridge.contract, event: "EmergencyStateActivated", logs: logs, sub: sub}, nil
}

// WatchEmergencyStateActivated is a free log subscription operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497.
//
// Solidity: event EmergencyStateActivated()
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchEmergencyStateActivated(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeEmergencyStateActivated) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "EmergencyStateActivated")
	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(AgglayerbridgeEmergencyStateActivated)
				if err := _Agglayerbridge.contract.UnpackLog(event, "EmergencyStateActivated", 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
}

// ParseEmergencyStateActivated is a log parse operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497.
//
// Solidity: event EmergencyStateActivated()
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseEmergencyStateActivated(log types.Log) (*AgglayerbridgeEmergencyStateActivated, error) {
	event := new(AgglayerbridgeEmergencyStateActivated)
	if err := _Agglayerbridge.contract.UnpackLog(event, "EmergencyStateActivated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeEmergencyStateDeactivatedIterator is returned from FilterEmergencyStateDeactivated and is used to iterate over the raw logs and unpacked data for EmergencyStateDeactivated events raised by the Agglayerbridge contract.
type AgglayerbridgeEmergencyStateDeactivatedIterator struct {
	Event *AgglayerbridgeEmergencyStateDeactivated // 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 *AgglayerbridgeEmergencyStateDeactivatedIterator) 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(AgglayerbridgeEmergencyStateDeactivated)
			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(AgglayerbridgeEmergencyStateDeactivated)
		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 *AgglayerbridgeEmergencyStateDeactivatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeEmergencyStateDeactivatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeEmergencyStateDeactivated represents a EmergencyStateDeactivated event raised by the Agglayerbridge contract.
type AgglayerbridgeEmergencyStateDeactivated struct {
	Raw types.Log // Blockchain specific contextual infos
}

// FilterEmergencyStateDeactivated is a free log retrieval operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3.
//
// Solidity: event EmergencyStateDeactivated()
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterEmergencyStateDeactivated(opts *bind.FilterOpts) (*AgglayerbridgeEmergencyStateDeactivatedIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "EmergencyStateDeactivated")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeEmergencyStateDeactivatedIterator{contract: _Agglayerbridge.contract, event: "EmergencyStateDeactivated", logs: logs, sub: sub}, nil
}

// WatchEmergencyStateDeactivated is a free log subscription operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3.
//
// Solidity: event EmergencyStateDeactivated()
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchEmergencyStateDeactivated(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeEmergencyStateDeactivated) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "EmergencyStateDeactivated")
	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(AgglayerbridgeEmergencyStateDeactivated)
				if err := _Agglayerbridge.contract.UnpackLog(event, "EmergencyStateDeactivated", 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
}

// ParseEmergencyStateDeactivated is a log parse operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3.
//
// Solidity: event EmergencyStateDeactivated()
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseEmergencyStateDeactivated(log types.Log) (*AgglayerbridgeEmergencyStateDeactivated, error) {
	event := new(AgglayerbridgeEmergencyStateDeactivated)
	if err := _Agglayerbridge.contract.UnpackLog(event, "EmergencyStateDeactivated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Agglayerbridge contract.
type AgglayerbridgeInitializedIterator struct {
	Event *AgglayerbridgeInitialized // 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 *AgglayerbridgeInitializedIterator) 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(AgglayerbridgeInitialized)
			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(AgglayerbridgeInitialized)
		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 *AgglayerbridgeInitializedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeInitializedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeInitialized represents a Initialized event raised by the Agglayerbridge contract.
type AgglayerbridgeInitialized 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 (_Agglayerbridge *AgglayerbridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*AgglayerbridgeInitializedIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "Initialized")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeInitializedIterator{contract: _Agglayerbridge.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 (_Agglayerbridge *AgglayerbridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeInitialized) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.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(AgglayerbridgeInitialized)
				if err := _Agglayerbridge.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 (_Agglayerbridge *AgglayerbridgeFilterer) ParseInitialized(log types.Log) (*AgglayerbridgeInitialized, error) {
	event := new(AgglayerbridgeInitialized)
	if err := _Agglayerbridge.contract.UnpackLog(event, "Initialized", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeNewWrappedTokenIterator is returned from FilterNewWrappedToken and is used to iterate over the raw logs and unpacked data for NewWrappedToken events raised by the Agglayerbridge contract.
type AgglayerbridgeNewWrappedTokenIterator struct {
	Event *AgglayerbridgeNewWrappedToken // 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 *AgglayerbridgeNewWrappedTokenIterator) 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(AgglayerbridgeNewWrappedToken)
			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(AgglayerbridgeNewWrappedToken)
		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 *AgglayerbridgeNewWrappedTokenIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeNewWrappedTokenIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeNewWrappedToken represents a NewWrappedToken event raised by the Agglayerbridge contract.
type AgglayerbridgeNewWrappedToken struct {
	OriginNetwork       uint32
	OriginTokenAddress  common.Address
	WrappedTokenAddress common.Address
	Metadata            []byte
	Raw                 types.Log // Blockchain specific contextual infos
}

// FilterNewWrappedToken is a free log retrieval operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39.
//
// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata)
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterNewWrappedToken(opts *bind.FilterOpts) (*AgglayerbridgeNewWrappedTokenIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "NewWrappedToken")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeNewWrappedTokenIterator{contract: _Agglayerbridge.contract, event: "NewWrappedToken", logs: logs, sub: sub}, nil
}

// WatchNewWrappedToken is a free log subscription operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39.
//
// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata)
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchNewWrappedToken(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeNewWrappedToken) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "NewWrappedToken")
	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(AgglayerbridgeNewWrappedToken)
				if err := _Agglayerbridge.contract.UnpackLog(event, "NewWrappedToken", 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
}

// ParseNewWrappedToken is a log parse operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39.
//
// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata)
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseNewWrappedToken(log types.Log) (*AgglayerbridgeNewWrappedToken, error) {
	event := new(AgglayerbridgeNewWrappedToken)
	if err := _Agglayerbridge.contract.UnpackLog(event, "NewWrappedToken", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AgglayerbridgeTransferProxiedTokensManagerRoleIterator is returned from FilterTransferProxiedTokensManagerRole and is used to iterate over the raw logs and unpacked data for TransferProxiedTokensManagerRole events raised by the Agglayerbridge contract.
type AgglayerbridgeTransferProxiedTokensManagerRoleIterator struct {
	Event *AgglayerbridgeTransferProxiedTokensManagerRole // 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 *AgglayerbridgeTransferProxiedTokensManagerRoleIterator) 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(AgglayerbridgeTransferProxiedTokensManagerRole)
			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(AgglayerbridgeTransferProxiedTokensManagerRole)
		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 *AgglayerbridgeTransferProxiedTokensManagerRoleIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *AgglayerbridgeTransferProxiedTokensManagerRoleIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// AgglayerbridgeTransferProxiedTokensManagerRole represents a TransferProxiedTokensManagerRole event raised by the Agglayerbridge contract.
type AgglayerbridgeTransferProxiedTokensManagerRole struct {
	CurrentProxiedTokensManager common.Address
	NewProxiedTokensManager     common.Address
	Raw                         types.Log // Blockchain specific contextual infos
}

// FilterTransferProxiedTokensManagerRole is a free log retrieval operation binding the contract event 0x0a34baa3feb299aef9c05cb59c6e0c8e7c0bcc65cbf0a647e7a7c8a2411591e2.
//
// Solidity: event TransferProxiedTokensManagerRole(address currentProxiedTokensManager, address newProxiedTokensManager)
func (_Agglayerbridge *AgglayerbridgeFilterer) FilterTransferProxiedTokensManagerRole(opts *bind.FilterOpts) (*AgglayerbridgeTransferProxiedTokensManagerRoleIterator, error) {

	logs, sub, err := _Agglayerbridge.contract.FilterLogs(opts, "TransferProxiedTokensManagerRole")
	if err != nil {
		return nil, err
	}
	return &AgglayerbridgeTransferProxiedTokensManagerRoleIterator{contract: _Agglayerbridge.contract, event: "TransferProxiedTokensManagerRole", logs: logs, sub: sub}, nil
}

// WatchTransferProxiedTokensManagerRole is a free log subscription operation binding the contract event 0x0a34baa3feb299aef9c05cb59c6e0c8e7c0bcc65cbf0a647e7a7c8a2411591e2.
//
// Solidity: event TransferProxiedTokensManagerRole(address currentProxiedTokensManager, address newProxiedTokensManager)
func (_Agglayerbridge *AgglayerbridgeFilterer) WatchTransferProxiedTokensManagerRole(opts *bind.WatchOpts, sink chan<- *AgglayerbridgeTransferProxiedTokensManagerRole) (event.Subscription, error) {

	logs, sub, err := _Agglayerbridge.contract.WatchLogs(opts, "TransferProxiedTokensManagerRole")
	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(AgglayerbridgeTransferProxiedTokensManagerRole)
				if err := _Agglayerbridge.contract.UnpackLog(event, "TransferProxiedTokensManagerRole", 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
}

// ParseTransferProxiedTokensManagerRole is a log parse operation binding the contract event 0x0a34baa3feb299aef9c05cb59c6e0c8e7c0bcc65cbf0a647e7a7c8a2411591e2.
//
// Solidity: event TransferProxiedTokensManagerRole(address currentProxiedTokensManager, address newProxiedTokensManager)
func (_Agglayerbridge *AgglayerbridgeFilterer) ParseTransferProxiedTokensManagerRole(log types.Log) (*AgglayerbridgeTransferProxiedTokensManagerRole, error) {
	event := new(AgglayerbridgeTransferProxiedTokensManagerRole)
	if err := _Agglayerbridge.contract.UnpackLog(event, "TransferProxiedTokensManagerRole", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
